@cerbur/clutch-dsh-worktree 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -32
- package/README.zh.md +50 -29
- package/lib/client/WorktreeSurface.js +2 -2
- package/lib/client/WorktreeSurface.js.map +1 -1
- package/lib/client/context/WorktreeContext.d.ts.map +1 -1
- package/lib/client/context/WorktreeContext.js +3 -2
- package/lib/client/context/WorktreeContext.js.map +1 -1
- package/lib/client/context/worktree-context-store.d.ts +3 -2
- package/lib/client/context/worktree-context-store.d.ts.map +1 -1
- package/lib/client/context/worktree-context-store.js +2 -1
- package/lib/client/context/worktree-context-store.js.map +1 -1
- package/lib/client/dashboard/OpenInAppButton.d.ts.map +1 -1
- package/lib/client/dashboard/OpenInAppButton.js +2 -1
- package/lib/client/dashboard/OpenInAppButton.js.map +1 -1
- package/lib/client/dashboard/WorktreeDashboard.d.ts +1 -1
- package/lib/client/dashboard/WorktreeDashboard.d.ts.map +1 -1
- package/lib/client/dashboard/WorktreeDashboard.js +5 -3
- package/lib/client/dashboard/WorktreeDashboard.js.map +1 -1
- package/lib/client/dashboard/dashboard-selection.d.ts +3 -2
- package/lib/client/dashboard/dashboard-selection.d.ts.map +1 -1
- package/lib/client/dashboard/dashboard-selection.js +2 -1
- package/lib/client/dashboard/dashboard-selection.js.map +1 -1
- package/lib/client/dashboard/git/GitChangedFiles.js +1 -1
- package/lib/client/dashboard/git/GitChangedFiles.js.map +1 -1
- package/lib/client/dashboard/git/GitDiffView.js +1 -1
- package/lib/client/dashboard/git/GitDiffView.js.map +1 -1
- package/lib/client/dashboard/git/WorktreeGitOverview.js +1 -1
- package/lib/client/dashboard/git/WorktreeGitOverview.js.map +1 -1
- package/lib/client/dashboard/git/WorktreeGitPanel.d.ts.map +1 -1
- package/lib/client/dashboard/git/WorktreeGitPanel.js +1 -1
- package/lib/client/dashboard/git/WorktreeGitPanel.js.map +1 -1
- package/lib/client/dashboard/git/git-facts.d.ts +5 -1
- package/lib/client/dashboard/git/git-facts.d.ts.map +1 -1
- package/lib/client/dashboard/git/git-facts.js +9 -3
- package/lib/client/dashboard/git/git-facts.js.map +1 -1
- package/lib/client/dashboard/git/useWorktreeGitState.d.ts.map +1 -1
- package/lib/client/dashboard/git/useWorktreeGitState.js +13 -17
- package/lib/client/dashboard/git/useWorktreeGitState.js.map +1 -1
- package/lib/client/dashboard/open-in-app-controller.d.ts +1 -0
- package/lib/client/dashboard/open-in-app-controller.d.ts.map +1 -1
- package/lib/client/dashboard/open-in-app-controller.js +6 -24
- package/lib/client/dashboard/open-in-app-controller.js.map +1 -1
- package/lib/client/dashboard/vscode-url.d.ts.map +1 -1
- package/lib/client/dashboard/vscode-url.js +6 -3
- package/lib/client/dashboard/vscode-url.js.map +1 -1
- package/lib/client/dsh-icon-compat.d.ts +11 -0
- package/lib/client/dsh-icon-compat.d.ts.map +1 -0
- package/lib/client/dsh-icon-compat.js +12 -0
- package/lib/client/dsh-icon-compat.js.map +1 -0
- package/lib/client/dsh-icons.d.ts +20 -0
- package/lib/client/dsh-icons.d.ts.map +1 -0
- package/lib/client/dsh-icons.js +23 -0
- package/lib/client/dsh-icons.js.map +1 -0
- package/lib/client/entry.d.ts.map +1 -1
- package/lib/client/entry.js +6 -15
- package/lib/client/entry.js.map +1 -1
- package/lib/client/locales.js +6 -6
- package/lib/client/locales.js.map +1 -1
- package/lib/client/session/session-navigation.d.ts +8 -0
- package/lib/client/session/session-navigation.d.ts.map +1 -0
- package/lib/client/session/session-navigation.js +15 -0
- package/lib/client/session/session-navigation.js.map +1 -0
- package/lib/client/session/session-rename.d.ts +7 -0
- package/lib/client/session/session-rename.d.ts.map +1 -0
- package/lib/client/session/session-rename.js +18 -0
- package/lib/client/session/session-rename.js.map +1 -0
- package/lib/client/session/session-selection.d.ts +12 -0
- package/lib/client/session/session-selection.d.ts.map +1 -0
- package/lib/client/session/session-selection.js +8 -0
- package/lib/client/session/session-selection.js.map +1 -0
- package/lib/client/session/session-view.d.ts +3 -0
- package/lib/client/session/session-view.d.ts.map +1 -1
- package/lib/client/session/session-view.js +2 -1
- package/lib/client/session/session-view.js.map +1 -1
- package/lib/client/session/worktree-session.d.ts +2 -0
- package/lib/client/session/worktree-session.d.ts.map +1 -1
- package/lib/client/session/worktree-session.js +15 -3
- package/lib/client/session/worktree-session.js.map +1 -1
- package/lib/client/surface/components/ActiveWorktree.js +1 -1
- package/lib/client/surface/components/ActiveWorktree.js.map +1 -1
- package/lib/client/surface/components/ArchivedWorktree.js +1 -1
- package/lib/client/surface/components/ArchivedWorktree.js.map +1 -1
- package/lib/client/surface/components/ArchivedWorktrees.js +1 -1
- package/lib/client/surface/components/ArchivedWorktrees.js.map +1 -1
- package/lib/client/surface/components/SurfaceHeader.js +2 -1
- package/lib/client/surface/components/SurfaceHeader.js.map +1 -1
- package/lib/client/surface/components/WorkspaceTree.js +1 -1
- package/lib/client/surface/components/WorkspaceTree.js.map +1 -1
- package/lib/client/surface/components/rows.d.ts.map +1 -1
- package/lib/client/surface/components/rows.js +2 -1
- package/lib/client/surface/components/rows.js.map +1 -1
- package/lib/client/surface/state/useSurfaceSources.d.ts.map +1 -1
- package/lib/client/surface/state/useSurfaceSources.js +2 -1
- package/lib/client/surface/state/useSurfaceSources.js.map +1 -1
- package/lib/client/view/WorktreeModeAction.js +1 -1
- package/lib/client/view/WorktreeModeAction.js.map +1 -1
- package/lib/client/view/view-mode.d.ts +4 -1
- package/lib/client/view/view-mode.d.ts.map +1 -1
- package/lib/client/view/view-mode.js +2 -1
- package/lib/client/view/view-mode.js.map +1 -1
- package/lib/client/view/worktree-view-read.d.ts +3 -1
- package/lib/client/view/worktree-view-read.d.ts.map +1 -1
- package/lib/client/view/worktree-view-read.js +9 -2
- package/lib/client/view/worktree-view-read.js.map +1 -1
- package/lib/client/worktree-connection.d.ts +1 -0
- package/lib/client/worktree-connection.d.ts.map +1 -1
- package/lib/client/worktree-connection.js +4 -0
- package/lib/client/worktree-connection.js.map +1 -1
- package/lib/client.js +237 -125
- package/lib/client.js.map +1 -1
- package/lib/contract/index.contract.js +2 -0
- package/lib/contract/index.contract.js.map +1 -1
- package/lib/contract/index.d.ts +11 -1
- package/lib/contract/index.d.ts.map +1 -1
- package/lib/contract/index.js +2 -0
- package/lib/contract/index.js.map +1 -1
- package/lib/contract/windows-path.d.ts +11 -0
- package/lib/contract/windows-path.d.ts.map +1 -0
- package/lib/contract/windows-path.js +41 -0
- package/lib/contract/windows-path.js.map +1 -0
- package/lib/host/remote.d.ts.map +1 -1
- package/lib/host/remote.js +1 -0
- package/lib/host/remote.js.map +1 -1
- package/lib/host/service.d.ts +4 -0
- package/lib/host/service.d.ts.map +1 -1
- package/lib/host/service.js +6 -0
- package/lib/host/service.js.map +1 -1
- package/lib/host/worktree-instructions.d.ts.map +1 -1
- package/lib/host/worktree-instructions.js +12 -4
- package/lib/host/worktree-instructions.js.map +1 -1
- package/lib/host/worktree-permission-manager.d.ts.map +1 -1
- package/lib/host/worktree-permission-manager.js +5 -1
- package/lib/host/worktree-permission-manager.js.map +1 -1
- package/lib/manage/manager-git-history.d.ts.map +1 -1
- package/lib/manage/manager-git-history.js +215 -48
- package/lib/manage/manager-git-history.js.map +1 -1
- package/lib/manage/manager-sessions.js +1 -1
- package/lib/manage/manager-sessions.js.map +1 -1
- package/lib/manage/manager-support.d.ts +3 -2
- package/lib/manage/manager-support.d.ts.map +1 -1
- package/lib/manage/manager-support.js +5 -13
- package/lib/manage/manager-support.js.map +1 -1
- package/lib/manage/manager-worktree-lifecycle.d.ts.map +1 -1
- package/lib/manage/manager-worktree-lifecycle.js +11 -3
- package/lib/manage/manager-worktree-lifecycle.js.map +1 -1
- package/lib/manage/manager.d.ts +4 -0
- package/lib/manage/manager.d.ts.map +1 -1
- package/lib/manage/manager.js +61 -16
- package/lib/manage/manager.js.map +1 -1
- package/lib/provider/git/adapter.d.ts +2 -2
- package/lib/provider/git/adapter.d.ts.map +1 -1
- package/lib/provider/git/adapter.js +10 -7
- package/lib/provider/git/adapter.js.map +1 -1
- package/lib/provider/path-identity.d.ts +8 -0
- package/lib/provider/path-identity.d.ts.map +1 -0
- package/lib/provider/path-identity.js +62 -0
- package/lib/provider/path-identity.js.map +1 -0
- package/lib/provider/sidecar/mutation-lock.d.ts +4 -1
- package/lib/provider/sidecar/mutation-lock.d.ts.map +1 -1
- package/lib/provider/sidecar/mutation-lock.js +5 -11
- package/lib/provider/sidecar/mutation-lock.js.map +1 -1
- package/lib/provider/sidecar/process-liveness.d.ts +12 -0
- package/lib/provider/sidecar/process-liveness.d.ts.map +1 -0
- package/lib/provider/sidecar/process-liveness.js +39 -0
- package/lib/provider/sidecar/process-liveness.js.map +1 -0
- package/lib/provider/sidecar/sidecar-durability.d.ts +9 -0
- package/lib/provider/sidecar/sidecar-durability.d.ts.map +1 -0
- package/lib/provider/sidecar/sidecar-durability.js +36 -0
- package/lib/provider/sidecar/sidecar-durability.js.map +1 -0
- package/lib/provider/sidecar/sidecar-persistence.d.ts.map +1 -1
- package/lib/provider/sidecar/sidecar-persistence.js +2 -27
- package/lib/provider/sidecar/sidecar-persistence.js.map +1 -1
- package/lib/provider/sidecar/sidecar-schema.d.ts.map +1 -1
- package/lib/provider/sidecar/sidecar-schema.js +22 -5
- package/lib/provider/sidecar/sidecar-schema.js.map +1 -1
- package/lib/provider/transaction/support/paths.d.ts +2 -1
- package/lib/provider/transaction/support/paths.d.ts.map +1 -1
- package/lib/provider/transaction/support/paths.js +2 -12
- package/lib/provider/transaction/support/paths.js.map +1 -1
- package/lib/provider/types.d.ts +8 -6
- package/lib/provider/types.d.ts.map +1 -1
- package/lib/provider/types.js +1 -1
- package/lib/provider/types.js.map +1 -1
- package/lib/typert.host.js +296 -189
- package/lib/typert.remote-client.d.ts +2 -0
- package/lib/typert.remote-client.d.ts.map +1 -1
- package/lib/typert.remote-client.js +296 -189
- package/package.json +45 -44
package/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":["isRecord","HoverCard","styles","IconBranchOutline16","styles","IconBranchOutline16","Tooltip","styles","styles","HoverCard","_Fragment","RiskConfirmation","Modal","_Fragment","Button","styles","Input","_Fragment","_Fragment","_Fragment","emptyState","isRecord","normalizeIds","isMainWorktreeId","sessionStatusLabel","sessionTimeLabel","styles","StateDot","IconEditOutline16","IconTrashOutline16","IconChevronDownOutline14","IconChevronRightOutline14","IconFolderOpen16","IconFolderClose16","Menu","IconEllipsisOutline16","IconPlusOutline16","IconCopyOutline16","IconArchiveOutline20","IconRefreshOutline16","HoverCard","_Fragment","IconBranchOutline16","styles","IconBranchOutline16","styles","IconBranchOutline16","styles","IconArchiveOutline20","_Fragment","styles","IconBranchOutline16","Toast","styles","_Fragment","styles","Tooltip","IconSearchOutline16","IconCloseFill14","IconProjectAddOutline16","IconCloseOutline16","emptyState","styles","css","Menu","IconChevronDownOutline14","_Fragment","styles","normalizeBranch","primitives","styles","shortCommit","_Fragment","styles","IconFolderClose16","IconFolderOpen16","styles","_Fragment","shortCommit","styles","_Fragment","IconRightUpOutline16","styles","_Fragment","styles","styles","_Fragment","Tooltip","IconEditOutline16","Modal","Button","Input","IconSearchOutline16","IconBranchOutline16","IconCheckOutline16","StateDot","IconPanelLeftOutline16","IconCopyOutline16","isMainWorktreeId","isMainWorktreeId","isMainWorktreeId","_Fragment","styles","_Fragment"],"sources":["../../../node_modules/.pnpm/zustand@4.4.7_@types+react@18.3.31_immer@10.2.0_react@18.3.1/node_modules/zustand/esm/vanilla.mjs","../../../node_modules/.pnpm/zustand@4.4.7_@types+react@18.3.31_immer@10.2.0_react@18.3.1/node_modules/zustand/esm/middleware.mjs","../../../node_modules/.pnpm/immer@10.2.0/node_modules/immer/dist/immer.mjs","../../../node_modules/.pnpm/@deepseek-ai+dsh-client-store@0.1.2-rc.1_@deepseek-ai+cordis@4.0.1_@types+react@18.3.31_react@18.3.1/node_modules/@deepseek-ai/dsh-client-store/lib/index.js","client/locales.js","client/worktree-connection.js","client/context/WorktreeContext.js","client/view/view-mode-dispatch.js","client/view/WorktreeModeAction.js","client/dashboard/dashboard-icon.js","client/dashboard/DashboardHeaderAction.js","client/context/WorktreeHeroContext.js","client/surface/components/AccessConfirmation.js","client/view/worktree-error-copy.js","client/view/worktree-view-errors.js","client/view/worktree-view-actions.js","client/view/worktree-view-read.js","client/session/session-view.js","client/surface/selectors.js","client/surface/components/dialogs.js","client/surface/actions/worktree-cleanup-flow.js","client/surface/actions/lifecycle-commands.js","client/surface/components/LifecycleDialogs.js","client/surface/components/NativeDialogs.js","client/surface/components/RegistrationDialog.js","client/surface/shared.js","client/view/navigation.js","client/view/view-mode.js","client/view/worktree-expand-state.js","client/dashboard/dashboard-selection.js","client/surface/components/rows.js","client/surface/components/ActiveWorktree.js","client/surface/components/ArchivedWorktree.js","client/surface/components/ArchivedWorktrees.js","client/surface/components/WorkspaceTree.js","client/surface/notification-queue.js","client/surface/components/NotificationToasts.js","client/surface/components/SurfaceContent.js","client/surface/components/SurfaceHeader.js","client/session/worktree-session-order.js","client/surface/actions/useDragActions.js","client/surface/actions/useLifecycleActions.js","client/surface/state/useLifecycleState.js","client/surface/actions/useNativeActions.js","client/surface/state/useRegistrationState.js","client/session/worktree-session.js","client/surface/actions/useSessionActions.js","client/session/worktree-session-position.js","client/surface/state/useSessionExpansion.js","client/surface/state/useSessionOrdering.js","client/surface/state/useSurfaceMenus.js","client/surface/actions/useSurfaceMutation.js","client/surface/state/useSurfaceRefresh.js","client/overlay/overlay-bounds.js","client/overlay/sidebar-overlay-geometry.js","client/surface/state/useSurfaceSources.js","client/surface/actions/useWorktreeRegistration.js","client/session/session-labels.js","client/dashboard/vscode-url.js","client/dashboard/open-in-app-controller.js","client/dashboard/OpenInAppButton.js","client/dashboard/dashboard-overlay.js","client/dashboard/worktree-acquisition-facts.js","client/dashboard/WorktreeInstructions.js","client/dashboard/git/git-facts.js","client/dashboard/git/git-file-tree.js","client/dashboard/git/GitFileTypeIcon.js","client/dashboard/git/GitLineStats.js","client/dashboard/git/GitChangedFiles.js","client/dashboard/git/GitCommitList.js","client/dashboard/git/git-diff-parser.js","client/dashboard/git/GitDiffView.js","client/dashboard/git/git-column-split.js","client/dashboard/git/useGitPaneSplit.js","contract/index.js","client/dashboard/git/git-state-cache.js","client/dashboard/git/useWorktreeGitState.js","client/dashboard/git/WorktreeGitPanel.js","client/dashboard/git/WorktreeGitOverview.js","client/dashboard/WorktreeDashboard.js","client/dashboard/dashboard-sessions.js","client/dashboard/dashboard-navigation.js","client/dashboard/git/file-address.js","client/WorktreeSurface.js","client/overlay/WorktreeOverlay.js","client/context/worktree-context.js","client/context/worktree-context-store.js","client/view/view-mode-store.js","client/session/virtual-workspace-membership.js","client/permission/worktree-permission.js","client/permission/worktree-permission-icon.js","client/session/worktree-session-fork.js","client/entry.js"],"sourcesContent":["const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, subscribe, destroy };\n state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.\"\n );\n }\n return createStore(createState);\n};\n\nexport { createStore, vanilla as default };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...a) => api.dispatch(...a), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api)\n return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && enabled) {\n console.warn(\n \"[zustand devtools middleware] Please install/enable Redux devtools extension\"\n );\n }\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = (state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording)\n return r;\n const action = nameOrAction === void 0 ? { type: anonymousActionType || \"anonymous\" } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...a) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && a[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...a);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format. \n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools)\n return;\n if (typeof api.dispatch !== \"function\")\n return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState)\n return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, f) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0)\n f(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = (selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n };\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nconst combine = (initialState, create) => (...a) => Object.assign({}, initialState, create(...a));\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(\n name,\n JSON.stringify(newValue, options == null ? void 0 : options.replacer)\n ),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst oldImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n getStorage: () => localStorage,\n serialize: JSON.stringify,\n deserialize: JSON.parse,\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage;\n try {\n storage = options.getStorage();\n } catch (e) {\n }\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const thenableSerialize = toThenable(options.serialize);\n const setItem = () => {\n const state = options.partialize({ ...get() });\n let errorInSync;\n const thenable = thenableSerialize({ state, version: options.version }).then(\n (serializedValue) => storage.setItem(options.name, serializedValue)\n ).catch((e) => {\n errorInSync = e;\n });\n if (errorInSync) {\n throw errorInSync;\n }\n return thenable;\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n let stateFromStorage;\n const hydrate = () => {\n var _a;\n if (!storage)\n return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => cb(get()));\n const postRehydrationCallback = ((_a = options.onRehydrateStorage) == null ? void 0 : _a.call(options, get())) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((storageValue) => {\n if (storageValue) {\n return options.deserialize(storageValue);\n }\n }).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.getStorage) {\n storage = newOptions.getStorage();\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n hydrate();\n return stateFromStorage || configResult;\n};\nconst newImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage)\n return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persistImpl = (config, baseOptions) => {\n if (\"getStorage\" in baseOptions || \"serialize\" in baseOptions || \"deserialize\" in baseOptions) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead.\"\n );\n }\n return oldImpl(config, baseOptions);\n }\n return newImpl(config, baseOptions);\n};\nconst persist = persistImpl;\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector };\n","// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n // All error codes, starting by 0:\n function(plugin) {\n return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n },\n function(thing) {\n return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n },\n \"This object has been frozen and should not be mutated\",\n function(data) {\n return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n },\n \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n \"Immer forbids circular references\",\n \"The first or second argument to `produce` must be a function\",\n \"The third argument to `produce` must be a function or undefined\",\n \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n function(thing) {\n return `'current' expects a draft, got: ${thing}`;\n },\n \"Object.defineProperty() cannot be used on an Immer draft\",\n \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n \"Immer only supports deleting array indices\",\n \"Immer only supports setting array indices and the 'length' property\",\n function(thing) {\n return `'original' expects a draft, got: ${thing}`;\n }\n // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n if (process.env.NODE_ENV !== \"production\") {\n const e = errors[error];\n const msg = typeof e === \"function\" ? e.apply(null, args) : e;\n throw new Error(`[Immer] ${msg}`);\n }\n throw new Error(\n `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n );\n}\n\n// src/utils/common.ts\nvar getPrototypeOf = Object.getPrototypeOf;\nfunction isDraft(value) {\n return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value) {\n if (!value)\n return false;\n return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = Object.prototype.constructor.toString();\nvar cachedCtorStrings = /* @__PURE__ */ new WeakMap();\nfunction isPlainObject(value) {\n if (!value || typeof value !== \"object\")\n return false;\n const proto = Object.getPrototypeOf(value);\n if (proto === null || proto === Object.prototype)\n return true;\n const Ctor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n if (Ctor === Object)\n return true;\n if (typeof Ctor !== \"function\")\n return false;\n let ctorString = cachedCtorStrings.get(Ctor);\n if (ctorString === void 0) {\n ctorString = Function.toString.call(Ctor);\n cachedCtorStrings.set(Ctor, ctorString);\n }\n return ctorString === objectCtorString;\n}\nfunction original(value) {\n if (!isDraft(value))\n die(15, value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter, strict = true) {\n if (getArchtype(obj) === 0 /* Object */) {\n const keys = strict ? Reflect.ownKeys(obj) : Object.keys(obj);\n keys.forEach((key) => {\n iter(key, obj[key], obj);\n });\n } else {\n obj.forEach((entry, index) => iter(index, entry, obj));\n }\n}\nfunction getArchtype(thing) {\n const state = thing[DRAFT_STATE];\n return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nfunction has(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);\n}\nfunction get(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];\n}\nfunction set(thing, propOrOldValue, value) {\n const t = getArchtype(thing);\n if (t === 2 /* Map */)\n thing.set(propOrOldValue, value);\n else if (t === 3 /* Set */) {\n thing.add(value);\n } else\n thing[propOrOldValue] = value;\n}\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nfunction isMap(target) {\n return target instanceof Map;\n}\nfunction isSet(target) {\n return target instanceof Set;\n}\nfunction latest(state) {\n return state.copy_ || state.base_;\n}\nfunction shallowCopy(base, strict) {\n if (isMap(base)) {\n return new Map(base);\n }\n if (isSet(base)) {\n return new Set(base);\n }\n if (Array.isArray(base))\n return Array.prototype.slice.call(base);\n const isPlain = isPlainObject(base);\n if (strict === true || strict === \"class_only\" && !isPlain) {\n const descriptors = Object.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys = Reflect.ownKeys(descriptors);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const desc = descriptors[key];\n if (desc.writable === false) {\n desc.writable = true;\n desc.configurable = true;\n }\n if (desc.get || desc.set)\n descriptors[key] = {\n configurable: true,\n writable: true,\n // could live with !!desc.set as well here...\n enumerable: desc.enumerable,\n value: base[key]\n };\n }\n return Object.create(getPrototypeOf(base), descriptors);\n } else {\n const proto = getPrototypeOf(base);\n if (proto !== null && isPlain) {\n return { ...base };\n }\n const obj = Object.create(proto);\n return Object.assign(obj, base);\n }\n}\nfunction freeze(obj, deep = false) {\n if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj) > 1) {\n Object.defineProperties(obj, {\n set: dontMutateMethodOverride,\n add: dontMutateMethodOverride,\n clear: dontMutateMethodOverride,\n delete: dontMutateMethodOverride\n });\n }\n Object.freeze(obj);\n if (deep)\n Object.values(obj).forEach((value) => freeze(value, true));\n return obj;\n}\nfunction dontMutateFrozenCollections() {\n die(2);\n}\nvar dontMutateMethodOverride = {\n value: dontMutateFrozenCollections\n};\nfunction isFrozen(obj) {\n if (obj === null || typeof obj !== \"object\")\n return true;\n return Object.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n const plugin = plugins[pluginKey];\n if (!plugin) {\n die(0, pluginKey);\n }\n return plugin;\n}\nfunction loadPlugin(pluginKey, implementation) {\n if (!plugins[pluginKey])\n plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope() {\n return currentScope;\n}\nfunction createScope(parent_, immer_) {\n return {\n drafts_: [],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_: true,\n unfinalizedDrafts_: 0\n };\n}\nfunction usePatchesInScope(scope, patchListener) {\n if (patchListener) {\n getPlugin(\"Patches\");\n scope.patches_ = [];\n scope.inversePatches_ = [];\n scope.patchListener_ = patchListener;\n }\n}\nfunction revokeScope(scope) {\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n if (scope === currentScope) {\n currentScope = scope.parent_;\n }\n}\nfunction enterScope(immer2) {\n return currentScope = createScope(currentScope, immer2);\n}\nfunction revokeDraft(draft) {\n const state = draft[DRAFT_STATE];\n if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n state.revoke_();\n else\n state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n scope.unfinalizedDrafts_ = scope.drafts_.length;\n const baseDraft = scope.drafts_[0];\n const isReplaced = result !== void 0 && result !== baseDraft;\n if (isReplaced) {\n if (baseDraft[DRAFT_STATE].modified_) {\n revokeScope(scope);\n die(4);\n }\n if (isDraftable(result)) {\n result = finalize(scope, result);\n if (!scope.parent_)\n maybeFreeze(scope, result);\n }\n if (scope.patches_) {\n getPlugin(\"Patches\").generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope.patches_,\n scope.inversePatches_\n );\n }\n } else {\n result = finalize(scope, baseDraft, []);\n }\n revokeScope(scope);\n if (scope.patches_) {\n scope.patchListener_(scope.patches_, scope.inversePatches_);\n }\n return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value, path) {\n if (isFrozen(value))\n return value;\n const useStrictIteration = rootScope.immer_.shouldUseStrictIteration();\n const state = value[DRAFT_STATE];\n if (!state) {\n each(\n value,\n (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path),\n useStrictIteration\n );\n return value;\n }\n if (state.scope_ !== rootScope)\n return value;\n if (!state.modified_) {\n maybeFreeze(rootScope, state.base_, true);\n return state.base_;\n }\n if (!state.finalized_) {\n state.finalized_ = true;\n state.scope_.unfinalizedDrafts_--;\n const result = state.copy_;\n let resultEach = result;\n let isSet2 = false;\n if (state.type_ === 3 /* Set */) {\n resultEach = new Set(result);\n result.clear();\n isSet2 = true;\n }\n each(\n resultEach,\n (key, childValue) => finalizeProperty(\n rootScope,\n state,\n result,\n key,\n childValue,\n path,\n isSet2\n ),\n useStrictIteration\n );\n maybeFreeze(rootScope, result, false);\n if (path && rootScope.patches_) {\n getPlugin(\"Patches\").generatePatches_(\n state,\n path,\n rootScope.patches_,\n rootScope.inversePatches_\n );\n }\n }\n return state.copy_;\n}\nfunction finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {\n if (childValue == null) {\n return;\n }\n if (typeof childValue !== \"object\" && !targetIsSet) {\n return;\n }\n const childIsFrozen = isFrozen(childValue);\n if (childIsFrozen && !targetIsSet) {\n return;\n }\n if (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n die(5);\n if (isDraft(childValue)) {\n const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.\n !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;\n const res = finalize(rootScope, childValue, path);\n set(targetObject, prop, res);\n if (isDraft(res)) {\n rootScope.canAutoFreeze_ = false;\n } else\n return;\n } else if (targetIsSet) {\n targetObject.add(childValue);\n }\n if (isDraftable(childValue) && !childIsFrozen) {\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n return;\n }\n if (parentState && parentState.base_ && parentState.base_[prop] === childValue && childIsFrozen) {\n return;\n }\n finalize(rootScope, childValue);\n if ((!parentState || !parentState.scope_.parent_) && typeof prop !== \"symbol\" && (isMap(targetObject) ? targetObject.has(prop) : Object.prototype.propertyIsEnumerable.call(targetObject, prop)))\n maybeFreeze(rootScope, childValue);\n }\n}\nfunction maybeFreeze(scope, value, deep = false) {\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n freeze(value, deep);\n }\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n const isArray = Array.isArray(base);\n const state = {\n type_: isArray ? 1 /* Array */ : 0 /* Object */,\n // Track which produce call this is associated with.\n scope_: parent ? parent.scope_ : getCurrentScope(),\n // True for both shallow and deep changes.\n modified_: false,\n // Used during finalization.\n finalized_: false,\n // Track which properties have been assigned (true) or deleted (false).\n assigned_: {},\n // The parent draft state.\n parent_: parent,\n // The base state.\n base_: base,\n // The base proxy.\n draft_: null,\n // set below\n // The base copy with any updated values.\n copy_: null,\n // Called by the `produce` function.\n revoke_: null,\n isManual_: false\n };\n let target = state;\n let traps = objectTraps;\n if (isArray) {\n target = [state];\n traps = arrayTraps;\n }\n const { revoke, proxy } = Proxy.revocable(target, traps);\n state.draft_ = proxy;\n state.revoke_ = revoke;\n return proxy;\n}\nvar objectTraps = {\n get(state, prop) {\n if (prop === DRAFT_STATE)\n return state;\n const source = latest(state);\n if (!has(source, prop)) {\n return readPropFromProto(state, source, prop);\n }\n const value = source[prop];\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value === peek(state.base_, prop)) {\n prepareCopy(state);\n return state.copy_[prop] = createProxy(value, state);\n }\n return value;\n },\n has(state, prop) {\n return prop in latest(state);\n },\n ownKeys(state) {\n return Reflect.ownKeys(latest(state));\n },\n set(state, prop, value) {\n const desc = getDescriptorFromProto(latest(state), prop);\n if (desc?.set) {\n desc.set.call(state.draft_, value);\n return true;\n }\n if (!state.modified_) {\n const current2 = peek(latest(state), prop);\n const currentState = current2?.[DRAFT_STATE];\n if (currentState && currentState.base_ === value) {\n state.copy_[prop] = value;\n state.assigned_[prop] = false;\n return true;\n }\n if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))\n return true;\n prepareCopy(state);\n markChanged(state);\n }\n if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n (value !== void 0 || prop in state.copy_) || // special case: NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop] = value;\n state.assigned_[prop] = true;\n return true;\n },\n deleteProperty(state, prop) {\n if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n state.assigned_[prop] = false;\n prepareCopy(state);\n markChanged(state);\n } else {\n delete state.assigned_[prop];\n }\n if (state.copy_) {\n delete state.copy_[prop];\n }\n return true;\n },\n // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state, prop) {\n const owner = latest(state);\n const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n if (!desc)\n return desc;\n return {\n writable: true,\n configurable: state.type_ !== 1 /* Array */ || prop !== \"length\",\n enumerable: desc.enumerable,\n value: owner[prop]\n };\n },\n defineProperty() {\n die(11);\n },\n getPrototypeOf(state) {\n return getPrototypeOf(state.base_);\n },\n setPrototypeOf() {\n die(12);\n }\n};\nvar arrayTraps = {};\neach(objectTraps, (key, fn) => {\n arrayTraps[key] = function() {\n arguments[0] = arguments[0][0];\n return fn.apply(this, arguments);\n };\n});\narrayTraps.deleteProperty = function(state, prop) {\n if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n die(13);\n return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n die(14);\n return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n const state = draft[DRAFT_STATE];\n const source = state ? latest(state) : draft;\n return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n const desc = getDescriptorFromProto(source, prop);\n return desc ? `value` in desc ? desc.value : (\n // This is a very special case, if the prop is a getter defined by the\n // prototype, we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n if (!(prop in source))\n return void 0;\n let proto = getPrototypeOf(source);\n while (proto) {\n const desc = Object.getOwnPropertyDescriptor(proto, prop);\n if (desc)\n return desc;\n proto = getPrototypeOf(proto);\n }\n return void 0;\n}\nfunction markChanged(state) {\n if (!state.modified_) {\n state.modified_ = true;\n if (state.parent_) {\n markChanged(state.parent_);\n }\n }\n}\nfunction prepareCopy(state) {\n if (!state.copy_) {\n state.copy_ = shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n );\n }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n constructor(config) {\n this.autoFreeze_ = true;\n this.useStrictShallowCopy_ = false;\n this.useStrictIteration_ = true;\n /**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\n this.produce = (base, recipe, patchListener) => {\n if (typeof base === \"function\" && typeof recipe !== \"function\") {\n const defaultBase = recipe;\n recipe = base;\n const self = this;\n return function curriedProduce(base2 = defaultBase, ...args) {\n return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n };\n }\n if (typeof recipe !== \"function\")\n die(6);\n if (patchListener !== void 0 && typeof patchListener !== \"function\")\n die(7);\n let result;\n if (isDraftable(base)) {\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n let hasError = true;\n try {\n result = recipe(proxy);\n hasError = false;\n } finally {\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n }\n usePatchesInScope(scope, patchListener);\n return processResult(result, scope);\n } else if (!base || typeof base !== \"object\") {\n result = recipe(base);\n if (result === void 0)\n result = base;\n if (result === NOTHING)\n result = void 0;\n if (this.autoFreeze_)\n freeze(result, true);\n if (patchListener) {\n const p = [];\n const ip = [];\n getPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip);\n patchListener(p, ip);\n }\n return result;\n } else\n die(1, base);\n };\n this.produceWithPatches = (base, recipe) => {\n if (typeof base === \"function\") {\n return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n }\n let patches, inversePatches;\n const result = this.produce(base, recipe, (p, ip) => {\n patches = p;\n inversePatches = ip;\n });\n return [result, patches, inversePatches];\n };\n if (typeof config?.autoFreeze === \"boolean\")\n this.setAutoFreeze(config.autoFreeze);\n if (typeof config?.useStrictShallowCopy === \"boolean\")\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n if (typeof config?.useStrictIteration === \"boolean\")\n this.setUseStrictIteration(config.useStrictIteration);\n }\n createDraft(base) {\n if (!isDraftable(base))\n die(8);\n if (isDraft(base))\n base = current(base);\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n proxy[DRAFT_STATE].isManual_ = true;\n leaveScope(scope);\n return proxy;\n }\n finishDraft(draft, patchListener) {\n const state = draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const { scope_: scope } = state;\n usePatchesInScope(scope, patchListener);\n return processResult(void 0, scope);\n }\n /**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is enabled.\n */\n setAutoFreeze(value) {\n this.autoFreeze_ = value;\n }\n /**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\n setUseStrictShallowCopy(value) {\n this.useStrictShallowCopy_ = value;\n }\n /**\n * Pass false to use faster iteration that skips non-enumerable properties\n * but still handles symbols for compatibility.\n *\n * By default, strict iteration is enabled (includes all own properties).\n */\n setUseStrictIteration(value) {\n this.useStrictIteration_ = value;\n }\n shouldUseStrictIteration() {\n return this.useStrictIteration_;\n }\n applyPatches(base, patches) {\n let i;\n for (i = patches.length - 1; i >= 0; i--) {\n const patch = patches[i];\n if (patch.path.length === 0 && patch.op === \"replace\") {\n base = patch.value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const applyPatchesImpl = getPlugin(\"Patches\").applyPatches_;\n if (isDraft(base)) {\n return applyPatchesImpl(base, patches);\n }\n return this.produce(\n base,\n (draft) => applyPatchesImpl(draft, patches)\n );\n }\n};\nfunction createProxy(value, parent) {\n const draft = isMap(value) ? getPlugin(\"MapSet\").proxyMap_(value, parent) : isSet(value) ? getPlugin(\"MapSet\").proxySet_(value, parent) : createProxyProxy(value, parent);\n const scope = parent ? parent.scope_ : getCurrentScope();\n scope.drafts_.push(draft);\n return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n if (!isDraft(value))\n die(10, value);\n return currentImpl(value);\n}\nfunction currentImpl(value) {\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n let copy;\n let strict = true;\n if (state) {\n if (!state.modified_)\n return state.base_;\n state.finalized_ = true;\n copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n strict = state.scope_.immer_.shouldUseStrictIteration();\n } else {\n copy = shallowCopy(value, true);\n }\n each(\n copy,\n (key, childValue) => {\n set(copy, key, currentImpl(childValue));\n },\n strict\n );\n if (state) {\n state.finalized_ = false;\n }\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n const errorOffset = 16;\n if (process.env.NODE_ENV !== \"production\") {\n errors.push(\n 'Sets cannot have \"replace\" patches.',\n function(op) {\n return \"Unsupported patch operation: \" + op;\n },\n function(path) {\n return \"Cannot apply patch, path doesn't resolve: \" + path;\n },\n \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n );\n }\n const REPLACE = \"replace\";\n const ADD = \"add\";\n const REMOVE = \"remove\";\n function generatePatches_(state, basePath, patches, inversePatches) {\n switch (state.type_) {\n case 0 /* Object */:\n case 2 /* Map */:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches,\n inversePatches\n );\n case 1 /* Array */:\n return generateArrayPatches(state, basePath, patches, inversePatches);\n case 3 /* Set */:\n return generateSetPatches(\n state,\n basePath,\n patches,\n inversePatches\n );\n }\n }\n function generateArrayPatches(state, basePath, patches, inversePatches) {\n let { base_, assigned_ } = state;\n let copy_ = state.copy_;\n if (copy_.length < base_.length) {\n ;\n [base_, copy_] = [copy_, base_];\n [patches, inversePatches] = [inversePatches, patches];\n }\n for (let i = 0; i < base_.length; i++) {\n if (assigned_[i] && copy_[i] !== base_[i]) {\n const path = basePath.concat([i]);\n patches.push({\n op: REPLACE,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n inversePatches.push({\n op: REPLACE,\n path,\n value: clonePatchValueIfNeeded(base_[i])\n });\n }\n }\n for (let i = base_.length; i < copy_.length; i++) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n }\n for (let i = copy_.length - 1; base_.length <= i; --i) {\n const path = basePath.concat([i]);\n inversePatches.push({\n op: REMOVE,\n path\n });\n }\n }\n function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n const { base_, copy_ } = state;\n each(state.assigned_, (key, assignedValue) => {\n const origValue = get(base_, key);\n const value = get(copy_, key);\n const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n if (origValue === value && op === REPLACE)\n return;\n const path = basePath.concat(key);\n patches.push(op === REMOVE ? { op, path } : { op, path, value });\n inversePatches.push(\n op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n );\n });\n }\n function generateSetPatches(state, basePath, patches, inversePatches) {\n let { base_, copy_ } = state;\n let i = 0;\n base_.forEach((value) => {\n if (!copy_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: REMOVE,\n path,\n value\n });\n inversePatches.unshift({\n op: ADD,\n path,\n value\n });\n }\n i++;\n });\n i = 0;\n copy_.forEach((value) => {\n if (!base_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n value\n });\n inversePatches.unshift({\n op: REMOVE,\n path,\n value\n });\n }\n i++;\n });\n }\n function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {\n patches.push({\n op: REPLACE,\n path: [],\n value: replacement === NOTHING ? void 0 : replacement\n });\n inversePatches.push({\n op: REPLACE,\n path: [],\n value: baseValue\n });\n }\n function applyPatches_(draft, patches) {\n patches.forEach((patch) => {\n const { path, op } = patch;\n let base = draft;\n for (let i = 0; i < path.length - 1; i++) {\n const parentType = getArchtype(base);\n let p = path[i];\n if (typeof p !== \"string\" && typeof p !== \"number\") {\n p = \"\" + p;\n }\n if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === \"constructor\"))\n die(errorOffset + 3);\n if (typeof base === \"function\" && p === \"prototype\")\n die(errorOffset + 3);\n base = get(base, p);\n if (typeof base !== \"object\")\n die(errorOffset + 2, path.join(\"/\"));\n }\n const type = getArchtype(base);\n const value = deepClonePatchValue(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case REPLACE:\n switch (type) {\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n die(errorOffset);\n default:\n return base[key] = value;\n }\n case ADD:\n switch (type) {\n case 1 /* Array */:\n return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n return base.add(value);\n default:\n return base[key] = value;\n }\n case REMOVE:\n switch (type) {\n case 1 /* Array */:\n return base.splice(key, 1);\n case 2 /* Map */:\n return base.delete(key);\n case 3 /* Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n die(errorOffset + 1, op);\n }\n });\n return draft;\n }\n function deepClonePatchValue(obj) {\n if (!isDraftable(obj))\n return obj;\n if (Array.isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n );\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned = Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key] = deepClonePatchValue(obj[key]);\n if (has(obj, DRAFTABLE))\n cloned[DRAFTABLE] = obj[DRAFTABLE];\n return cloned;\n }\n function clonePatchValueIfNeeded(obj) {\n if (isDraft(obj)) {\n return deepClonePatchValue(obj);\n } else\n return obj;\n }\n loadPlugin(\"Patches\", {\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_\n });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n class DraftMap extends Map {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 2 /* Map */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n assigned_: void 0,\n base_: target,\n draft_: this,\n isManual_: false,\n revoked_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(key) {\n return latest(this[DRAFT_STATE]).has(key);\n }\n set(key, value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !== value) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key, true);\n state.copy_.set(key, value);\n state.assigned_.set(key, true);\n }\n return this;\n }\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)) {\n state.assigned_.set(key, false);\n } else {\n state.assigned_.delete(key);\n }\n state.copy_.delete(key);\n return true;\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_ = /* @__PURE__ */ new Map();\n each(state.base_, (key) => {\n state.assigned_.set(key, false);\n });\n state.copy_.clear();\n }\n }\n forEach(cb, thisArg) {\n const state = this[DRAFT_STATE];\n latest(state).forEach((_value, key, _map) => {\n cb.call(thisArg, this.get(key), key, this);\n });\n }\n get(key) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n const value = latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value !== state.base_.get(key)) {\n return value;\n }\n const draft = createProxy(value, state);\n prepareMapCopy(state);\n state.copy_.set(key, draft);\n return draft;\n }\n keys() {\n return latest(this[DRAFT_STATE]).keys();\n }\n values() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value\n };\n }\n };\n }\n entries() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value: [r.value, value]\n };\n }\n };\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.entries();\n }\n }\n function proxyMap_(target, parent) {\n return new DraftMap(target, parent);\n }\n function prepareMapCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = new Map(state.base_);\n }\n }\n class DraftSet extends Set {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 3 /* Set */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n base_: target,\n draft_: this,\n drafts_: /* @__PURE__ */ new Map(),\n revoked_: false,\n isManual_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_) {\n return state.base_.has(value);\n }\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n }\n add(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n }\n return this;\n }\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n /* istanbul ignore next */\n false\n ));\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n }\n }\n values() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n }\n entries() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n }\n keys() {\n return this.values();\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.values();\n }\n forEach(cb, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n cb.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n }\n }\n function proxySet_(target, parent) {\n return new DraftSet(target, parent);\n }\n function prepareSetCopy(state) {\n if (!state.copy_) {\n state.copy_ = /* @__PURE__ */ new Set();\n state.base_.forEach((value) => {\n if (isDraftable(value)) {\n const draft = createProxy(value, state);\n state.drafts_.set(value, draft);\n state.copy_.add(draft);\n } else {\n state.copy_.add(value);\n }\n });\n }\n }\n function assertUnrevoked(state) {\n if (state.revoked_)\n die(3, JSON.stringify(latest(state)));\n }\n loadPlugin(\"MapSet\", { proxyMap_, proxySet_ });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = /* @__PURE__ */ immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze = /* @__PURE__ */ immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = /* @__PURE__ */ immer.setUseStrictShallowCopy.bind(\n immer\n);\nvar setUseStrictIteration = /* @__PURE__ */ immer.setUseStrictIteration.bind(\n immer\n);\nvar applyPatches = /* @__PURE__ */ immer.applyPatches.bind(immer);\nvar createDraft = /* @__PURE__ */ immer.createDraft.bind(immer);\nvar finishDraft = /* @__PURE__ */ immer.finishDraft.bind(immer);\nfunction castDraft(value) {\n return value;\n}\nfunction castImmutable(value) {\n return value;\n}\nexport {\n Immer2 as Immer,\n applyPatches,\n castDraft,\n castImmutable,\n createDraft,\n current,\n enableMapSet,\n enablePatches,\n finishDraft,\n freeze,\n DRAFTABLE as immerable,\n isDraft,\n isDraftable,\n NOTHING as nothing,\n original,\n produce,\n produceWithPatches,\n setAutoFreeze,\n setUseStrictIteration,\n setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","import { createStore } from \"zustand/vanilla\";\nimport { subscribeWithSelector } from \"zustand/middleware\";\nimport { shallow } from \"zustand/shallow\";\nimport { freeze, produce } from \"immer\";\n//#region lib/types/index.js\n/**\n* React-free snapshot store engine (zustand vanilla + immer + subscribeWithSelector +\n* rafFlush middleware + opt-in persist + dev freeze) plus the declarative\n* shell over it: {@link defineStore} bakes an init/persist/actions literal\n* into a {@link StoreHandle}, the registration-side store seat of slot\n* terminals. Engine products are bare observables — subscribe/getSnapshot/\n* update/set, NO selector hook. Hook synthesis is ui-renderer's (the one\n* uSES bridge, cached per source at the binding site).\n*/\n/**\n* Notify an observer set without allowing one callback to starve the rest.\n* @param listeners - current observer callbacks; copied before dispatch.\n* @param label - diagnostic owner prefix.\n* @param args - callback arguments.\n*/\nfunction notifySubscribers(listeners, label, ...args) {\n\tfor (const listener of [...listeners]) try {\n\t\tlistener(...args);\n\t} catch (error) {\n\t\tconsole.error(`${label} subscriber failed:`, error);\n\t}\n}\n/**\n* Shallow equality for selector slices (zustand/shallow semantics; travels\n* with the engine so hook consumers need no zustand dependency).\n* @param a - left value.\n* @param b - right value.\n* @returns whether the values are shallowly equal.\n*/\nfunction shallowEqual(a, b) {\n\treturn shallow(a, b);\n}\n/** Batches subscriber notification into one flush per animation frame. */\nfunction rafBatch(notify) {\n\tconst schedule = typeof requestAnimationFrame === \"function\" ? (fn) => {\n\t\trequestAnimationFrame(() => {\n\t\t\tfn();\n\t\t});\n\t} : (fn) => {\n\t\tqueueMicrotask(fn);\n\t};\n\tlet scheduled = false;\n\treturn () => {\n\t\tif (scheduled) return;\n\t\tscheduled = true;\n\t\tschedule(() => {\n\t\t\tscheduled = false;\n\t\t\tnotify();\n\t\t});\n\t};\n}\n/**\n* Create a snapshot store.\n*\n* Flush default is 'sync' (controlled inputs need same-tick echo); frame-driven\n* stores opt into 'raf', where a frame's worth of updates coalesces into one\n* notification. Known raf-mode tradeoff: a component mounting mid-frame reads\n* fresh state while existing subscribers hear it next flush — transient\n* frame-level skew, same nature as the object layer's microtask batching.\n*\n* @param init - initial state.\n* @param opts - flush mode and opt-in persistence (localStorage, keyed by name).\n* @returns the store.\n*/\nfunction createSnapshotStore(init, opts) {\n\tconst withSelector = subscribeWithSelector(() => init);\n\tconst api = createStore()(withSelector);\n\tif (opts?.persist) attachPersistence(api, opts.persist.name);\n\tlet subscribe = (fn) => api.subscribe(() => {\n\t\tnotifySubscribers([fn], \"[client-store]\");\n\t});\n\tif (opts?.flush === \"raf\") {\n\t\tconst listeners = /* @__PURE__ */ new Set();\n\t\tconst flush = rafBatch(() => {\n\t\t\tnotifySubscribers(listeners, \"[client-store]\");\n\t\t});\n\t\tapi.subscribe(flush);\n\t\tsubscribe = (fn) => {\n\t\t\tlisteners.add(fn);\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(fn);\n\t\t\t};\n\t\t};\n\t}\n\treturn {\n\t\tgetSnapshot: () => api.getState(),\n\t\tsubscribe: (fn) => subscribe(fn),\n\t\tupdate: (mutator) => {\n\t\t\tapi.setState(produce(api.getState(), (draft) => {\n\t\t\t\tmutator(draft);\n\t\t\t}), true);\n\t\t},\n\t\tset: (next) => {\n\t\t\tapi.setState(devFreeze(next), true);\n\t\t}\n\t};\n}\n/**\n* Whole-value JSON persistence to localStorage. Hand-rolled instead of the\n* zustand persist middleware: its write path spreads state into an object\n* (`partialize({ ...get() })`), exploding primitive state (a persisted string\n* draft becomes {0:'h',1:'e',...}) — not fixable via merge/deserialize options\n* because the corruption happens before serialization. Storage failures\n* (quota, private mode) only disable persistence, never break the store.\n*/\nfunction attachPersistence(api, name) {\n\tif (typeof localStorage === \"undefined\") return;\n\ttry {\n\t\tconst raw = localStorage.getItem(name);\n\t\tif (raw !== null) api.setState(devFreeze(JSON.parse(raw)), true);\n\t} catch (error) {\n\t\tconsole.error(`snapshot store '${name}' rehydration failed:`, error);\n\t}\n\tapi.subscribe((state) => {\n\t\ttry {\n\t\t\tlocalStorage.setItem(name, JSON.stringify(state));\n\t\t} catch (error) {\n\t\t\tconsole.error(`snapshot store '${name}' persistence failed:`, error);\n\t\t}\n\t});\n}\n/** Deep-freeze draftable wholesale-set state outside production: set() bypasses immer's freeze. */\nfunction devFreeze(value) {\n\treturn freeze(value, true);\n}\n/**\n* Declare a store: initial state, optional persistence, and the full write\n* set as pure draft mutators. The returned handle is the registration\n* currency of the store seat — its identity keys instance sharing. Satisfies\n* ui-slots' DefineStore contract (the handle/instance are the engine-extended\n* subtypes).\n*\n* The `A & ActionsDecl<T>` actions position is load-bearing: T resolves from\n* `init` in the first inference round, and the intersection then contextually\n* types each mutator's draft parameter (context-sensitive functions defer),\n* so call sites write `(d, x: X) => { ... }` with no draft annotation. If a\n* future TS version breaks this single-literal inference, the design's\n* documented fallback is currying (`defineStore(init).actions({...})`).\n* @param decl - init lambda (fresh state per instance), optional persist key, actions table.\n* @returns the store handle.\n*/\nfunction defineStore(decl) {\n\treturn {\n\t\tspec: decl,\n\t\tcreate(scopeKey) {\n\t\t\tconst persistKey = decl.persist === void 0 ? void 0 : scopeKey === void 0 ? decl.persist : `${decl.persist}.${scopeKey}`;\n\t\t\tconst store = createSnapshotStore(decl.init(), persistKey !== void 0 ? { persist: { name: persistKey } } : void 0);\n\t\t\tconst actions = {};\n\t\t\tfor (const key of Object.keys(decl.actions)) {\n\t\t\t\tconst mutate = decl.actions[key];\n\t\t\t\tactions[key] = (...params) => {\n\t\t\t\t\tstore.update((draft) => {\n\t\t\t\t\t\tmutate(draft, ...params);\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tactions,\n\t\t\t\tgetSnapshot: () => store.getSnapshot(),\n\t\t\t\tsubscribe: (fn) => store.subscribe(fn),\n\t\t\t\tstore,\n\t\t\t\tclearPersisted: () => {\n\t\t\t\t\tif (persistKey === void 0 || typeof localStorage === \"undefined\") return;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlocalStorage.removeItem(persistKey);\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n}\n//#endregion\nexport { createSnapshotStore, defineStore, notifySubscribers, shallowEqual };\n\n//# sourceMappingURL=index.js.map","export const WORKTREE_NS = 'worktree';\nexport const zh = {\n 'dashboard.title': \"Dashboard\",\n 'dashboard.preview': 'Dashboard 预览',\n 'dashboard.open': '打开 Dashboard',\n 'dashboard.copyBranch': '复制分支名称',\n 'dashboard.branchCopied': '已复制分支名称',\n 'dashboard.branchCopyFailed': '复制分支名称失败,请重试。',\n 'dashboard.tab.overview': \"概览\",\n 'dashboard.tab.git': \"Git 与变更\",\n 'dashboard.git.title': 'Git 与变更',\n 'dashboard.git.baselineSelector': '基线分支',\n 'dashboard.git.selectBaseline': '选择基线分支',\n 'dashboard.git.selectBaselineTitle': '请选择基线分支',\n 'dashboard.git.selectBaselineDescription': '选择一个本地 branch 作为比较起点,然后查看提交、变更文件和 Diff。',\n 'dashboard.git.base': '基线',\n 'dashboard.git.head': 'HEAD',\n 'dashboard.git.commit': '提交',\n 'dashboard.git.commits': '提交',\n 'dashboard.git.commitCount': '{n} 个提交',\n 'dashboard.git.commitCountWithWorkingTree': '{commits} 个提交 + 工作区改动',\n 'dashboard.git.uncommittedChanges': '未提交的改动',\n 'dashboard.git.workingTree': '工作区',\n 'dashboard.git.changedFiles': '变更文件',\n 'dashboard.git.lineStats': '+{additions} 行,-{deletions} 行',\n 'dashboard.git.aheadBehindStats': '+{ahead} 领先,-{behind} 落后',\n 'dashboard.git.diff': 'Diff',\n 'dashboard.git.resizeRows': '拖动调整上下两栏高度,双击恢复默认',\n 'dashboard.git.resizeColumns': '拖动调整左右两栏宽度,双击恢复默认',\n 'dashboard.git.openInSidebar': '在侧栏打开',\n 'dashboard.git.summaryDiff': '汇总 Diff',\n 'dashboard.git.baselineSummary': '基线汇总',\n 'dashboard.git.baselineSummaryDescription': '查看基线比较边界到 HEAD 的全部已提交变更(基线 branch 已分叉时取两者共同祖先,默认不含工作区)。',\n 'dashboard.git.includeWorkingTree': '包含工作区改动',\n 'dashboard.git.includeWorkingTreeDescription': '加入 staged、unstaged 和 untracked 文件。',\n 'dashboard.git.selectedCommitCount': '已选择 {n} 个提交',\n 'dashboard.git.multiSelectCommits': '多选提交',\n 'dashboard.git.multiSelectCommitsDescription': '关闭时点击提交查看该提交自己的 Diff;打开后可同时选择多个提交并查看合并结果。',\n 'dashboard.git.commitSelectionHint': '可多选提交;工作区改动不能与提交混合选择。',\n 'dashboard.git.clearCommitSelection': '清除选择',\n 'dashboard.git.commitDiffSection': '提交变更',\n 'dashboard.git.loadingSummaryFiles': '正在加载基线汇总变更…',\n 'dashboard.git.loadingSummaryDiff': '正在加载基线汇总 Diff…',\n 'dashboard.git.noBaselineChanges': '基线与 HEAD 没有已提交的净变更。',\n 'dashboard.git.noLiveBaselineChanges': '基线与当前工作区没有净变更。',\n 'dashboard.git.refresh': '刷新',\n 'dashboard.git.refreshing': '刷新中…',\n 'dashboard.git.retry': '重试',\n 'dashboard.git.loading': '正在加载 Git 历史和工作区改动…',\n 'dashboard.git.loadingFiles': '正在加载变更文件…',\n 'dashboard.git.loadingDiff': '正在加载 Diff…',\n 'dashboard.git.loadFailed': 'Git 数据加载失败:{reason}',\n 'dashboard.git.refreshFailed': '刷新 Git 数据失败:{reason}',\n 'dashboard.git.baselineUnknownTitle': '历史基线无法获取',\n 'dashboard.git.baselineUnknownDescription': '无法安全确定所选 branch 与当前 HEAD 的比较范围;请确认基线 branch 仍是当前 HEAD 的 ancestor。',\n 'dashboard.git.mainUnavailableTitle': '本地 Workspace 不适用',\n 'dashboard.git.mainUnavailableDescription': 'Git Dashboard 的 branch 基线选择仅适用于已登记 Worktree。',\n 'dashboard.git.derived': '运行时推导',\n 'dashboard.git.noCommits': '没有超出基线的提交。',\n 'dashboard.git.noFiles': '此项没有可显示的变更文件。',\n 'dashboard.git.selectCommit': '选择一个提交或工作区改动查看详情。',\n 'dashboard.git.selectFile': '选择一个文件查看 Diff。',\n 'dashboard.git.untitledCommit': '(无提交标题)',\n 'dashboard.git.truncatedHistory': '仅显示前 200 个提交。',\n 'dashboard.git.truncatedFiles': '变更文件过多,无法完整列出。',\n 'dashboard.git.binary': '二进制文件没有可显示的文本 Diff。',\n 'dashboard.git.diffTruncated': 'Diff 太大,无法在 Dashboard 中完整显示;请在 IDE 中检查完整变更。',\n 'dashboard.git.diffLinesHidden': '为保持滚动流畅,暂时折叠了 {n} 行 Diff。',\n 'dashboard.git.showFullDiff': '显示完整 Diff',\n 'dashboard.git.emptyDiff': '没有可显示的 Diff。',\n 'dashboard.git.status.added': '新增',\n 'dashboard.git.status.modified': '修改',\n 'dashboard.git.status.deleted': '删除',\n 'dashboard.git.status.renamed': '重命名',\n 'dashboard.git.status.copied': '复制',\n 'dashboard.git.status.typeChanged': '类型变化',\n 'dashboard.tab.sessions': \"会话\",\n 'dashboard.tab.children': \"派生 Worktree\",\n 'dashboard.tab.settings': \"设置\",\n 'dashboard.back': \"返回会话\",\n 'dashboard.openSidebar': '打开侧栏',\n 'dashboard.soon': \"即将推出\",\n 'dashboard.notConnected': \"待接入\",\n 'dashboard.unknown': \"未知\",\n 'dashboard.unknownError': '未知错误',\n 'dashboard.historicalUnavailable': \"历史 Worktree 无法获取\",\n 'dashboard.detached': \"分离 HEAD\",\n 'dashboard.cleaned': \"已清理\",\n 'dashboard.archived': \"已归档\",\n 'dashboard.copied': \"已复制完整路径\",\n 'dashboard.copyFailed': \"复制失败,请重试或手动选择上方路径。\",\n 'dashboard.openEditor': \"在 VS Code 中打开\",\n 'dashboard.openIn': \"在 {app} 中打开\",\n 'dashboard.created': \"创建时间\",\n 'dashboard.imported': '登记时间',\n 'dashboard.editorMenu': '选择打开应用',\n 'dashboard.saveInstructions': '保存',\n 'dashboard.savingInstructions': '保存中…',\n 'dashboard.cancelInstructions': '取消',\n 'dashboard.instructionsSaveFailed': '保存失败,草稿已保留。可重试;若其他窗口已修改指令,请取消并重新打开编辑。',\n 'dashboard.editBase': '编辑基线',\n 'dashboard.editBaseDescription': '选择一个本地 branch 作为 Git 与变更的比较基线。',\n 'dashboard.searchBranches': '搜索 branch',\n 'dashboard.noMatchingBranches': '没有匹配的 branch',\n 'dashboard.selectBaseBranch': '选择基线分支',\n 'dashboard.saveBase': '保存基线',\n 'dashboard.savingBase': '保存中…',\n 'dashboard.cancelBase': '取消',\n 'dashboard.baseSaveFailed': '基线保存失败,草稿已保留。请重试;如果其他窗口已修改基线,请取消并重新编辑。',\n 'dashboard.base': \"基线\",\n 'dashboard.source': \"来源\",\n 'dashboard.external': \"外部导入\",\n 'dashboard.plugin': \"插件创建\",\n 'dashboard.start': \"开始新的工作\",\n 'dashboard.startDescription': \"从这个 Worktree 继续工作\",\n 'dashboard.newWorktree': \"新建 Worktree\",\n 'dashboard.newSession': \"新建会话\",\n 'dashboard.newWorktreeDescription': \"基于当前分支创建独立的工作目录\",\n 'dashboard.newSessionDescription': \"在这个 Worktree 中开始新的会话\",\n 'dashboard.instructions': \"Worktree 指令\",\n 'dashboard.edit': \"编辑\",\n 'dashboard.instructionsDescription': \"为这个 Worktree 设置共享的工作指引。\",\n 'dashboard.noInstructions': \"尚未设置指令\",\n 'dashboard.instructionsHint': \"最多 32,000 字符。保存后在绑定会话的下一次模型请求中以 <system-reminder> 生效;清空并保存可停用。\",\n 'dashboard.noSessions': \"此 Worktree 暂无可显示的会话。\",\n 'dashboard.viewSessions': \"查看全部会话\",\n 'dashboard.status': \"Worktree 状态\",\n 'dashboard.statusHint': \"目录可用性来自现有检查;选择 branch 基线后,Git 与变更页展示其之后的提交,状态区分别显示已提交和未提交的行数。\",\n 'dashboard.health': \"可用性\",\n 'dashboard.branch': \"当前分支\",\n 'dashboard.branchUnavailable': '当前分支无法获取',\n 'dashboard.aheadBehind': \"领先 / 落后\",\n 'dashboard.committedChanges': \"已提交变更\",\n 'dashboard.workingTree': \"未提交变更\",\n 'dashboard.viewDetails': \"查看详情\",\n 'dashboard.derived': \"派生 Worktree\",\n 'dashboard.childrenHint': \"派生关系尚未接入,不代表没有其他 Worktree。\",\n 'dashboard.viewChildren': \"查看派生 Worktree\",\n 'dashboard.quickActions': \"快捷操作\",\n 'dashboard.action.terminal': \"在终端中打开\",\n 'dashboard.action.diff': \"查看 Git Diff\",\n 'dashboard.action.pullRequest': \"创建 Pull Request\",\n 'dashboard.action.tests': \"运行测试\",\n 'dashboard.action.sync': \"同步基线\",\n 'dashboard.action.archive': \"归档 Worktree\",\n 'dashboard.hint.git': \"这里展示相对于所选 branch 基线的提交、已提交和未提交的变化行数、变更文件和统一 Diff。\",\n 'dashboard.hint.children': \"这里将展示基于此 Worktree 派生的工作目录与关系。\",\n 'dashboard.hint.settings': \"这里将提供 Worktree 指令与偏好设置。当前不会保存任何更改。\",\n 'dashboard.mvpHint': \"MVP · 会话、新建 Worktree、归档、Git 变更和 VS Code 已接入;其余标记为“即将推出”的操作暂不可用。\",\n 'mode.open': '打开 Worktree 模式',\n 'mode.exit': '退出 Worktree 模式',\n 'mode.label': 'Worktree',\n 'mode.navigation': 'Worktree 导航',\n 'context.main': '当前分支:{name}',\n 'context.worktree': 'Worktree:{name}',\n 'workspace.rename': '重命名',\n 'workspace.delete': '删除',\n 'workspace.expand': '展开 {name}',\n 'workspace.collapse': '收起 {name}',\n 'workspace.collapseAll': '全部折叠',\n 'workspace.options': '工作区选项:{name}',\n 'workspace.addWorktree': '向 {name} 添加 Worktree',\n 'workspace.add': '添加工作区',\n 'workspace.search': '搜索工作区和会话',\n 'search.clear': '清除搜索',\n 'workspace.noMatches': '没有匹配的工作区',\n 'workspace.renameTitle': '重命名工作区',\n 'workspace.name': '工作区名称',\n 'workspace.duplicate': '已存在同名工作区。',\n 'workspace.deleteTitle': '删除工作区',\n 'workspace.deleteDescription': '删除“{name}”?这只会移除 DSH 工作区注册。目录、会话和 Git Worktree 会保留。',\n 'worktree.title': 'Worktree',\n 'worktree.main': '本地',\n 'worktree.mainWithBranch': '本地({branch})',\n 'worktree.detached': '已分离 Worktree',\n 'worktree.repair': 'Worktree 需要修复',\n 'worktree.repairGuidance': '检查此路径的目录、.git 入口和 Git Worktree 登记是否完整。若目录被移动,请先恢复到原路径;目录仍存在但 Git 关联异常时,可在该目录运行 git worktree repair 后刷新。若已删除且不再需要,请先归档,再选择清理磁盘同步移除状态,或移出管理。',\n 'worktree.recoveryGuidance': '上次操作尚未完成,或目录与仓库身份无法确认。请确认原目录和仓库可访问,再从此 Worktree 菜单选择“重试恢复”。若仍失败,请保留错误详情排查,不要手动删除插件索引。',\n 'worktree.branchDriftGuidance': '实际分支与记录不一致。若切换符合预期,请从此 Worktree 菜单选择“采用当前分支”;否则在 Git 中切回原分支后刷新。会话绑定和工作目录保持不变。',\n 'worktree.detachedGuidance': '此目录处于分离 HEAD。请先在 Git 中切换到所需的本地分支,再刷新;如与原记录不同,选择“采用当前分支”。',\n 'notice.details': '提示详情与恢复操作',\n 'worktree.recovery': 'Worktree 需要恢复',\n 'worktree.ready': '活动 Worktree 已就绪',\n 'worktree.branchDrift': 'Git 分支已变化',\n 'worktree.detachedHead': '分离 HEAD',\n 'worktree.adoptBranch': '采用当前分支',\n 'worktree.retryRecovery': '重试恢复',\n 'worktree.adoptDescription': '将记录分支从“{previous}”更新为“{current}”?只更新插件索引,会话绑定和磁盘文件保持不变。',\n 'worktree.adoptBeforeClean': '请先采用当前分支;分离 HEAD 时请先在 Git 中切换到分支。',\n 'worktree.cleaned': 'Worktree 已移除',\n 'worktree.archivedGroup': '已归档',\n 'worktree.cleanDisk': '清理磁盘',\n 'worktree.cleanDiskTitle': '清理 Worktree 磁盘',\n 'worktree.cleanDiskDescription': '从磁盘删除“{name}”({path})?此操作不可逆。插件不会检查 Session 或子代理是否正在运行,请自行确认所有使用此目录的任务均已停止;否则删除可能导致任务失败或数据丢失。若目录或 .git 已不存在,仅同步 Worktree 移除状态,剩余文件不会删除。关联 Session 与历史会保留。',\n 'worktree.forget': '移出管理',\n 'worktree.forgetTitle': '移出管理',\n 'worktree.forgetDescription': '将“{name}”从 Worktree 插件管理中移除?磁盘目录和 DSH 中的 Session 均会保留。',\n 'worktree.expand': '展开 {name}',\n 'worktree.collapse': '收起 {name}',\n 'worktree.options': 'Worktree 选项:{name}',\n 'worktree.copyPath': '复制路径',\n 'worktree.createNew': '创建新的 Worktree',\n 'worktree.archive': '归档 Worktree',\n 'worktree.archiveDescription': '归档“{name}”?它会移入“已归档”分组。磁盘目录、会话绑定和工作目录保持不变,已有会话仍可继续使用。删除目录需另行选择“清理磁盘”。',\n 'worktree.unarchive': '取消归档',\n 'worktree.unarchiveDisabledRepair': '目录或 Git 登记异常,无法取消归档',\n 'worktree.archiveExternalDescription': '归档“{name}”?它会移入“已归档”分组。外部目录、会话绑定和工作目录保持不变,已有会话仍可继续使用。删除目录需另行选择“清理磁盘”。',\n 'worktree.remove': '归档 Worktree',\n 'worktree.removeDescription': '归档“{name}”?目录、会话绑定和工作目录保持不变。删除目录需另行选择“清理磁盘”。',\n 'worktree.removeExternalDescription': '归档“{name}”?外部目录、会话绑定和工作目录保持不变。删除目录需另行选择“清理磁盘”。',\n 'worktree.addSession': '向 {name} 添加会话',\n 'worktree.noWorktrees': '暂无 Worktree',\n 'worktree.createTitle': '新建 Worktree',\n 'worktree.createDescription': '“{name}” · Worktree 路径由 DSH 管理。',\n 'worktree.tabCreate': '创建',\n 'worktree.tabImport': '导入',\n 'worktree.importDescription': '向“{name}”注册已有的 Worktree。注册和归档均保留原目录;只有另行确认“清理磁盘”才会删除目录。',\n 'worktree.importLoading': '正在查找可导入的 Worktree…',\n 'worktree.importEmpty': '没有可导入的 Worktree。',\n 'worktree.importPlaceholder': '请选择要导入的 Worktree',\n 'worktree.importSelected': '已选择',\n 'worktree.baseBranch': 'Worktree 基线分支',\n 'worktree.noLocalBranch': '没有本地分支',\n 'worktree.noBranches': '此工作区中没有找到本地分支。',\n 'worktree.setup.gitNotInstalled': 'Git 未安装或不在 PATH 中。请先安装 Git,然后重启 DSH 再重试。',\n 'worktree.setup.noRepository': '此 Workspace 不是 Git 仓库。请在 Workspace 目录执行以下命令:',\n 'worktree.setup.noInitialCommit': '此 Git 仓库还没有首次 commit。请先执行以下命令:',\n 'worktree.setup.noLocalBranch': '此 Git 仓库没有本地分支。请先创建一个本地分支:',\n 'worktree.setup.commands': '可复制的命令',\n 'worktree.name': 'Worktree 名称',\n 'worktree.create': '创建 Worktree',\n 'worktree.import': '导入 Worktree',\n 'session.options': '会话选项:{name}',\n 'session.new': '新会话',\n 'session.rename': '重命名会话',\n 'session.fork': 'Fork 会话',\n 'session.archive': '归档会话',\n 'session.copyId': '复制 Session ID',\n 'session.expandMore': '展开其余 {count} 个会话',\n 'session.collapse': '收起',\n 'session.name': '会话名称',\n 'session.status.running': '进行中',\n 'session.status.subagentsRunning.one': '{n} 个子代理运行中',\n 'session.status.subagentsRunning.other': '{n} 个子代理运行中',\n 'session.status.idle': '空闲',\n 'session.status.waitingApproval': '等待审批',\n 'session.status.planReview': '计划待审',\n 'session.status.waitingAnswer': '等待回答',\n 'session.status.completed': '已完成',\n copy: '复制',\n 'hover.copied': '已复制',\n 'session.time.now': '刚刚',\n 'session.time.minutes': '{n}分钟',\n 'session.time.hours': '{n}小时',\n 'session.time.days': '{n}天',\n 'session.time.months': '{n}个月',\n 'session.time.years': '{n}年',\n 'session.time.ago': '{t}前',\n 'dialog.close': '关闭',\n 'dialog.closeBaseline': '关闭编辑基线对话框',\n 'dialog.closeWorkspaceRename': '关闭重命名工作区对话框',\n 'dialog.closeWorkspaceDelete': '关闭删除工作区对话框',\n 'dialog.closeWorktreeCreate': '关闭创建 Worktree 对话框',\n 'dialog.closeWorktreeArchive': '关闭归档 Worktree 对话框',\n 'dialog.closeWorktreeRemove': '关闭归档 Worktree 对话框',\n 'dialog.closeWorktreeCleanDisk': '关闭清理 Worktree 磁盘对话框',\n 'dialog.closeWorktreeForget': '关闭移出管理对话框',\n 'dialog.cleanDisk': '清理磁盘',\n 'dialog.forget': '移出管理',\n 'dialog.cancel': '取消',\n 'dialog.rename': '重命名',\n 'dialog.delete': '删除',\n 'action.retry': '重试',\n 'action.retryBinding': '重试绑定',\n 'action.openCreatedSession': '打开已创建的 Session',\n 'permission.fallbackWorkspaceWrite': '无法使用 Worktree 完全访问预设,已降级为 workspace-write;保留审批提示。',\n 'permission.userRestricted': '已保留你在 DSH 原生权限界面选择的限制,未自动提升此 Worktree Session。',\n 'permission.unverified': '无法验证 Worktree Session 的权限服务;Session 已保留,但完全访问未得到确认。',\n 'permission.unavailable': 'Worktree Session 权限状态暂时不可用,请重试。',\n 'permission.fullAccessTitle': '确认启用 Worktree Full access?',\n 'permission.fullAccessDescription': '启用 Worktree Full access 后,此 Session 可能访问 Session 目录之外的关联 Git 元数据和 Worktree 文件。完全访问会关闭此 Session 的文件系统沙箱,但会保留审批提示;网络和进程策略不变。目标 Worktree:{cwd}',\n 'permission.fullAccessAcknowledge': '我已了解风险,并愿意继续',\n 'permission.fullAccessEnable': '启用 Worktree Full access',\n 'status.loading': '正在加载工作区…',\n 'error.worktreeDataUnavailable': 'Worktree 数据不可用,请重试。',\n 'error.gitNotInstalled': 'Git 未安装或不可用,请安装 Git 后重试。',\n 'error.connectionDisposed': 'Worktree 连接已释放,请重新加载插件后重试。',\n 'error.connectionFailed': 'Worktree endpoint {endpoint} 调用失败;连接错误,可重试:{reason}',\n 'error.invalidResult': 'Worktree endpoint {endpoint} 返回了无效结果,请重试请求。',\n 'error.workspaceOrderingUnavailable': '工作区排序不可用,请重新连接后重试。',\n 'error.sessionOrderingUnavailable': '会话排序不可用,请重新连接后重试。',\n 'error.worktreeOrderingUnavailable': 'Worktree 排序不可用,请重新连接后重试。',\n 'error.worktreeCreatedSessionUnavailable': 'Worktree 已创建,但 Session 创建不可用,请重新连接后重试。',\n 'error.sessionCreationUnavailable': 'Session 创建不可用,请重新连接后重试。',\n 'error.worktreeRecordMissing': 'Worktree 注册未返回 Worktree 记录,请重试请求。',\n 'error.worktreeImportInvalid': '这个 Worktree 无法导入,请选择同一 Workspace 中有效的绝对路径。',\n 'error.worktreeAlreadyManaged': '这个 Worktree 已由插件管理。',\n 'error.worktreeMutationBusy': '另一个 DSH 实例正在修改 Worktree 状态,请稍后重试。',\n 'error.worktreeStateConflict': 'Worktree 状态已经变化,请刷新后重试。',\n 'error.worktreeRecoveryRequired': 'Worktree 状态需要恢复;请先完成恢复后再重试破坏性操作。',\n 'error.worktreeIdentityChanged': 'Worktree 或 repository 身份已经变化,需要恢复后再操作。',\n 'error.worktreeSessionBusy': '关联 Session 正在运行,无法执行此操作。',\n 'error.worktreeActivityUnavailable': '无法验证关联 Session 运行状态,无法执行此操作。',\n 'error.worktreeRegistrationSessionUnavailable': 'Worktree 已注册,但 Session 创建不可用,请重新连接后重试。',\n 'error.workspaceRenameUnavailable': '工作区重命名不可用,请重新连接后重试。',\n 'error.workspaceDeleteUnavailable': '工作区删除不可用,请重新连接后重试。',\n 'error.sessionRenameUnavailable': '会话重命名不可用,请重新连接后重试。',\n 'error.sessionBindingFailed': 'Session {sessionId} 已创建,但 Worktree 绑定失败:{reason}',\n 'error.sessionAlreadyBound': 'Session 已绑定到其他 Worktree,未创建新的 Session。',\n 'error.worktreePermissionConfirmationRequired': 'Session 和绑定已保留;确认完全访问后重试,未打开 Session。',\n 'error.worktreePermissionFailed': 'Worktree Session 权限设置失败,可重试:{reason}',\n 'error.sessionListNotReady': 'Session 列表尚未就绪,请重试。',\n 'error.sessionFactsIncomplete': 'Session 信息尚未完整,请重试。',\n 'error.worktreeSessionRepairRequired': '当前 Worktree 的 Session 绑定需要修复,请重试。',\n 'error.worktreeSessionUnavailable': '当前 Worktree 不可用,请重试。',\n 'error.sessionArchived': '该 Session 已归档,无法重试绑定。',\n 'branch.current': '(当前)',\n 'branch.checkedOut': '(已检出)',\n};\nexport const en = {\n 'dashboard.title': \"Dashboard\",\n 'dashboard.preview': 'Dashboard preview',\n 'dashboard.open': 'Open Dashboard',\n 'dashboard.copyBranch': 'Copy branch name',\n 'dashboard.branchCopied': 'Branch name copied',\n 'dashboard.branchCopyFailed': 'Branch name copy failed. Try again.',\n 'dashboard.tab.overview': \"Dashboard\",\n 'dashboard.tab.git': \"Git & Changes\",\n 'dashboard.git.title': 'Git & Changes',\n 'dashboard.git.baselineSelector': 'Baseline branch',\n 'dashboard.git.selectBaseline': 'Select a baseline branch',\n 'dashboard.git.selectBaselineTitle': 'Select a baseline branch',\n 'dashboard.git.selectBaselineDescription': 'Choose a local branch as the comparison point to view commits, changed files, and diffs.',\n 'dashboard.git.base': 'Base',\n 'dashboard.git.head': 'HEAD',\n 'dashboard.git.commit': 'Commit',\n 'dashboard.git.commits': 'Commits',\n 'dashboard.git.commitCount': '{n} commits',\n 'dashboard.git.commitCountWithWorkingTree': '{commits} commits + working tree changes',\n 'dashboard.git.uncommittedChanges': 'Uncommitted changes',\n 'dashboard.git.workingTree': 'Working tree',\n 'dashboard.git.changedFiles': 'Changed files',\n 'dashboard.git.lineStats': '+{additions} lines, -{deletions} lines',\n 'dashboard.git.aheadBehindStats': '+{ahead} ahead, -{behind} behind',\n 'dashboard.git.diff': 'Diff',\n 'dashboard.git.resizeRows': 'Drag to resize the stacked panes; double-click to reset',\n 'dashboard.git.resizeColumns': 'Drag to resize the side-by-side panes; double-click to reset',\n 'dashboard.git.openInSidebar': 'Open in Sidebar',\n 'dashboard.git.summaryDiff': 'Summary diff',\n 'dashboard.git.baselineSummary': 'Baseline summary',\n 'dashboard.git.baselineSummaryDescription': 'View all committed changes from the resolved baseline boundary (the shared ancestor when the baseline branch has diverged) to HEAD, excluding the working tree by default.',\n 'dashboard.git.includeWorkingTree': 'Include working tree',\n 'dashboard.git.includeWorkingTreeDescription': 'Include staged, unstaged, and untracked files.',\n 'dashboard.git.selectedCommitCount': '{n} commits selected',\n 'dashboard.git.multiSelectCommits': 'Multi-select commits',\n 'dashboard.git.multiSelectCommitsDescription': 'When off, clicking a commit shows its own diff; when on, several commits can be selected together.',\n 'dashboard.git.commitSelectionHint': 'Select multiple commits; working-tree changes cannot be mixed with commits.',\n 'dashboard.git.clearCommitSelection': 'Clear selection',\n 'dashboard.git.commitDiffSection': 'Commit change',\n 'dashboard.git.loadingSummaryFiles': 'Loading baseline summary changes…',\n 'dashboard.git.loadingSummaryDiff': 'Loading baseline summary diff…',\n 'dashboard.git.noBaselineChanges': 'The baseline and HEAD have no committed net changes.',\n 'dashboard.git.noLiveBaselineChanges': 'The baseline and current working tree have no net changes.',\n 'dashboard.git.refresh': 'Refresh',\n 'dashboard.git.refreshing': 'Refreshing…',\n 'dashboard.git.retry': 'Retry',\n 'dashboard.git.loading': 'Loading Git history and working tree changes…',\n 'dashboard.git.loadingFiles': 'Loading changed files…',\n 'dashboard.git.loadingDiff': 'Loading diff…',\n 'dashboard.git.loadFailed': 'Git data failed to load: {reason}',\n 'dashboard.git.refreshFailed': 'Git refresh failed: {reason}',\n 'dashboard.git.baselineUnknownTitle': 'Historical baseline unavailable',\n 'dashboard.git.baselineUnknownDescription': 'The selected branch cannot be safely compared with the current HEAD; confirm that it is still an ancestor of HEAD.',\n 'dashboard.git.mainUnavailableTitle': 'Not available for the local Workspace',\n 'dashboard.git.mainUnavailableDescription': 'Branch baseline selection in the Git Dashboard applies only to registered Worktrees.',\n 'dashboard.git.derived': 'Derived at runtime',\n 'dashboard.git.noCommits': 'No commits are ahead of the baseline.',\n 'dashboard.git.noFiles': 'This entry has no displayable changed files.',\n 'dashboard.git.selectCommit': 'Select a commit or working-tree change to view its details.',\n 'dashboard.git.selectFile': 'Select a file to view its diff.',\n 'dashboard.git.untitledCommit': '(untitled commit)',\n 'dashboard.git.truncatedHistory': 'Showing the first 200 commits.',\n 'dashboard.git.truncatedFiles': 'Too many changed files to list completely.',\n 'dashboard.git.binary': 'Binary files have no text diff to display.',\n 'dashboard.git.diffTruncated': 'The diff is too large to display completely; inspect the full change in your IDE.',\n 'dashboard.git.diffLinesHidden': 'Folded {n} diff lines to keep scrolling responsive.',\n 'dashboard.git.showFullDiff': 'Show full diff',\n 'dashboard.git.emptyDiff': 'No diff to display.',\n 'dashboard.git.status.added': 'Added',\n 'dashboard.git.status.modified': 'Modified',\n 'dashboard.git.status.deleted': 'Deleted',\n 'dashboard.git.status.renamed': 'Renamed',\n 'dashboard.git.status.copied': 'Copied',\n 'dashboard.git.status.typeChanged': 'Type changed',\n 'dashboard.tab.sessions': \"Sessions\",\n 'dashboard.tab.children': \"Children\",\n 'dashboard.tab.settings': \"Settings\",\n 'dashboard.back': \"Back to session\",\n 'dashboard.openSidebar': 'Open sidebar',\n 'dashboard.soon': \"Coming soon\",\n 'dashboard.notConnected': \"Not connected\",\n 'dashboard.unknown': \"Unknown\",\n 'dashboard.unknownError': 'Unknown error',\n 'dashboard.historicalUnavailable': \"Unavailable for historical Worktrees\",\n 'dashboard.detached': \"Detached HEAD\",\n 'dashboard.cleaned': \"Cleaned\",\n 'dashboard.archived': \"Archived\",\n 'dashboard.copied': \"Full path copied\",\n 'dashboard.copyFailed': \"Copy failed. Try again or select the path above.\",\n 'dashboard.openEditor': \"Open in VS Code\",\n 'dashboard.openIn': \"Open in {app}\",\n 'dashboard.created': \"Created\",\n 'dashboard.imported': 'Imported',\n 'dashboard.editorMenu': 'Choose application',\n 'dashboard.saveInstructions': 'Save',\n 'dashboard.savingInstructions': 'Saving…',\n 'dashboard.cancelInstructions': 'Cancel',\n 'dashboard.instructionsSaveFailed': 'Save failed; your draft is retained. Retry, or cancel and reopen if another window changed the instructions.',\n 'dashboard.editBase': 'Edit baseline',\n 'dashboard.editBaseDescription': 'Choose a local branch as the Git & Changes comparison baseline.',\n 'dashboard.searchBranches': 'Search branches',\n 'dashboard.noMatchingBranches': 'No matching branches',\n 'dashboard.selectBaseBranch': 'Select a baseline branch',\n 'dashboard.saveBase': 'Save baseline',\n 'dashboard.savingBase': 'Saving…',\n 'dashboard.cancelBase': 'Cancel',\n 'dashboard.baseSaveFailed': 'Baseline save failed; your draft is retained. Retry, or cancel and reopen if another window changed the baseline.',\n 'dashboard.base': \"Base\",\n 'dashboard.source': \"Source\",\n 'dashboard.external': \"Imported\",\n 'dashboard.plugin': \"Plugin-created\",\n 'dashboard.start': \"Start a new work\",\n 'dashboard.startDescription': \"Choose how to continue from this worktree\",\n 'dashboard.newWorktree': \"New Worktree\",\n 'dashboard.newSession': \"New Session\",\n 'dashboard.newWorktreeDescription': \"Create an isolated worktree from this branch\",\n 'dashboard.newSessionDescription': \"Start another session in this worktree\",\n 'dashboard.instructions': \"Worktree Instructions\",\n 'dashboard.edit': \"Edit\",\n 'dashboard.instructionsDescription': \"A place for shared guidance for this worktree.\",\n 'dashboard.noInstructions': \"No instructions yet\",\n 'dashboard.instructionsHint': \"Up to 32,000 characters. Saved instructions enter bound Sessions’ next model request as <system-reminder>. Clear and save to disable.\",\n 'dashboard.noSessions': \"No visible sessions in this worktree.\",\n 'dashboard.viewSessions': \"View all sessions\",\n 'dashboard.status': \"Worktree Status\",\n 'dashboard.statusHint': \"Availability comes from existing checks; after you choose a branch baseline, Git & Changes shows later commits, while the status facts separate committed and uncommitted line counts.\",\n 'dashboard.health': \"Availability\",\n 'dashboard.branch': \"Current branch\",\n 'dashboard.branchUnavailable': 'Current branch unavailable',\n 'dashboard.aheadBehind': \"Ahead / Behind\",\n 'dashboard.committedChanges': \"Committed changes\",\n 'dashboard.workingTree': \"Uncommitted changes\",\n 'dashboard.viewDetails': \"View details\",\n 'dashboard.derived': \"Derived Worktrees\",\n 'dashboard.childrenHint': \"Parent and child relationships are not connected yet.\",\n 'dashboard.viewChildren': \"View all children\",\n 'dashboard.quickActions': \"Quick Actions\",\n 'dashboard.action.terminal': \"Open in Terminal\",\n 'dashboard.action.diff': \"View Git Diff\",\n 'dashboard.action.pullRequest': \"Create Pull Request\",\n 'dashboard.action.tests': \"Run Tests\",\n 'dashboard.action.sync': \"Sync with Base\",\n 'dashboard.action.archive': \"Archive Worktree\",\n 'dashboard.hint.git': \"View commits, committed and uncommitted line totals, changed files, and unified diffs relative to the selected branch baseline.\",\n 'dashboard.hint.children': \"Derived worktrees and their relationships will appear here.\",\n 'dashboard.hint.settings': \"Worktree instructions and preferences will appear here. No changes are saved yet.\",\n 'dashboard.mvpHint': \"MVP · Sessions, Worktree creation, archive, Git changes, and VS Code are connected. Other actions marked Coming soon are unavailable.\",\n 'mode.open': 'Open Worktree mode',\n 'mode.exit': 'Exit Worktree mode',\n 'mode.label': 'Worktree',\n 'mode.navigation': 'Worktree navigation',\n 'context.main': 'Current branch: {name}',\n 'context.worktree': 'Worktree: {name}',\n 'workspace.rename': 'Rename',\n 'workspace.delete': 'Delete',\n 'workspace.expand': 'Expand {name}',\n 'workspace.collapse': 'Collapse {name}',\n 'workspace.collapseAll': 'Collapse All',\n 'workspace.options': 'Workspace options for {name}',\n 'workspace.addWorktree': 'Add Worktree to {name}',\n 'workspace.add': 'Add Workspace',\n 'workspace.search': 'Search Workspaces and Sessions',\n 'search.clear': 'Clear search',\n 'workspace.noMatches': 'No matching Workspaces',\n 'workspace.renameTitle': 'Rename Workspace',\n 'workspace.name': 'Workspace name',\n 'workspace.duplicate': 'A Workspace with this name already exists.',\n 'workspace.deleteTitle': 'Delete Workspace',\n 'workspace.deleteDescription': 'Delete {name}? This removes only the DSH Workspace registration. The directory, Sessions, and Git Worktrees will be retained.',\n 'worktree.title': 'Worktrees',\n 'worktree.main': 'Local',\n 'worktree.mainWithBranch': 'Local ({branch})',\n 'worktree.detached': 'Detached Worktree',\n 'worktree.repair': 'Worktree needs repair',\n 'worktree.repairGuidance': 'Check the directory, .git entry, and Git Worktree registration at this path. Restore a moved directory to its original path. If it still exists but Git links are broken, run git worktree repair there and refresh. If it was deleted and is no longer needed, archive it, then use Clean Disk to reconcile removal or Remove from Management.',\n 'worktree.recoveryGuidance': 'A previous operation is incomplete, or the directory and repository identity could not be verified. Check that the original directory and repository are accessible, then choose Retry Recovery from this Worktree menu. If it still fails, keep the error details for diagnosis; do not delete the plugin index manually.',\n 'worktree.branchDriftGuidance': 'The current branch differs from the recorded branch. If intentional, choose Adopt Current Branch from this Worktree menu; otherwise switch back in Git and refresh. Session bindings and working directories are preserved.',\n 'worktree.detachedGuidance': 'This directory has a detached HEAD. Switch to the intended local branch in Git and refresh, then choose Adopt Current Branch if it differs from the recorded branch.',\n 'notice.details': 'Notification details and recovery',\n 'worktree.recovery': 'Worktree requires recovery',\n 'worktree.ready': 'Active Worktree ready',\n 'worktree.branchDrift': 'Git branch changed',\n 'worktree.detachedHead': 'Detached HEAD',\n 'worktree.adoptBranch': 'Adopt current branch',\n 'worktree.retryRecovery': 'Retry recovery',\n 'worktree.adoptDescription': 'Update the recorded branch from “{previous}” to “{current}”? Only the plugin index changes; Session bindings and disk files are preserved.',\n 'worktree.adoptBeforeClean': 'Adopt the current branch first; for detached HEAD, check out a branch in Git first.',\n 'worktree.cleaned': 'Worktree removed',\n 'worktree.archivedGroup': 'Archived',\n 'worktree.cleanDisk': 'Clean Up Disk',\n 'worktree.cleanDiskTitle': 'Clean Up Worktree Disk',\n 'worktree.cleanDiskDescription': 'Delete {name} ({path}) from disk? This operation cannot be undone. The plugin does not check whether Sessions or subagents are running. Confirm that all tasks using this directory have stopped; otherwise deletion may cause task failures or data loss. If the directory or .git is already absent, only the Worktree removal status is synchronized; remaining files are not deleted. Linked Sessions and history are preserved.',\n 'worktree.forget': 'Remove from Management',\n 'worktree.forgetTitle': 'Remove from Management',\n 'worktree.forgetDescription': 'Remove {name} from Worktree plugin management? Disk directories and Sessions in DSH will be retained.',\n 'worktree.expand': 'Expand {name}',\n 'worktree.collapse': 'Collapse {name}',\n 'worktree.options': 'Worktree options for {name}',\n 'worktree.copyPath': 'Copy path',\n 'worktree.createNew': 'Create new Worktree',\n 'worktree.archive': 'Archive Worktree',\n 'worktree.archiveDescription': 'Archive {name}? It moves to the Archived group. Disk files, Session bindings, and working directories are preserved; existing Sessions remain usable. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.unarchive': 'Unarchive Worktree',\n 'worktree.unarchiveDisabledRepair': 'Cannot unarchive because directory or Git registration is abnormal',\n 'worktree.archiveExternalDescription': 'Archive {name}? It moves to the Archived group. The external directory, Session bindings, and working directories are preserved; existing Sessions remain usable. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.remove': 'Archive Worktree',\n 'worktree.removeDescription': 'Archive {name}? The directory, Session bindings, and working directories are preserved. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.removeExternalDescription': 'Archive {name}? The external directory, Session bindings, and working directories are preserved. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.addSession': 'Add Session to {name}',\n 'worktree.noWorktrees': 'No Worktrees',\n 'worktree.createTitle': 'New Worktree',\n 'worktree.createDescription': '{name} · the Worktree path is managed by DSH.',\n 'worktree.tabCreate': 'Create',\n 'worktree.tabImport': 'Import',\n 'worktree.importDescription': 'Register an existing Worktree for {name}. Registration and archiving preserve the directory; only a separately confirmed Clean Disk action deletes it.',\n 'worktree.importLoading': 'Finding importable Worktrees…',\n 'worktree.importEmpty': 'No importable Worktrees found.',\n 'worktree.importPlaceholder': 'Select a Worktree to import',\n 'worktree.importSelected': 'Selected',\n 'worktree.baseBranch': 'Worktree base branch',\n 'worktree.noLocalBranch': 'No local branch',\n 'worktree.noBranches': 'No local branches found in this Workspace.',\n 'worktree.setup.gitNotInstalled': 'Git is not installed or is not available on PATH. Install Git, restart DSH, and retry.',\n 'worktree.setup.noRepository': 'This Workspace is not a Git repository. Run these commands in the Workspace directory:',\n 'worktree.setup.noInitialCommit': 'This Git repository has no initial commit. Run these commands first:',\n 'worktree.setup.noLocalBranch': 'This Git repository has no local branch. Create one first:',\n 'worktree.setup.commands': 'Copyable commands',\n 'worktree.name': 'Worktree name',\n 'worktree.create': 'Create Worktree',\n 'worktree.import': 'Import Worktree',\n 'session.options': 'Session options for {name}',\n 'session.new': 'New Session',\n 'session.rename': 'Rename session',\n 'session.fork': 'Fork session',\n 'session.archive': 'Archive session',\n 'session.copyId': 'Copy session ID',\n 'session.expandMore': 'Expand {count} more',\n 'session.collapse': 'Collapse',\n 'session.name': 'Session name',\n 'session.status.running': 'Running',\n 'session.status.subagentsRunning.one': '{n} subagent running',\n 'session.status.subagentsRunning.other': '{n} subagents running',\n 'session.status.idle': 'Idle',\n 'session.status.waitingApproval': 'Waiting for approval',\n 'session.status.planReview': 'Plan awaiting review',\n 'session.status.waitingAnswer': 'Waiting for answer',\n 'session.status.completed': 'Completed',\n copy: 'Copy',\n 'hover.copied': 'Copied',\n 'session.time.now': 'now',\n 'session.time.minutes': '{n}min',\n 'session.time.hours': '{n}h',\n 'session.time.days': '{n}d',\n 'session.time.months': '{n}mo',\n 'session.time.years': '{n}y',\n 'session.time.ago': '{t} ago',\n 'dialog.close': 'Close',\n 'dialog.closeBaseline': 'Close Edit baseline dialog',\n 'dialog.closeWorkspaceRename': 'Close Rename Workspace dialog',\n 'dialog.closeWorkspaceDelete': 'Close Delete Workspace dialog',\n 'dialog.closeWorktreeCreate': 'Close Create Worktree dialog',\n 'dialog.closeWorktreeArchive': 'Close Archive Worktree dialog',\n 'dialog.closeWorktreeRemove': 'Close Archive Worktree dialog',\n 'dialog.closeWorktreeCleanDisk': 'Close Clean Up Worktree Disk dialog',\n 'dialog.closeWorktreeForget': 'Close Remove from Management dialog',\n 'dialog.cleanDisk': 'Clean Up Disk',\n 'dialog.forget': 'Remove from Management',\n 'dialog.cancel': 'Cancel',\n 'dialog.rename': 'Rename',\n 'dialog.delete': 'Delete',\n 'action.retry': 'Retry',\n 'action.retryBinding': 'Retry Binding',\n 'action.openCreatedSession': 'Open Created Session',\n 'permission.fallbackWorkspaceWrite': 'The Worktree Full Access preset is unavailable; fell back to workspace-write with approval prompts enabled.',\n 'permission.userRestricted': 'The restriction selected in DSH’s native permission UI was preserved; this Worktree Session was not elevated.',\n 'permission.unverified': 'The Worktree Session permission service could not be verified; the Session was retained, but Full Access is not confirmed.',\n 'permission.unavailable': 'The Worktree Session permission state is temporarily unavailable; retry the request.',\n 'permission.fullAccessTitle': 'Enable Worktree Full access?',\n 'permission.fullAccessDescription': 'Worktree Full access lets this Session access linked Git metadata and Worktree files outside the Session directory. It disables filesystem confinement for this Session while keeping approval prompts enabled; network and process policy are unchanged. Target Worktree: {cwd}',\n 'permission.fullAccessAcknowledge': 'I understand the risks and want to continue',\n 'permission.fullAccessEnable': 'Enable Worktree Full access',\n 'status.loading': 'Loading Workspaces…',\n 'error.worktreeDataUnavailable': 'Worktree data is unavailable. Retry the request.',\n 'error.gitNotInstalled': 'Git is not installed or unavailable. Install Git and retry.',\n 'error.connectionDisposed': 'Worktree connection is disposed; reload the plugin and retry.',\n 'error.connectionFailed': 'Worktree endpoint {endpoint} failed; retryable connection error: {reason}',\n 'error.invalidResult': 'Worktree endpoint {endpoint} returned an invalid result; retry the request.',\n 'error.workspaceOrderingUnavailable': 'Workspace ordering is unavailable; retry after reconnecting.',\n 'error.sessionOrderingUnavailable': 'Session ordering is unavailable; retry after reconnecting.',\n 'error.worktreeOrderingUnavailable': 'Worktree ordering is unavailable; retry after reconnecting.',\n 'error.worktreeCreatedSessionUnavailable': 'Worktree created, but Session creation is unavailable; retry after reconnecting.',\n 'error.sessionCreationUnavailable': 'Session creation is unavailable; retry after reconnecting.',\n 'error.worktreeRecordMissing': 'Worktree registration returned no Worktree record; retry the request.',\n 'error.worktreeImportInvalid': 'This Worktree cannot be imported. Choose a valid absolute path in this Workspace.',\n 'error.worktreeAlreadyManaged': 'This Worktree is already managed by the plugin.',\n 'error.worktreeMutationBusy': 'Another DSH instance is mutating Worktree state; retry shortly.',\n 'error.worktreeStateConflict': 'The Worktree state changed; refresh and retry the request.',\n 'error.worktreeRecoveryRequired': 'Worktree state requires recovery; resolve it before retrying destructive actions.',\n 'error.worktreeIdentityChanged': 'The Worktree or repository identity changed; recovery is required before acting.',\n 'error.worktreeSessionBusy': 'Linked Session activity is still running; operation rejected.',\n 'error.worktreeActivityUnavailable': 'Unable to verify linked Session activity; operation rejected.',\n 'error.worktreeRegistrationSessionUnavailable': 'The Worktree was registered, but Session creation is unavailable; retry after reconnecting.',\n 'error.workspaceRenameUnavailable': 'Workspace rename is unavailable; retry after reconnecting.',\n 'error.workspaceDeleteUnavailable': 'Workspace delete is unavailable; retry after reconnecting.',\n 'error.sessionRenameUnavailable': 'Session rename is unavailable; retry after reconnecting.',\n 'error.sessionBindingFailed': 'Session {sessionId} was created, but Worktree binding failed: {reason}',\n 'error.sessionAlreadyBound': 'The Session is already bound to another Worktree; no new Session was created.',\n 'error.worktreePermissionConfirmationRequired': 'The Session and binding were retained; confirm Full Access and retry. The Session was not opened.',\n 'error.worktreePermissionFailed': 'Worktree Session permission setup failed; retryable error: {reason}',\n 'error.sessionListNotReady': 'The Session list is not ready yet; retry the request.',\n 'error.sessionFactsIncomplete': 'Session facts are incomplete; retry the request.',\n 'error.worktreeSessionRepairRequired': 'The current Worktree Session binding needs repair; retry the request.',\n 'error.worktreeSessionUnavailable': 'The current Worktree is unavailable; retry the request.',\n 'error.sessionArchived': 'This Session is archived and cannot be retried for binding.',\n 'branch.current': ' (current)',\n 'branch.checkedOut': ' (checked out)',\n};\n//# sourceMappingURL=locales.js.map","/** The one logical channel shared by the DSH Connection and Typert Gateway. */\nexport const WORKTREE_CONNECTION_CHANNEL = '/api';\n/**\n * Canonical Worktree endpoints owned by this adapter. Keeping the table here makes\n * the browser call surface auditable without making React know wire names.\n */\nexport const WORKTREE_CONNECTION_ENDPOINTS = Object.freeze({\n listWorktrees: 'worktreeManager/listWorktrees',\n listWorktreeCommits: 'worktreeManager/listWorktreeCommits',\n listWorktreeCommitFiles: 'worktreeManager/listWorktreeCommitFiles',\n getWorktreeCommitFileDiff: 'worktreeManager/getWorktreeCommitFileDiff',\n listImportCandidates: 'worktreeManager/listImportCandidates',\n listBranches: 'worktreeManager/listBranches',\n createWorktree: 'worktreeManager/createWorktree',\n importWorktree: 'worktreeManager/importWorktree',\n removeWorktree: 'worktreeManager/removeWorktree',\n unarchiveWorktree: 'worktreeManager/unarchiveWorktree',\n cleanWorktree: 'worktreeManager/cleanWorktree',\n adoptWorktreeBranch: 'worktreeManager/adoptWorktreeBranch',\n recoverWorktrees: 'worktreeManager/recoverWorktrees',\n forgetWorktree: 'worktreeManager/forgetWorktree',\n insertWorktreeBefore: 'worktreeManager/insertWorktreeBefore',\n updateWorktreeInstructions: 'worktreeManager/updateWorktreeInstructions',\n updateWorktreeBaseBranch: 'worktreeManager/updateWorktreeBaseBranch',\n listBindings: 'worktreeManager/listBindings',\n bindSession: 'worktreeManager/bindSession',\n ensureWorktreePermission: 'worktreeManager/ensureWorktreePermission',\n normalizeDetachedWorktreePermissions: 'worktreeManager/normalizeDetachedWorktreePermissions',\n});\n/** Browser-safe error shared by transport, Gateway, endpoint and domain failures. */\nexport class WorktreeConnectionError extends Error {\n code;\n details;\n retryable;\n constructor(options) {\n super(options.message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = 'WorktreeConnectionError';\n this.code = options.code;\n this.details = Object.freeze({ ...(options.details ?? {}) });\n this.retryable = options.retryable;\n }\n}\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction isWorktreeError(value) {\n return (isRecord(value) &&\n typeof value.code === 'string' &&\n typeof value.message === 'string' &&\n isRecord(value.details));\n}\nfunction isWorktreeRemoteResult(value) {\n if (!isRecord(value) || typeof value.ok !== 'boolean')\n return false;\n return value.ok || (isWorktreeError(value.error) && value.error.details !== undefined);\n}\nfunction disposedError() {\n return new WorktreeConnectionError({\n code: 'CLIENT_DISPOSED',\n message: '',\n details: {},\n retryable: false,\n });\n}\nfunction connectionFailure(endpoint, error, code = 'CONNECTION_CALL_FAILED') {\n const message = error instanceof Error ? error.message : String(error);\n return new WorktreeConnectionError({\n code,\n message,\n details: { endpoint },\n retryable: true,\n cause: error,\n });\n}\nfunction gatewayFailure(endpoint, result) {\n const rawDetails = isRecord(result.error.details) ? result.error.details : {};\n throw new WorktreeConnectionError({\n code: result.error.code,\n message: result.error.message,\n details: { endpoint, ...rawDetails },\n retryable: true,\n });\n}\nfunction invalidResult(endpoint) {\n return new WorktreeConnectionError({\n code: 'WORKTREE_RPC_INVALID_RESULT',\n message: '',\n details: { endpoint },\n retryable: true,\n });\n}\nfunction unwrap(endpoint, result) {\n if (!result.ok)\n gatewayFailure(endpoint, result);\n if (!isWorktreeRemoteResult(result.value))\n throw invalidResult(endpoint);\n if (!result.value.ok) {\n throw new WorktreeConnectionError({\n code: result.value.error.code,\n message: result.value.error.message,\n details: result.value.error.details,\n retryable: false,\n });\n }\n return result.value.value;\n}\n/**\n * Adapt the shared DSH Connection RPC into the existing WorktreeManager contract.\n * All wire details and request cancellation live behind this one deep module.\n */\nexport function createWorktreeConnectionAdapter(rpc) {\n const inFlight = new Set();\n let disposed = false;\n async function invoke(method, input) {\n if (disposed)\n throw disposedError();\n const controller = new AbortController();\n inFlight.add(controller);\n const endpoint = WORKTREE_CONNECTION_ENDPOINTS[method];\n try {\n let result;\n try {\n result = await rpc.call(WORKTREE_CONNECTION_CHANNEL, endpoint, { args: { input } }, controller.signal);\n }\n catch (error) {\n if (disposed && controller.signal.aborted)\n throw disposedError();\n throw connectionFailure(endpoint, error);\n }\n return unwrap(endpoint, result);\n }\n finally {\n inFlight.delete(controller);\n }\n }\n return {\n listWorktrees: (input) => invoke('listWorktrees', input),\n listWorktreeCommits: (input) => invoke('listWorktreeCommits', input),\n listWorktreeCommitFiles: (input) => invoke('listWorktreeCommitFiles', input),\n getWorktreeCommitFileDiff: (input) => invoke('getWorktreeCommitFileDiff', input),\n listImportCandidates: (input) => invoke('listImportCandidates', input),\n listBranches: (input) => invoke('listBranches', input),\n createWorktree: (input) => invoke('createWorktree', input),\n importWorktree: (input) => invoke('importWorktree', input),\n async removeWorktree(input) {\n await invoke('removeWorktree', input);\n },\n async unarchiveWorktree(input) {\n await invoke('unarchiveWorktree', input);\n },\n async adoptWorktreeBranch(input) { await invoke('adoptWorktreeBranch', input); },\n async recoverWorktrees(input) { await invoke('recoverWorktrees', input); },\n async cleanWorktree(input) {\n await invoke('cleanWorktree', input);\n },\n async forgetWorktree(input) {\n await invoke('forgetWorktree', input);\n },\n async insertWorktreeBefore(input) {\n return invoke('insertWorktreeBefore', input);\n },\n async updateWorktreeInstructions(input) {\n return invoke('updateWorktreeInstructions', input);\n },\n async updateWorktreeBaseBranch(input) {\n return invoke('updateWorktreeBaseBranch', input);\n },\n listBindings: (input) => invoke('listBindings', input),\n bindSession: (input) => invoke('bindSession', input),\n ensureWorktreePermission: (input) => invoke('ensureWorktreePermission', input),\n normalizeDetachedWorktreePermissions: (input) => invoke('normalizeDetachedWorktreePermissions', input),\n dispose() {\n if (disposed)\n return;\n disposed = true;\n for (const controller of inFlight)\n controller.abort();\n inFlight.clear();\n },\n };\n}\n//# sourceMappingURL=worktree-connection.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { HoverCard, IconBranchOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';\nimport styles from './worktree-context.css';\nfunction WorktreeContextLabel({ value, t, }) {\n if (value.kind === 'none')\n return null;\n const ariaLabel = value.kind === 'main'\n ? t('context.main', { name: value.label })\n : t('context.worktree', { name: value.label });\n return (_jsx(HoverCard, { anchor: _jsxs(\"span\", { className: styles.headerContext, title: value.label, \"aria-label\": ariaLabel, children: [_jsx(IconBranchOutline16, { size: 14, className: styles.contextIcon, \"aria-hidden\": \"true\" }), _jsx(\"span\", { className: styles.contextLabel, children: value.label })] }), content: _jsx(\"div\", { className: styles.contextHoverTitle, children: value.label }), openDelayMs: 500, copyLabel: t('copy'), copiedLabel: t('hover.copied') }));\n}\n/** Render the current branch or active Worktree branch beside the Session title. */\nexport function WorktreeHeaderContext({ sessionId, useWorktreeContext, t, }) {\n const state = useWorktreeContext((snapshot) => snapshot);\n if (state.sessionId !== sessionId)\n return null;\n return _jsx(WorktreeContextLabel, { value: state.value, t: t });\n}\n//# sourceMappingURL=WorktreeContext.js.map","let globalSetViewMode;\nexport function registerViewModeSetter(setter) {\n globalSetViewMode = setter;\n}\nexport function getViewModeSetter() {\n return globalSetViewMode;\n}\nexport function switchViewMode(mode) {\n globalSetViewMode?.(mode);\n}\n//# sourceMappingURL=view-mode-dispatch.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect } from 'react';\nimport { IconBranchOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { registerViewModeSetter } from './view-mode-dispatch.js';\nimport styles from '../worktree.css';\n/** Footer action that enters/exits the peer Worktree navigation mode. */\nexport function WorktreeModeAction({ wide, useStore, actions, t, available, }) {\n useEffect(() => {\n registerViewModeSetter(actions.setViewMode);\n return () => {\n registerViewModeSetter(undefined);\n };\n }, [actions.setViewMode]);\n if (!available)\n return null;\n const mode = useStore((state) => state.viewMode);\n const active = mode === 'worktree';\n return (_jsxs(\"button\", { type: \"button\", className: styles.action, \"data-worktree-mode-action\": true, \"data-active\": active || undefined, \"data-collapsed\": !wide || undefined, \"aria-label\": active ? t('mode.exit') : t('mode.open'), \"aria-pressed\": active, title: active ? t('mode.exit') : t('mode.label'), onClick: () => {\n actions.setViewMode(active ? 'workspace-session' : 'worktree');\n }, children: [_jsx(IconBranchOutline16, { size: wide ? 16 : 18 }), wide && _jsx(\"span\", { className: styles.actionLabel, children: t('mode.label') })] }));\n}\n//# sourceMappingURL=WorktreeModeAction.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/** 4-quadrant layout glyph representing dashboard / overview. */\nexport function IconDashboard({ size = 16, className, }) {\n return (_jsxs(\"svg\", { width: size, height: size, viewBox: \"0 0 16 16\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"1.5\", className: className, \"aria-hidden\": \"true\", children: [_jsx(\"rect\", { x: \"2\", y: \"2\", width: \"5\", height: \"5\", rx: \"1\" }), _jsx(\"rect\", { x: \"9\", y: \"2\", width: \"5\", height: \"5\", rx: \"1\" }), _jsx(\"rect\", { x: \"2\", y: \"9\", width: \"5\", height: \"5\", rx: \"1\" }), _jsx(\"rect\", { x: \"9\", y: \"9\", width: \"5\", height: \"5\", rx: \"1\" })] }));\n}\n//# sourceMappingURL=dashboard-icon.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Tooltip } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconDashboard } from './dashboard-icon.js';\nimport styles from './dashboard-header-action.css';\n/**\n * Render a quick Dashboard action for the current Session's resolved context.\n * The entry only appears after the shared context read is ready and points at\n * the same Session that owns the native header.\n */\nexport function DashboardHeaderAction({ sessionId, useWorktreeContext, openDashboard, t, }) {\n const state = useWorktreeContext((snapshot) => snapshot);\n if (state.status !== 'ready' || state.sessionId !== sessionId || state.value.kind === 'none') {\n return null;\n }\n return (_jsx(Tooltip, { label: t('dashboard.open'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.headerDashboardButton, \"aria-label\": t('dashboard.open'), onClick: () => {\n openDashboard(String(sessionId));\n }, children: _jsx(IconDashboard, { size: 16 }) }) }));\n}\n//# sourceMappingURL=DashboardHeaderAction.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback, useLayoutEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { HoverCard } from '@deepseek-ai/dsh-client-ui-primitives';\nimport styles from './worktree-context.css';\nfunction labelFor(state) {\n if (state.status !== 'ready' ||\n state.workspaceTitle === undefined ||\n state.value.kind === 'none') {\n return undefined;\n }\n return `${state.workspaceTitle} (${state.value.label})`;\n}\nfunction elementWithClassSuffix(root, suffix) {\n const candidates = root.querySelectorAll('[class]');\n for (const candidate of candidates) {\n if ([...candidate.classList].some((token) => token === suffix || token.endsWith(`_${suffix}`))) {\n return candidate;\n }\n }\n return null;\n}\nfunction headlineElement(root) {\n // Anchor to the visible end of the native title line. The headline wrapper\n // spans the whole content column, so using it would place the suffix at the\n // far edge instead of immediately after the title and preview badge.\n return elementWithClassSuffix(root, 'previewBadge')\n ?? elementWithClassSuffix(root, 'headlineText')\n ?? elementWithClassSuffix(root, 'headline');\n}\nfunction positionedAncestor(element) {\n if (element.offsetParent instanceof HTMLElement)\n return element.offsetParent;\n for (let ancestor = element.parentElement; ancestor !== null; ancestor = ancestor.parentElement) {\n if (getComputedStyle(ancestor).position !== 'static')\n return ancestor;\n }\n return null;\n}\nfunction overlayFor(element) {\n const host = element.closest('[data-worktree-hero-host]');\n return positionedAncestor(host ?? element);\n}\nfunction measurePlacement(element) {\n const hero = document.querySelector('[data-phase=\"hero\"]');\n // The Slot renderer inserts a display: contents wrapper before the actual\n // shell overlay layer, so the direct parent is not the containing block.\n const overlay = overlayFor(element);\n const headline = hero === null ? null : headlineElement(hero);\n if (hero === null || headline === null || overlay === null)\n return null;\n const anchor = headline.getBoundingClientRect();\n const frame = overlay.getBoundingClientRect();\n const width = element.getBoundingClientRect().width;\n const afterHeadlineLeft = anchor.right - frame.left + 8;\n const fitsAfterHeadline = afterHeadlineLeft + width <= frame.width - 8;\n return {\n left: fitsAfterHeadline\n ? afterHeadlineLeft\n : Math.max(8, frame.width - width - 8),\n top: fitsAfterHeadline\n ? Math.max(8, anchor.top - frame.top + (anchor.height - 22) / 2)\n : Math.max(8, anchor.bottom - frame.top + 8),\n };\n}\nfunction contextAriaLabel(state, t) {\n if (state.value.kind === 'main')\n return t('context.main', { name: state.value.label });\n if (state.value.kind === 'worktree')\n return t('context.worktree', { name: state.value.label });\n return undefined;\n}\nfunction heroContainer() {\n if (typeof document === 'undefined')\n return null;\n const el = document.querySelector('[data-phase=\"hero\"]');\n return el && el.isConnected ? el : null;\n}\n/**\n * Browser-local Hero suffix. Portaled directly into the native Hero container\n * so its stacking context stays within the conversation column instead of\n * floating above overlays, menus, and dropdowns.\n */\nexport function WorktreeHeroContext({ useWorktreeContext, t, }) {\n const state = useWorktreeContext((snapshot) => snapshot);\n const label = labelFor(state);\n const [placement, setPlacement] = useState(null);\n const [heroTarget, setHeroTarget] = useState(() => heroContainer());\n const measure = useCallback((element) => {\n if (element === null) {\n setPlacement(null);\n return;\n }\n setPlacement(measurePlacement(element));\n }, []);\n useLayoutEffect(() => {\n if (typeof document === 'undefined' || typeof window === 'undefined')\n return undefined;\n let frameRequest;\n const schedule = () => {\n if (frameRequest !== undefined)\n window.cancelAnimationFrame(frameRequest);\n frameRequest = window.requestAnimationFrame(() => {\n frameRequest = undefined;\n const currentHero = heroContainer();\n setHeroTarget((prev) => (prev === currentHero ? prev : currentHero));\n const element = document.querySelector('[data-worktree-hero-context]');\n if (element !== null) {\n measure(element);\n }\n else {\n setPlacement(null);\n }\n });\n };\n const mutationObserver = typeof MutationObserver === 'undefined'\n ? undefined\n : new MutationObserver(schedule);\n mutationObserver?.observe(document.body, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['class', 'data-phase'],\n });\n const element = document.querySelector('[data-worktree-hero-context]');\n const observedAncestor = element !== null ? (overlayFor(element) ?? element) : (heroTarget ?? document.body);\n const resizeObserver = typeof ResizeObserver === 'undefined'\n ? undefined\n : new ResizeObserver(schedule);\n if (observedAncestor !== null) {\n resizeObserver?.observe(observedAncestor);\n }\n window.addEventListener('resize', schedule);\n schedule();\n return () => {\n if (frameRequest !== undefined)\n window.cancelAnimationFrame(frameRequest);\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n window.removeEventListener('resize', schedule);\n };\n }, [label, measure, heroTarget]);\n const ariaLabel = contextAriaLabel(state, t);\n if (label === undefined || heroTarget === null)\n return null;\n return createPortal(_jsx(\"span\", { className: styles.heroContextHost, \"data-worktree-hero-host\": true, style: placement === null ? { visibility: 'hidden' } : {\n left: `${placement.left}px`,\n top: `${placement.top}px`,\n }, children: _jsx(HoverCard, { anchor: (_jsx(\"span\", { ref: measure, className: styles.heroContext, \"data-worktree-hero-context\": true, \"aria-label\": ariaLabel, title: label, children: label })), content: _jsx(\"div\", { className: styles.contextHoverTitle, children: label }), openDelayMs: 500, copyLabel: t('copy'), copiedLabel: t('hover.copied') }) }), heroTarget);\n}\n//# sourceMappingURL=WorktreeHeroContext.js.map","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { RiskConfirmation } from '@deepseek-ai/dsh-client-ui-primitives';\nexport function AccessConfirmation({ source, props }) {\n const { fullAccessConfirmationSnapshot, fullAccessAcknowledged, setFullAccessAcknowledged } = source;\n const { t, fullAccessConfirmation } = props;\n return (_jsx(_Fragment, { children: _jsx(RiskConfirmation, { open: fullAccessConfirmationSnapshot !== undefined, title: t('permission.fullAccessTitle'), description: fullAccessConfirmationSnapshot === undefined\n ? ''\n : t('permission.fullAccessDescription', {\n cwd: fullAccessConfirmationSnapshot.cwd,\n }), acknowledgeLabel: t('permission.fullAccessAcknowledge'), cancelLabel: t('dialog.cancel'), closeLabel: t('dialog.close'), confirmLabel: t('permission.fullAccessEnable'), acknowledged: fullAccessAcknowledged, onAcknowledgedChange: setFullAccessAcknowledged, onCancel: () => {\n setFullAccessAcknowledged(false);\n fullAccessConfirmation?.resolve(false);\n }, onConfirm: () => {\n setFullAccessAcknowledged(false);\n fullAccessConfirmation?.resolve(true);\n } }) }));\n}\n//# sourceMappingURL=AccessConfirmation.js.map","function detail(error, name) {\n const value = error.details?.[name];\n return typeof value === 'string' ? value : '';\n}\nfunction reason(error, t) {\n return error.message.length > 0 ? error.message : t('error.worktreeDataUnavailable');\n}\nexport function formatWorktreePermissionNotice(result, t) {\n switch (result.status) {\n case 'fallback-workspace-write':\n return t('permission.fallbackWorkspaceWrite');\n case 'user-restricted':\n return t('permission.userRestricted');\n case 'unverified':\n return t('permission.unverified');\n default:\n return t('permission.unavailable');\n }\n}\nexport function formatWorktreeViewError(error, t) {\n switch (error.code) {\n case 'CLIENT_DISPOSED':\n return t('error.connectionDisposed');\n case 'CONNECTION_CALL_FAILED':\n return t('error.connectionFailed', {\n endpoint: detail(error, 'endpoint'),\n reason: reason(error, t),\n });\n case 'WORKTREE_RPC_INVALID_RESULT':\n return t('error.invalidResult', { endpoint: detail(error, 'endpoint') });\n case 'WORKSPACE_ORDER_UNAVAILABLE':\n return t('error.workspaceOrderingUnavailable');\n case 'SESSION_ORDER_UNAVAILABLE':\n return t('error.sessionOrderingUnavailable');\n case 'WORKTREE_ORDER_UNAVAILABLE':\n return t('error.worktreeOrderingUnavailable');\n case 'SESSION_CREATE_UNAVAILABLE':\n return t('error.sessionCreationUnavailable');\n case 'WORKTREE_CREATED_SESSION_UNAVAILABLE':\n return t('error.worktreeCreatedSessionUnavailable');\n case 'WORKTREE_RECORD_MISSING':\n return t('error.worktreeRecordMissing');\n case 'WORKTREE_IMPORT_INVALID':\n return t('error.worktreeImportInvalid');\n case 'WORKTREE_ALREADY_MANAGED':\n return t('error.worktreeAlreadyManaged');\n case 'WORKTREE_MUTATION_BUSY':\n return t('error.worktreeMutationBusy');\n case 'WORKTREE_STATE_CONFLICT':\n return t('error.worktreeStateConflict');\n case 'WORKTREE_RECOVERY_REQUIRED':\n return t('error.worktreeRecoveryRequired');\n case 'WORKTREE_IDENTITY_CHANGED':\n return t('error.worktreeIdentityChanged');\n case 'WORKTREE_REGISTRATION_SESSION_UNAVAILABLE':\n return t('error.worktreeRegistrationSessionUnavailable');\n case 'WORKSPACE_RENAME_UNAVAILABLE':\n return t('error.workspaceRenameUnavailable');\n case 'WORKSPACE_DELETE_UNAVAILABLE':\n return t('error.workspaceDeleteUnavailable');\n case 'SESSION_RENAME_UNAVAILABLE':\n return t('error.sessionRenameUnavailable');\n case 'SESSION_BINDING_FAILED':\n return t('error.sessionBindingFailed', {\n sessionId: detail(error, 'sessionId'),\n reason: reason(error, t),\n });\n case 'SESSION_ALREADY_BOUND':\n return t('error.sessionAlreadyBound');\n case 'WORKTREE_PERMISSION_CONFIRMATION_REQUIRED':\n return t('error.worktreePermissionConfirmationRequired');\n case 'WORKTREE_PERMISSION_FAILED':\n return t('error.worktreePermissionFailed', { reason: reason(error, t) });\n case 'SESSION_LIST_NOT_READY':\n return t('error.sessionListNotReady');\n case 'SESSION_FACTS_INCOMPLETE':\n return t('error.sessionFactsIncomplete');\n case 'WORKTREE_SESSION_REPAIR_REQUIRED':\n return t('error.worktreeSessionRepairRequired');\n case 'WORKTREE_SESSION_UNAVAILABLE':\n return t('error.worktreeSessionUnavailable');\n case 'SESSION_ARCHIVED':\n return t('error.sessionArchived');\n case 'GIT_NOT_INSTALLED':\n return t('error.gitNotInstalled');\n default:\n return error.message.length > 0 ? error.message : t('error.worktreeDataUnavailable');\n }\n}\n//# sourceMappingURL=worktree-error-copy.js.map","/** A DSH Session exists even when the external Worktree binding needs repair. */\nexport class WorktreeSessionBindingError extends Error {\n code;\n retryable;\n details;\n sessionId;\n cause;\n constructor(sessionId, cause) {\n const candidate = typeof cause === 'object' && cause !== null\n ? cause\n : undefined;\n const reason = cause instanceof Error\n ? cause.message\n : typeof candidate?.message === 'string'\n ? candidate.message\n : String(cause);\n super(reason);\n this.name = 'WorktreeSessionBindingError';\n const conflict = candidate?.code === 'SESSION_ALREADY_BOUND';\n this.code = conflict ? 'SESSION_ALREADY_BOUND' : 'SESSION_BINDING_FAILED';\n this.retryable = conflict ? false : candidate?.retryable !== false;\n this.details = typeof candidate?.details === 'object' && candidate.details !== null\n && !Array.isArray(candidate.details)\n ? candidate.details\n : {};\n this.sessionId = sessionId;\n this.cause = cause;\n }\n}\n/** A Session is retained after permission confirmation or permission setup needs retry. */\nexport class WorktreeSessionPermissionError extends Error {\n code;\n retryable = true;\n details;\n sessionId;\n createdSession;\n cause;\n constructor(sessionId, createdSession, cause) {\n const reason = cause instanceof Error ? cause.message : cause === undefined ? '' : String(cause);\n super(reason);\n this.name = 'WorktreeSessionPermissionError';\n this.code = cause === undefined\n ? 'WORKTREE_PERMISSION_CONFIRMATION_REQUIRED'\n : 'WORKTREE_PERMISSION_FAILED';\n this.details = { sessionId };\n this.sessionId = sessionId;\n this.createdSession = createdSession;\n this.cause = cause;\n }\n}\nfunction recordDetails(value) {\n if (typeof value !== 'object' || value === null || Array.isArray(value))\n return undefined;\n const details = value.details;\n if (typeof details !== 'object' || details === null || Array.isArray(details))\n return undefined;\n return details;\n}\n/** Convert any adapter/Gateway failure into renderable, retry-aware UI data. */\nexport function toWorktreeViewError(error) {\n if (typeof error === 'object' && error !== null) {\n const candidate = error;\n const details = error instanceof WorktreeSessionBindingError || error instanceof WorktreeSessionPermissionError\n ? { ...(recordDetails(error) ?? {}), sessionId: error.sessionId }\n : recordDetails(error);\n return {\n code: typeof candidate.code === 'string' ? candidate.code : 'WORKTREE_VIEW_FAILED',\n message: typeof candidate.message === 'string' ? candidate.message : '',\n retryable: candidate.retryable !== false,\n ...(details === undefined ? {} : { details }),\n };\n }\n return {\n code: 'WORKTREE_VIEW_FAILED',\n message: '',\n retryable: true,\n };\n}\n/** Keep ordering mutation/refresh failures reachable from the surface Retry control. */\nexport function toRetryableWorktreeOrderError(error) {\n return {\n ...toWorktreeViewError(error),\n retryable: true,\n };\n}\n//# sourceMappingURL=worktree-view-errors.js.map","import { WorktreeSessionBindingError } from './worktree-view-errors.js';\nfunction browserRandomUuid() {\n const randomUUID = globalThis.crypto?.randomUUID;\n if (typeof randomUUID === 'function')\n return randomUUID.call(globalThis.crypto);\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n/** Generate a short, editable default branch name without colliding with known local names. */\nexport function createDefaultWorktreeName(existingNames, randomUuid = browserRandomUuid) {\n const usedNames = new Set([...existingNames].map((name) => name.trim()));\n for (let attempt = 0; attempt < 100; attempt += 1) {\n const suffix = randomUuid().replace(/[^a-z0-9]/gi, '').slice(0, 8).toLowerCase();\n if (suffix.length < 8)\n continue;\n const candidate = `dsh/${suffix}`;\n if (!usedNames.has(candidate))\n return candidate;\n }\n throw new Error('Unable to generate an available default Worktree name.');\n}\n/** Generate the next available numeric sibling name for a selected Worktree. */\nexport function createNumberedWorktreeName(baseName, existingNames) {\n const normalizedBaseName = baseName.trim();\n const usedNames = new Set([...existingNames].map((name) => name.trim()));\n const numberedBase = normalizedBaseName.match(/^(.*)-(\\d+)$/);\n const prefix = numberedBase?.[1] || normalizedBaseName || 'worktree';\n const parsedNumber = numberedBase === null ? 1 : Number(numberedBase[2]);\n let number = Number.isSafeInteger(parsedNumber) ? parsedNumber + 1 : 2;\n for (let attempt = 0; attempt < 10000; attempt += 1) {\n const candidate = `${prefix}-${number}`;\n if (!usedNames.has(candidate))\n return candidate;\n number += 1;\n }\n throw new Error('Unable to generate an available numbered Worktree name.');\n}\n/** Resolve a row-half drop target to native-style optional before-anchor semantics. */\nexport function resolveWorktreeMove(worktreeIds, sourceWorktreeId, targetWorktreeId, half) {\n const sourceIndex = worktreeIds.indexOf(sourceWorktreeId);\n const targetIndex = worktreeIds.indexOf(targetWorktreeId);\n if (sourceIndex === -1 || targetIndex === -1)\n return undefined;\n const beforeWorktreeId = half === 'before'\n ? targetWorktreeId\n : worktreeIds[targetIndex + 1];\n if (beforeWorktreeId === sourceWorktreeId)\n return undefined;\n const anchorIndex = beforeWorktreeId === undefined\n ? worktreeIds.length\n : worktreeIds.indexOf(beforeWorktreeId);\n if (anchorIndex === sourceIndex || anchorIndex === sourceIndex + 1)\n return undefined;\n return beforeWorktreeId === undefined ? {} : { beforeWorktreeId };\n}\n/** Keep mutation routing in the browser Consumer while leaving wire details to the adapter. */\nexport async function executeWorktreeAction(manager, action) {\n if (action.type === 'createWorktree') {\n return manager.createWorktree(action.input);\n }\n if (action.type === 'importWorktree') {\n return manager.importWorktree(action.input);\n }\n if (action.type === 'removeWorktree') {\n await manager.removeWorktree(action.input);\n return;\n }\n if (action.type === 'unarchiveWorktree') {\n await manager.unarchiveWorktree(action.input);\n return;\n }\n if (action.type === 'cleanWorktree') {\n await manager.cleanWorktree(action.input);\n return;\n }\n if (action.type === 'forgetWorktree') {\n await manager.forgetWorktree(action.input);\n return;\n }\n}\n/**\n * Create a normal DSH Session at a Worktree cwd, then add the external binding.\n * A binding failure deliberately leaves the DSH-created Session intact.\n */\nexport async function createSessionForWorktree(input) {\n const sessionId = await input.createSession({ cwd: input.cwd });\n try {\n await input.manager.bindSession({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId,\n });\n }\n catch (error) {\n throw new WorktreeSessionBindingError(sessionId, error);\n }\n await input.beforeOpen?.(sessionId);\n input.openSession(sessionId);\n return sessionId;\n}\n//# sourceMappingURL=worktree-view-actions.js.map","import { toWorktreeViewError } from './worktree-view-errors.js';\n/** Merge one freshly read Workspace projection without clearing other ready views. */\nexport function mergeWorktreeView(views, nextView) {\n const index = views.findIndex((view) => view.workspaceId === nextView.workspaceId);\n if (index === -1)\n return [...views, nextView];\n const merged = [...views];\n merged[index] = nextView;\n return merged;\n}\n/** Merge explicit Workspace updates while preserving current order and ready references. */\nexport function mergeWorktreeViews(existing, workspaceIds, updates) {\n const byWorkspaceId = new Map(existing.map((view) => [view.workspaceId, view]));\n for (const update of updates)\n byWorkspaceId.set(update.workspaceId, update);\n return [...new Set(workspaceIds)].flatMap((workspaceId) => {\n const view = byWorkspaceId.get(workspaceId);\n return view === undefined ? [] : [view];\n });\n}\n/** Reuse the previous ID snapshot when DSH republishes equivalent Workspace items. */\nexport function stableWorkspaceIds(previous, next) {\n if (previous.length !== next.length)\n return next;\n for (let index = 0; index < previous.length; index += 1) {\n if (previous[index] !== next[index])\n return next;\n }\n return previous;\n}\n/** Keep only the most recently started Worktree surface refresh authoritative. */\nexport function createWorktreeRefreshGuard() {\n let latestGeneration = 0;\n const begin = () => {\n latestGeneration += 1;\n return latestGeneration;\n };\n const isCurrent = (generation) => generation === latestGeneration;\n const invalidate = () => {\n latestGeneration += 1;\n };\n return {\n begin,\n isCurrent,\n invalidate,\n async run(load, onSuccess, onError) {\n const generation = begin();\n let value;\n try {\n value = await load();\n }\n catch (error) {\n if (!isCurrent(generation))\n return;\n onError(error);\n return;\n }\n if (!isCurrent(generation))\n return;\n onSuccess(value);\n },\n };\n}\n/** Prefer the branch checked out by the DSH Workspace, then fall back to any local branch. */\nexport function selectDefaultBaseBranch(branches) {\n return branches.find((branch) => branch.isCurrent)?.name ?? branches[0]?.name ?? '';\n}\n/** Keep a valid user choice across branch-list refreshes, otherwise choose the current branch. */\nexport function reconcileBaseBranchSelection(selectedBranch, branches) {\n if (branches.some((branch) => branch.name === selectedBranch))\n return selectedBranch;\n return selectDefaultBaseBranch(branches);\n}\n/** Return copyable, read-only setup commands for a Git readiness state. */\nexport function worktreeSetupCommands(status) {\n switch (status) {\n case 'gitNotInstalled':\n return [];\n case 'noRepository':\n return [\n 'git init',\n 'printf \"# README\\\\n\" > README.md',\n 'git add README.md',\n 'git commit -m \"Initial commit\"',\n ];\n case 'noInitialCommit':\n return [\n 'printf \"# README\\\\n\" > README.md',\n 'git add README.md',\n 'git commit -m \"Initial commit\"',\n ];\n case 'noLocalBranch':\n return ['git switch -c main'];\n case 'ready':\n return [];\n }\n}\nfunction readinessFromBranchError(error) {\n const viewError = toWorktreeViewError(error);\n if (viewError.code === 'GIT_NOT_INSTALLED') {\n return { status: 'gitNotInstalled', error: viewError };\n }\n if (viewError.code === 'WORKSPACE_NOT_GIT_REPOSITORY') {\n return { status: 'noRepository', error: viewError };\n }\n if (viewError.code === 'WORKTREE_REQUIRES_INITIAL_COMMIT') {\n return { status: 'noInitialCommit', error: viewError };\n }\n return undefined;\n}\n/** Share complete Workspace reads without allowing stale generations to repopulate the cache. */\nexport function createWorktreeViewReader(manager) {\n const entries = new Map();\n let disposed = false;\n const entryFor = (workspaceId) => {\n const current = entries.get(workspaceId);\n if (current !== undefined)\n return current;\n const created = { generation: 0, stale: false };\n entries.set(workspaceId, created);\n return created;\n };\n const read = (workspaceId) => {\n if (disposed)\n return Promise.reject(new Error('Worktree view reader disposed'));\n const entry = entryFor(workspaceId);\n if (!entry.stale && entry.view !== undefined)\n return Promise.resolve(entry.view);\n if (entry.inFlight?.generation === entry.generation)\n return entry.inFlight.promise;\n const generation = entry.generation;\n const promise = loadWorktreeView(manager, workspaceId)\n .then((data) => {\n const view = { workspaceId, ...data };\n if (!disposed && entries.get(workspaceId) === entry && entry.generation === generation) {\n entry.view = view;\n entry.stale = false;\n }\n return view;\n })\n .finally(() => {\n if (entry.inFlight?.promise === promise)\n entry.inFlight = undefined;\n });\n entry.inFlight = { generation, promise };\n return promise;\n };\n return {\n invalidate(workspaceId, options) {\n if (disposed)\n return;\n const entry = entryFor(workspaceId);\n // Read-only menu opens may share a current read. Mutations must retire it.\n if (options?.reuseInFlight && entry.inFlight?.generation === entry.generation)\n return;\n entry.generation += 1;\n entry.stale = true;\n entry.view = undefined;\n },\n read,\n readMany(workspaceIds) {\n const uniqueIds = [...new Set(workspaceIds)];\n return Promise.all(uniqueIds.map((workspaceId) => read(workspaceId)));\n },\n dispose() {\n if (disposed)\n return;\n disposed = true;\n entries.clear();\n },\n };\n}\n/** Read all three Worktree projections needed by the surface in one refresh. */\nexport async function loadWorktreeView(manager, workspaceId) {\n const [worktreesResult, branchesResult, bindingsResult] = await Promise.allSettled([\n manager.listWorktrees({ workspaceId }),\n manager.listBranches({ workspaceId }),\n manager.listBindings({ workspaceId }),\n ]);\n if (worktreesResult.status === 'rejected')\n throw worktreesResult.reason;\n if (bindingsResult.status === 'rejected')\n throw bindingsResult.reason;\n if (branchesResult.status === 'rejected') {\n const readiness = readinessFromBranchError(branchesResult.reason);\n if (readiness !== undefined) {\n return {\n worktrees: worktreesResult.value,\n branches: [],\n bindings: bindingsResult.value,\n readiness,\n };\n }\n throw branchesResult.reason;\n }\n return {\n worktrees: worktreesResult.value,\n branches: branchesResult.value,\n bindings: bindingsResult.value,\n readiness: branchesResult.value.length > 0\n ? { status: 'ready' }\n : { status: 'noLocalBranch' },\n };\n}\n/** Isolate modal-target callbacks while sharing the Client Workspace reader. */\nexport function createWorktreeModalViewLoader(reader) {\n const guard = createWorktreeRefreshGuard();\n return {\n invalidate: guard.invalidate,\n load(workspaceId, onSuccess, onError) {\n return guard.run(() => reader.read(workspaceId), onSuccess, (error) => onError(toWorktreeViewError(error)));\n },\n };\n}\n/** Load one independent projection per DSH Workspace for the flat sidebar hierarchy. */\nexport async function loadWorktreeViews(manager, workspaceIds) {\n return Promise.all(workspaceIds.map(async (workspaceId) => ({\n workspaceId,\n ...(await loadWorktreeView(manager, workspaceId)),\n })));\n}\n/** Hide DSH-archived Sessions from the browser-local Worktree projection. */\nexport function filterArchivedSessionIds(sessionIds, archivedSessionIds) {\n return sessionIds.filter((sessionId) => !archivedSessionIds.includes(sessionId));\n}\n//# sourceMappingURL=worktree-view-read.js.map","function isPendingInteractionStatus(value) {\n return value === 'approval' || value === 'plan-review' || value === 'question';\n}\nfunction validUpdatedAt(value) {\n return value !== undefined && Number.isFinite(value);\n}\n/**\n * Native-compatible subagent lineage index. The upstream runtime's public client\n * entry is a browser module-loader bundle, so keeping this pure mirror local lets\n * the browser Consumer and its Node tests share the same status semantics.\n */\nfunction indexSubagentDescendants(summaries) {\n const indexed = new Map();\n for (const descendant of Object.values(summaries)) {\n if (descendant.origin !== 'subagent')\n continue;\n const seen = new Set();\n let current = descendant;\n while (current?.origin === 'subagent' &&\n current.parentId !== undefined &&\n !seen.has(current.id)) {\n seen.add(current.id);\n const aggregate = indexed.get(current.parentId);\n if (aggregate === undefined) {\n indexed.set(current.parentId, {\n count: 1,\n runningCount: descendant.running ? 1 : 0,\n });\n }\n else {\n aggregate.count += 1;\n if (descendant.running)\n aggregate.runningCount += 1;\n }\n current = summaries[current.parentId];\n }\n }\n return indexed;\n}\n/** Native Workspace relative-time buckets, kept pure for deterministic rendering/tests. */\nexport function relativeTime(updatedAt, now) {\n if (!validUpdatedAt(updatedAt) || !Number.isFinite(now))\n return undefined;\n const MIN = 60_000;\n const HOUR = 3_600_000;\n const DAY = 86_400_000;\n const diff = Math.max(0, now - updatedAt);\n if (diff < MIN)\n return { unit: 'now', n: 0 };\n if (diff < HOUR)\n return { unit: 'minutes', n: Math.floor(diff / MIN) };\n if (diff < DAY)\n return { unit: 'hours', n: Math.floor(diff / HOUR) };\n if (diff < 30 * DAY)\n return { unit: 'days', n: Math.floor(diff / DAY) };\n if (diff < 365 * DAY)\n return { unit: 'months', n: Math.floor(diff / (30 * DAY)) };\n return { unit: 'years', n: Math.floor(diff / (365 * DAY)) };\n}\n/** Match native Workspace status priority while retaining the aggregate subagent count. */\nexport function sessionStatus(session, runningSubagentCount) {\n const count = Number.isFinite(runningSubagentCount) && runningSubagentCount > 0\n ? Math.floor(runningSubagentCount)\n : 0;\n if (isPendingInteractionStatus(session.pendingInteraction)) {\n const labelKey = session.pendingInteraction === 'approval'\n ? 'waitingApproval'\n : session.pendingInteraction === 'plan-review'\n ? 'planReview'\n : 'waitingAnswer';\n return { state: 'warning', labelKey, runningSubagentCount: count };\n }\n if (session.running === true) {\n return { state: 'ongoing', labelKey: 'running', runningSubagentCount: count };\n }\n if (count > 0) {\n return { state: 'ongoing', labelKey: 'subagentsRunning', runningSubagentCount: count };\n }\n if (session.completed === true) {\n return { state: 'done', labelKey: 'completed', runningSubagentCount: 0 };\n }\n return { state: 'done', labelKey: 'idle', runningSubagentCount: 0 };\n}\nfunction toLineageSummary(sessionId, summary) {\n return {\n id: sessionId,\n running: summary.running === true,\n ...(summary.parentId === undefined ? {} : { parentId: summary.parentId }),\n ...(summary.origin === 'subagent' ? { origin: 'subagent' } : {}),\n };\n}\n/** Derive row and group activity facts from one retained DSH Session snapshot. */\nexport function deriveSessionPresentationIndex(sessions) {\n const lineageSummaries = Object.fromEntries(Object.entries(sessions.byId).map(([sessionId, summary]) => [\n sessionId,\n toLineageSummary(sessionId, summary),\n ]));\n const descendants = indexSubagentDescendants(lineageSummaries);\n return Object.fromEntries(Object.entries(sessions.byId).map(([sessionId, summary]) => {\n const runningSubagentCount = descendants.get(sessionId)?.runningCount ?? 0;\n const status = sessionStatus(summary, runningSubagentCount);\n return [\n sessionId,\n {\n status,\n running: summary.running === true,\n ongoing: summary.running === true || runningSubagentCount > 0,\n runningSubagentCount,\n completed: summary.completed === true,\n ...(validUpdatedAt(summary.updatedAt) ? { updatedAt: summary.updatedAt } : {}),\n },\n ];\n }));\n}\n/** Aggregate only live ongoing activity; callers decide which IDs are in the group. */\nexport function hasOngoingSession(sessionIds, presentations) {\n return sessionIds.some((sessionId) => presentations[sessionId]?.ongoing === true);\n}\nfunction pendingStatusRank(status) {\n switch (status.labelKey) {\n case 'waitingApproval':\n return 3;\n case 'planReview':\n return 2;\n case 'waitingAnswer':\n return 1;\n default:\n return 0;\n }\n}\nfunction ongoingStatusRank(status) {\n return status.labelKey === 'running' ? 2 : status.labelKey === 'subagentsRunning' ? 1 : 0;\n}\n/**\n * Select the single Session status that a collapsed group should expose.\n *\n * The result is a representative status rather than a list: callers render at most one\n * StateDot. Pending interaction warnings outrank live activity, which outranks a completed\n * reminder. Idle Sessions do not contribute a group status.\n */\nexport function aggregateSessionStatus(sessionIds, presentations) {\n let pending;\n let pendingRank = 0;\n let ongoing;\n let ongoingRank = 0;\n let completed = false;\n for (const sessionId of sessionIds) {\n const presentation = presentations[sessionId];\n if (presentation === undefined)\n continue;\n if (presentation.status.state === 'warning') {\n const rank = pendingStatusRank(presentation.status);\n if (pending === undefined || rank > pendingRank) {\n pending = presentation.status;\n pendingRank = rank;\n }\n }\n else if (presentation.ongoing === true) {\n const rank = ongoingStatusRank(presentation.status);\n if (ongoing === undefined || rank > ongoingRank) {\n ongoing = presentation.status;\n ongoingRank = rank;\n }\n }\n if (presentation.completed === true)\n completed = true;\n }\n if (pending !== undefined)\n return pending;\n if (ongoing !== undefined)\n return ongoing;\n return completed\n ? { state: 'done', labelKey: 'completed', runningSubagentCount: 0 }\n : undefined;\n}\n/** Read the native blank flag without inferring blankness from title or id. */\nexport function isBlankSession(sessionId, sessions) {\n return sessions.byId[sessionId]?.blank === true;\n}\n/** Native tree visibility: ordinary rows plus the currently selected blank row. */\nfunction isVisibleSession(sessionId, sessions) {\n return !isBlankSession(sessionId, sessions) || sessions.current === sessionId;\n}\n/** Filter a group without mutating its source order. */\nexport function filterVisibleSessionIds(sessionIds, sessions) {\n return sessionIds.filter((sessionId) => isVisibleSession(sessionId, sessions));\n}\n/** Resolve a row title while keeping the blank label outside the DSH summary. */\nexport function sessionDisplayLabel(sessionId, sessions, blankLabel) {\n const summary = sessions.byId[sessionId];\n return summary?.blank === true ? blankLabel : (summary?.displayTitle ?? sessionId);\n}\n/** Match only durable Session titles or the final diagnostic id fallback. */\nexport function sessionMatchesQuery(sessionId, sessions, normalizedQuery) {\n const summary = sessions.byId[sessionId];\n if (summary?.blank === true)\n return false;\n const label = summary?.displayTitle ?? sessionId;\n return label.toLocaleLowerCase().includes(normalizedQuery);\n}\n//# sourceMappingURL=session-view.js.map","import { sessionDisplayLabel, sessionMatchesQuery, } from '../session/session-view.js';\n/** Native activity changes invalidate only the archived Worktrees' owning reads. */\nexport function worktreeActivityRefreshWorkspaceIds(views, previous, next) {\n return views\n .filter((view) => view.bindings.some((binding) => previous[binding.sessionId]?.ongoing !== next[binding.sessionId]?.ongoing &&\n view.worktrees.some((record) => record.worktreeId === binding.worktreeId && record.status === 'removed')))\n .map((view) => view.workspaceId);\n}\nexport function sessionLabel(sessionId, sessions, t) {\n return sessionDisplayLabel(sessionId, sessions, t('session.new'));\n}\nexport function bindingIdsFor(bindings, worktreeId) {\n return bindings\n .filter((binding) => binding.worktreeId === worktreeId)\n .map((binding) => binding.sessionId);\n}\nexport function clearSessionGroupExpansion(current, groupKeys) {\n const next = { ...current };\n for (const key of groupKeys)\n delete next[key];\n return next;\n}\n/** DSH list snapshots report a monotone `pending` → `ready` arrival phase. */\nexport function isPendingListPhase(phase) {\n return phase !== undefined && phase !== 'ready';\n}\n/**\n * True only for an authoritative Worktree projection: the confirmed Workspace list is\n * non-empty and every Workspace in it has a ready view.\n *\n * An empty `workspaceIds` means the Workspace list has not arrived yet — never that every\n * Workspace disappeared. Callers prune browser-local preferences on `true`, so an empty or\n * partial read must stay incomplete and keep those preferences untouched.\n */\nexport function isCompleteWorktreeWorkspaceSnapshot(workspaceIds, views) {\n if (workspaceIds.length === 0)\n return false;\n if (views.length !== workspaceIds.length)\n return false;\n const expected = new Set(workspaceIds);\n const actual = new Set(views.map((view) => view.workspaceId));\n return actual.size === expected.size && [...expected].every((id) => actual.has(id));\n}\nexport function includesText(value, query) {\n return value.toLocaleLowerCase().includes(query);\n}\nexport function workspaceMatches(workspace, view, sessions, query) {\n if (query.length === 0)\n return true;\n if (includesText(workspace.title, query))\n return true;\n if (workspace.sessionIds.some((sessionId) => sessionMatchesQuery(sessionId, sessions, query))) {\n return true;\n }\n if (view === undefined)\n return false;\n if (view.worktrees.some((record) => includesText(record.branch, query) || includesText(record.absolutePath, query))) {\n return true;\n }\n return view.bindings.some((binding) => sessionMatchesQuery(binding.sessionId, sessions, query));\n}\nexport function resolveCurrentSessionLocation(currentSessionId, workspaces, views) {\n if (currentSessionId === undefined)\n return undefined;\n const workspace = workspaces.find((candidate) => candidate.sessionIds.includes(currentSessionId));\n if (workspace === undefined)\n return undefined;\n const view = views.find((candidate) => candidate.workspaceId === workspace.workspaceId);\n if (view === undefined)\n return undefined;\n const binding = view.bindings.find((candidate) => candidate.sessionId === currentSessionId);\n if (binding === undefined) {\n return {\n sessionId: currentSessionId,\n workspaceId: workspace.workspaceId,\n groupKey: 'main:' + workspace.workspaceId,\n kind: 'main',\n };\n }\n const worktree = view.worktrees.find((candidate) => candidate.worktreeId === binding.worktreeId &&\n candidate.workspaceId === workspace.workspaceId);\n if (worktree === undefined)\n return undefined;\n return {\n sessionId: currentSessionId,\n workspaceId: workspace.workspaceId,\n groupKey: 'worktree:' + worktree.worktreeId,\n kind: 'worktree',\n worktreeId: worktree.worktreeId,\n ...(worktree.status === 'removed' ? { archived: true } : {}),\n };\n}\nexport function currentSessionRevealKeys(location) {\n if (location === undefined)\n return [];\n return [\n 'workspace:' + location.workspaceId,\n ...(location.kind === 'worktree' && location.archived\n ? ['archived:' + location.workspaceId]\n : []),\n location.kind === 'main' ? 'main:' + location.workspaceId : 'worktree:' + location.worktreeId,\n 'session-group:' + location.groupKey,\n ];\n}\nexport function shouldRevealCurrentSessionGroup(sessionIds, currentSessionId) {\n if (currentSessionId === undefined || sessionIds.length <= 5)\n return false;\n return sessionIds.indexOf(currentSessionId) >= 5;\n}\nexport function isSessionGroupAutoExpanded(sessionIds, currentSessionId, currentSessionRevealActive) {\n return (currentSessionRevealActive && shouldRevealCurrentSessionGroup(sessionIds, currentSessionId));\n}\n/** Lifecycle mutations rely on user confirmation, not Session activity coverage. */\nexport function worktreeLifecycleBlockReason(actionPending, health) {\n if (actionPending)\n return 'pending';\n if (health === 'recovery-needed')\n return 'recovery';\n return undefined;\n}\n//# sourceMappingURL=selectors.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Button, Input, Modal } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { formatWorktreeViewError } from '../../view/worktree-error-copy.js';\nimport { worktreeSetupCommands } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { worktreeLifecycleBlockReason } from '../selectors.js';\nexport function WorktreeAdoptBranchDialog({ t, worktree, actionPending, error, onClose, onSubmit, onRetry, }) {\n if (worktree === undefined || typeof worktree.currentBranch !== 'string')\n return null;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (!actionPending)\n onClose();\n }, closeLabel: t('dialog.cancel'), title: t('worktree.adoptBranch'), description: t('worktree.adoptDescription', {\n previous: worktree.branch,\n current: worktree.currentBranch,\n }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending || error !== undefined, onClick: () => {\n void onSubmit();\n }, children: t('worktree.adoptBranch') })] }), children: error !== undefined && (_jsxs(\"div\", { role: \"alert\", children: [_jsx(\"p\", { className: styles.message, children: formatWorktreeViewError(error, t) }), _jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onRetry, children: t('action.retry') })] })) }));\n}\nfunction worktreeSetupMessage(status, t) {\n switch (status) {\n case 'gitNotInstalled':\n return t('worktree.setup.gitNotInstalled');\n case 'noRepository':\n return t('worktree.setup.noRepository');\n case 'noInitialCommit':\n return t('worktree.setup.noInitialCommit');\n case 'noLocalBranch':\n return t('worktree.setup.noLocalBranch');\n }\n}\nexport function WorktreeSessionRenameDialog({ t, target, draft, pending, error, onClose, onDraftChange, onSubmit, }) {\n return (_jsxs(Modal, { open: target !== undefined, onClose: onClose, closeLabel: t('dialog.close'), title: t('session.rename'), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: pending || draft.trim().length === 0, onClick: () => {\n void onSubmit();\n }, children: t('dialog.rename') })] }), children: [_jsx(Input, { className: styles.renameInput, value: draft, \"aria-label\": t('session.name'), autoFocus: true, disabled: pending, onFocus: (event) => {\n event.currentTarget.select();\n }, onChange: (event) => {\n onDraftChange(event.currentTarget.value);\n }, onKeyDown: (event) => {\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n void onSubmit();\n }\n } }), error !== undefined && (_jsx(\"p\", { className: styles.renameError, role: \"alert\", children: formatWorktreeViewError(error, t) }))] }));\n}\nexport function WorktreeWorkspaceRenameDialog({ t, target, draft, pending, duplicate, error, onClose, onDraftChange, onSubmit, }) {\n if (target === undefined)\n return null;\n return (_jsxs(Modal, { open: true, onClose: onClose, closeLabel: t('dialog.closeWorkspaceRename'), title: t('workspace.renameTitle'), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: pending ||\n draft.trim().length === 0 ||\n draft.trim() === target.currentTitle ||\n duplicate, onClick: () => {\n void onSubmit();\n }, children: t('dialog.rename') })] }), children: [_jsx(Input, { className: styles.renameInput, value: draft, \"aria-label\": t('workspace.name'), autoFocus: true, disabled: pending, onFocus: (event) => {\n event.currentTarget.select();\n }, onChange: (event) => {\n onDraftChange(event.currentTarget.value);\n }, onKeyDown: (event) => {\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n void onSubmit();\n }\n } }), duplicate && (_jsx(\"p\", { className: styles.renameError, role: \"alert\", children: t('workspace.duplicate') })), error !== undefined && (_jsx(\"p\", { className: styles.renameError, role: \"alert\", children: formatWorktreeViewError(error, t) }))] }));\n}\nexport function WorktreeWorkspaceDeleteDialog({ t, target, pending, error, onClose, onSubmit, }) {\n if (target === undefined)\n return null;\n return (_jsx(Modal, { open: true, onClose: onClose, closeLabel: t('dialog.closeWorkspaceDelete'), title: t('workspace.deleteTitle'), description: t('workspace.deleteDescription', { name: target.title }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"outline\", disabled: pending, onClick: () => {\n void onSubmit();\n }, children: t('dialog.delete') })] }), children: error !== undefined && (_jsx(\"p\", { className: styles.renameError, role: \"alert\", children: formatWorktreeViewError(error, t) })) }));\n}\nexport function WorktreeCreateDialog({ t, workspace, view, readError, setupStatus, canCreate, mode, importCandidates, selectedImportPath, selectedBranch, newBranch, actionPending, onClose, onRetry, onModeChange, onRetryImportCandidates, onSelectedImportPathChange, onSelectedBranchChange, onNewBranchChange, onSubmit, }) {\n if (workspace === undefined)\n return null;\n const setupCommands = setupStatus === undefined ? [] : worktreeSetupCommands(setupStatus);\n const importing = mode === 'import';\n const importBlocked = actionPending || importCandidates.status === 'loading' || selectedImportPath === undefined;\n return (_jsxs(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeCreate'), title: t('worktree.createTitle'), description: importing\n ? t('worktree.importDescription', { name: workspace.title })\n : t('worktree.createDescription', { name: workspace.title }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: importing\n ? importBlocked\n : actionPending ||\n !canCreate ||\n selectedBranch.length === 0 ||\n newBranch.trim().length === 0, onClick: () => {\n void onSubmit();\n }, children: importing ? t('worktree.import') : t('worktree.create') })] }), children: [_jsxs(\"div\", { className: styles.worktreeModalTabs, role: \"tablist\", \"aria-label\": t('worktree.title'), children: [_jsx(\"button\", { className: styles.worktreeModalTab, type: \"button\", role: \"tab\", \"aria-selected\": mode === 'create', disabled: actionPending, onClick: () => {\n onModeChange('create');\n }, children: t('worktree.tabCreate') }), _jsx(\"button\", { className: styles.worktreeModalTab, type: \"button\", role: \"tab\", \"aria-selected\": mode === 'import', disabled: actionPending, onClick: () => {\n onModeChange('import');\n }, children: t('worktree.tabImport') })] }), importing ? (_jsxs(\"div\", { className: styles.worktreeImportCandidates, role: \"tabpanel\", children: [importCandidates.status === 'loading' && importCandidates.candidates.length === 0 && (_jsx(\"p\", { className: styles.message, children: t('worktree.importLoading') })), importCandidates.status === 'error' && (_jsxs(\"div\", { className: styles.worktreeImportError, role: \"alert\", children: [_jsx(\"p\", { className: styles.message, children: formatWorktreeViewError(importCandidates.error, t) }), _jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onRetryImportCandidates, children: t('action.retry') })] })), importCandidates.candidates.length === 0 && importCandidates.status === 'ready' && (_jsx(\"p\", { className: styles.message, children: t('worktree.importEmpty') })), importCandidates.candidates.length > 0 && (_jsxs(\"label\", { className: styles.modalField, children: [t('worktree.tabImport'), _jsxs(\"select\", { className: styles.worktreeImportSelect, \"data-worktree-import-select\": true, \"aria-label\": t('worktree.tabImport'), value: selectedImportPath ?? '', disabled: actionPending, onChange: (event) => {\n onSelectedImportPathChange(event.currentTarget.value);\n }, children: [_jsx(\"option\", { value: \"\", disabled: true, children: t('worktree.importPlaceholder') }), importCandidates.candidates.map((candidate) => (_jsxs(\"option\", { value: candidate.absolutePath, children: [candidate.branch, \" \\u2014 \", candidate.absolutePath] }, candidate.absolutePath)))] })] }))] })) : readError !== undefined ? (_jsxs(\"div\", { className: styles.gitReadiness, \"data-worktree-readiness\": \"error\", role: \"alert\", children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(readError, t) }), readError.retryable && onRetry !== undefined && (_jsx(\"button\", { type: \"button\", className: styles.retryButton, disabled: actionPending, onClick: onRetry, children: t('action.retry') }))] })) : canCreate ? (_jsxs(_Fragment, { children: [_jsxs(\"label\", { className: styles.modalField, children: [t('worktree.baseBranch'), _jsx(\"select\", { className: styles.actionSelect, \"aria-label\": t('worktree.baseBranch'), value: selectedBranch, disabled: actionPending, onChange: (event) => {\n onSelectedBranchChange(event.currentTarget.value);\n }, children: view?.branches.map((branch) => (_jsxs(\"option\", { value: branch.name, children: [branch.name, branch.isCurrent ? t('branch.current') : '', branch.checkedOut ? t('branch.checkedOut') : ''] }, branch.name))) })] }), _jsxs(\"label\", { className: styles.modalField, children: [t('worktree.name'), _jsx(Input, { className: styles.renameInput, \"aria-label\": t('worktree.name'), value: newBranch, placeholder: \"dsh/12345678\", disabled: actionPending, onChange: (event) => {\n onNewBranchChange(event.currentTarget.value);\n } })] })] })) : (_jsxs(\"div\", { className: styles.gitReadiness, \"data-worktree-readiness\": setupStatus ?? 'loading', role: \"alert\", children: [_jsx(\"p\", { className: styles.message, children: setupStatus === undefined ? t('status.loading') : worktreeSetupMessage(setupStatus, t) }), setupCommands.length > 0 && (_jsx(\"pre\", { className: styles.commandBlock, \"aria-label\": t('worktree.setup.commands'), children: setupCommands.join('\\n') }))] }))] }));\n}\nexport function WorktreeRemovalDialog({ t, worktree, actionPending, onClose, onSubmit, }) {\n if (worktree === undefined)\n return null;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeArchive'), title: t('worktree.archive'), description: worktree.source === 'external'\n ? t('worktree.archiveExternalDescription', { name: worktree.branch })\n : t('worktree.archiveDescription', { name: worktree.branch }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending, onClick: () => {\n void onSubmit();\n }, children: t('worktree.archive') })] }) }));\n}\nexport function WorktreeCleanDiskDialog({ t, worktree, actionPending, onClose, onSubmit, }) {\n if (worktree === undefined)\n return null;\n const activityBlock = worktreeLifecycleBlockReason(actionPending, worktree.health);\n const isBlocked = activityBlock !== undefined;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeCleanDisk'), title: t('worktree.cleanDiskTitle'), description: activityBlock === 'recovery'\n ? t('worktree.recovery')\n : t('worktree.cleanDiskDescription', {\n name: worktree.branch,\n path: worktree.absolutePath,\n }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending || isBlocked, onClick: () => {\n void onSubmit();\n }, children: t('dialog.cleanDisk') })] }) }));\n}\nexport function WorktreeForgetDialog({ t, worktree, actionPending, onClose, onSubmit, }) {\n if (worktree === undefined)\n return null;\n const activityBlock = worktreeLifecycleBlockReason(actionPending, worktree.health);\n const isBlocked = activityBlock !== undefined;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeForget'), title: t('worktree.forgetTitle'), description: activityBlock === 'recovery'\n ? t('worktree.recovery')\n : t('worktree.forgetDescription', { name: worktree.branch }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending || isBlocked, onClick: () => {\n void onSubmit();\n }, children: t('dialog.forget') })] }) }));\n}\n//# sourceMappingURL=dialogs.js.map","export async function runWorktreeCleanupFlow(input) {\n await input.clean();\n if (!input.isCurrent())\n return;\n input.onCommitted();\n const follow = async (stage, operation) => {\n if (!input.isCurrent())\n return;\n try {\n await operation();\n }\n catch (error) {\n if (input.isCurrent())\n input.onFollowUpError(stage, error);\n }\n };\n await Promise.all([follow('refresh', input.refresh), follow('permission', input.normalize)]);\n}\n//# sourceMappingURL=worktree-cleanup-flow.js.map","import { runWorktreeCleanupFlow } from './worktree-cleanup-flow.js';\nimport { executeWorktreeAction, toWorktreeViewError } from '../../view/worktree-view.js';\nimport { bindingIdsFor } from '../selectors.js';\n/** Archive, disk cleanup and forget retain their separate commit/recovery semantics. */\nexport function createLifecycleCommands({ props, lifecycleState, mutation, lifecycle, expansion, read, session, }) {\n const { manager, permission, onPermissionNotice, onWorktreeForgotten } = props;\n const { worktreeBranchAdoption, setWorktreeBranchAdoption, worktreeRemoval, setWorktreeRemoval, setWorktreeCleanDisk, cleanupGuard, setWorktreeForget, } = lifecycleState;\n const { runMutation, setActionError, setActionPending } = mutation;\n const { cleanDiskTarget, forgetTarget } = lifecycle;\n const { suppressCurrentSessionReveal, clearSessionGroups } = expansion;\n const { readStateRef, setReadState, refresh, readState } = read;\n const { pendingSessionBinding, setPendingSessionBinding } = session;\n const confirmBranchAdoption = () => {\n const target = worktreeBranchAdoption;\n if (!manager || !target?.mutationToken || typeof target.currentBranch !== 'string')\n return;\n const expectedBranch = target.currentBranch;\n const mutationToken = target.mutationToken;\n void runMutation(async () => {\n await manager.adoptWorktreeBranch({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n expectedBranch,\n });\n setWorktreeBranchAdoption(undefined);\n }, { scope: { kind: 'workspace', workspaceId: target.workspaceId }, preserveCurrent: true });\n };\n const confirmArchive = () => {\n if (manager === undefined || worktreeRemoval === undefined)\n return;\n const target = worktreeRemoval;\n const mutationToken = target.mutationToken;\n if (mutationToken === undefined) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n },\n });\n return;\n }\n void runMutation(async () => {\n await executeWorktreeAction(manager, {\n type: 'removeWorktree',\n input: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n },\n });\n suppressCurrentSessionReveal('archived:' + target.workspaceId);\n setWorktreeRemoval(undefined);\n }, {\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n };\n const confirmDiskCleanup = () => {\n if (manager === undefined || cleanDiskTarget === undefined)\n return;\n const target = cleanDiskTarget;\n const mutationToken = target.mutationToken;\n if (mutationToken === undefined) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n },\n });\n return;\n }\n const generation = cleanupGuard.current.begin();\n const isCurrent = () => cleanupGuard.current.isCurrent(generation) &&\n readStateRef.current.views.some((view) => view.workspaceId === target.workspaceId &&\n view.worktrees.some((record) => record.worktreeId === target.worktreeId));\n setActionPending(true);\n setActionError(undefined);\n void runWorktreeCleanupFlow({\n clean: async () => {\n await executeWorktreeAction(manager, {\n type: 'cleanWorktree',\n input: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n },\n });\n },\n onCommitted: () => {\n setWorktreeCleanDisk(undefined);\n setReadState((current) => {\n if (current.status !== 'ready')\n return current;\n return {\n ...current,\n views: current.views.map((v) => {\n if (v.workspaceId !== target.workspaceId)\n return v;\n return {\n ...v,\n worktrees: v.worktrees.map((w) => {\n if (w.worktreeId !== target.worktreeId)\n return w;\n return {\n ...w,\n status: 'removed',\n diskCleanup: 'completed',\n health: 'cleaned',\n mutationToken: undefined,\n };\n }),\n bindings: v.bindings.map((b) => {\n if (b.worktreeId !== target.worktreeId)\n return b;\n return {\n ...b,\n status: 'detached',\n };\n }),\n };\n }),\n };\n });\n },\n refresh: async () => {\n await refresh({\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n },\n normalize: async () => {\n if (permission?.normalizeDetachedWorktreePermissions === undefined)\n return;\n try {\n const result = await permission.normalizeDetachedWorktreePermissions({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n });\n if (result !== undefined && isCurrent()) {\n onPermissionNotice?.({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n }, result);\n }\n }\n catch {\n if (isCurrent()) {\n onPermissionNotice?.({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n }, {\n status: 'unverified',\n retryable: true,\n });\n }\n }\n },\n isCurrent,\n onFollowUpError: () => {\n // Follow-up errors do not fail the clean mutation\n },\n })\n .catch((error) => {\n if (isCurrent())\n setActionError(toWorktreeViewError(error));\n })\n .finally(() => {\n if (isCurrent())\n setActionPending(false);\n });\n };\n const confirmForget = () => {\n if (manager === undefined || forgetTarget === undefined)\n return;\n const target = forgetTarget;\n const mutationToken = target.mutationToken;\n if (mutationToken === undefined) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n },\n });\n return;\n }\n const targetBindings = readState.status === 'ready'\n ? (readState.views.find((v) => v.workspaceId === target.workspaceId)?.bindings ?? [])\n : [];\n const affectedSessionIds = bindingIdsFor(targetBindings, target.worktreeId);\n void runMutation(async () => {\n await executeWorktreeAction(manager, {\n type: 'forgetWorktree',\n input: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n },\n });\n cleanupGuard.current.invalidate();\n onWorktreeForgotten?.({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n sessionIds: affectedSessionIds,\n });\n if (pendingSessionBinding?.worktreeId === target.worktreeId) {\n setPendingSessionBinding(undefined);\n }\n clearSessionGroups(['worktree:' + target.worktreeId]);\n setReadState((current) => {\n if (current.status !== 'ready')\n return current;\n return {\n ...current,\n views: current.views.map((v) => {\n if (v.workspaceId !== target.workspaceId)\n return v;\n return {\n ...v,\n worktrees: v.worktrees.filter((w) => w.worktreeId !== target.worktreeId),\n bindings: v.bindings.filter((b) => b.worktreeId !== target.worktreeId),\n };\n }),\n };\n });\n setWorktreeForget(undefined);\n }, {\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n };\n return { confirmBranchAdoption, confirmArchive, confirmDiskCleanup, confirmForget };\n}\n//# sourceMappingURL=lifecycle-commands.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { WorktreeAdoptBranchDialog, WorktreeCleanDiskDialog, WorktreeForgetDialog, WorktreeRemovalDialog, } from './dialogs.js';\nimport { createLifecycleCommands } from '../actions/lifecycle-commands.js';\nexport function LifecycleDialogs({ props, lifecycleState, mutation, lifecycle, expansion, read, session, }) {\n const { t } = props;\n const { worktreeBranchAdoption, branchAdoptionGuard, setWorktreeBranchAdoption, worktreeRemoval, setWorktreeRemoval, setWorktreeCleanDisk, setWorktreeForget, } = lifecycleState;\n const { actionPending, actionError } = mutation;\n const { refreshBranchAdoption, cleanDiskTarget, forgetTarget } = lifecycle;\n const { confirmBranchAdoption, confirmArchive, confirmDiskCleanup, confirmForget } = createLifecycleCommands({\n props,\n lifecycleState,\n mutation,\n lifecycle,\n expansion,\n read,\n session,\n });\n return (_jsxs(_Fragment, { children: [_jsx(WorktreeAdoptBranchDialog, { t: t, worktree: worktreeBranchAdoption, actionPending: actionPending, error: actionError, onRetry: () => {\n void refreshBranchAdoption();\n }, onClose: () => {\n branchAdoptionGuard.current.invalidate();\n setWorktreeBranchAdoption(undefined);\n }, onSubmit: confirmBranchAdoption }), _jsx(WorktreeRemovalDialog, { t: t, worktree: worktreeRemoval, actionPending: actionPending, onClose: () => {\n setWorktreeRemoval(undefined);\n }, onSubmit: confirmArchive }), _jsx(WorktreeCleanDiskDialog, { t: t, worktree: cleanDiskTarget, actionPending: actionPending, onClose: () => {\n setWorktreeCleanDisk(undefined);\n }, onSubmit: confirmDiskCleanup }), _jsx(WorktreeForgetDialog, { t: t, worktree: forgetTarget, actionPending: actionPending, onClose: () => {\n setWorktreeForget(undefined);\n }, onSubmit: confirmForget })] }));\n}\n//# sourceMappingURL=LifecycleDialogs.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { WorktreeSessionRenameDialog, WorktreeWorkspaceDeleteDialog, WorktreeWorkspaceRenameDialog, } from './dialogs.js';\nexport function NativeDialogs({ props, native }) {\n const { t } = props;\n const { sessionRenameTarget, sessionRenameDraft, sessionRenamePending, sessionRenameError, closeSessionRename, setSessionRenameDraft, setSessionRenameError, confirmSessionRename, workspaceRenameTarget, workspaceRenameDraft, workspaceRenamePending, workspaceRenameDuplicate, workspaceRenameError, closeWorkspaceRename, setWorkspaceRenameDraft, setWorkspaceRenameError, confirmWorkspaceRename, workspaceDeleteTarget, workspaceDeletePending, workspaceDeleteError, closeWorkspaceDelete, confirmWorkspaceDelete, } = native;\n return (_jsxs(_Fragment, { children: [_jsx(WorktreeSessionRenameDialog, { t: t, target: sessionRenameTarget, draft: sessionRenameDraft, pending: sessionRenamePending, error: sessionRenameError, onClose: closeSessionRename, onDraftChange: (draft) => {\n setSessionRenameDraft(draft);\n setSessionRenameError(undefined);\n }, onSubmit: confirmSessionRename }), _jsx(WorktreeWorkspaceRenameDialog, { t: t, target: workspaceRenameTarget, draft: workspaceRenameDraft, pending: workspaceRenamePending, duplicate: workspaceRenameDuplicate, error: workspaceRenameError, onClose: closeWorkspaceRename, onDraftChange: (draft) => {\n setWorkspaceRenameDraft(draft);\n setWorkspaceRenameError(undefined);\n }, onSubmit: confirmWorkspaceRename }), _jsx(WorktreeWorkspaceDeleteDialog, { t: t, target: workspaceDeleteTarget, pending: workspaceDeletePending, error: workspaceDeleteError, onClose: closeWorkspaceDelete, onSubmit: confirmWorkspaceDelete })] }));\n}\n//# sourceMappingURL=NativeDialogs.js.map","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { WorktreeCreateDialog } from './dialogs.js';\nexport function RegistrationDialog({ props, registration, registrationState, mutation, read, }) {\n const { t } = props;\n const { modalWorkspace, modalView, modalSetupStatus, modalCanCreate, closeWorktreeCreator, changeWorktreeModalMode, loadImportCandidates, submitWorktree, } = registration;\n const { modalReadError, worktreeModalMode, importCandidates, selectedImportPath, selectedBranch, newBranch, worktreeModalWorkspaceId, modalReadViewRef, setSelectedBranch, setNewBranch, setSelectedImportPath, } = registrationState;\n const { actionPending } = mutation;\n const { loadModalWorktreeView } = read;\n return (_jsx(_Fragment, { children: _jsx(WorktreeCreateDialog, { t: t, workspace: modalWorkspace, view: modalView, readError: modalReadError, setupStatus: modalSetupStatus, canCreate: modalCanCreate, mode: worktreeModalMode, importCandidates: importCandidates, selectedImportPath: selectedImportPath, selectedBranch: selectedBranch, newBranch: newBranch, actionPending: actionPending, onClose: closeWorktreeCreator, onRetry: () => {\n if (worktreeModalWorkspaceId === undefined)\n return;\n modalReadViewRef.current = undefined;\n setSelectedBranch('');\n setNewBranch('');\n loadModalWorktreeView(worktreeModalWorkspaceId);\n }, onModeChange: changeWorktreeModalMode, onRetryImportCandidates: () => {\n if (worktreeModalWorkspaceId !== undefined) {\n void loadImportCandidates(worktreeModalWorkspaceId);\n }\n }, onSelectedImportPathChange: setSelectedImportPath, onSelectedBranchChange: setSelectedBranch, onNewBranchChange: setNewBranch, onSubmit: submitWorktree }) }));\n}\n//# sourceMappingURL=RegistrationDialog.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useRef } from 'react';\nimport { stableWorkspaceIds, toWorktreeViewError, } from '../view/worktree-view.js';\nexport function toNativeWorktreeViewError(error) {\n const viewError = toWorktreeViewError(error);\n if (typeof error === 'object' && error !== null)\n return viewError;\n return { ...viewError, message: String(error) };\n}\nexport const EMPTY_READ_STATE = { status: 'idle', views: [] };\nexport const EMPTY_PERMISSION_NOTICE = undefined;\nexport const EMPTY_PERMISSION_NOTICE_SUBSCRIBE = () => () => { };\nexport const EMPTY_PERMISSION_NOTICE_SNAPSHOT = () => EMPTY_PERMISSION_NOTICE;\nexport const EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE = () => () => { };\nexport const EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT = () => undefined;\nexport const EMPTY_FORK_RECOVERY_SNAPSHOT = {\n revision: 0,\n pending: [],\n affectedWorkspaceIds: [],\n};\nexport const EMPTY_FORK_RECOVERY_STORE = {\n getSnapshot: () => EMPTY_FORK_RECOVERY_SNAPSHOT,\n subscribe: () => () => { },\n};\nexport function cx(...classes) {\n return classes.filter(Boolean).join(' ');\n}\nexport function updatedAtById(sessionIds, sessions) {\n return Object.fromEntries(sessionIds.map((sessionId) => [sessionId, sessions.byId[sessionId]?.updatedAt]));\n}\nexport function forkRecoveryError(recovery) {\n const error = toNativeWorktreeViewError(recovery.error);\n return {\n ...error,\n code: error.code === 'WORKTREE_VIEW_FAILED' ? 'SESSION_BINDING_FAILED' : error.code,\n details: {\n ...(error.details ?? {}),\n sessionId: recovery.childSessionId,\n },\n };\n}\nexport function useStableWorkspaceIds(workspaces) {\n const next = workspaces.map((workspace) => workspace.workspaceId);\n const previousRef = useRef([]);\n const stable = stableWorkspaceIds(previousRef.current, next);\n if (stable !== previousRef.current)\n previousRef.current = stable;\n return previousRef.current;\n}\nexport function IconCollapseAll16({ size = 16 }) {\n return (_jsx(\"svg\", { width: size, height: size, viewBox: \"0 0 16 16\", fill: \"currentColor\", children: _jsx(\"path\", { d: \"M9 11h6v1H9v-1zm6-3H9v1h6V8zm-6-3h6v1H9V5zM4.15 2.15l-.71.7L5.59 5H1v1h4.59L3.44 8.15l.71.7L7.5 5.5 4.15 2.15zm0 6l-.71.7L5.59 11H1v1h4.59l-2.15 2.15.71.7L7.5 11.5 4.15 8.15z\" }) }));\n}\n//# sourceMappingURL=shared.js.map","/** Open an existing Session through DSH without touching the peer view mode. */\nexport function openWorktreeSession(opener, sessionId) {\n opener.open(sessionId);\n}\n//# sourceMappingURL=navigation.js.map","/** Browser-local storage key; it is never sent to DSH or the sidecar. */\nexport const WORKTREE_VIEW_MODE_STORAGE_KEY = 'clutch-dsh-worktree.view-mode';\n/** Guard persisted values before they become a visible mode. */\nexport function isWorktreeViewMode(value) {\n return value === 'workspace-session' || value === 'worktree';\n}\n/** Degraded/unavailable plugin state always exposes the original DSH view. */\nexport function effectiveViewMode(preferred, worktreeServiceAvailable) {\n if (!worktreeServiceAvailable || !isWorktreeViewMode(preferred))\n return 'workspace-session';\n return preferred;\n}\n/** Keep the Main bucket scoped to the selected DSH Workspace before filtering bindings. */\nexport function workspaceSessionIds(workspaces, workspaceId, sessionIds) {\n if (workspaceId === undefined)\n return [];\n const workspace = workspaces.items.find((candidate) => candidate.workspaceId === workspaceId);\n if (workspace === undefined)\n return [];\n const listed = new Set(sessionIds);\n return workspace.sessionIds.filter((sessionId) => listed.has(sessionId));\n}\nexport function unboundSessionIds(sessionIds, boundSessionIds) {\n const bound = new Set(boundSessionIds);\n return sessionIds.filter((sessionId) => !bound.has(sessionId));\n}\nexport function projectVirtualWorkspaceMembership(snapshot, previousBindings, nextBindings) {\n const previousSessionIds = new Set(previousBindings.map((binding) => binding.sessionId));\n const nextByWorkspace = new Map();\n for (const binding of nextBindings) {\n const sessionIds = nextByWorkspace.get(binding.workspaceId) ?? [];\n if (!sessionIds.includes(binding.sessionId))\n sessionIds.push(binding.sessionId);\n nextByWorkspace.set(binding.workspaceId, sessionIds);\n }\n const items = snapshot.items.map((workspace) => {\n const nativeSessionIds = workspace.sessionIds.filter((sessionId) => !previousSessionIds.has(sessionId));\n const virtualSessionIds = nextByWorkspace.get(workspace.workspaceId) ?? [];\n const sessionIds = [\n ...nativeSessionIds,\n ...virtualSessionIds.filter((sessionId) => !nativeSessionIds.includes(sessionId)),\n ];\n if (sessionIds.length === workspace.sessionIds.length &&\n sessionIds.every((sessionId, index) => sessionId === workspace.sessionIds[index])) {\n return workspace;\n }\n return { ...workspace, sessionIds };\n });\n if (items.every((workspace, index) => workspace === snapshot.items[index]))\n return snapshot;\n return { ...snapshot, items };\n}\nfunction validTimestamp(value) {\n return typeof value === 'number' && Number.isFinite(value);\n}\nfunction createdAtTimestamp(createdAt) {\n const timestamp = Date.parse(createdAt);\n return Number.isFinite(timestamp) ? timestamp : undefined;\n}\n/**\n * Derive the most recent Workspace from rc.1 Session/Workspace metadata.\n * Host order is retained when timestamps tie, so equal activity never causes\n * the native Workspace order to oscillate.\n */\nexport function deriveRecentWorkspaceId(workspaces, sessionsById) {\n let recentWorkspaceId;\n let recentTimestamp = Number.NEGATIVE_INFINITY;\n for (const workspace of workspaces.items) {\n let workspaceTimestamp;\n for (const sessionId of workspace.sessionIds) {\n const updatedAt = sessionsById[sessionId]?.updatedAt;\n if (validTimestamp(updatedAt)) {\n workspaceTimestamp = Math.max(workspaceTimestamp ?? updatedAt, updatedAt);\n }\n }\n workspaceTimestamp ??= createdAtTimestamp(workspace.createdAt);\n if (workspaceTimestamp === undefined || workspaceTimestamp <= recentTimestamp)\n continue;\n recentWorkspaceId = workspace.workspaceId;\n recentTimestamp = workspaceTimestamp;\n }\n return recentWorkspaceId;\n}\n/**\n * Select the initial Worktree surface Workspace without navigating DSH:\n * current Session membership wins, then derived DSH recency, then the first available\n * Workspace keeps the surface usable in an empty/reconnecting fixture.\n */\nexport function initialWorkspaceId(workspaces, sessions) {\n const currentSessionId = sessions.current;\n if (currentSessionId !== undefined) {\n const currentWorkspace = workspaces.items.find((workspace) => workspace.sessionIds.includes(currentSessionId));\n if (currentWorkspace !== undefined)\n return currentWorkspace.workspaceId;\n }\n const recentWorkspaceId = deriveRecentWorkspaceId(workspaces, sessions.byId);\n if (recentWorkspaceId !== undefined)\n return recentWorkspaceId;\n return workspaces.items[0]?.workspaceId;\n}\n//# sourceMappingURL=view-mode.js.map","/** Browser-local storage identity; never sent to DSH or the plugin sidecar. */\nexport const WORKTREE_EXPAND_STATE_STORAGE_KEY = 'clutch-dsh-worktree.expand-state';\nfunction emptyState() {\n return {\n collapsedWorkspaceIds: {},\n collapsedMainWorkspaceIds: {},\n collapsedWorktreeIds: {},\n };\n}\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction normalizeIds(value) {\n if (!isRecord(value))\n return {};\n return Object.fromEntries(Object.entries(value).filter(([id, collapsed]) => id.length > 0 && collapsed === true));\n}\n/** Turn any persisted JSON value into the current state shape. */\nexport function normalizeWorktreeExpandState(value) {\n const source = isRecord(value) ? value : {};\n return {\n collapsedWorkspaceIds: normalizeIds(source.collapsedWorkspaceIds),\n collapsedMainWorkspaceIds: normalizeIds(source.collapsedMainWorkspaceIds),\n collapsedWorktreeIds: normalizeIds(source.collapsedWorktreeIds),\n };\n}\nexport function isWorkspaceExpanded(state, workspaceId) {\n return state.collapsedWorkspaceIds[workspaceId] !== true;\n}\nexport function isMainExpanded(state, workspaceId) {\n return state.collapsedMainWorkspaceIds[workspaceId] !== true;\n}\nexport function isWorktreeExpanded(state, worktreeId) {\n return state.collapsedWorktreeIds[worktreeId] !== true;\n}\nfunction toggle(record, id) {\n if (record[id] === true)\n delete record[id];\n else\n record[id] = true;\n}\nfunction retain(record, ids) {\n const allowed = new Set(ids);\n for (const id of Object.keys(record)) {\n if (!allowed.has(id))\n delete record[id];\n }\n}\n/** Create one apply-scoped store; component remounts share this instance. */\nexport function createWorktreeExpandStateStore(snapshotStoreFactory) {\n let store;\n try {\n store = snapshotStoreFactory(emptyState(), {\n persist: { name: WORKTREE_EXPAND_STATE_STORAGE_KEY },\n });\n }\n catch {\n // A throwing browser storage getter can fail before runtime persistence's own guard.\n store = snapshotStoreFactory(emptyState());\n }\n // Runtime persistence handles invalid JSON; normalize valid but wrong-shaped JSON.\n store.set(normalizeWorktreeExpandState(store.getSnapshot()));\n const actions = {\n toggleWorkspace: (workspaceId) => {\n store.update((draft) => { toggle(draft.collapsedWorkspaceIds, workspaceId); });\n },\n toggleMain: (workspaceId) => {\n store.update((draft) => { toggle(draft.collapsedMainWorkspaceIds, workspaceId); });\n },\n toggleWorktree: (worktreeId) => {\n store.update((draft) => { toggle(draft.collapsedWorktreeIds, worktreeId); });\n },\n collapseAll: (workspaceIds, worktreeIds = [], mainWorkspaceIds = workspaceIds) => {\n store.update((draft) => {\n for (const id of workspaceIds) {\n draft.collapsedWorkspaceIds[id] = true;\n }\n for (const id of mainWorkspaceIds) {\n draft.collapsedMainWorkspaceIds[id] = true;\n }\n for (const id of worktreeIds) {\n draft.collapsedWorktreeIds[id] = true;\n }\n });\n },\n retain: (workspaceIds, worktreeIds) => {\n // No Workspace IDs means the Workspace list has not arrived yet. Pruning from that\n // read would delete every stored preference, so refuse it outright: only a caller\n // holding a complete, non-empty snapshot may prune.\n if (workspaceIds.length === 0)\n return;\n store.update((draft) => {\n retain(draft.collapsedWorkspaceIds, workspaceIds);\n retain(draft.collapsedMainWorkspaceIds, workspaceIds);\n retain(draft.collapsedWorktreeIds, worktreeIds);\n });\n },\n };\n return Object.assign(store, { actions });\n}\n//# sourceMappingURL=worktree-expand-state.js.map","export function isMainWorktreeId(worktreeId) {\n return worktreeId === 'main' || worktreeId.startsWith('main:');\n}\nexport function isManagedDashboardRecord(record) {\n return !isMainWorktreeId(record.worktreeId);\n}\nexport function createMainWorktreeRecord(workspace, currentBranch) {\n return {\n worktreeId: `main:${workspace.workspaceId}`,\n workspaceId: workspace.workspaceId,\n // Main is a browser-local projection, not a plugin-managed Worktree. Keep\n // unavailable branch and health facts empty instead of inventing values.\n branch: currentBranch ?? '',\n currentBranch,\n absolutePath: workspace.path,\n status: 'active',\n };\n}\nexport function resolveDashboardRecord(selection, mode, currentSessionId, workspaceIds, records, mainRecord) {\n if (selection === undefined ||\n mode !== 'worktree' ||\n (selection.sessionId !== undefined && selection.sessionId !== currentSessionId) ||\n !workspaceIds.includes(selection.workspaceId))\n return undefined;\n if (mainRecord !== undefined &&\n (isMainWorktreeId(selection.worktreeId) || selection.worktreeId === mainRecord.worktreeId)) {\n return mainRecord;\n }\n return records?.find((record) => record.workspaceId === selection.workspaceId && record.worktreeId === selection.worktreeId);\n}\n//# sourceMappingURL=dashboard-selection.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { HoverCard, IconArchiveOutline20, IconBranchOutline16, IconChevronDownOutline14, IconChevronRightOutline14, IconCopyOutline16, IconEditOutline16, IconEllipsisOutline16, IconFolderClose16, IconFolderOpen16, IconPlusOutline16, IconRefreshOutline16, IconTrashOutline16, Menu, StateDot, writeClipboard, } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useEffect, useRef, useState } from 'react';\nimport { IconDashboard } from '../../dashboard/dashboard-icon.js';\nimport { isBlankSession, relativeTime, } from '../../session/session-view.js';\nimport styles from '../../worktree.css';\nimport { sessionLabel } from '../selectors.js';\nfunction rowHalf(event) {\n const rect = event.currentTarget.getBoundingClientRect();\n return event.clientY < rect.top + rect.height / 2 ? 'before' : 'after';\n}\nconst WORKTREE_LABEL_SCROLL_START_PAUSE_MS = 800;\nconst WORKTREE_LABEL_SCROLL_FORWARD_MS = 3_000;\nconst WORKTREE_LABEL_SCROLL_END_PAUSE_MS = 1_000;\nconst WORKTREE_LABEL_SCROLL_RETURN_MS = 3_000;\nconst WORKTREE_LABEL_SCROLL_CYCLE_MS = WORKTREE_LABEL_SCROLL_START_PAUSE_MS +\n WORKTREE_LABEL_SCROLL_FORWARD_MS +\n WORKTREE_LABEL_SCROLL_END_PAUSE_MS +\n WORKTREE_LABEL_SCROLL_RETURN_MS;\nfunction worktreeLabelScrollProgress(elapsedMs) {\n const elapsed = elapsedMs % WORKTREE_LABEL_SCROLL_CYCLE_MS;\n const forwardStart = WORKTREE_LABEL_SCROLL_START_PAUSE_MS;\n const forwardEnd = forwardStart + WORKTREE_LABEL_SCROLL_FORWARD_MS;\n const returnStart = forwardEnd + WORKTREE_LABEL_SCROLL_END_PAUSE_MS;\n if (elapsed < forwardStart)\n return 0;\n if (elapsed < forwardEnd) {\n return (elapsed - forwardStart) / WORKTREE_LABEL_SCROLL_FORWARD_MS;\n }\n if (elapsed < returnStart)\n return 1;\n return 1 - (elapsed - returnStart) / WORKTREE_LABEL_SCROLL_RETURN_MS;\n}\nfunction sessionStatusLabel(t, status) {\n switch (status.labelKey) {\n case 'running':\n return t('session.status.running');\n case 'subagentsRunning':\n return t(status.runningSubagentCount === 1\n ? 'session.status.subagentsRunning.one'\n : 'session.status.subagentsRunning.other', { n: status.runningSubagentCount });\n case 'idle':\n return t('session.status.idle');\n case 'waitingApproval':\n return t('session.status.waitingApproval');\n case 'planReview':\n return t('session.status.planReview');\n case 'waitingAnswer':\n return t('session.status.waitingAnswer');\n case 'completed':\n return t('session.status.completed');\n }\n}\nfunction sessionTimeLabel(t, value) {\n switch (value.unit) {\n case 'now':\n return t('session.time.now');\n case 'minutes':\n return t('session.time.minutes', { n: value.n });\n case 'hours':\n return t('session.time.hours', { n: value.n });\n case 'days':\n return t('session.time.days', { n: value.n });\n case 'months':\n return t('session.time.months', { n: value.n });\n case 'years':\n return t('session.time.years', { n: value.n });\n }\n}\n/** Native Workspace hover-card time copy, including the trailing \"ago\" marker. */\nfunction sessionHoverTimeLabel(t, value) {\n const label = sessionTimeLabel(t, value);\n return value.unit === 'now' ? label : t('session.time.ago', { t: label });\n}\n/** Native Workspace hover-card status list, including a secondary subagent status when relevant. */\nfunction sessionHoverStatuses(presentation) {\n if (presentation.runningSubagentCount === 0 ||\n presentation.status.labelKey === 'subagentsRunning') {\n return [presentation.status];\n }\n return [\n presentation.status,\n {\n state: 'ongoing',\n labelKey: 'subagentsRunning',\n runningSubagentCount: presentation.runningSubagentCount,\n },\n ];\n}\n/** Native Workspace Session hover-card details, adapted to the Worktree row projection. */\nfunction WorktreeSessionHoverContent({ label, blank, presentation, t, }) {\n const statuses = presentation === undefined ? [] : sessionHoverStatuses(presentation);\n const timeValue = !blank && presentation?.updatedAt !== undefined\n ? relativeTime(presentation.updatedAt, Date.now())\n : undefined;\n return (_jsxs(\"div\", { className: styles.sessionHoverContent, children: [_jsx(\"div\", { className: styles.sessionHoverTitle, children: label }), !blank && timeValue !== undefined && (_jsx(\"div\", { className: styles.sessionHoverTime, children: sessionHoverTimeLabel(t, timeValue) })), statuses.map((status) => (_jsxs(\"div\", { className: styles.sessionHoverStatus, children: [_jsx(StateDot, { state: status.state }), _jsx(\"span\", { children: sessionStatusLabel(t, status) })] }, `${status.labelKey}-${status.runningSubagentCount}`)))] }));\n}\n/** Workspace row using the native DSH menu, fixed action column, and drag contract. */\nexport function WorktreeWorkspaceRow({ t, workspace, expanded, groupActivityStatus, actionPending, menuOpen, drag, onToggle, onCreateWorktree, onRename, onDelete, onMenuOpenChange, }) {\n const workspaceMenuItems = [\n {\n id: 'rename',\n label: t('workspace.rename'),\n icon: _jsx(IconEditOutline16, {}),\n disabled: actionPending,\n },\n {\n id: 'delete',\n label: t('workspace.delete'),\n icon: _jsx(IconTrashOutline16, {}),\n danger: true,\n disabled: actionPending,\n },\n ];\n const markerClass = drag.marker === 'before' ? styles.dropBefore : drag.marker === 'after' ? styles.dropAfter : '';\n const groupActivityVisible = !expanded && groupActivityStatus !== undefined;\n const groupActivityLabel = groupActivityStatus === undefined ? undefined : sessionStatusLabel(t, groupActivityStatus);\n return (_jsxs(\"div\", { className: `${styles.workspaceRow} ${markerClass}`, \"data-workspace-drag\": drag.active ? 'active' : undefined, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, \"data-menu-open\": menuOpen || undefined, draggable: true, onClick: () => {\n onToggle();\n }, onDragStart: (event) => {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', workspace.workspaceId);\n drag.start();\n }, onDragEnd: drag.end, onDragOver: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n drag.hover(rowHalf(event));\n }, onDrop: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n drag.drop(rowHalf(event));\n }, children: [_jsx(\"button\", { type: \"button\", className: `${styles.disclosureButton} ${styles.workspaceDisclosure}`, \"aria-label\": t(expanded ? 'workspace.collapse' : 'workspace.expand', {\n name: workspace.title,\n }), \"aria-expanded\": expanded, onClick: (event) => {\n event.stopPropagation();\n onToggle();\n }, children: expanded ? (_jsx(IconChevronDownOutline14, { size: 18 })) : (_jsx(IconChevronRightOutline14, { size: 18 })) }), _jsx(\"span\", { className: styles.workspaceIcon, \"aria-hidden\": \"true\", children: expanded ? _jsx(IconFolderOpen16, {}) : _jsx(IconFolderClose16, {}) }), _jsx(\"span\", { className: styles.workspaceTitle, children: workspace.title }), _jsxs(\"span\", { className: `${styles.treeActionSlot} ${styles.workspaceActions}`, children: [_jsx(\"span\", { className: styles.groupActivity, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, role: groupActivityVisible ? 'img' : undefined, \"aria-label\": groupActivityVisible ? groupActivityLabel : undefined, title: groupActivityVisible ? groupActivityLabel : undefined, children: groupActivityVisible && groupActivityStatus !== undefined && (_jsx(StateDot, { state: groupActivityStatus.state })) }), _jsx(\"span\", { className: styles.menuAction, children: _jsx(Menu, { open: menuOpen, onClose: () => {\n onMenuOpenChange(false);\n }, items: workspaceMenuItems, onSelect: (id) => {\n onMenuOpenChange(false);\n if (id === 'rename')\n onRename();\n if (id === 'delete')\n onDelete();\n }, portal: true, closeOnPointerLeave: true, anchor: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-workspace-menu\": true, \"aria-label\": t('workspace.options', { name: workspace.title }), onClick: (event) => {\n event.stopPropagation();\n onMenuOpenChange(!menuOpen);\n }, children: _jsx(IconEllipsisOutline16, {}) }) }) }), _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-add-worktree\": true, \"aria-label\": t('workspace.addWorktree', { name: workspace.title }), onClick: (event) => {\n event.stopPropagation();\n onCreateWorktree();\n }, children: _jsx(IconPlusOutline16, {}) })] })] }));\n}\n/** Shared Main/Worktree group row with parameterized icon, state, and actions. */\nexport function WorktreeGroupRow({ t, kind, label, worktreeId, expanded, groupActivityStatus, icon, workspaceTitle, state, stateLabel, repairGuidance, onToggle, onCreateSession, showDashboardAction, menu, drag, }) {\n const main = kind === 'main';\n const groupActivityVisible = !expanded && groupActivityStatus !== undefined;\n const groupActivityLabel = groupActivityStatus === undefined ? undefined : sessionStatusLabel(t, groupActivityStatus);\n const worktreeStateVisible = stateLabel !== undefined;\n const dashboardActionVisible = showDashboardAction === true && menu?.onDashboard !== undefined;\n const worktreeLabelRef = useRef(null);\n const labelScrollFrameRef = useRef(undefined);\n const worktreeLabelPointerInsideRef = useRef(false);\n const stopWorktreeLabelScroll = () => {\n if (labelScrollFrameRef.current !== undefined) {\n cancelAnimationFrame(labelScrollFrameRef.current);\n labelScrollFrameRef.current = undefined;\n }\n if (worktreeLabelRef.current !== null) {\n worktreeLabelRef.current.scrollLeft = 0;\n }\n };\n const startWorktreeLabelScroll = () => {\n if (labelScrollFrameRef.current !== undefined) {\n return;\n }\n const labelElement = worktreeLabelRef.current;\n const prefersReducedMotion = typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n if (labelElement === null || prefersReducedMotion) {\n return;\n }\n const startedAt = performance.now();\n const animate = (timestamp) => {\n if (worktreeLabelRef.current !== labelElement) {\n labelScrollFrameRef.current = undefined;\n return;\n }\n const maxScrollLeft = Math.max(0, labelElement.scrollWidth - labelElement.clientWidth);\n if (maxScrollLeft === 0) {\n labelElement.scrollLeft = 0;\n labelScrollFrameRef.current = undefined;\n return;\n }\n labelElement.scrollLeft =\n maxScrollLeft * worktreeLabelScrollProgress(timestamp - startedAt);\n labelScrollFrameRef.current = requestAnimationFrame(animate);\n };\n labelScrollFrameRef.current = requestAnimationFrame(animate);\n };\n const syncWorktreeLabelScroll = () => {\n if (worktreeLabelPointerInsideRef.current || groupActivityVisible) {\n startWorktreeLabelScroll();\n }\n else {\n stopWorktreeLabelScroll();\n }\n };\n useEffect(() => {\n syncWorktreeLabelScroll();\n }, [groupActivityVisible, label]);\n useEffect(() => {\n return () => {\n if (labelScrollFrameRef.current !== undefined) {\n cancelAnimationFrame(labelScrollFrameRef.current);\n labelScrollFrameRef.current = undefined;\n }\n };\n }, []);\n const markerClass = drag?.marker === 'before'\n ? styles.dropBefore\n : drag?.marker === 'after'\n ? styles.dropAfter\n : '';\n const dragProps = drag === undefined\n ? {}\n : {\n draggable: true,\n onDragStart: (event) => {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', worktreeId ?? label);\n drag.start();\n },\n onDragEnd: drag.end,\n onDragOver: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n drag.hover(rowHalf(event));\n },\n onDrop: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n drag.drop(rowHalf(event));\n },\n };\n const row = (_jsxs(\"div\", { className: `${styles.worktreeRow} ${markerClass}`, \"data-main-group\": main ? 'true' : undefined, \"data-main-expanded\": main ? String(expanded) : undefined, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, \"data-menu-open\": menu?.open ? 'true' : undefined, \"data-worktree-drag\": drag?.active ? 'active' : undefined, ...dragProps, onClick: onToggle, onMouseEnter: () => {\n worktreeLabelPointerInsideRef.current = true;\n syncWorktreeLabelScroll();\n }, onMouseLeave: () => {\n worktreeLabelPointerInsideRef.current = false;\n syncWorktreeLabelScroll();\n }, children: [_jsx(\"button\", { type: \"button\", className: `${styles.disclosureButton} ${styles.worktreeDisclosure}`, \"aria-label\": t(expanded ? 'worktree.collapse' : 'worktree.expand', { name: label }), \"aria-expanded\": expanded, onClick: (event) => {\n event.stopPropagation();\n onToggle();\n }, children: expanded ? (_jsx(IconChevronDownOutline14, { size: 18 })) : (_jsx(IconChevronRightOutline14, { size: 18 })) }), _jsx(\"span\", { className: styles.worktreeIcon, \"data-worktree-state\": state, \"aria-hidden\": \"true\", children: icon }), worktreeStateVisible && (_jsx(\"span\", { className: styles.worktreeStateLabel, children: stateLabel })), _jsx(\"span\", { ref: worktreeLabelRef, className: styles.worktreeLabel, children: label }), _jsxs(\"span\", { className: styles.treeActionSlot, children: [_jsx(\"span\", { className: styles.groupActivity, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, role: groupActivityVisible ? 'img' : undefined, \"aria-label\": groupActivityVisible ? groupActivityLabel : undefined, title: groupActivityVisible ? groupActivityLabel : undefined, children: groupActivityVisible && groupActivityStatus !== undefined && (_jsx(StateDot, { state: groupActivityStatus.state })) }), dashboardActionVisible && (_jsx(\"span\", { className: styles.dashboardAction, children: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-dashboard-action\": true, \"aria-label\": t('dashboard.title'), onClick: (event) => {\n event.stopPropagation();\n menu?.onDashboard?.();\n }, children: _jsx(IconDashboard, { size: 16 }) }) })), menu !== undefined && (_jsx(\"span\", { className: styles.menuAction, children: _jsx(Menu, { open: menu.open, onClose: () => {\n menu.onOpenChange(false);\n }, items: [\n ...(menu.onDashboard === undefined\n ? []\n : [{ id: 'dashboard', label: t('dashboard.title'), icon: _jsx(IconDashboard, { size: 16 }) }]),\n ...(menu.showCreate\n ? [\n {\n id: 'create',\n label: t('worktree.createNew'),\n icon: _jsx(IconPlusOutline16, {}),\n disabled: menu.disabled || menu.onCreateWorktree === undefined,\n },\n ]\n : []),\n {\n id: 'copy-path',\n label: t('worktree.copyPath'),\n icon: _jsx(IconCopyOutline16, {}),\n disabled: menu.disabled,\n },\n ...(menu.showRemove\n ? [\n {\n id: 'remove',\n label: t('worktree.archive'),\n icon: _jsx(IconArchiveOutline20, { size: 16 }),\n danger: true,\n disabled: menu.disabled || menu.onRemove === undefined,\n },\n ]\n : []),\n ...(menu.onAdoptBranch\n ? [\n {\n id: 'adopt-branch',\n label: t('worktree.adoptBranch'),\n disabled: menu.disabled,\n },\n ]\n : []),\n ...(menu.onRecover\n ? [{ id: 'recover', label: t('worktree.retryRecovery'), disabled: menu.disabled }]\n : []),\n ...(menu.showUnarchive\n ? [\n {\n id: 'unarchive',\n label: menu.unarchiveDisabledReason\n ? `${t('worktree.unarchive')} (${menu.unarchiveDisabledReason})`\n : t('worktree.unarchive'),\n icon: _jsx(IconRefreshOutline16, {}),\n disabled: menu.disabled || menu.unarchiveDisabled || menu.onUnarchive === undefined,\n },\n ]\n : []),\n ...(menu.showCleanDisk\n ? [\n {\n id: 'clean-disk',\n label: menu.cleanDiskDisabledReason\n ? `${t('worktree.cleanDisk')} (${menu.cleanDiskDisabledReason})`\n : t('worktree.cleanDisk'),\n icon: _jsx(IconTrashOutline16, {}),\n danger: true,\n disabled: menu.disabled || menu.cleanDiskDisabled || menu.onCleanDisk === undefined,\n },\n ]\n : []),\n ...(menu.showForget\n ? [\n {\n id: 'forget',\n label: menu.forgetDisabledReason\n ? `${t('worktree.forget')} (${menu.forgetDisabledReason})`\n : t('worktree.forget'),\n icon: _jsx(IconTrashOutline16, {}),\n danger: true,\n disabled: menu.disabled || menu.forgetDisabled || menu.onForget === undefined,\n },\n ]\n : []),\n ], onSelect: (id) => {\n menu.onOpenChange(false);\n if (id === 'create' && menu.showCreate)\n menu.onCreateWorktree?.();\n if (id === 'dashboard')\n menu.onDashboard?.();\n if (id === 'adopt-branch')\n menu.onAdoptBranch?.();\n if (id === 'recover')\n menu.onRecover?.();\n if (id === 'copy-path')\n void writeClipboard(menu.copyPath);\n if (id === 'remove' && menu.showRemove)\n menu.onRemove?.();\n if (id === 'unarchive' && menu.showUnarchive)\n menu.onUnarchive?.();\n if (id === 'clean-disk' && menu.showCleanDisk)\n menu.onCleanDisk?.();\n if (id === 'forget' && menu.showForget)\n menu.onForget?.();\n }, portal: true, closeOnPointerLeave: true, anchor: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-worktree-menu\": true, \"aria-label\": t('worktree.options', { name: menu.label }), onClick: (event) => {\n event.stopPropagation();\n menu.onOpenChange(!menu.open);\n }, children: _jsx(IconEllipsisOutline16, {}) }) }) })), onCreateSession !== undefined && (_jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-add-main-session\": main ? 'true' : undefined, \"data-add-session\": main ? undefined : 'true', \"aria-label\": t('worktree.addSession', { name: workspaceTitle }), onClick: (event) => {\n event.stopPropagation();\n onCreateSession();\n }, children: _jsx(IconPlusOutline16, {}) }))] })] }));\n if (main)\n return row;\n return (_jsx(HoverCard, { anchor: row, content: _jsxs(\"div\", { className: styles.worktreeHoverDetails, children: [_jsx(\"div\", { className: styles.worktreeHoverTitle, children: label }), stateLabel !== undefined && state !== 'done' && (_jsx(\"p\", { className: styles.worktreeHoverTitle, children: stateLabel })), repairGuidance !== undefined && (_jsxs(_Fragment, { children: [_jsx(\"p\", { className: styles.worktreeHoverTitle, children: menu?.copyPath }), _jsx(\"p\", { className: styles.worktreeHoverTitle, children: repairGuidance })] }))] }), openDelayMs: 500, disabled: menu?.open === true || drag?.active === true, copyLabel: t('copy'), copiedLabel: t('hover.copied') }));\n}\n/** Worktree-mode Session row with the same trailing options menu as native DSH rows. */\nexport function WorktreeSessionRow({ t, sessionId, blank, current, label, drag, actionPending, onOpen, onRename, onFork, onArchive, presentation, }) {\n const [menuOpen, setMenuOpen] = useState(false);\n const markerClass = drag.marker === 'before' ? styles.dropBefore : drag.marker === 'after' ? styles.dropAfter : '';\n const sessionMenuItems = [\n {\n id: 'rename',\n label: t('session.rename'),\n icon: _jsx(IconEditOutline16, {}),\n disabled: onRename === undefined || actionPending,\n },\n {\n id: 'fork',\n label: t('session.fork'),\n icon: _jsx(IconBranchOutline16, {}),\n disabled: onFork === undefined || actionPending,\n },\n {\n id: 'archive',\n label: t('session.archive'),\n icon: _jsx(IconArchiveOutline20, { size: 16 }),\n disabled: onArchive === undefined || actionPending,\n },\n {\n id: 'copy-session-id',\n label: t('session.copyId'),\n icon: _jsx(IconCopyOutline16, {}),\n },\n ];\n const statusLabel = presentation === undefined ? undefined : sessionStatusLabel(t, presentation.status);\n const showTrailingStatus = !blank &&\n presentation !== undefined &&\n (presentation.status.state !== 'done' || presentation.completed);\n const timeValue = !blank && !showTrailingStatus && presentation?.updatedAt !== undefined\n ? relativeTime(presentation.updatedAt, Date.now())\n : undefined;\n const timeLabel = timeValue === undefined ? undefined : sessionTimeLabel(t, timeValue);\n const row = (_jsxs(\"div\", { className: `${styles.treeSessionRow} ${markerClass}`, \"data-session-id\": sessionId, \"data-session-blank\": blank ? 'true' : undefined, \"data-session-current\": current ? 'true' : undefined, \"data-session-drag\": drag.active ? 'active' : undefined, \"data-menu-open\": menuOpen || undefined, role: \"treeitem\", \"aria-current\": current ? 'true' : undefined, draggable: true, onDragStart: (event) => {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', sessionId);\n drag.start();\n }, onDragEnd: drag.end, onDragOver: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n drag.hover(rowHalf(event));\n }, onDrop: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n drag.drop(rowHalf(event));\n }, children: [_jsx(\"button\", { type: \"button\", className: styles.treeSessionContent, onClick: onOpen, children: _jsx(\"span\", { className: styles.sessionLabel, children: label }) }), !blank && (_jsxs(\"span\", { className: styles.sessionTrailing, children: [_jsx(\"span\", { className: styles.sessionMeta, children: showTrailingStatus && presentation !== undefined ? (_jsx(\"span\", { className: styles.sessionStatus, \"data-session-status\": statusLabel, role: \"img\", \"aria-label\": statusLabel, title: statusLabel, children: _jsx(StateDot, { state: presentation.status.state }) })) : timeLabel !== undefined ? (_jsx(\"span\", { className: styles.sessionTime, \"data-session-time\": true, children: timeLabel })) : null }), _jsx(\"span\", { className: styles.rowActions, children: _jsx(Menu, { open: menuOpen, onClose: () => {\n setMenuOpen(false);\n }, items: sessionMenuItems, onSelect: (id) => {\n setMenuOpen(false);\n if (id === 'rename')\n onRename?.(sessionId, label);\n if (id === 'fork')\n onFork?.(sessionId);\n if (id === 'archive')\n onArchive?.(sessionId);\n if (id === 'copy-session-id')\n void writeClipboard(sessionId);\n }, portal: true, closeOnPointerLeave: true, anchor: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-session-menu\": true, \"aria-label\": t('session.options', { name: label }), onClick: (event) => {\n event.stopPropagation();\n setMenuOpen((current) => !current);\n }, children: _jsx(IconEllipsisOutline16, {}) }) }) })] }))] }));\n return (_jsx(HoverCard, { anchor: row, content: _jsx(WorktreeSessionHoverContent, { label: label, blank: blank, presentation: presentation, t: t }), openDelayMs: 500, disabled: menuOpen || drag.active, copyText: blank ? undefined : label, copyLabel: t('copy'), copiedLabel: t('hover.copied') }));\n}\nexport function WorktreeSessionGroup({ t, groupKey, sessionIds, workspaceId, currentSessionId, expanded, actionPending, sessions, sessionPresentations, dragState, onToggleExpanded, onStartDrag, onHoverDrag, onClearDrag, onFinishDrag, onCommitDrag, onOpen, onRename, onFork, onArchive, }) {\n const visibleSessionIds = expanded ? sessionIds : sessionIds.slice(0, 5);\n const sameGroupDrag = dragState?.groupKey === groupKey;\n return (_jsxs(_Fragment, { children: [visibleSessionIds.map((sessionId) => (_jsx(WorktreeSessionRow, { t: t, sessionId: sessionId, blank: isBlankSession(sessionId, sessions), current: sessionId === currentSessionId, label: sessionLabel(sessionId, sessions, t), presentation: sessionPresentations[sessionId], drag: {\n active: sameGroupDrag,\n marker: sameGroupDrag && dragState.over?.sessionId === sessionId ? dragState.over.half : null,\n start: () => {\n onStartDrag(groupKey, sessionId);\n },\n hover: (half) => {\n onHoverDrag(sessionId, half);\n },\n drop: (half) => {\n if (dragState === undefined)\n return;\n onCommitDrag(dragState, { sessionId, half }, sessionIds, workspaceId);\n },\n end: () => {\n if (dragState?.over !== null && dragState?.over !== undefined) {\n onCommitDrag(dragState, dragState.over, sessionIds, workspaceId);\n }\n else {\n onClearDrag();\n }\n onFinishDrag();\n },\n }, actionPending: actionPending, onOpen: () => {\n onOpen(sessionId);\n }, onRename: onRename, onFork: onFork, onArchive: onArchive }, `${groupKey}:${sessionId}`))), sessionIds.length > 5 && (_jsx(\"button\", { type: \"button\", className: styles.sessionOverflowButton, \"aria-expanded\": expanded, onClick: onToggleExpanded, children: expanded\n ? t('session.collapse')\n : t('session.expandMore', { count: sessionIds.length - 5 }) }))] }));\n}\n//# sourceMappingURL=rows.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconBranchOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { filterVisibleSessionIds, aggregateSessionStatus, sessionMatchesQuery, } from '../../session/session-view.js';\nimport { isWorktreeExpanded } from '../../view/worktree-expand-state.js';\nimport { createNumberedWorktreeName, filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { WorktreeGroupRow, WorktreeSessionGroup } from './rows.js';\nimport { bindingIdsFor, includesText, isSessionGroupAutoExpanded } from '../selectors.js';\nexport function ActiveWorktree({ record, source, expansion, ordering, props, lifecycle, session, menus, mutation, read, registration, lifecycleState, drag, native, bindings, workspaceMatchesQuery, workspace, workspaceWorktreeNames, sameWorkspaceWorktreeDrag, activeWorktrees, }) {\n const { sessions, archivedSessionIds, currentSessionId, expandSnapshot, sessionPresentations } = source;\n const { query, isCurrentSessionReveal, expandedSessionGroups, toggleWorktree, toggleSessionGroup, } = expansion;\n const { orderedSessionIdsByAccount } = ordering;\n const { t, renameSession, forkSession, archiveSession } = props;\n const { branchLabel, branchActions } = lifecycle;\n const { createSession, openWorkspaceSession } = session;\n const { openWorktreeMenuId, setOpenWorktreeMenuId } = menus;\n const { actionPending, setActionError } = mutation;\n const { refresh } = read;\n const { openWorktreeCreator } = registration;\n const { setWorktreeRemoval } = lifecycleState;\n const { worktreeDrag, worktreeDropCommitted, setWorktreeDrag, commitWorktreeDrag, sessionDrag, sessionDropCommitted, setSessionDrag, commitSessionDrag, } = drag;\n const { openSessionRename, archiveWorktreeSession } = native;\n const worktreeSessionIds = filterVisibleSessionIds(filterArchivedSessionIds(bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId)), archivedSessionIds), sessions);\n const worktreeMatchesQuery = workspaceMatchesQuery ||\n includesText(record.branch, query) ||\n includesText(record.absolutePath, query);\n if (query.length > 0 &&\n !worktreeMatchesQuery &&\n !worktreeSessionIds.some((sessionId) => sessionMatchesQuery(sessionId, sessions, query))) {\n return null;\n }\n const visibleWorktreeSessionIds = worktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const worktreeGroupKey = `worktree:${record.worktreeId}`;\n const orderedWorktreeSessionIds = orderedSessionIdsByAccount.get(worktreeGroupKey) ?? worktreeSessionIds;\n const orderedVisibleWorktreeSessionIds = orderedWorktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const sessionIds = orderedVisibleWorktreeSessionIds.length === visibleWorktreeSessionIds.length\n ? orderedVisibleWorktreeSessionIds\n : visibleWorktreeSessionIds;\n const sessionGroupAutoExpanded = isSessionGroupAutoExpanded(sessionIds, currentSessionId, isCurrentSessionReveal('session-group:' + worktreeGroupKey));\n const sessionGroupExpanded = expandedSessionGroups[worktreeGroupKey] === true || sessionGroupAutoExpanded;\n const state = record.health === 'repair' || record.health === 'recovery-needed'\n ? 'error'\n : record.health === 'branch-drift'\n ? 'warning'\n : 'done';\n const stateLabel = record.health === 'recovery-needed'\n ? t('worktree.recovery')\n : record.health === 'repair'\n ? t('worktree.repair')\n : record.health === 'branch-drift'\n ? t('worktree.branchDrift')\n : t('worktree.ready');\n const worktreeExpanded = isWorktreeExpanded(expandSnapshot, record.worktreeId) ||\n isCurrentSessionReveal('worktree:' + record.worktreeId);\n return (_jsxs(\"div\", { className: styles.worktreeGroup, \"data-worktree-id\": record.worktreeId, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"worktree\", label: branchLabel(record), worktreeId: record.worktreeId, expanded: worktreeExpanded, groupActivityStatus: aggregateSessionStatus(worktreeSessionIds, sessionPresentations), icon: _jsx(IconBranchOutline16, {}), workspaceTitle: workspace.title, state: state, stateLabel: stateLabel, repairGuidance: record.health === 'repair'\n ? t('worktree.repairGuidance')\n : record.health === 'recovery-needed'\n ? t('worktree.recoveryGuidance')\n : record.health === 'branch-drift'\n ? t(record.currentBranch === null ? 'worktree.detachedGuidance' : 'worktree.branchDriftGuidance')\n : undefined, onToggle: () => {\n toggleWorktree(record.worktreeId);\n }, showDashboardAction: props.openDashboard !== undefined, onCreateSession: record.status === 'active' &&\n record.health !== 'repair' &&\n record.health !== 'recovery-needed'\n ? () => {\n void createSession({\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n cwd: record.absolutePath,\n });\n }\n : undefined, menu: {\n onDashboard: props.openDashboard === undefined ? undefined : () => props.openDashboard?.(record),\n ...branchActions(record),\n open: openWorktreeMenuId === record.worktreeId,\n label: record.branch,\n copyPath: record.absolutePath,\n showCreate: record.status === 'active' &&\n record.health !== 'repair' &&\n record.health !== 'recovery-needed' &&\n record.currentBranch !== null,\n showRemove: record.status === 'active' && record.health !== 'recovery-needed',\n disabled: actionPending,\n onOpenChange: (open) => {\n setOpenWorktreeMenuId(open ? record.worktreeId : undefined);\n if (open)\n void refresh({\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n reuseInFlight: true,\n invalidateContext: false,\n });\n },\n onCreateWorktree: record.status === 'active' &&\n record.health !== 'repair' &&\n record.health !== 'recovery-needed' &&\n record.currentBranch !== null\n ? () => {\n openWorktreeCreator(workspace, {\n baseBranch: record.currentBranch ?? record.branch,\n newBranch: createNumberedWorktreeName(record.currentBranch ?? record.branch, workspaceWorktreeNames),\n });\n }\n : undefined,\n onRemove: record.status === 'active'\n ? () => {\n setWorktreeRemoval(record);\n setActionError(undefined);\n }\n : undefined,\n }, drag: {\n active: sameWorkspaceWorktreeDrag,\n marker: worktreeDrag?.over?.worktreeId === record.worktreeId ? worktreeDrag.over.half : null,\n start: () => {\n worktreeDropCommitted.current = false;\n setWorktreeDrag({\n workspaceId: workspace.workspaceId,\n worktreeId: record.worktreeId,\n over: null,\n });\n },\n hover: (half) => {\n setWorktreeDrag((current) => current === undefined || current.workspaceId !== workspace.workspaceId\n ? current\n : {\n ...current,\n over: { worktreeId: record.worktreeId, half },\n });\n },\n drop: (half) => {\n if (worktreeDrag === undefined)\n return;\n commitWorktreeDrag(worktreeDrag, { worktreeId: record.worktreeId, half }, activeWorktrees.map((candidate) => candidate.worktreeId), workspace.workspaceId);\n },\n end: () => {\n setWorktreeDrag(undefined);\n worktreeDropCommitted.current = false;\n },\n } }), worktreeExpanded && (_jsx(WorktreeSessionGroup, { t: t, groupKey: worktreeGroupKey, sessionIds: sessionIds, workspaceId: workspace.workspaceId, currentSessionId: currentSessionId, expanded: sessionGroupExpanded, actionPending: actionPending, sessions: sessions, sessionPresentations: sessionPresentations, dragState: sessionDrag, onToggleExpanded: () => {\n toggleSessionGroup(worktreeGroupKey, sessionGroupAutoExpanded);\n }, onStartDrag: (groupKey, sessionId) => {\n sessionDropCommitted.current = false;\n setSessionDrag({ groupKey, sessionId, over: null });\n }, onHoverDrag: (sessionId, half) => {\n setSessionDrag((current) => current === undefined ? current : { ...current, over: { sessionId, half } });\n }, onClearDrag: () => {\n setSessionDrag(undefined);\n }, onFinishDrag: () => {\n sessionDropCommitted.current = false;\n }, onCommitDrag: commitSessionDrag, onOpen: (sessionId) => {\n openWorkspaceSession(workspace.workspaceId, sessionId);\n }, onRename: renameSession === undefined ? undefined : openSessionRename, onFork: forkSession, onArchive: archiveSession === undefined ? undefined : archiveWorktreeSession }))] }, record.worktreeId));\n}\n//# sourceMappingURL=ActiveWorktree.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconBranchOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { filterVisibleSessionIds, aggregateSessionStatus, sessionMatchesQuery, } from '../../session/session-view.js';\nimport { isWorktreeExpanded } from '../../view/worktree-expand-state.js';\nimport { executeWorktreeAction, filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { WorktreeGroupRow, WorktreeSessionGroup } from './rows.js';\nimport { bindingIdsFor, includesText, isSessionGroupAutoExpanded, worktreeLifecycleBlockReason, } from '../selectors.js';\nexport function ArchivedWorktree({ record, source, expansion, ordering, props, lifecycle, mutation, menus, read, lifecycleState, drag, session, native, bindings, workspaceMatchesQuery, workspace, }) {\n const { sessions, archivedSessionIds, currentSessionId, expandSnapshot, sessionPresentations } = source;\n const { query, isCurrentSessionReveal, expandedSessionGroups, toggleWorktree, toggleSessionGroup, } = expansion;\n const { orderedSessionIdsByAccount } = ordering;\n const { t, manager, renameSession, forkSession, archiveSession } = props;\n const { branchLabel, branchActions } = lifecycle;\n const { actionPending, setActionError, runMutation } = mutation;\n const { openWorktreeMenuId, setOpenWorktreeMenuId } = menus;\n const { refresh } = read;\n const { setWorktreeCleanDisk, setWorktreeForget } = lifecycleState;\n const { sessionDrag, sessionDropCommitted, setSessionDrag, commitSessionDrag } = drag;\n const { openWorkspaceSession } = session;\n const { openSessionRename, archiveWorktreeSession } = native;\n const worktreeSessionIds = filterVisibleSessionIds(filterArchivedSessionIds(bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId)), archivedSessionIds), sessions);\n const worktreeMatchesQuery = workspaceMatchesQuery ||\n includesText(record.branch, query) ||\n includesText(record.absolutePath, query);\n if (query.length > 0 &&\n !worktreeMatchesQuery &&\n !worktreeSessionIds.some((sessionId) => sessionMatchesQuery(sessionId, sessions, query))) {\n return null;\n }\n const visibleWorktreeSessionIds = worktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const worktreeGroupKey = 'worktree:' + record.worktreeId;\n const orderedWorktreeSessionIds = orderedSessionIdsByAccount.get(worktreeGroupKey) ?? worktreeSessionIds;\n const orderedVisibleWorktreeSessionIds = orderedWorktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const sessionIds = orderedVisibleWorktreeSessionIds.length === visibleWorktreeSessionIds.length\n ? orderedVisibleWorktreeSessionIds\n : visibleWorktreeSessionIds;\n const sessionGroupAutoExpanded = isSessionGroupAutoExpanded(sessionIds, currentSessionId, isCurrentSessionReveal('session-group:' + worktreeGroupKey));\n const sessionGroupExpanded = expandedSessionGroups[worktreeGroupKey] === true || sessionGroupAutoExpanded;\n const state = record.health === 'recovery-needed'\n ? 'error'\n : record.diskCleanup === 'completed'\n ? undefined\n : record.health === 'repair'\n ? 'error'\n : 'warning';\n const stateLabel = record.health === 'recovery-needed'\n ? t('worktree.recovery')\n : record.diskCleanup === 'completed'\n ? t('worktree.cleaned')\n : record.health === 'repair'\n ? t('worktree.repair')\n : record.health === 'branch-drift'\n ? t('worktree.branchDrift')\n : t('worktree.detached');\n const worktreeExpanded = isWorktreeExpanded(expandSnapshot, record.worktreeId) ||\n isCurrentSessionReveal('worktree:' + record.worktreeId);\n return (_jsxs(\"div\", { className: styles.worktreeGroup, \"data-worktree-id\": record.worktreeId, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"worktree\", label: branchLabel(record), worktreeId: record.worktreeId, expanded: worktreeExpanded, groupActivityStatus: aggregateSessionStatus(worktreeSessionIds, sessionPresentations), icon: _jsx(IconBranchOutline16, {}), workspaceTitle: workspace.title, state: state, stateLabel: stateLabel, onToggle: () => {\n toggleWorktree(record.worktreeId);\n }, showDashboardAction: props.openDashboard !== undefined, menu: (() => {\n const activityBlocked = worktreeLifecycleBlockReason(actionPending, record.health);\n const blockedReasonText = activityBlocked === 'recovery' ? t('worktree.recovery') : undefined;\n return {\n onDashboard: props.openDashboard === undefined ? undefined : () => props.openDashboard?.(record),\n ...branchActions(record),\n open: openWorktreeMenuId === record.worktreeId,\n label: record.branch,\n copyPath: record.absolutePath,\n showCreate: false,\n showRemove: false,\n showUnarchive: record.diskCleanup !== 'completed',\n showCleanDisk: record.diskCleanup !== 'completed',\n showForget: true,\n disabled: actionPending,\n unarchiveDisabled: activityBlocked !== undefined || record.health === 'repair',\n cleanDiskDisabled: activityBlocked !== undefined || record.health === 'branch-drift',\n forgetDisabled: activityBlocked !== undefined,\n unarchiveDisabledReason: record.health === 'repair'\n ? t('worktree.unarchiveDisabledRepair')\n : blockedReasonText,\n cleanDiskDisabledReason: record.health === 'branch-drift' ? t('worktree.adoptBeforeClean') : blockedReasonText,\n forgetDisabledReason: blockedReasonText,\n onOpenChange: (open) => {\n setOpenWorktreeMenuId(open ? record.worktreeId : undefined);\n if (open)\n void refresh({\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n reuseInFlight: true,\n invalidateContext: false,\n });\n },\n onUnarchive: () => {\n if (!manager)\n return;\n if (!record.mutationToken) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n },\n });\n return;\n }\n void runMutation(async () => {\n await executeWorktreeAction(manager, {\n type: 'unarchiveWorktree',\n input: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n mutationToken: record.mutationToken,\n },\n });\n }, {\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n });\n },\n onCleanDisk: () => {\n setWorktreeCleanDisk(record);\n setActionError(undefined);\n },\n onForget: () => {\n setWorktreeForget(record);\n setActionError(undefined);\n },\n };\n })() }), worktreeExpanded && (_jsx(WorktreeSessionGroup, { t: t, groupKey: worktreeGroupKey, sessionIds: sessionIds, workspaceId: workspace.workspaceId, currentSessionId: currentSessionId, expanded: sessionGroupExpanded, actionPending: actionPending, sessions: sessions, sessionPresentations: sessionPresentations, dragState: sessionDrag, onToggleExpanded: () => {\n toggleSessionGroup(worktreeGroupKey, sessionGroupAutoExpanded);\n }, onStartDrag: (groupKey, sessionId) => {\n sessionDropCommitted.current = false;\n setSessionDrag({ groupKey, sessionId, over: null });\n }, onHoverDrag: (sessionId, half) => {\n setSessionDrag((current) => current === undefined ? current : { ...current, over: { sessionId, half } });\n }, onClearDrag: () => {\n setSessionDrag(undefined);\n }, onFinishDrag: () => {\n sessionDropCommitted.current = false;\n }, onCommitDrag: commitSessionDrag, onOpen: (sessionId) => {\n openWorkspaceSession(workspace.workspaceId, sessionId);\n }, onRename: renameSession === undefined ? undefined : openSessionRename, onFork: forkSession, onArchive: archiveSession === undefined ? undefined : archiveWorktreeSession }))] }, record.worktreeId));\n}\n//# sourceMappingURL=ArchivedWorktree.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconArchiveOutline20 } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { aggregateSessionStatus } from '../../session/session-view.js';\nimport { filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { ArchivedWorktree } from './ArchivedWorktree.js';\nimport { WorktreeGroupRow } from './rows.js';\nimport { bindingIdsFor } from '../selectors.js';\nexport function ArchivedWorktrees({ expansion, props, source, ordering, lifecycle, mutation, menus, read, lifecycleState, drag, session, native, workspace, archivedWorktrees, bindings, workspaceMatchesQuery, }) {\n const { isCurrentSessionReveal, expandedArchivedWorkspaces, toggleArchivedWorkspace } = expansion;\n const { t } = props;\n const { sessions, archivedSessionIds, sessionPresentations } = source;\n const archivedKey = 'archived:' + workspace.workspaceId;\n const isArchivedAutoExpanded = isCurrentSessionReveal(archivedKey);\n const isArchivedExpanded = expandedArchivedWorkspaces[workspace.workspaceId] === true || isArchivedAutoExpanded;\n return (_jsxs(\"div\", { className: styles.archivedGroup, \"data-archived-group\": true, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"archived-group\", label: `${t('worktree.archivedGroup')} (${archivedWorktrees.length})`, expanded: isArchivedExpanded, groupActivityStatus: aggregateSessionStatus(filterArchivedSessionIds(archivedWorktrees.flatMap((record) => bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId))), archivedSessionIds), sessionPresentations), icon: _jsx(IconArchiveOutline20, { size: 16 }), workspaceTitle: workspace.title, onToggle: () => {\n toggleArchivedWorkspace(workspace.workspaceId);\n } }), isArchivedExpanded && (_jsx(\"div\", { className: styles.treeChildren, children: archivedWorktrees.map((record) => (_jsx(ArchivedWorktree, { record: record, source: source, expansion: expansion, ordering: ordering, props: props, lifecycle: lifecycle, mutation: mutation, menus: menus, read: read, lifecycleState: lifecycleState, drag: drag, session: session, native: native, bindings: bindings, workspaceMatchesQuery: workspaceMatchesQuery, workspace: workspace }, record.worktreeId))) }))] }));\n}\n//# sourceMappingURL=ArchivedWorktrees.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { IconBranchOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { openWorktreeSession } from '../../view/navigation.js';\nimport { filterVisibleSessionIds, aggregateSessionStatus, sessionMatchesQuery, } from '../../session/session-view.js';\nimport { unboundSessionIds, workspaceSessionIds } from '../../view/view-mode.js';\nimport { isMainExpanded, isWorkspaceExpanded } from '../../view/worktree-expand-state.js';\nimport { createNumberedWorktreeName, filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport { createMainWorktreeRecord } from '../../dashboard/dashboard-selection.js';\nimport styles from '../../worktree.css';\nimport { ActiveWorktree } from './ActiveWorktree.js';\nimport { ArchivedWorktrees } from './ArchivedWorktrees.js';\nimport { WorktreeGroupRow, WorktreeSessionGroup, WorktreeWorkspaceRow } from './rows.js';\nimport { includesText, isSessionGroupAutoExpanded, workspaceMatches } from '../selectors.js';\nexport function WorkspaceTree({ props, read, source, expansion, ordering, drag, mutation, menus, registration, native, lifecycle, session, lifecycleState, }) {\n const { t, createMainSession, openSession, renameSession, forkSession, archiveSession } = props;\n const { viewByWorkspace } = read;\n const { expandSnapshot, workspaces, sessions, archivedSessionIds, sessionPresentations, currentSessionId, } = source;\n const { isCurrentSessionReveal, query, expandedSessionGroups, toggleWorkspace, toggleMain, toggleSessionGroup, } = expansion;\n const { orderedSessionIdsByAccount } = ordering;\n const { worktreeDrag, workspaceDrag, workspaceDropCommitted, setWorkspaceDrag, commitWorkspaceDrag, sessionDrag, sessionDropCommitted, setSessionDrag, commitSessionDrag, } = drag;\n const { actionPending } = mutation;\n const { openWorkspaceMenuId, setOpenWorkspaceMenuId, openMainMenuId, setOpenMainMenuId } = menus;\n const { openWorktreeCreator } = registration;\n const { openWorkspaceRename, openWorkspaceDelete, openSessionRename, archiveWorktreeSession } = native;\n const visibleWorkspaces = workspaces.items.filter((workspace) => workspaceMatches(workspace, viewByWorkspace.get(workspace.workspaceId), sessions, query));\n return (_jsx(_Fragment, { children: _jsx(\"div\", { className: styles.workspaceList, children: visibleWorkspaces.length === 0 ? (_jsx(\"p\", { className: styles.empty, children: t('workspace.noMatches') })) : (visibleWorkspaces.map((workspace) => {\n const view = viewByWorkspace.get(workspace.workspaceId);\n const currentBranch = view?.branches.find((branch) => branch.isCurrent)?.name;\n const mainLabel = currentBranch === undefined\n ? t('worktree.main')\n : t('worktree.mainWithBranch', { branch: currentBranch });\n const expanded = isWorkspaceExpanded(expandSnapshot, workspace.workspaceId) ||\n isCurrentSessionReveal('workspace:' + workspace.workspaceId);\n const workspaceMatchesQuery = includesText(workspace.title, query);\n const allWorkspaceSessionIds = filterArchivedSessionIds(workspaceSessionIds(workspaces, workspace.workspaceId, sessions.ids), archivedSessionIds);\n const workspaceActivitySessionIds = filterVisibleSessionIds(allWorkspaceSessionIds, sessions);\n const workspaceGroupActivityStatus = aggregateSessionStatus(workspaceActivitySessionIds, sessionPresentations);\n const bindings = view?.bindings ?? [];\n const boundSessionIds = new Set(bindings.map((binding) => binding.sessionId));\n const mainSessionIds = filterVisibleSessionIds(unboundSessionIds(allWorkspaceSessionIds, [...boundSessionIds]), sessions);\n const mainGroupKey = `main:${workspace.workspaceId}`;\n const orderedMainSessionIds = orderedSessionIdsByAccount.get(mainGroupKey) ?? mainSessionIds;\n const visibleMainSessionIds = mainSessionIds.filter((sessionId) => workspaceMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const orderedVisibleMainSessionIds = orderedMainSessionIds.filter((sessionId) => workspaceMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const mainExpanded = isMainExpanded(expandSnapshot, workspace.workspaceId) ||\n isCurrentSessionReveal('main:' + workspace.workspaceId);\n const sessionIds = orderedVisibleMainSessionIds.length === visibleMainSessionIds.length\n ? orderedVisibleMainSessionIds\n : visibleMainSessionIds;\n const mainSessionGroupAutoExpanded = isSessionGroupAutoExpanded(sessionIds, currentSessionId, isCurrentSessionReveal('session-group:' + mainGroupKey));\n const mainSessionGroupExpanded = expandedSessionGroups[mainGroupKey] === true || mainSessionGroupAutoExpanded;\n const worktrees = view?.worktrees ?? [];\n const activeWorktrees = worktrees.filter((record) => record.status === 'active');\n const archivedWorktrees = worktrees.filter((record) => record.status === 'removed');\n const workspaceWorktreeNames = [\n ...(view?.branches.map((branch) => branch.name) ?? []),\n ...(view?.worktrees.map((worktree) => worktree.branch) ?? []),\n ];\n const sameWorkspaceWorktreeDrag = worktreeDrag?.workspaceId === workspace.workspaceId;\n return (_jsxs(\"section\", { className: styles.workspaceGroup, \"data-workspace-id\": workspace.workspaceId, children: [_jsx(WorktreeWorkspaceRow, { t: t, workspace: workspace, expanded: expanded, groupActivityStatus: workspaceGroupActivityStatus, actionPending: actionPending, menuOpen: openWorkspaceMenuId === workspace.workspaceId, drag: {\n active: workspaceDrag !== undefined,\n marker: workspaceDrag?.over?.workspaceId === workspace.workspaceId\n ? workspaceDrag.over.half\n : null,\n start: () => {\n workspaceDropCommitted.current = false;\n setWorkspaceDrag({ workspaceId: workspace.workspaceId, over: null });\n },\n hover: (half) => {\n setWorkspaceDrag((current) => current === undefined\n ? current\n : {\n ...current,\n over: { workspaceId: workspace.workspaceId, half },\n });\n },\n drop: (half) => {\n if (workspaceDrag === undefined)\n return;\n commitWorkspaceDrag(workspaceDrag, {\n workspaceId: workspace.workspaceId,\n half,\n });\n },\n end: () => {\n if (workspaceDrag?.over !== null && workspaceDrag?.over !== undefined) {\n commitWorkspaceDrag(workspaceDrag, workspaceDrag.over);\n }\n else {\n setWorkspaceDrag(undefined);\n }\n workspaceDropCommitted.current = false;\n },\n }, onToggle: () => {\n toggleWorkspace(workspace.workspaceId);\n }, onCreateWorktree: () => {\n openWorktreeCreator(workspace);\n }, onRename: () => {\n openWorkspaceRename(workspace);\n }, onDelete: () => {\n openWorkspaceDelete(workspace);\n }, onMenuOpenChange: (open) => {\n setOpenWorkspaceMenuId(open ? workspace.workspaceId : undefined);\n } }), expanded && (_jsxs(\"div\", { className: styles.treeChildren, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"main\", label: mainLabel, expanded: mainExpanded, groupActivityStatus: aggregateSessionStatus(mainSessionIds, sessionPresentations), icon: _jsx(IconBranchOutline16, {}), workspaceTitle: workspace.title, onToggle: () => {\n toggleMain(workspace.workspaceId);\n }, showDashboardAction: props.openDashboard !== undefined, menu: {\n onDashboard: props.openDashboard === undefined\n ? undefined\n : () => props.openDashboard?.(createMainWorktreeRecord(workspace, currentBranch)),\n open: openMainMenuId === workspace.workspaceId,\n label: mainLabel,\n copyPath: workspace.path,\n showCreate: currentBranch !== undefined,\n showRemove: false,\n disabled: actionPending,\n onOpenChange: (open) => {\n setOpenMainMenuId(open ? workspace.workspaceId : undefined);\n },\n onCreateWorktree: currentBranch === undefined\n ? undefined\n : () => {\n openWorktreeCreator(workspace, {\n baseBranch: currentBranch,\n newBranch: createNumberedWorktreeName(currentBranch, workspaceWorktreeNames),\n });\n },\n }, onCreateSession: createMainSession === undefined\n ? undefined\n : () => {\n createMainSession(workspace.workspaceId);\n } }), mainExpanded && (_jsx(WorktreeSessionGroup, { t: t, groupKey: mainGroupKey, sessionIds: sessionIds, workspaceId: workspace.workspaceId, currentSessionId: currentSessionId, expanded: mainSessionGroupExpanded, actionPending: actionPending, sessions: sessions, sessionPresentations: sessionPresentations, dragState: sessionDrag, onToggleExpanded: () => {\n toggleSessionGroup(mainGroupKey, mainSessionGroupAutoExpanded);\n }, onStartDrag: (groupKey, sessionId) => {\n sessionDropCommitted.current = false;\n setSessionDrag({ groupKey, sessionId, over: null });\n }, onHoverDrag: (sessionId, half) => {\n setSessionDrag((current) => current === undefined\n ? current\n : { ...current, over: { sessionId, half } });\n }, onClearDrag: () => {\n setSessionDrag(undefined);\n }, onFinishDrag: () => {\n sessionDropCommitted.current = false;\n }, onCommitDrag: commitSessionDrag, onOpen: (sessionId) => {\n openWorktreeSession({ open: openSession }, sessionId);\n }, onRename: renameSession === undefined ? undefined : openSessionRename, onFork: forkSession, onArchive: archiveSession === undefined ? undefined : archiveWorktreeSession })), activeWorktrees.length === 0 && archivedWorktrees.length === 0 && (_jsx(\"p\", { className: styles.emptyNested, children: t('worktree.noWorktrees') })), activeWorktrees.map((record) => (_jsx(ActiveWorktree, { record: record, source: source, expansion: expansion, ordering: ordering, props: props, lifecycle: lifecycle, session: session, menus: menus, mutation: mutation, read: read, registration: registration, lifecycleState: lifecycleState, drag: drag, native: native, bindings: bindings, workspaceMatchesQuery: workspaceMatchesQuery, workspace: workspace, workspaceWorktreeNames: workspaceWorktreeNames, sameWorkspaceWorktreeDrag: sameWorkspaceWorktreeDrag, activeWorktrees: activeWorktrees }, record.worktreeId))), archivedWorktrees.length > 0 && (_jsx(ArchivedWorktrees, { expansion: expansion, props: props, source: source, ordering: ordering, lifecycle: lifecycle, mutation: mutation, menus: menus, read: read, lifecycleState: lifecycleState, drag: drag, session: session, native: native, workspace: workspace, archivedWorktrees: archivedWorktrees, bindings: bindings, workspaceMatchesQuery: workspaceMatchesQuery }))] }))] }, workspace.workspaceId));\n })) }) }));\n}\n//# sourceMappingURL=WorkspaceTree.js.map","/** Resolved notices leave the queue; unchanged snapshots never announce twice. */\nexport function reconcileNotifications(state, notices) {\n const unique = [...new Map(notices.map((notice) => [notice.key, notice])).values()];\n const active = new Set(unique.map((notice) => notice.key));\n const seen = new Set(state.seen);\n const pending = state.pending.filter((notice) => active.has(notice.key));\n for (const notice of unique) {\n if (!seen.has(notice.key))\n pending.push(notice);\n }\n const nextSeen = [...active];\n if (nextSeen.length === state.seen.length &&\n nextSeen.every((key, index) => key === state.seen[index]) &&\n pending.length === state.pending.length &&\n pending.every((notice, index) => notice === state.pending[index]))\n return state;\n return { seen: nextSeen, pending };\n}\n//# sourceMappingURL=notification-queue.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Toast } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useCallback, useEffect, useState } from 'react';\nimport { reconcileNotifications, } from '../notification-queue.js';\n/** One native toast at a time; recovery controls remain available after it fades. */\nexport function NotificationToasts({ notices, detailsLabel, }) {\n const [queue, setQueue] = useState({ seen: [], pending: [] });\n useEffect(() => {\n setQueue((current) => reconcileNotifications(current, notices));\n }, [notices]);\n const current = queue.pending[0];\n const key = current?.key;\n const onDone = useCallback(() => {\n setQueue((state) => ({\n ...state,\n pending: state.pending.filter((notice) => notice.key !== key),\n }));\n }, [key]);\n if (current === undefined)\n return null;\n const text = current.text.length > 240 ? current.text.slice(0, 240) + '…' : current.text;\n return (_jsx(Toast, { text: text + ' · ' + detailsLabel, holdMs: 6000, onDone: onDone }, current.key));\n}\n//# sourceMappingURL=NotificationToasts.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { formatWorktreePermissionNotice, formatWorktreeViewError, } from '../../view/worktree-error-copy.js';\nimport styles from '../../worktree.css';\nimport { forkRecoveryError } from '../shared.js';\nimport { WorkspaceTree } from './WorkspaceTree.js';\nimport { NotificationToasts } from './NotificationToasts.js';\nexport function SurfaceContent({ source, props, lifecycle, mutation, session, read, expansion, ordering, drag, menus, registration, native, lifecycleState, }) {\n const { permissionNoticeSnapshot, forkRecoverySnapshot } = source;\n const { t, retryForkSession, openSession } = props;\n const { permissionRetryTarget, retryCleanupPermissions, recoveryAction } = lifecycle;\n const { actionPending, actionError, setActionError } = mutation;\n const { forkRetryKey, retryForkBinding, pendingSessionBinding, pendingSessionArchived, retrySessionBinding, setPendingSessionBinding, } = session;\n const { refresh, readState } = read;\n const notices = [];\n const addNotice = (scope, text) => {\n notices.push({ key: JSON.stringify([scope, text]), text });\n };\n if (permissionNoticeSnapshot !== undefined) {\n addNotice('permission:' +\n permissionNoticeSnapshot.workspaceId +\n ':' +\n permissionNoticeSnapshot.worktreeId, formatWorktreePermissionNotice(permissionNoticeSnapshot.result, t));\n }\n for (const recovery of forkRecoverySnapshot.pending) {\n addNotice('fork:' + recovery.key, formatWorktreeViewError(forkRecoveryError(recovery), t));\n }\n if (actionError !== undefined) {\n addNotice('action:' + JSON.stringify(actionError.details), formatWorktreeViewError(actionError, t));\n }\n if (readState.targetError !== undefined) {\n addNotice('target:' + JSON.stringify(readState.targetError.workspaceIds), formatWorktreeViewError(readState.targetError.error, t));\n }\n if (readState.status === 'error' && readState.error !== undefined) {\n addNotice('read', formatWorktreeViewError(readState.error, t));\n }\n return (_jsxs(\"div\", { ref: expansion.contentRef, className: styles.content, tabIndex: 0, children: [_jsx(NotificationToasts, { notices: notices, detailsLabel: t('notice.details') }), notices.length > 0 && (_jsxs(\"details\", { className: styles.notificationDetails, children: [_jsxs(\"summary\", { children: [t('notice.details'), \" (\", notices.length, \")\"] }), permissionNoticeSnapshot !== undefined && (_jsxs(\"div\", { className: styles.notice, role: \"status\", \"data-worktree-permission-notice\": true, children: [_jsx(\"p\", { className: styles.message, children: formatWorktreePermissionNotice(permissionNoticeSnapshot.result, t) }), permissionRetryTarget !== undefined && (_jsx(\"button\", { type: \"button\", className: styles.retryButton, disabled: actionPending, onClick: retryCleanupPermissions, children: t('action.retry') }))] })), forkRecoverySnapshot.pending.map((recovery) => {\n const recoveryViewError = forkRecoveryError(recovery);\n return (_jsxs(\"div\", { className: styles.error, role: \"alert\", \"data-fork-recovery\": recovery.key, children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(recoveryViewError, t) }), _jsxs(\"div\", { className: styles.recoveryActions, children: [retryForkSession !== undefined && recoveryViewError.retryable && (_jsx(\"button\", { type: \"button\", className: styles.actionButton, disabled: forkRetryKey !== undefined, onClick: () => {\n void retryForkBinding(recovery.key);\n }, children: t('action.retryBinding') })), _jsx(\"button\", { type: \"button\", className: styles.actionButton, disabled: forkRetryKey !== undefined, onClick: () => {\n openSession(recovery.childSessionId);\n }, children: t('action.openCreatedSession') })] })] }, recovery.key));\n }), actionError !== undefined && (_jsxs(\"div\", { className: styles.error, role: \"alert\", \"data-worktree-error\": true, children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(actionError, t) }), recoveryAction(actionError), pendingSessionBinding !== undefined && (_jsxs(\"div\", { className: styles.recoveryActions, children: [_jsx(\"button\", { type: \"button\", className: styles.actionButton, disabled: actionPending || pendingSessionArchived, onClick: () => {\n void retrySessionBinding();\n }, children: t('action.retryBinding') }), !pendingSessionBinding.permissionRequired && (_jsx(\"button\", { type: \"button\", className: styles.actionButton, disabled: actionPending, onClick: () => {\n const sessionId = pendingSessionBinding.sessionId;\n setPendingSessionBinding(undefined);\n setActionError(undefined);\n openSession(sessionId);\n }, children: t('action.openCreatedSession') }))] })), actionError.retryable && (_jsx(\"button\", { type: \"button\", className: styles.retryButton, onClick: () => {\n setActionError(undefined);\n void refresh({ scope: { kind: 'global' } });\n }, children: t('action.retry') }))] })), readState.targetError !== undefined && (_jsxs(\"div\", { className: styles.error, role: \"alert\", \"data-worktree-target-error\": true, children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(readState.targetError.error, t) }), recoveryAction(readState.targetError.error), _jsx(\"button\", { type: \"button\", className: styles.retryButton, onClick: () => {\n void refresh({\n scope: {\n kind: 'workspaces',\n workspaceIds: readState.targetError.workspaceIds,\n },\n preserveCurrent: true,\n });\n }, children: t('action.retry') })] })), readState.status === 'error' && readState.error !== undefined ? (_jsxs(\"div\", { className: styles.error, role: \"alert\", \"data-worktree-error\": true, children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(readState.error, t) }), recoveryAction(readState.error), _jsx(\"button\", { type: \"button\", className: styles.retryButton, onClick: () => {\n void refresh({ scope: { kind: 'global' } });\n }, children: t('action.retry') })] })) : null] })), readState.status === 'loading' && _jsx(\"p\", { className: styles.message, children: t('status.loading') }), readState.status === 'ready' ? (_jsx(WorkspaceTree, { props: props, read: read, source: source, expansion: expansion, ordering: ordering, drag: drag, mutation: mutation, menus: menus, registration: registration, native: native, lifecycle: lifecycle, session: session, lifecycleState: lifecycleState })) : null] }));\n}\n//# sourceMappingURL=SurfaceContent.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { IconCloseFill14, IconCloseOutline16, IconProjectAddOutline16, IconSearchOutline16, Tooltip, } from '@deepseek-ai/dsh-client-ui-primitives';\nimport styles from '../../worktree.css';\nimport { cx, IconCollapseAll16 } from '../shared.js';\nexport function SurfaceHeader({ expansion, props, source, read, mutation }) {\n const { searchExpanded, searchRoot, setSearchExpanded, searchInput, searchQuery, setSearchQuery, setExpandedArchivedWorkspaces, setExpandedSessionGroups, setCurrentSessionReveal, currentSessionLocation, } = expansion;\n const { t, expandState, createWorkspace, actions } = props;\n const { workspaceIds } = source;\n const { readState } = read;\n const { runMutation } = mutation;\n const currentWorkspaceId = currentSessionLocation?.workspaceId;\n const currentWorktreeId = currentSessionLocation?.kind === 'worktree' ? currentSessionLocation.worktreeId : undefined;\n const targetWorkspaceIds = workspaceIds.filter((id) => id !== currentWorkspaceId);\n const worktreeIds = readState.views\n .flatMap((view) => view.worktrees.map((record) => record.worktreeId))\n .filter((worktreeId) => worktreeId !== currentWorktreeId);\n return (_jsx(_Fragment, { children: _jsxs(\"header\", { className: styles.header, children: [_jsx(\"span\", { className: cx(styles.title, searchExpanded && styles.titleHidden), children: t('worktree.title') }), _jsx(\"div\", { className: cx(styles.searchSlot, searchExpanded && styles.searchSlotExpanded), children: _jsxs(\"div\", { ref: searchRoot, className: cx(styles.search, searchExpanded && styles.searchExpanded), onClick: () => {\n if (!searchExpanded) {\n setSearchExpanded(true);\n searchInput.current?.focus();\n }\n }, children: [_jsx(Tooltip, { label: t('workspace.search'), side: \"bottom\", delayMs: 500, disabled: searchExpanded, children: _jsx(\"button\", { type: \"button\", className: styles.searchButton, \"aria-label\": t('workspace.search'), \"aria-expanded\": searchExpanded, onClick: () => {\n setSearchExpanded(true);\n searchInput.current?.focus();\n }, children: _jsx(IconSearchOutline16, { size: searchExpanded ? 12 : 14 }) }) }), _jsx(\"input\", { ref: searchInput, className: styles.searchInput, type: \"text\", \"aria-label\": t('workspace.search'), placeholder: t('workspace.search'), value: searchQuery, tabIndex: searchExpanded ? 0 : -1, onChange: (event) => {\n setSearchQuery(event.currentTarget.value);\n }, onKeyDown: (event) => {\n if (event.key === 'Escape') {\n setSearchQuery('');\n setSearchExpanded(false);\n }\n } }), searchExpanded && (_jsx(\"button\", { type: \"button\", className: styles.clearButton, \"aria-label\": t('search.clear'), onClick: (event) => {\n event.stopPropagation();\n setSearchQuery('');\n setSearchExpanded(false);\n }, children: _jsx(IconCloseFill14, {}) }))] }) }), _jsxs(\"div\", { className: cx(styles.headerActions, searchExpanded && styles.headerActionsHidden), children: [_jsx(Tooltip, { label: t('workspace.collapseAll'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"aria-label\": t('workspace.collapseAll'), onClick: () => {\n // Keep the current Session's workspace and worktree expanded in state,\n // while collapsing all other unrelated workspaces and worktrees, and collapsing all Main groups.\n if (currentSessionLocation === undefined)\n setCurrentSessionReveal(undefined);\n expandState.actions.collapseAll(targetWorkspaceIds, worktreeIds, workspaceIds);\n setExpandedArchivedWorkspaces({});\n setExpandedSessionGroups({});\n }, children: _jsx(IconCollapseAll16, {}) }) }), _jsx(Tooltip, { label: t('workspace.add'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"aria-label\": t('workspace.add'), onClick: () => {\n if (createWorkspace !== undefined)\n void runMutation(createWorkspace);\n }, children: _jsx(IconProjectAddOutline16, {}) }) }), _jsx(Tooltip, { label: t('mode.exit'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.closeButton, \"aria-label\": t('mode.exit'), onClick: () => {\n actions.setViewMode('workspace-session');\n }, children: _jsx(IconCloseOutline16, {}) }) })] })] }) }));\n}\n//# sourceMappingURL=SurfaceHeader.js.map","/** Browser-only persistence key; this state never crosses the DSH or sidecar boundary. */\nexport const WORKTREE_SESSION_ORDER_STORAGE_KEY = 'clutch-dsh-worktree.session-order';\nfunction emptyState() {\n return { accounts: {} };\n}\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction isValidTimestamp(value) {\n return typeof value === 'number' && Number.isFinite(value);\n}\nfunction normalizeIds(value) {\n if (!Array.isArray(value))\n return [];\n const seen = new Set();\n const ids = [];\n for (const id of value) {\n if (typeof id !== 'string' || id.length === 0 || seen.has(id))\n continue;\n seen.add(id);\n ids.push(id);\n }\n return ids;\n}\nfunction normalizeAccount(value) {\n if (!isRecord(value))\n return undefined;\n const order = normalizeIds(value.order);\n const allowed = new Set(order);\n const observedUpdatedAt = {};\n if (isRecord(value.observedUpdatedAt)) {\n for (const [id, timestamp] of Object.entries(value.observedUpdatedAt)) {\n if (allowed.has(id) && isValidTimestamp(timestamp))\n observedUpdatedAt[id] = timestamp;\n }\n }\n return { order, observedUpdatedAt };\n}\n/** Normalize persisted state without trusting any browser-local JSON shape. */\nexport function normalizeWorktreeSessionOrderState(value) {\n if (!isRecord(value) || !isRecord(value.accounts))\n return emptyState();\n const accounts = {};\n for (const [accountKey, account] of Object.entries(value.accounts)) {\n if (accountKey.length === 0)\n continue;\n const normalized = normalizeAccount(account);\n if (normalized !== undefined)\n accounts[accountKey] = normalized;\n }\n return { accounts };\n}\nfunction validIds(ids) {\n return normalizeIds([...ids]);\n}\nfunction sameRecord(left, right) {\n if (left === undefined)\n return false;\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n if (leftKeys.length !== rightKeys.length)\n return false;\n return rightKeys.every((key) => left[key] === right[key]);\n}\nfunction sameAccount(left, right) {\n return (left !== undefined &&\n left.order.length === right.order.length &&\n left.order.every((id, index) => id === right.order[index]) &&\n sameRecord(left.observedUpdatedAt, right.observedUpdatedAt));\n}\nfunction orderByUpdatedAt(ids, updatedAtById) {\n return ids\n .map((id, index) => ({ id, index, timestamp: updatedAtById[id] }))\n .sort((left, right) => {\n const leftValid = isValidTimestamp(left.timestamp);\n const rightValid = isValidTimestamp(right.timestamp);\n if (leftValid && rightValid) {\n const difference = Number(right.timestamp) - Number(left.timestamp);\n if (difference !== 0)\n return difference;\n }\n if (leftValid !== rightValid)\n return leftValid ? -1 : 1;\n return left.index - right.index;\n })\n .map(({ id }) => id);\n}\n/** Native-style activity order transition driven by the latest Session timestamp. */\nexport function nextSessionOrderAccount(input) {\n const baseIds = validIds(input.baseIds);\n const previous = input.previous;\n if (previous === undefined) {\n const observedUpdatedAt = {};\n for (const id of baseIds) {\n const timestamp = input.updatedAtById[id];\n if (isValidTimestamp(timestamp))\n observedUpdatedAt[id] = timestamp;\n }\n return { order: orderByUpdatedAt(baseIds, input.updatedAtById), observedUpdatedAt };\n }\n const available = new Set(baseIds);\n const order = [];\n const seen = new Set();\n for (const id of previous.order) {\n if (available.has(id) && !seen.has(id)) {\n seen.add(id);\n order.push(id);\n }\n }\n for (const id of baseIds) {\n if (!seen.has(id)) {\n seen.add(id);\n order.push(id);\n }\n }\n const observedUpdatedAt = {};\n const previousIds = new Set(previous.order);\n const newlyObserved = [];\n const promoted = [];\n for (const [index, id] of order.entries()) {\n if (!previousIds.has(id))\n newlyObserved.push(id);\n const previousTimestamp = previous.observedUpdatedAt[id];\n const timestamp = input.updatedAtById[id];\n if (isValidTimestamp(previousTimestamp))\n observedUpdatedAt[id] = previousTimestamp;\n if (isValidTimestamp(timestamp)) {\n if (!isValidTimestamp(previousTimestamp) || timestamp > previousTimestamp) {\n if (isValidTimestamp(previousTimestamp)) {\n promoted.push({ id, timestamp, index });\n }\n observedUpdatedAt[id] = Math.max(observedUpdatedAt[id] ?? timestamp, timestamp);\n }\n }\n }\n const orderedNewlyObserved = orderByUpdatedAt(newlyObserved, input.updatedAtById);\n promoted.sort((left, right) => right.timestamp - left.timestamp || left.index - right.index);\n const promotedIds = new Set([\n ...orderedNewlyObserved,\n ...promoted.map(({ id }) => id),\n ]);\n return {\n order: [\n ...orderedNewlyObserved,\n ...promoted.map(({ id }) => id),\n ...order.filter((id) => !promotedIds.has(id)),\n ],\n observedUpdatedAt,\n };\n}\n/** Apply a successful manual drag without dropping IDs hidden by search. */\nexport function reorderSessionIds(order, sessionId, overSessionId, half) {\n const next = order.filter((id) => id !== sessionId);\n const targetIndex = next.indexOf(overSessionId);\n if (targetIndex === -1)\n return [...order];\n next.splice(half === 'before' ? targetIndex : targetIndex + 1, 0, sessionId);\n return next;\n}\nfunction cloneAccount(account) {\n return {\n order: [...account.order],\n observedUpdatedAt: { ...account.observedUpdatedAt },\n };\n}\n/** Create one apply-scoped, browser-local Session ordering store. */\nexport function createWorktreeSessionOrderStore(snapshotStoreFactory) {\n let store;\n try {\n store = snapshotStoreFactory(emptyState(), {\n persist: { name: WORKTREE_SESSION_ORDER_STORAGE_KEY },\n });\n }\n catch {\n store = snapshotStoreFactory(emptyState());\n }\n store.set(normalizeWorktreeSessionOrderState(store.getSnapshot()));\n let disposed = false;\n const actions = {\n reconcile: (accountKey, baseIds, updatedAtById) => {\n if (disposed || accountKey.length === 0)\n return;\n store.update((draft) => {\n const next = nextSessionOrderAccount({\n baseIds,\n updatedAtById,\n previous: draft.accounts[accountKey],\n });\n if (sameAccount(draft.accounts[accountKey], next))\n return;\n draft.accounts[accountKey] = cloneAccount(next);\n });\n },\n setOrder: (accountKey, order, updatedAtById) => {\n if (disposed || accountKey.length === 0)\n return;\n store.update((draft) => {\n const current = draft.accounts[accountKey] ?? {\n order: [],\n observedUpdatedAt: {},\n };\n const observedUpdatedAt = { ...current.observedUpdatedAt };\n if (updatedAtById !== undefined) {\n for (const [id, timestamp] of Object.entries(updatedAtById)) {\n if (isValidTimestamp(timestamp)) {\n observedUpdatedAt[id] = Math.max(observedUpdatedAt[id] ?? timestamp, timestamp);\n }\n }\n }\n const next = {\n order: validIds(order),\n observedUpdatedAt,\n };\n if (sameAccount(current, next))\n return;\n draft.accounts[accountKey] = next;\n });\n },\n retain: (accountKeys) => {\n if (disposed)\n return;\n const allowed = new Set(accountKeys);\n if (allowed.size === 0)\n return;\n store.update((draft) => {\n for (const accountKey of Object.keys(draft.accounts)) {\n if (!allowed.has(accountKey))\n delete draft.accounts[accountKey];\n }\n });\n },\n };\n return Object.assign(store, {\n actions,\n dispose: () => {\n disposed = true;\n },\n });\n}\n//# sourceMappingURL=worktree-session-order.js.map","import { useRef, useState } from 'react';\nimport { reorderSessionIds } from '../../session/worktree-session-order.js';\nimport { resolveWorktreeMove, toRetryableWorktreeOrderError, toWorktreeViewError, } from '../../view/worktree-view.js';\nimport { updatedAtById } from '../shared.js';\n/**\n * Persist one visual Session move without crossing the Worktree membership boundary.\n * Worktree Sessions are plugin-local projections, while Main Sessions remain native DSH members.\n */\nexport async function commitSessionOrder(input) {\n if (input.groupKey.startsWith('worktree:')) {\n input.setOrder(input.groupKey, input.nextOrder, input.updatedAtById);\n return;\n }\n if (input.insertSessionBefore === undefined) {\n throw new Error('Native Session ordering is unavailable');\n }\n await input.insertSessionBefore(input.workspaceId, input.sessionId, input.beforeSessionId);\n input.setOrder(input.groupKey, input.nextOrder, input.updatedAtById);\n}\n/** Resolve a visual drop against the full account order, retaining filtered IDs. */\nexport function resolveSessionDragOrder(input) {\n const targetIndex = input.visibleSessionIds.indexOf(input.over.sessionId);\n const sourceIndex = input.visibleSessionIds.indexOf(input.sessionId);\n if (targetIndex === -1 || sourceIndex === -1)\n return undefined;\n const currentOrder = [...input.currentOrder];\n const knownIds = new Set(currentOrder);\n for (const id of input.visibleSessionIds) {\n if (!knownIds.has(id)) {\n knownIds.add(id);\n currentOrder.push(id);\n }\n }\n const nextOrder = reorderSessionIds(currentOrder, input.sessionId, input.over.sessionId, input.over.half);\n if (nextOrder.length === currentOrder.length &&\n nextOrder.every((id, index) => id === currentOrder[index])) {\n return undefined;\n }\n const nextIndex = nextOrder.indexOf(input.sessionId);\n if (nextIndex === -1)\n return undefined;\n return {\n beforeSessionId: nextOrder[nextIndex + 1],\n nextOrder,\n };\n}\nexport function useDragActions({ source, orderedSessionIdsByAccount, props, mutation, read, }) {\n const { workspaces, sessionOrderSnapshot } = source;\n const { insertWorkspaceBefore, insertSessionBefore, sessionOrder, insertWorktreeBefore } = props;\n const { setActionError } = mutation;\n const { refresh } = read;\n const [workspaceDrag, setWorkspaceDrag] = useState();\n const workspaceDropCommitted = useRef(false);\n const [sessionDrag, setSessionDrag] = useState();\n const sessionDropCommitted = useRef(false);\n const [worktreeDrag, setWorktreeDrag] = useState();\n const worktreeDropCommitted = useRef(false);\n const commitWorkspaceDrag = (activeDrag, over) => {\n if (workspaceDropCommitted.current)\n return;\n workspaceDropCommitted.current = true;\n setWorkspaceDrag(undefined);\n const rows = workspaces.items;\n const targetIndex = rows.findIndex((workspace) => workspace.workspaceId === over.workspaceId);\n const sourceIndex = rows.findIndex((workspace) => workspace.workspaceId === activeDrag.workspaceId);\n if (targetIndex === -1 || sourceIndex === -1)\n return;\n const beforeWorkspaceId = over.half === 'before' ? over.workspaceId : rows[targetIndex + 1]?.workspaceId;\n const anchorIndex = beforeWorkspaceId === undefined\n ? rows.length\n : rows.findIndex((workspace) => workspace.workspaceId === beforeWorkspaceId);\n if (beforeWorkspaceId === activeDrag.workspaceId ||\n anchorIndex === sourceIndex ||\n anchorIndex === sourceIndex + 1) {\n return;\n }\n if (insertWorkspaceBefore === undefined) {\n setActionError({\n code: 'WORKSPACE_ORDER_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionError(undefined);\n void insertWorkspaceBefore(activeDrag.workspaceId, beforeWorkspaceId).catch((error) => {\n setActionError(toWorktreeViewError(error));\n });\n };\n const commitSessionDrag = (activeDrag, over, sessionIds, workspaceId) => {\n if (sessionDropCommitted.current)\n return;\n sessionDropCommitted.current = true;\n setSessionDrag(undefined);\n const currentOrder = orderedSessionIdsByAccount.get(activeDrag.groupKey) ??\n sessionOrderSnapshot.accounts[activeDrag.groupKey]?.order ??\n sessionIds;\n const move = resolveSessionDragOrder({\n visibleSessionIds: sessionIds,\n currentOrder,\n sessionId: activeDrag.sessionId,\n over,\n });\n if (move === undefined)\n return;\n const isWorktreeSession = activeDrag.groupKey.startsWith('worktree:');\n if (!isWorktreeSession && insertSessionBefore === undefined) {\n setActionError({\n code: 'SESSION_ORDER_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionError(undefined);\n void commitSessionOrder({\n groupKey: activeDrag.groupKey,\n workspaceId,\n sessionId: activeDrag.sessionId,\n beforeSessionId: move.beforeSessionId,\n nextOrder: move.nextOrder,\n insertSessionBefore,\n setOrder: sessionOrder.actions.setOrder,\n updatedAtById: updatedAtById(sessionIds, source.sessions),\n }).catch((error) => {\n setActionError(toWorktreeViewError(error));\n });\n };\n const commitWorktreeDrag = (activeDrag, over, worktreeIds, workspaceId) => {\n if (worktreeDropCommitted.current)\n return;\n worktreeDropCommitted.current = true;\n setWorktreeDrag(undefined);\n if (activeDrag.workspaceId !== workspaceId)\n return;\n const move = resolveWorktreeMove(worktreeIds, activeDrag.worktreeId, over.worktreeId, over.half);\n if (move === undefined)\n return;\n if (insertWorktreeBefore === undefined) {\n setActionError({\n code: 'WORKTREE_ORDER_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionError(undefined);\n void insertWorktreeBefore(workspaceId, activeDrag.worktreeId, move.beforeWorktreeId)\n .then(() => refresh({\n scope: { kind: 'workspace', workspaceId },\n preserveCurrent: true,\n invalidateContext: false,\n }))\n .catch((error) => {\n setActionError(toRetryableWorktreeOrderError(error));\n });\n };\n return {\n workspaceDrag,\n setWorkspaceDrag,\n workspaceDropCommitted,\n sessionDrag,\n setSessionDrag,\n sessionDropCommitted,\n worktreeDrag,\n setWorktreeDrag,\n worktreeDropCommitted,\n commitWorkspaceDrag,\n commitSessionDrag,\n commitWorktreeDrag,\n };\n}\n//# sourceMappingURL=useDragActions.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { mergeWorktreeView, toWorktreeViewError, } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nexport function useLifecycleActions({ read, lifecycleState, source, props, mutation }) {\n const { viewByWorkspace, readStateRef, refresh, setReadState } = read;\n const { worktreeCleanDisk, worktreeForget, permissionRetryPending, cleanupGuard, setWorktreeBranchAdoption, worktreeBranchAdoption, branchAdoptionGuard, } = lifecycleState;\n const { mode, permissionNoticeSnapshot, workspaceIdsRef } = source;\n const { permission, permissionNotice, onPermissionNotice, manager, t, viewReader } = props;\n const { actionPending, setActionPending, runMutation, setActionError } = mutation;\n const latestLifecycleTarget = (target) => target === undefined\n ? undefined\n : viewByWorkspace\n .get(target.workspaceId)\n ?.worktrees.find((record) => record.worktreeId === target.worktreeId);\n const cleanDiskTarget = latestLifecycleTarget(worktreeCleanDisk);\n const forgetTarget = latestLifecycleTarget(worktreeForget);\n const permissionRetryTarget = mode === 'worktree' &&\n permissionNoticeSnapshot?.result.retryable === true &&\n permission?.normalizeDetachedWorktreePermissions !== undefined\n ? viewByWorkspace\n .get(permissionNoticeSnapshot.workspaceId)\n ?.worktrees.find((record) => record.worktreeId === permissionNoticeSnapshot.worktreeId &&\n record.diskCleanup === 'completed')\n : undefined;\n const retryCleanupPermissions = async () => {\n if (!permissionRetryTarget || !permission || actionPending || permissionRetryPending.current)\n return;\n const target = {\n workspaceId: permissionRetryTarget.workspaceId,\n worktreeId: permissionRetryTarget.worktreeId,\n };\n const notice = permissionNoticeSnapshot;\n const generation = cleanupGuard.current.begin();\n const isCurrent = () => cleanupGuard.current.isCurrent(generation) &&\n permissionNotice?.getSnapshot() === notice &&\n readStateRef.current.views.some((view) => view.workspaceId === target.workspaceId &&\n view.worktrees.some((record) => record.worktreeId === target.worktreeId && record.diskCleanup === 'completed'));\n if (!isCurrent())\n return;\n permissionRetryPending.current = true;\n setActionPending(true);\n try {\n const result = await permission.normalizeDetachedWorktreePermissions(target);\n if (isCurrent())\n onPermissionNotice?.(target, result);\n }\n catch {\n if (isCurrent())\n onPermissionNotice?.(target, { status: 'unverified', retryable: true });\n }\n finally {\n if (cleanupGuard.current.isCurrent(generation)) {\n permissionRetryPending.current = false;\n setActionPending(false);\n }\n }\n };\n const recoveryAction = (error) => {\n const workspaceId = error?.details?.workspaceId;\n if (!manager || error?.code !== 'WORKTREE_RECOVERY_REQUIRED' || typeof workspaceId !== 'string')\n return null;\n return (_jsx(\"button\", { type: \"button\", className: styles.retryButton, disabled: actionPending, onClick: () => {\n void runMutation(() => manager.recoverWorktrees({ workspaceId }), {\n scope: { kind: 'workspace', workspaceId },\n preserveCurrent: true,\n });\n }, children: t('worktree.retryRecovery') }));\n };\n const branchActions = (record) => ({\n onAdoptBranch: record.health === 'branch-drift' && typeof record.currentBranch === 'string'\n ? () => {\n setWorktreeBranchAdoption(record);\n setActionError(undefined);\n }\n : undefined,\n onRecover: record.health === 'recovery-needed'\n ? () => {\n if (!manager)\n return;\n void runMutation(() => manager.recoverWorktrees({ workspaceId: record.workspaceId }), {\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n });\n }\n : undefined,\n });\n const refreshBranchAdoption = async () => {\n const target = worktreeBranchAdoption;\n if (!manager || !target)\n return;\n const generation = branchAdoptionGuard.current.begin();\n const isCurrent = () => branchAdoptionGuard.current.isCurrent(generation);\n setActionPending(true);\n try {\n await refresh({\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n if (!isCurrent())\n return;\n const view = await viewReader.read(target.workspaceId);\n if (!isCurrent())\n return;\n if (!workspaceIdsRef.current.includes(target.workspaceId)) {\n setWorktreeBranchAdoption(undefined);\n setActionError(undefined);\n return;\n }\n const latest = view.worktrees.find((record) => record.worktreeId === target.worktreeId);\n setReadState((current) => ({ ...current, views: mergeWorktreeView(current.views, view) }));\n setWorktreeBranchAdoption(latest?.health === 'branch-drift' && typeof latest.currentBranch === 'string'\n ? latest\n : undefined);\n setActionError(undefined);\n }\n catch (error) {\n if (isCurrent())\n setActionError(toWorktreeViewError(error));\n }\n finally {\n if (isCurrent())\n setActionPending(false);\n }\n };\n const branchLabel = (record) => record.health === 'branch-drift'\n ? `${record.branch} → ${record.currentBranch ?? t('worktree.detachedHead')}`\n : record.branch;\n return {\n latestLifecycleTarget,\n cleanDiskTarget,\n forgetTarget,\n permissionRetryTarget,\n retryCleanupPermissions,\n recoveryAction,\n branchActions,\n refreshBranchAdoption,\n branchLabel,\n };\n}\n//# sourceMappingURL=useLifecycleActions.js.map","import { useEffect, useRef, useState } from 'react';\nimport { createWorktreeRefreshGuard } from '../../view/worktree-view.js';\nexport function useLifecycleState({ props, source, mutation }) {\n const { manager } = props;\n const { mode } = source;\n const { setActionPending } = mutation;\n const [worktreeBranchAdoption, setWorktreeBranchAdoption] = useState();\n const [worktreeRemoval, setWorktreeRemoval] = useState();\n const [worktreeCleanDisk, setWorktreeCleanDisk] = useState();\n const [worktreeForget, setWorktreeForget] = useState();\n const cleanupGuard = useRef(createWorktreeRefreshGuard());\n const branchAdoptionGuard = useRef(createWorktreeRefreshGuard());\n useEffect(() => {\n const guard = branchAdoptionGuard.current;\n setWorktreeBranchAdoption(undefined);\n return () => guard.invalidate();\n }, [manager, mode]);\n const permissionRetryPending = useRef(false);\n useEffect(() => {\n const guard = cleanupGuard.current;\n permissionRetryPending.current = false;\n setActionPending(false);\n return () => guard.invalidate();\n }, [manager, mode]);\n return {\n worktreeBranchAdoption,\n setWorktreeBranchAdoption,\n worktreeRemoval,\n setWorktreeRemoval,\n worktreeCleanDisk,\n setWorktreeCleanDisk,\n worktreeForget,\n setWorktreeForget,\n cleanupGuard,\n branchAdoptionGuard,\n permissionRetryPending,\n };\n}\n//# sourceMappingURL=useLifecycleState.js.map","import { useState } from 'react';\nimport { toNativeWorktreeViewError } from '../shared.js';\nexport function useNativeActions({ source, props, mutation }) {\n const { workspaces } = source;\n const { renameWorkspace, deleteWorkspace, renameSession, archiveSession } = props;\n const { runMutation } = mutation;\n const [sessionRenameTarget, setSessionRenameTarget] = useState();\n const [sessionRenameDraft, setSessionRenameDraft] = useState('');\n const [sessionRenamePending, setSessionRenamePending] = useState(false);\n const [sessionRenameError, setSessionRenameError] = useState();\n const [workspaceRenameTarget, setWorkspaceRenameTarget] = useState();\n const [workspaceRenameDraft, setWorkspaceRenameDraft] = useState('');\n const [workspaceRenamePending, setWorkspaceRenamePending] = useState(false);\n const [workspaceRenameError, setWorkspaceRenameError] = useState();\n const [workspaceDeleteTarget, setWorkspaceDeleteTarget] = useState();\n const [workspaceDeletePending, setWorkspaceDeletePending] = useState(false);\n const [workspaceDeleteError, setWorkspaceDeleteError] = useState();\n const workspaceRenameTrimmed = workspaceRenameDraft.trim();\n const workspaceRenameDuplicate = workspaceRenameTarget !== undefined &&\n workspaceRenameTrimmed.length > 0 &&\n workspaces.items.some((workspace) => workspace.workspaceId !== workspaceRenameTarget.workspaceId &&\n workspace.title === workspaceRenameTrimmed);\n const workspaceRenameBlocked = workspaceRenamePending ||\n workspaceRenameTarget === undefined ||\n workspaceRenameTrimmed.length === 0 ||\n workspaceRenameTrimmed === workspaceRenameTarget?.currentTitle ||\n workspaceRenameDuplicate;\n const openWorkspaceRename = (workspace) => {\n setWorkspaceRenameTarget({\n workspaceId: workspace.workspaceId,\n currentTitle: workspace.title,\n });\n setWorkspaceRenameDraft(workspace.title);\n setWorkspaceRenameError(undefined);\n };\n const closeWorkspaceRename = () => {\n if (workspaceRenamePending)\n return;\n setWorkspaceRenameTarget(undefined);\n setWorkspaceRenameError(undefined);\n };\n const confirmWorkspaceRename = async () => {\n const target = workspaceRenameTarget;\n if (workspaceRenameBlocked || target === undefined)\n return;\n if (renameWorkspace === undefined) {\n setWorkspaceRenameError({\n code: 'WORKSPACE_RENAME_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setWorkspaceRenamePending(true);\n setWorkspaceRenameError(undefined);\n try {\n await renameWorkspace(target.workspaceId, workspaceRenameTrimmed);\n setWorkspaceRenameTarget(undefined);\n }\n catch (error) {\n setWorkspaceRenameError(toNativeWorktreeViewError(error));\n }\n finally {\n setWorkspaceRenamePending(false);\n }\n };\n const openWorkspaceDelete = (workspace) => {\n setWorkspaceDeleteTarget({ workspaceId: workspace.workspaceId, title: workspace.title });\n setWorkspaceDeleteError(undefined);\n };\n const closeWorkspaceDelete = () => {\n if (workspaceDeletePending)\n return;\n setWorkspaceDeleteTarget(undefined);\n setWorkspaceDeleteError(undefined);\n };\n const confirmWorkspaceDelete = async () => {\n const target = workspaceDeleteTarget;\n if (target === undefined || workspaceDeletePending)\n return;\n if (deleteWorkspace === undefined) {\n setWorkspaceDeleteError({\n code: 'WORKSPACE_DELETE_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setWorkspaceDeletePending(true);\n setWorkspaceDeleteError(undefined);\n try {\n await deleteWorkspace(target.workspaceId);\n setWorkspaceDeleteTarget(undefined);\n }\n catch (error) {\n setWorkspaceDeleteError(toNativeWorktreeViewError(error));\n }\n finally {\n setWorkspaceDeletePending(false);\n }\n };\n const openSessionRename = (sessionId, currentTitle) => {\n setSessionRenameTarget({ sessionId, currentTitle });\n setSessionRenameDraft(currentTitle);\n setSessionRenameError(undefined);\n };\n const closeSessionRename = () => {\n if (sessionRenamePending)\n return;\n setSessionRenameTarget(undefined);\n setSessionRenameError(undefined);\n };\n const confirmSessionRename = async () => {\n const target = sessionRenameTarget;\n const title = sessionRenameDraft.trim();\n if (target === undefined || title.length === 0 || sessionRenamePending)\n return;\n if (renameSession === undefined) {\n setSessionRenameError({\n code: 'SESSION_RENAME_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setSessionRenamePending(true);\n setSessionRenameError(undefined);\n try {\n await renameSession(target.sessionId, title);\n setSessionRenameTarget(undefined);\n }\n catch (error) {\n setSessionRenameError(toNativeWorktreeViewError(error));\n }\n finally {\n setSessionRenamePending(false);\n }\n };\n const archiveWorktreeSession = async (sessionId) => {\n if (archiveSession === undefined)\n return;\n await runMutation(() => archiveSession(sessionId));\n };\n return {\n sessionRenameTarget,\n setSessionRenameTarget,\n sessionRenameDraft,\n setSessionRenameDraft,\n sessionRenamePending,\n setSessionRenamePending,\n sessionRenameError,\n setSessionRenameError,\n workspaceRenameTarget,\n setWorkspaceRenameTarget,\n workspaceRenameDraft,\n setWorkspaceRenameDraft,\n workspaceRenamePending,\n setWorkspaceRenamePending,\n workspaceRenameError,\n setWorkspaceRenameError,\n workspaceDeleteTarget,\n setWorkspaceDeleteTarget,\n workspaceDeletePending,\n setWorkspaceDeletePending,\n workspaceDeleteError,\n setWorkspaceDeleteError,\n workspaceRenameTrimmed,\n workspaceRenameDuplicate,\n workspaceRenameBlocked,\n openWorkspaceRename,\n closeWorkspaceRename,\n confirmWorkspaceRename,\n openWorkspaceDelete,\n closeWorkspaceDelete,\n confirmWorkspaceDelete,\n openSessionRename,\n closeSessionRename,\n confirmSessionRename,\n archiveWorktreeSession,\n };\n}\n//# sourceMappingURL=useNativeActions.js.map","import { useRef, useState } from 'react';\nimport { createWorktreeModalViewLoader, createWorktreeRefreshGuard, } from '../../view/worktree-view.js';\nexport function useRegistrationState({ props }) {\n const { viewReader } = props;\n const [worktreeModalWorkspaceId, setWorktreeModalWorkspaceId] = useState();\n const [modalReadError, setModalReadError] = useState();\n const [modalReadLoading, setModalReadLoading] = useState(false);\n const [worktreeModalMode, setWorktreeModalMode] = useState('create');\n const [importCandidates, setImportCandidates] = useState({\n status: 'idle',\n candidates: [],\n });\n const [selectedImportPath, setSelectedImportPath] = useState();\n const [selectedBranch, setSelectedBranch] = useState('');\n const [newBranch, setNewBranch] = useState('');\n const modalReadLoader = useRef(createWorktreeModalViewLoader(viewReader));\n const modalReadViewRef = useRef();\n const importCandidatesGuard = useRef(createWorktreeRefreshGuard());\n const modalWorkspaceIdRef = useRef(worktreeModalWorkspaceId);\n modalWorkspaceIdRef.current = worktreeModalWorkspaceId;\n return {\n worktreeModalWorkspaceId,\n setWorktreeModalWorkspaceId,\n modalReadError,\n setModalReadError,\n modalReadLoading,\n setModalReadLoading,\n worktreeModalMode,\n setWorktreeModalMode,\n importCandidates,\n setImportCandidates,\n selectedImportPath,\n setSelectedImportPath,\n selectedBranch,\n setSelectedBranch,\n newBranch,\n setNewBranch,\n modalReadLoader,\n modalReadViewRef,\n importCandidatesGuard,\n modalWorkspaceIdRef,\n };\n}\n//# sourceMappingURL=useRegistrationState.js.map","import { createSessionForWorktree, WorktreeSessionBindingError, } from '../view/worktree-view.js';\nimport { WorktreeSessionPermissionError } from '../view/worktree-view-errors.js';\nexport { WorktreeSessionPermissionError } from '../view/worktree-view-errors.js';\nexport class WorktreeSessionActionError extends Error {\n code;\n retryable;\n details;\n constructor(code, message, retryable, details = {}) {\n super(message);\n this.code = code;\n this.retryable = retryable;\n this.name = 'WorktreeSessionActionError';\n this.details = details;\n }\n}\n/**\n * Keep the confirmation and second permission call in one place for new,\n * reused, and retried Sessions. The Host still validates the relation.\n */\nexport async function ensureWorktreeSessionPermission(input) {\n if (input.permission === undefined)\n return;\n const request = {\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: input.sessionId,\n binding: 'active',\n };\n let result;\n try {\n result = await input.permission.ensureWorktreePermission(request);\n }\n catch (error) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession, error);\n }\n if (result.status === 'confirmation-required') {\n let confirmed;\n try {\n confirmed = input.confirmFullAccess === undefined\n ? false\n : await input.confirmFullAccess({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: input.sessionId,\n cwd: input.cwd,\n });\n }\n catch (error) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession, error);\n }\n if (!confirmed) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession);\n }\n try {\n result = await input.permission.ensureWorktreePermission({ ...request, confirmed: true });\n }\n catch (error) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession, error);\n }\n }\n if (result.status === 'confirmation-required') {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession);\n }\n input.onPermissionResult?.({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: input.sessionId,\n cwd: input.cwd,\n }, result);\n}\nexport function resolveWorktreeSessionAction(input) {\n if (input.target.status !== 'active' ||\n input.target.health === 'repair' ||\n input.target.health === 'recovery-needed') {\n return { kind: 'reject', reason: 'worktree-not-available' };\n }\n if (input.sessions.phase !== 'ready') {\n return { kind: 'wait', reason: 'sessions-not-ready' };\n }\n const targetBinding = input.bindings.find((binding) => binding.worktreeId === input.target.worktreeId && binding.status === 'active');\n if (targetBinding !== undefined) {\n const summary = input.sessions.byId[targetBinding.sessionId];\n if (summary === undefined) {\n return {\n kind: 'repair',\n reason: 'active-binding-session-missing',\n sessionId: targetBinding.sessionId,\n };\n }\n if (summary.cwd !== input.target.absolutePath) {\n return {\n kind: 'repair',\n reason: 'active-binding-cwd-mismatch',\n sessionId: targetBinding.sessionId,\n };\n }\n if (summary.blank === true &&\n !input.archivedSessionIds.includes(targetBinding.sessionId)) {\n return { kind: 'open-bound', sessionId: targetBinding.sessionId };\n }\n }\n for (const sessionId of input.sessions.ids) {\n const summary = input.sessions.byId[sessionId];\n if (summary === undefined ||\n summary.blank === undefined ||\n (summary.blank === true && summary.cwd === undefined)) {\n return { kind: 'wait', reason: 'session-facts-incomplete' };\n }\n }\n for (const sessionId of input.sessions.ids) {\n const summary = input.sessions.byId[sessionId];\n if (summary?.blank !== true ||\n summary.cwd !== input.target.absolutePath ||\n input.archivedSessionIds.includes(sessionId)) {\n continue;\n }\n if (!input.bindings.some((binding) => binding.sessionId === sessionId)) {\n return { kind: 'bind-existing', sessionId };\n }\n }\n return { kind: 'create' };\n}\nfunction actionError(action) {\n switch (action.kind) {\n case 'wait':\n return new WorktreeSessionActionError(action.reason === 'sessions-not-ready' ? 'SESSION_LIST_NOT_READY' : 'SESSION_FACTS_INCOMPLETE', '', true);\n case 'repair':\n return new WorktreeSessionActionError('WORKTREE_SESSION_REPAIR_REQUIRED', action.reason, true, {\n ...(action.sessionId === undefined ? {} : { sessionId: action.sessionId }),\n });\n case 'reject':\n return new WorktreeSessionActionError('WORKTREE_SESSION_UNAVAILABLE', action.reason, false);\n default:\n return new WorktreeSessionActionError('WORKTREE_SESSION_ACTION_FAILED', '', true);\n }\n}\nexport async function retryWorktreeSessionBinding(input) {\n if (input.archived) {\n throw new WorktreeSessionActionError('SESSION_ARCHIVED', '', false, {\n sessionId: input.pending.sessionId,\n });\n }\n try {\n await input.manager.bindSession({\n workspaceId: input.pending.workspaceId,\n worktreeId: input.pending.worktreeId,\n sessionId: input.pending.sessionId,\n });\n }\n catch (error) {\n throw new WorktreeSessionBindingError(input.pending.sessionId, error);\n }\n await ensureWorktreeSessionPermission({\n permission: input.permission,\n confirmFullAccess: input.confirmFullAccess,\n onPermissionResult: input.onPermissionResult,\n sessionId: input.pending.sessionId,\n workspaceId: input.pending.workspaceId,\n worktreeId: input.pending.worktreeId,\n cwd: input.pending.cwd,\n createdSession: true,\n });\n input.ensureSessionWorkspace(input.pending.workspaceId, input.pending.sessionId);\n input.openSession(input.pending.sessionId);\n return input.pending.sessionId;\n}\n/**\n * Browser-only Worktree `+` connector. It owns the read/resolve/bind/create/open\n * sequence and coalesces repeated calls for one Worktree within one Client fiber.\n */\nexport function createWorktreeSessionConnector(options) {\n const inFlight = new Map();\n let disposed = false;\n const run = async (input) => {\n const [worktrees, bindings] = await Promise.all([\n options.manager.listWorktrees({ workspaceId: input.workspaceId }),\n options.manager.listBindings({ workspaceId: input.workspaceId }),\n ]);\n if (disposed) {\n throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);\n }\n const target = worktrees.find((record) => record.worktreeId === input.worktreeId);\n if (target === undefined || target.absolutePath !== input.cwd) {\n throw new WorktreeSessionActionError('WORKTREE_SESSION_REPAIR_REQUIRED', 'worktree target unavailable', true);\n }\n const action = resolveWorktreeSessionAction({\n target,\n sessions: options.sessions.getSnapshot(),\n archivedSessionIds: options.archivedSessionIds(),\n bindings,\n });\n if (action.kind === 'open-bound') {\n await ensureWorktreeSessionPermission({\n permission: options.permission,\n confirmFullAccess: options.confirmFullAccess,\n onPermissionResult: options.onPermissionResult,\n sessionId: action.sessionId,\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n cwd: input.cwd,\n createdSession: false,\n });\n options.ensureSessionWorkspace(input.workspaceId, action.sessionId);\n if (!disposed)\n options.openSession(action.sessionId);\n return action.sessionId;\n }\n if (action.kind === 'bind-existing') {\n try {\n await options.manager.bindSession({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: action.sessionId,\n });\n }\n catch (error) {\n throw new WorktreeSessionBindingError(action.sessionId, error);\n }\n await ensureWorktreeSessionPermission({\n permission: options.permission,\n confirmFullAccess: options.confirmFullAccess,\n onPermissionResult: options.onPermissionResult,\n sessionId: action.sessionId,\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n cwd: input.cwd,\n createdSession: false,\n });\n if (!disposed) {\n options.ensureSessionWorkspace(input.workspaceId, action.sessionId);\n if (!disposed)\n options.openSession(action.sessionId);\n }\n return action.sessionId;\n }\n if (action.kind !== 'create')\n throw actionError(action);\n if (disposed)\n throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);\n return createSessionForWorktree({\n ...input,\n createSession: options.createSession,\n manager: options.manager,\n beforeOpen: async (sessionId) => {\n if (disposed)\n throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);\n await ensureWorktreeSessionPermission({\n permission: options.permission,\n confirmFullAccess: options.confirmFullAccess,\n onPermissionResult: options.onPermissionResult,\n sessionId,\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n cwd: input.cwd,\n createdSession: true,\n });\n },\n openSession: (sessionId) => {\n if (!disposed)\n options.openSession(sessionId);\n },\n });\n };\n return {\n create(input) {\n const key = `${input.workspaceId}\\u0000${input.worktreeId}`;\n const current = inFlight.get(key);\n if (current !== undefined)\n return current;\n const promise = run(input).finally(() => {\n if (inFlight.get(key) === promise)\n inFlight.delete(key);\n });\n inFlight.set(key, promise);\n return promise;\n },\n dispose() {\n disposed = true;\n inFlight.clear();\n },\n };\n}\n//# sourceMappingURL=worktree-session.js.map","import { useState } from 'react';\nimport { openWorktreeSession } from '../../view/navigation.js';\nimport { retryWorktreeSessionBinding } from '../../session/worktree-session.js';\nimport { toWorktreeViewError, WorktreeSessionBindingError, WorktreeSessionPermissionError, } from '../../view/worktree-view.js';\nimport { toNativeWorktreeViewError } from '../shared.js';\nexport function useSessionActions({ source, props, mutation, read }) {\n const { archivedSessionIds } = source;\n const { createSessionForWorktree: createSessionCallback, manager, ensureSessionWorkspace, permission, confirmFullAccess, onPermissionResult, openSession, retryForkSession, } = props;\n const { setActionError, setActionPending } = mutation;\n const { refresh } = read;\n const [pendingSessionBinding, setPendingSessionBinding] = useState();\n const [forkRetryKey, setForkRetryKey] = useState();\n const pendingSessionArchived = pendingSessionBinding !== undefined &&\n archivedSessionIds.includes(pendingSessionBinding.sessionId);\n const createSession = async (input) => {\n if (createSessionCallback === undefined) {\n setActionError({\n code: 'SESSION_CREATE_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionPending(true);\n setActionError(undefined);\n setPendingSessionBinding(undefined);\n try {\n await createSessionCallback(input);\n await refresh({\n scope: { kind: 'workspace', workspaceId: input.workspaceId },\n preserveCurrent: true,\n });\n }\n catch (error) {\n if (error instanceof WorktreeSessionBindingError && error.retryable) {\n setPendingSessionBinding({ ...input, sessionId: error.sessionId });\n }\n if (error instanceof WorktreeSessionPermissionError && error.retryable) {\n setPendingSessionBinding({\n ...input,\n sessionId: error.sessionId,\n permissionRequired: true,\n });\n }\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n const retrySessionBinding = async () => {\n if (manager === undefined || pendingSessionBinding === undefined || pendingSessionArchived)\n return;\n const pending = pendingSessionBinding;\n setActionPending(true);\n setActionError(undefined);\n try {\n await retryWorktreeSessionBinding({\n manager,\n pending,\n archived: false,\n ensureSessionWorkspace: (workspaceId, sessionId) => {\n ensureSessionWorkspace?.(workspaceId, sessionId);\n },\n permission,\n confirmFullAccess,\n onPermissionResult,\n openSession,\n });\n setPendingSessionBinding(undefined);\n await refresh({\n scope: { kind: 'workspace', workspaceId: pending.workspaceId },\n preserveCurrent: true,\n });\n }\n catch (error) {\n if (error instanceof WorktreeSessionBindingError && !error.retryable) {\n setPendingSessionBinding(undefined);\n }\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n const retryForkBinding = async (key) => {\n if (retryForkSession === undefined || forkRetryKey !== undefined)\n return;\n setForkRetryKey(key);\n try {\n await retryForkSession(key);\n }\n catch (error) {\n setActionError(toNativeWorktreeViewError(error));\n }\n finally {\n setForkRetryKey(undefined);\n }\n };\n const openWorkspaceSession = (workspaceId, sessionId) => {\n ensureSessionWorkspace?.(workspaceId, sessionId);\n openWorktreeSession({ open: openSession }, sessionId);\n };\n return {\n pendingSessionBinding,\n setPendingSessionBinding,\n forkRetryKey,\n setForkRetryKey,\n pendingSessionArchived,\n createSession,\n retrySessionBinding,\n retryForkBinding,\n openWorkspaceSession,\n };\n}\n//# sourceMappingURL=useSessionActions.js.map","/** Keep one current Session row in the Worktree content scrollport. */\nexport function scrollCurrentSessionIntoView(root, sessionId) {\n if (root === null)\n return false;\n const row = Array.from(root.querySelectorAll('[data-session-id]')).find((candidate) => candidate.dataset.sessionId === sessionId);\n if (row === undefined)\n return false;\n const rootRect = root.getBoundingClientRect();\n const rowRect = row.getBoundingClientRect();\n if (rowRect.top < rootRect.top) {\n root.scrollTop -= rootRect.top - rowRect.top;\n }\n else if (rowRect.bottom > rootRect.bottom) {\n root.scrollTop += rowRect.bottom - rootRect.bottom;\n }\n return true;\n}\n//# sourceMappingURL=worktree-session-position.js.map","import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { isMainExpanded, isWorkspaceExpanded, isWorktreeExpanded, } from '../../view/worktree-expand-state.js';\nimport { scrollCurrentSessionIntoView } from '../../session/worktree-session-position.js';\nimport { clearSessionGroupExpansion, currentSessionRevealKeys, isCompleteWorktreeWorkspaceSnapshot, isPendingListPhase, resolveCurrentSessionLocation, } from '../selectors.js';\nexport function useSessionExpansion({ read, source, props }) {\n const { readState, viewByWorkspace } = read;\n const { currentSessionId, workspaces, mode, expandSnapshot, workspaceIds } = source;\n const { expandState } = props;\n const [searchQuery, setSearchQuery] = useState('');\n const [searchExpanded, setSearchExpanded] = useState(false);\n const searchRoot = useRef(null);\n const searchInput = useRef(null);\n const contentRef = useRef(null);\n const [currentSessionReveal, setCurrentSessionReveal] = useState();\n const revealSessionIdRef = useRef(Symbol('initial'));\n const revealModeRef = useRef(Symbol('initial'));\n let activeReveal = currentSessionReveal;\n if (currentSessionId !== revealSessionIdRef.current || mode !== revealModeRef.current) {\n revealSessionIdRef.current = currentSessionId;\n revealModeRef.current = mode;\n activeReveal =\n currentSessionId === undefined || mode !== 'worktree'\n ? undefined\n : { sessionId: currentSessionId, suppressedKeys: {} };\n setCurrentSessionReveal(activeReveal);\n }\n const searchQueryRef = useRef(searchQuery);\n searchQueryRef.current = searchQuery;\n useEffect(() => {\n if (!searchExpanded)\n return;\n const onClick = (event) => {\n if (!(event.target instanceof Node) || searchRoot.current?.contains(event.target) === true)\n return;\n searchInput.current?.blur();\n if (searchQuery.trim() !== '')\n return;\n setSearchExpanded(false);\n };\n document.addEventListener('click', onClick);\n return () => {\n document.removeEventListener('click', onClick);\n };\n }, [searchExpanded, searchQuery]);\n useEffect(() => {\n if (searchExpanded) {\n searchInput.current?.focus({ preventScroll: true });\n }\n }, [searchExpanded]);\n const locateGenerationRef = useRef(0);\n const positionedLocateGenerationRef = useRef();\n const [expandedArchivedWorkspaces, setExpandedArchivedWorkspaces] = useState({});\n const [expandedSessionGroups, setExpandedSessionGroups] = useState({});\n const query = searchQuery.trim().toLocaleLowerCase();\n const currentSessionLocation = useMemo(() => readState.status === 'ready'\n ? resolveCurrentSessionLocation(currentSessionId, workspaces.items, readState.views)\n : undefined, [currentSessionId, readState.status, readState.views, workspaces.items]);\n const currentRevealKeys = useMemo(() => new Set(currentSessionRevealKeys(currentSessionLocation)), [currentSessionLocation]);\n const isCurrentSessionReveal = (key) => activeReveal !== undefined &&\n activeReveal.sessionId === currentSessionId &&\n currentRevealKeys.has(key) &&\n activeReveal.suppressedKeys[key] !== true;\n useLayoutEffect(() => {\n locateGenerationRef.current += 1;\n positionedLocateGenerationRef.current = undefined;\n if (mode !== 'worktree') {\n setSearchExpanded(false);\n return;\n }\n if (searchQueryRef.current.trim().length > 0) {\n setSearchQuery('');\n setSearchExpanded(false);\n }\n }, [currentSessionId, mode]);\n useLayoutEffect(() => {\n if (mode !== 'worktree' ||\n currentSessionId === undefined ||\n currentSessionLocation === undefined) {\n return;\n }\n const generation = locateGenerationRef.current;\n if (positionedLocateGenerationRef.current === generation)\n return;\n let cancelled = false;\n const frame = requestAnimationFrame(() => {\n if (cancelled || generation !== locateGenerationRef.current)\n return;\n if (!scrollCurrentSessionIntoView(contentRef.current, currentSessionId))\n return;\n positionedLocateGenerationRef.current = generation;\n });\n return () => {\n cancelled = true;\n cancelAnimationFrame(frame);\n };\n }, [\n currentSessionId,\n currentSessionLocation,\n activeReveal,\n expandSnapshot,\n mode,\n query,\n readState.status,\n ]);\n useEffect(() => {\n // Pruning is destructive: require a confirmed Workspace list whose projections all\n // arrived. A pending or partial read means \"nothing arrived yet\", not \"nothing exists\".\n if (readState.status !== 'ready' ||\n isPendingListPhase(workspaces.phase) ||\n !isCompleteWorktreeWorkspaceSnapshot(workspaceIds, readState.views))\n return;\n expandState.actions.retain(workspaceIds, readState.views.flatMap((view) => view.worktrees.map((record) => record.worktreeId)));\n }, [expandState, readState.status, readState.views, workspaceIds, workspaces.phase]);\n const clearSessionGroups = (groupKeys) => {\n if (groupKeys.length === 0)\n return;\n setExpandedSessionGroups((current) => clearSessionGroupExpansion(current, groupKeys));\n };\n const suppressCurrentSessionReveal = (key) => {\n if (!isCurrentSessionReveal(key))\n return false;\n setCurrentSessionReveal((current) => {\n if (current === undefined || current.sessionId !== currentSessionId)\n return current;\n return {\n ...current,\n suppressedKeys: { ...current.suppressedKeys, [key]: true },\n };\n });\n return true;\n };\n const toggleWorkspace = (workspaceId) => {\n const persistedExpanded = isWorkspaceExpanded(expandSnapshot, workspaceId);\n const autoExpanded = isCurrentSessionReveal('workspace:' + workspaceId);\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal('workspace:' + workspaceId);\n }\n if (visuallyExpanded && !persistedExpanded) {\n clearSessionGroups([\n 'main:' + workspaceId,\n ...(viewByWorkspace.get(workspaceId)?.worktrees.map((record) => record.worktreeId) ?? []).map((worktreeId) => 'worktree:' + worktreeId),\n ]);\n return;\n }\n expandState.actions.toggleWorkspace(workspaceId);\n if (visuallyExpanded) {\n clearSessionGroups([\n 'main:' + workspaceId,\n ...(viewByWorkspace.get(workspaceId)?.worktrees.map((record) => record.worktreeId) ?? []).map((worktreeId) => 'worktree:' + worktreeId),\n ]);\n }\n };\n const toggleMain = (workspaceId) => {\n const persistedExpanded = isMainExpanded(expandSnapshot, workspaceId);\n const autoExpanded = isCurrentSessionReveal('main:' + workspaceId);\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal('main:' + workspaceId);\n }\n if (visuallyExpanded && !persistedExpanded) {\n clearSessionGroups(['main:' + workspaceId]);\n return;\n }\n expandState.actions.toggleMain(workspaceId);\n if (visuallyExpanded)\n clearSessionGroups(['main:' + workspaceId]);\n };\n const toggleWorktree = (worktreeId) => {\n const persistedExpanded = isWorktreeExpanded(expandSnapshot, worktreeId);\n const autoExpanded = isCurrentSessionReveal('worktree:' + worktreeId);\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal('worktree:' + worktreeId);\n }\n if (visuallyExpanded && !persistedExpanded) {\n clearSessionGroups(['worktree:' + worktreeId]);\n return;\n }\n expandState.actions.toggleWorktree(worktreeId);\n if (visuallyExpanded)\n clearSessionGroups(['worktree:' + worktreeId]);\n };\n const toggleArchivedWorkspace = (workspaceId) => {\n const archivedKey = 'archived:' + workspaceId;\n const autoExpanded = isCurrentSessionReveal(archivedKey);\n const persistedExpanded = expandedArchivedWorkspaces[workspaceId] === true;\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal(archivedKey);\n }\n setExpandedArchivedWorkspaces((current) => ({\n ...current,\n [workspaceId]: !visuallyExpanded,\n }));\n };\n const toggleSessionGroup = (groupKey, autoExpanded) => {\n const transientExpanded = expandedSessionGroups[groupKey] === true;\n if (autoExpanded) {\n suppressCurrentSessionReveal('session-group:' + groupKey);\n setExpandedSessionGroups((current) => {\n const next = { ...current };\n delete next[groupKey];\n return next;\n });\n return;\n }\n setExpandedSessionGroups((current) => ({\n ...current,\n [groupKey]: !transientExpanded,\n }));\n };\n return {\n searchQuery,\n setSearchQuery,\n searchExpanded,\n setSearchExpanded,\n searchRoot,\n searchInput,\n contentRef,\n currentSessionReveal: activeReveal,\n setCurrentSessionReveal,\n searchQueryRef,\n locateGenerationRef,\n positionedLocateGenerationRef,\n expandedArchivedWorkspaces,\n setExpandedArchivedWorkspaces,\n expandedSessionGroups,\n setExpandedSessionGroups,\n query,\n currentSessionLocation,\n currentRevealKeys,\n isCurrentSessionReveal,\n clearSessionGroups,\n suppressCurrentSessionReveal,\n toggleWorkspace,\n toggleMain,\n toggleWorktree,\n toggleArchivedWorkspace,\n toggleSessionGroup,\n };\n}\n//# sourceMappingURL=useSessionExpansion.js.map","import { useEffect, useMemo } from 'react';\nimport { filterVisibleSessionIds } from '../../session/session-view.js';\nimport { unboundSessionIds, workspaceSessionIds } from '../../view/view-mode.js';\nimport { nextSessionOrderAccount, } from '../../session/worktree-session-order.js';\nimport { filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport { bindingIdsFor, isCompleteWorktreeWorkspaceSnapshot, isPendingListPhase, } from '../selectors.js';\nimport { updatedAtById } from '../shared.js';\nexport function useSessionOrdering({ read, source, props }) {\n const { readState, viewByWorkspace } = read;\n const { workspaces, sessions, archivedSessionIds, sessionOrderSnapshot, mode, workspaceIds } = source;\n const { sessionOrder } = props;\n // DSH lists report a monotone `pending` → `ready` arrival phase, and an empty list in\n // the pending phase means \"nothing arrived yet\" rather than \"nothing exists\". Deriving\n // accounts from that read would reset every stored order to no order at all.\n const sourcesReady = readState.status === 'ready' &&\n !isPendingListPhase(sessions.phase) &&\n !isPendingListPhase(workspaces.phase);\n // Reconciling may run as soon as one Workspace projection is ready, but deleting accounts\n // for Workspaces that no longer exist requires the complete, non-empty projection.\n const canRetainAccounts = sourcesReady && isCompleteWorktreeWorkspaceSnapshot(workspaceIds, readState.views);\n const sessionOrderInputs = useMemo(() => {\n if (!sourcesReady)\n return [];\n const inputs = [];\n for (const workspace of workspaces.items) {\n // Before this Workspace's projection lands, which Sessions belong to a Worktree is\n // unknown. Skipping it keeps the stored order instead of rebuilding it from a guess.\n const view = viewByWorkspace.get(workspace.workspaceId);\n if (view === undefined)\n continue;\n const allWorkspaceSessionIds = filterArchivedSessionIds(workspaceSessionIds(workspaces, workspace.workspaceId, sessions.ids), archivedSessionIds);\n const bindings = view.bindings;\n const boundSessionIds = new Set(bindings.map((binding) => binding.sessionId));\n const mainSessionIds = filterVisibleSessionIds(unboundSessionIds(allWorkspaceSessionIds, [...boundSessionIds]), sessions);\n inputs.push({\n accountKey: `main:${workspace.workspaceId}`,\n sessionIds: mainSessionIds,\n updatedAtById: updatedAtById(mainSessionIds, sessions),\n });\n for (const record of view.worktrees) {\n const worktreeSessionIds = filterVisibleSessionIds(filterArchivedSessionIds(bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId)), archivedSessionIds), sessions);\n inputs.push({\n accountKey: `worktree:${record.worktreeId}`,\n sessionIds: worktreeSessionIds,\n updatedAtById: updatedAtById(worktreeSessionIds, sessions),\n });\n }\n }\n return inputs;\n }, [\n archivedSessionIds,\n sessions.byId,\n sessions.ids,\n sourcesReady,\n viewByWorkspace,\n workspaces,\n workspaces.items,\n ]);\n const orderedSessionIdsByAccount = useMemo(() => {\n const ordered = new Map();\n for (const input of sessionOrderInputs) {\n const previous = sessionOrderSnapshot.accounts[input.accountKey];\n ordered.set(input.accountKey, nextSessionOrderAccount({\n baseIds: input.sessionIds,\n updatedAtById: input.updatedAtById,\n previous,\n }).order);\n }\n return ordered;\n }, [sessionOrderInputs, sessionOrderSnapshot]);\n useEffect(() => {\n if (mode !== 'worktree' || sessionOrderInputs.length === 0)\n return;\n for (const input of sessionOrderInputs) {\n sessionOrder.actions.reconcile(input.accountKey, input.sessionIds, input.updatedAtById);\n }\n if (!canRetainAccounts)\n return;\n sessionOrder.actions.retain(sessionOrderInputs.map((input) => input.accountKey));\n }, [canRetainAccounts, mode, sessionOrder, sessionOrderInputs]);\n return { sessionOrderInputs, orderedSessionIdsByAccount };\n}\n//# sourceMappingURL=useSessionOrdering.js.map","import { useState } from 'react';\nexport function useSurfaceMenus() {\n const [openWorkspaceMenuId, setOpenWorkspaceMenuId] = useState();\n const [openMainMenuId, setOpenMainMenuId] = useState();\n const [openWorktreeMenuId, setOpenWorktreeMenuId] = useState();\n return {\n openWorkspaceMenuId,\n setOpenWorkspaceMenuId,\n openMainMenuId,\n setOpenMainMenuId,\n openWorktreeMenuId,\n setOpenWorktreeMenuId,\n };\n}\n//# sourceMappingURL=useSurfaceMenus.js.map","import { useState } from 'react';\nimport { toWorktreeViewError } from '../../view/worktree-view.js';\nexport function useSurfaceMutation({ read }) {\n const { refresh } = read;\n const [actionError, setActionError] = useState();\n const [actionPending, setActionPending] = useState(false);\n const runMutation = async (operation, refreshOptions) => {\n setActionPending(true);\n setActionError(undefined);\n try {\n await operation();\n if (refreshOptions !== undefined)\n await refresh(refreshOptions);\n }\n catch (error) {\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n return { actionError, setActionError, actionPending, setActionPending, runMutation };\n}\n//# sourceMappingURL=useSurfaceMutation.js.map","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { createWorktreeRefreshGuard, mergeWorktreeView, mergeWorktreeViews, toWorktreeViewError, } from '../../view/worktree-view.js';\nimport { worktreeActivityRefreshWorkspaceIds } from '../selectors.js';\nimport { EMPTY_READ_STATE } from '../shared.js';\nexport function useSurfaceRefresh({ source, props, registrationState }) {\n const { forkRecoverySnapshot, workspaceIdsRef, mode, workspaceIds, sessionPresentations } = source;\n const { manager, viewReader, invalidateWorktreeContext, syncSessionWorkspaces } = props;\n const { modalReadViewRef, setModalReadError, setModalReadLoading, modalReadLoader, setWorktreeModalWorkspaceId, } = registrationState;\n const [readState, setReadState] = useState(EMPTY_READ_STATE);\n const readStateRef = useRef(readState);\n readStateRef.current = readState;\n const refreshGuard = useRef(createWorktreeRefreshGuard());\n const targetRefreshGuards = useRef(new Map());\n const forkRecoveryRevisionRef = useRef(forkRecoverySnapshot.revision);\n const guardFor = (workspaceId) => {\n const current = targetRefreshGuards.current.get(workspaceId);\n if (current !== undefined)\n return current;\n const created = createWorktreeRefreshGuard();\n targetRefreshGuards.current.set(workspaceId, created);\n return created;\n };\n const refresh = useCallback(async (options = {}) => {\n if (manager === undefined) {\n refreshGuard.current.invalidate();\n for (const guard of targetRefreshGuards.current.values())\n guard.invalidate();\n setReadState(EMPTY_READ_STATE);\n return;\n }\n const scope = options.scope ?? { kind: 'global' };\n const preserveCurrent = options.preserveCurrent === true;\n const currentWorkspaceIds = workspaceIdsRef.current;\n if (scope.kind === 'global') {\n if (!preserveCurrent) {\n setReadState({ status: 'loading', views: [] });\n }\n const selectedWorkspaceIds = [...currentWorkspaceIds];\n for (const workspaceId of selectedWorkspaceIds) {\n viewReader.invalidate(workspaceId);\n }\n const contextRefresh = options.invalidateContext === false ? undefined : invalidateWorktreeContext?.();\n await refreshGuard.current.run(async () => {\n const [views] = await Promise.all([\n viewReader.readMany(selectedWorkspaceIds),\n contextRefresh ?? Promise.resolve(),\n ]);\n return views;\n }, (views) => {\n setReadState((current) => {\n const merged = mergeWorktreeViews(current.views, workspaceIdsRef.current, views);\n return {\n status: 'ready',\n views: modalReadViewRef.current === undefined\n ? merged\n : mergeWorktreeView(merged, modalReadViewRef.current),\n };\n });\n }, (error) => {\n if (preserveCurrent)\n throw error;\n setReadState({\n status: 'error',\n views: modalReadViewRef.current === undefined ? [] : [modalReadViewRef.current],\n error: toWorktreeViewError(error),\n });\n });\n return;\n }\n const requestedWorkspaceIds = scope.kind === 'workspace' ? [scope.workspaceId] : scope.workspaceIds;\n const selectedWorkspaceIds = [...new Set(requestedWorkspaceIds)].filter((workspaceId) => currentWorkspaceIds.includes(workspaceId));\n if (selectedWorkspaceIds.length === 0)\n return;\n await Promise.allSettled(selectedWorkspaceIds.map(async (workspaceId) => {\n const guard = guardFor(workspaceId);\n viewReader.invalidate(workspaceId, { reuseInFlight: options.reuseInFlight });\n const contextRefresh = options.invalidateContext === false\n ? undefined\n : invalidateWorktreeContext?.(workspaceId);\n const generation = guard.begin();\n try {\n const view = await viewReader.read(workspaceId);\n if (!guard.isCurrent(generation))\n return;\n if (!workspaceIdsRef.current.includes(workspaceId))\n return;\n setReadState((current) => {\n const remainingTargetError = current.targetError?.workspaceIds.filter((candidate) => candidate !== workspaceId) ?? [];\n const next = {\n ...current,\n status: 'ready',\n views: mergeWorktreeViews(current.views, workspaceIdsRef.current, [view]),\n error: undefined,\n };\n if (remainingTargetError.length === 0) {\n const withoutTargetError = { ...next };\n delete withoutTargetError.targetError;\n return withoutTargetError;\n }\n return {\n ...next,\n targetError: {\n workspaceIds: remainingTargetError,\n error: current.targetError.error,\n },\n };\n });\n }\n catch (error) {\n if (!guard.isCurrent(generation))\n return;\n if (!workspaceIdsRef.current.includes(workspaceId))\n return;\n setReadState((current) => {\n const previousIds = current.targetError?.workspaceIds ?? [];\n return {\n ...current,\n status: 'ready',\n views: mergeWorktreeViews(current.views, workspaceIdsRef.current, []),\n error: undefined,\n targetError: {\n workspaceIds: [...new Set([...previousIds, workspaceId])],\n error: {\n ...toWorktreeViewError(error),\n retryable: true,\n },\n },\n };\n });\n }\n finally {\n await contextRefresh?.catch(() => undefined);\n }\n }));\n }, [invalidateWorktreeContext, manager, viewReader]);\n const loadModalWorktreeView = useCallback((workspaceId) => {\n setModalReadError(undefined);\n setModalReadLoading(true);\n if (manager === undefined) {\n setModalReadLoading(false);\n setModalReadError({\n code: 'WORKTREE_VIEW_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n void modalReadLoader.current.load(workspaceId, (view) => {\n modalReadViewRef.current = view;\n setModalReadLoading(false);\n setReadState((current) => ({\n ...current,\n views: mergeWorktreeView(current.views, view),\n }));\n }, (error) => {\n setModalReadLoading(false);\n setModalReadError(toWorktreeViewError(error));\n });\n }, [manager, viewReader]);\n useEffect(() => {\n if (mode === 'worktree') {\n void refresh({ preserveCurrent: readStateRef.current.status === 'ready' });\n }\n else {\n refreshGuard.current.invalidate();\n for (const guard of targetRefreshGuards.current.values())\n guard.invalidate();\n modalReadLoader.current.invalidate();\n modalReadViewRef.current = undefined;\n setWorktreeModalWorkspaceId(undefined);\n setModalReadError(undefined);\n setModalReadLoading(false);\n setReadState(EMPTY_READ_STATE);\n }\n }, [mode, refresh]);\n const previousWorkspaceIdsRef = useRef(workspaceIds);\n useEffect(() => {\n const previousWorkspaceIds = previousWorkspaceIdsRef.current;\n previousWorkspaceIdsRef.current = workspaceIds;\n if (mode !== 'worktree')\n return;\n const addedWorkspaceIds = workspaceIds.filter((workspaceId) => !previousWorkspaceIds.includes(workspaceId));\n const removedWorkspaceIds = previousWorkspaceIds.filter((workspaceId) => !workspaceIds.includes(workspaceId));\n for (const workspaceId of removedWorkspaceIds) {\n targetRefreshGuards.current.delete(workspaceId);\n }\n setReadState((current) => {\n const views = mergeWorktreeViews(current.views, workspaceIds, []);\n const remainingTargetError = current.targetError?.workspaceIds.filter((workspaceId) => workspaceIds.includes(workspaceId)) ?? [];\n const next = { ...current, views };\n if (remainingTargetError.length === 0) {\n const withoutTargetError = { ...next };\n delete withoutTargetError.targetError;\n return withoutTargetError;\n }\n return {\n ...next,\n targetError: {\n workspaceIds: remainingTargetError,\n error: current.targetError.error,\n },\n };\n });\n for (const workspaceId of addedWorkspaceIds) {\n void refresh({\n scope: { kind: 'workspace', workspaceId },\n preserveCurrent: true,\n }).catch(() => {\n // The target error remains visible and can be retried explicitly.\n });\n }\n }, [mode, refresh, workspaceIds]);\n useEffect(() => {\n if (forkRecoveryRevisionRef.current === forkRecoverySnapshot.revision)\n return;\n forkRecoveryRevisionRef.current = forkRecoverySnapshot.revision;\n if (mode !== 'worktree' || manager === undefined)\n return;\n if (forkRecoverySnapshot.affectedWorkspaceIds.length === 0)\n return;\n void refresh({\n scope: {\n kind: 'workspaces',\n workspaceIds: forkRecoverySnapshot.affectedWorkspaceIds,\n },\n preserveCurrent: readStateRef.current.status === 'ready',\n }).catch(() => {\n // Recovery state remains visible; the next explicit retry can refresh it again.\n });\n }, [\n forkRecoverySnapshot.affectedWorkspaceIds,\n forkRecoverySnapshot.revision,\n manager,\n mode,\n refresh,\n ]);\n useEffect(() => {\n if (readState.status !== 'ready' || syncSessionWorkspaces === undefined)\n return;\n syncSessionWorkspaces(readState.views.flatMap((view) => view.bindings.map((binding) => ({\n workspaceId: binding.workspaceId,\n sessionId: binding.sessionId,\n }))));\n }, [readState.status, readState.views, syncSessionWorkspaces]);\n const viewByWorkspace = useMemo(() => new Map(readState.views.map((view) => [view.workspaceId, view])), [readState.views]);\n const previousActivityRef = useRef(sessionPresentations);\n useEffect(() => {\n const previous = previousActivityRef.current;\n previousActivityRef.current = sessionPresentations;\n if (mode !== 'worktree')\n return;\n const affected = worktreeActivityRefreshWorkspaceIds(readStateRef.current.views, previous, sessionPresentations);\n if (affected.length > 0)\n void refresh({\n scope: { kind: 'workspaces', workspaceIds: affected },\n preserveCurrent: true,\n });\n }, [mode, refresh, sessionPresentations]);\n return {\n readState,\n setReadState,\n readStateRef,\n refreshGuard,\n targetRefreshGuards,\n forkRecoveryRevisionRef,\n guardFor,\n refresh,\n loadModalWorktreeView,\n previousWorkspaceIdsRef,\n viewByWorkspace,\n previousActivityRef,\n };\n}\n//# sourceMappingURL=useSurfaceRefresh.js.map","export function computeOverlayBounds(frame, newSession, footer) {\n if (newSession === undefined || footer === undefined) {\n return { ready: false, top: 0, height: 0 };\n }\n const top = Math.max(0, newSession.top - frame.top);\n const footerTop = Math.max(top, footer.top - frame.top);\n return { ready: true, top, height: footerTop - top };\n}\n//# sourceMappingURL=overlay-bounds.js.map","import { useLayoutEffect, useRef, useState } from 'react';\nimport { computeOverlayBounds } from './overlay-bounds.js';\nconst EMPTY_BOUNDS = { ready: false, top: 0, height: 0 };\nfunction asRect(element) {\n const rect = element.getBoundingClientRect();\n return { top: rect.top, bottom: rect.bottom };\n}\nexport function syncObservedElement(observer, previous, next) {\n const nextElement = next ?? undefined;\n if (previous === nextElement)\n return previous;\n if (previous !== undefined)\n observer?.unobserve(previous);\n if (nextElement !== undefined)\n observer?.observe(nextElement);\n return nextElement;\n}\nexport function resolveNativeSidebarRoot(sidebar) {\n const directChild = sidebar.firstElementChild;\n if (directChild === null)\n return undefined;\n const directRect = directChild.getBoundingClientRect();\n if (directRect.width > 0 || directRect.height > 0)\n return directChild;\n return directChild.firstElementChild ?? directChild;\n}\nexport function findNewSessionAnchor(root) {\n const labels = ['新建会话', 'New session', '新会话', 'New Session'];\n const buttons = Array.from(root.querySelectorAll('button'));\n const visibleLabel = buttons.find((button) => {\n const text = button.textContent?.trim();\n return text === '新会话' || text === 'New Session';\n });\n if (visibleLabel !== undefined)\n return visibleLabel;\n for (const label of labels) {\n const button = buttons.find((candidate) => candidate.getAttribute('aria-label') === label);\n if (button !== undefined)\n return button;\n }\n return undefined;\n}\nexport function useSidebarOverlayGeometry(active) {\n const ref = useRef(null);\n const [width, setWidth] = useState(280);\n const [bounds, setBounds] = useState(EMPTY_BOUNDS);\n useLayoutEffect(() => {\n if (!active) {\n setBounds(EMPTY_BOUNDS);\n return;\n }\n const surface = ref.current;\n const overlay = surface?.closest('[data-shell-overlay]');\n const frame = overlay?.parentElement;\n const sidebar = frame?.firstElementChild;\n const nativeRoot = sidebar === null || sidebar === undefined ? undefined : resolveNativeSidebarRoot(sidebar);\n if (!(overlay instanceof HTMLElement) ||\n !(sidebar instanceof HTMLElement) ||\n !(nativeRoot instanceof HTMLElement)) {\n setBounds(EMPTY_BOUNDS);\n return;\n }\n const overlayElement = overlay;\n const sidebarElement = sidebar;\n const nativeRootElement = nativeRoot;\n let frameHandle;\n let observedNewSession;\n let observedFooter;\n function update() {\n const newSession = findNewSessionAnchor(nativeRootElement);\n const footer = nativeRootElement.lastElementChild;\n observedNewSession = syncObservedElement(resizeObserver, observedNewSession, newSession);\n observedFooter = syncObservedElement(resizeObserver, observedFooter, footer);\n const nextWidth = sidebarElement.getBoundingClientRect().width;\n if (nextWidth > 0)\n setWidth(nextWidth);\n setBounds(computeOverlayBounds(asRect(overlayElement), newSession === undefined ? undefined : asRect(newSession), footer === null ? undefined : asRect(footer)));\n }\n function scheduleUpdate() {\n if (frameHandle !== undefined)\n return;\n frameHandle = requestAnimationFrame(() => {\n frameHandle = undefined;\n update();\n });\n }\n const resizeObserver = typeof ResizeObserver === 'function'\n ? new ResizeObserver(scheduleUpdate)\n : undefined;\n for (const element of [overlayElement, sidebarElement, nativeRootElement]) {\n resizeObserver?.observe(element);\n }\n update();\n const mutationObserver = typeof MutationObserver === 'function'\n ? new MutationObserver(scheduleUpdate)\n : undefined;\n mutationObserver?.observe(nativeRootElement, { childList: true, subtree: true });\n return () => {\n resizeObserver?.disconnect();\n mutationObserver?.disconnect();\n if (frameHandle !== undefined)\n cancelAnimationFrame(frameHandle);\n };\n }, [active]);\n return { ref, width, bounds };\n}\n//# sourceMappingURL=sidebar-overlay-geometry.js.map","import { useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport { deriveSessionPresentationIndex } from '../../session/session-view.js';\nimport { useSidebarOverlayGeometry } from '../../overlay/sidebar-overlay-geometry.js';\nimport { effectiveViewMode } from '../../view/view-mode.js';\nimport { EMPTY_FORK_RECOVERY_STORE, EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT, EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE, EMPTY_PERMISSION_NOTICE_SNAPSHOT, EMPTY_PERMISSION_NOTICE_SUBSCRIBE, useStableWorkspaceIds, } from '../shared.js';\nexport function useSurfaceSources({ props }) {\n const { useStore, available, manager, useSessions, useWorkspaces, forkRecovery, expandState, permissionNotice, fullAccessConfirmation, sessionOrder, } = props;\n const preferredMode = useStore((state) => state.viewMode);\n const mode = effectiveViewMode(preferredMode, available && manager !== undefined);\n const sessions = useSessions((state) => state);\n const workspaces = useWorkspaces((state) => state);\n const forkRecoveryStore = forkRecovery ?? EMPTY_FORK_RECOVERY_STORE;\n const forkRecoverySnapshot = useSyncExternalStore(forkRecoveryStore.subscribe, forkRecoveryStore.getSnapshot, forkRecoveryStore.getSnapshot);\n const currentSessionId = sessions.current;\n const workspaceIds = useStableWorkspaceIds(workspaces.items);\n const workspaceIdsRef = useRef(workspaceIds);\n workspaceIdsRef.current = workspaceIds;\n const expandSnapshot = useSyncExternalStore(expandState.subscribe, expandState.getSnapshot, expandState.getSnapshot);\n const permissionNoticeSnapshot = useSyncExternalStore(permissionNotice?.subscribe ?? EMPTY_PERMISSION_NOTICE_SUBSCRIBE, permissionNotice?.getSnapshot ?? EMPTY_PERMISSION_NOTICE_SNAPSHOT, permissionNotice?.getSnapshot ?? EMPTY_PERMISSION_NOTICE_SNAPSHOT);\n const fullAccessConfirmationSnapshot = useSyncExternalStore(fullAccessConfirmation?.subscribe ?? EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE, fullAccessConfirmation?.getSnapshot ?? EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT, fullAccessConfirmation?.getSnapshot ?? EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT);\n const fullAccessConfirmationKey = fullAccessConfirmationSnapshot === undefined\n ? ''\n : [\n fullAccessConfirmationSnapshot.workspaceId,\n fullAccessConfirmationSnapshot.worktreeId,\n fullAccessConfirmationSnapshot.sessionId,\n fullAccessConfirmationSnapshot.cwd,\n ].join('\\u0000');\n const [fullAccessAcknowledged, setFullAccessAcknowledged] = useState(false);\n useEffect(() => {\n setFullAccessAcknowledged(false);\n }, [fullAccessConfirmationKey]);\n const sessionOrderSnapshot = useSyncExternalStore(sessionOrder.subscribe, sessionOrder.getSnapshot, sessionOrder.getSnapshot);\n const sessionPresentations = useMemo(() => deriveSessionPresentationIndex(sessions), [sessions.byId]);\n const { ref, width, bounds } = useSidebarOverlayGeometry(mode === 'worktree');\n const collapsed = width <= 64;\n const archivedSessionIds = workspaces.archivedSessionIds ?? [];\n return {\n preferredMode,\n mode,\n sessions,\n workspaces,\n forkRecoveryStore,\n forkRecoverySnapshot,\n currentSessionId,\n workspaceIds,\n workspaceIdsRef,\n expandSnapshot,\n permissionNoticeSnapshot,\n fullAccessConfirmationSnapshot,\n fullAccessConfirmationKey,\n fullAccessAcknowledged,\n setFullAccessAcknowledged,\n sessionOrderSnapshot,\n sessionPresentations,\n ref,\n width,\n bounds,\n collapsed,\n archivedSessionIds,\n };\n}\n//# sourceMappingURL=useSurfaceSources.js.map","import { useCallback, useEffect } from 'react';\nimport { createDefaultWorktreeName, executeWorktreeAction, reconcileBaseBranchSelection, selectDefaultBaseBranch, toWorktreeViewError, WorktreeSessionBindingError, WorktreeSessionPermissionError, } from '../../view/worktree-view.js';\nexport function useWorktreeRegistration({ source, registrationState, read, props, mutation, session, }) {\n const { workspaces } = source;\n const { worktreeModalWorkspaceId, modalReadLoading, setSelectedBranch, setNewBranch, setImportCandidates, importCandidatesGuard, modalWorkspaceIdRef, modalReadLoader, modalReadViewRef, setWorktreeModalWorkspaceId, setModalReadError, setModalReadLoading, setWorktreeModalMode, setSelectedImportPath, importCandidates, newBranch, selectedImportPath, worktreeModalMode, selectedBranch, } = registrationState;\n const { viewByWorkspace, loadModalWorktreeView, refresh } = read;\n const { manager, createSessionForWorktree: createSessionCallback } = props;\n const { actionPending, setActionError, setActionPending } = mutation;\n const { setPendingSessionBinding } = session;\n const modalWorkspace = workspaces.items.find((workspace) => workspace.workspaceId === worktreeModalWorkspaceId);\n const modalView = worktreeModalWorkspaceId === undefined\n ? undefined\n : viewByWorkspace.get(worktreeModalWorkspaceId);\n const modalReadiness = modalView?.readiness;\n const modalSetupStatus = modalView === undefined\n ? undefined\n : modalReadiness?.status === 'ready'\n ? modalView.branches.length === 0\n ? 'noLocalBranch'\n : undefined\n : modalReadiness?.status;\n const modalCanCreate = !modalReadLoading && modalSetupStatus === undefined && modalReadiness?.status === 'ready';\n useEffect(() => {\n if (worktreeModalWorkspaceId === undefined || modalView === undefined)\n return;\n if (modalView.readiness.status !== 'ready') {\n setSelectedBranch('');\n setNewBranch('');\n return;\n }\n setSelectedBranch((current) => reconcileBaseBranchSelection(current, modalView.branches));\n setNewBranch((current) => {\n if (current.length > 0)\n return current;\n const existingNames = [\n ...modalView.branches.map((branch) => branch.name),\n ...modalView.worktrees.map((worktree) => worktree.branch),\n ];\n return createDefaultWorktreeName(existingNames);\n });\n }, [modalView, worktreeModalWorkspaceId]);\n const loadImportCandidates = useCallback(async (workspaceId) => {\n if (manager === undefined)\n return;\n setImportCandidates((current) => ({ status: 'loading', candidates: current.candidates }));\n await importCandidatesGuard.current.run(() => manager.listImportCandidates({ workspaceId }), (candidates) => {\n if (modalWorkspaceIdRef.current !== workspaceId)\n return;\n setImportCandidates({ status: 'ready', candidates });\n }, (error) => {\n if (modalWorkspaceIdRef.current !== workspaceId)\n return;\n setImportCandidates((current) => ({\n status: 'error',\n candidates: current.candidates,\n error: toWorktreeViewError(error),\n }));\n });\n }, [manager]);\n const closeWorktreeCreator = (force = false) => {\n if (actionPending && !force)\n return;\n modalReadLoader.current.invalidate();\n modalReadViewRef.current = undefined;\n importCandidatesGuard.current.invalidate();\n setWorktreeModalWorkspaceId(undefined);\n setModalReadError(undefined);\n setModalReadLoading(false);\n };\n const openWorktreeCreator = (workspace, defaults = {}) => {\n const view = viewByWorkspace.get(workspace.workspaceId);\n modalReadLoader.current.invalidate();\n modalReadViewRef.current = undefined;\n importCandidatesGuard.current.invalidate();\n setWorktreeModalWorkspaceId(workspace.workspaceId);\n setWorktreeModalMode('create');\n setImportCandidates({ status: 'idle', candidates: [] });\n setSelectedImportPath(undefined);\n setActionError(undefined);\n setModalReadError(undefined);\n setModalReadLoading(false);\n if (view === undefined) {\n setSelectedBranch(defaults.baseBranch ?? '');\n setNewBranch(defaults.newBranch ?? '');\n loadModalWorktreeView(workspace.workspaceId);\n return;\n }\n setSelectedBranch(defaults.baseBranch ?? selectDefaultBaseBranch(view.branches));\n setNewBranch(defaults.newBranch ??\n createDefaultWorktreeName([\n ...view.branches.map((branch) => branch.name),\n ...view.worktrees.map((worktree) => worktree.branch),\n ]));\n };\n const changeWorktreeModalMode = (mode) => {\n setWorktreeModalMode(mode);\n if (mode === 'import' &&\n worktreeModalWorkspaceId !== undefined &&\n importCandidates.status === 'idle') {\n void loadImportCandidates(worktreeModalWorkspaceId);\n }\n };\n const continueWorktreeRegistration = async (registeredWorktree) => {\n closeWorktreeCreator(true);\n if (createSessionCallback === undefined) {\n await refresh({\n scope: { kind: 'workspace', workspaceId: registeredWorktree.workspaceId },\n preserveCurrent: true,\n });\n setActionError({\n code: 'WORKTREE_REGISTRATION_SESSION_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n const sessionInput = {\n workspaceId: registeredWorktree.workspaceId,\n worktreeId: registeredWorktree.worktreeId,\n cwd: registeredWorktree.absolutePath,\n };\n try {\n await createSessionCallback(sessionInput);\n }\n catch (error) {\n if (error instanceof WorktreeSessionBindingError && error.retryable) {\n setPendingSessionBinding({ ...sessionInput, sessionId: error.sessionId });\n }\n if (error instanceof WorktreeSessionPermissionError && error.retryable) {\n setPendingSessionBinding({\n ...sessionInput,\n sessionId: error.sessionId,\n permissionRequired: true,\n });\n }\n throw error;\n }\n await refresh({\n scope: { kind: 'workspace', workspaceId: registeredWorktree.workspaceId },\n preserveCurrent: true,\n });\n };\n const submitWorktree = async () => {\n const worktreeName = newBranch.trim();\n const selectedImportCandidate = importCandidates.candidates.find((candidate) => candidate.absolutePath === selectedImportPath);\n if (manager === undefined || modalWorkspace === undefined)\n return;\n if (worktreeModalMode === 'create' &&\n (!modalCanCreate || selectedBranch.length === 0 || worktreeName.length === 0))\n return;\n if (worktreeModalMode === 'import' && selectedImportCandidate === undefined)\n return;\n setActionPending(true);\n setActionError(undefined);\n setPendingSessionBinding(undefined);\n try {\n const registeredWorktree = worktreeModalMode === 'create'\n ? await executeWorktreeAction(manager, {\n type: 'createWorktree',\n input: {\n workspaceId: modalWorkspace.workspaceId,\n branch: selectedBranch,\n newBranch: worktreeName,\n },\n })\n : await executeWorktreeAction(manager, {\n type: 'importWorktree',\n input: {\n workspaceId: modalWorkspace.workspaceId,\n absolutePath: selectedImportCandidate.absolutePath,\n },\n });\n if (registeredWorktree === undefined) {\n throw {\n code: 'WORKTREE_RECORD_MISSING',\n message: '',\n retryable: true,\n };\n }\n await continueWorktreeRegistration(registeredWorktree);\n }\n catch (error) {\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n return {\n modalWorkspace,\n modalView,\n modalReadiness,\n modalSetupStatus,\n modalCanCreate,\n loadImportCandidates,\n closeWorktreeCreator,\n openWorktreeCreator,\n changeWorktreeModalMode,\n continueWorktreeRegistration,\n submitWorktree,\n };\n}\n//# sourceMappingURL=useWorktreeRegistration.js.map","/** Localize the native-compatible Session status used by both surfaces. */\nexport function sessionStatusLabel(t, status) {\n switch (status.labelKey) {\n case 'running':\n return t('session.status.running');\n case 'subagentsRunning':\n return t(status.runningSubagentCount === 1\n ? 'session.status.subagentsRunning.one'\n : 'session.status.subagentsRunning.other', { n: status.runningSubagentCount });\n case 'idle':\n return t('session.status.idle');\n case 'waitingApproval':\n return t('session.status.waitingApproval');\n case 'planReview':\n return t('session.status.planReview');\n case 'waitingAnswer':\n return t('session.status.waitingAnswer');\n case 'completed':\n return t('session.status.completed');\n }\n}\n/** Localize the compact relative time shown for idle Sessions. */\nexport function sessionTimeLabel(t, value) {\n switch (value.unit) {\n case 'now':\n return t('session.time.now');\n case 'minutes':\n return t('session.time.minutes', { n: value.n });\n case 'hours':\n return t('session.time.hours', { n: value.n });\n case 'days':\n return t('session.time.days', { n: value.n });\n case 'months':\n return t('session.time.months', { n: value.n });\n case 'years':\n return t('session.time.years', { n: value.n });\n }\n}\n/** Include the native relative-time suffix used in Session hover details. */\nexport function sessionHoverTimeLabel(t, value) {\n const label = sessionTimeLabel(t, value);\n return value.unit === 'now' ? label : t('session.time.ago', { t: label });\n}\n//# sourceMappingURL=session-labels.js.map","/** Encode path segments while retaining Windows drive and directory separators. */\nexport function vscodeFolderUrl(absolutePath) {\n const windowsPath = /^[a-z]:[\\\\/]/i.test(absolutePath) || absolutePath.startsWith('\\\\\\\\');\n const path = windowsPath ? absolutePath.replaceAll('\\\\', '/') : absolutePath;\n const encoded = path.split('/').map(encodeURIComponent).join('/');\n const withDrive = windowsPath ? encoded.replace(/^([a-z])%3A/i, '$1:') : encoded;\n return `vscode://file${withDrive.startsWith('/') ? '' : '/'}${withDrive}`;\n}\n//# sourceMappingURL=vscode-url.js.map","export const OPEN_IN_APP_APPS_ROUTE = '/open-in-app/apps';\nexport const OPEN_IN_APP_OPEN_ROUTE = '/open-in-app/open';\nfunction hostBase() {\n const origin = globalThis.location?.origin;\n return origin !== undefined && origin !== 'null' ? origin : 'http://dsh.internal';\n}\nconst STORAGE_KEY = 'dsh.open-in-app.choice';\nexport class OpenInAppController {\n fetcher;\n _apps = null;\n _choice = '';\n _loading;\n _listeners = new Set();\n constructor(fetcher = (input, init) => fetch(input, init)) {\n this.fetcher = fetcher;\n try {\n if (typeof localStorage !== 'undefined') {\n this._choice = localStorage.getItem(STORAGE_KEY) ?? '';\n }\n }\n catch {\n // Ignore localStorage read errors in restricted contexts\n }\n }\n get apps() {\n return this._apps;\n }\n get choice() {\n return this._choice;\n }\n subscribe(listener) {\n this._listeners.add(listener);\n return () => {\n this._listeners.delete(listener);\n };\n }\n notify() {\n for (const listener of this._listeners) {\n listener();\n }\n }\n load() {\n this._loading ??= this.run();\n return this._loading;\n }\n choose(appId) {\n if (this._choice === appId)\n return;\n this._choice = appId;\n try {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, appId);\n }\n }\n catch {\n // Ignore localStorage write errors\n }\n this.notify();\n }\n iconUrl(appId) {\n return new URL(`/open-in-app/icon/${encodeURIComponent(appId)}`, hostBase()).href;\n }\n async launch(appId, path) {\n const body = { app: appId, path };\n const response = await this.fetcher(new URL(OPEN_IN_APP_OPEN_ROUTE, hostBase()), {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(body),\n });\n if (!response.ok)\n throw new Error(`open failed: HTTP ${String(response.status)}`);\n }\n async run() {\n let apps = [];\n try {\n const response = await this.fetcher(new URL(OPEN_IN_APP_APPS_ROUTE, hostBase()), {\n headers: { accept: 'application/json' },\n });\n if (response.ok) {\n const payload = (await response.json());\n if (Array.isArray(payload.apps)) {\n apps = payload.apps.filter((id) => typeof id === 'string');\n }\n }\n }\n catch {\n // Swallows network failures: falls back to empty apps list\n }\n this._apps = apps;\n this.notify();\n }\n}\nexport const defaultOpenInAppController = new OpenInAppController();\n//# sourceMappingURL=open-in-app-controller.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from 'react';\nimport { IconChevronDownOutline14, Menu, } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { vscodeFolderUrl } from './vscode-url.js';\nimport { defaultOpenInAppController } from './open-in-app-controller.js';\nimport css from './open-in-app.css';\nconst APP_NAMES = {\n cursor: 'Cursor',\n vscode: 'VS Code',\n vscodeinsiders: 'VS Code Insiders',\n windsurf: 'Windsurf',\n zed: 'Zed',\n sublimetext: 'Sublime Text',\n xcode: 'Xcode',\n androidstudio: 'Android Studio',\n intellij: 'IntelliJ IDEA',\n pycharm: 'PyCharm',\n webstorm: 'WebStorm',\n phpstorm: 'PhpStorm',\n goland: 'GoLand',\n rider: 'Rider',\n rustrover: 'RustRover',\n fork: 'Fork',\n sourcetree: 'Sourcetree',\n github: 'GitHub Desktop',\n tower: 'Tower',\n gitkraken: 'GitKraken',\n smartgit: 'SmartGit',\n sublimemerge: 'Sublime Merge',\n ghostty: 'Ghostty',\n warp: 'Warp',\n iterm: 'iTerm2',\n kitty: 'kitty',\n terminal: 'Terminal',\n finder: 'Finder',\n explorer: 'Explorer',\n};\nconst failedIcons = new Set();\nfunction AppIcon({ id, url, size }) {\n const [failed, setFailed] = useState(failedIcons.has(id));\n if (failed) {\n return (_jsx(\"svg\", { width: size, height: size, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1.8, className: css.icon, \"aria-hidden\": \"true\", children: _jsx(\"rect\", { x: \"3\", y: \"3\", width: \"18\", height: \"18\", rx: \"5\" }) }));\n }\n return (_jsx(\"img\", { src: url, width: size, height: size, className: css.icon, alt: \"\", \"aria-hidden\": \"true\", draggable: false, onError: () => {\n failedIcons.add(id);\n setFailed(true);\n } }));\n}\nconst BUSY_DRESS_DELAY_MS = 250;\nexport function OpenInAppButton({ path, t, controller = defaultOpenInAppController, }) {\n useEffect(() => {\n void controller.load();\n }, [controller]);\n const appsSnapshot = useSyncExternalStore((onStoreChange) => controller.subscribe(onStoreChange), () => controller.apps, () => null);\n const choiceSnapshot = useSyncExternalStore((onStoreChange) => controller.subscribe(onStoreChange), () => controller.choice, () => '');\n const [open, setOpen] = useState(false);\n const [phase, setPhase] = useState('idle');\n const inFlight = useRef(false);\n const busyTimer = useRef(undefined);\n const errorTimer = useRef(undefined);\n useEffect(() => () => {\n clearTimeout(busyTimer.current);\n clearTimeout(errorTimer.current);\n }, []);\n // If host has no apps or request failed, fallback to native vscode:// link\n if (appsSnapshot === null || appsSnapshot.length === 0) {\n return (_jsx(\"a\", { className: `${css.split} ${css.fallback}`, href: vscodeFolderUrl(path), \"data-dashboard-action\": \"open-editor\", children: _jsx(\"span\", { className: css.main, children: t('dashboard.openEditor') }) }));\n }\n const validApps = appsSnapshot;\n const currentAppId = validApps.find((appId) => appId === choiceSnapshot) ?? validApps[0] ?? 'vscode';\n const currentAppName = APP_NAMES[currentAppId] ?? currentAppId;\n const buttonLabel = t('dashboard.openIn', { app: currentAppName });\n const launch = (appId) => {\n if (inFlight.current)\n return;\n inFlight.current = true;\n clearTimeout(errorTimer.current);\n clearTimeout(busyTimer.current);\n busyTimer.current = setTimeout(() => {\n setPhase('busy');\n }, BUSY_DRESS_DELAY_MS);\n controller\n .launch(appId, path)\n .then(() => {\n inFlight.current = false;\n clearTimeout(busyTimer.current);\n setPhase('idle');\n })\n .catch(() => {\n inFlight.current = false;\n clearTimeout(busyTimer.current);\n setPhase('error');\n clearTimeout(errorTimer.current);\n errorTimer.current = setTimeout(() => {\n setPhase('idle');\n }, 2000);\n });\n };\n const menuItems = validApps.map((appId) => ({\n id: appId,\n label: APP_NAMES[appId] ?? appId,\n icon: _jsx(AppIcon, { id: appId, url: controller.iconUrl(appId), size: 16 }),\n }));\n return (_jsx(\"div\", { className: css.control, onKeyDown: (event) => {\n if (event.key === 'Escape' && open) {\n event.stopPropagation();\n setOpen(false);\n }\n }, children: _jsx(Menu, { open: open, align: \"end\", dense: true, onClose: () => {\n setOpen(false);\n }, items: menuItems, selectedId: currentAppId, onSelect: (id) => {\n setOpen(false);\n if (inFlight.current)\n return;\n controller.choose(id);\n launch(id);\n }, anchor: _jsxs(\"div\", { className: css.split, \"data-dashboard-action\": \"open-editor\", children: [_jsxs(\"button\", { type: \"button\", className: css.main, \"data-state\": phase, disabled: phase === 'busy', \"aria-label\": buttonLabel, title: buttonLabel, onClick: () => {\n launch(currentAppId);\n }, children: [_jsx(AppIcon, { id: currentAppId, url: controller.iconUrl(currentAppId), size: 16 }), _jsx(\"span\", { children: buttonLabel })] }), validApps.length > 1 && (_jsx(\"button\", { type: \"button\", className: css.chevron, \"aria-expanded\": open, \"aria-haspopup\": \"menu\", \"aria-label\": t('dashboard.editorMenu'), disabled: phase === 'busy', onClick: () => {\n setOpen((prev) => !prev);\n }, children: _jsx(IconChevronDownOutline14, { size: 12 }) }))] }) }) }));\n}\n//# sourceMappingURL=OpenInAppButton.js.map","// Upstream AppFrame's 8px Sidebar handle is centered on the track boundary.\n// Keep its 4px right half outside this higher stacking-context overlay.\nconst SIDEBAR_RESIZE_HANDLE_HALF_WIDTH = 4;\n/** Reversible presentation only: leave the native React tree and Session alive. */\nexport function concealDashboardBackground(element) {\n const visibility = element.style.getPropertyValue('visibility');\n const priority = element.style.getPropertyPriority('visibility');\n const inert = element.getAttribute('inert');\n const hidden = element.getAttribute('aria-hidden');\n element.style.setProperty('visibility', 'hidden');\n element.setAttribute('inert', '');\n element.setAttribute('aria-hidden', 'true');\n return () => {\n if (element.style.getPropertyValue('visibility') === 'hidden') {\n if (visibility)\n element.style.setProperty('visibility', visibility, priority);\n else\n element.style.removeProperty('visibility');\n }\n for (const [name, value] of [\n ['inert', inert],\n ['aria-hidden', hidden],\n ]) {\n if (value === null)\n element.removeAttribute(name);\n else\n element.setAttribute(name, value);\n }\n };\n}\nexport function isRightSidebarOpenFromDom(frame, rightbar) {\n if (typeof frame.querySelector === 'function') {\n if (frame.querySelector('[data-sidebar-right-open]') !== null) {\n return true;\n }\n if (frame.hasAttribute('data-rightbar-collapsed')) {\n return false;\n }\n }\n if (frame.getAttribute?.('data-rightbar-collapsed') !== null) {\n return false;\n }\n if (rightbar instanceof HTMLElement) {\n if (rightbar.getAttribute?.('data-sidebar-right-open') !== null) {\n return true;\n }\n }\n return false;\n}\n/** Layout seam shared with the existing Sidebar overlay; fail closed on frame/center loss. */\nexport function mountDashboardOverlay(surface, onPlacement, options) {\n const overlay = surface.closest('[data-shell-overlay]');\n const frame = overlay?.parentElement;\n if (!overlay || !frame) {\n onPlacement(undefined);\n options?.onRightSidebarChange?.(false);\n return () => { };\n }\n const hidden = new Map();\n let observed = [];\n let scheduled;\n let disposed = false;\n let lastRightSidebarOpen;\n const restore = () => {\n for (const cleanup of hidden.values())\n cleanup();\n hidden.clear();\n };\n const schedule = () => {\n if (disposed || scheduled !== undefined)\n return;\n scheduled = requestAnimationFrame(() => {\n scheduled = undefined;\n update();\n });\n };\n const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(schedule);\n const update = () => {\n if (disposed)\n return;\n // AppFrame owns Sidebar | CenterColumn | [RightbarColumn] | shell.overlay.\n // The native rightbar is absent on a page with no current Session, but the\n // Dashboard still needs the same center-to-frame placement in that layout.\n // Do not depend on generated CSS class names or mutate slot registrations.\n const sidebar = frame.firstElementChild;\n const center = sidebar?.nextElementSibling;\n const rightbar = center?.nextElementSibling;\n const hasRightbar = rightbar instanceof HTMLElement &&\n rightbar !== overlay &&\n rightbar.nextElementSibling === overlay;\n const hasNoRightbar = rightbar === overlay;\n const valid = overlay.isConnected &&\n overlay.parentElement === frame &&\n sidebar instanceof HTMLElement &&\n center instanceof HTMLElement &&\n (hasRightbar || hasNoRightbar);\n const nextObserved = valid\n ? hasRightbar\n ? [overlay, sidebar, center, rightbar]\n : [overlay, sidebar, center]\n : [frame];\n for (const old of observed)\n if (!nextObserved.includes(old))\n resize?.unobserve(old);\n for (const next of nextObserved)\n if (!observed.includes(next))\n resize?.observe(next);\n observed = nextObserved;\n if (!valid) {\n restore();\n onPlacement(undefined);\n if (lastRightSidebarOpen) {\n lastRightSidebarOpen = false;\n options?.onRightSidebarChange?.(false);\n }\n return;\n }\n const box = overlay.getBoundingClientRect();\n const boundary = sidebar.getBoundingClientRect();\n const rightBoundary = hasRightbar && rightbar instanceof HTMLElement ? rightbar.getBoundingClientRect().left : box.right;\n const left = Math.max(0, boundary.right - box.left + SIDEBAR_RESIZE_HANDLE_HALF_WIDTH);\n const rightEdge = Math.min(box.right, rightBoundary);\n const width = rightEdge - box.left - left;\n if (width <= 0 || box.height <= 0) {\n restore();\n onPlacement(undefined);\n return;\n }\n for (const [element, cleanup] of hidden) {\n if (element !== center) {\n cleanup();\n hidden.delete(element);\n }\n }\n if (!hidden.has(center))\n hidden.set(center, concealDashboardBackground(center));\n onPlacement({ left, top: 0, width, height: box.height });\n const isRightSidebarOpen = options?.isRightSidebarExpanded !== undefined\n ? options.isRightSidebarExpanded()\n : isRightSidebarOpenFromDom(frame, hasRightbar ? rightbar : undefined);\n if (lastRightSidebarOpen !== isRightSidebarOpen) {\n lastRightSidebarOpen = isRightSidebarOpen;\n options?.onRightSidebarChange?.(isRightSidebarOpen);\n }\n };\n const mutation = typeof MutationObserver === 'undefined' ? undefined : new MutationObserver(schedule);\n try {\n mutation?.observe(frame, {\n childList: true,\n attributes: true,\n subtree: true,\n attributeFilter: [\n 'data-rightbar-collapsed',\n 'data-sidebar-right-open',\n 'data-sidebar-right-panel',\n ],\n });\n }\n catch {\n mutation?.observe(frame, { childList: true });\n }\n // Frame replacement may detach all original anchors at once.\n if (frame.parentElement) {\n try {\n mutation?.observe(frame.parentElement, { childList: true });\n }\n catch {\n // ignore\n }\n }\n update();\n return () => {\n disposed = true;\n resize?.disconnect();\n mutation?.disconnect();\n if (scheduled !== undefined)\n cancelAnimationFrame(scheduled);\n restore();\n if (lastRightSidebarOpen) {\n lastRightSidebarOpen = false;\n options?.onRightSidebarChange?.(false);\n }\n };\n}\n//# sourceMappingURL=dashboard-overlay.js.map","export function selectWorktreeAcquisitionFacts(record) {\n return {\n timestampKind: record.source === 'external' ? 'imported' : 'created',\n ...(record.source === 'external'\n ? record.importedAt === undefined\n ? {}\n : { timestamp: record.importedAt }\n : record.createdAt === undefined\n ? {}\n : { timestamp: record.createdAt }),\n ...(record.baseBranch === undefined ? {} : { baseBranch: record.baseBranch }),\n };\n}\n//# sourceMappingURL=worktree-acquisition-facts.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect, useRef, useState } from 'react';\nimport styles from './dashboard.css';\nexport function WorktreeInstructions({ value, onSave, t, disabled, }) {\n const [saved, setSaved] = useState(value);\n const [draft, setDraft] = useState();\n const [error, setError] = useState(false);\n const [pending, setPending] = useState(false);\n const busy = useRef(false);\n const alive = useRef(true);\n useEffect(() => {\n alive.current = true;\n return () => {\n alive.current = false;\n };\n }, []);\n useEffect(() => {\n setSaved(value);\n }, [value]);\n const expected = useRef(value);\n const save = async () => {\n if (busy.current || draft === undefined || !onSave)\n return;\n busy.current = true;\n setPending(true);\n setError(false);\n try {\n const result = await onSave(draft, expected.current);\n if (alive.current) {\n setSaved(result);\n setDraft(undefined);\n }\n }\n catch {\n if (alive.current)\n setError(true);\n }\n finally {\n busy.current = false;\n if (alive.current)\n setPending(false);\n }\n };\n return (_jsxs(\"div\", { children: [_jsx(\"p\", { children: t('dashboard.instructionsHint') }), draft === undefined ? (_jsxs(_Fragment, { children: [_jsx(\"p\", { className: styles.dashboardInstructionsText, children: saved || t('dashboard.noInstructions') }), _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: disabled || !onSave, onClick: () => {\n expected.current = saved;\n setDraft(saved);\n setError(false);\n }, children: t('dashboard.edit') })] })) : (_jsxs(_Fragment, { children: [_jsx(\"textarea\", { className: styles.dashboardInstructionsInput, \"aria-label\": t('dashboard.instructions'), value: draft, maxLength: 32000, rows: 8, disabled: pending, onChange: (event) => setDraft(event.target.value) }), _jsxs(\"div\", { className: styles.dashboardInstructionActions, children: [_jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: pending || disabled, onClick: () => void save(), children: t(pending ? 'dashboard.savingInstructions' : 'dashboard.saveInstructions') }), _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: pending, onClick: () => {\n setDraft(undefined);\n setError(false);\n }, children: t('dashboard.cancelInstructions') })] }), error && _jsx(\"p\", { role: \"alert\", children: t('dashboard.instructionsSaveFailed') })] }))] }));\n}\n//# sourceMappingURL=WorktreeInstructions.js.map","/**\n * Shared Git-tab facts. These helpers stay free of React and DOM APIs so the\n * Dashboard's branch, Main, and line-total rules have one definition.\n */\n/** Main (Local) Worktree ids never carry a Worktree-relative Git comparison. */\nexport function isMainWorktreeId(worktreeId) {\n return worktreeId === 'main' || worktreeId.startsWith('main:');\n}\n/** Trim a branch value and drop empty strings. */\nexport function normalizeBranch(branch) {\n const normalized = branch?.trim();\n return normalized === undefined || normalized.length === 0 ? undefined : normalized;\n}\n/** A baseline equal to the current Worktree branch is not a usable default. */\nexport function normalizeBaselineBranch(value, currentBranch) {\n const baseline = normalizeBranch(value);\n return baseline === undefined || baseline === currentBranch ? undefined : baseline;\n}\n/** Sum additions/deletions, or undefined when any file count is unknown. */\nexport function sumLineTotals(files) {\n let additions = 0;\n let deletions = 0;\n for (const file of files) {\n if (file.additions === undefined || file.deletions === undefined)\n return undefined;\n additions += file.additions;\n deletions += file.deletions;\n }\n return { additions, deletions };\n}\n//# sourceMappingURL=git-facts.js.map","const byName = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\nfunction compareNodes(left, right) {\n if (left.kind !== right.kind)\n return left.kind === 'folder' ? -1 : 1;\n return byName.compare(left.name, right.name);\n}\nfunction materialize(nodes) {\n return [...nodes.values()].sort(compareNodes).map((node) => node.kind === 'folder'\n ? {\n kind: 'folder',\n name: node.name,\n path: node.path,\n children: materialize(node.children),\n }\n : node);\n}\n/** Build a stable, directory-first tree from Git's slash-separated relative paths. */\nexport function buildGitFileTree(files) {\n const roots = new Map();\n for (const file of files) {\n const segments = file.path.split('/').filter((segment) => segment.length > 0);\n if (segments.length === 0) {\n roots.set(file.path, { kind: 'file', name: file.path, file });\n continue;\n }\n let nodes = roots;\n let directoryPath = '';\n for (let index = 0; index < segments.length - 1; index += 1) {\n const segment = segments[index];\n directoryPath = directoryPath.length === 0 ? segment : directoryPath + '/' + segment;\n const folderKey = 'folder:' + segment;\n const existing = nodes.get(folderKey);\n if (existing?.kind === 'folder') {\n nodes = existing.children;\n continue;\n }\n const folder = {\n kind: 'folder',\n name: segment,\n path: directoryPath,\n children: new Map(),\n };\n nodes.set(folderKey, folder);\n nodes = folder.children;\n }\n const name = segments[segments.length - 1];\n const fileKey = 'file:' + name + ':' + file.path + ':' + (file.oldPath ?? '');\n nodes.set(fileKey, { kind: 'file', name, file });\n }\n return materialize(roots);\n}\n//# sourceMappingURL=git-file-tree.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as primitives from '@deepseek-ai/dsh-client-ui-primitives';\nfunction FallbackFileIcon({ className, size = 16 }) {\n return (_jsxs(\"svg\", { viewBox: \"0 0 16 16\", width: size, height: size, fill: \"none\", stroke: \"currentColor\", strokeWidth: \"1.2\", strokeLinecap: \"round\", strokeLinejoin: \"round\", className: className, \"aria-hidden\": \"true\", children: [_jsx(\"path\", { d: \"M3 2h6l4 4v8H3V2z\" }), _jsx(\"path\", { d: \"M9 2v4h4\" })] }));\n}\n/**\n * Standard DSH file type icon with fallback.\n * Uses FileTypeIcon from @deepseek-ai/dsh-client-ui-primitives when available,\n * and falls back to a clean SVG file glyph in older runtimes.\n */\n/**\n * Optional native primitives, resolved once at module scope instead of on every\n * rendered changed-file row.\n */\nconst primitivesRecord = primitives;\nconst FileTypeIcon = primitivesRecord.FileTypeIcon;\nconst classifyFileType = primitivesRecord.classifyFileType;\nexport function GitFileTypeIcon({ path, className, size = 16 }) {\n if (typeof FileTypeIcon === 'function' && typeof classifyFileType === 'function') {\n return _jsx(FileTypeIcon, { kind: classifyFileType(path), size: size, className: className });\n }\n return _jsx(FallbackFileIcon, { className: className, size: size });\n}\n//# sourceMappingURL=GitFileTypeIcon.js.map","import { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport styles from './worktree-git.css';\n/** Compact, color-coded Git line counts shared by overview and changed-file rows. */\nexport function GitLineStats({ additions, deletions, ariaLabel, className, }) {\n if (additions === undefined && deletions === undefined)\n return null;\n return (_jsxs(\"span\", { className: [styles.gitLineStats, className].filter(Boolean).join(' '), \"aria-label\": ariaLabel, \"data-dashboard-git-line-stats\": true, children: [additions !== undefined && (_jsxs(\"span\", { className: styles.gitLineAdded, \"data-dashboard-git-additions\": true, children: [\"+\", additions] })), deletions !== undefined && (_jsxs(\"span\", { className: styles.gitLineRemoved, \"data-dashboard-git-deletions\": true, children: [\"-\", deletions] }))] }));\n}\n//# sourceMappingURL=GitLineStats.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconFolderClose16, IconFolderOpen16 } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useId, useMemo, useState } from 'react';\nimport { buildGitFileTree } from './git-file-tree.js';\nimport { GitFileTypeIcon } from './GitFileTypeIcon.js';\nimport { GitLineStats } from './GitLineStats.js';\nimport styles from './worktree-git.css';\n/** Localized status wording for the row title and accessible label, so the color cue is still announced. */\nconst STATUS_LABELS = {\n added: 'dashboard.git.status.added',\n modified: 'dashboard.git.status.modified',\n deleted: 'dashboard.git.status.deleted',\n renamed: 'dashboard.git.status.renamed',\n copied: 'dashboard.git.status.copied',\n 'type-changed': 'dashboard.git.status.typeChanged',\n};\nfunction shortCommit(commit) {\n return commit.slice(0, 7);\n}\nfunction fileName(path) {\n const segments = path.split('/').filter((segment) => segment.length > 0);\n return segments.at(-1) ?? path;\n}\nfunction fileTitle(file) {\n return file.oldPath !== undefined && file.oldPath !== file.path\n ? file.oldPath + ' → ' + file.path\n : file.path;\n}\nfunction fileLabel(file) {\n const name = fileName(file.path);\n if (file.oldPath === undefined || file.oldPath === file.path)\n return name;\n return (_jsxs(_Fragment, { children: [fileName(file.oldPath), \" \", _jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u2192\" }), \" \", name] }));\n}\nfunction folderId(treeId, path) {\n return 'dashboard-git-folder-' + treeId + '-' + encodeURIComponent(path);\n}\nfunction renderTreeNodes({ treeId, level, nodes, collapsedFolders, toggleFolder, selectedPath, onSelect, t, }) {\n return nodes.map((node, index) => {\n if (node.kind === 'folder') {\n const collapsed = collapsedFolders.has(node.path);\n const childrenId = folderId(treeId, node.path);\n return (_jsxs(\"li\", { className: styles.gitFolder, role: \"treeitem\", \"aria-level\": level, \"aria-posinset\": index + 1, \"aria-setsize\": nodes.length, \"aria-expanded\": !collapsed, children: [_jsxs(\"button\", { type: \"button\", className: styles.gitFolderButton, \"data-dashboard-git-folder\": node.path, \"aria-expanded\": !collapsed, \"aria-controls\": childrenId, onClick: () => toggleFolder(node.path), onKeyDown: (event) => {\n if (event.key === 'ArrowRight' && collapsed) {\n event.preventDefault();\n toggleFolder(node.path);\n }\n else if (event.key === 'ArrowLeft' && !collapsed) {\n event.preventDefault();\n toggleFolder(node.path);\n }\n }, children: [_jsx(\"span\", { className: styles.gitFolderIcon, \"aria-hidden\": \"true\", children: collapsed ? _jsx(IconFolderClose16, {}) : _jsx(IconFolderOpen16, {}) }), _jsx(\"span\", { className: styles.gitFolderName, title: node.path, children: node.name })] }), _jsx(\"ul\", { id: childrenId, className: styles.gitFolderChildren, role: \"group\", hidden: collapsed, children: renderTreeNodes({\n treeId,\n level: level + 1,\n nodes: node.children,\n collapsedFolders,\n toggleFolder,\n selectedPath,\n onSelect,\n t,\n }) })] }, 'folder:' + node.path));\n }\n const { file } = node;\n const isSelected = selectedPath === file.path || selectedPath === file.oldPath;\n // The row color carries the status visually; the localized wording stays in the\n // title and accessible label so the row remains readable without color.\n const statusText = fileTitle(file) + ' · ' + t(STATUS_LABELS[file.status]);\n return (_jsx(\"li\", { role: \"treeitem\", \"aria-level\": level, \"aria-posinset\": index + 1, \"aria-setsize\": nodes.length, \"aria-selected\": isSelected, children: _jsxs(\"button\", { type: \"button\", \"aria-selected\": isSelected, \"data-dashboard-git-file\": file.path, \"aria-label\": statusText, title: statusText, onClick: () => onSelect(file.path), children: [_jsx(\"span\", { className: styles.gitFileIcon, \"aria-hidden\": \"true\", children: _jsx(GitFileTypeIcon, { path: file.path, className: styles.gitFileIconGlyph }) }), _jsx(\"span\", { className: styles.gitFilePath, \"data-status\": file.status, title: statusText, children: fileLabel(file) }), _jsx(GitLineStats, { additions: file.additions, deletions: file.deletions, ariaLabel: file.additions === undefined || file.deletions === undefined\n ? undefined\n : t('dashboard.git.lineStats', { additions: file.additions, deletions: file.deletions }) }), file.commits !== undefined && file.commits.length > 0 && (_jsx(\"code\", { className: styles.gitFileContributors, title: file.commits.join(', '), children: file.commits.map(shortCommit).join(', ') }))] }) }, 'file:' + (file.oldPath ?? '') + '\\u0000' + file.path));\n });\n}\n/** Changed-file tree; only paths returned by Host are selectable. */\nexport function GitChangedFiles({ files, selectedPath, onSelect, t }) {\n const treeInstanceId = useId().replaceAll(':', '');\n const [collapsedFolders, setCollapsedFolders] = useState(() => new Set());\n // Building the tree sorts every folder, so it is derived once per file list\n // instead of on each render of the surrounding panel.\n const tree = useMemo(() => buildGitFileTree(files), [files]);\n const toggleFolder = (path) => {\n setCollapsedFolders((previous) => {\n const next = new Set(previous);\n if (next.has(path))\n next.delete(path);\n else\n next.add(path);\n return next;\n });\n };\n return (_jsx(\"ul\", { className: styles.gitChangedFileList, role: \"tree\", \"aria-label\": t('dashboard.git.changedFiles'), \"data-dashboard-git-file-tree\": true, children: renderTreeNodes({\n treeId: treeInstanceId,\n level: 1,\n nodes: tree,\n collapsedFolders,\n toggleFolder,\n selectedPath,\n onSelect,\n t,\n }) }));\n}\n//# sourceMappingURL=GitChangedFiles.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useRef } from 'react';\nimport styles from './worktree-git.css';\nfunction commitDate(value) {\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString();\n}\n/** Keyboard-navigable, optionally multi-selectable, graph-free commit list for the Dashboard. */\nexport function GitCommitList({ commits, selectedCommit, selectedCommits = [], multiSelect = false, onSelect, onToggle, t }) {\n const itemRefs = useRef([]);\n const move = (index, direction) => {\n const nextIndex = direction === 'first'\n ? 0\n : direction === 'last'\n ? commits.length - 1\n : Math.max(0, Math.min(commits.length - 1, index + direction));\n itemRefs.current[nextIndex]?.focus();\n };\n const pick = (commit) => {\n // The working tree is a single live target, so it always replaces the selection.\n if (!multiSelect || commit.kind === 'working-tree' || onToggle === undefined)\n onSelect(commit.sha);\n else\n onToggle(commit.sha);\n };\n return (_jsx(\"ul\", { className: styles.gitCommitList, role: \"listbox\", \"aria-multiselectable\": multiSelect, \"data-dashboard-git-commit-multiselect\": multiSelect ? 'on' : 'off', \"aria-label\": t('dashboard.git.commits'), \"aria-describedby\": multiSelect ? 'dashboard-git-commit-selection-hint' : undefined, children: commits.map((commit, index) => {\n const isWorkingTree = commit.kind === 'working-tree';\n const isSelected = isWorkingTree\n ? selectedCommit === commit.sha\n : selectedCommits.includes(commit.sha);\n return (_jsx(\"li\", { children: _jsxs(\"button\", { ref: (element) => { itemRefs.current[index] = element; }, type: \"button\", role: \"option\", \"aria-selected\": isSelected, \"aria-posinset\": index + 1, \"aria-setsize\": commits.length, \"data-dashboard-git-commit\": commit.sha, \"data-dashboard-git-commit-kind\": commit.kind ?? 'commit', onClick: () => pick(commit), onKeyDown: (event) => {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n move(index, -1);\n }\n else if (event.key === 'ArrowDown') {\n event.preventDefault();\n move(index, 1);\n }\n else if (event.key === 'Home') {\n event.preventDefault();\n move(index, 'first');\n }\n else if (event.key === 'End') {\n event.preventDefault();\n move(index, 'last');\n }\n else if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n pick(commit);\n }\n }, children: [multiSelect && (_jsx(\"span\", { className: styles.gitCommitSelectionMark, \"aria-hidden\": \"true\", children: isSelected ? '✓' : '○' })), _jsx(\"span\", { className: styles.gitCommitSubject, children: isWorkingTree ? t('dashboard.git.uncommittedChanges') : commit.subject || t('dashboard.git.untitledCommit') }), _jsx(\"span\", { className: styles.gitCommitMeta, children: isWorkingTree ? (_jsx(\"span\", { className: styles.gitCommitWorkingTree, children: t('dashboard.git.workingTree') })) : (_jsxs(_Fragment, { children: [_jsx(\"code\", { children: commit.sha.slice(0, 7) }), _jsx(\"span\", { children: commit.authorName }), _jsx(\"time\", { dateTime: commit.authoredAt, title: commitDate(commit.authoredAt), children: commitDate(commit.authoredAt) })] })) })] }) }, commit.sha));\n }) }));\n}\n//# sourceMappingURL=GitCommitList.js.map","const HUNK_HEADER = /^@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/u;\n/** Parse only the small unified-diff subset needed by the V1 plain-text renderer. */\nexport function parseUnifiedDiff(patch) {\n const hunks = [];\n let current;\n let oldLine = 0;\n let newLine = 0;\n const flush = () => {\n if (current === undefined)\n return;\n hunks.push({\n oldStart: current.oldStart,\n oldLines: current.oldLines,\n newStart: current.newStart,\n newLines: current.newLines,\n lines: current.lines,\n });\n current = undefined;\n };\n for (const rawLine of patch.split(/\\r?\\n/u)) {\n const header = HUNK_HEADER.exec(rawLine);\n if (header !== null) {\n flush();\n oldLine = Number(header[1]);\n newLine = Number(header[3]);\n current = {\n oldStart: oldLine,\n oldLines: Number(header[2] ?? '1'),\n newStart: newLine,\n newLines: Number(header[4] ?? '1'),\n lines: [],\n };\n continue;\n }\n if (current === undefined || rawLine === '\\\')\n continue;\n const marker = rawLine[0];\n const text = rawLine.slice(1);\n if (marker === ' ') {\n current.lines.push({ type: 'context', oldLine, newLine, text });\n oldLine += 1;\n newLine += 1;\n }\n else if (marker === '+') {\n current.lines.push({ type: 'add', newLine, text });\n newLine += 1;\n }\n else if (marker === '-') {\n current.lines.push({ type: 'delete', oldLine, text });\n oldLine += 1;\n }\n }\n flush();\n return hunks;\n}\n//# sourceMappingURL=git-diff-parser.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { IconRightUpOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useEffect, useMemo, useState } from 'react';\nimport { parseUnifiedDiff } from './git-diff-parser.js';\nimport { GitFileTypeIcon } from './GitFileTypeIcon.js';\nimport styles from './worktree-git.css';\n/**\n * Rendering budget for one patch. The provider already bounds patch bytes, but a\n * large summary can still hold thousands of lines, so the panel folds hunks\n * beyond this budget and offers to render the rest on request.\n */\nconst MAX_RENDERED_DIFF_LINES = 2000;\nfunction hunkLabel(hunk) {\n return '@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@';\n}\nfunction shortCommit(commit) {\n return commit.slice(0, 7);\n}\n/** Fold whole hunks once the render budget is reached. */\nfunction limitHunks(hunks, maxLines) {\n const visible = [];\n let rendered = 0;\n let hiddenLines = 0;\n for (const hunk of hunks) {\n const cost = hunk.lines.length + 1;\n if (rendered < maxLines) {\n visible.push(hunk);\n rendered += cost;\n continue;\n }\n hiddenLines += cost;\n }\n return { hunks: visible, hiddenLines };\n}\n/** Render one unified patch as escaped plain text with lightweight line numbers. */\nfunction DiffHunks({ patch, t }) {\n const hunks = useMemo(() => parseUnifiedDiff(patch), [patch]);\n const [expanded, setExpanded] = useState(false);\n useEffect(() => {\n setExpanded(false);\n }, [patch]);\n if (hunks.length === 0) {\n return _jsx(\"pre\", { className: styles.gitRawDiff, children: patch || t('dashboard.git.emptyDiff') });\n }\n const limited = expanded ? { hunks, hiddenLines: 0 } : limitHunks(hunks, MAX_RENDERED_DIFF_LINES);\n return (_jsxs(_Fragment, { children: [limited.hunks.map((hunk, hunkIndex) => (_jsxs(\"section\", { className: styles.gitDiffHunk, children: [_jsx(\"div\", { className: styles.gitDiffHunkHeader, children: hunkLabel(hunk) }), hunk.lines.map((line, lineIndex) => (_jsxs(\"div\", { className: styles.gitDiffLine + ' ' + styles['gitDiffLine' + line.type], children: [_jsx(\"span\", { className: styles.gitDiffLineNumber, children: line.type === 'add' ? '' : line.oldLine }), _jsx(\"span\", { className: styles.gitDiffLineNumber, children: line.type === 'delete' ? '' : line.newLine }), _jsxs(\"code\", { children: [_jsx(\"span\", { \"aria-hidden\": \"true\", children: line.type === 'context' ? ' ' : line.type === 'add' ? '+' : '-' }), line.text] })] }, line.type + '-' + lineIndex)))] }, hunk.oldStart + '-' + hunk.newStart + '-' + hunkIndex))), limited.hiddenLines > 0 && (_jsxs(\"div\", { className: styles.gitDiffFolded, children: [_jsx(\"span\", { children: t('dashboard.git.diffLinesHidden', { n: limited.hiddenLines }) }), _jsx(\"button\", { type: \"button\", className: styles.gitDiffShowAll, \"data-dashboard-git-show-full-diff\": true, onClick: () => setExpanded(true), children: t('dashboard.git.showFullDiff') })] }))] }));\n}\nfunction DiffSegment({ segment, t }) {\n return (_jsxs(\"section\", { className: styles.gitDiffSegment, children: [_jsxs(\"div\", { className: styles.gitDiffSegmentHeader, children: [t('dashboard.git.commitDiffSection'), \" \", _jsx(\"code\", { children: shortCommit(segment.commit) })] }), segment.binary ? (_jsx(\"div\", { className: styles.gitDiffMessage, children: t('dashboard.git.binary') })) : segment.truncated ? (_jsx(\"div\", { className: styles.gitDiffMessage, children: t('dashboard.git.diffTruncated') })) : (_jsx(DiffHunks, { patch: segment.patch, t: t }))] }));\n}\n/** Render unified diff content as escaped plain text with lightweight line numbers. */\nexport function GitDiffView({ diff, onOpenFile, t }) {\n if (diff === undefined) {\n return _jsx(\"div\", { className: styles.gitDiffEmpty, children: t('dashboard.git.selectFile') });\n }\n const toolbar = (_jsxs(\"div\", { className: styles.gitDiffToolbar, children: [_jsxs(\"span\", { className: styles.gitDiffPath, title: diff.path, children: [_jsx(GitFileTypeIcon, { path: diff.path, className: styles.gitFileIconGlyph }), diff.path] }), onOpenFile !== undefined && (_jsxs(\"button\", { type: \"button\", className: styles.gitDiffOpenInSidebar, onClick: () => onOpenFile(diff.path), title: t('dashboard.git.openInSidebar'), \"data-dashboard-git-open-file\": diff.path, children: [_jsx(IconRightUpOutline16, { size: 14, className: styles.gitDiffOpenIcon }), _jsx(\"span\", { children: t('dashboard.git.openInSidebar') })] }))] }));\n if (diff.segments !== undefined) {\n return (_jsxs(\"div\", { className: styles.gitDiffContainer, children: [toolbar, _jsx(\"div\", { className: styles.gitDiff, role: \"document\", \"aria-label\": t('dashboard.git.diff'), children: diff.segments.map((segment, index) => (_jsx(DiffSegment, { segment: segment, t: t }, segment.commit + '-' + index))) })] }));\n }\n if (diff.binary || diff.truncated) {\n return (_jsxs(\"div\", { className: styles.gitDiffContainer, children: [toolbar, _jsx(\"div\", { className: styles.gitDiffMessage, children: diff.binary ? t('dashboard.git.binary') : t('dashboard.git.diffTruncated') })] }));\n }\n return (_jsxs(\"div\", { className: styles.gitDiffContainer, children: [toolbar, _jsx(\"div\", { className: styles.gitDiff, role: \"document\", \"aria-label\": t('dashboard.git.diff'), children: _jsx(DiffHunks, { patch: diff.patch, t: t }) })] }));\n}\n//# sourceMappingURL=GitDiffView.js.map","/**\n * Geometry for the two draggable Git dividers. Each divider splits one grid axis\n * of the panel into a leading pane, the divider itself, and a trailing pane.\n * These helpers stay free of DOM and React APIs so the drag math is testable.\n */\n/** Share of the stacked axis, in percent, given to the commits pane by default. */\nexport const GIT_SPLIT_DEFAULT_ROW_PERCENT = 45;\n/** Share of the side-by-side axis, in percent, given to the left column by default. */\nexport const GIT_SPLIT_DEFAULT_COLUMN_PERCENT = 38;\n/** Smallest rendered height, in CSS pixels, kept usable for a stacked pane. */\nexport const GIT_SPLIT_MIN_ROW_PX = 140;\n/** Smallest rendered width, in CSS pixels, kept usable for a side-by-side pane. */\nexport const GIT_SPLIT_MIN_COLUMN_PX = 240;\n/** Percentage points moved by one arrow-key press (Shift multiplies the step). */\nexport const GIT_SPLIT_KEY_STEP = 4;\nfunction roundPercent(percent) {\n return Math.round(percent * 100) / 100;\n}\n/**\n * Clamp a leading-pane share to the range that keeps both panes usable, or\n * undefined when the measured geometry cannot express a usable split at all.\n */\nexport function clampGitSplitPercent(percent, geometry) {\n if (!Number.isFinite(percent))\n return undefined;\n const { size, divider, minimum } = geometry;\n if (!Number.isFinite(size) || size <= 0)\n return undefined;\n const lower = (minimum / size) * 100;\n const upper = 100 - ((minimum + Math.max(divider, 0)) / size) * 100;\n if (upper <= lower)\n return undefined;\n return roundPercent(Math.min(Math.max(percent, lower), upper));\n}\n/** Resolve the share that keeps the divider centered under a pointer. */\nexport function gitSplitPercentFromPointer(pointer, geometry) {\n const halfDivider = Math.max(geometry.divider, 0) / 2;\n const leadingPx = pointer - geometry.start - halfDivider;\n return clampGitSplitPercent((leadingPx / geometry.size) * 100, geometry);\n}\n//# sourceMappingURL=git-column-split.js.map","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { GIT_SPLIT_KEY_STEP, clampGitSplitPercent, gitSplitPercentFromPointer } from './git-column-split.js';\n/**\n * Remembers every divider position for the rest of the browser session, so\n * closing and reopening the Git tab keeps the split the user dragged to.\n */\nconst rememberedPercents = new Map();\n/** Arrow keys that move a leading pane forward or backward along one axis. */\nconst KEY_DIRECTIONS = {\n horizontal: { ArrowUp: -1, ArrowDown: 1 },\n vertical: { ArrowLeft: -1, ArrowRight: 1 },\n};\n/**\n * Resize one grid axis with a pointer or the keyboard. The dragging frame writes\n * straight to the DOM custom property, so heavy commit and file lists never\n * re-render per pointer move; React state commits once per gesture.\n */\nexport function useGitPaneSplit(options) {\n const { containerRef, orientation, property, minimum, fallback } = options;\n const splitterRef = useRef(null);\n const [percent, setPercent] = useState(() => rememberedPercents.get(property) ?? fallback);\n const [dragging, setDragging] = useState(false);\n const percentRef = useRef(percent);\n const geometryRef = useRef(undefined);\n const draggingRef = useRef(false);\n const applyPercent = useCallback((next) => {\n percentRef.current = next;\n containerRef.current?.style.setProperty(property, next + '%');\n splitterRef.current?.setAttribute('aria-valuenow', String(Math.round(next)));\n }, [containerRef, property]);\n const commitPercent = useCallback((next) => {\n applyPercent(next);\n rememberedPercents.set(property, next);\n setPercent(next);\n }, [applyPercent, property]);\n useEffect(() => {\n applyPercent(percent);\n rememberedPercents.set(property, percent);\n }, [applyPercent, percent, property]);\n useEffect(() => {\n if (!dragging)\n return undefined;\n // Keep the resize cursor and suppress selection while the pointer is captured.\n const previousCursor = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n document.body.style.cursor = orientation === 'horizontal' ? 'row-resize' : 'col-resize';\n document.body.style.userSelect = 'none';\n return () => {\n document.body.style.cursor = previousCursor;\n document.body.style.userSelect = previousUserSelect;\n };\n }, [dragging, orientation]);\n const measure = useCallback(() => {\n const container = containerRef.current;\n const splitter = splitterRef.current;\n if (container === null || splitter === null)\n return undefined;\n const containerRect = container.getBoundingClientRect();\n const splitterRect = splitter.getBoundingClientRect();\n return orientation === 'horizontal'\n ? { start: containerRect.top, size: containerRect.height, divider: splitterRect.height, minimum }\n : { start: containerRect.left, size: containerRect.width, divider: splitterRect.width, minimum };\n }, [containerRef, minimum, orientation]);\n const startDrag = useCallback((event) => {\n if (event.button !== 0)\n return;\n const geometry = measure();\n if (geometry === undefined)\n return;\n geometryRef.current = geometry;\n draggingRef.current = true;\n setDragging(true);\n event.currentTarget.setPointerCapture(event.pointerId);\n event.preventDefault();\n // preventDefault suppresses the default focus; keep the divider keyboard-reachable.\n event.currentTarget.focus({ preventScroll: true });\n }, [measure]);\n const drag = useCallback((event) => {\n const geometry = geometryRef.current;\n if (!draggingRef.current || geometry === undefined)\n return;\n const pointer = orientation === 'horizontal' ? event.clientY : event.clientX;\n const next = gitSplitPercentFromPointer(pointer, geometry);\n if (next !== undefined)\n applyPercent(next);\n }, [applyPercent, orientation]);\n const endDrag = useCallback((event) => {\n if (!draggingRef.current)\n return;\n draggingRef.current = false;\n geometryRef.current = undefined;\n setDragging(false);\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n const geometry = measure();\n commitPercent(geometry === undefined\n ? percentRef.current\n : clampGitSplitPercent(percentRef.current, geometry) ?? percentRef.current);\n }, [commitPercent, measure]);\n const onKeyDown = useCallback((event) => {\n const direction = KEY_DIRECTIONS[orientation][event.key];\n if (direction === undefined)\n return;\n const geometry = measure();\n if (geometry === undefined)\n return;\n event.preventDefault();\n const step = GIT_SPLIT_KEY_STEP * (event.shiftKey ? 4 : 1);\n const next = clampGitSplitPercent(percentRef.current + direction * step, geometry);\n if (next !== undefined)\n commitPercent(next);\n }, [commitPercent, measure, orientation]);\n const reset = useCallback(() => {\n commitPercent(fallback);\n }, [commitPercent, fallback]);\n return { splitterRef, percent, dragging, startDrag, drag, endDrag, onKeyDown, reset };\n}\n//# sourceMappingURL=useGitPaneSplit.js.map","/**\n * 插件的稳定、浏览器安全契约层;这里只定义领域值与服务形状,不依赖 Git、sidecar 或 Node runtime。\n * Stable, browser-safe contract layer for the plugin; it defines domain values and service shapes without Git, sidecar, or Node runtime dependencies.\n *\n * @packageDocumentation\n */\n/**\n * 跨 Host/浏览器边界保持稳定的领域错误码;新增、删除或重命名成员都属于公开契约变更。\n * Stable domain error codes shared across the Host/browser boundary; adding, removing, or renaming a member is a public contract change.\n */\nexport const WORKTREE_ERROR_CODES = Object.freeze([\n 'WORKSPACE_NOT_FOUND',\n 'WORKSPACE_NOT_GIT_REPOSITORY',\n 'GIT_NOT_INSTALLED',\n 'WORKTREE_REQUIRES_INITIAL_COMMIT',\n 'WORKTREE_BRANCH_CONFLICT',\n 'WORKTREE_NOT_FOUND',\n 'WORKTREE_ORDER_INVALID',\n 'WORKTREE_REMOVED',\n 'WORKTREE_IMPORT_INVALID',\n 'WORKTREE_ALREADY_MANAGED',\n 'SESSION_NOT_FOUND',\n 'SESSION_CWD_MISMATCH',\n 'SESSION_ALREADY_BOUND',\n 'SIDECAR_UNAVAILABLE',\n 'SIDECAR_CORRUPT',\n 'SIDECAR_SYNC_REQUIRED',\n 'GIT_OPERATION_FAILED',\n 'WORKTREE_MUTATION_BUSY',\n 'WORKTREE_STATE_CONFLICT',\n 'WORKTREE_RECOVERY_REQUIRED',\n 'WORKTREE_IDENTITY_CHANGED',\n 'WORKTREE_PERMISSION_BINDING_REQUIRED',\n 'WORKTREE_SESSION_BUSY',\n 'WORKTREE_ACTIVITY_UNAVAILABLE',\n]);\n/** Stable synthetic commit id used for the current uncommitted working tree entry. */\nexport const WORKTREE_GIT_WORKING_TREE = 'working-tree';\n/** Stable synthetic id used by the Dashboard's baseline-wide summary view. */\nexport const WORKTREE_GIT_SUMMARY = 'summary';\n/**\n * Git object-name guard shared by the Contract, Provider, Manage and Client\n * seams so commit-SHA validation cannot drift between layers. SHA-1 and SHA-256\n * repository formats are both accepted.\n */\nexport const WORKTREE_GIT_COMMIT_PATTERN = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/iu;\n/** True when the value is a full-length Git commit SHA. */\nexport function isWorktreeGitCommit(value) {\n return typeof value === 'string' && WORKTREE_GIT_COMMIT_PATTERN.test(value);\n}\nexport * from './worktree-permission.js';\n/**\n * 创建错误 DTO 而不抛出异常,供 Host 将已识别的领域失败投影到 Remote result。\n * Creates an error DTO without throwing, allowing the Host to project recognized domain failures into a Remote result.\n */\nexport function createWorktreeError(code, message, details = {}) {\n return { code, message, details };\n}\n/**\n * Browser Remote 可调用的方法白名单;runtime cwd 解析刻意不进入该边界。\n * Allowlist of Browser Remote methods; runtime cwd resolution is intentionally excluded from this boundary.\n */\nexport const WORKTREE_REMOTE_METHODS = Object.freeze([\n 'updateWorktreeInstructions',\n 'updateWorktreeBaseBranch',\n 'listWorktrees',\n 'listWorktreeCommits',\n 'listWorktreeCommitFiles',\n 'getWorktreeCommitFileDiff',\n 'listImportCandidates',\n 'listBranches',\n 'createWorktree',\n 'importWorktree',\n 'removeWorktree',\n 'unarchiveWorktree',\n 'cleanWorktree',\n 'adoptWorktreeBranch',\n 'recoverWorktrees',\n 'forgetWorktree',\n 'insertWorktreeBefore',\n 'listBindings',\n 'bindSession',\n 'ensureWorktreePermission',\n 'normalizeDetachedWorktreePermissions',\n]);\n//# sourceMappingURL=index.js.map","import { WORKTREE_GIT_WORKING_TREE, isWorktreeGitCommit, } from '../../../contract/index.js';\nexport const MAX_FILE_CACHE = 8;\nexport const MAX_DIFF_CACHE = 24;\n/** The summary selection for one working-tree inclusion mode. */\nexport function summarySelection(includeWorkingTree) {\n return includeWorkingTree ? { kind: 'summary', includeWorkingTree: true } : { kind: 'summary' };\n}\nfunction targetKey(target) {\n if (target.kind === 'commit')\n return 'commit\\u0000' + target.commit;\n if (target.selection.kind === 'summary') {\n return target.selection.includeWorkingTree === true ? 'summary\\u0000working-tree' : 'summary';\n }\n return 'commits\\u0000' + target.selection.commits.join('\\u0000');\n}\nfunction historyProjectionKey(history) {\n if (history.status !== 'ready')\n return 'unknown';\n return (history.value.baseline?.commit ?? 'unknown') + '\\u0000' + (history.value.headCommit ?? 'unknown');\n}\n/** True when the target reads the live working tree and must not be cached. */\nexport function isLiveTarget(target) {\n return target.kind === 'commit'\n ? target.commit === WORKTREE_GIT_WORKING_TREE\n : target.selection.kind === 'summary' && target.selection.includeWorkingTree === true;\n}\n/**\n * Live-result markers complete a cache key. Matching on the marker rather than\n * on a hand-written substring keeps key construction and invalidation aligned.\n */\nconst LIVE_KEY_MARKERS = [\n '\\u0000' + targetKey({ kind: 'commit', commit: WORKTREE_GIT_WORKING_TREE }),\n '\\u0000' + targetKey({ kind: 'selection', selection: summarySelection(true) }),\n];\n/** True when a file or diff cache key belongs to a live working-tree read. */\nexport function isLiveCacheKey(key) {\n return LIVE_KEY_MARKERS.some((marker) => key.includes(marker));\n}\n/**\n * Key token for a read that names no baseline branch and therefore asks the\n * Manager to resolve the Worktree's captured acquisition commit. The leading NUL\n * cannot appear in a local branch name, so the token can never collide with one.\n */\nconst CAPTURED_BASELINE_KEY = '\\u0000captured';\nfunction baselineKey(baseBranch) {\n return baseBranch ?? CAPTURED_BASELINE_KEY;\n}\nexport function gitCacheKey(baseBranch, history, target) {\n return baselineKey(baseBranch) + '\\u0000' + historyProjectionKey(history) + '\\u0000' + targetKey(target);\n}\nexport function diffCacheKey(baseBranch, history, target, filePath) {\n return gitCacheKey(baseBranch, history, target) + '\\u0000' + filePath;\n}\n/** Compare two targets by projection identity rather than object identity. */\nexport function sameTarget(left, right) {\n return targetKey(left) === targetKey(right);\n}\n/** Drop the oldest entries until the cache respects its bound. */\nexport function trimCache(cache, maxSize) {\n while (cache.size > maxSize) {\n const oldest = cache.keys().next().value;\n if (oldest === undefined)\n return;\n cache.delete(oldest);\n }\n}\n/** Find the changed-file row for a new or previous path. */\nexport function fileForPath(files, selectedPath) {\n return files.files.find((file) => file.path === selectedPath || file.oldPath === selectedPath);\n}\n/** Keep only SHAs that are still part of the current history projection. */\nexport function canonicalizeCommits(history, commits) {\n if (history === undefined)\n return [];\n const requested = new Set(commits.filter((commit) => isWorktreeGitCommit(commit)));\n return history.commits\n .filter((commit) => commit.sha !== WORKTREE_GIT_WORKING_TREE && requested.has(commit.sha))\n .map((commit) => commit.sha);\n}\n//# sourceMappingURL=git-state-cache.js.map","import { useEffect, useMemo, useSyncExternalStore } from 'react';\nimport { WORKTREE_GIT_WORKING_TREE } from '../../../contract/index.js';\nimport { isMainWorktreeId } from './git-facts.js';\nimport { MAX_DIFF_CACHE, MAX_FILE_CACHE, canonicalizeCommits, diffCacheKey, fileForPath, gitCacheKey, isLiveCacheKey, isLiveTarget, sameTarget, summarySelection, trimCache, } from './git-state-cache.js';\nfunction asError(error) {\n return error instanceof Error ? error : new Error(String(error));\n}\nfunction normalizeBranch(branch) {\n const normalized = branch?.trim();\n return normalized === undefined || normalized.length === 0 ? undefined : normalized;\n}\nfunction emptyState(defaultBaselineBranch) {\n return {\n branches: { status: 'idle' },\n baselineBranch: normalizeBranch(defaultBaselineBranch),\n history: { status: 'idle' },\n view: 'summary',\n includeWorkingTree: false,\n selectedCommits: [],\n commitMultiSelect: false,\n files: { status: 'idle' },\n diff: { status: 'idle' },\n };\n}\n/**\n * Create the browser-safe Git Dashboard state machine. Construction is inert;\n * the caller explicitly starts history loading on first Git-tab activation.\n */\nexport function createWorktreeGitStateController(input) {\n // Main (Local) has no Worktree-relative Git projection, so it never issues a\n // Git read even when a panel mounts for it.\n const main = isMainWorktreeId(input.worktreeId);\n // A Worktree with a captured acquisition commit is readable without naming a\n // baseline branch: the Manager resolves that immutable commit as the implicit\n // boundary. Main never reads Git, and a Worktree with neither a selectable\n // branch nor a captured commit stays unselected until the user picks one.\n const capturedBaseline = input.capturedBaseline === true;\n const canRead = (baselineBranch) => !main && (capturedBaseline || baselineBranch !== undefined);\n let state = emptyState(input.defaultBaselineBranch);\n let disposed = false;\n let branchesLoaded = false;\n let branchesRequest = 0;\n let historyLoaded = false;\n let historyRequest = 0;\n let filesRequest = 0;\n let diffRequest = 0;\n let branchesInFlight;\n let historyInFlight;\n const filesInFlight = new Map();\n const diffInFlight = new Map();\n const listeners = new Set();\n const filesCache = new Map();\n const diffCache = new Map();\n const emit = () => {\n if (disposed)\n return;\n for (const listener of listeners)\n listener();\n };\n const update = (next) => {\n if (disposed)\n return;\n state = next;\n emit();\n };\n const invalidateWorkingTreeCache = () => {\n for (const key of filesCache.keys()) {\n if (isLiveCacheKey(key))\n filesCache.delete(key);\n }\n for (const key of diffCache.keys()) {\n if (isLiveCacheKey(key))\n diffCache.delete(key);\n }\n };\n const retireLiveInFlight = () => {\n let retired = false;\n for (const key of filesInFlight.keys()) {\n if (isLiveCacheKey(key)) {\n filesInFlight.delete(key);\n retired = true;\n }\n }\n for (const key of diffInFlight.keys()) {\n if (isLiveCacheKey(key)) {\n diffInFlight.delete(key);\n retired = true;\n }\n }\n return retired;\n };\n const currentTarget = () => {\n if (state.view === 'summary') {\n return { kind: 'selection', selection: summarySelection(state.includeWorkingTree) };\n }\n if (state.selectedCommit === undefined)\n return undefined;\n if (state.selectedCommit !== WORKTREE_GIT_WORKING_TREE &&\n state.selectedCommits.length > 1) {\n return { kind: 'selection', selection: { kind: 'commits', commits: state.selectedCommits } };\n }\n return { kind: 'commit', commit: state.selectedCommit };\n };\n /**\n * Stale-response guard. A completion only publishes while it is still the\n * newest request for the same baseline, projection, and selected path.\n */\n const isCurrentRequest = (request, latestRequest, baselineBranch, target, selectedPath) => {\n if (disposed || request !== latestRequest || state.baselineBranch !== baselineBranch)\n return false;\n const active = currentTarget();\n if (active === undefined || !sameTarget(active, target))\n return false;\n return selectedPath === undefined || state.selectedPath === selectedPath;\n };\n const requestFiles = (baseBranch, history, target) => {\n const key = gitCacheKey(baseBranch, history, target);\n const existing = filesInFlight.get(key);\n if (existing !== undefined)\n return existing;\n if (input.manager === undefined)\n return Promise.reject(new Error('Git manager unavailable'));\n const request = target.kind === 'commit'\n ? { commit: target.commit }\n : { selection: target.selection };\n let promise;\n try {\n promise = input.manager.listWorktreeCommitFiles({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n ...request,\n baseBranch,\n });\n }\n catch (error) {\n promise = Promise.reject(error);\n }\n filesInFlight.set(key, promise);\n void promise.then(() => {\n if (filesInFlight.get(key) === promise)\n filesInFlight.delete(key);\n }, () => {\n if (filesInFlight.get(key) === promise)\n filesInFlight.delete(key);\n });\n return promise;\n };\n const requestDiff = (baseBranch, history, target, diffPath) => {\n const key = diffCacheKey(baseBranch, history, target, diffPath);\n const existing = diffInFlight.get(key);\n if (existing !== undefined)\n return existing;\n if (input.manager === undefined)\n return Promise.reject(new Error('Git manager unavailable'));\n const request = target.kind === 'commit'\n ? { commit: target.commit }\n : { selection: target.selection };\n let promise;\n try {\n promise = input.manager.getWorktreeCommitFileDiff({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n ...request,\n path: diffPath,\n baseBranch,\n });\n }\n catch (error) {\n promise = Promise.reject(error);\n }\n diffInFlight.set(key, promise);\n void promise.then(() => {\n if (diffInFlight.get(key) === promise)\n diffInFlight.delete(key);\n }, () => {\n if (diffInFlight.get(key) === promise)\n diffInFlight.delete(key);\n });\n return promise;\n };\n const loadDiff = async (target, selectedPath, diffPath) => {\n const baselineBranch = state.baselineBranch;\n if (!canRead(baselineBranch))\n return;\n const request = ++diffRequest;\n const key = diffCacheKey(baselineBranch, state.history, target, diffPath);\n const cached = isLiveTarget(target) ? undefined : diffCache.get(key);\n if (cached !== undefined) {\n update({ ...state, selectedPath, diff: { status: 'ready', value: cached } });\n return;\n }\n update({ ...state, selectedPath, diff: { status: 'loading' } });\n try {\n const value = await requestDiff(baselineBranch, state.history, target, diffPath);\n if (!isLiveTarget(target)) {\n diffCache.set(key, value);\n trimCache(diffCache, MAX_DIFF_CACHE);\n }\n if (!isCurrentRequest(request, diffRequest, baselineBranch, target, selectedPath))\n return;\n update({ ...state, diff: { status: 'ready', value } });\n }\n catch (error) {\n if (!isCurrentRequest(request, diffRequest, baselineBranch, target, selectedPath))\n return;\n update({ ...state, diff: { status: 'error', error: asError(error) } });\n }\n };\n const applyFiles = (target, value) => {\n const selectedPath = value.files[0]?.path;\n update({\n ...state,\n files: { status: 'ready', value },\n selectedPath,\n diff: { status: 'idle' },\n });\n if (selectedPath !== undefined)\n void loadDiff(target, selectedPath, selectedPath);\n };\n const loadFiles = async (target, preserveReady = false) => {\n const baselineBranch = state.baselineBranch;\n if (!canRead(baselineBranch))\n return;\n const request = ++filesRequest;\n ++diffRequest;\n const key = gitCacheKey(baselineBranch, state.history, target);\n const cached = isLiveTarget(target) ? undefined : filesCache.get(key);\n if (cached !== undefined) {\n applyFiles(target, cached);\n return;\n }\n const previousFiles = state.files.status === 'ready' ? state.files : undefined;\n if (!preserveReady || previousFiles === undefined) {\n update({ ...state, files: { status: 'loading' }, selectedPath: undefined, diff: { status: 'idle' } });\n }\n else {\n update({ ...state, files: { ...previousFiles, refreshing: true } });\n }\n try {\n const value = await requestFiles(baselineBranch, state.history, target);\n if (!isLiveTarget(target)) {\n filesCache.set(key, value);\n trimCache(filesCache, MAX_FILE_CACHE);\n }\n if (!isCurrentRequest(request, filesRequest, baselineBranch, target))\n return;\n applyFiles(target, value);\n }\n catch (error) {\n if (!isCurrentRequest(request, filesRequest, baselineBranch, target))\n return;\n if (preserveReady && previousFiles !== undefined) {\n update({ ...state, files: { status: 'ready', value: previousFiles.value, error: asError(error) } });\n }\n else {\n update({ ...state, files: { status: 'error', error: asError(error) }, selectedPath: undefined, diff: { status: 'idle' } });\n }\n }\n };\n const resetTarget = (next) => {\n retireLiveInFlight();\n ++filesRequest;\n ++diffRequest;\n update({\n ...state,\n ...next,\n files: { status: 'idle' },\n selectedPath: undefined,\n diff: { status: 'idle' },\n });\n };\n const selectBaselineBranch = (branch) => {\n if (disposed)\n return;\n const nextBranch = normalizeBranch(branch);\n if (state.baselineBranch === nextBranch)\n return;\n ++historyRequest;\n ++filesRequest;\n ++diffRequest;\n historyInFlight = undefined;\n historyLoaded = false;\n filesInFlight.clear();\n diffInFlight.clear();\n filesCache.clear();\n diffCache.clear();\n update({\n ...state,\n baselineBranch: nextBranch,\n history: { status: 'idle' },\n view: 'summary',\n selectedCommit: undefined,\n selectedCommits: [],\n files: { status: 'idle' },\n selectedPath: undefined,\n diff: { status: 'idle' },\n });\n // Clearing an explicit selection falls back to the captured baseline, so it\n // must re-read rather than leave the previous branch projection on screen.\n if (nextBranch !== undefined || capturedBaseline)\n void loadHistory();\n };\n const selectSummary = () => {\n if (disposed || !canRead(state.baselineBranch))\n return;\n const target = { kind: 'selection', selection: summarySelection(state.includeWorkingTree) };\n resetTarget({ view: 'summary', selectedCommit: undefined, selectedCommits: [] });\n void loadFiles(target);\n };\n const setIncludeWorkingTree = (includeWorkingTree) => {\n if (disposed || state.includeWorkingTree === includeWorkingTree)\n return;\n if (state.view !== 'summary' || !canRead(state.baselineBranch)) {\n update({ ...state, includeWorkingTree });\n return;\n }\n const target = { kind: 'selection', selection: summarySelection(includeWorkingTree) };\n resetTarget({ includeWorkingTree });\n void loadFiles(target);\n };\n const selectView = (view) => {\n if (view === 'summary') {\n selectSummary();\n return;\n }\n if (disposed || !canRead(state.baselineBranch))\n return;\n const selectedCommit = state.selectedCommit;\n const selectedCommits = state.selectedCommits;\n if (state.view === 'commits' && state.files.status === 'ready')\n return;\n resetTarget({ view: 'commits' });\n if (selectedCommit === undefined)\n return;\n const target = selectedCommit !== WORKTREE_GIT_WORKING_TREE && selectedCommits.length > 1\n ? { kind: 'selection', selection: { kind: 'commits', commits: selectedCommits } }\n : { kind: 'commit', commit: selectedCommit };\n void loadFiles(target);\n };\n const selectCommit = (commit) => {\n if (disposed || !canRead(state.baselineBranch))\n return;\n const history = state.history.status === 'ready' ? state.history.value : undefined;\n if (history !== undefined && !history.commits.some((candidate) => candidate.sha === commit))\n return;\n const target = { kind: 'commit', commit };\n const selectedCommits = commit === WORKTREE_GIT_WORKING_TREE ? [] : [commit];\n if (state.view === 'commits' && state.selectedCommit === commit && state.files.status === 'ready' && state.selectedCommits.length <= 1)\n return;\n resetTarget({ view: 'commits', selectedCommit: commit, selectedCommits });\n void loadFiles(target);\n };\n const toggleCommit = (commit) => {\n if (disposed || !canRead(state.baselineBranch) || commit === WORKTREE_GIT_WORKING_TREE)\n return;\n const history = state.history.status === 'ready' ? state.history.value : undefined;\n if (history === undefined || !history.commits.some((candidate) => candidate.sha === commit && candidate.sha !== WORKTREE_GIT_WORKING_TREE))\n return;\n const selected = state.selectedCommits.includes(commit)\n ? state.selectedCommits.filter((candidate) => candidate !== commit)\n : [...state.selectedCommits, commit];\n const canonical = canonicalizeCommits(history, selected);\n if (canonical.length === 0) {\n resetTarget({ view: 'commits', selectedCommit: undefined, selectedCommits: [] });\n return;\n }\n const selectedCommit = canonical.includes(commit) ? commit : canonical[canonical.length - 1];\n const target = canonical.length > 1\n ? { kind: 'selection', selection: { kind: 'commits', commits: canonical } }\n : { kind: 'commit', commit: selectedCommit };\n resetTarget({ view: 'commits', selectedCommit, selectedCommits: canonical });\n void loadFiles(target);\n };\n /**\n * Switch between replace-on-click and additive selection. Turning multi-select\n * off collapses an aggregate target back to its primary commit so the files and\n * diff panes keep matching the visible selection.\n */\n const setCommitMultiSelect = (enabled) => {\n if (disposed || state.commitMultiSelect === enabled)\n return;\n if (enabled) {\n update({ ...state, commitMultiSelect: true });\n return;\n }\n const primary = state.selectedCommit;\n const aggregated = state.view === 'commits' && primary !== undefined && state.selectedCommits.length > 1;\n if (!aggregated) {\n update({\n ...state,\n commitMultiSelect: false,\n selectedCommits: primary === undefined ? [] : [primary],\n });\n return;\n }\n // selectCommit must still observe the aggregate selection; collapsing it first\n // would trip the \"already showing this commit\" guard and keep the union files.\n update({ ...state, commitMultiSelect: false });\n selectCommit(primary);\n };\n const clearCommitSelection = () => {\n if (disposed || !canRead(state.baselineBranch))\n return;\n resetTarget({ view: 'commits', selectedCommit: undefined, selectedCommits: [] });\n };\n const selectPath = (selectedPath) => {\n if (disposed || state.files.status !== 'ready')\n return;\n const target = currentTarget();\n if (target === undefined)\n return;\n const changedFile = fileForPath(state.files.value, selectedPath);\n if (changedFile === undefined)\n return;\n ++diffRequest;\n void loadDiff(target, selectedPath, changedFile.path);\n };\n const loadBranches = (refresh = false) => {\n if (disposed || main)\n return Promise.resolve();\n if (branchesInFlight !== undefined)\n return branchesInFlight;\n if (!refresh && branchesLoaded)\n return Promise.resolve();\n const request = ++branchesRequest;\n const previous = state.branches;\n if (refresh && previous.status === 'ready') {\n update({ ...state, branches: { status: 'ready', value: previous.value, refreshing: true } });\n }\n else if (refresh && previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, branches: { status: 'ready', value: previous.previous, refreshing: true } });\n }\n else {\n update({ ...state, branches: { status: 'loading' } });\n }\n const run = async () => {\n if (input.manager?.listBranches === undefined) {\n if (!disposed && request === branchesRequest) {\n branchesLoaded = true;\n update({ ...state, branches: { status: 'ready', value: [] } });\n }\n return;\n }\n try {\n const value = await input.manager.listBranches({ workspaceId: input.workspaceId });\n if (disposed || request !== branchesRequest)\n return;\n branchesLoaded = true;\n update({ ...state, branches: { status: 'ready', value } });\n }\n catch (error) {\n if (disposed || request !== branchesRequest)\n return;\n branchesLoaded = false;\n const nextError = asError(error);\n if (previous.status === 'ready') {\n update({ ...state, branches: { status: 'ready', value: previous.value, error: nextError } });\n }\n else if (previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, branches: { status: 'ready', value: previous.previous, error: nextError } });\n }\n else {\n update({ ...state, branches: { status: 'error', error: nextError } });\n }\n }\n };\n const promise = run().finally(() => {\n if (branchesInFlight === promise)\n branchesInFlight = undefined;\n });\n branchesInFlight = promise;\n return promise;\n };\n const loadHistory = (refresh = false) => {\n if (disposed || !canRead(state.baselineBranch))\n return Promise.resolve();\n if (historyInFlight !== undefined)\n return historyInFlight;\n if (!refresh && historyLoaded)\n return Promise.resolve();\n const baselineBranch = state.baselineBranch;\n const request = ++historyRequest;\n const previous = state.history;\n const refreshesWorkingTree = refresh && state.selectedCommit === WORKTREE_GIT_WORKING_TREE;\n if (refresh) {\n const retiredLiveReads = retireLiveInFlight();\n if (retiredLiveReads) {\n ++filesRequest;\n ++diffRequest;\n if (state.files.status === 'loading') {\n update({ ...state, files: { status: 'idle' }, selectedPath: undefined, diff: { status: 'idle' } });\n }\n else if (state.diff.status === 'loading') {\n update({ ...state, diff: { status: 'idle' } });\n }\n }\n }\n if (refreshesWorkingTree)\n invalidateWorkingTreeCache();\n if (refresh && previous.status === 'ready') {\n update({ ...state, history: { status: 'ready', value: previous.value, refreshing: true } });\n }\n else if (refresh && previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, history: { status: 'ready', value: previous.previous, refreshing: true } });\n }\n else {\n update({ ...state, history: { status: 'loading' } });\n }\n const run = async () => {\n if (input.manager === undefined) {\n const error = new Error('Git manager unavailable');\n if (!disposed && request === historyRequest) {\n historyLoaded = true;\n update({ ...state, history: { status: 'error', error } });\n }\n return;\n }\n try {\n const value = await input.manager.listWorktreeCommits({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n });\n if (disposed || request !== historyRequest || state.baselineBranch !== baselineBranch)\n return;\n historyLoaded = true;\n const selectedCommits = state.view === 'summary'\n ? []\n : canonicalizeCommits(value, state.selectedCommits);\n const selectedCommitStillExists = state.view !== 'summary' &&\n state.selectedCommit !== undefined &&\n value.commits.some((commit) => commit.sha === state.selectedCommit);\n const nextSelectedCommit = state.view === 'summary'\n ? undefined\n : selectedCommitStillExists\n ? state.selectedCommit\n : selectedCommits[0] ?? value.commits[0]?.sha;\n const nextSelectedCommits = state.view === 'summary'\n ? []\n : selectedCommits.length > 0\n ? selectedCommits\n : nextSelectedCommit !== undefined && nextSelectedCommit !== WORKTREE_GIT_WORKING_TREE\n ? [nextSelectedCommit]\n : [];\n update({\n ...state,\n history: { status: 'ready', value },\n selectedCommits: nextSelectedCommits,\n selectedCommit: nextSelectedCommit,\n });\n if (state.view === 'summary') {\n void loadFiles({ kind: 'selection', selection: summarySelection(state.includeWorkingTree) }, true);\n }\n else if (nextSelectedCommit === undefined) {\n resetTarget({ selectedCommit: undefined, selectedCommits: [] });\n }\n else if (!selectedCommitStillExists || selectedCommits.length !== state.selectedCommits.length || refreshesWorkingTree) {\n const target = nextSelectedCommit !== WORKTREE_GIT_WORKING_TREE && selectedCommits.length > 1\n ? { kind: 'selection', selection: { kind: 'commits', commits: selectedCommits } }\n : { kind: 'commit', commit: nextSelectedCommit };\n void loadFiles(target, refreshesWorkingTree);\n }\n }\n catch (error) {\n if (disposed || request !== historyRequest || state.baselineBranch !== baselineBranch)\n return;\n historyLoaded = true;\n const nextError = asError(error);\n if (previous.status === 'ready') {\n update({ ...state, history: { status: 'ready', value: previous.value, error: nextError } });\n }\n else if (previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, history: { status: 'ready', value: previous.previous, error: nextError } });\n }\n else {\n update({ ...state, history: { status: 'error', error: nextError } });\n }\n }\n };\n const promise = run().finally(() => {\n if (historyInFlight === promise)\n historyInFlight = undefined;\n });\n historyInFlight = promise;\n return promise;\n };\n const controller = {\n getSnapshot: () => state,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n loadBranches: () => loadBranches(false),\n loadHistory: () => loadHistory(false),\n refresh: () => {\n const branchesTask = loadBranches(true);\n const historyTask = loadHistory(true);\n return Promise.all([branchesTask, historyTask]).then(() => undefined);\n },\n selectBaselineBranch,\n selectView,\n selectSummary,\n setIncludeWorkingTree,\n selectCommit,\n toggleCommit,\n setCommitMultiSelect,\n clearCommitSelection,\n selectPath,\n dispose: () => {\n if (disposed)\n return;\n disposed = true;\n ++branchesRequest;\n ++historyRequest;\n ++filesRequest;\n ++diffRequest;\n listeners.clear();\n },\n };\n return controller;\n}\n/** React adapter; the first Git history request starts in the mount effect. */\nexport function useWorktreeGitState(input) {\n const controller = useMemo(() => createWorktreeGitStateController(input), [\n input.manager,\n input.workspaceId,\n input.worktreeId,\n input.defaultBaselineBranch,\n input.capturedBaseline,\n ]);\n const snapshot = useSyncExternalStore(controller.subscribe, controller.getSnapshot, controller.getSnapshot);\n useEffect(() => {\n void controller.loadBranches();\n void controller.loadHistory();\n return controller.dispose;\n }, [controller]);\n return {\n ...snapshot,\n loadBranches: controller.loadBranches,\n loadHistory: controller.loadHistory,\n refresh: controller.refresh,\n selectBaselineBranch: controller.selectBaselineBranch,\n selectView: controller.selectView,\n selectSummary: controller.selectSummary,\n setIncludeWorkingTree: controller.setIncludeWorkingTree,\n selectCommit: controller.selectCommit,\n toggleCommit: controller.toggleCommit,\n setCommitMultiSelect: controller.setCommitMultiSelect,\n clearCommitSelection: controller.clearCommitSelection,\n selectPath: controller.selectPath,\n dispose: controller.dispose,\n };\n}\n//# sourceMappingURL=useWorktreeGitState.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useRef } from 'react';\nimport { isMainWorktreeId, normalizeBaselineBranch, sumLineTotals } from './git-facts.js';\nimport { GitChangedFiles } from './GitChangedFiles.js';\nimport { GitLineStats } from './GitLineStats.js';\nimport { GitCommitList } from './GitCommitList.js';\nimport { GitDiffView } from './GitDiffView.js';\nimport { GIT_SPLIT_DEFAULT_COLUMN_PERCENT, GIT_SPLIT_DEFAULT_ROW_PERCENT, GIT_SPLIT_MIN_COLUMN_PX, GIT_SPLIT_MIN_ROW_PX, } from './git-column-split.js';\nimport { useGitPaneSplit } from './useGitPaneSplit.js';\nimport { useWorktreeGitState } from './useWorktreeGitState.js';\nimport styles from './worktree-git.css';\nfunction shortCommit(commit) {\n return commit === undefined ? '—' : commit.slice(0, 7);\n}\nfunction selectedCommit(history, sha) {\n return history?.commits.find((commit) => commit.sha === sha);\n}\nfunction commitCountLabel(history, t) {\n const committedCount = history.commits.filter((commit) => commit.kind !== 'working-tree').length;\n return history.commits.some((commit) => commit.kind === 'working-tree')\n ? t('dashboard.git.commitCountWithWorkingTree', { commits: committedCount })\n : t('dashboard.git.commitCount', { n: committedCount });\n}\nfunction commitLabel(commit, t) {\n return commit.kind === 'working-tree'\n ? t('dashboard.git.workingTree')\n : shortCommit(commit.sha);\n}\nfunction readyFiles(value) {\n return value?.files ?? [];\n}\n/** Empty-state copy per honest unavailable reason; one definition for both blocks. */\nconst UNAVAILABLE_COPY = {\n main: {\n title: 'dashboard.git.mainUnavailableTitle',\n description: 'dashboard.git.mainUnavailableDescription',\n },\n 'baseline-unselected': {\n title: 'dashboard.git.selectBaselineTitle',\n description: 'dashboard.git.selectBaselineDescription',\n },\n 'baseline-unknown': {\n title: 'dashboard.git.baselineUnknownTitle',\n description: 'dashboard.git.baselineUnknownDescription',\n },\n};\nfunction UnavailableNotice({ reason, t, }) {\n return (_jsxs(\"div\", { className: styles.gitUnavailable, \"data-dashboard-git-unavailable\": true, children: [_jsx(\"strong\", { children: t(UNAVAILABLE_COPY[reason].title) }), _jsx(\"p\", { children: t(UNAVAILABLE_COPY[reason].description) })] }));\n}\n/** Git & Changes tab: read-only, on-demand history -> target files -> one-file diff. */\nexport function WorktreeGitPanel({ manager, workspaceId, worktreeId, defaultBaselineBranch, currentBranch, capturedBaseline, onOpenFile, t, }) {\n const isMain = isMainWorktreeId(worktreeId);\n const selectedDefaultBaseline = normalizeBaselineBranch(defaultBaselineBranch, currentBranch);\n const state = useWorktreeGitState({\n manager,\n workspaceId,\n worktreeId,\n defaultBaselineBranch: isMain ? undefined : selectedDefaultBaseline,\n capturedBaseline: isMain ? false : capturedBaseline,\n });\n const gridRef = useRef(null);\n // Both dividers share the grid: one splits rows, one splits columns, in either layout.\n const rows = useGitPaneSplit({\n containerRef: gridRef,\n orientation: 'horizontal',\n property: '--git-rows-top',\n minimum: GIT_SPLIT_MIN_ROW_PX,\n fallback: GIT_SPLIT_DEFAULT_ROW_PERCENT,\n });\n const columns = useGitPaneSplit({\n containerRef: gridRef,\n orientation: 'vertical',\n property: '--git-columns-left',\n minimum: GIT_SPLIT_MIN_COLUMN_PX,\n fallback: GIT_SPLIT_DEFAULT_COLUMN_PERCENT,\n });\n const historyValue = state.history.status === 'ready' ? state.history.value : undefined;\n const commit = selectedCommit(historyValue, state.selectedCommit);\n const files = state.files.status === 'ready' ? readyFiles(state.files.value) : [];\n const diff = state.diff.status === 'ready' ? state.diff.value : undefined;\n const refreshing = state.history.status === 'ready' && state.history.refreshing === true;\n const unavailable = historyValue?.unavailableReason;\n const branchOptions = (state.branches.status === 'ready' ? state.branches.value : [])\n .filter((branch) => branch.name !== currentBranch);\n const branchError = state.branches.status === 'error'\n ? state.branches.error\n : state.branches.status === 'ready'\n ? state.branches.error\n : undefined;\n const baselineCommit = historyValue?.baseline?.commit;\n const baselineRef = state.baselineBranch ?? historyValue?.baseline?.ref;\n const targetLabel = state.view === 'summary'\n ? t('dashboard.git.baselineSummary')\n : state.selectedCommits.length > 1\n ? t('dashboard.git.selectedCommitCount', { n: state.selectedCommits.length })\n : commit === undefined\n ? undefined\n : commitLabel(commit, t);\n const hasTarget = state.view === 'summary' || commit !== undefined;\n const lineTotals = state.files.status === 'ready' && hasTarget ? sumLineTotals(files) : undefined;\n return (_jsxs(\"section\", { className: styles.gitPanel, \"data-dashboard-git-panel\": true, children: [_jsxs(\"header\", { className: styles.gitPanelHeader, children: [_jsxs(\"div\", { className: styles.gitPanelHeading, children: [_jsx(\"h2\", { children: t('dashboard.git.title') }), !isMain && (_jsxs(\"label\", { className: styles.gitBaselineSelector, children: [_jsx(\"span\", { children: t('dashboard.git.baselineSelector') }), _jsxs(\"select\", { value: state.baselineBranch ?? '', \"data-dashboard-git-baseline\": true, disabled: state.branches.status === 'loading', onChange: (event) => state.selectBaselineBranch(event.currentTarget.value || undefined), children: [_jsx(\"option\", { value: \"\", children: t('dashboard.git.selectBaseline') }), state.baselineBranch !== undefined && !branchOptions.some((branch) => branch.name === state.baselineBranch) && (_jsx(\"option\", { value: state.baselineBranch, children: state.baselineBranch })), branchOptions.map((branch) => (_jsx(\"option\", { value: branch.name, children: branch.name }, branch.name)))] })] })), baselineCommit !== undefined && (_jsxs(\"dl\", { className: styles.gitBaselineFacts, children: [_jsxs(\"div\", { children: [_jsx(\"dt\", { children: t('dashboard.git.base') }), _jsxs(\"dd\", { children: [baselineRef !== undefined ? (_jsxs(_Fragment, { children: [baselineRef, _jsxs(\"code\", { children: [\"@ \", shortCommit(baselineCommit)] })] })) : (_jsx(\"code\", { children: shortCommit(baselineCommit) })), historyValue?.baseline?.source === 'derived' && (_jsx(\"span\", { className: styles.gitDerived, children: t('dashboard.git.derived') }))] })] }), historyValue !== undefined && (_jsxs(_Fragment, { children: [_jsxs(\"div\", { children: [_jsx(\"dt\", { children: t('dashboard.git.head') }), _jsx(\"dd\", { children: _jsx(\"code\", { children: shortCommit(historyValue.headCommit) }) })] }), _jsxs(\"div\", { children: [_jsx(\"dt\", { children: t('dashboard.git.commits') }), _jsx(\"dd\", { children: commitCountLabel(historyValue, t) })] }), historyValue.ahead !== undefined && historyValue.behind !== undefined && (_jsxs(\"div\", { children: [_jsx(\"dt\", { children: t('dashboard.aheadBehind') }), _jsx(\"dd\", { children: _jsx(GitLineStats, { additions: historyValue.ahead, deletions: historyValue.behind, ariaLabel: t('dashboard.git.aheadBehindStats', {\n ahead: historyValue.ahead,\n behind: historyValue.behind,\n }) }) })] }))] }))] }))] }), _jsx(\"button\", { type: \"button\", className: styles.gitRefresh, \"data-dashboard-git-refresh\": true, disabled: isMain || refreshing || state.history.status === 'loading', \"aria-busy\": refreshing || state.history.status === 'loading', onClick: () => void state.refresh(), children: refreshing ? t('dashboard.git.refreshing') : t('dashboard.git.refresh') })] }), branchError !== undefined && (_jsxs(\"div\", { className: styles.gitError, role: \"alert\", children: [_jsx(\"p\", { children: t('dashboard.git.loadFailed', { reason: errorText(branchError, t) }) }), _jsx(\"button\", { type: \"button\", onClick: () => void state.loadBranches(), children: t('dashboard.git.retry') })] })), isMain && _jsx(UnavailableNotice, { reason: \"main\", t: t }), !isMain && unavailable === 'baseline-unselected' && (_jsxs(\"div\", { className: styles.gitBaselinePrompt, \"data-dashboard-git-baseline-prompt\": true, children: [_jsx(\"strong\", { children: t('dashboard.git.selectBaselineTitle') }), _jsx(\"p\", { children: t('dashboard.git.selectBaselineDescription') })] })), state.history.status === 'loading' && (_jsx(\"div\", { className: styles.gitLoading, role: \"status\", children: t('dashboard.git.loading') })), state.history.status === 'error' && (_jsxs(\"div\", { className: styles.gitError, role: \"alert\", children: [_jsx(\"p\", { children: t('dashboard.git.loadFailed', { reason: errorText(state.history.error, t) }) }), _jsx(\"button\", { type: \"button\", onClick: () => void state.refresh(), children: t('dashboard.git.retry') })] })), state.history.status === 'ready' && state.history.error !== undefined && (_jsxs(\"div\", { className: styles.gitError, role: \"alert\", children: [_jsx(\"p\", { children: t('dashboard.git.refreshFailed', { reason: errorText(state.history.error, t) }) }), _jsx(\"button\", { type: \"button\", onClick: () => void state.refresh(), children: t('dashboard.git.retry') })] })), state.history.status === 'ready' && historyValue !== undefined && unavailable !== undefined && (_jsx(UnavailableNotice, { reason: unavailable, t: t })), state.history.status === 'ready' && historyValue !== undefined && unavailable === undefined && (_jsxs(\"div\", { className: styles.gitColumns, ref: gridRef, children: [_jsxs(\"section\", { className: styles.gitColumn, \"data-dashboard-git-pane\": \"commits\", \"aria-label\": t('dashboard.git.commits'), children: [_jsxs(\"div\", { className: styles.gitColumnHeader, children: [_jsx(\"h3\", { children: t('dashboard.git.commits') }), _jsxs(\"div\", { className: styles.gitColumnHeaderControls, children: [historyValue.truncated && _jsx(\"span\", { children: t('dashboard.git.truncatedHistory') }), _jsxs(\"label\", { className: styles.gitCommitMultiSelect, title: t('dashboard.git.multiSelectCommitsDescription'), children: [_jsx(\"input\", { type: \"checkbox\", role: \"switch\", \"data-dashboard-git-multi-select\": true, \"aria-describedby\": \"dashboard-git-commit-selection-hint\", checked: state.commitMultiSelect, onChange: (event) => state.setCommitMultiSelect(event.currentTarget.checked) }), _jsx(\"span\", { className: styles.gitCommitMultiSelectTrack, \"aria-hidden\": \"true\", children: _jsx(\"span\", { className: styles.gitCommitMultiSelectThumb }) }), _jsx(\"span\", { className: styles.gitCommitMultiSelectLabel, children: t('dashboard.git.multiSelectCommits') })] })] })] }), _jsxs(\"button\", { type: \"button\", className: styles.gitSummaryButton, \"data-dashboard-git-summary\": true, \"aria-pressed\": state.view === 'summary', onClick: state.selectSummary, children: [_jsx(\"span\", { children: t('dashboard.git.baselineSummary') }), _jsx(\"small\", { children: t('dashboard.git.baselineSummaryDescription') })] }), state.view === 'summary' && (_jsxs(\"label\", { className: styles.gitSummaryToggle, \"data-dashboard-git-include-working-tree\": true, children: [_jsx(\"input\", { type: \"checkbox\", checked: state.includeWorkingTree, disabled: state.files.status === 'loading', onChange: (event) => state.setIncludeWorkingTree(event.currentTarget.checked) }), _jsxs(\"span\", { children: [_jsx(\"strong\", { children: t('dashboard.git.includeWorkingTree') }), _jsx(\"small\", { children: t('dashboard.git.includeWorkingTreeDescription') })] })] })), _jsx(\"span\", { id: \"dashboard-git-commit-selection-hint\", className: styles.gitSrOnly, children: t('dashboard.git.commitSelectionHint') }), historyValue.commits.length === 0 && _jsx(\"div\", { className: styles.gitEmpty, children: t('dashboard.git.noCommits') }), _jsx(GitCommitList, { commits: historyValue.commits, selectedCommit: state.selectedCommit, selectedCommits: state.selectedCommits, multiSelect: state.commitMultiSelect, onSelect: state.selectCommit, onToggle: state.toggleCommit, t: t })] }), _jsx(GitSplitter, { split: rows, orientation: \"horizontal\", axis: \"rows\", label: t('dashboard.git.resizeRows') }), _jsxs(\"section\", { className: styles.gitColumn, \"data-dashboard-git-pane\": \"changed-files\", \"aria-label\": t('dashboard.git.changedFiles'), \"aria-busy\": state.files.status === 'loading', children: [_jsxs(\"div\", { className: styles.gitColumnHeader, children: [_jsx(\"h3\", { children: t('dashboard.git.changedFiles') }), _jsxs(\"div\", { className: styles.gitColumnHeaderMeta, children: [targetLabel !== undefined && (state.selectedCommits.length > 1 || state.view === 'summary'\n ? _jsx(\"span\", { children: targetLabel })\n : _jsx(\"code\", { children: targetLabel })), state.files.status === 'ready' && hasTarget && (lineTotals === undefined ? (_jsx(\"span\", { className: styles.gitColumnHeaderUnknown, children: t('dashboard.unknown') })) : (_jsx(GitLineStats, { additions: lineTotals.additions, deletions: lineTotals.deletions, ariaLabel: t('dashboard.git.lineStats', {\n additions: lineTotals.additions,\n deletions: lineTotals.deletions,\n }) })))] })] }), state.commitMultiSelect && state.selectedCommits.length > 0 && state.view === 'commits' && (_jsxs(\"div\", { className: styles.gitSelectionToolbar, children: [_jsx(\"span\", { children: t('dashboard.git.selectedCommitCount', { n: state.selectedCommits.length }) }), _jsx(\"button\", { type: \"button\", onClick: state.clearCommitSelection, children: t('dashboard.git.clearCommitSelection') })] })), !hasTarget ? (_jsx(\"div\", { className: styles.gitEmpty, children: t('dashboard.git.selectCommit') })) : state.files.status === 'loading' ? (_jsx(\"div\", { className: styles.gitLoading, role: \"status\", children: state.view === 'summary' ? t('dashboard.git.loadingSummaryFiles') : t('dashboard.git.loadingFiles') })) : state.files.status === 'error' ? (_jsx(\"div\", { className: styles.gitError, role: \"alert\", children: errorText(state.files.error, t) })) : (_jsxs(_Fragment, { children: [state.files.status === 'ready' && state.files.error !== undefined && (_jsx(\"div\", { className: styles.gitError, role: \"alert\", children: errorText(state.files.error, t) })), state.files.status === 'ready' && state.files.value.truncated === true && (_jsx(\"div\", { className: styles.gitEmpty, role: \"status\", \"data-dashboard-git-files-truncated\": true, children: t('dashboard.git.truncatedFiles') })), files.length === 0 && !(state.files.status === 'ready' && state.files.value.truncated === true) ? (_jsx(\"div\", { className: styles.gitEmpty, children: state.view === 'summary'\n ? state.includeWorkingTree\n ? t('dashboard.git.noLiveBaselineChanges')\n : t('dashboard.git.noBaselineChanges')\n : t('dashboard.git.noFiles') })) : (_jsx(GitChangedFiles, { files: files, selectedPath: state.selectedPath, onSelect: state.selectPath, t: t }))] }))] }), _jsx(GitSplitter, { split: columns, orientation: \"vertical\", axis: \"columns\", label: t('dashboard.git.resizeColumns') }), _jsxs(\"section\", { className: styles.gitColumn, \"data-dashboard-git-pane\": \"diff\", \"aria-label\": t('dashboard.git.diff'), \"aria-busy\": state.diff.status === 'loading', children: [_jsxs(\"div\", { className: styles.gitColumnHeader, children: [_jsx(\"h3\", { children: state.view === 'summary' ? t('dashboard.git.summaryDiff') : t('dashboard.git.diff') }), state.selectedPath !== undefined && _jsx(\"code\", { title: state.selectedPath, children: state.selectedPath })] }), state.diff.status === 'loading' ? (_jsx(\"div\", { className: styles.gitLoading, role: \"status\", children: state.view === 'summary' ? t('dashboard.git.loadingSummaryDiff') : t('dashboard.git.loadingDiff') })) : state.diff.status === 'error' ? (_jsx(\"div\", { className: styles.gitError, role: \"alert\", children: errorText(state.diff.error, t) })) : (_jsx(GitDiffView, { diff: diff, onOpenFile: onOpenFile, t: t }))] })] }))] }));\n}\n/**\n * Draggable divider that resizes one axis of the Git grid. The wide layout puts\n * the row divider inside the left column and the column divider beside it; the\n * narrow layout keeps both, between the top panes and above the diff.\n */\nfunction GitSplitter({ split, orientation, axis, label }) {\n return (_jsx(\"div\", { className: styles.gitColumnSplitter, \"data-dashboard-git-splitter\": axis, \"data-dashboard-git-splitting\": split.dragging ? 'true' : undefined, role: \"separator\", \"aria-orientation\": orientation, \"aria-label\": label, \"aria-valuemin\": 0, \"aria-valuemax\": 100, \"aria-valuenow\": Math.round(split.percent), title: label, tabIndex: 0, ref: split.splitterRef, onPointerDown: split.startDrag, onPointerMove: split.drag, onPointerUp: split.endDrag, onPointerCancel: split.endDrag, onLostPointerCapture: split.endDrag, onDoubleClick: split.reset, onKeyDown: split.onKeyDown }));\n}\nfunction errorText(error, t) {\n return error.message || t('dashboard.unknownError');\n}\n//# sourceMappingURL=WorktreeGitPanel.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, useState } from 'react';\nimport { WORKTREE_GIT_WORKING_TREE } from '../../../contract/index.js';\nimport { isMainWorktreeId, normalizeBaselineBranch, sumLineTotals } from './git-facts.js';\nimport { GitLineStats } from './GitLineStats.js';\nimport styles from '../dashboard.css';\nfunction isWorkingTreeCommit(commit) {\n return commit.kind === 'working-tree' || commit.sha === WORKTREE_GIT_WORKING_TREE;\n}\n/** Read the compact Git projections needed by the Overview status facts. */\nexport function useWorktreeGitOverview(input) {\n const baselineBranch = normalizeBaselineBranch(input.defaultBaselineBranch, input.currentBranch);\n // A captured acquisition commit keeps the Overview readable without a selected\n // branch; Main and genuinely baseline-less records still make no Git request.\n const readable = input.capturedBaseline === true || baselineBranch !== undefined;\n const [state, setState] = useState({ status: 'unavailable' });\n useEffect(() => {\n if (input.manager === undefined || isMainWorktreeId(input.worktreeId) || !readable) {\n setState({ status: 'unavailable' });\n return;\n }\n const manager = input.manager;\n let active = true;\n setState({ status: 'loading' });\n void manager.listWorktreeCommits({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n })\n .then(async (history) => {\n const workingTree = history.commits.find(isWorkingTreeCommit);\n const committedFilesPromise = history.unavailableReason === undefined\n ? manager.listWorktreeCommitFiles({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n selection: { kind: 'summary', includeWorkingTree: false },\n }).then((result) => result.files)\n : Promise.resolve([]);\n const workingTreeFilesPromise = workingTree === undefined\n ? Promise.resolve([])\n : manager.listWorktreeCommitFiles({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n commit: workingTree.sha,\n }).then((result) => result.files);\n const [committedFiles, workingTreeFiles] = await Promise.all([\n committedFilesPromise,\n workingTreeFilesPromise,\n ]);\n if (active)\n setState({ status: 'ready', history, committedFiles, workingTreeFiles });\n })\n .catch(() => {\n if (active)\n setState({ status: 'error' });\n });\n return () => {\n active = false;\n };\n }, [baselineBranch, readable, input.manager, input.workspaceId, input.worktreeId]);\n return state;\n}\nexport function WorktreeGitOverviewValue({ state, metric, t, }) {\n if (state.status !== 'ready') {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });\n }\n if (metric === 'aheadBehind') {\n const { ahead, behind } = state.history;\n if (ahead === undefined || behind === undefined) {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });\n }\n return (_jsx(GitLineStats, { additions: ahead, deletions: behind, ariaLabel: t('dashboard.git.aheadBehindStats', { ahead, behind }) }));\n }\n if (state.history.unavailableReason !== undefined) {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });\n }\n const files = metric === 'committed' ? state.committedFiles : state.workingTreeFiles;\n const totals = sumLineTotals(files);\n if (totals === undefined) {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.unknown') });\n }\n return (_jsx(GitLineStats, { additions: totals.additions, deletions: totals.deletions, ariaLabel: t('dashboard.git.lineStats', {\n additions: totals.additions,\n deletions: totals.deletions,\n }) }));\n}\n//# sourceMappingURL=WorktreeGitOverview.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useEffect, useId, useLayoutEffect, useRef, useState } from 'react';\nimport { Button, IconBranchOutline16, IconCheckOutline16, IconCopyOutline16, IconEditOutline16, IconPanelLeftOutline16, IconSearchOutline16, Input, Modal, StateDot, Tooltip, writeClipboard, } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { isBlankSession, relativeTime, sessionDisplayLabel } from '../session/session-view.js';\nimport { sessionStatusLabel, sessionTimeLabel } from '../session/session-labels.js';\nimport { OpenInAppButton } from './OpenInAppButton.js';\nimport { mountDashboardOverlay } from './dashboard-overlay.js';\nimport { isMainWorktreeId } from './dashboard-selection.js';\nimport { selectWorktreeAcquisitionFacts } from './worktree-acquisition-facts.js';\nimport styles from './dashboard.css';\nimport { WorktreeInstructions } from './WorktreeInstructions.js';\nimport { WorktreeGitPanel } from './git/WorktreeGitPanel.js';\nimport { useWorktreeGitOverview, WorktreeGitOverviewValue, } from './git/WorktreeGitOverview.js';\nconst TABS = ['overview', 'git', 'sessions', 'children', 'settings'];\nfunction DashboardIcon({ kind }) {\n const paths = {\n overview: 'M3 3h7v7H3z M14 3h7v7h-7z M3 14h7v7H3z M14 14h7v7h-7z',\n git: 'M7 7v10 M17 7v3c0 4-10 0-10 4 M5 3h4v4H5z M5 17h4v4H5z M15 3h4v4h-4z',\n sessions: 'M4 4h16v13H9l-5 4z M8 8h8 M8 12h5',\n children: 'M12 7v5 M5 17v-5h14v5 M9 3h6v4H9z M2 17h6v4H2z M16 17h6v4h-6z',\n settings: 'M4 6h16 M4 12h16 M4 18h16 M8 3v6 M16 9v6 M10 15v6',\n instructions: 'M5 3h14v18H5z M8 7h8 M8 11h8 M8 15h5',\n actions: 'M13 2 4 14h7l-1 8 10-13h-8z',\n };\n return (_jsx(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"1.6\", strokeLinecap: \"round\", strokeLinejoin: \"round\", \"aria-hidden\": \"true\", children: _jsx(\"path\", { d: paths[kind] }) }));\n}\nfunction Card({ title, icon, action, children, }) {\n return (_jsxs(\"section\", { className: styles.dashboardCard, children: [_jsxs(\"div\", { className: styles.dashboardCardHeading, children: [_jsxs(\"h2\", { children: [icon, title] }), action] }), children] }));\n}\nfunction DashboardFactRow({ label, children, action, baseline = false, }) {\n return (_jsxs(\"div\", { children: [_jsx(\"dt\", { children: label }), _jsx(\"dd\", { \"data-dashboard-baseline\": baseline ? true : undefined, children: children }), _jsx(\"span\", { className: styles.dashboardFactAction, children: action })] }));\n}\nfunction PlaceholderButton({ children, t }) {\n return (_jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: true, title: t('dashboard.soon'), children: children }));\n}\nfunction WorktreeBaselineEditor({ value, branches, currentBranch, onSave, t, disabled, }) {\n const [saved, setSaved] = useState(value);\n const [draft, setDraft] = useState();\n const [search, setSearch] = useState('');\n const [pending, setPending] = useState(false);\n const [error, setError] = useState(false);\n const busy = useRef(false);\n const alive = useRef(true);\n const optionRefs = useRef([]);\n const trigger = useRef(null);\n const wasOpen = useRef(false);\n const expected = useRef(value);\n const pickerId = useId();\n const options = branches.filter((branch) => branch.name !== currentBranch);\n useEffect(() => {\n alive.current = true;\n return () => {\n alive.current = false;\n };\n }, []);\n useEffect(() => {\n setSaved(value);\n expected.current = value;\n }, [value]);\n useEffect(() => {\n if (wasOpen.current && draft === undefined)\n trigger.current?.focus();\n wasOpen.current = draft !== undefined;\n }, [draft]);\n const closeEditor = () => {\n if (pending)\n return;\n setDraft(undefined);\n setSearch('');\n setError(false);\n };\n const openEditor = () => {\n expected.current = saved;\n setDraft(saved ?? '');\n setSearch('');\n setError(false);\n };\n const query = search.trim().toLowerCase();\n const filteredOptions = query.length === 0\n ? options\n : options.filter((branch) => branch.name.toLowerCase().includes(query));\n const activeIndex = filteredOptions.findIndex((branch) => branch.name === draft);\n // The list is a permanent, fixed-height region: filtering swaps its rows but\n // never changes its height, so the modal frame stays put.\n const listOpen = filteredOptions.length > 0;\n const selectOption = (index) => {\n if (pending)\n return;\n const branch = filteredOptions[index];\n if (branch === undefined)\n return;\n setDraft(branch.name);\n };\n const moveOption = (offset) => {\n if (filteredOptions.length === 0)\n return;\n const nextIndex = activeIndex < 0\n ? offset > 0\n ? 0\n : filteredOptions.length - 1\n : (activeIndex + offset + filteredOptions.length) % filteredOptions.length;\n selectOption(nextIndex);\n optionRefs.current[nextIndex]?.scrollIntoView({ block: 'nearest' });\n };\n const onSearchKeyDown = (event) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n moveOption(event.key === 'ArrowDown' ? 1 : -1);\n }\n else if (event.key === 'Enter' && filteredOptions.length > 0) {\n event.preventDefault();\n selectOption(activeIndex < 0 ? 0 : activeIndex);\n }\n };\n const save = async () => {\n if (busy.current ||\n draft === undefined ||\n onSave === undefined ||\n !options.some((branch) => branch.name === draft))\n return;\n busy.current = true;\n setPending(true);\n setError(false);\n try {\n const result = await onSave(draft, expected.current);\n if (alive.current) {\n setSaved(result);\n expected.current = result;\n setDraft(undefined);\n setSearch('');\n }\n }\n catch {\n if (alive.current)\n setError(true);\n }\n finally {\n busy.current = false;\n if (alive.current)\n setPending(false);\n }\n };\n return (_jsxs(_Fragment, { children: [_jsx(DashboardFactRow, { label: t('dashboard.base'), baseline: true, action: onSave !== undefined ? (_jsx(Tooltip, { label: t('dashboard.editBase'), side: \"bottom\", delayMs: 500, disabled: disabled || options.length === 0, children: _jsx(\"button\", { type: \"button\", ref: trigger, className: styles.dashboardIconButton, \"data-dashboard-baseline-edit\": true, \"aria-label\": t('dashboard.editBase'), title: t('dashboard.editBase'), \"aria-haspopup\": \"dialog\", \"aria-expanded\": draft !== undefined, disabled: disabled || options.length === 0, onClick: openEditor, children: _jsx(IconEditOutline16, {}) }) })) : undefined, children: saved === undefined ? (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) : (_jsx(\"span\", { \"data-dashboard-baseline-value\": true, children: saved })) }), _jsx(Modal, { open: draft !== undefined, onClose: closeEditor, closeLabel: t('dialog.closeBaseline'), title: t('dashboard.editBase'), description: t('dashboard.editBaseDescription'), className: styles.dashboardBaselineModal, contentClassName: styles.dashboardBaselineModalContent, footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: closeEditor, children: t('dashboard.cancelBase') }), _jsx(Button, { variant: \"primary\", \"data-dashboard-baseline-save\": true, disabled: pending || disabled || !options.some((branch) => branch.name === draft), onClick: () => void save(), children: t(pending ? 'dashboard.savingBase' : 'dashboard.saveBase') })] }), children: _jsxs(\"div\", { className: styles.dashboardBaselinePicker, \"data-dashboard-baseline-modal\": true, children: [_jsx(Input, { icon: _jsx(IconSearchOutline16, {}), className: styles.dashboardBaselineSearch, \"aria-label\": t('dashboard.searchBranches'), role: \"combobox\", \"aria-autocomplete\": \"list\", \"aria-controls\": listOpen ? `${pickerId}-options` : undefined, \"aria-expanded\": listOpen, \"aria-haspopup\": \"listbox\", \"aria-activedescendant\": listOpen && activeIndex >= 0 ? `${pickerId}-option-${activeIndex}` : undefined, \"data-dashboard-baseline-search\": true, disabled: pending || disabled, placeholder: t('dashboard.searchBranches'), value: search, onKeyDown: onSearchKeyDown, onChange: (event) => setSearch(event.currentTarget.value) }), _jsx(\"div\", { className: styles.dashboardBaselineOptions, \"data-dashboard-baseline-options\": true, children: listOpen ? (_jsx(\"div\", { id: `${pickerId}-options`, className: styles.dashboardBaselineList, role: \"listbox\", \"aria-label\": t('dashboard.searchBranches'), children: filteredOptions.map((branch, index) => (_jsxs(\"button\", { type: \"button\", ref: (element) => {\n optionRefs.current[index] = element;\n }, id: `${pickerId}-option-${index}`, className: styles.dashboardBaselineOption, \"data-dashboard-baseline-option\": branch.name, \"data-highlighted\": activeIndex === index ? true : undefined, role: \"option\", \"aria-selected\": branch.name === draft, onClick: () => selectOption(index), children: [_jsx(IconBranchOutline16, {}), _jsx(\"span\", { className: styles.dashboardBaselineOptionLabel, children: branch.name }), branch.name === draft && _jsx(IconCheckOutline16, {})] }, branch.name))) })) : (_jsx(\"div\", { className: styles.dashboardBaselineEmpty, \"data-dashboard-baseline-empty\": true, role: \"status\", \"aria-live\": \"polite\", children: t('dashboard.noMatchingBranches') })) }), _jsx(\"div\", { className: styles.dashboardBaselineStatus, \"data-dashboard-baseline-status\": true, children: error && (_jsx(\"span\", { className: styles.dashboardBaselineError, \"data-dashboard-baseline-error\": true, role: \"alert\", children: t('dashboard.baseSaveFailed') })) })] }) })] }));\n}\n/** A Worktree or browser Main projection with explicit unavailable states where Git is not applicable. */\nexport function WorktreeDashboard({ manager, record, workspaceTitle, t, onClose, onOpenSidebar, isRightSidebarExpanded, sessions, sessionPresentations, sessionIds, actionPending, onOpenSession, onCreateSession, onCreateWorktree, onArchiveWorktree, onOpenFile, onSaveInstructions, onSaveBaseline, branches = [], }) {\n const surface = useRef(null);\n const heading = useRef(null);\n const [placement, setPlacement] = useState();\n const [rightSidebarOpen, setRightSidebarOpen] = useState(Boolean(isRightSidebarExpanded?.()));\n const [tab, setTab] = useState('overview');\n const [baselineBranch, setBaselineBranch] = useState(record.baseBranch);\n const [copyState, setCopyState] = useState('idle');\n const [branchCopyState, setBranchCopyState] = useState('idle');\n const copyGeneration = useRef(0);\n const branchCopyGeneration = useRef(0);\n const copyPending = useRef(false);\n const branchCopyPending = useRef(false);\n const id = useId();\n useEffect(() => {\n setBaselineBranch(record.baseBranch);\n }, [record.baseBranch]);\n useLayoutEffect(() => {\n const element = surface.current;\n if (!element)\n return;\n return mountDashboardOverlay(element, (next) => setPlacement((previous) => JSON.stringify(previous) === JSON.stringify(next) ? previous : next), {\n onRightSidebarChange: (open) => setRightSidebarOpen(open),\n isRightSidebarExpanded,\n });\n }, [isRightSidebarExpanded]);\n useLayoutEffect(() => {\n if (!placement)\n return;\n const previous = document.activeElement;\n const element = surface.current;\n heading.current?.focus({ preventScroll: true });\n return () => {\n if (previous instanceof HTMLElement &&\n previous.isConnected &&\n (element?.contains(document.activeElement) || document.activeElement === document.body)) {\n previous.focus({ preventScroll: true });\n }\n };\n }, [placement !== undefined]);\n useEffect(() => {\n copyGeneration.current += 1;\n copyPending.current = false;\n setCopyState('idle');\n return () => {\n copyGeneration.current += 1;\n };\n }, [record.absolutePath]);\n useEffect(() => {\n branchCopyGeneration.current += 1;\n branchCopyPending.current = false;\n setBranchCopyState('idle');\n return () => {\n branchCopyGeneration.current += 1;\n };\n }, [record.branch]);\n const copyPath = async () => {\n if (copyPending.current)\n return;\n copyPending.current = true;\n const generation = copyGeneration.current;\n setCopyState('pending');\n try {\n const copied = await writeClipboard(record.absolutePath);\n if (generation === copyGeneration.current)\n setCopyState(copied ? 'copied' : 'failed');\n }\n catch {\n if (generation === copyGeneration.current)\n setCopyState('failed');\n }\n finally {\n if (generation === copyGeneration.current)\n copyPending.current = false;\n }\n };\n const branchAvailable = record.branch.length > 0;\n const displayBranch = branchAvailable ? record.branch : t('dashboard.branchUnavailable');\n const copyBranch = async () => {\n if (!branchAvailable || branchCopyPending.current)\n return;\n branchCopyPending.current = true;\n const generation = branchCopyGeneration.current;\n setBranchCopyState('pending');\n try {\n const copied = await writeClipboard(record.branch);\n if (generation === branchCopyGeneration.current)\n setBranchCopyState(copied ? 'copied' : 'failed');\n }\n catch {\n if (generation === branchCopyGeneration.current)\n setBranchCopyState('failed');\n }\n finally {\n if (generation === branchCopyGeneration.current)\n branchCopyPending.current = false;\n }\n };\n const healthKey = record.health === 'ready'\n ? 'worktree.ready'\n : record.health === 'repair'\n ? 'worktree.repair'\n : record.health === 'recovery-needed'\n ? 'worktree.recovery'\n : record.health === 'branch-drift'\n ? 'worktree.branchDrift'\n : record.health === 'cleaned'\n ? 'dashboard.cleaned'\n : 'dashboard.unknown';\n const liveBranch = record.currentBranch === null\n ? t('dashboard.detached')\n : (record.currentBranch ??\n (branchAvailable ? record.branch : t('dashboard.branchUnavailable')));\n const baselineCurrentBranch = record.currentBranch === undefined ? record.branch : record.currentBranch ?? undefined;\n const persistBaseline = onSaveBaseline === undefined\n ? undefined\n : async (baseBranch, expectedBaseBranch) => {\n const result = await onSaveBaseline(baseBranch, expectedBaseBranch);\n setBaselineBranch(result);\n return result;\n };\n const displayedBaseline = onSaveBaseline === undefined ? record.baseBranch : baselineBranch;\n const gitOverview = useWorktreeGitOverview({\n manager,\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n defaultBaselineBranch: displayedBaseline,\n currentBranch: baselineCurrentBranch,\n capturedBaseline: record.baseCommit !== undefined,\n });\n const acquisitionFacts = selectWorktreeAcquisitionFacts(record);\n const acquisitionLabel = acquisitionFacts.timestampKind === 'imported' ? 'dashboard.imported' : 'dashboard.created';\n const tabLabel = (value) => t(`dashboard.tab.${value}`);\n const placeholder = _jsx(\"span\", { className: styles.dashboardSoon, children: t('dashboard.soon') });\n const selectTab = (next, focus = false) => {\n setTab(next);\n if (focus)\n document.getElementById(`${id}-${next}`)?.focus();\n };\n const tabLink = (next, label) => (_jsxs(\"button\", { type: \"button\", className: styles.dashboardLink, onClick: () => selectTab(next, true), children: [label, _jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u2192\" })] }));\n const sessionList = (ids) => ids.length === 0 ? (_jsx(\"div\", { className: styles.dashboardEmpty, children: _jsx(\"p\", { children: t('dashboard.noSessions') }) })) : (_jsx(\"ul\", { className: styles.dashboardSessions, children: ids.map((sessionId) => {\n const presentation = sessionPresentations[sessionId];\n const blank = isBlankSession(sessionId, sessions);\n const statusLabel = presentation === undefined ? undefined : sessionStatusLabel(t, presentation.status);\n const showTrailingStatus = !blank &&\n presentation !== undefined &&\n (presentation.status.state !== 'done' || presentation.completed);\n const timeValue = !blank && !showTrailingStatus && presentation?.updatedAt !== undefined\n ? relativeTime(presentation.updatedAt, Date.now())\n : undefined;\n const timeLabel = timeValue === undefined ? undefined : sessionTimeLabel(t, timeValue);\n return (_jsx(\"li\", { children: _jsxs(\"button\", { type: \"button\", \"data-dashboard-session\": sessionId, \"aria-current\": sessions.current === sessionId ? 'page' : undefined, onClick: () => onOpenSession(sessionId), children: [_jsx(DashboardIcon, { kind: \"sessions\" }), _jsx(\"span\", { className: styles.dashboardSessionLabel, children: sessionDisplayLabel(sessionId, sessions, t('session.new')) }), !blank && (_jsx(\"span\", { className: styles.dashboardSessionMeta, children: showTrailingStatus && presentation !== undefined ? (_jsx(\"span\", { className: styles.dashboardSessionStatus, \"data-dashboard-session-status\": statusLabel, role: \"img\", \"aria-label\": statusLabel, title: statusLabel, children: _jsx(StateDot, { state: presentation.status.state }) })) : timeLabel !== undefined ? (_jsx(\"span\", { className: styles.dashboardSessionTime, \"data-dashboard-session-time\": true, children: timeLabel })) : null })), _jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u2192\" })] }) }, sessionId));\n }) }));\n const topActionIsCreateSession = sessionIds.length === 0 && onCreateSession !== undefined;\n return (_jsx(\"section\", { ref: surface, className: styles.dashboardSurface, \"data-worktree-dashboard\": record.worktreeId, \"aria-labelledby\": `${id}-title`, style: placement ?? { visibility: 'hidden', height: 0 }, onKeyDown: (event) => {\n if (event.key === 'Escape') {\n // Other dashboard menus own Escape even when focus remains elsewhere in the surface.\n if (event.currentTarget.querySelector('[role=\"menu\"]'))\n return;\n event.stopPropagation();\n onClose();\n }\n }, children: _jsxs(\"div\", { className: styles.dashboardPage, children: [_jsxs(\"div\", { className: styles.dashboardTopline, children: [_jsxs(\"span\", { children: [workspaceTitle, _jsx(\"span\", { \"aria-hidden\": \"true\", children: \" / \" }), t('dashboard.preview')] }), _jsxs(\"div\", { className: styles.dashboardToplineActions, children: [_jsx(\"button\", { type: \"button\", className: styles.dashboardButton, \"aria-label\": t(topActionIsCreateSession ? 'dashboard.newSession' : 'dashboard.back'), onClick: () => {\n if (topActionIsCreateSession)\n onCreateSession?.();\n else\n onClose();\n }, children: topActionIsCreateSession ? t('dashboard.newSession') : _jsxs(_Fragment, { children: [\"\\u2190 \", t('dashboard.back')] }) }), !rightSidebarOpen && onOpenSidebar !== undefined && (_jsx(Tooltip, { label: t('dashboard.openSidebar'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.dashboardSidebarButton, \"aria-label\": t('dashboard.openSidebar'), title: t('dashboard.openSidebar'), \"data-sidebar-right-expand\": true, onClick: () => {\n onOpenSidebar();\n setRightSidebarOpen(true);\n }, children: _jsx(IconPanelLeftOutline16, {}) }) }))] })] }), _jsxs(\"header\", { className: styles.dashboardHeader, children: [_jsxs(\"div\", { className: styles.dashboardIdentity, children: [_jsxs(\"div\", { className: styles.dashboardTitleRow, \"data-dashboard-copy\": \"branch\", role: branchAvailable ? 'button' : undefined, tabIndex: branchAvailable ? 0 : undefined, \"aria-label\": branchAvailable ? t('dashboard.copyBranch') : undefined, title: branchAvailable ? t('dashboard.copyBranch') : undefined, \"aria-busy\": branchAvailable && branchCopyState === 'pending' ? true : undefined, onClick: branchAvailable ? () => void copyBranch() : undefined, onKeyDown: branchAvailable\n ? (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n void copyBranch();\n }\n }\n : undefined, children: [_jsx(IconBranchOutline16, {}), _jsx(\"h1\", { id: `${id}-title`, ref: heading, tabIndex: -1, children: displayBranch }), _jsxs(\"span\", { className: styles.dashboardHealth, \"data-health\": record.health ?? 'unknown', children: [_jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u25CF\" }), t(healthKey)] }), record.status === 'removed' && (_jsx(\"span\", { className: styles.dashboardSoon, children: t('dashboard.archived') }))] }), _jsxs(\"div\", { className: styles.dashboardPath, children: [_jsx(\"span\", { className: styles.dashboardFieldLabel, children: \"cwd\" }), _jsx(\"code\", { children: record.absolutePath }), _jsx(\"button\", { type: \"button\", className: styles.dashboardIconButton, \"aria-label\": t('worktree.copyPath'), title: t('worktree.copyPath'), disabled: copyState === 'pending', onClick: () => {\n void copyPath();\n }, children: _jsx(IconCopyOutline16, {}) })] }), _jsx(\"p\", { className: styles.dashboardCopyStatus, role: branchCopyState === 'failed' ||\n (branchCopyState === 'idle' && copyState === 'failed')\n ? 'alert'\n : 'status', children: branchCopyState === 'pending'\n ? '\\u00a0'\n : branchCopyState === 'copied'\n ? t('dashboard.branchCopied')\n : branchCopyState === 'failed'\n ? t('dashboard.branchCopyFailed')\n : copyState === 'copied'\n ? t('dashboard.copied')\n : copyState === 'failed'\n ? t('dashboard.copyFailed')\n : '\\u00a0' })] }), _jsxs(\"div\", { className: styles.dashboardHeaderAside, children: [_jsx(OpenInAppButton, { path: record.absolutePath, t: t }), _jsxs(\"dl\", { className: styles.dashboardFacts, children: [_jsx(DashboardFactRow, { label: t(acquisitionLabel), children: acquisitionFacts.timestamp ? (_jsx(\"time\", { dateTime: acquisitionFacts.timestamp, children: new Date(acquisitionFacts.timestamp).toLocaleString() })) : (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) }), !isMainWorktreeId(record.worktreeId) && persistBaseline !== undefined ? (_jsx(WorktreeBaselineEditor, { value: baselineBranch, branches: branches, currentBranch: baselineCurrentBranch, onSave: persistBaseline, t: t, disabled: record.status !== 'active' || record.health === 'recovery-needed' })) : (_jsx(DashboardFactRow, { label: t('dashboard.base'), baseline: true, children: displayedBaseline ?? (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) })), _jsx(DashboardFactRow, { label: t('dashboard.source'), children: isMainWorktreeId(record.worktreeId)\n ? t('worktree.main')\n : t(record.source === 'external' ? 'dashboard.external' : 'dashboard.plugin') })] })] })] }), _jsx(\"div\", { className: styles.dashboardTabs, role: \"tablist\", \"aria-label\": t('dashboard.title'), children: TABS.map((value) => (_jsxs(\"button\", { type: \"button\", id: `${id}-${value}`, role: \"tab\", \"aria-selected\": tab === value, \"aria-controls\": `${id}-panel`, tabIndex: tab === value ? 0 : -1, onClick: () => selectTab(value), onKeyDown: (event) => {\n const index = TABS.indexOf(value);\n const next = event.key === 'ArrowRight'\n ? TABS[(index + 1) % TABS.length]\n : event.key === 'ArrowLeft'\n ? TABS[(index + TABS.length - 1) % TABS.length]\n : event.key === 'Home'\n ? TABS[0]\n : event.key === 'End'\n ? TABS[TABS.length - 1]\n : undefined;\n if (next) {\n event.preventDefault();\n selectTab(next, true);\n }\n }, children: [_jsx(DashboardIcon, { kind: value }), tabLabel(value)] }, value))) }), _jsx(\"div\", { id: `${id}-panel`, role: \"tabpanel\", \"aria-labelledby\": `${id}-${tab}`, tabIndex: 0, className: styles.dashboardPanel, children: tab === 'overview' ? (_jsxs(\"div\", { className: styles.dashboardGrid, children: [_jsxs(\"div\", { className: styles.dashboardColumn, children: [_jsxs(\"section\", { className: styles.dashboardStart, children: [_jsxs(\"h2\", { children: [_jsx(IconBranchOutline16, {}), t('dashboard.start')] }), _jsx(\"p\", { children: t('dashboard.startDescription') }), _jsxs(\"div\", { className: styles.dashboardStartActions, children: [_jsxs(\"button\", { type: \"button\", disabled: actionPending || !onCreateWorktree, onClick: onCreateWorktree, \"data-dashboard-action\": \"create-worktree\", children: [_jsx(DashboardIcon, { kind: \"git\" }), _jsxs(\"span\", { children: [_jsx(\"strong\", { children: t('dashboard.newWorktree') }), _jsx(\"small\", { children: t('dashboard.newWorktreeDescription') })] })] }), _jsxs(\"button\", { type: \"button\", disabled: actionPending || !onCreateSession, onClick: onCreateSession, \"data-dashboard-action\": \"create-session\", children: [_jsx(DashboardIcon, { kind: \"sessions\" }), _jsxs(\"span\", { children: [_jsx(\"strong\", { children: t('dashboard.newSession') }), _jsx(\"small\", { children: t('dashboard.newSessionDescription') })] })] })] })] }), _jsxs(Card, { title: t('dashboard.instructions'), icon: _jsx(DashboardIcon, { kind: \"instructions\" }), children: [_jsx(\"p\", { children: t('dashboard.instructionsDescription') }), _jsx(WorktreeInstructions, { value: record.instructions ?? '', onSave: onSaveInstructions, t: t, disabled: actionPending || record.health === 'recovery-needed' })] }), _jsxs(Card, { title: tabLabel('sessions'), icon: _jsx(DashboardIcon, { kind: \"sessions\" }), action: _jsx(\"span\", { children: sessionIds.length }), children: [sessionList(sessionIds.slice(0, 5)), tabLink('sessions', t('dashboard.viewSessions'))] })] }), _jsxs(\"div\", { className: styles.dashboardColumn, children: [_jsxs(Card, { title: t('dashboard.status'), icon: _jsx(DashboardIcon, { kind: \"git\" }), children: [_jsx(\"p\", { children: t('dashboard.statusHint') }), _jsxs(\"dl\", { className: styles.dashboardFacts, children: [_jsx(DashboardFactRow, { label: t('dashboard.health'), children: t(healthKey) }), _jsx(DashboardFactRow, { label: t('dashboard.branch'), children: liveBranch }), _jsx(DashboardFactRow, { label: t('dashboard.base'), children: displayedBaseline ?? (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) }), _jsx(DashboardFactRow, { label: t('dashboard.aheadBehind'), children: _jsx(WorktreeGitOverviewValue, { state: gitOverview, metric: \"aheadBehind\", t: t }) }), _jsx(DashboardFactRow, { label: t('dashboard.committedChanges'), children: _jsx(WorktreeGitOverviewValue, { state: gitOverview, metric: \"committed\", t: t }) }), _jsx(DashboardFactRow, { label: t('dashboard.workingTree'), children: _jsx(WorktreeGitOverviewValue, { state: gitOverview, metric: \"workingTree\", t: t }) })] }), tabLink('git', t('dashboard.viewDetails'))] }), _jsxs(Card, { title: t('dashboard.derived'), icon: _jsx(DashboardIcon, { kind: \"children\" }), action: placeholder, children: [_jsx(\"div\", { className: styles.dashboardEmpty, children: _jsx(\"p\", { children: t('dashboard.childrenHint') }) }), tabLink('children', t('dashboard.viewChildren'))] }), _jsx(Card, { title: t('dashboard.quickActions'), icon: _jsx(DashboardIcon, { kind: \"actions\" }), children: _jsxs(\"div\", { className: styles.dashboardQuickActions, children: [['terminal', 'diff', 'pullRequest', 'tests', 'sync'].map((action) => (_jsx(PlaceholderButton, { t: t, children: t(`dashboard.action.${action}`) }, action))), _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: actionPending || !onArchiveWorktree, onClick: onArchiveWorktree, \"data-dashboard-action\": \"archive-worktree\", children: t('dashboard.action.archive') })] }) })] })] })) : tab === 'git' ? (_jsx(WorktreeGitPanel, { manager: manager, workspaceId: record.workspaceId, worktreeId: record.worktreeId, defaultBaselineBranch: displayedBaseline, currentBranch: baselineCurrentBranch, capturedBaseline: record.baseCommit !== undefined, onOpenFile: (filePath) => {\n onOpenFile?.(filePath);\n setRightSidebarOpen(true);\n }, t: t })) : tab === 'sessions' ? (_jsx(Card, { title: tabLabel('sessions'), icon: _jsx(DashboardIcon, { kind: \"sessions\" }), action: _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: actionPending || !onCreateSession, onClick: onCreateSession, children: t('dashboard.newSession') }), children: sessionList(sessionIds) })) : (_jsxs(\"section\", { className: styles.dashboardTabPlaceholder, children: [_jsx(DashboardIcon, { kind: tab }), _jsx(\"h2\", { children: tabLabel(tab) }), _jsx(\"p\", { children: t(`dashboard.hint.${tab}`) }), placeholder] })) }), _jsx(\"p\", { className: styles.dashboardFooter, children: t('dashboard.mvpHint') })] }) }));\n}\n//# sourceMappingURL=WorktreeDashboard.js.map","import { filterVisibleSessionIds } from '../session/session-view.js';\nimport { filterArchivedSessionIds } from '../view/worktree-view.js';\nimport { isMainWorktreeId } from './dashboard-selection.js';\n/** Join retained snapshots without reading, mutating, or applying Sidebar search. */\nexport function dashboardSessionIds(record, sessions, bindings, archivedSessionIds, orderedIds = [], workspaceSessionIds = []) {\n if (isMainWorktreeId(record.worktreeId)) {\n const boundSessionIds = new Set(bindings\n .filter((binding) => binding.workspaceId === record.workspaceId && binding.status !== 'detached')\n .map((binding) => binding.sessionId));\n const visible = filterVisibleSessionIds(filterArchivedSessionIds(workspaceSessionIds.filter((sessionId) => !boundSessionIds.has(sessionId)), archivedSessionIds), sessions);\n const visibleIds = new Set(visible);\n return [...new Set([...orderedIds, ...visible])].filter((id) => visibleIds.has(id));\n }\n const members = new Set(bindings\n .filter((binding) => binding.workspaceId === record.workspaceId && binding.worktreeId === record.worktreeId)\n .map((binding) => binding.sessionId));\n const visible = filterVisibleSessionIds(filterArchivedSessionIds(sessions.ids.filter((sessionId) => members.has(sessionId)), archivedSessionIds), sessions);\n const visibleIds = new Set(visible);\n return [...new Set([...orderedIds, ...visible])].filter((id) => visibleIds.has(id));\n}\n//# sourceMappingURL=dashboard-sessions.js.map","/**\n * Keep Dashboard and the native Session sidebars on one Session identity.\n *\n * Keep the current Session when it belongs to the target; otherwise use the\n * first visible id in the Worktree's retained head order. An empty list is\n * still a valid page-level dashboard target: it carries no native Session identity\n * and leaves Session creation to the explicit Dashboard action.\n */\nexport function prepareDashboardNavigation(record, sessionIds, currentSessionId, phase = 'ready') {\n if (phase === 'pending') {\n return {\n selection: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n sessionId: undefined,\n },\n sessionIdToOpen: undefined,\n waitForSessionList: true,\n };\n }\n const sessionIdToOpen = currentSessionId !== undefined && sessionIds.includes(currentSessionId)\n ? currentSessionId\n : sessionIds[0];\n return {\n selection: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n sessionId: sessionIdToOpen,\n },\n sessionIdToOpen: sessionIdToOpen === undefined || sessionIdToOpen === currentSessionId\n ? undefined\n : sessionIdToOpen,\n };\n}\n/**\n * Settle a pending Session switch without resurrecting it after an unrelated switch.\n */\nexport function settlePendingDashboardNavigation(pending, currentSessionId) {\n if (pending === undefined)\n return { kind: 'wait' };\n if (currentSessionId === pending.selection.sessionId) {\n return { kind: 'open', selection: pending.selection };\n }\n if (currentSessionId !== pending.originSessionId)\n return { kind: 'clear' };\n return { kind: 'wait' };\n}\n//# sourceMappingURL=dashboard-navigation.js.map","/**\n * Canonical DSH session file address constructor.\n * Equivalent to `sessionFileAddress` from `@deepseek-ai/dsh-util-workspace-path`.\n * Address grammar: `dsh-resource://file/session/<sessionId>/<encodedPath>`\n */\nfunction encodeSegment(segment) {\n return encodeURIComponent(segment).replace(/%3A/gi, ':');\n}\nfunction encodePath(path) {\n return path.split('/').map(encodeSegment).join('/');\n}\nexport function buildSessionFileAddress(sessionId, path) {\n const normalized = path.replace(/\\\\/g, '/').replace(/^(?:\\.\\/)+/, '');\n return `dsh-resource://file/session/${encodeSegment(sessionId)}/${encodePath(normalized)}`;\n}\n//# sourceMappingURL=file-address.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { AccessConfirmation } from './surface/components/AccessConfirmation.js';\nimport { LifecycleDialogs } from './surface/components/LifecycleDialogs.js';\nimport { NativeDialogs } from './surface/components/NativeDialogs.js';\nimport { RegistrationDialog } from './surface/components/RegistrationDialog.js';\nimport { SurfaceContent } from './surface/components/SurfaceContent.js';\nimport { SurfaceHeader } from './surface/components/SurfaceHeader.js';\nimport { useDragActions } from './surface/actions/useDragActions.js';\nimport { useLifecycleActions } from './surface/actions/useLifecycleActions.js';\nimport { useLifecycleState } from './surface/state/useLifecycleState.js';\nimport { useNativeActions } from './surface/actions/useNativeActions.js';\nimport { useRegistrationState } from './surface/state/useRegistrationState.js';\nimport { useSessionActions } from './surface/actions/useSessionActions.js';\nimport { useSessionExpansion } from './surface/state/useSessionExpansion.js';\nimport { useSessionOrdering } from './surface/state/useSessionOrdering.js';\nimport { useSurfaceMenus } from './surface/state/useSurfaceMenus.js';\nimport { useSurfaceMutation } from './surface/actions/useSurfaceMutation.js';\nimport { useSurfaceRefresh } from './surface/state/useSurfaceRefresh.js';\nimport { useSurfaceSources } from './surface/state/useSurfaceSources.js';\nimport { useWorktreeRegistration } from './surface/actions/useWorktreeRegistration.js';\nimport styles from './worktree.css';\nimport { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react';\nimport { WorktreeDashboard } from './dashboard/WorktreeDashboard.js';\nimport { createMainWorktreeRecord, isMainWorktreeId, isManagedDashboardRecord, resolveDashboardRecord, } from './dashboard/dashboard-selection.js';\nimport { dashboardSessionIds } from './dashboard/dashboard-sessions.js';\nimport { prepareDashboardNavigation, settlePendingDashboardNavigation, } from './dashboard/dashboard-navigation.js';\nimport { buildSessionFileAddress } from './dashboard/git/file-address.js';\nimport { createNumberedWorktreeName } from './view/worktree-view.js';\nimport { workspaceSessionIds } from './view/view-mode.js';\n/** Composes independent surface state/action domains into the sidebar overlay. */\nexport function WorktreeSurface(inputProps) {\n const [internalDashboard, setInternalDashboard] = useState();\n const pendingDashboard = useRef();\n const pendingDashboardRecord = useRef();\n const openDashboardRef = useRef();\n const externalDashboard = inputProps.dashboardStore\n ? useSyncExternalStore(inputProps.dashboardStore.subscribe, inputProps.dashboardStore.getSnapshot, () => undefined)\n : undefined;\n const dashboard = inputProps.dashboardStore !== undefined ? externalDashboard : internalDashboard;\n const setDashboard = useCallback((selection) => {\n if (inputProps.dashboardStore !== undefined) {\n inputProps.dashboardStore.set(selection);\n }\n setInternalDashboard(selection);\n }, [inputProps.dashboardStore]);\n const closeDashboard = useCallback(() => {\n pendingDashboard.current = undefined;\n pendingDashboardRecord.current = undefined;\n setDashboard(undefined);\n }, [setDashboard]);\n const source = useSurfaceSources({ props: inputProps });\n useEffect(() => {\n if (source.mode !== 'worktree')\n closeDashboard();\n }, [source.mode, closeDashboard]);\n useEffect(() => () => {\n inputProps.dashboardStore?.set(undefined);\n }, [inputProps.dashboardStore]);\n const props = {\n ...inputProps,\n openDashboard: (record) => openDashboardRef.current?.(record),\n openSession: (sessionId) => {\n closeDashboard();\n inputProps.openSession(sessionId);\n },\n createMainSession: inputProps.createMainSession === undefined\n ? undefined\n : (workspaceId) => {\n closeDashboard();\n inputProps.createMainSession?.(workspaceId);\n },\n };\n const registrationState = useRegistrationState({ props });\n const read = useSurfaceRefresh({ source, props, registrationState });\n const targetWorkspace = dashboard === undefined\n ? undefined\n : source.workspaces.items.find((workspace) => workspace.workspaceId === dashboard.workspaceId);\n const targetView = dashboard === undefined ? undefined : read.viewByWorkspace.get(dashboard.workspaceId);\n const dashboardMainBranch = targetView?.branches.find((branch) => branch.isCurrent)?.name;\n const dashboardMainRecord = targetWorkspace === undefined\n ? undefined\n : createMainWorktreeRecord(targetWorkspace, dashboardMainBranch);\n const dashboardRecord = resolveDashboardRecord(dashboard, source.mode, source.currentSessionId, source.workspaceIds, dashboard === undefined\n ? undefined\n : targetView?.worktrees, dashboardMainRecord);\n useEffect(() => {\n if (dashboard !== undefined && dashboardRecord === undefined) {\n // A target Session switch can invalidate the old Dashboard in the same\n // commit that settles a new Worktree navigation. Do not cancel that\n // pending navigation while dismissing the stale page.\n setDashboard(undefined);\n }\n }, [dashboard, dashboardRecord, setDashboard]);\n const mutation = useSurfaceMutation({ read });\n const lifecycleState = useLifecycleState({ props, source, mutation });\n const menus = useSurfaceMenus();\n const ordering = useSessionOrdering({ read, source, props });\n const openDashboard = useCallback((record) => {\n const workspace = source.workspaces.items.find((candidate) => candidate.workspaceId === record.workspaceId);\n const view = read.viewByWorkspace.get(record.workspaceId);\n const sessionIds = dashboardSessionIds(record, source.sessions, view?.bindings ?? [], source.archivedSessionIds, isMainWorktreeId(record.worktreeId)\n ? ordering.orderedSessionIdsByAccount.get(`main:${record.workspaceId}`)\n : ordering.orderedSessionIdsByAccount.get(`worktree:${record.worktreeId}`), workspace === undefined\n ? []\n : workspaceSessionIds(source.workspaces, workspace.workspaceId, source.sessions.ids));\n const navigation = prepareDashboardNavigation(record, sessionIds, source.currentSessionId, source.sessions.phase ?? 'ready');\n if (navigation.waitForSessionList === true) {\n pendingDashboard.current = undefined;\n pendingDashboardRecord.current = record;\n return;\n }\n pendingDashboardRecord.current = undefined;\n if (navigation.sessionIdToOpen !== undefined) {\n pendingDashboard.current = {\n selection: navigation.selection,\n originSessionId: source.currentSessionId,\n };\n inputProps.openSession(navigation.sessionIdToOpen);\n return;\n }\n pendingDashboard.current = undefined;\n if (navigation.selection.sessionId === undefined)\n inputProps.closeRightSidebar?.();\n setDashboard(navigation.selection);\n }, [\n inputProps.closeRightSidebar,\n inputProps.openSession,\n ordering.orderedSessionIdsByAccount,\n read.viewByWorkspace,\n setDashboard,\n source.archivedSessionIds,\n source.currentSessionId,\n source.sessions,\n source.workspaces,\n ]);\n openDashboardRef.current = openDashboard;\n useEffect(() => {\n if (source.sessions.phase === 'pending')\n return;\n const pendingRecord = pendingDashboardRecord.current;\n if (pendingRecord === undefined)\n return;\n pendingDashboardRecord.current = undefined;\n openDashboard(pendingRecord);\n }, [openDashboard, source.sessions.phase]);\n useEffect(() => {\n const settlement = settlePendingDashboardNavigation(pendingDashboard.current, source.currentSessionId);\n if (settlement.kind === 'open') {\n pendingDashboard.current = undefined;\n setDashboard(settlement.selection);\n }\n else if (settlement.kind === 'clear') {\n pendingDashboard.current = undefined;\n }\n }, [setDashboard, source.currentSessionId]);\n const expansion = useSessionExpansion({ read, source, props });\n const native = useNativeActions({ source, props, mutation });\n const drag = useDragActions({\n source,\n orderedSessionIdsByAccount: ordering.orderedSessionIdsByAccount,\n props,\n mutation,\n read,\n });\n const session = useSessionActions({ source, props, mutation, read });\n const registration = useWorktreeRegistration({\n source,\n registrationState,\n read,\n props,\n mutation,\n session,\n });\n const lifecycle = useLifecycleActions({ read, lifecycleState, source, props, mutation });\n const dashboardWorkspace = source.workspaces.items.find((workspace) => workspace.workspaceId === dashboardRecord?.workspaceId);\n const dashboardView = dashboardRecord === undefined\n ? undefined\n : read.viewByWorkspace.get(dashboardRecord.workspaceId);\n const dashboardCanCreate = dashboardRecord?.status === 'active' &&\n dashboardRecord.diskCleanup !== 'completed' &&\n dashboardRecord.health !== 'cleaned' &&\n dashboardRecord.health !== 'repair' &&\n dashboardRecord.health !== 'recovery-needed';\n const dashboardManagedRecord = dashboardRecord !== undefined && isManagedDashboardRecord(dashboardRecord)\n ? dashboardRecord\n : undefined;\n const onOpenFile = useCallback((filePath, options) => {\n if (typeof props.openResource !== 'function' || dashboardRecord === undefined)\n return;\n const worktreeSessions = dashboardSessionIds(dashboardRecord, source.sessions, dashboardView?.bindings ?? [], source.archivedSessionIds, isMainWorktreeId(dashboardRecord.worktreeId)\n ? ordering.orderedSessionIdsByAccount.get(`main:${dashboardRecord.workspaceId}`)\n : ordering.orderedSessionIdsByAccount.get(`worktree:${dashboardRecord.worktreeId}`), dashboardWorkspace === undefined\n ? []\n : workspaceSessionIds(source.workspaces, dashboardWorkspace.workspaceId, source.sessions.ids));\n // A file opened from Git must stay inside the Dashboard Worktree.\n // Never fall back to the current or another Workspace Session.\n const targetSessionId = source.currentSessionId !== undefined &&\n worktreeSessions.includes(source.currentSessionId)\n ? source.currentSessionId\n : undefined;\n if (targetSessionId === undefined)\n return;\n const address = buildSessionFileAddress(targetSessionId, filePath);\n props.openResource(address, options);\n }, [\n props.openResource,\n dashboardRecord,\n source.currentSessionId,\n source.sessions,\n source.archivedSessionIds,\n source.workspaces,\n dashboardView?.bindings,\n ordering.orderedSessionIdsByAccount,\n dashboardWorkspace,\n ]);\n if (source.mode !== 'worktree')\n return null;\n const { ref, width, bounds, collapsed } = source;\n const { t } = props;\n return (_jsxs(_Fragment, { children: [_jsxs(\"aside\", { ref: ref, className: styles.surface, \"data-worktree-surface\": true, \"data-collapsed\": collapsed || undefined, \"aria-label\": t('mode.navigation'), style: {\n width: `${width}px`,\n ...(bounds.ready\n ? { top: `${bounds.top}px`, height: `${bounds.height}px` }\n : { height: '0px', visibility: 'hidden' }),\n }, children: [_jsxs(\"div\", { className: styles.wideContent, children: [_jsx(SurfaceHeader, { expansion: expansion, props: props, source: source, read: read, mutation: mutation }), _jsx(SurfaceContent, { source: source, props: props, lifecycle: lifecycle, mutation: mutation, session: session, read: read, expansion: expansion, ordering: ordering, drag: drag, menus: menus, registration: registration, native: native, lifecycleState: lifecycleState })] }), _jsx(NativeDialogs, { props: props, native: native }), _jsx(RegistrationDialog, { props: props, registration: registration, registrationState: registrationState, mutation: mutation, read: read }), _jsx(LifecycleDialogs, { props: props, lifecycleState: lifecycleState, mutation: mutation, lifecycle: lifecycle, expansion: expansion, read: read, session: session }), _jsx(AccessConfirmation, { source: source, props: props })] }), dashboardRecord !== undefined && (_jsx(WorktreeDashboard, { manager: props.manager, record: dashboardRecord, onSaveInstructions: props.manager && !isMainWorktreeId(dashboardRecord.worktreeId)\n ? async (instructions, expectedInstructions) => {\n try {\n return await props.manager.updateWorktreeInstructions({\n workspaceId: dashboardRecord.workspaceId,\n worktreeId: dashboardRecord.worktreeId,\n instructions,\n expectedInstructions,\n });\n }\n finally {\n void read.refresh({\n preserveCurrent: true,\n scope: { kind: 'workspace', workspaceId: dashboardRecord.workspaceId },\n });\n }\n }\n : undefined, onSaveBaseline: props.manager &&\n typeof props.manager.updateWorktreeBaseBranch === 'function' &&\n dashboardManagedRecord !== undefined &&\n dashboardCanCreate\n ? async (baseBranch, expectedBaseBranch) => {\n try {\n return await props.manager.updateWorktreeBaseBranch({\n workspaceId: dashboardRecord.workspaceId,\n worktreeId: dashboardRecord.worktreeId,\n baseBranch,\n expectedBaseBranch,\n });\n }\n finally {\n void read.refresh({\n preserveCurrent: true,\n scope: { kind: 'workspace', workspaceId: dashboardRecord.workspaceId },\n });\n }\n }\n : undefined, branches: dashboardView?.branches ?? [], workspaceTitle: dashboardWorkspace?.title ?? '', sessions: source.sessions, sessionPresentations: source.sessionPresentations, sessionIds: dashboardSessionIds(dashboardRecord, source.sessions, dashboardView?.bindings ?? [], source.archivedSessionIds, isMainWorktreeId(dashboardRecord.worktreeId)\n ? ordering.orderedSessionIdsByAccount.get(`main:${dashboardRecord.workspaceId}`)\n : ordering.orderedSessionIdsByAccount.get(`worktree:${dashboardRecord.worktreeId}`), dashboardWorkspace === undefined\n ? []\n : workspaceSessionIds(source.workspaces, dashboardWorkspace.workspaceId, source.sessions.ids)), actionPending: mutation.actionPending, onOpenFile: typeof props.openResource === 'function' ? onOpenFile : undefined, onOpenSession: (sessionId) => session.openWorkspaceSession(dashboardRecord.workspaceId, sessionId), onCreateSession: dashboardCanCreate &&\n (isMainWorktreeId(dashboardRecord.worktreeId)\n ? props.createMainSession !== undefined\n : props.createSessionForWorktree !== undefined)\n ? () => {\n if (mutation.actionPending)\n return;\n closeDashboard();\n if (isMainWorktreeId(dashboardRecord.worktreeId)) {\n props.createMainSession?.(dashboardRecord.workspaceId);\n }\n else {\n void session.createSession({\n workspaceId: dashboardRecord.workspaceId,\n worktreeId: dashboardRecord.worktreeId,\n cwd: dashboardRecord.absolutePath,\n });\n }\n }\n : undefined, onCreateWorktree: dashboardCanCreate &&\n dashboardRecord.currentBranch !== null &&\n dashboardRecord.branch.length > 0 &&\n dashboardWorkspace !== undefined &&\n dashboardView !== undefined\n ? () => {\n if (mutation.actionPending)\n return;\n const branch = dashboardRecord.currentBranch ?? dashboardRecord.branch;\n registration.openWorktreeCreator(dashboardWorkspace, {\n baseBranch: branch,\n newBranch: createNumberedWorktreeName(branch, [\n ...dashboardView.branches.map((candidate) => candidate.name),\n ...dashboardView.worktrees.map((candidate) => candidate.branch),\n ]),\n });\n }\n : undefined, onArchiveWorktree: dashboardManagedRecord !== undefined &&\n dashboardManagedRecord.status === 'active' &&\n dashboardManagedRecord.health !== 'recovery-needed'\n ? () => {\n if (mutation.actionPending)\n return;\n lifecycleState.setWorktreeRemoval(dashboardManagedRecord);\n mutation.setActionError(undefined);\n }\n : undefined, t: t, onClose: closeDashboard, onOpenSidebar: source.currentSessionId === undefined ? undefined : props.openRightSidebar, isRightSidebarExpanded: props.isRightSidebarExpanded }, `${dashboardRecord.workspaceId}:${dashboardRecord.worktreeId}`))] }));\n}\n//# sourceMappingURL=WorktreeSurface.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { WorktreeHeroContext } from '../context/WorktreeHeroContext.js';\nimport { WorktreeSurface } from '../WorktreeSurface.js';\n/** Compose the independent Hero context and Worktree navigation overlays. */\nexport function WorktreeOverlay(props) {\n return (_jsxs(_Fragment, { children: [_jsx(WorktreeHeroContext, { ...props }), _jsx(WorktreeSurface, { ...props })] }));\n}\n//# sourceMappingURL=WorktreeOverlay.js.map","const none = (reason) => ({\n kind: 'none',\n reason,\n});\n/** Resolve the branch or active Worktree label for one current DSH Session. */\nexport function resolveWorktreeSessionContext(input) {\n const sessionId = input.currentSessionId;\n if (sessionId === undefined && input.currentWorkspaceId === undefined)\n return none('no-session');\n const workspace = sessionId === undefined\n ? input.workspaces.find(({ workspaceId }) => workspaceId === input.currentWorkspaceId)\n : input.workspaces.find(({ sessionIds }) => sessionIds.includes(sessionId));\n if (workspace === undefined)\n return none('unbound');\n const binding = sessionId === undefined\n ? undefined\n : input.bindings.find((candidate) => candidate.sessionId === sessionId);\n if (binding !== undefined) {\n if (binding.workspaceId !== workspace.workspaceId)\n return none('workspace-mismatch');\n if (binding.status === 'detached')\n return none('detached');\n const record = input.worktrees.find((candidate) => candidate.worktreeId === binding.worktreeId);\n if (record === undefined || record.workspaceId !== workspace.workspaceId) {\n return none(record === undefined ? 'stale' : 'workspace-mismatch');\n }\n if (record.diskCleanup === 'completed' || record.health === 'cleaned') {\n return none('detached');\n }\n if (record.health === 'repair' || record.health === 'recovery-needed') {\n return none('repair');\n }\n if (record.branch.length === 0)\n return none('not-ready');\n return {\n kind: 'worktree',\n workspaceId: workspace.workspaceId,\n worktreeId: record.worktreeId,\n label: record.branch,\n source: 'active-binding',\n };\n }\n const currentBranch = input.branches.find(({ isCurrent }) => isCurrent);\n if (currentBranch === undefined || currentBranch.name.length === 0)\n return none('not-ready');\n return {\n kind: 'main',\n workspaceId: workspace.workspaceId,\n label: currentBranch.name,\n source: 'current-branch',\n };\n}\n//# sourceMappingURL=worktree-context.js.map","import { resolveWorktreeSessionContext, } from './worktree-context.js';\nimport { deriveRecentWorkspaceId } from '../view/view-mode.js';\nimport { toWorktreeViewError, } from '../view/worktree-view.js';\nconst notReady = () => ({ kind: 'none', reason: 'not-ready' });\nfunction scheduledRefresh() {\n let resolve;\n const promise = new Promise((resolvePromise) => {\n resolve = resolvePromise;\n });\n return { promise, resolve };\n}\nfunction identityFrom(sessions, workspaces) {\n const sessionSnapshot = sessions.getSnapshot();\n const workspaceSnapshot = workspaces.getSnapshot();\n const sessionId = sessionSnapshot.current;\n if (sessionId === undefined) {\n return {\n workspaceId: deriveRecentWorkspaceId({ items: workspaceSnapshot.items }, sessionSnapshot.byId),\n };\n }\n const workspace = workspaceSnapshot.items.find((candidate) => candidate.sessionIds.includes(sessionId));\n return { sessionId, workspaceId: workspace?.workspaceId };\n}\n/**\n * Build one browser-local current-Session projection shared by the header\n * consumer. Superseded requests may still finish on the transport, but their\n * results never become visible in the current snapshot.\n */\nexport function createWorktreeContextProjection(input) {\n const store = input.storeFactory({\n status: 'idle',\n value: notReady(),\n });\n let disposed = false;\n let generation = 0;\n let scheduled = false;\n let scheduleTicket = 0;\n let scheduledCompletion;\n let latestRefresh = Promise.resolve();\n let lastObservedIdentity;\n const sameIdentity = (left, right) => left?.sessionId === right.sessionId\n && left?.workspaceId === right.workspaceId;\n const workspaceTitleFor = (workspaceId) => input.workspaces.getSnapshot().items.find((candidate) => candidate.workspaceId === workspaceId)\n ?.title;\n const valueFrom = (identity, data) => resolveWorktreeSessionContext({\n currentSessionId: identity.sessionId,\n currentWorkspaceId: identity.workspaceId,\n workspaces: input.workspaces.getSnapshot().items,\n branches: data.branches,\n worktrees: data.worktrees,\n bindings: data.bindings,\n });\n const syncWorkspaceTitle = (identity) => {\n const current = store.getSnapshot();\n if (current.sessionId !== identity.sessionId ||\n current.workspaceId !== identity.workspaceId ||\n identity.workspaceId === undefined)\n return;\n const workspaceTitle = workspaceTitleFor(identity.workspaceId);\n if (current.workspaceTitle === workspaceTitle)\n return;\n store.set({ ...current, workspaceTitle });\n };\n const setPending = (identity) => {\n if (identity.workspaceId === undefined) {\n store.set({\n status: 'ready',\n value: resolveWorktreeSessionContext({\n currentSessionId: identity.sessionId,\n currentWorkspaceId: identity.workspaceId,\n workspaces: input.workspaces.getSnapshot().items,\n branches: [],\n worktrees: [],\n bindings: [],\n }),\n });\n return;\n }\n const current = store.getSnapshot();\n if (current.status === 'ready' && current.workspaceId !== identity.workspaceId) {\n // Keep the last valid context visible until the new Workspace facts arrive.\n return;\n }\n if (current.status === 'ready' && current.workspaceId === identity.workspaceId) {\n store.set({\n status: 'ready',\n ...(identity.sessionId === undefined ? {} : { sessionId: identity.sessionId }),\n workspaceId: identity.workspaceId,\n workspaceTitle: workspaceTitleFor(identity.workspaceId),\n value: current.value,\n });\n return;\n }\n store.set({\n status: 'loading',\n ...(identity.sessionId === undefined ? {} : { sessionId: identity.sessionId }),\n workspaceId: identity.workspaceId,\n workspaceTitle: workspaceTitleFor(identity.workspaceId),\n value: notReady(),\n });\n };\n const matchesCurrent = (request, requestGeneration) => {\n if (disposed || generation !== requestGeneration)\n return false;\n const current = identityFrom(input.sessions, input.workspaces);\n return current.sessionId === request.sessionId && current.workspaceId === request.workspaceId;\n };\n const runRefresh = async () => {\n if (disposed)\n return;\n const requestGeneration = ++generation;\n const identity = identityFrom(input.sessions, input.workspaces);\n lastObservedIdentity = identity;\n setPending(identity);\n if (identity.workspaceId === undefined)\n return;\n const request = {\n sessionId: identity.sessionId,\n workspaceId: identity.workspaceId,\n };\n try {\n const data = await input.viewReader.read(request.workspaceId);\n if (!matchesCurrent(request, requestGeneration))\n return;\n const workspace = input.workspaces.getSnapshot().items.find((candidate) => candidate.workspaceId === request.workspaceId);\n if ('error' in data.readiness) {\n store.set({\n status: 'error',\n ...(request.sessionId === undefined ? {} : { sessionId: request.sessionId }),\n workspaceId: request.workspaceId,\n workspaceTitle: workspace?.title,\n value: notReady(),\n error: data.readiness.error,\n });\n return;\n }\n store.set({\n status: 'ready',\n ...(request.sessionId === undefined ? {} : { sessionId: request.sessionId }),\n workspaceId: request.workspaceId,\n workspaceTitle: workspace?.title,\n value: valueFrom(request, data),\n });\n }\n catch (error) {\n if (!matchesCurrent(request, requestGeneration))\n return;\n store.set({\n status: 'error',\n ...(request.sessionId === undefined ? {} : { sessionId: request.sessionId }),\n workspaceId: request.workspaceId,\n workspaceTitle: input.workspaces.getSnapshot().items.find((candidate) => candidate.workspaceId === request.workspaceId)?.title,\n value: notReady(),\n error: toWorktreeViewError(error),\n });\n }\n };\n const cancelScheduledRefresh = () => {\n scheduleTicket += 1;\n scheduled = false;\n const completion = scheduledCompletion;\n scheduledCompletion = undefined;\n completion?.resolve();\n };\n const refresh = () => {\n cancelScheduledRefresh();\n lastObservedIdentity = identityFrom(input.sessions, input.workspaces);\n const completion = runRefresh();\n latestRefresh = completion;\n return completion;\n };\n const scheduleRefresh = () => {\n if (disposed)\n return;\n const identity = identityFrom(input.sessions, input.workspaces);\n if (sameIdentity(lastObservedIdentity, identity)) {\n syncWorkspaceTitle(identity);\n return;\n }\n lastObservedIdentity = identity;\n generation += 1;\n setPending(identity);\n if (scheduled)\n return;\n scheduled = true;\n const ticket = ++scheduleTicket;\n const completion = scheduledRefresh();\n scheduledCompletion = completion;\n latestRefresh = completion.promise;\n queueMicrotask(() => {\n if (disposed || ticket !== scheduleTicket) {\n completion.resolve();\n return;\n }\n scheduled = false;\n void runRefresh().finally(() => {\n if (scheduledCompletion === completion)\n scheduledCompletion = undefined;\n completion.resolve();\n });\n });\n };\n const waitForLatestRefresh = async (workspaceId) => {\n let observed;\n while (!disposed) {\n if (workspaceId !== undefined\n && identityFrom(input.sessions, input.workspaces).workspaceId !== workspaceId) {\n return;\n }\n const completion = latestRefresh;\n if (completion === observed)\n return;\n observed = completion;\n await completion;\n }\n };\n const unsubscribeSessions = input.sessions.subscribe(scheduleRefresh);\n const unsubscribeWorkspaces = input.workspaces.subscribe(scheduleRefresh);\n return {\n store,\n refresh,\n async invalidate(workspaceId) {\n if (disposed)\n return;\n const identity = identityFrom(input.sessions, input.workspaces);\n if (workspaceId !== undefined && workspaceId !== identity.workspaceId)\n return;\n if (identity.workspaceId === undefined)\n return;\n input.viewReader.invalidate(identity.workspaceId);\n await refresh();\n await waitForLatestRefresh(workspaceId ?? identity.workspaceId);\n },\n dispose() {\n if (disposed)\n return;\n disposed = true;\n generation += 1;\n cancelScheduledRefresh();\n unsubscribeSessions();\n unsubscribeWorkspaces();\n store.set({ status: 'idle', value: notReady() });\n },\n };\n}\n//# sourceMappingURL=worktree-context-store.js.map","import { defineStore } from '@deepseek-ai/dsh-client-store';\nimport { WORKTREE_VIEW_MODE_STORAGE_KEY, } from './view-mode.js';\n/** Create one root-scoped, browser-local view-mode store for the two slot entries. */\nexport function createWorktreeViewStore() {\n return defineStore({\n init: () => ({ viewMode: 'workspace-session' }),\n persist: WORKTREE_VIEW_MODE_STORAGE_KEY,\n actions: {\n setViewMode: (draft, mode) => {\n draft.viewMode = mode;\n },\n },\n });\n}\n//# sourceMappingURL=view-mode-store.js.map","import { projectVirtualWorkspaceMembership, } from '../view/view-mode.js';\nfunction normalizeBindings(bindings) {\n const bySession = new Map();\n for (const binding of bindings) {\n if (binding.workspaceId.length === 0 || binding.sessionId.length === 0)\n continue;\n bySession.set(binding.sessionId, binding);\n }\n return [...bySession.values()];\n}\nfunction sameBindings(left, right) {\n return left.length === right.length && left.every((binding, index) => {\n const other = right[index];\n return binding.workspaceId === other.workspaceId && binding.sessionId === other.sessionId;\n });\n}\n/**\n * Decorate DSH's read-only WorkspaceSource with a browser-local membership\n * projection. The source's native model is never written: the wrapper keeps\n * the current sidecar bindings in memory, reprojects every native snapshot,\n * and publishes only the projected view to subscribers.\n */\nexport function createVirtualWorkspaceMembership(list) {\n if (!Object.isExtensible(list)) {\n throw new Error('Workspace membership projection requires an extensible WorkspaceSource');\n }\n const nativeGetSnapshot = list.getSnapshot.bind(list);\n const nativeSubscribe = list.subscribe.bind(list);\n const originalGetSnapshot = Object.getOwnPropertyDescriptor(list, 'getSnapshot');\n const originalSubscribe = Object.getOwnPropertyDescriptor(list, 'subscribe');\n const listeners = new Set();\n let bindings = [];\n let nativeSnapshot = nativeGetSnapshot();\n let projectedSnapshot = projectVirtualWorkspaceMembership(nativeSnapshot, [], bindings);\n let disposed = false;\n const project = (nextNativeSnapshot, previousBindings, nextBindings) => projectVirtualWorkspaceMembership(nextNativeSnapshot, previousBindings, nextBindings);\n const refreshSnapshot = () => {\n const nextNativeSnapshot = nativeGetSnapshot();\n if (nextNativeSnapshot === nativeSnapshot)\n return false;\n nativeSnapshot = nextNativeSnapshot;\n const nextProjectedSnapshot = project(nextNativeSnapshot, bindings, bindings);\n const changed = nextProjectedSnapshot !== projectedSnapshot;\n projectedSnapshot = nextProjectedSnapshot;\n return changed;\n };\n const notify = () => {\n if (disposed)\n return;\n if (!refreshSnapshot())\n return;\n for (const listener of [...listeners])\n listener();\n };\n const getSnapshot = () => {\n if (disposed)\n return nativeGetSnapshot();\n refreshSnapshot();\n return projectedSnapshot;\n };\n const subscribe = (listener) => {\n if (disposed)\n return () => undefined;\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n Object.defineProperty(list, 'getSnapshot', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: getSnapshot,\n });\n Object.defineProperty(list, 'subscribe', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: subscribe,\n });\n const unsubscribeNative = nativeSubscribe(notify);\n const sync = (nextBindings) => {\n if (disposed)\n return;\n const normalized = normalizeBindings(nextBindings);\n if (sameBindings(bindings, normalized))\n return;\n const previousBindings = bindings;\n bindings = normalized;\n nativeSnapshot = nativeGetSnapshot();\n const previousProjectedSnapshot = projectedSnapshot;\n projectedSnapshot = project(nativeSnapshot, previousBindings, bindings);\n if (projectedSnapshot === previousProjectedSnapshot)\n return;\n for (const listener of [...listeners])\n listener();\n };\n const restoreMethod = (name, descriptor) => {\n if (descriptor === undefined) {\n delete list[name];\n return;\n }\n Object.defineProperty(list, name, descriptor);\n };\n return {\n ensure(binding) {\n if (disposed)\n return;\n if (bindings.some((current) => current.workspaceId === binding.workspaceId && current.sessionId === binding.sessionId)) {\n return;\n }\n sync([...bindings.filter((current) => current.sessionId !== binding.sessionId), binding]);\n },\n sync,\n removeSession(sessionId) {\n sync(bindings.filter((binding) => binding.sessionId !== sessionId));\n },\n dispose() {\n if (disposed)\n return;\n bindings = [];\n projectedSnapshot = nativeGetSnapshot();\n disposed = true;\n for (const listener of [...listeners])\n listener();\n unsubscribeNative();\n listeners.clear();\n restoreMethod('getSnapshot', originalGetSnapshot);\n restoreMethod('subscribe', originalSubscribe);\n },\n };\n}\n//# sourceMappingURL=virtual-workspace-membership.js.map","const englishReason = 'This Worktree Session may need Git metadata and linked Worktree files outside the Session directory. '\n + 'Full Access disables filesystem confinement for this Session; approval prompts remain enabled, '\n + 'and network and process policy is unchanged. Continue?';\nconst chineseReason = '这个 Worktree Session 可能需要访问 Session 目录之外的 Git 元数据和关联 Worktree 文件。'\n + '完全访问会关闭此 Session 的文件系统沙箱,但会保留审批提示,网络和进程策略不变。'\n + '是否继续?';\nexport function worktreeFullAccessConfirmationMessage(input, locale = globalThis.navigator?.language) {\n const reason = locale?.toLocaleLowerCase().startsWith('zh') === true\n ? chineseReason\n : englishReason;\n return `${reason}\\n\\nWorktree: ${input.cwd}`;\n}\n/**\n * Coordinate async permission requests with the one in-page confirmation\n * rendered by the Worktree surface. Requests are serialized so concurrent\n * Worktree Session creations cannot replace one another's dialog.\n */\nexport function createWorktreeFullAccessConfirmationController() {\n let active;\n const queue = [];\n const listeners = new Set();\n let disposed = false;\n const notify = () => {\n for (const listener of listeners)\n listener();\n };\n const showNext = () => {\n if (active !== undefined)\n return;\n active = queue.shift();\n notify();\n };\n const controller = {\n getSnapshot: () => active?.input,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n request: (input) => {\n if (disposed)\n return Promise.resolve(false);\n return new Promise((resolve) => {\n queue.push({ input, resolve });\n showNext();\n });\n },\n resolve: (confirmed) => {\n if (active === undefined)\n return;\n const current = active;\n active = undefined;\n current.resolve(confirmed);\n showNext();\n },\n dispose: () => {\n if (disposed)\n return;\n disposed = true;\n active?.resolve(false);\n active = undefined;\n for (const pending of queue.splice(0))\n pending.resolve(false);\n notify();\n },\n };\n return controller;\n}\n//# sourceMappingURL=worktree-permission.js.map","const PLUGIN_ID = '@cerbur/clutch-dsh-worktree';\nconst STYLE_ID = `${PLUGIN_ID}/permission-icon`;\nconst WORKTREE_PERMISSION_LABEL = 'Worktree Full Access';\n/** DOM marker owned only by this plugin's permission icon decorator. */\nexport const WORKTREE_PERMISSION_ICON_ATTRIBUTE = 'data-clutch-dsh-worktree-permission-icon';\n// The native DSH menu has no icon extension point for host-configured values.\n// A branch glyph keeps the custom option visually distinct while preserving\n// the same 16px geometry as the built-in permission glyphs.\nconst ICON_SVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M13.0762 1.37207C14.0846 1.37228 14.9021 2.19077 14.9023 3.19922C14.9022 4.20772 14.0847 5.02518 13.0762 5.02539C12.2967 5.02539 11.6325 4.53691 11.3701 3.84961H4.35547C4.79397 4.26458 5.15861 4.7644 5.41699 5.33496L7.10645 9.06738C7.88526 10.7875 9.55104 11.9228 11.4189 12.0371C11.7085 11.4109 12.3411 10.9756 13.0762 10.9756C14.0843 10.9759 14.9023 11.7936 14.9023 12.8018C14.9023 13.81 14.0843 14.6277 13.0762 14.6279C12.2534 14.6279 11.5574 14.0832 11.3291 13.335C8.9868 13.1879 6.89981 11.7612 5.92285 9.60352L4.23242 5.87109C3.67503 4.64033 2.44878 3.84961 1.09766 3.84961V2.54883C1.10665 2.54883 1.11601 2.54975 1.125 2.5498L11.3701 2.54883C11.6326 1.86151 12.2969 1.37207 13.0762 1.37207ZM13.0762 12.2764C12.7858 12.2764 12.5508 12.5114 12.5508 12.8018C12.5508 13.0921 12.7858 13.3281 13.0762 13.3281C13.3664 13.3279 13.6025 13.092 13.6025 12.8018C13.6025 12.5115 13.3664 12.2766 13.0762 12.2764ZM13.0762 2.67285C12.7855 2.67285 12.55 2.90861 12.5498 3.19922C12.5499 3.48987 12.7855 3.72559 13.0762 3.72559C13.3667 3.72538 13.6024 3.48975 13.6025 3.19922C13.6023 2.90874 13.3666 2.67306 13.0762 2.67285Z\" fill=\"black\"/></svg>';\nfunction iconStyles() {\n const mask = `url(\"data:image/svg+xml,${encodeURIComponent(ICON_SVG)}\")`;\n return `\n[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]::before {\n content: \"\";\n display: inline-block;\n flex: 0 0 auto;\n width: 16px;\n height: 16px;\n background-color: var(--dsw-alias-label-tertiary, currentColor);\n -webkit-mask-image: ${mask};\n mask-image: ${mask};\n -webkit-mask-position: center;\n mask-position: center;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: contain;\n mask-size: contain;\n}\n[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}=\"trigger\"]::before {\n width: 14px;\n height: 14px;\n}\n@container (max-width: 460px) {\n [${WORKTREE_PERMISSION_ICON_ATTRIBUTE}=\"trigger\"] > span:first-of-type {\n display: none;\n }\n}\n`;\n}\nfunction normalizedText(element) {\n return (element.textContent ?? '').replace(/\\s+/g, ' ').trim();\n}\nfunction isWorktreeMenuItem(element) {\n return element.matches('button[role=\"menuitem\"]') &&\n normalizedText(element) === WORKTREE_PERMISSION_LABEL &&\n element.closest('[role=\"menu\"]') !== null;\n}\nfunction isWorktreeTrigger(element) {\n if (!element.matches('button[aria-label]'))\n return false;\n const label = element.getAttribute('aria-label') ?? '';\n return /^(?:access mode,\\s*current:\\s*|访问模式,当前:\\s*)worktree full access$/iu.test(label.trim());\n}\n/** Mark the native custom permission row and trigger for CSS decoration. */\nexport function decorateWorktreePermissionIcons(document) {\n for (const marked of document.querySelectorAll(`[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]`)) {\n const kind = marked.getAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);\n if ((kind === 'menu' && !isWorktreeMenuItem(marked)) ||\n (kind === 'trigger' && !isWorktreeTrigger(marked))) {\n marked.removeAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);\n }\n }\n for (const item of document.querySelectorAll('button[role=\"menuitem\"]')) {\n if (isWorktreeMenuItem(item)) {\n item.setAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE, 'menu');\n }\n }\n for (const button of document.querySelectorAll('button[aria-label]')) {\n if (isWorktreeTrigger(button)) {\n button.setAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE, 'trigger');\n }\n }\n}\n/** Install the Worktree permission icon and return a plugin-local disposer. */\nexport function installWorktreePermissionIcon(document) {\n for (const existing of document.querySelectorAll('style[data-plugin-css]')) {\n if (existing.getAttribute('data-plugin-css') === STYLE_ID)\n existing.remove();\n }\n const style = document.createElement('style');\n style.setAttribute('data-plugin', PLUGIN_ID);\n style.setAttribute('data-plugin-css', STYLE_ID);\n style.textContent = iconStyles();\n document.head.appendChild(style);\n let active = true;\n let queued = false;\n const scan = () => {\n if (!active || queued)\n return;\n queued = true;\n queueMicrotask(() => {\n queued = false;\n if (active)\n decorateWorktreePermissionIcons(document);\n });\n };\n decorateWorktreePermissionIcons(document);\n const observer = typeof MutationObserver === 'function'\n ? new MutationObserver(scan)\n : undefined;\n observer?.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['aria-label'],\n characterData: true,\n childList: true,\n subtree: true,\n });\n return () => {\n if (!active)\n return;\n active = false;\n observer?.disconnect();\n style.remove();\n for (const marked of document.querySelectorAll(`[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]`)) {\n marked.removeAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);\n }\n };\n}\n//# sourceMappingURL=worktree-permission-icon.js.map","function reconciliationSnapshot(snapshot) {\n if (typeof snapshot !== 'object' ||\n snapshot === null ||\n snapshot.phase === 'pending' ||\n (snapshot.phase !== undefined && snapshot.phase !== 'ready') ||\n !Array.isArray(snapshot.ids) ||\n typeof snapshot.byId !== 'object' ||\n snapshot.byId === null ||\n Array.isArray(snapshot.byId)) {\n return undefined;\n }\n for (const sessionId of snapshot.ids) {\n if (typeof sessionId !== 'string')\n return undefined;\n const summary = snapshot.byId[sessionId];\n if (summary !== undefined &&\n (typeof summary !== 'object' || summary === null || Array.isArray(summary))) {\n return undefined;\n }\n const parentId = summary?.parentId;\n const origin = summary?.origin;\n const blank = summary?.blank;\n if ((parentId !== undefined && typeof parentId !== 'string') ||\n (origin !== undefined && typeof origin !== 'string') ||\n (blank !== undefined && typeof blank !== 'boolean')) {\n return undefined;\n }\n }\n const candidates = snapshot.ids.flatMap((childSessionId) => {\n const summary = snapshot.byId[childSessionId];\n if (summary?.parentId === undefined ||\n summary.parentId === childSessionId ||\n summary.blank === true ||\n summary.origin === 'subagent' ||\n snapshot.byId[summary.parentId] === undefined) {\n return [];\n }\n return [{ childSessionId, sourceSessionId: summary.parentId }];\n });\n const candidateFacts = candidates\n .map(({ childSessionId, sourceSessionId }) => [childSessionId, sourceSessionId])\n .sort(([leftChild, leftSource], [rightChild, rightSource]) => leftChild < rightChild || (leftChild === rightChild && leftSource < rightSource)\n ? -1\n : leftChild === rightChild && leftSource === rightSource\n ? 0\n : 1);\n return {\n // Ordinary Session notifications must not invalidate persisted Fork candidates.\n signature: JSON.stringify([snapshot.phase ?? 'ready', candidateFacts]),\n candidates,\n };\n}\nfunction recoveryKey(sourceSessionId, childSessionId) {\n return `${sourceSessionId}\\u0000${childSessionId}`;\n}\n/**\n * Coordinate native Session fork with the plugin-owned Worktree relation.\n * Native Session creation always wins: plugin lookup/bind failures are kept as\n * recovery state and never turn an already-created child into a failed fork.\n */\nexport function createWorktreeSessionForkCoordinator(options) {\n let disposed = false;\n let revision = 0;\n let pending = new Map();\n let recoverySnapshot = {\n revision: 0,\n pending: [],\n affectedWorkspaceIds: [],\n };\n const subscribers = new Set();\n const boundChildren = new Set();\n const bindingInFlight = new Map();\n let reconciliationInFlight;\n let reconciliationAgain = false;\n let reconciliationForce = false;\n let lastSessionLineageSignature;\n const sourceGeneration = new Map();\n const worktreeGeneration = new Map();\n const keyOf = (workspaceId, worktreeId) => JSON.stringify([workspaceId, worktreeId]);\n const versionOf = (versions, key) => versions.get(key) ?? 0;\n const publish = (affectedWorkspaceIds = []) => {\n revision += 1;\n recoverySnapshot = {\n revision,\n pending: [...pending.values()],\n affectedWorkspaceIds: [...new Set(affectedWorkspaceIds)],\n };\n for (const subscriber of subscribers)\n subscriber();\n };\n const setRecovery = (sourceSessionId, childSessionId, error, target) => {\n if (disposed)\n return;\n const key = recoveryKey(sourceSessionId, childSessionId);\n pending = new Map(pending).set(key, {\n key,\n sourceSessionId,\n childSessionId,\n ...(target === undefined ? {} : { binding: target }),\n error,\n });\n publish(target === undefined ? [] : [target.workspaceId]);\n };\n const clearRecovery = (sourceSessionId, childSessionId) => {\n const key = recoveryKey(sourceSessionId, childSessionId);\n const current = pending.get(key);\n if (current === undefined)\n return { cleared: false };\n const next = new Map(pending);\n next.delete(key);\n pending = next;\n return { cleared: true, workspaceId: current.binding?.workspaceId };\n };\n const lookupBinding = async (sourceSessionId) => {\n try {\n const index = await options.findBindings([sourceSessionId]);\n return index.bySessionId.get(sourceSessionId) ?? { status: 'missing' };\n }\n catch (error) {\n return { status: 'error', error };\n }\n };\n const attemptBinding = async (sourceSessionId, childSessionId, providedLookup) => {\n if (disposed || boundChildren.has(childSessionId))\n return { bound: false };\n const initialSourceGen = versionOf(sourceGeneration, sourceSessionId);\n const lookup = providedLookup ?? (await lookupBinding(sourceSessionId));\n if (disposed)\n return { bound: false };\n if (versionOf(sourceGeneration, sourceSessionId) !== initialSourceGen) {\n return { bound: false };\n }\n if (lookup.status === 'error') {\n setRecovery(sourceSessionId, childSessionId, lookup.error);\n return { bound: false };\n }\n if (lookup.status === 'missing' || lookup.binding.status !== 'active') {\n const cleared = clearRecovery(sourceSessionId, childSessionId);\n if (cleared.cleared) {\n publish(cleared.workspaceId === undefined ? [] : [cleared.workspaceId]);\n }\n return { bound: false };\n }\n const target = lookup.binding;\n const wtKey = keyOf(target.workspaceId, target.worktreeId);\n const initialWtGen = versionOf(worktreeGeneration, wtKey);\n try {\n await options.bindSession({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n sessionId: childSessionId,\n });\n if (disposed)\n return { bound: false };\n if (versionOf(sourceGeneration, sourceSessionId) !== initialSourceGen ||\n versionOf(worktreeGeneration, wtKey) !== initialWtGen) {\n return { bound: false };\n }\n const childBinding = {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n sessionId: childSessionId,\n status: 'active',\n };\n boundChildren.add(childSessionId);\n const { workspaceId: previousWorkspaceId } = clearRecovery(sourceSessionId, childSessionId);\n options.onBound?.(childBinding);\n publish([target.workspaceId, ...(previousWorkspaceId === undefined ? [] : [previousWorkspaceId])]);\n return { bound: true };\n }\n catch (error) {\n if (disposed ||\n versionOf(sourceGeneration, sourceSessionId) !== initialSourceGen ||\n versionOf(worktreeGeneration, wtKey) !== initialWtGen) {\n return { bound: false };\n }\n setRecovery(sourceSessionId, childSessionId, error, target);\n return { bound: false };\n }\n };\n const bindChild = (sourceSessionId, childSessionId, providedLookup) => {\n if (disposed || boundChildren.has(childSessionId)) {\n return Promise.resolve({ bound: false });\n }\n const key = recoveryKey(sourceSessionId, childSessionId);\n const current = bindingInFlight.get(key);\n if (current !== undefined)\n return current;\n const promise = attemptBinding(sourceSessionId, childSessionId, providedLookup).finally(() => {\n if (bindingInFlight.get(key) === promise)\n bindingInFlight.delete(key);\n });\n bindingInFlight.set(key, promise);\n return promise;\n };\n const reconcileNow = async (force) => {\n if (disposed || options.sessions === undefined)\n return;\n const snapshot = options.sessions.getSnapshot();\n const normalized = reconciliationSnapshot(snapshot);\n if (normalized === undefined)\n return;\n if (!force && normalized.signature === lastSessionLineageSignature)\n return;\n lastSessionLineageSignature = normalized.signature;\n const candidates = normalized.candidates.filter(({ childSessionId }) => !boundChildren.has(childSessionId));\n if (candidates.length === 0)\n return;\n const sourceSessionIds = [...new Set(candidates.map(({ sourceSessionId }) => sourceSessionId))];\n const lookupGenerations = new Map(sourceSessionIds.map((id) => [id, versionOf(sourceGeneration, id)]));\n let index;\n try {\n index = await options.findBindings(sourceSessionIds);\n }\n catch (error) {\n const bySessionId = new Map();\n for (const sourceSessionId of sourceSessionIds) {\n bySessionId.set(sourceSessionId, { status: 'error', error });\n }\n index = { bySessionId };\n }\n if (disposed)\n return;\n await Promise.all(candidates.filter(({ sourceSessionId }) => lookupGenerations.get(sourceSessionId) === versionOf(sourceGeneration, sourceSessionId)).map(({ childSessionId, sourceSessionId }) => bindChild(sourceSessionId, childSessionId, index.bySessionId.get(sourceSessionId) ?? { status: 'missing' }).then(() => undefined)));\n };\n const reconcile = (input = {}) => {\n const force = input.force === true;\n if (reconciliationInFlight !== undefined) {\n reconciliationAgain = true;\n reconciliationForce ||= force;\n return reconciliationInFlight;\n }\n let nextForce = force;\n const run = async () => {\n do {\n const forceThisPass = nextForce || reconciliationForce;\n nextForce = false;\n reconciliationForce = false;\n reconciliationAgain = false;\n await reconcileNow(forceThisPass);\n } while (!disposed && reconciliationAgain);\n };\n const promise = run().finally(() => {\n if (reconciliationInFlight === promise)\n reconciliationInFlight = undefined;\n });\n reconciliationInFlight = promise;\n return promise;\n };\n return {\n recovery: {\n getSnapshot() {\n return recoverySnapshot;\n },\n subscribe(listener) {\n subscribers.add(listener);\n return () => subscribers.delete(listener);\n },\n },\n async fork(input) {\n const generation = versionOf(sourceGeneration, input.sessionId);\n const childSessionId = await options.fork(input);\n if (!disposed && generation === versionOf(sourceGeneration, input.sessionId)) {\n await bindChild(input.sessionId, childSessionId);\n }\n return childSessionId;\n },\n reconcile,\n async retry(key) {\n const item = pending.get(key);\n if (item === undefined || disposed)\n return false;\n const providedLookup = item.binding === undefined\n ? undefined\n : { status: 'found', binding: item.binding };\n return (await bindChild(item.sourceSessionId, item.childSessionId, providedLookup)).bound;\n },\n forgetWorktree(input) {\n if (disposed)\n return;\n const wtKey = keyOf(input.workspaceId, input.worktreeId);\n worktreeGeneration.set(wtKey, versionOf(worktreeGeneration, wtKey) + 1);\n for (const sid of input.sessionIds) {\n sourceGeneration.set(sid, versionOf(sourceGeneration, sid) + 1);\n }\n let changed = false;\n const next = new Map(pending);\n for (const [key, item] of pending.entries()) {\n const matchWorktree = item.binding?.workspaceId === input.workspaceId &&\n item.binding?.worktreeId === input.worktreeId;\n const matchSession = input.sessionIds.includes(item.sourceSessionId);\n if (matchWorktree || matchSession) {\n next.delete(key);\n changed = true;\n }\n }\n if (changed) {\n pending = next;\n publish([input.workspaceId]);\n }\n },\n dispose() {\n disposed = true;\n bindingInFlight.clear();\n subscribers.clear();\n },\n };\n}\n//# sourceMappingURL=worktree-session-fork.js.map","import { createElement } from 'react';\nimport { createSnapshotStore } from '@deepseek-ai/dsh-client-store';\nimport { WORKTREE_NS, en, zh } from './locales.js';\nimport { createWorktreeConnectionAdapter } from './worktree-connection.js';\nimport { WorktreeHeaderContext } from './context/WorktreeContext.js';\nimport { WorktreeModeAction } from './view/WorktreeModeAction.js';\nimport { switchViewMode } from './view/view-mode-dispatch.js';\nimport { IconDashboard } from './dashboard/dashboard-icon.js';\nimport { DashboardHeaderAction } from './dashboard/DashboardHeaderAction.js';\nimport { WorktreeOverlay } from './overlay/WorktreeOverlay.js';\nimport { createWorktreeContextProjection } from './context/worktree-context-store.js';\nimport { createWorktreeExpandStateStore } from './view/worktree-expand-state.js';\nimport { createWorktreeSessionOrderStore } from './session/worktree-session-order.js';\nimport { createWorktreeViewStore } from './view/view-mode-store.js';\nimport { createWorktreeViewReader } from './view/worktree-view-read.js';\nimport { createVirtualWorkspaceMembership, } from './session/virtual-workspace-membership.js';\nimport { createWorktreeSessionConnector, } from './session/worktree-session.js';\nimport { createWorktreeFullAccessConfirmationController, } from './permission/worktree-permission.js';\nimport { installWorktreePermissionIcon } from './permission/worktree-permission-icon.js';\nimport { createWorktreeSessionForkCoordinator, } from './session/worktree-session-fork.js';\nexport { WORKTREE_CONNECTION_CHANNEL, WORKTREE_CONNECTION_ENDPOINTS, WorktreeConnectionError, createWorktreeConnectionAdapter, } from './worktree-connection.js';\nfunction sidebarRightController(ctx) {\n // Optional sibling service: property access requires a declared Cordis injection.\n // Resolve at action time so late registration/disposal is reflected without\n // making the whole Worktree navigation depend on the rightbar plugin.\n return ctx.get('sidebarRight');\n}\nfunction forkRelatedSessionIds(snapshot) {\n if (typeof snapshot !== 'object' ||\n snapshot === null ||\n !Array.isArray(snapshot.ids) ||\n typeof snapshot.byId !== 'object' ||\n snapshot.byId === null ||\n Array.isArray(snapshot.byId)) {\n return undefined;\n }\n const related = new Set();\n for (const childSessionId of snapshot.ids) {\n if (typeof childSessionId !== 'string')\n return undefined;\n const summary = snapshot.byId[childSessionId];\n if (summary !== undefined &&\n (typeof summary !== 'object' || summary === null || Array.isArray(summary))) {\n return undefined;\n }\n const parentSessionId = summary?.parentId;\n if (parentSessionId === undefined ||\n parentSessionId === childSessionId ||\n summary?.blank === true ||\n summary?.origin === 'subagent' ||\n snapshot.byId[parentSessionId] === undefined) {\n continue;\n }\n related.add(childSessionId);\n related.add(parentSessionId);\n }\n return related;\n}\nfunction workspaceMembershipSignature(snapshot, sessions) {\n const relatedSessionIds = forkRelatedSessionIds(sessions);\n if (relatedSessionIds === undefined)\n return undefined;\n if (typeof snapshot !== 'object' || snapshot === null || !Array.isArray(snapshot.items)) {\n return undefined;\n }\n const facts = [];\n for (const workspace of snapshot.items) {\n if (typeof workspace !== 'object' ||\n workspace === null ||\n typeof workspace.workspaceId !== 'string' ||\n !Array.isArray(workspace.sessionIds) ||\n workspace.sessionIds.some((sessionId) => typeof sessionId !== 'string')) {\n return undefined;\n }\n facts.push([\n workspace.workspaceId,\n workspace.sessionIds.filter((sessionId) => relatedSessionIds.has(sessionId)).sort(),\n ]);\n }\n // This signature tracks membership, not presentation order.\n facts.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0));\n return JSON.stringify(facts);\n}\n/** Required DSH Client services; Connection is the sole Worktree wire dependency. */\nexport const inject = ['connection', 'locale', 'slots', 'sessions', 'workspaces', 'uiWorkspace'];\n/**\n * DSH Client entry. The adapter is composed once per plugin fiber and is disposed\n * with that fiber, so slot consumers share one manager and one request lifetime.\n */\nexport function apply(ctx) {\n const locale = ctx.locale;\n if (typeof document !== 'undefined') {\n ctx.effect(() => installWorktreePermissionIcon(document), 'clutch-dsh-worktree: permission icon cleanup');\n }\n ctx.effect(() => locale.register(WORKTREE_NS, { zh, en }), 'clutch-dsh-worktree: locale dictionaries');\n const manager = createWorktreeConnectionAdapter(ctx.connection.rpc);\n const viewReader = createWorktreeViewReader(manager);\n const fullAccessConfirmation = createWorktreeFullAccessConfirmationController();\n const permissionNotice = createSnapshotStore(undefined);\n const permissionManager = typeof document !== 'undefined' ? manager : undefined;\n const dashboardStore = createSnapshotStore(undefined);\n const reportPermissionNotice = (input, result) => {\n const visible = result.status === 'fallback-workspace-write' ||\n result.status === 'user-restricted' ||\n result.status === 'unverified';\n permissionNotice.set(visible ? { ...input, result } : undefined);\n };\n const sessions = ctx.sessions;\n const slots = ctx.slots;\n const virtualWorkspaceMembership = createVirtualWorkspaceMembership(ctx.workspaces.list);\n const contextProjection = createWorktreeContextProjection({\n sessions: ctx.sessions.list,\n workspaces: ctx.workspaces.list,\n viewReader,\n storeFactory: createSnapshotStore,\n });\n ctx.effect(() => () => manager.dispose(), 'clutch-dsh-worktree: connection cleanup');\n ctx.effect(() => () => viewReader.dispose(), 'clutch-dsh-worktree: view reader cleanup');\n ctx.effect(() => () => fullAccessConfirmation.dispose(), 'clutch-dsh-worktree: Full Access confirmation cleanup');\n ctx.effect(() => () => virtualWorkspaceMembership.dispose(), 'clutch-dsh-worktree: Workspace membership cleanup');\n ctx.effect(() => () => contextProjection.dispose(), 'clutch-dsh-worktree: Session context cleanup');\n void contextProjection.refresh();\n const viewStore = createWorktreeViewStore();\n const expandState = createWorktreeExpandStateStore(createSnapshotStore);\n const sessionOrder = createWorktreeSessionOrderStore(createSnapshotStore);\n ctx.effect(() => () => sessionOrder.dispose(), 'clutch-dsh-worktree: Session order cleanup');\n const ensureSessionWorkspace = (workspaceId, sessionId) => {\n virtualWorkspaceMembership.ensure({ workspaceId, sessionId });\n };\n const syncSessionWorkspaces = (bindings) => {\n virtualWorkspaceMembership.sync(bindings);\n };\n const forkableSessions = ctx.sessions;\n const nativeFork = forkableSessions.fork;\n const workspaceBindingReads = new Map();\n const readWorkspaceBindings = (workspaceId) => {\n const current = workspaceBindingReads.get(workspaceId);\n if (current !== undefined)\n return current;\n const promise = manager.listBindings({ workspaceId }).finally(() => {\n if (workspaceBindingReads.get(workspaceId) === promise) {\n workspaceBindingReads.delete(workspaceId);\n }\n });\n workspaceBindingReads.set(workspaceId, promise);\n return promise;\n };\n const findWorktreeSessionBindings = async (sessionIds) => {\n const requested = [...new Set(sessionIds)];\n const requestedSet = new Set(requested);\n const workspaces = ctx.workspaces.list.getSnapshot().items;\n const workspaceIds = [\n ...new Set(workspaces.map((workspace) => workspace.workspaceId)),\n ];\n const owners = new Map();\n for (const workspace of workspaces) {\n for (const sessionId of workspace.sessionIds) {\n if (!requestedSet.has(sessionId))\n continue;\n const workspaceOwners = owners.get(sessionId) ?? [];\n if (!workspaceOwners.includes(workspace.workspaceId)) {\n workspaceOwners.push(workspace.workspaceId);\n owners.set(sessionId, workspaceOwners);\n }\n }\n }\n const unknownScope = requested.some((sessionId) => (owners.get(sessionId)?.length ?? 0) === 0);\n const selectedWorkspaceIds = unknownScope\n ? workspaceIds\n : workspaceIds.filter((workspaceId) => requested.some((sessionId) => owners.get(sessionId)?.includes(workspaceId) === true));\n const results = await Promise.allSettled(selectedWorkspaceIds.map((workspaceId) => readWorkspaceBindings(workspaceId)));\n const resultByWorkspaceId = new Map(selectedWorkspaceIds.map((workspaceId, index) => [workspaceId, results[index]]));\n const bySessionId = new Map();\n for (const sessionId of requested) {\n const relevantWorkspaceIds = owners.get(sessionId) ?? selectedWorkspaceIds;\n let found;\n let failed;\n for (const workspaceId of relevantWorkspaceIds) {\n const result = resultByWorkspaceId.get(workspaceId);\n if (result === undefined)\n continue;\n if (result.status === 'rejected') {\n failed ??= result.reason;\n continue;\n }\n const binding = result.value.find((candidate) => candidate.sessionId === sessionId && candidate.status === 'active');\n if (binding !== undefined) {\n found = binding;\n break;\n }\n }\n bySessionId.set(sessionId, found === undefined\n ? failed === undefined ? { status: 'missing' } : { status: 'error', error: failed }\n : { status: 'found', binding: found });\n }\n return { bySessionId };\n };\n const forkCoordinator = typeof nativeFork !== 'function'\n ? undefined\n : createWorktreeSessionForkCoordinator({\n fork: (input) => nativeFork.call(ctx.sessions, input),\n findBindings: findWorktreeSessionBindings,\n bindSession: (input) => manager.bindSession(input),\n sessions: ctx.sessions.list,\n });\n if (forkCoordinator !== undefined) {\n forkableSessions.fork = (input) => forkCoordinator.fork(input);\n const reconcileForkChildren = () => {\n void forkCoordinator.reconcile();\n };\n let lastWorkspaceMembershipSignature = workspaceMembershipSignature(ctx.workspaces.list.getSnapshot(), ctx.sessions.list.getSnapshot());\n const reconcileForkChildrenForWorkspace = () => {\n const nextSignature = workspaceMembershipSignature(ctx.workspaces.list.getSnapshot(), ctx.sessions.list.getSnapshot());\n const changed = nextSignature !== undefined && nextSignature !== lastWorkspaceMembershipSignature;\n if (nextSignature !== undefined)\n lastWorkspaceMembershipSignature = nextSignature;\n void forkCoordinator.reconcile({ force: changed });\n };\n const unsubscribeSessionList = ctx.sessions.list.subscribe(reconcileForkChildren);\n const unsubscribeWorkspaceList = ctx.workspaces.list.subscribe(reconcileForkChildrenForWorkspace);\n ctx.effect(() => () => {\n unsubscribeSessionList();\n unsubscribeWorkspaceList();\n forkCoordinator.dispose();\n forkableSessions.fork = nativeFork;\n }, 'clutch-dsh-worktree: Session fork cleanup');\n void forkCoordinator.reconcile();\n }\n const worktreeSessionConnector = createWorktreeSessionConnector({\n manager,\n sessions: ctx.sessions.list,\n archivedSessionIds: () => ctx.workspaces.list.getSnapshot().archivedSessionIds,\n createSession: async (input) => String(await sessions.create(input)),\n ensureSessionWorkspace,\n permission: permissionManager,\n confirmFullAccess: permissionManager === undefined\n ? undefined\n : fullAccessConfirmation.request,\n onPermissionResult: reportPermissionNotice,\n openSession: (sessionId) => {\n ctx.sessions.open(sessionId);\n },\n });\n ctx.effect(() => () => worktreeSessionConnector.dispose(), 'clutch-dsh-worktree: Worktree Session connector cleanup');\n const openDashboardForSession = (sessionId) => {\n switchViewMode('worktree');\n const contextSnapshot = contextProjection.store.getSnapshot();\n let targetWorkspaceId;\n let targetWorktreeId;\n if (contextSnapshot.sessionId === sessionId) {\n if (contextSnapshot.value.kind === 'worktree') {\n targetWorkspaceId = contextSnapshot.workspaceId;\n targetWorktreeId = contextSnapshot.value.worktreeId;\n }\n else if (contextSnapshot.value.kind === 'main') {\n targetWorkspaceId = contextSnapshot.workspaceId;\n targetWorktreeId = 'main';\n }\n }\n if (targetWorkspaceId === undefined) {\n const workspaces = ctx.workspaces.list.getSnapshot()?.items ?? [];\n const workspace = workspaces.find((candidate) => candidate.sessionIds?.includes(sessionId));\n if (workspace !== undefined) {\n targetWorkspaceId = workspace.workspaceId;\n targetWorktreeId = 'main';\n }\n }\n if (targetWorkspaceId !== undefined && targetWorktreeId !== undefined) {\n dashboardStore.set({\n workspaceId: targetWorkspaceId,\n worktreeId: targetWorktreeId,\n sessionId,\n });\n }\n };\n slots.inject('conversation.session.header.actions', () => slots.register({\n name: 'conversation.session.header.actions',\n id: 'clutch-dsh-worktree-context-header',\n order: -5,\n locale: WORKTREE_NS,\n inject: () => ({ hooks: { worktreeContext: contextProjection.store } }),\n }, WorktreeHeaderContext));\n slots.inject('conversation.session.header.utilities', () => slots.register({\n name: 'conversation.session.header.utilities',\n id: 'clutch-dsh-worktree-dashboard-header',\n order: -10,\n locale: WORKTREE_NS,\n inject: () => ({\n hooks: { worktreeContext: contextProjection.store },\n openDashboard: openDashboardForSession,\n }),\n }, DashboardHeaderAction));\n slots.inject('sidebar.footer.action', () => slots.register({\n name: 'sidebar.footer.action',\n id: 'clutch-dsh-worktree-mode-action',\n store: viewStore,\n locale: WORKTREE_NS,\n inject: () => ({ available: true }),\n }, WorktreeModeAction));\n slots.inject('shell.overlay', () => slots.register({\n name: 'shell.overlay',\n id: 'clutch-dsh-worktree-navigation',\n store: viewStore,\n locale: WORKTREE_NS,\n inject: () => ({\n available: true,\n openResource: (address, options) => {\n const sidebar = sidebarRightController(ctx);\n if (sidebar && typeof sidebar.openResource === 'function') {\n sidebar.openResource(address, options?.line !== undefined ? { params: { line: options.line } } : undefined);\n return true;\n }\n return false;\n },\n closeRightSidebar: () => {\n const sidebar = sidebarRightController(ctx);\n if (sidebar?.isExpanded?.() === true)\n sidebar.toggleExpanded?.();\n },\n openRightSidebar: () => {\n const sidebar = sidebarRightController(ctx);\n if (sidebar?.isExpanded?.() === false)\n sidebar.toggleExpanded?.();\n },\n isRightSidebarExpanded: () => {\n const sidebar = sidebarRightController(ctx);\n return sidebar?.isExpanded?.() === true;\n },\n expandState,\n sessionOrder,\n dashboardStore,\n hooks: { worktreeContext: contextProjection.store },\n manager,\n viewReader,\n permission: permissionManager,\n confirmFullAccess: permissionManager === undefined\n ? undefined\n : fullAccessConfirmation.request,\n fullAccessConfirmation: typeof document === 'undefined'\n ? undefined\n : fullAccessConfirmation,\n onPermissionResult: reportPermissionNotice,\n onPermissionNotice: reportPermissionNotice,\n permissionNotice,\n createWorkspace: async () => {\n const workspacePath = await ctx.uiWorkspace.pickDirectory();\n if (workspacePath !== null)\n await ctx.workspaces.create({ path: workspacePath });\n },\n createSessionForWorktree: (input) => worktreeSessionConnector.create(input),\n invalidateWorktreeContext: (workspaceId) => contextProjection.invalidate(workspaceId),\n createMainSession: (workspaceId) => {\n ctx.uiWorkspace.startSession(workspaceId);\n },\n renameWorkspace: async (workspaceId, title) => {\n await ctx.workspaces.rename(workspaceId, title);\n },\n deleteWorkspace: async (workspaceId) => {\n await ctx.workspaces.delete(workspaceId);\n },\n insertWorkspaceBefore: async (workspaceId, beforeWorkspaceId) => {\n await ctx.workspaces.insertBefore(workspaceId, beforeWorkspaceId);\n },\n insertSessionBefore: async (workspaceId, sessionId, beforeSessionId) => {\n await ctx.workspaces.insertSessionBefore(workspaceId, sessionId, beforeSessionId);\n },\n insertWorktreeBefore: (workspaceId, worktreeId, beforeWorktreeId) => manager.insertWorktreeBefore({\n workspaceId,\n worktreeId,\n beforeWorktreeId,\n }),\n renameSession: async (sessionId, title) => {\n const session = ctx.sessions.binding(sessionId)?.session;\n if (session === undefined)\n throw new Error(`unknown session \"${sessionId}\"`);\n const result = await session.rename(title);\n if (!result.ok)\n throw new Error(result.error.message);\n },\n forkSession: (sessionId) => {\n if (forkableSessions.fork === undefined)\n return;\n void ctx.sessions.fork({\n sessionId: sessionId,\n increaseTitle: true,\n })\n .then((childId) => {\n ctx.sessions.open(childId);\n })\n .catch(() => {\n // Fork failure leaves the current Session and Worktree projection unchanged.\n });\n },\n archiveSession: (sessionId) => ctx.workspaces.archiveSession(sessionId),\n ensureSessionWorkspace,\n syncSessionWorkspaces,\n forkRecovery: forkCoordinator?.recovery,\n retryForkSession: forkCoordinator === undefined\n ? undefined\n : async (key) => {\n await forkCoordinator.retry(key);\n },\n openSession: (sessionId) => {\n ctx.sessions.open(sessionId);\n },\n onWorktreeForgotten: (input) => {\n forkCoordinator?.forgetWorktree(input);\n for (const sessionId of input.sessionIds) {\n virtualWorkspaceMembership.removeSession(sessionId);\n }\n const currentNotice = permissionNotice.getSnapshot();\n if (currentNotice !== undefined &&\n (currentNotice.worktreeId === input.worktreeId ||\n (currentNotice.sessionId !== undefined && input.sessionIds.includes(currentNotice.sessionId)))) {\n permissionNotice.set(undefined);\n }\n },\n }),\n }, WorktreeOverlay));\n if (typeof ctx.inject === 'function') {\n ctx.inject(['sessionLogDownload'], (innerCtx) => {\n const sessionLogDownload = innerCtx.get('sessionLogDownload');\n if (typeof sessionLogDownload?.registerMoreItem !== 'function')\n return;\n innerCtx.effect(() => {\n return sessionLogDownload.registerMoreItem({\n id: 'clutch-dsh-worktree-dashboard',\n label: () => innerCtx.locale.getLocale().active === 'zh'\n ? '前往 Dashboard'\n : 'Go to Dashboard',\n icon: createElement(IconDashboard, { size: 16 }),\n order: -1,\n onSelect: openDashboardForSession,\n });\n }, 'clutch-dsh-worktree: session header more item');\n });\n }\n}\n//# sourceMappingURL=entry.js.map"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","names":["isRecord","exports","primitives","HoverCard","styles","styles","Tooltip","styles","styles","HoverCard","_Fragment","RiskConfirmation","Modal","_Fragment","Button","styles","Input","_Fragment","_Fragment","_Fragment","openWorktreeSession","emptyState","isRecord","normalizeIds","isMainWorktreeId","sessionStatusLabel","sessionTimeLabel","styles","StateDot","Menu","HoverCard","_Fragment","styles","styles","styles","_Fragment","styles","Toast","styles","_Fragment","styles","Tooltip","emptyState","styles","css","Menu","_Fragment","styles","normalizeBranch","primitives","styles","shortCommit","_Fragment","styles","styles","_Fragment","shortCommit","styles","_Fragment","styles","_Fragment","styles","styles","_Fragment","Tooltip","Modal","Button","Input","StateDot","isMainWorktreeId","isMainWorktreeId","isMainWorktreeId","_Fragment","styles","_Fragment"],"sources":["../../../node_modules/.pnpm/zustand@4.4.7_@types+react@18.3.31_immer@10.2.0_react@18.3.1/node_modules/zustand/esm/vanilla.mjs","../../../node_modules/.pnpm/zustand@4.4.7_@types+react@18.3.31_immer@10.2.0_react@18.3.1/node_modules/zustand/esm/middleware.mjs","../../../node_modules/.pnpm/immer@10.2.0/node_modules/immer/dist/immer.mjs","../../../node_modules/.pnpm/@deepseek-ai+dsh-client-store@0.1.7-rc.2_@deepseek-ai+cordis@4.0.4/node_modules/@deepseek-ai/dsh-client-store/lib/index.js","client/locales.js","client/worktree-connection.js","client/dsh-icon-compat.js","client/dsh-icons.js","client/context/WorktreeContext.js","client/view/view-mode-dispatch.js","client/view/WorktreeModeAction.js","client/dashboard/dashboard-icon.js","client/dashboard/DashboardHeaderAction.js","client/context/WorktreeHeroContext.js","client/surface/components/AccessConfirmation.js","client/view/worktree-error-copy.js","client/view/worktree-view-errors.js","client/view/worktree-view-actions.js","client/view/worktree-view-read.js","client/session/session-selection.js","client/session/session-view.js","client/surface/selectors.js","client/surface/components/dialogs.js","client/surface/actions/worktree-cleanup-flow.js","client/surface/actions/lifecycle-commands.js","client/surface/components/LifecycleDialogs.js","client/surface/components/NativeDialogs.js","client/surface/components/RegistrationDialog.js","client/surface/shared.js","client/view/navigation.js","client/view/view-mode.js","client/view/worktree-expand-state.js","client/dashboard/dashboard-selection.js","client/surface/components/rows.js","client/surface/components/ActiveWorktree.js","client/surface/components/ArchivedWorktree.js","client/surface/components/ArchivedWorktrees.js","client/surface/components/WorkspaceTree.js","client/surface/notification-queue.js","client/surface/components/NotificationToasts.js","client/surface/components/SurfaceContent.js","client/surface/components/SurfaceHeader.js","client/session/worktree-session-order.js","client/surface/actions/useDragActions.js","client/surface/actions/useLifecycleActions.js","client/surface/state/useLifecycleState.js","client/surface/actions/useNativeActions.js","client/surface/state/useRegistrationState.js","contract/windows-path.js","client/session/worktree-session.js","client/surface/actions/useSessionActions.js","client/session/worktree-session-position.js","client/surface/state/useSessionExpansion.js","client/surface/state/useSessionOrdering.js","client/surface/state/useSurfaceMenus.js","client/surface/actions/useSurfaceMutation.js","client/surface/state/useSurfaceRefresh.js","client/overlay/overlay-bounds.js","client/overlay/sidebar-overlay-geometry.js","client/surface/state/useSurfaceSources.js","client/surface/actions/useWorktreeRegistration.js","client/session/session-labels.js","client/dashboard/vscode-url.js","client/dashboard/open-in-app-controller.js","client/dashboard/OpenInAppButton.js","client/dashboard/dashboard-overlay.js","client/dashboard/worktree-acquisition-facts.js","client/dashboard/WorktreeInstructions.js","client/dashboard/git/git-facts.js","client/dashboard/git/git-file-tree.js","client/dashboard/git/GitFileTypeIcon.js","client/dashboard/git/GitLineStats.js","client/dashboard/git/GitChangedFiles.js","client/dashboard/git/GitCommitList.js","client/dashboard/git/git-diff-parser.js","client/dashboard/git/GitDiffView.js","client/dashboard/git/git-column-split.js","client/dashboard/git/useGitPaneSplit.js","contract/index.js","client/dashboard/git/git-state-cache.js","client/dashboard/git/useWorktreeGitState.js","client/dashboard/git/WorktreeGitPanel.js","client/dashboard/git/WorktreeGitOverview.js","client/dashboard/WorktreeDashboard.js","client/dashboard/dashboard-sessions.js","client/dashboard/dashboard-navigation.js","client/dashboard/git/file-address.js","client/WorktreeSurface.js","client/overlay/WorktreeOverlay.js","client/context/worktree-context.js","client/context/worktree-context-store.js","client/view/view-mode-store.js","client/session/virtual-workspace-membership.js","client/session/session-rename.js","client/session/session-navigation.js","client/permission/worktree-permission.js","client/permission/worktree-permission-icon.js","client/session/worktree-session-fork.js","client/entry.js"],"sourcesContent":["const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, subscribe, destroy };\n state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.\"\n );\n }\n return createStore(createState);\n};\n\nexport { createStore, vanilla as default };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...a) => api.dispatch(...a), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api)\n return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && enabled) {\n console.warn(\n \"[zustand devtools middleware] Please install/enable Redux devtools extension\"\n );\n }\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = (state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording)\n return r;\n const action = nameOrAction === void 0 ? { type: anonymousActionType || \"anonymous\" } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...a) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && a[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...a);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format. \n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools)\n return;\n if (typeof api.dispatch !== \"function\")\n return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState)\n return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, f) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0)\n f(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = (selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n };\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nconst combine = (initialState, create) => (...a) => Object.assign({}, initialState, create(...a));\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(\n name,\n JSON.stringify(newValue, options == null ? void 0 : options.replacer)\n ),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst oldImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n getStorage: () => localStorage,\n serialize: JSON.stringify,\n deserialize: JSON.parse,\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage;\n try {\n storage = options.getStorage();\n } catch (e) {\n }\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const thenableSerialize = toThenable(options.serialize);\n const setItem = () => {\n const state = options.partialize({ ...get() });\n let errorInSync;\n const thenable = thenableSerialize({ state, version: options.version }).then(\n (serializedValue) => storage.setItem(options.name, serializedValue)\n ).catch((e) => {\n errorInSync = e;\n });\n if (errorInSync) {\n throw errorInSync;\n }\n return thenable;\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n let stateFromStorage;\n const hydrate = () => {\n var _a;\n if (!storage)\n return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => cb(get()));\n const postRehydrationCallback = ((_a = options.onRehydrateStorage) == null ? void 0 : _a.call(options, get())) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((storageValue) => {\n if (storageValue) {\n return options.deserialize(storageValue);\n }\n }).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.getStorage) {\n storage = newOptions.getStorage();\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n hydrate();\n return stateFromStorage || configResult;\n};\nconst newImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage)\n return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persistImpl = (config, baseOptions) => {\n if (\"getStorage\" in baseOptions || \"serialize\" in baseOptions || \"deserialize\" in baseOptions) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead.\"\n );\n }\n return oldImpl(config, baseOptions);\n }\n return newImpl(config, baseOptions);\n};\nconst persist = persistImpl;\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector };\n","// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n // All error codes, starting by 0:\n function(plugin) {\n return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n },\n function(thing) {\n return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n },\n \"This object has been frozen and should not be mutated\",\n function(data) {\n return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n },\n \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n \"Immer forbids circular references\",\n \"The first or second argument to `produce` must be a function\",\n \"The third argument to `produce` must be a function or undefined\",\n \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n function(thing) {\n return `'current' expects a draft, got: ${thing}`;\n },\n \"Object.defineProperty() cannot be used on an Immer draft\",\n \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n \"Immer only supports deleting array indices\",\n \"Immer only supports setting array indices and the 'length' property\",\n function(thing) {\n return `'original' expects a draft, got: ${thing}`;\n }\n // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n if (process.env.NODE_ENV !== \"production\") {\n const e = errors[error];\n const msg = typeof e === \"function\" ? e.apply(null, args) : e;\n throw new Error(`[Immer] ${msg}`);\n }\n throw new Error(\n `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n );\n}\n\n// src/utils/common.ts\nvar getPrototypeOf = Object.getPrototypeOf;\nfunction isDraft(value) {\n return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value) {\n if (!value)\n return false;\n return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = Object.prototype.constructor.toString();\nvar cachedCtorStrings = /* @__PURE__ */ new WeakMap();\nfunction isPlainObject(value) {\n if (!value || typeof value !== \"object\")\n return false;\n const proto = Object.getPrototypeOf(value);\n if (proto === null || proto === Object.prototype)\n return true;\n const Ctor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n if (Ctor === Object)\n return true;\n if (typeof Ctor !== \"function\")\n return false;\n let ctorString = cachedCtorStrings.get(Ctor);\n if (ctorString === void 0) {\n ctorString = Function.toString.call(Ctor);\n cachedCtorStrings.set(Ctor, ctorString);\n }\n return ctorString === objectCtorString;\n}\nfunction original(value) {\n if (!isDraft(value))\n die(15, value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter, strict = true) {\n if (getArchtype(obj) === 0 /* Object */) {\n const keys = strict ? Reflect.ownKeys(obj) : Object.keys(obj);\n keys.forEach((key) => {\n iter(key, obj[key], obj);\n });\n } else {\n obj.forEach((entry, index) => iter(index, entry, obj));\n }\n}\nfunction getArchtype(thing) {\n const state = thing[DRAFT_STATE];\n return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nfunction has(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);\n}\nfunction get(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];\n}\nfunction set(thing, propOrOldValue, value) {\n const t = getArchtype(thing);\n if (t === 2 /* Map */)\n thing.set(propOrOldValue, value);\n else if (t === 3 /* Set */) {\n thing.add(value);\n } else\n thing[propOrOldValue] = value;\n}\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nfunction isMap(target) {\n return target instanceof Map;\n}\nfunction isSet(target) {\n return target instanceof Set;\n}\nfunction latest(state) {\n return state.copy_ || state.base_;\n}\nfunction shallowCopy(base, strict) {\n if (isMap(base)) {\n return new Map(base);\n }\n if (isSet(base)) {\n return new Set(base);\n }\n if (Array.isArray(base))\n return Array.prototype.slice.call(base);\n const isPlain = isPlainObject(base);\n if (strict === true || strict === \"class_only\" && !isPlain) {\n const descriptors = Object.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys = Reflect.ownKeys(descriptors);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const desc = descriptors[key];\n if (desc.writable === false) {\n desc.writable = true;\n desc.configurable = true;\n }\n if (desc.get || desc.set)\n descriptors[key] = {\n configurable: true,\n writable: true,\n // could live with !!desc.set as well here...\n enumerable: desc.enumerable,\n value: base[key]\n };\n }\n return Object.create(getPrototypeOf(base), descriptors);\n } else {\n const proto = getPrototypeOf(base);\n if (proto !== null && isPlain) {\n return { ...base };\n }\n const obj = Object.create(proto);\n return Object.assign(obj, base);\n }\n}\nfunction freeze(obj, deep = false) {\n if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj) > 1) {\n Object.defineProperties(obj, {\n set: dontMutateMethodOverride,\n add: dontMutateMethodOverride,\n clear: dontMutateMethodOverride,\n delete: dontMutateMethodOverride\n });\n }\n Object.freeze(obj);\n if (deep)\n Object.values(obj).forEach((value) => freeze(value, true));\n return obj;\n}\nfunction dontMutateFrozenCollections() {\n die(2);\n}\nvar dontMutateMethodOverride = {\n value: dontMutateFrozenCollections\n};\nfunction isFrozen(obj) {\n if (obj === null || typeof obj !== \"object\")\n return true;\n return Object.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n const plugin = plugins[pluginKey];\n if (!plugin) {\n die(0, pluginKey);\n }\n return plugin;\n}\nfunction loadPlugin(pluginKey, implementation) {\n if (!plugins[pluginKey])\n plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope() {\n return currentScope;\n}\nfunction createScope(parent_, immer_) {\n return {\n drafts_: [],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_: true,\n unfinalizedDrafts_: 0\n };\n}\nfunction usePatchesInScope(scope, patchListener) {\n if (patchListener) {\n getPlugin(\"Patches\");\n scope.patches_ = [];\n scope.inversePatches_ = [];\n scope.patchListener_ = patchListener;\n }\n}\nfunction revokeScope(scope) {\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n if (scope === currentScope) {\n currentScope = scope.parent_;\n }\n}\nfunction enterScope(immer2) {\n return currentScope = createScope(currentScope, immer2);\n}\nfunction revokeDraft(draft) {\n const state = draft[DRAFT_STATE];\n if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n state.revoke_();\n else\n state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n scope.unfinalizedDrafts_ = scope.drafts_.length;\n const baseDraft = scope.drafts_[0];\n const isReplaced = result !== void 0 && result !== baseDraft;\n if (isReplaced) {\n if (baseDraft[DRAFT_STATE].modified_) {\n revokeScope(scope);\n die(4);\n }\n if (isDraftable(result)) {\n result = finalize(scope, result);\n if (!scope.parent_)\n maybeFreeze(scope, result);\n }\n if (scope.patches_) {\n getPlugin(\"Patches\").generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope.patches_,\n scope.inversePatches_\n );\n }\n } else {\n result = finalize(scope, baseDraft, []);\n }\n revokeScope(scope);\n if (scope.patches_) {\n scope.patchListener_(scope.patches_, scope.inversePatches_);\n }\n return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value, path) {\n if (isFrozen(value))\n return value;\n const useStrictIteration = rootScope.immer_.shouldUseStrictIteration();\n const state = value[DRAFT_STATE];\n if (!state) {\n each(\n value,\n (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path),\n useStrictIteration\n );\n return value;\n }\n if (state.scope_ !== rootScope)\n return value;\n if (!state.modified_) {\n maybeFreeze(rootScope, state.base_, true);\n return state.base_;\n }\n if (!state.finalized_) {\n state.finalized_ = true;\n state.scope_.unfinalizedDrafts_--;\n const result = state.copy_;\n let resultEach = result;\n let isSet2 = false;\n if (state.type_ === 3 /* Set */) {\n resultEach = new Set(result);\n result.clear();\n isSet2 = true;\n }\n each(\n resultEach,\n (key, childValue) => finalizeProperty(\n rootScope,\n state,\n result,\n key,\n childValue,\n path,\n isSet2\n ),\n useStrictIteration\n );\n maybeFreeze(rootScope, result, false);\n if (path && rootScope.patches_) {\n getPlugin(\"Patches\").generatePatches_(\n state,\n path,\n rootScope.patches_,\n rootScope.inversePatches_\n );\n }\n }\n return state.copy_;\n}\nfunction finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {\n if (childValue == null) {\n return;\n }\n if (typeof childValue !== \"object\" && !targetIsSet) {\n return;\n }\n const childIsFrozen = isFrozen(childValue);\n if (childIsFrozen && !targetIsSet) {\n return;\n }\n if (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n die(5);\n if (isDraft(childValue)) {\n const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.\n !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;\n const res = finalize(rootScope, childValue, path);\n set(targetObject, prop, res);\n if (isDraft(res)) {\n rootScope.canAutoFreeze_ = false;\n } else\n return;\n } else if (targetIsSet) {\n targetObject.add(childValue);\n }\n if (isDraftable(childValue) && !childIsFrozen) {\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n return;\n }\n if (parentState && parentState.base_ && parentState.base_[prop] === childValue && childIsFrozen) {\n return;\n }\n finalize(rootScope, childValue);\n if ((!parentState || !parentState.scope_.parent_) && typeof prop !== \"symbol\" && (isMap(targetObject) ? targetObject.has(prop) : Object.prototype.propertyIsEnumerable.call(targetObject, prop)))\n maybeFreeze(rootScope, childValue);\n }\n}\nfunction maybeFreeze(scope, value, deep = false) {\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n freeze(value, deep);\n }\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n const isArray = Array.isArray(base);\n const state = {\n type_: isArray ? 1 /* Array */ : 0 /* Object */,\n // Track which produce call this is associated with.\n scope_: parent ? parent.scope_ : getCurrentScope(),\n // True for both shallow and deep changes.\n modified_: false,\n // Used during finalization.\n finalized_: false,\n // Track which properties have been assigned (true) or deleted (false).\n assigned_: {},\n // The parent draft state.\n parent_: parent,\n // The base state.\n base_: base,\n // The base proxy.\n draft_: null,\n // set below\n // The base copy with any updated values.\n copy_: null,\n // Called by the `produce` function.\n revoke_: null,\n isManual_: false\n };\n let target = state;\n let traps = objectTraps;\n if (isArray) {\n target = [state];\n traps = arrayTraps;\n }\n const { revoke, proxy } = Proxy.revocable(target, traps);\n state.draft_ = proxy;\n state.revoke_ = revoke;\n return proxy;\n}\nvar objectTraps = {\n get(state, prop) {\n if (prop === DRAFT_STATE)\n return state;\n const source = latest(state);\n if (!has(source, prop)) {\n return readPropFromProto(state, source, prop);\n }\n const value = source[prop];\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value === peek(state.base_, prop)) {\n prepareCopy(state);\n return state.copy_[prop] = createProxy(value, state);\n }\n return value;\n },\n has(state, prop) {\n return prop in latest(state);\n },\n ownKeys(state) {\n return Reflect.ownKeys(latest(state));\n },\n set(state, prop, value) {\n const desc = getDescriptorFromProto(latest(state), prop);\n if (desc?.set) {\n desc.set.call(state.draft_, value);\n return true;\n }\n if (!state.modified_) {\n const current2 = peek(latest(state), prop);\n const currentState = current2?.[DRAFT_STATE];\n if (currentState && currentState.base_ === value) {\n state.copy_[prop] = value;\n state.assigned_[prop] = false;\n return true;\n }\n if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))\n return true;\n prepareCopy(state);\n markChanged(state);\n }\n if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n (value !== void 0 || prop in state.copy_) || // special case: NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop] = value;\n state.assigned_[prop] = true;\n return true;\n },\n deleteProperty(state, prop) {\n if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n state.assigned_[prop] = false;\n prepareCopy(state);\n markChanged(state);\n } else {\n delete state.assigned_[prop];\n }\n if (state.copy_) {\n delete state.copy_[prop];\n }\n return true;\n },\n // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state, prop) {\n const owner = latest(state);\n const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n if (!desc)\n return desc;\n return {\n writable: true,\n configurable: state.type_ !== 1 /* Array */ || prop !== \"length\",\n enumerable: desc.enumerable,\n value: owner[prop]\n };\n },\n defineProperty() {\n die(11);\n },\n getPrototypeOf(state) {\n return getPrototypeOf(state.base_);\n },\n setPrototypeOf() {\n die(12);\n }\n};\nvar arrayTraps = {};\neach(objectTraps, (key, fn) => {\n arrayTraps[key] = function() {\n arguments[0] = arguments[0][0];\n return fn.apply(this, arguments);\n };\n});\narrayTraps.deleteProperty = function(state, prop) {\n if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n die(13);\n return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n die(14);\n return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n const state = draft[DRAFT_STATE];\n const source = state ? latest(state) : draft;\n return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n const desc = getDescriptorFromProto(source, prop);\n return desc ? `value` in desc ? desc.value : (\n // This is a very special case, if the prop is a getter defined by the\n // prototype, we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n if (!(prop in source))\n return void 0;\n let proto = getPrototypeOf(source);\n while (proto) {\n const desc = Object.getOwnPropertyDescriptor(proto, prop);\n if (desc)\n return desc;\n proto = getPrototypeOf(proto);\n }\n return void 0;\n}\nfunction markChanged(state) {\n if (!state.modified_) {\n state.modified_ = true;\n if (state.parent_) {\n markChanged(state.parent_);\n }\n }\n}\nfunction prepareCopy(state) {\n if (!state.copy_) {\n state.copy_ = shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n );\n }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n constructor(config) {\n this.autoFreeze_ = true;\n this.useStrictShallowCopy_ = false;\n this.useStrictIteration_ = true;\n /**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\n this.produce = (base, recipe, patchListener) => {\n if (typeof base === \"function\" && typeof recipe !== \"function\") {\n const defaultBase = recipe;\n recipe = base;\n const self = this;\n return function curriedProduce(base2 = defaultBase, ...args) {\n return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n };\n }\n if (typeof recipe !== \"function\")\n die(6);\n if (patchListener !== void 0 && typeof patchListener !== \"function\")\n die(7);\n let result;\n if (isDraftable(base)) {\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n let hasError = true;\n try {\n result = recipe(proxy);\n hasError = false;\n } finally {\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n }\n usePatchesInScope(scope, patchListener);\n return processResult(result, scope);\n } else if (!base || typeof base !== \"object\") {\n result = recipe(base);\n if (result === void 0)\n result = base;\n if (result === NOTHING)\n result = void 0;\n if (this.autoFreeze_)\n freeze(result, true);\n if (patchListener) {\n const p = [];\n const ip = [];\n getPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip);\n patchListener(p, ip);\n }\n return result;\n } else\n die(1, base);\n };\n this.produceWithPatches = (base, recipe) => {\n if (typeof base === \"function\") {\n return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n }\n let patches, inversePatches;\n const result = this.produce(base, recipe, (p, ip) => {\n patches = p;\n inversePatches = ip;\n });\n return [result, patches, inversePatches];\n };\n if (typeof config?.autoFreeze === \"boolean\")\n this.setAutoFreeze(config.autoFreeze);\n if (typeof config?.useStrictShallowCopy === \"boolean\")\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n if (typeof config?.useStrictIteration === \"boolean\")\n this.setUseStrictIteration(config.useStrictIteration);\n }\n createDraft(base) {\n if (!isDraftable(base))\n die(8);\n if (isDraft(base))\n base = current(base);\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n proxy[DRAFT_STATE].isManual_ = true;\n leaveScope(scope);\n return proxy;\n }\n finishDraft(draft, patchListener) {\n const state = draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const { scope_: scope } = state;\n usePatchesInScope(scope, patchListener);\n return processResult(void 0, scope);\n }\n /**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is enabled.\n */\n setAutoFreeze(value) {\n this.autoFreeze_ = value;\n }\n /**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\n setUseStrictShallowCopy(value) {\n this.useStrictShallowCopy_ = value;\n }\n /**\n * Pass false to use faster iteration that skips non-enumerable properties\n * but still handles symbols for compatibility.\n *\n * By default, strict iteration is enabled (includes all own properties).\n */\n setUseStrictIteration(value) {\n this.useStrictIteration_ = value;\n }\n shouldUseStrictIteration() {\n return this.useStrictIteration_;\n }\n applyPatches(base, patches) {\n let i;\n for (i = patches.length - 1; i >= 0; i--) {\n const patch = patches[i];\n if (patch.path.length === 0 && patch.op === \"replace\") {\n base = patch.value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const applyPatchesImpl = getPlugin(\"Patches\").applyPatches_;\n if (isDraft(base)) {\n return applyPatchesImpl(base, patches);\n }\n return this.produce(\n base,\n (draft) => applyPatchesImpl(draft, patches)\n );\n }\n};\nfunction createProxy(value, parent) {\n const draft = isMap(value) ? getPlugin(\"MapSet\").proxyMap_(value, parent) : isSet(value) ? getPlugin(\"MapSet\").proxySet_(value, parent) : createProxyProxy(value, parent);\n const scope = parent ? parent.scope_ : getCurrentScope();\n scope.drafts_.push(draft);\n return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n if (!isDraft(value))\n die(10, value);\n return currentImpl(value);\n}\nfunction currentImpl(value) {\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n let copy;\n let strict = true;\n if (state) {\n if (!state.modified_)\n return state.base_;\n state.finalized_ = true;\n copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n strict = state.scope_.immer_.shouldUseStrictIteration();\n } else {\n copy = shallowCopy(value, true);\n }\n each(\n copy,\n (key, childValue) => {\n set(copy, key, currentImpl(childValue));\n },\n strict\n );\n if (state) {\n state.finalized_ = false;\n }\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n const errorOffset = 16;\n if (process.env.NODE_ENV !== \"production\") {\n errors.push(\n 'Sets cannot have \"replace\" patches.',\n function(op) {\n return \"Unsupported patch operation: \" + op;\n },\n function(path) {\n return \"Cannot apply patch, path doesn't resolve: \" + path;\n },\n \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n );\n }\n const REPLACE = \"replace\";\n const ADD = \"add\";\n const REMOVE = \"remove\";\n function generatePatches_(state, basePath, patches, inversePatches) {\n switch (state.type_) {\n case 0 /* Object */:\n case 2 /* Map */:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches,\n inversePatches\n );\n case 1 /* Array */:\n return generateArrayPatches(state, basePath, patches, inversePatches);\n case 3 /* Set */:\n return generateSetPatches(\n state,\n basePath,\n patches,\n inversePatches\n );\n }\n }\n function generateArrayPatches(state, basePath, patches, inversePatches) {\n let { base_, assigned_ } = state;\n let copy_ = state.copy_;\n if (copy_.length < base_.length) {\n ;\n [base_, copy_] = [copy_, base_];\n [patches, inversePatches] = [inversePatches, patches];\n }\n for (let i = 0; i < base_.length; i++) {\n if (assigned_[i] && copy_[i] !== base_[i]) {\n const path = basePath.concat([i]);\n patches.push({\n op: REPLACE,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n inversePatches.push({\n op: REPLACE,\n path,\n value: clonePatchValueIfNeeded(base_[i])\n });\n }\n }\n for (let i = base_.length; i < copy_.length; i++) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n }\n for (let i = copy_.length - 1; base_.length <= i; --i) {\n const path = basePath.concat([i]);\n inversePatches.push({\n op: REMOVE,\n path\n });\n }\n }\n function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n const { base_, copy_ } = state;\n each(state.assigned_, (key, assignedValue) => {\n const origValue = get(base_, key);\n const value = get(copy_, key);\n const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n if (origValue === value && op === REPLACE)\n return;\n const path = basePath.concat(key);\n patches.push(op === REMOVE ? { op, path } : { op, path, value });\n inversePatches.push(\n op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n );\n });\n }\n function generateSetPatches(state, basePath, patches, inversePatches) {\n let { base_, copy_ } = state;\n let i = 0;\n base_.forEach((value) => {\n if (!copy_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: REMOVE,\n path,\n value\n });\n inversePatches.unshift({\n op: ADD,\n path,\n value\n });\n }\n i++;\n });\n i = 0;\n copy_.forEach((value) => {\n if (!base_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n value\n });\n inversePatches.unshift({\n op: REMOVE,\n path,\n value\n });\n }\n i++;\n });\n }\n function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {\n patches.push({\n op: REPLACE,\n path: [],\n value: replacement === NOTHING ? void 0 : replacement\n });\n inversePatches.push({\n op: REPLACE,\n path: [],\n value: baseValue\n });\n }\n function applyPatches_(draft, patches) {\n patches.forEach((patch) => {\n const { path, op } = patch;\n let base = draft;\n for (let i = 0; i < path.length - 1; i++) {\n const parentType = getArchtype(base);\n let p = path[i];\n if (typeof p !== \"string\" && typeof p !== \"number\") {\n p = \"\" + p;\n }\n if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === \"constructor\"))\n die(errorOffset + 3);\n if (typeof base === \"function\" && p === \"prototype\")\n die(errorOffset + 3);\n base = get(base, p);\n if (typeof base !== \"object\")\n die(errorOffset + 2, path.join(\"/\"));\n }\n const type = getArchtype(base);\n const value = deepClonePatchValue(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case REPLACE:\n switch (type) {\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n die(errorOffset);\n default:\n return base[key] = value;\n }\n case ADD:\n switch (type) {\n case 1 /* Array */:\n return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n return base.add(value);\n default:\n return base[key] = value;\n }\n case REMOVE:\n switch (type) {\n case 1 /* Array */:\n return base.splice(key, 1);\n case 2 /* Map */:\n return base.delete(key);\n case 3 /* Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n die(errorOffset + 1, op);\n }\n });\n return draft;\n }\n function deepClonePatchValue(obj) {\n if (!isDraftable(obj))\n return obj;\n if (Array.isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n );\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned = Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key] = deepClonePatchValue(obj[key]);\n if (has(obj, DRAFTABLE))\n cloned[DRAFTABLE] = obj[DRAFTABLE];\n return cloned;\n }\n function clonePatchValueIfNeeded(obj) {\n if (isDraft(obj)) {\n return deepClonePatchValue(obj);\n } else\n return obj;\n }\n loadPlugin(\"Patches\", {\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_\n });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n class DraftMap extends Map {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 2 /* Map */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n assigned_: void 0,\n base_: target,\n draft_: this,\n isManual_: false,\n revoked_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(key) {\n return latest(this[DRAFT_STATE]).has(key);\n }\n set(key, value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !== value) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key, true);\n state.copy_.set(key, value);\n state.assigned_.set(key, true);\n }\n return this;\n }\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)) {\n state.assigned_.set(key, false);\n } else {\n state.assigned_.delete(key);\n }\n state.copy_.delete(key);\n return true;\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_ = /* @__PURE__ */ new Map();\n each(state.base_, (key) => {\n state.assigned_.set(key, false);\n });\n state.copy_.clear();\n }\n }\n forEach(cb, thisArg) {\n const state = this[DRAFT_STATE];\n latest(state).forEach((_value, key, _map) => {\n cb.call(thisArg, this.get(key), key, this);\n });\n }\n get(key) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n const value = latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value !== state.base_.get(key)) {\n return value;\n }\n const draft = createProxy(value, state);\n prepareMapCopy(state);\n state.copy_.set(key, draft);\n return draft;\n }\n keys() {\n return latest(this[DRAFT_STATE]).keys();\n }\n values() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value\n };\n }\n };\n }\n entries() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value: [r.value, value]\n };\n }\n };\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.entries();\n }\n }\n function proxyMap_(target, parent) {\n return new DraftMap(target, parent);\n }\n function prepareMapCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = new Map(state.base_);\n }\n }\n class DraftSet extends Set {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 3 /* Set */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n base_: target,\n draft_: this,\n drafts_: /* @__PURE__ */ new Map(),\n revoked_: false,\n isManual_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_) {\n return state.base_.has(value);\n }\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n }\n add(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n }\n return this;\n }\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n /* istanbul ignore next */\n false\n ));\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n }\n }\n values() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n }\n entries() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n }\n keys() {\n return this.values();\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.values();\n }\n forEach(cb, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n cb.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n }\n }\n function proxySet_(target, parent) {\n return new DraftSet(target, parent);\n }\n function prepareSetCopy(state) {\n if (!state.copy_) {\n state.copy_ = /* @__PURE__ */ new Set();\n state.base_.forEach((value) => {\n if (isDraftable(value)) {\n const draft = createProxy(value, state);\n state.drafts_.set(value, draft);\n state.copy_.add(draft);\n } else {\n state.copy_.add(value);\n }\n });\n }\n }\n function assertUnrevoked(state) {\n if (state.revoked_)\n die(3, JSON.stringify(latest(state)));\n }\n loadPlugin(\"MapSet\", { proxyMap_, proxySet_ });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = /* @__PURE__ */ immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze = /* @__PURE__ */ immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = /* @__PURE__ */ immer.setUseStrictShallowCopy.bind(\n immer\n);\nvar setUseStrictIteration = /* @__PURE__ */ immer.setUseStrictIteration.bind(\n immer\n);\nvar applyPatches = /* @__PURE__ */ immer.applyPatches.bind(immer);\nvar createDraft = /* @__PURE__ */ immer.createDraft.bind(immer);\nvar finishDraft = /* @__PURE__ */ immer.finishDraft.bind(immer);\nfunction castDraft(value) {\n return value;\n}\nfunction castImmutable(value) {\n return value;\n}\nexport {\n Immer2 as Immer,\n applyPatches,\n castDraft,\n castImmutable,\n createDraft,\n current,\n enableMapSet,\n enablePatches,\n finishDraft,\n freeze,\n DRAFTABLE as immerable,\n isDraft,\n isDraftable,\n NOTHING as nothing,\n original,\n produce,\n produceWithPatches,\n setAutoFreeze,\n setUseStrictIteration,\n setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","import { createStore } from \"zustand/vanilla\";\nimport { subscribeWithSelector } from \"zustand/middleware\";\nimport { shallow } from \"zustand/shallow\";\nimport { freeze, produce } from \"immer\";\n//#region lib/types/index.js\n/**\n* React-free snapshot store engine (zustand vanilla + immer + subscribeWithSelector +\n* rafFlush middleware + opt-in persist + dev freeze) plus the declarative\n* shell over it: {@link defineStore} bakes an init/persist/actions literal\n* into a {@link StoreHandle}, the registration-side store seat of slot\n* terminals. Engine products are bare observables — subscribe/getSnapshot/\n* update/set, NO selector hook. Hook synthesis is ui-renderer's (the one\n* uSES bridge, cached per source at the binding site).\n*/\n/**\n* Notify an observer set without allowing one callback to starve the rest.\n* @param listeners - current observer callbacks; copied before dispatch.\n* @param label - diagnostic owner prefix.\n* @param args - callback arguments.\n*/\nfunction notifySubscribers(listeners, label, ...args) {\n\tfor (const listener of [...listeners]) try {\n\t\tlistener(...args);\n\t} catch (error) {\n\t\tconsole.error(`${label} subscriber failed:`, error);\n\t}\n}\n/**\n* Shallow equality for selector slices (zustand/shallow semantics; travels\n* with the engine so hook consumers need no zustand dependency).\n* @param a - left value.\n* @param b - right value.\n* @returns whether the values are shallowly equal.\n*/\nfunction shallowEqual(a, b) {\n\treturn shallow(a, b);\n}\n/** Batches subscriber notification into one flush per animation frame. */\nfunction rafBatch(notify) {\n\tconst schedule = typeof requestAnimationFrame === \"function\" ? (fn) => {\n\t\trequestAnimationFrame(() => {\n\t\t\tfn();\n\t\t});\n\t} : (fn) => {\n\t\tqueueMicrotask(fn);\n\t};\n\tlet scheduled = false;\n\treturn () => {\n\t\tif (scheduled) return;\n\t\tscheduled = true;\n\t\tschedule(() => {\n\t\t\tscheduled = false;\n\t\t\tnotify();\n\t\t});\n\t};\n}\n/**\n* Create a snapshot store.\n*\n* Flush default is 'sync' (controlled inputs need same-tick echo); frame-driven\n* stores opt into 'raf', where a frame's worth of updates coalesces into one\n* notification. Known raf-mode tradeoff: a component mounting mid-frame reads\n* fresh state while existing subscribers hear it next flush — transient\n* frame-level skew, same nature as the object layer's microtask batching.\n*\n* @param init - initial state.\n* @param opts - flush mode and opt-in persistence (localStorage, keyed by name).\n* @returns the store.\n*/\nfunction createSnapshotStore(init, opts) {\n\tconst withSelector = subscribeWithSelector(() => init);\n\tconst api = createStore()(withSelector);\n\tif (opts?.persist) attachPersistence(api, opts.persist.name);\n\tlet subscribe = (fn) => api.subscribe(() => {\n\t\tnotifySubscribers([fn], \"[client-store]\");\n\t});\n\tif (opts?.flush === \"raf\") {\n\t\tconst listeners = /* @__PURE__ */ new Set();\n\t\tconst flush = rafBatch(() => {\n\t\t\tnotifySubscribers(listeners, \"[client-store]\");\n\t\t});\n\t\tapi.subscribe(flush);\n\t\tsubscribe = (fn) => {\n\t\t\tlisteners.add(fn);\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(fn);\n\t\t\t};\n\t\t};\n\t}\n\treturn {\n\t\tgetSnapshot: () => api.getState(),\n\t\tsubscribe: (fn) => subscribe(fn),\n\t\tupdate: (mutator) => {\n\t\t\tapi.setState(produce(api.getState(), (draft) => {\n\t\t\t\tmutator(draft);\n\t\t\t}), true);\n\t\t},\n\t\tset: (next) => {\n\t\t\tapi.setState(devFreeze(next), true);\n\t\t}\n\t};\n}\n/**\n* Whole-value JSON persistence to localStorage. Hand-rolled instead of the\n* zustand persist middleware: its write path spreads state into an object\n* (`partialize({ ...get() })`), exploding primitive state (a persisted string\n* draft becomes {0:'h',1:'e',...}) — not fixable via merge/deserialize options\n* because the corruption happens before serialization. Storage failures\n* (quota, private mode) only disable persistence, never break the store.\n*/\nfunction attachPersistence(api, name) {\n\tif (typeof localStorage === \"undefined\") return;\n\ttry {\n\t\tconst raw = localStorage.getItem(name);\n\t\tif (raw !== null) api.setState(devFreeze(JSON.parse(raw)), true);\n\t} catch (error) {\n\t\tconsole.error(`snapshot store '${name}' rehydration failed:`, error);\n\t}\n\tapi.subscribe((state) => {\n\t\ttry {\n\t\t\tlocalStorage.setItem(name, JSON.stringify(state));\n\t\t} catch (error) {\n\t\t\tconsole.error(`snapshot store '${name}' persistence failed:`, error);\n\t\t}\n\t});\n}\n/** Deep-freeze draftable wholesale-set state outside production: set() bypasses immer's freeze. */\nfunction devFreeze(value) {\n\treturn freeze(value, true);\n}\n/**\n* Declare a store: initial state, optional persistence, and the full write\n* set as pure draft mutators. The returned handle is the registration\n* currency of the store seat — its identity keys instance sharing. Satisfies\n* ui-slots' DefineStore contract (the handle/instance are the engine-extended\n* subtypes).\n*\n* The `A & ActionsDecl<T>` actions position is load-bearing: T resolves from\n* `init` in the first inference round, and the intersection then contextually\n* types each mutator's draft parameter (context-sensitive functions defer),\n* so call sites write `(d, x: X) => { ... }` with no draft annotation. If a\n* future TS version breaks this single-literal inference, the design's\n* documented fallback is currying (`defineStore(init).actions({...})`).\n* @param decl - init lambda (fresh state per instance), optional persist key, actions table.\n* @returns the store handle.\n*/\nfunction defineStore(decl) {\n\treturn {\n\t\tspec: decl,\n\t\tcreate(scopeKey) {\n\t\t\tconst persistKey = decl.persist === void 0 ? void 0 : scopeKey === void 0 ? decl.persist : `${decl.persist}.${scopeKey}`;\n\t\t\tconst store = createSnapshotStore(decl.init(), persistKey !== void 0 ? { persist: { name: persistKey } } : void 0);\n\t\t\tconst actions = {};\n\t\t\tfor (const key of Object.keys(decl.actions)) {\n\t\t\t\tconst mutate = decl.actions[key];\n\t\t\t\tactions[key] = (...params) => {\n\t\t\t\t\tstore.update((draft) => {\n\t\t\t\t\t\tmutate(draft, ...params);\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tactions,\n\t\t\t\tgetSnapshot: () => store.getSnapshot(),\n\t\t\t\tsubscribe: (fn) => store.subscribe(fn),\n\t\t\t\tstore,\n\t\t\t\tclearPersisted: () => {\n\t\t\t\t\tif (persistKey === void 0 || typeof localStorage === \"undefined\") return;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlocalStorage.removeItem(persistKey);\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n}\n//#endregion\nexport { createSnapshotStore, defineStore, notifySubscribers, shallowEqual };\n\n//# sourceMappingURL=index.js.map","export const WORKTREE_NS = 'worktree';\nexport const zh = {\n 'dashboard.title': \"Dashboard\",\n 'dashboard.preview': 'Dashboard 预览',\n 'dashboard.open': '打开 Dashboard',\n 'dashboard.copyBranch': '复制分支名称',\n 'dashboard.branchCopied': '已复制分支名称',\n 'dashboard.branchCopyFailed': '复制分支名称失败,请重试。',\n 'dashboard.tab.overview': \"概览\",\n 'dashboard.tab.git': \"Git 与变更\",\n 'dashboard.git.title': 'Git 与变更',\n 'dashboard.git.baselineSelector': '基线分支',\n 'dashboard.git.selectBaseline': '选择基线分支',\n 'dashboard.git.selectBaselineTitle': '请选择基线分支',\n 'dashboard.git.selectBaselineDescription': '选择一个本地 branch 作为比较起点,然后查看提交、变更文件和 Diff。',\n 'dashboard.git.base': '基线',\n 'dashboard.git.head': 'HEAD',\n 'dashboard.git.commit': '提交',\n 'dashboard.git.commits': '提交',\n 'dashboard.git.commitCount': '{n} 个提交',\n 'dashboard.git.commitCountWithWorkingTree': '{commits} 个提交 + 工作区改动',\n 'dashboard.git.uncommittedChanges': '未提交的改动',\n 'dashboard.git.workingTree': '工作区',\n 'dashboard.git.changedFiles': '变更文件',\n 'dashboard.git.lineStats': '+{additions} 行,-{deletions} 行',\n 'dashboard.git.aheadBehindStats': '+{ahead} 领先,-{behind} 落后',\n 'dashboard.git.diff': 'Diff',\n 'dashboard.git.resizeRows': '拖动调整上下两栏高度,双击恢复默认',\n 'dashboard.git.resizeColumns': '拖动调整左右两栏宽度,双击恢复默认',\n 'dashboard.git.openInSidebar': '在侧栏打开',\n 'dashboard.git.summaryDiff': '汇总 Diff',\n 'dashboard.git.baselineSummary': '基线汇总',\n 'dashboard.git.baselineSummaryDescription': '查看基线比较边界到 HEAD 的全部已提交变更(基线 branch 已分叉时取两者共同祖先,默认不含工作区)。',\n 'dashboard.git.includeWorkingTree': '包含工作区改动',\n 'dashboard.git.includeWorkingTreeDescription': '加入 staged、unstaged 和 untracked 文件。',\n 'dashboard.git.selectedCommitCount': '已选择 {n} 个提交',\n 'dashboard.git.multiSelectCommits': '多选提交',\n 'dashboard.git.multiSelectCommitsDescription': '关闭时点击提交查看该提交自己的 Diff;打开后可同时选择多个提交并查看合并结果。',\n 'dashboard.git.commitSelectionHint': '可多选提交;工作区改动不能与提交混合选择。',\n 'dashboard.git.clearCommitSelection': '清除选择',\n 'dashboard.git.commitDiffSection': '提交变更',\n 'dashboard.git.loadingSummaryFiles': '正在加载基线汇总变更…',\n 'dashboard.git.loadingSummaryDiff': '正在加载基线汇总 Diff…',\n 'dashboard.git.noBaselineChanges': '基线与 HEAD 没有已提交的净变更。',\n 'dashboard.git.noLiveBaselineChanges': '基线与当前工作区没有净变更。',\n 'dashboard.git.refresh': '刷新',\n 'dashboard.git.refreshing': '刷新中…',\n 'dashboard.git.retry': '重试',\n 'dashboard.git.loading': '正在加载 Git 历史和工作区改动…',\n 'dashboard.git.loadingFiles': '正在加载变更文件…',\n 'dashboard.git.loadingDiff': '正在加载 Diff…',\n 'dashboard.git.loadFailed': 'Git 数据加载失败:{reason}',\n 'dashboard.git.refreshFailed': '刷新 Git 数据失败:{reason}',\n 'dashboard.git.baselineUnknownTitle': '历史基线无法获取',\n 'dashboard.git.baselineUnknownDescription': '无法安全确定所选 branch 与当前 HEAD 的比较范围;请确认基线 branch 仍是当前 HEAD 的 ancestor。',\n 'dashboard.git.mainUnavailableTitle': '本地 Workspace 不适用',\n 'dashboard.git.mainUnavailableDescription': 'Git Dashboard 的 branch 基线选择仅适用于已登记 Worktree。',\n 'dashboard.git.derived': '运行时推导',\n 'dashboard.git.noCommits': '没有超出基线的提交。',\n 'dashboard.git.noFiles': '此项没有可显示的变更文件。',\n 'dashboard.git.selectCommit': '选择一个提交或工作区改动查看详情。',\n 'dashboard.git.selectFile': '选择一个文件查看 Diff。',\n 'dashboard.git.untitledCommit': '(无提交标题)',\n 'dashboard.git.truncatedHistory': '仅显示前 200 个提交。',\n 'dashboard.git.truncatedFiles': '变更文件过多,无法完整列出。',\n 'dashboard.git.binary': '二进制文件没有可显示的文本 Diff。',\n 'dashboard.git.diffTruncated': 'Diff 太大,无法在 Dashboard 中完整显示;请在 IDE 中检查完整变更。',\n 'dashboard.git.diffLinesHidden': '为保持滚动流畅,暂时折叠了 {n} 行 Diff。',\n 'dashboard.git.showFullDiff': '显示完整 Diff',\n 'dashboard.git.emptyDiff': '没有可显示的 Diff。',\n 'dashboard.git.status.added': '新增',\n 'dashboard.git.status.modified': '修改',\n 'dashboard.git.status.deleted': '删除',\n 'dashboard.git.status.renamed': '重命名',\n 'dashboard.git.status.copied': '复制',\n 'dashboard.git.status.typeChanged': '类型变化',\n 'dashboard.tab.sessions': \"会话\",\n 'dashboard.tab.children': \"派生 Worktree\",\n 'dashboard.tab.settings': \"设置\",\n 'dashboard.back': \"返回会话\",\n 'dashboard.openSidebar': '打开侧栏',\n 'dashboard.soon': \"即将推出\",\n 'dashboard.notConnected': \"待接入\",\n 'dashboard.unknown': \"未知\",\n 'dashboard.unknownError': '未知错误',\n 'dashboard.historicalUnavailable': \"历史 Worktree 无法获取\",\n 'dashboard.detached': \"分离 HEAD\",\n 'dashboard.cleaned': \"已清理\",\n 'dashboard.archived': \"已归档\",\n 'dashboard.copied': \"已复制完整路径\",\n 'dashboard.copyFailed': \"复制失败,请重试或手动选择上方路径。\",\n 'dashboard.openEditor': \"在 VS Code 中打开\",\n 'dashboard.openIn': \"在 {app} 中打开\",\n 'dashboard.created': \"创建时间\",\n 'dashboard.imported': '登记时间',\n 'dashboard.editorMenu': '选择打开应用',\n 'dashboard.saveInstructions': '保存',\n 'dashboard.savingInstructions': '保存中…',\n 'dashboard.cancelInstructions': '取消',\n 'dashboard.instructionsSaveFailed': '保存失败,草稿已保留。可重试;若其他窗口已修改指令,请取消并重新打开编辑。',\n 'dashboard.editBase': '编辑基线',\n 'dashboard.editBaseDescription': '选择一个本地 branch 作为 Git 与变更的比较基线。',\n 'dashboard.searchBranches': '搜索 branch',\n 'dashboard.noMatchingBranches': '没有匹配的 branch',\n 'dashboard.selectBaseBranch': '选择基线分支',\n 'dashboard.saveBase': '保存基线',\n 'dashboard.savingBase': '保存中…',\n 'dashboard.cancelBase': '取消',\n 'dashboard.baseSaveFailed': '基线保存失败,草稿已保留。请重试;如果其他窗口已修改基线,请取消并重新编辑。',\n 'dashboard.base': \"基线\",\n 'dashboard.source': \"来源\",\n 'dashboard.external': \"外部导入\",\n 'dashboard.plugin': \"插件创建\",\n 'dashboard.start': \"开始新的工作\",\n 'dashboard.startDescription': \"从这个 Worktree 继续工作\",\n 'dashboard.newWorktree': \"新建 Worktree\",\n 'dashboard.newSession': \"新建会话\",\n 'dashboard.newWorktreeDescription': \"基于当前分支创建独立的工作目录\",\n 'dashboard.newSessionDescription': \"在这个 Worktree 中开始新的会话\",\n 'dashboard.instructions': \"Worktree / Main 指令\",\n 'dashboard.edit': \"编辑\",\n 'dashboard.instructionsDescription': \"为这个 Worktree 或 Main Workspace 设置共享的工作指引。\",\n 'dashboard.noInstructions': \"尚未设置指令\",\n 'dashboard.instructionsHint': \"最多 32,000 字符。保存后在这个 Worktree 或 Main Workspace 中运行的会话下一次模型请求中以 <system-reminder> 生效;清空并保存可停用。\",\n 'dashboard.noSessions': \"此 Worktree 暂无可显示的会话。\",\n 'dashboard.viewSessions': \"查看全部会话\",\n 'dashboard.status': \"Worktree 状态\",\n 'dashboard.statusHint': \"目录可用性来自现有检查;选择 branch 基线后,Git 与变更页展示其之后的提交,状态区分别显示已提交和未提交的行数。\",\n 'dashboard.health': \"可用性\",\n 'dashboard.branch': \"当前分支\",\n 'dashboard.branchUnavailable': '当前分支无法获取',\n 'dashboard.aheadBehind': \"领先 / 落后\",\n 'dashboard.committedChanges': \"已提交变更\",\n 'dashboard.workingTree': \"未提交变更\",\n 'dashboard.viewDetails': \"查看详情\",\n 'dashboard.derived': \"派生 Worktree\",\n 'dashboard.childrenHint': \"派生关系尚未接入,不代表没有其他 Worktree。\",\n 'dashboard.viewChildren': \"查看派生 Worktree\",\n 'dashboard.quickActions': \"快捷操作\",\n 'dashboard.action.terminal': \"在终端中打开\",\n 'dashboard.action.diff': \"查看 Git Diff\",\n 'dashboard.action.pullRequest': \"创建 Pull Request\",\n 'dashboard.action.tests': \"运行测试\",\n 'dashboard.action.sync': \"同步基线\",\n 'dashboard.action.archive': \"归档 Worktree\",\n 'dashboard.hint.git': \"这里展示相对于所选 branch 基线的提交、已提交和未提交的变化行数、变更文件和统一 Diff。\",\n 'dashboard.hint.children': \"这里将展示基于此 Worktree 派生的工作目录与关系。\",\n 'dashboard.hint.settings': \"这里将提供 Worktree 指令与偏好设置。当前不会保存任何更改。\",\n 'dashboard.mvpHint': \"MVP · 会话、新建 Worktree、归档、Git 变更和 VS Code 已接入;其余标记为“即将推出”的操作暂不可用。\",\n 'mode.open': '打开 Worktree 模式',\n 'mode.exit': '退出 Worktree 模式',\n 'mode.label': 'Worktree',\n 'mode.navigation': 'Worktree 导航',\n 'context.main': '当前分支:{name}',\n 'context.worktree': 'Worktree:{name}',\n 'workspace.rename': '重命名',\n 'workspace.delete': '删除',\n 'workspace.expand': '展开 {name}',\n 'workspace.collapse': '收起 {name}',\n 'workspace.collapseAll': '全部折叠',\n 'workspace.options': '工作区选项:{name}',\n 'workspace.addWorktree': '向 {name} 添加 Worktree',\n 'workspace.add': '添加工作区',\n 'workspace.search': '搜索工作区和会话',\n 'search.clear': '清除搜索',\n 'workspace.noMatches': '没有匹配的工作区',\n 'workspace.renameTitle': '重命名工作区',\n 'workspace.name': '工作区名称',\n 'workspace.duplicate': '已存在同名工作区。',\n 'workspace.deleteTitle': '删除工作区',\n 'workspace.deleteDescription': '删除“{name}”?这只会移除 DSH 工作区注册。目录、会话和 Git Worktree 会保留。',\n 'worktree.title': 'Worktree',\n 'worktree.main': '本地',\n 'worktree.mainWithBranch': '本地({branch})',\n 'worktree.detached': '已分离 Worktree',\n 'worktree.repair': 'Worktree 需要修复',\n 'worktree.repairGuidance': '检查此路径的目录、.git 入口和 Git Worktree 登记是否完整。若目录被移动,请先恢复到原路径;目录仍存在但 Git 关联异常时,可在该目录运行 git worktree repair 后刷新。若已删除且不再需要,请先归档,再选择清理磁盘同步移除状态,或移出管理。',\n 'worktree.recoveryGuidance': '上次操作尚未完成,或目录与仓库身份无法确认。请确认原目录和仓库可访问,再从此 Worktree 菜单选择“重试恢复”。若仍失败,请保留错误详情排查,不要手动删除插件索引。',\n 'worktree.branchDriftGuidance': '实际分支与记录不一致。若切换符合预期,请从此 Worktree 菜单选择“采用当前分支”;否则在 Git 中切回原分支后刷新。会话绑定和工作目录保持不变。',\n 'worktree.detachedGuidance': '此目录处于分离 HEAD。请先在 Git 中切换到所需的本地分支,再刷新;如与原记录不同,选择“采用当前分支”。',\n 'notice.details': '提示详情与恢复操作',\n 'worktree.recovery': 'Worktree 需要恢复',\n 'worktree.ready': '活动 Worktree 已就绪',\n 'worktree.branchDrift': 'Git 分支已变化',\n 'worktree.detachedHead': '分离 HEAD',\n 'worktree.adoptBranch': '采用当前分支',\n 'worktree.retryRecovery': '重试恢复',\n 'worktree.adoptDescription': '将记录分支从“{previous}”更新为“{current}”?只更新插件索引,会话绑定和磁盘文件保持不变。',\n 'worktree.adoptBeforeClean': '请先采用当前分支;分离 HEAD 时请先在 Git 中切换到分支。',\n 'worktree.cleaned': 'Worktree 已移除',\n 'worktree.archivedGroup': '已归档',\n 'worktree.cleanDisk': '清理磁盘',\n 'worktree.cleanDiskTitle': '清理 Worktree 磁盘',\n 'worktree.cleanDiskDescription': '从磁盘删除“{name}”({path})?此操作不可逆。插件不会检查 Session 或子代理是否正在运行,请自行确认所有使用此目录的任务均已停止;否则删除可能导致任务失败或数据丢失。若目录或 .git 已不存在,仅同步 Worktree 移除状态,剩余文件不会删除。关联 Session 与历史会保留。',\n 'worktree.forget': '移出管理',\n 'worktree.forgetTitle': '移出管理',\n 'worktree.forgetDescription': '将“{name}”从 Worktree 插件管理中移除?磁盘目录和 DSH 中的 Session 均会保留。',\n 'worktree.expand': '展开 {name}',\n 'worktree.collapse': '收起 {name}',\n 'worktree.options': 'Worktree 选项:{name}',\n 'worktree.copyPath': '复制路径',\n 'worktree.createNew': '创建新的 Worktree',\n 'worktree.archive': '归档 Worktree',\n 'worktree.archiveDescription': '归档“{name}”?它会移入“已归档”分组。磁盘目录、会话绑定和工作目录保持不变,已有会话仍可继续使用。删除目录需另行选择“清理磁盘”。',\n 'worktree.unarchive': '取消归档',\n 'worktree.unarchiveDisabledRepair': '目录或 Git 登记异常,无法取消归档',\n 'worktree.archiveExternalDescription': '归档“{name}”?它会移入“已归档”分组。外部目录、会话绑定和工作目录保持不变,已有会话仍可继续使用。删除目录需另行选择“清理磁盘”。',\n 'worktree.remove': '归档 Worktree',\n 'worktree.removeDescription': '归档“{name}”?目录、会话绑定和工作目录保持不变。删除目录需另行选择“清理磁盘”。',\n 'worktree.removeExternalDescription': '归档“{name}”?外部目录、会话绑定和工作目录保持不变。删除目录需另行选择“清理磁盘”。',\n 'worktree.addSession': '向 {name} 添加会话',\n 'worktree.noWorktrees': '暂无 Worktree',\n 'worktree.createTitle': '新建 Worktree',\n 'worktree.createDescription': '“{name}” · Worktree 路径由 DSH 管理。',\n 'worktree.tabCreate': '创建',\n 'worktree.tabImport': '导入',\n 'worktree.importDescription': '向“{name}”注册已有的 Worktree。注册和归档均保留原目录;只有另行确认“清理磁盘”才会删除目录。',\n 'worktree.importLoading': '正在查找可导入的 Worktree…',\n 'worktree.importEmpty': '没有可导入的 Worktree。',\n 'worktree.importPlaceholder': '请选择要导入的 Worktree',\n 'worktree.importSelected': '已选择',\n 'worktree.baseBranch': 'Worktree 基线分支',\n 'worktree.noLocalBranch': '没有本地分支',\n 'worktree.noBranches': '此工作区中没有找到本地分支。',\n 'worktree.setup.gitNotInstalled': 'Git 未安装或不在 PATH 中。请先安装 Git,然后重启 DSH 再重试。',\n 'worktree.setup.noRepository': '此 Workspace 不是 Git 仓库。请在 Workspace 目录执行以下命令:',\n 'worktree.setup.noInitialCommit': '此 Git 仓库还没有首次 commit。请先执行以下命令:',\n 'worktree.setup.noLocalBranch': '此 Git 仓库没有本地分支。请先创建一个本地分支:',\n 'worktree.setup.commands': '可复制的命令',\n 'worktree.name': 'Worktree 名称',\n 'worktree.create': '创建 Worktree',\n 'worktree.import': '导入 Worktree',\n 'session.options': '会话选项:{name}',\n 'session.new': '新会话',\n 'session.rename': '重命名会话',\n 'session.fork': 'Fork 会话',\n 'session.archive': '归档会话',\n 'session.copyId': '复制 Session ID',\n 'session.expandMore': '展开其余 {count} 个会话',\n 'session.collapse': '收起',\n 'session.name': '会话名称',\n 'session.status.running': '进行中',\n 'session.status.subagentsRunning.one': '{n} 个子代理运行中',\n 'session.status.subagentsRunning.other': '{n} 个子代理运行中',\n 'session.status.idle': '空闲',\n 'session.status.waitingApproval': '等待审批',\n 'session.status.planReview': '计划待审',\n 'session.status.waitingAnswer': '等待回答',\n 'session.status.completed': '已完成',\n copy: '复制',\n 'hover.copied': '已复制',\n 'session.time.now': '刚刚',\n 'session.time.minutes': '{n}分钟',\n 'session.time.hours': '{n}小时',\n 'session.time.days': '{n}天',\n 'session.time.months': '{n}个月',\n 'session.time.years': '{n}年',\n 'session.time.ago': '{t}前',\n 'dialog.close': '关闭',\n 'dialog.closeBaseline': '关闭编辑基线对话框',\n 'dialog.closeWorkspaceRename': '关闭重命名工作区对话框',\n 'dialog.closeWorkspaceDelete': '关闭删除工作区对话框',\n 'dialog.closeWorktreeCreate': '关闭创建 Worktree 对话框',\n 'dialog.closeWorktreeArchive': '关闭归档 Worktree 对话框',\n 'dialog.closeWorktreeRemove': '关闭归档 Worktree 对话框',\n 'dialog.closeWorktreeCleanDisk': '关闭清理 Worktree 磁盘对话框',\n 'dialog.closeWorktreeForget': '关闭移出管理对话框',\n 'dialog.cleanDisk': '清理磁盘',\n 'dialog.forget': '移出管理',\n 'dialog.cancel': '取消',\n 'dialog.rename': '重命名',\n 'dialog.delete': '删除',\n 'action.retry': '重试',\n 'action.retryBinding': '重试绑定',\n 'action.openCreatedSession': '打开已创建的 Session',\n 'permission.fallbackWorkspaceWrite': '无法使用 Worktree 完全访问预设,已降级为 workspace-write;保留审批提示。',\n 'permission.userRestricted': '已保留你在 DSH 原生权限界面选择的限制,未自动提升此 Worktree Session。',\n 'permission.unverified': '无法验证 Worktree Session 的权限服务;Session 已保留,但完全访问未得到确认。',\n 'permission.unavailable': 'Worktree Session 权限状态暂时不可用,请重试。',\n 'permission.fullAccessTitle': '确认启用 Worktree Full access?',\n 'permission.fullAccessDescription': '启用 Worktree Full access 后,此 Session 可能访问 Session 目录之外的关联 Git 元数据和 Worktree 文件。完全访问会关闭此 Session 的文件系统沙箱,但会保留审批提示;网络和进程策略不变。目标 Worktree:{cwd}',\n 'permission.fullAccessAcknowledge': '我已了解风险,并愿意继续',\n 'permission.fullAccessEnable': '启用 Worktree Full access',\n 'status.loading': '正在加载工作区…',\n 'error.worktreeDataUnavailable': 'Worktree 数据不可用,请重试。',\n 'error.gitNotInstalled': 'Git 未安装或不可用,请安装 Git 后重试。',\n 'error.connectionDisposed': 'Worktree 连接已释放,请重新加载插件后重试。',\n 'error.connectionFailed': 'Worktree endpoint {endpoint} 调用失败;连接错误,可重试:{reason}',\n 'error.invalidResult': 'Worktree endpoint {endpoint} 返回了无效结果,请重试请求。',\n 'error.workspaceOrderingUnavailable': '工作区排序不可用,请重新连接后重试。',\n 'error.sessionOrderingUnavailable': '会话排序不可用,请重新连接后重试。',\n 'error.worktreeOrderingUnavailable': 'Worktree 排序不可用,请重新连接后重试。',\n 'error.worktreeCreatedSessionUnavailable': 'Worktree 已创建,但 Session 创建不可用,请重新连接后重试。',\n 'error.sessionCreationUnavailable': 'Session 创建不可用,请重新连接后重试。',\n 'error.worktreeRecordMissing': 'Worktree 注册未返回 Worktree 记录,请重试请求。',\n 'error.worktreeImportInvalid': '这个 Worktree 无法导入,请选择同一 Workspace 中有效的绝对路径。',\n 'error.worktreeAlreadyManaged': '这个 Worktree 已由插件管理。',\n 'error.worktreeMutationBusy': '另一个 DSH 实例正在修改 Worktree 状态,请稍后重试。',\n 'error.worktreeStateConflict': 'Worktree 状态已经变化,请刷新后重试。',\n 'error.worktreeRecoveryRequired': 'Worktree 状态需要恢复;请先完成恢复后再重试破坏性操作。',\n 'error.worktreeIdentityChanged': 'Worktree 或 repository 身份已经变化,需要恢复后再操作。',\n 'error.worktreeSessionBusy': '关联 Session 正在运行,无法执行此操作。',\n 'error.worktreeActivityUnavailable': '无法验证关联 Session 运行状态,无法执行此操作。',\n 'error.worktreeRegistrationSessionUnavailable': 'Worktree 已注册,但 Session 创建不可用,请重新连接后重试。',\n 'error.workspaceRenameUnavailable': '工作区重命名不可用,请重新连接后重试。',\n 'error.workspaceDeleteUnavailable': '工作区删除不可用,请重新连接后重试。',\n 'error.sessionRenameUnavailable': '会话重命名不可用,请重新连接后重试。',\n 'error.sessionBindingFailed': 'Session {sessionId} 已创建,但 Worktree 绑定失败:{reason}',\n 'error.sessionAlreadyBound': 'Session 已绑定到其他 Worktree,未创建新的 Session。',\n 'error.worktreePermissionConfirmationRequired': 'Session 和绑定已保留;确认完全访问后重试,未打开 Session。',\n 'error.worktreePermissionFailed': 'Worktree Session 权限设置失败,可重试:{reason}',\n 'error.sessionListNotReady': 'Session 列表尚未就绪,请重试。',\n 'error.sessionFactsIncomplete': 'Session 信息尚未完整,请重试。',\n 'error.worktreeSessionRepairRequired': '当前 Worktree 的 Session 绑定需要修复,请重试。',\n 'error.worktreeSessionUnavailable': '当前 Worktree 不可用,请重试。',\n 'error.sessionArchived': '该 Session 已归档,无法重试绑定。',\n 'branch.current': '(当前)',\n 'branch.checkedOut': '(已检出)',\n};\nexport const en = {\n 'dashboard.title': \"Dashboard\",\n 'dashboard.preview': 'Dashboard preview',\n 'dashboard.open': 'Open Dashboard',\n 'dashboard.copyBranch': 'Copy branch name',\n 'dashboard.branchCopied': 'Branch name copied',\n 'dashboard.branchCopyFailed': 'Branch name copy failed. Try again.',\n 'dashboard.tab.overview': \"Dashboard\",\n 'dashboard.tab.git': \"Git & Changes\",\n 'dashboard.git.title': 'Git & Changes',\n 'dashboard.git.baselineSelector': 'Baseline branch',\n 'dashboard.git.selectBaseline': 'Select a baseline branch',\n 'dashboard.git.selectBaselineTitle': 'Select a baseline branch',\n 'dashboard.git.selectBaselineDescription': 'Choose a local branch as the comparison point to view commits, changed files, and diffs.',\n 'dashboard.git.base': 'Base',\n 'dashboard.git.head': 'HEAD',\n 'dashboard.git.commit': 'Commit',\n 'dashboard.git.commits': 'Commits',\n 'dashboard.git.commitCount': '{n} commits',\n 'dashboard.git.commitCountWithWorkingTree': '{commits} commits + working tree changes',\n 'dashboard.git.uncommittedChanges': 'Uncommitted changes',\n 'dashboard.git.workingTree': 'Working tree',\n 'dashboard.git.changedFiles': 'Changed files',\n 'dashboard.git.lineStats': '+{additions} lines, -{deletions} lines',\n 'dashboard.git.aheadBehindStats': '+{ahead} ahead, -{behind} behind',\n 'dashboard.git.diff': 'Diff',\n 'dashboard.git.resizeRows': 'Drag to resize the stacked panes; double-click to reset',\n 'dashboard.git.resizeColumns': 'Drag to resize the side-by-side panes; double-click to reset',\n 'dashboard.git.openInSidebar': 'Open in Sidebar',\n 'dashboard.git.summaryDiff': 'Summary diff',\n 'dashboard.git.baselineSummary': 'Baseline summary',\n 'dashboard.git.baselineSummaryDescription': 'View all committed changes from the resolved baseline boundary (the shared ancestor when the baseline branch has diverged) to HEAD, excluding the working tree by default.',\n 'dashboard.git.includeWorkingTree': 'Include working tree',\n 'dashboard.git.includeWorkingTreeDescription': 'Include staged, unstaged, and untracked files.',\n 'dashboard.git.selectedCommitCount': '{n} commits selected',\n 'dashboard.git.multiSelectCommits': 'Multi-select commits',\n 'dashboard.git.multiSelectCommitsDescription': 'When off, clicking a commit shows its own diff; when on, several commits can be selected together.',\n 'dashboard.git.commitSelectionHint': 'Select multiple commits; working-tree changes cannot be mixed with commits.',\n 'dashboard.git.clearCommitSelection': 'Clear selection',\n 'dashboard.git.commitDiffSection': 'Commit change',\n 'dashboard.git.loadingSummaryFiles': 'Loading baseline summary changes…',\n 'dashboard.git.loadingSummaryDiff': 'Loading baseline summary diff…',\n 'dashboard.git.noBaselineChanges': 'The baseline and HEAD have no committed net changes.',\n 'dashboard.git.noLiveBaselineChanges': 'The baseline and current working tree have no net changes.',\n 'dashboard.git.refresh': 'Refresh',\n 'dashboard.git.refreshing': 'Refreshing…',\n 'dashboard.git.retry': 'Retry',\n 'dashboard.git.loading': 'Loading Git history and working tree changes…',\n 'dashboard.git.loadingFiles': 'Loading changed files…',\n 'dashboard.git.loadingDiff': 'Loading diff…',\n 'dashboard.git.loadFailed': 'Git data failed to load: {reason}',\n 'dashboard.git.refreshFailed': 'Git refresh failed: {reason}',\n 'dashboard.git.baselineUnknownTitle': 'Historical baseline unavailable',\n 'dashboard.git.baselineUnknownDescription': 'The selected branch cannot be safely compared with the current HEAD; confirm that it is still an ancestor of HEAD.',\n 'dashboard.git.mainUnavailableTitle': 'Not available for the local Workspace',\n 'dashboard.git.mainUnavailableDescription': 'Branch baseline selection in the Git Dashboard applies only to registered Worktrees.',\n 'dashboard.git.derived': 'Derived at runtime',\n 'dashboard.git.noCommits': 'No commits are ahead of the baseline.',\n 'dashboard.git.noFiles': 'This entry has no displayable changed files.',\n 'dashboard.git.selectCommit': 'Select a commit or working-tree change to view its details.',\n 'dashboard.git.selectFile': 'Select a file to view its diff.',\n 'dashboard.git.untitledCommit': '(untitled commit)',\n 'dashboard.git.truncatedHistory': 'Showing the first 200 commits.',\n 'dashboard.git.truncatedFiles': 'Too many changed files to list completely.',\n 'dashboard.git.binary': 'Binary files have no text diff to display.',\n 'dashboard.git.diffTruncated': 'The diff is too large to display completely; inspect the full change in your IDE.',\n 'dashboard.git.diffLinesHidden': 'Folded {n} diff lines to keep scrolling responsive.',\n 'dashboard.git.showFullDiff': 'Show full diff',\n 'dashboard.git.emptyDiff': 'No diff to display.',\n 'dashboard.git.status.added': 'Added',\n 'dashboard.git.status.modified': 'Modified',\n 'dashboard.git.status.deleted': 'Deleted',\n 'dashboard.git.status.renamed': 'Renamed',\n 'dashboard.git.status.copied': 'Copied',\n 'dashboard.git.status.typeChanged': 'Type changed',\n 'dashboard.tab.sessions': \"Sessions\",\n 'dashboard.tab.children': \"Children\",\n 'dashboard.tab.settings': \"Settings\",\n 'dashboard.back': \"Back to session\",\n 'dashboard.openSidebar': 'Open sidebar',\n 'dashboard.soon': \"Coming soon\",\n 'dashboard.notConnected': \"Not connected\",\n 'dashboard.unknown': \"Unknown\",\n 'dashboard.unknownError': 'Unknown error',\n 'dashboard.historicalUnavailable': \"Unavailable for historical Worktrees\",\n 'dashboard.detached': \"Detached HEAD\",\n 'dashboard.cleaned': \"Cleaned\",\n 'dashboard.archived': \"Archived\",\n 'dashboard.copied': \"Full path copied\",\n 'dashboard.copyFailed': \"Copy failed. Try again or select the path above.\",\n 'dashboard.openEditor': \"Open in VS Code\",\n 'dashboard.openIn': \"Open in {app}\",\n 'dashboard.created': \"Created\",\n 'dashboard.imported': 'Imported',\n 'dashboard.editorMenu': 'Choose application',\n 'dashboard.saveInstructions': 'Save',\n 'dashboard.savingInstructions': 'Saving…',\n 'dashboard.cancelInstructions': 'Cancel',\n 'dashboard.instructionsSaveFailed': 'Save failed; your draft is retained. Retry, or cancel and reopen if another window changed the instructions.',\n 'dashboard.editBase': 'Edit baseline',\n 'dashboard.editBaseDescription': 'Choose a local branch as the Git & Changes comparison baseline.',\n 'dashboard.searchBranches': 'Search branches',\n 'dashboard.noMatchingBranches': 'No matching branches',\n 'dashboard.selectBaseBranch': 'Select a baseline branch',\n 'dashboard.saveBase': 'Save baseline',\n 'dashboard.savingBase': 'Saving…',\n 'dashboard.cancelBase': 'Cancel',\n 'dashboard.baseSaveFailed': 'Baseline save failed; your draft is retained. Retry, or cancel and reopen if another window changed the baseline.',\n 'dashboard.base': \"Base\",\n 'dashboard.source': \"Source\",\n 'dashboard.external': \"Imported\",\n 'dashboard.plugin': \"Plugin-created\",\n 'dashboard.start': \"Start a new work\",\n 'dashboard.startDescription': \"Choose how to continue from this worktree\",\n 'dashboard.newWorktree': \"New Worktree\",\n 'dashboard.newSession': \"New Session\",\n 'dashboard.newWorktreeDescription': \"Create an isolated worktree from this branch\",\n 'dashboard.newSessionDescription': \"Start another session in this worktree\",\n 'dashboard.instructions': \"Worktree / Main Instructions\",\n 'dashboard.edit': \"Edit\",\n 'dashboard.instructionsDescription': \"A place for shared guidance for this Worktree or Main Workspace.\",\n 'dashboard.noInstructions': \"No instructions yet\",\n 'dashboard.instructionsHint': \"Up to 32,000 characters. Saved instructions enter the next model request for Sessions using this Worktree or Main Workspace as <system-reminder>. Clear and save to disable.\",\n 'dashboard.noSessions': \"No visible sessions in this worktree.\",\n 'dashboard.viewSessions': \"View all sessions\",\n 'dashboard.status': \"Worktree Status\",\n 'dashboard.statusHint': \"Availability comes from existing checks; after you choose a branch baseline, Git & Changes shows later commits, while the status facts separate committed and uncommitted line counts.\",\n 'dashboard.health': \"Availability\",\n 'dashboard.branch': \"Current branch\",\n 'dashboard.branchUnavailable': 'Current branch unavailable',\n 'dashboard.aheadBehind': \"Ahead / Behind\",\n 'dashboard.committedChanges': \"Committed changes\",\n 'dashboard.workingTree': \"Uncommitted changes\",\n 'dashboard.viewDetails': \"View details\",\n 'dashboard.derived': \"Derived Worktrees\",\n 'dashboard.childrenHint': \"Parent and child relationships are not connected yet.\",\n 'dashboard.viewChildren': \"View all children\",\n 'dashboard.quickActions': \"Quick Actions\",\n 'dashboard.action.terminal': \"Open in Terminal\",\n 'dashboard.action.diff': \"View Git Diff\",\n 'dashboard.action.pullRequest': \"Create Pull Request\",\n 'dashboard.action.tests': \"Run Tests\",\n 'dashboard.action.sync': \"Sync with Base\",\n 'dashboard.action.archive': \"Archive Worktree\",\n 'dashboard.hint.git': \"View commits, committed and uncommitted line totals, changed files, and unified diffs relative to the selected branch baseline.\",\n 'dashboard.hint.children': \"Derived worktrees and their relationships will appear here.\",\n 'dashboard.hint.settings': \"Worktree instructions and preferences will appear here. No changes are saved yet.\",\n 'dashboard.mvpHint': \"MVP · Sessions, Worktree creation, archive, Git changes, and VS Code are connected. Other actions marked Coming soon are unavailable.\",\n 'mode.open': 'Open Worktree mode',\n 'mode.exit': 'Exit Worktree mode',\n 'mode.label': 'Worktree',\n 'mode.navigation': 'Worktree navigation',\n 'context.main': 'Current branch: {name}',\n 'context.worktree': 'Worktree: {name}',\n 'workspace.rename': 'Rename',\n 'workspace.delete': 'Delete',\n 'workspace.expand': 'Expand {name}',\n 'workspace.collapse': 'Collapse {name}',\n 'workspace.collapseAll': 'Collapse All',\n 'workspace.options': 'Workspace options for {name}',\n 'workspace.addWorktree': 'Add Worktree to {name}',\n 'workspace.add': 'Add Workspace',\n 'workspace.search': 'Search Workspaces and Sessions',\n 'search.clear': 'Clear search',\n 'workspace.noMatches': 'No matching Workspaces',\n 'workspace.renameTitle': 'Rename Workspace',\n 'workspace.name': 'Workspace name',\n 'workspace.duplicate': 'A Workspace with this name already exists.',\n 'workspace.deleteTitle': 'Delete Workspace',\n 'workspace.deleteDescription': 'Delete {name}? This removes only the DSH Workspace registration. The directory, Sessions, and Git Worktrees will be retained.',\n 'worktree.title': 'Worktrees',\n 'worktree.main': 'Local',\n 'worktree.mainWithBranch': 'Local ({branch})',\n 'worktree.detached': 'Detached Worktree',\n 'worktree.repair': 'Worktree needs repair',\n 'worktree.repairGuidance': 'Check the directory, .git entry, and Git Worktree registration at this path. Restore a moved directory to its original path. If it still exists but Git links are broken, run git worktree repair there and refresh. If it was deleted and is no longer needed, archive it, then use Clean Disk to reconcile removal or Remove from Management.',\n 'worktree.recoveryGuidance': 'A previous operation is incomplete, or the directory and repository identity could not be verified. Check that the original directory and repository are accessible, then choose Retry Recovery from this Worktree menu. If it still fails, keep the error details for diagnosis; do not delete the plugin index manually.',\n 'worktree.branchDriftGuidance': 'The current branch differs from the recorded branch. If intentional, choose Adopt Current Branch from this Worktree menu; otherwise switch back in Git and refresh. Session bindings and working directories are preserved.',\n 'worktree.detachedGuidance': 'This directory has a detached HEAD. Switch to the intended local branch in Git and refresh, then choose Adopt Current Branch if it differs from the recorded branch.',\n 'notice.details': 'Notification details and recovery',\n 'worktree.recovery': 'Worktree requires recovery',\n 'worktree.ready': 'Active Worktree ready',\n 'worktree.branchDrift': 'Git branch changed',\n 'worktree.detachedHead': 'Detached HEAD',\n 'worktree.adoptBranch': 'Adopt current branch',\n 'worktree.retryRecovery': 'Retry recovery',\n 'worktree.adoptDescription': 'Update the recorded branch from “{previous}” to “{current}”? Only the plugin index changes; Session bindings and disk files are preserved.',\n 'worktree.adoptBeforeClean': 'Adopt the current branch first; for detached HEAD, check out a branch in Git first.',\n 'worktree.cleaned': 'Worktree removed',\n 'worktree.archivedGroup': 'Archived',\n 'worktree.cleanDisk': 'Clean Up Disk',\n 'worktree.cleanDiskTitle': 'Clean Up Worktree Disk',\n 'worktree.cleanDiskDescription': 'Delete {name} ({path}) from disk? This operation cannot be undone. The plugin does not check whether Sessions or subagents are running. Confirm that all tasks using this directory have stopped; otherwise deletion may cause task failures or data loss. If the directory or .git is already absent, only the Worktree removal status is synchronized; remaining files are not deleted. Linked Sessions and history are preserved.',\n 'worktree.forget': 'Remove from Management',\n 'worktree.forgetTitle': 'Remove from Management',\n 'worktree.forgetDescription': 'Remove {name} from Worktree plugin management? Disk directories and Sessions in DSH will be retained.',\n 'worktree.expand': 'Expand {name}',\n 'worktree.collapse': 'Collapse {name}',\n 'worktree.options': 'Worktree options for {name}',\n 'worktree.copyPath': 'Copy path',\n 'worktree.createNew': 'Create new Worktree',\n 'worktree.archive': 'Archive Worktree',\n 'worktree.archiveDescription': 'Archive {name}? It moves to the Archived group. Disk files, Session bindings, and working directories are preserved; existing Sessions remain usable. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.unarchive': 'Unarchive Worktree',\n 'worktree.unarchiveDisabledRepair': 'Cannot unarchive because directory or Git registration is abnormal',\n 'worktree.archiveExternalDescription': 'Archive {name}? It moves to the Archived group. The external directory, Session bindings, and working directories are preserved; existing Sessions remain usable. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.remove': 'Archive Worktree',\n 'worktree.removeDescription': 'Archive {name}? The directory, Session bindings, and working directories are preserved. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.removeExternalDescription': 'Archive {name}? The external directory, Session bindings, and working directories are preserved. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.addSession': 'Add Session to {name}',\n 'worktree.noWorktrees': 'No Worktrees',\n 'worktree.createTitle': 'New Worktree',\n 'worktree.createDescription': '{name} · the Worktree path is managed by DSH.',\n 'worktree.tabCreate': 'Create',\n 'worktree.tabImport': 'Import',\n 'worktree.importDescription': 'Register an existing Worktree for {name}. Registration and archiving preserve the directory; only a separately confirmed Clean Disk action deletes it.',\n 'worktree.importLoading': 'Finding importable Worktrees…',\n 'worktree.importEmpty': 'No importable Worktrees found.',\n 'worktree.importPlaceholder': 'Select a Worktree to import',\n 'worktree.importSelected': 'Selected',\n 'worktree.baseBranch': 'Worktree base branch',\n 'worktree.noLocalBranch': 'No local branch',\n 'worktree.noBranches': 'No local branches found in this Workspace.',\n 'worktree.setup.gitNotInstalled': 'Git is not installed or is not available on PATH. Install Git, restart DSH, and retry.',\n 'worktree.setup.noRepository': 'This Workspace is not a Git repository. Run these commands in the Workspace directory:',\n 'worktree.setup.noInitialCommit': 'This Git repository has no initial commit. Run these commands first:',\n 'worktree.setup.noLocalBranch': 'This Git repository has no local branch. Create one first:',\n 'worktree.setup.commands': 'Copyable commands',\n 'worktree.name': 'Worktree name',\n 'worktree.create': 'Create Worktree',\n 'worktree.import': 'Import Worktree',\n 'session.options': 'Session options for {name}',\n 'session.new': 'New Session',\n 'session.rename': 'Rename session',\n 'session.fork': 'Fork session',\n 'session.archive': 'Archive session',\n 'session.copyId': 'Copy session ID',\n 'session.expandMore': 'Expand {count} more',\n 'session.collapse': 'Collapse',\n 'session.name': 'Session name',\n 'session.status.running': 'Running',\n 'session.status.subagentsRunning.one': '{n} subagent running',\n 'session.status.subagentsRunning.other': '{n} subagents running',\n 'session.status.idle': 'Idle',\n 'session.status.waitingApproval': 'Waiting for approval',\n 'session.status.planReview': 'Plan awaiting review',\n 'session.status.waitingAnswer': 'Waiting for answer',\n 'session.status.completed': 'Completed',\n copy: 'Copy',\n 'hover.copied': 'Copied',\n 'session.time.now': 'now',\n 'session.time.minutes': '{n}min',\n 'session.time.hours': '{n}h',\n 'session.time.days': '{n}d',\n 'session.time.months': '{n}mo',\n 'session.time.years': '{n}y',\n 'session.time.ago': '{t} ago',\n 'dialog.close': 'Close',\n 'dialog.closeBaseline': 'Close Edit baseline dialog',\n 'dialog.closeWorkspaceRename': 'Close Rename Workspace dialog',\n 'dialog.closeWorkspaceDelete': 'Close Delete Workspace dialog',\n 'dialog.closeWorktreeCreate': 'Close Create Worktree dialog',\n 'dialog.closeWorktreeArchive': 'Close Archive Worktree dialog',\n 'dialog.closeWorktreeRemove': 'Close Archive Worktree dialog',\n 'dialog.closeWorktreeCleanDisk': 'Close Clean Up Worktree Disk dialog',\n 'dialog.closeWorktreeForget': 'Close Remove from Management dialog',\n 'dialog.cleanDisk': 'Clean Up Disk',\n 'dialog.forget': 'Remove from Management',\n 'dialog.cancel': 'Cancel',\n 'dialog.rename': 'Rename',\n 'dialog.delete': 'Delete',\n 'action.retry': 'Retry',\n 'action.retryBinding': 'Retry Binding',\n 'action.openCreatedSession': 'Open Created Session',\n 'permission.fallbackWorkspaceWrite': 'The Worktree Full Access preset is unavailable; fell back to workspace-write with approval prompts enabled.',\n 'permission.userRestricted': 'The restriction selected in DSH’s native permission UI was preserved; this Worktree Session was not elevated.',\n 'permission.unverified': 'The Worktree Session permission service could not be verified; the Session was retained, but Full Access is not confirmed.',\n 'permission.unavailable': 'The Worktree Session permission state is temporarily unavailable; retry the request.',\n 'permission.fullAccessTitle': 'Enable Worktree Full access?',\n 'permission.fullAccessDescription': 'Worktree Full access lets this Session access linked Git metadata and Worktree files outside the Session directory. It disables filesystem confinement for this Session while keeping approval prompts enabled; network and process policy are unchanged. Target Worktree: {cwd}',\n 'permission.fullAccessAcknowledge': 'I understand the risks and want to continue',\n 'permission.fullAccessEnable': 'Enable Worktree Full access',\n 'status.loading': 'Loading Workspaces…',\n 'error.worktreeDataUnavailable': 'Worktree data is unavailable. Retry the request.',\n 'error.gitNotInstalled': 'Git is not installed or unavailable. Install Git and retry.',\n 'error.connectionDisposed': 'Worktree connection is disposed; reload the plugin and retry.',\n 'error.connectionFailed': 'Worktree endpoint {endpoint} failed; retryable connection error: {reason}',\n 'error.invalidResult': 'Worktree endpoint {endpoint} returned an invalid result; retry the request.',\n 'error.workspaceOrderingUnavailable': 'Workspace ordering is unavailable; retry after reconnecting.',\n 'error.sessionOrderingUnavailable': 'Session ordering is unavailable; retry after reconnecting.',\n 'error.worktreeOrderingUnavailable': 'Worktree ordering is unavailable; retry after reconnecting.',\n 'error.worktreeCreatedSessionUnavailable': 'Worktree created, but Session creation is unavailable; retry after reconnecting.',\n 'error.sessionCreationUnavailable': 'Session creation is unavailable; retry after reconnecting.',\n 'error.worktreeRecordMissing': 'Worktree registration returned no Worktree record; retry the request.',\n 'error.worktreeImportInvalid': 'This Worktree cannot be imported. Choose a valid absolute path in this Workspace.',\n 'error.worktreeAlreadyManaged': 'This Worktree is already managed by the plugin.',\n 'error.worktreeMutationBusy': 'Another DSH instance is mutating Worktree state; retry shortly.',\n 'error.worktreeStateConflict': 'The Worktree state changed; refresh and retry the request.',\n 'error.worktreeRecoveryRequired': 'Worktree state requires recovery; resolve it before retrying destructive actions.',\n 'error.worktreeIdentityChanged': 'The Worktree or repository identity changed; recovery is required before acting.',\n 'error.worktreeSessionBusy': 'Linked Session activity is still running; operation rejected.',\n 'error.worktreeActivityUnavailable': 'Unable to verify linked Session activity; operation rejected.',\n 'error.worktreeRegistrationSessionUnavailable': 'The Worktree was registered, but Session creation is unavailable; retry after reconnecting.',\n 'error.workspaceRenameUnavailable': 'Workspace rename is unavailable; retry after reconnecting.',\n 'error.workspaceDeleteUnavailable': 'Workspace delete is unavailable; retry after reconnecting.',\n 'error.sessionRenameUnavailable': 'Session rename is unavailable; retry after reconnecting.',\n 'error.sessionBindingFailed': 'Session {sessionId} was created, but Worktree binding failed: {reason}',\n 'error.sessionAlreadyBound': 'The Session is already bound to another Worktree; no new Session was created.',\n 'error.worktreePermissionConfirmationRequired': 'The Session and binding were retained; confirm Full Access and retry. The Session was not opened.',\n 'error.worktreePermissionFailed': 'Worktree Session permission setup failed; retryable error: {reason}',\n 'error.sessionListNotReady': 'The Session list is not ready yet; retry the request.',\n 'error.sessionFactsIncomplete': 'Session facts are incomplete; retry the request.',\n 'error.worktreeSessionRepairRequired': 'The current Worktree Session binding needs repair; retry the request.',\n 'error.worktreeSessionUnavailable': 'The current Worktree is unavailable; retry the request.',\n 'error.sessionArchived': 'This Session is archived and cannot be retried for binding.',\n 'branch.current': ' (current)',\n 'branch.checkedOut': ' (checked out)',\n};\n//# sourceMappingURL=locales.js.map","/** The one logical channel shared by the DSH Connection and Typert Gateway. */\nexport const WORKTREE_CONNECTION_CHANNEL = '/api';\n/**\n * Canonical Worktree endpoints owned by this adapter. Keeping the table here makes\n * the browser call surface auditable without making React know wire names.\n */\nexport const WORKTREE_CONNECTION_ENDPOINTS = Object.freeze({\n listWorktrees: 'worktreeManager/listWorktrees',\n listWorktreeCommits: 'worktreeManager/listWorktreeCommits',\n listWorktreeCommitFiles: 'worktreeManager/listWorktreeCommitFiles',\n getWorktreeCommitFileDiff: 'worktreeManager/getWorktreeCommitFileDiff',\n listImportCandidates: 'worktreeManager/listImportCandidates',\n listBranches: 'worktreeManager/listBranches',\n createWorktree: 'worktreeManager/createWorktree',\n importWorktree: 'worktreeManager/importWorktree',\n removeWorktree: 'worktreeManager/removeWorktree',\n unarchiveWorktree: 'worktreeManager/unarchiveWorktree',\n cleanWorktree: 'worktreeManager/cleanWorktree',\n adoptWorktreeBranch: 'worktreeManager/adoptWorktreeBranch',\n recoverWorktrees: 'worktreeManager/recoverWorktrees',\n forgetWorktree: 'worktreeManager/forgetWorktree',\n insertWorktreeBefore: 'worktreeManager/insertWorktreeBefore',\n getWorktreeInstructions: 'worktreeManager/getWorktreeInstructions',\n updateWorktreeInstructions: 'worktreeManager/updateWorktreeInstructions',\n updateWorktreeBaseBranch: 'worktreeManager/updateWorktreeBaseBranch',\n listBindings: 'worktreeManager/listBindings',\n bindSession: 'worktreeManager/bindSession',\n ensureWorktreePermission: 'worktreeManager/ensureWorktreePermission',\n normalizeDetachedWorktreePermissions: 'worktreeManager/normalizeDetachedWorktreePermissions',\n});\n/** Browser-safe error shared by transport, Gateway, endpoint and domain failures. */\nexport class WorktreeConnectionError extends Error {\n code;\n details;\n retryable;\n constructor(options) {\n super(options.message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = 'WorktreeConnectionError';\n this.code = options.code;\n this.details = Object.freeze({ ...(options.details ?? {}) });\n this.retryable = options.retryable;\n }\n}\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction isWorktreeError(value) {\n return (isRecord(value) &&\n typeof value.code === 'string' &&\n typeof value.message === 'string' &&\n isRecord(value.details));\n}\nfunction isWorktreeRemoteResult(value) {\n if (!isRecord(value) || typeof value.ok !== 'boolean')\n return false;\n return value.ok || (isWorktreeError(value.error) && value.error.details !== undefined);\n}\nfunction disposedError() {\n return new WorktreeConnectionError({\n code: 'CLIENT_DISPOSED',\n message: '',\n details: {},\n retryable: false,\n });\n}\nfunction connectionFailure(endpoint, error, code = 'CONNECTION_CALL_FAILED') {\n const message = error instanceof Error ? error.message : String(error);\n return new WorktreeConnectionError({\n code,\n message,\n details: { endpoint },\n retryable: true,\n cause: error,\n });\n}\nfunction gatewayFailure(endpoint, result) {\n const rawDetails = isRecord(result.error.details) ? result.error.details : {};\n throw new WorktreeConnectionError({\n code: result.error.code,\n message: result.error.message,\n details: { endpoint, ...rawDetails },\n retryable: true,\n });\n}\nfunction invalidResult(endpoint) {\n return new WorktreeConnectionError({\n code: 'WORKTREE_RPC_INVALID_RESULT',\n message: '',\n details: { endpoint },\n retryable: true,\n });\n}\nfunction unwrap(endpoint, result) {\n if (!result.ok)\n gatewayFailure(endpoint, result);\n if (!isWorktreeRemoteResult(result.value))\n throw invalidResult(endpoint);\n if (!result.value.ok) {\n throw new WorktreeConnectionError({\n code: result.value.error.code,\n message: result.value.error.message,\n details: result.value.error.details,\n retryable: false,\n });\n }\n return result.value.value;\n}\n/**\n * Adapt the shared DSH Connection RPC into the existing WorktreeManager contract.\n * All wire details and request cancellation live behind this one deep module.\n */\nexport function createWorktreeConnectionAdapter(rpc) {\n const inFlight = new Set();\n let disposed = false;\n async function invoke(method, input) {\n if (disposed)\n throw disposedError();\n const controller = new AbortController();\n inFlight.add(controller);\n const endpoint = WORKTREE_CONNECTION_ENDPOINTS[method];\n try {\n let result;\n try {\n result = await rpc.call(WORKTREE_CONNECTION_CHANNEL, endpoint, { args: { input } }, controller.signal);\n }\n catch (error) {\n if (disposed && controller.signal.aborted)\n throw disposedError();\n throw connectionFailure(endpoint, error);\n }\n return unwrap(endpoint, result);\n }\n finally {\n inFlight.delete(controller);\n }\n }\n return {\n listWorktrees: (input) => invoke('listWorktrees', input),\n listWorktreeCommits: (input) => invoke('listWorktreeCommits', input),\n listWorktreeCommitFiles: (input) => invoke('listWorktreeCommitFiles', input),\n getWorktreeCommitFileDiff: (input) => invoke('getWorktreeCommitFileDiff', input),\n listImportCandidates: (input) => invoke('listImportCandidates', input),\n listBranches: (input) => invoke('listBranches', input),\n createWorktree: (input) => invoke('createWorktree', input),\n importWorktree: (input) => invoke('importWorktree', input),\n async removeWorktree(input) {\n await invoke('removeWorktree', input);\n },\n async unarchiveWorktree(input) {\n await invoke('unarchiveWorktree', input);\n },\n async adoptWorktreeBranch(input) { await invoke('adoptWorktreeBranch', input); },\n async recoverWorktrees(input) { await invoke('recoverWorktrees', input); },\n async cleanWorktree(input) {\n await invoke('cleanWorktree', input);\n },\n async forgetWorktree(input) {\n await invoke('forgetWorktree', input);\n },\n async insertWorktreeBefore(input) {\n return invoke('insertWorktreeBefore', input);\n },\n async getWorktreeInstructions(input) {\n return invoke('getWorktreeInstructions', input);\n },\n async updateWorktreeInstructions(input) {\n return invoke('updateWorktreeInstructions', input);\n },\n async updateWorktreeBaseBranch(input) {\n return invoke('updateWorktreeBaseBranch', input);\n },\n listBindings: (input) => invoke('listBindings', input),\n bindSession: (input) => invoke('bindSession', input),\n ensureWorktreePermission: (input) => invoke('ensureWorktreePermission', input),\n normalizeDetachedWorktreePermissions: (input) => invoke('normalizeDetachedWorktreePermissions', input),\n dispose() {\n if (disposed)\n return;\n disposed = true;\n for (const controller of inFlight)\n controller.abort();\n inFlight.clear();\n },\n };\n}\n//# sourceMappingURL=worktree-connection.js.map","import { createElement } from 'react';\n/** Resolve a legacy size-named export or the equivalent DSH 1.7 weighted export. */\nexport function createDshIconAlias(exports, legacyName, currentName) {\n return function DshIconAlias(props) {\n const candidate = exports[legacyName] ?? exports[currentName];\n if (typeof candidate !== 'function') {\n throw new Error(`Missing DSH icon export: ${legacyName} or ${currentName}`);\n }\n return createElement(candidate, props);\n };\n}\n//# sourceMappingURL=dsh-icon-compat.js.map","import * as primitives from '@deepseek-ai/dsh-client-ui-primitives';\nimport { createDshIconAlias } from './dsh-icon-compat.js';\nconst exports = primitives;\nexport const IconArchiveOutline20 = createDshIconAlias(exports, 'IconArchiveOutline20', 'IconArchiveOutlineRegular');\nexport const IconBranchOutline16 = createDshIconAlias(exports, 'IconBranchOutline16', 'IconBranchOutlineRegular');\nexport const IconChevronDownOutline14 = createDshIconAlias(exports, 'IconChevronDownOutline14', 'IconChevronDownOutlineRegular');\nexport const IconChevronRightOutline14 = createDshIconAlias(exports, 'IconChevronRightOutline14', 'IconChevronRightOutlineRegular');\nexport const IconCheckOutline16 = createDshIconAlias(exports, 'IconCheckOutline16', 'IconCheckOutlineRegular');\nexport const IconCloseFill14 = createDshIconAlias(exports, 'IconCloseFill14', 'IconCloseFillRegular');\nexport const IconCloseOutline16 = createDshIconAlias(exports, 'IconCloseOutline16', 'IconCloseOutlineRegular');\nexport const IconCopyOutline16 = createDshIconAlias(exports, 'IconCopyOutline16', 'IconCopyOutlineRegular');\nexport const IconEditOutline16 = createDshIconAlias(exports, 'IconEditOutline16', 'IconEditOutlineRegular');\nexport const IconEllipsisOutline16 = createDshIconAlias(exports, 'IconEllipsisOutline16', 'IconEllipsisOutlineRegular');\nexport const IconFolderClose16 = createDshIconAlias(exports, 'IconFolderClose16', 'IconFolderCloseRegular');\nexport const IconFolderOpen16 = createDshIconAlias(exports, 'IconFolderOpen16', 'IconFolderOpenRegular');\nexport const IconPanelLeftOutline16 = createDshIconAlias(exports, 'IconPanelLeftOutline16', 'IconPanelLeftOutlineRegular');\nexport const IconPlusOutline16 = createDshIconAlias(exports, 'IconPlusOutline16', 'IconPlusOutlineRegular');\nexport const IconProjectAddOutline16 = createDshIconAlias(exports, 'IconProjectAddOutline16', 'IconProjectAddOutlineRegular');\nexport const IconRefreshOutline16 = createDshIconAlias(exports, 'IconRefreshOutline16', 'IconRefreshOutlineRegular');\nexport const IconRightUpOutline16 = createDshIconAlias(exports, 'IconRightUpOutline16', 'IconRightUpOutlineRegular');\nexport const IconSearchOutline16 = createDshIconAlias(exports, 'IconSearchOutline16', 'IconSearchOutlineRegular');\nexport const IconTrashOutline16 = createDshIconAlias(exports, 'IconTrashOutline16', 'IconTrashOutlineRegular');\n//# sourceMappingURL=dsh-icons.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { HoverCard } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconBranchOutline16 } from '../dsh-icons.js';\nimport styles from './worktree-context.css';\nfunction WorktreeContextLabel({ value, t, }) {\n if (value.kind === 'none')\n return null;\n const ariaLabel = value.kind === 'main'\n ? t('context.main', { name: value.label })\n : t('context.worktree', { name: value.label });\n return (_jsx(HoverCard, { anchor: _jsxs(\"span\", { className: styles.headerContext, title: value.label, \"aria-label\": ariaLabel, children: [_jsx(IconBranchOutline16, { size: 14, className: styles.contextIcon }), _jsx(\"span\", { className: styles.contextLabel, children: value.label })] }), content: _jsx(\"div\", { className: styles.contextHoverTitle, children: value.label }), openDelayMs: 500, copyLabel: t('copy'), copiedLabel: t('hover.copied') }));\n}\n/** Render the current branch or active Worktree branch beside the Session title. */\nexport function WorktreeHeaderContext({ sessionId, useWorktreeContext, t, }) {\n const state = useWorktreeContext((snapshot) => snapshot);\n if (state.sessionId !== sessionId)\n return null;\n return _jsx(WorktreeContextLabel, { value: state.value, t: t });\n}\n//# sourceMappingURL=WorktreeContext.js.map","let globalSetViewMode;\nexport function registerViewModeSetter(setter) {\n globalSetViewMode = setter;\n}\nexport function getViewModeSetter() {\n return globalSetViewMode;\n}\nexport function switchViewMode(mode) {\n globalSetViewMode?.(mode);\n}\n//# sourceMappingURL=view-mode-dispatch.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect } from 'react';\nimport { IconBranchOutline16 } from '../dsh-icons.js';\nimport { registerViewModeSetter } from './view-mode-dispatch.js';\nimport styles from '../worktree.css';\n/** Footer action that enters/exits the peer Worktree navigation mode. */\nexport function WorktreeModeAction({ wide, useStore, actions, t, available, }) {\n useEffect(() => {\n registerViewModeSetter(actions.setViewMode);\n return () => {\n registerViewModeSetter(undefined);\n };\n }, [actions.setViewMode]);\n if (!available)\n return null;\n const mode = useStore((state) => state.viewMode);\n const active = mode === 'worktree';\n return (_jsxs(\"button\", { type: \"button\", className: styles.action, \"data-worktree-mode-action\": true, \"data-active\": active || undefined, \"data-collapsed\": !wide || undefined, \"aria-label\": active ? t('mode.exit') : t('mode.open'), \"aria-pressed\": active, title: active ? t('mode.exit') : t('mode.label'), onClick: () => {\n actions.setViewMode(active ? 'workspace-session' : 'worktree');\n }, children: [_jsx(IconBranchOutline16, { size: wide ? 16 : 18 }), wide && _jsx(\"span\", { className: styles.actionLabel, children: t('mode.label') })] }));\n}\n//# sourceMappingURL=WorktreeModeAction.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/** 4-quadrant layout glyph representing dashboard / overview. */\nexport function IconDashboard({ size = 16, className, }) {\n return (_jsxs(\"svg\", { width: size, height: size, viewBox: \"0 0 16 16\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"1.5\", className: className, \"aria-hidden\": \"true\", children: [_jsx(\"rect\", { x: \"2\", y: \"2\", width: \"5\", height: \"5\", rx: \"1\" }), _jsx(\"rect\", { x: \"9\", y: \"2\", width: \"5\", height: \"5\", rx: \"1\" }), _jsx(\"rect\", { x: \"2\", y: \"9\", width: \"5\", height: \"5\", rx: \"1\" }), _jsx(\"rect\", { x: \"9\", y: \"9\", width: \"5\", height: \"5\", rx: \"1\" })] }));\n}\n//# sourceMappingURL=dashboard-icon.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Tooltip } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconDashboard } from './dashboard-icon.js';\nimport styles from './dashboard-header-action.css';\n/**\n * Render a quick Dashboard action for the current Session's resolved context.\n * The entry only appears after the shared context read is ready and points at\n * the same Session that owns the native header.\n */\nexport function DashboardHeaderAction({ sessionId, useWorktreeContext, openDashboard, t, }) {\n const state = useWorktreeContext((snapshot) => snapshot);\n if (state.status !== 'ready' || state.sessionId !== sessionId || state.value.kind === 'none') {\n return null;\n }\n return (_jsx(Tooltip, { label: t('dashboard.open'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.headerDashboardButton, \"aria-label\": t('dashboard.open'), onClick: () => {\n openDashboard(String(sessionId));\n }, children: _jsx(IconDashboard, { size: 16 }) }) }));\n}\n//# sourceMappingURL=DashboardHeaderAction.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback, useLayoutEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { HoverCard } from '@deepseek-ai/dsh-client-ui-primitives';\nimport styles from './worktree-context.css';\nfunction labelFor(state) {\n if (state.status !== 'ready' ||\n state.workspaceTitle === undefined ||\n state.value.kind === 'none') {\n return undefined;\n }\n return `${state.workspaceTitle} (${state.value.label})`;\n}\nfunction elementWithClassSuffix(root, suffix) {\n const candidates = root.querySelectorAll('[class]');\n for (const candidate of candidates) {\n if ([...candidate.classList].some((token) => token === suffix || token.endsWith(`_${suffix}`))) {\n return candidate;\n }\n }\n return null;\n}\nfunction headlineElement(root) {\n // Anchor to the visible end of the native title line. The headline wrapper\n // spans the whole content column, so using it would place the suffix at the\n // far edge instead of immediately after the title and preview badge.\n return elementWithClassSuffix(root, 'previewBadge')\n ?? elementWithClassSuffix(root, 'headlineText')\n ?? elementWithClassSuffix(root, 'headline');\n}\nfunction positionedAncestor(element) {\n if (element.offsetParent instanceof HTMLElement)\n return element.offsetParent;\n for (let ancestor = element.parentElement; ancestor !== null; ancestor = ancestor.parentElement) {\n if (getComputedStyle(ancestor).position !== 'static')\n return ancestor;\n }\n return null;\n}\nfunction overlayFor(element) {\n const host = element.closest('[data-worktree-hero-host]');\n return positionedAncestor(host ?? element);\n}\nfunction measurePlacement(element) {\n const hero = document.querySelector('[data-phase=\"hero\"]');\n // The Slot renderer inserts a display: contents wrapper before the actual\n // shell overlay layer, so the direct parent is not the containing block.\n const overlay = overlayFor(element);\n const headline = hero === null ? null : headlineElement(hero);\n if (hero === null || headline === null || overlay === null)\n return null;\n const anchor = headline.getBoundingClientRect();\n const frame = overlay.getBoundingClientRect();\n const width = element.getBoundingClientRect().width;\n const afterHeadlineLeft = anchor.right - frame.left + 8;\n const fitsAfterHeadline = afterHeadlineLeft + width <= frame.width - 8;\n return {\n left: fitsAfterHeadline\n ? afterHeadlineLeft\n : Math.max(8, frame.width - width - 8),\n top: fitsAfterHeadline\n ? Math.max(8, anchor.top - frame.top + (anchor.height - 22) / 2)\n : Math.max(8, anchor.bottom - frame.top + 8),\n };\n}\nfunction contextAriaLabel(state, t) {\n if (state.value.kind === 'main')\n return t('context.main', { name: state.value.label });\n if (state.value.kind === 'worktree')\n return t('context.worktree', { name: state.value.label });\n return undefined;\n}\nfunction heroContainer() {\n if (typeof document === 'undefined')\n return null;\n const el = document.querySelector('[data-phase=\"hero\"]');\n return el && el.isConnected ? el : null;\n}\n/**\n * Browser-local Hero suffix. Portaled directly into the native Hero container\n * so its stacking context stays within the conversation column instead of\n * floating above overlays, menus, and dropdowns.\n */\nexport function WorktreeHeroContext({ useWorktreeContext, t, }) {\n const state = useWorktreeContext((snapshot) => snapshot);\n const label = labelFor(state);\n const [placement, setPlacement] = useState(null);\n const [heroTarget, setHeroTarget] = useState(() => heroContainer());\n const measure = useCallback((element) => {\n if (element === null) {\n setPlacement(null);\n return;\n }\n setPlacement(measurePlacement(element));\n }, []);\n useLayoutEffect(() => {\n if (typeof document === 'undefined' || typeof window === 'undefined')\n return undefined;\n let frameRequest;\n const schedule = () => {\n if (frameRequest !== undefined)\n window.cancelAnimationFrame(frameRequest);\n frameRequest = window.requestAnimationFrame(() => {\n frameRequest = undefined;\n const currentHero = heroContainer();\n setHeroTarget((prev) => (prev === currentHero ? prev : currentHero));\n const element = document.querySelector('[data-worktree-hero-context]');\n if (element !== null) {\n measure(element);\n }\n else {\n setPlacement(null);\n }\n });\n };\n const mutationObserver = typeof MutationObserver === 'undefined'\n ? undefined\n : new MutationObserver(schedule);\n mutationObserver?.observe(document.body, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['class', 'data-phase'],\n });\n const element = document.querySelector('[data-worktree-hero-context]');\n const observedAncestor = element !== null ? (overlayFor(element) ?? element) : (heroTarget ?? document.body);\n const resizeObserver = typeof ResizeObserver === 'undefined'\n ? undefined\n : new ResizeObserver(schedule);\n if (observedAncestor !== null) {\n resizeObserver?.observe(observedAncestor);\n }\n window.addEventListener('resize', schedule);\n schedule();\n return () => {\n if (frameRequest !== undefined)\n window.cancelAnimationFrame(frameRequest);\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n window.removeEventListener('resize', schedule);\n };\n }, [label, measure, heroTarget]);\n const ariaLabel = contextAriaLabel(state, t);\n if (label === undefined || heroTarget === null)\n return null;\n return createPortal(_jsx(\"span\", { className: styles.heroContextHost, \"data-worktree-hero-host\": true, style: placement === null ? { visibility: 'hidden' } : {\n left: `${placement.left}px`,\n top: `${placement.top}px`,\n }, children: _jsx(HoverCard, { anchor: (_jsx(\"span\", { ref: measure, className: styles.heroContext, \"data-worktree-hero-context\": true, \"aria-label\": ariaLabel, title: label, children: label })), content: _jsx(\"div\", { className: styles.contextHoverTitle, children: label }), openDelayMs: 500, copyLabel: t('copy'), copiedLabel: t('hover.copied') }) }), heroTarget);\n}\n//# sourceMappingURL=WorktreeHeroContext.js.map","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { RiskConfirmation } from '@deepseek-ai/dsh-client-ui-primitives';\nexport function AccessConfirmation({ source, props }) {\n const { fullAccessConfirmationSnapshot, fullAccessAcknowledged, setFullAccessAcknowledged } = source;\n const { t, fullAccessConfirmation } = props;\n return (_jsx(_Fragment, { children: _jsx(RiskConfirmation, { open: fullAccessConfirmationSnapshot !== undefined, title: t('permission.fullAccessTitle'), description: fullAccessConfirmationSnapshot === undefined\n ? ''\n : t('permission.fullAccessDescription', {\n cwd: fullAccessConfirmationSnapshot.cwd,\n }), acknowledgeLabel: t('permission.fullAccessAcknowledge'), cancelLabel: t('dialog.cancel'), closeLabel: t('dialog.close'), confirmLabel: t('permission.fullAccessEnable'), acknowledged: fullAccessAcknowledged, onAcknowledgedChange: setFullAccessAcknowledged, onCancel: () => {\n setFullAccessAcknowledged(false);\n fullAccessConfirmation?.resolve(false);\n }, onConfirm: () => {\n setFullAccessAcknowledged(false);\n fullAccessConfirmation?.resolve(true);\n } }) }));\n}\n//# sourceMappingURL=AccessConfirmation.js.map","function detail(error, name) {\n const value = error.details?.[name];\n return typeof value === 'string' ? value : '';\n}\nfunction reason(error, t) {\n return error.message.length > 0 ? error.message : t('error.worktreeDataUnavailable');\n}\nexport function formatWorktreePermissionNotice(result, t) {\n switch (result.status) {\n case 'fallback-workspace-write':\n return t('permission.fallbackWorkspaceWrite');\n case 'user-restricted':\n return t('permission.userRestricted');\n case 'unverified':\n return t('permission.unverified');\n default:\n return t('permission.unavailable');\n }\n}\nexport function formatWorktreeViewError(error, t) {\n switch (error.code) {\n case 'CLIENT_DISPOSED':\n return t('error.connectionDisposed');\n case 'CONNECTION_CALL_FAILED':\n return t('error.connectionFailed', {\n endpoint: detail(error, 'endpoint'),\n reason: reason(error, t),\n });\n case 'WORKTREE_RPC_INVALID_RESULT':\n return t('error.invalidResult', { endpoint: detail(error, 'endpoint') });\n case 'WORKSPACE_ORDER_UNAVAILABLE':\n return t('error.workspaceOrderingUnavailable');\n case 'SESSION_ORDER_UNAVAILABLE':\n return t('error.sessionOrderingUnavailable');\n case 'WORKTREE_ORDER_UNAVAILABLE':\n return t('error.worktreeOrderingUnavailable');\n case 'SESSION_CREATE_UNAVAILABLE':\n return t('error.sessionCreationUnavailable');\n case 'WORKTREE_CREATED_SESSION_UNAVAILABLE':\n return t('error.worktreeCreatedSessionUnavailable');\n case 'WORKTREE_RECORD_MISSING':\n return t('error.worktreeRecordMissing');\n case 'WORKTREE_IMPORT_INVALID':\n return t('error.worktreeImportInvalid');\n case 'WORKTREE_ALREADY_MANAGED':\n return t('error.worktreeAlreadyManaged');\n case 'WORKTREE_MUTATION_BUSY':\n return t('error.worktreeMutationBusy');\n case 'WORKTREE_STATE_CONFLICT':\n return t('error.worktreeStateConflict');\n case 'WORKTREE_RECOVERY_REQUIRED':\n return t('error.worktreeRecoveryRequired');\n case 'WORKTREE_IDENTITY_CHANGED':\n return t('error.worktreeIdentityChanged');\n case 'WORKTREE_REGISTRATION_SESSION_UNAVAILABLE':\n return t('error.worktreeRegistrationSessionUnavailable');\n case 'WORKSPACE_RENAME_UNAVAILABLE':\n return t('error.workspaceRenameUnavailable');\n case 'WORKSPACE_DELETE_UNAVAILABLE':\n return t('error.workspaceDeleteUnavailable');\n case 'SESSION_RENAME_UNAVAILABLE':\n return t('error.sessionRenameUnavailable');\n case 'SESSION_BINDING_FAILED':\n return t('error.sessionBindingFailed', {\n sessionId: detail(error, 'sessionId'),\n reason: reason(error, t),\n });\n case 'SESSION_ALREADY_BOUND':\n return t('error.sessionAlreadyBound');\n case 'WORKTREE_PERMISSION_CONFIRMATION_REQUIRED':\n return t('error.worktreePermissionConfirmationRequired');\n case 'WORKTREE_PERMISSION_FAILED':\n return t('error.worktreePermissionFailed', { reason: reason(error, t) });\n case 'SESSION_LIST_NOT_READY':\n return t('error.sessionListNotReady');\n case 'SESSION_FACTS_INCOMPLETE':\n return t('error.sessionFactsIncomplete');\n case 'WORKTREE_SESSION_REPAIR_REQUIRED':\n return t('error.worktreeSessionRepairRequired');\n case 'WORKTREE_SESSION_UNAVAILABLE':\n return t('error.worktreeSessionUnavailable');\n case 'SESSION_ARCHIVED':\n return t('error.sessionArchived');\n case 'GIT_NOT_INSTALLED':\n return t('error.gitNotInstalled');\n default:\n return error.message.length > 0 ? error.message : t('error.worktreeDataUnavailable');\n }\n}\n//# sourceMappingURL=worktree-error-copy.js.map","/** A DSH Session exists even when the external Worktree binding needs repair. */\nexport class WorktreeSessionBindingError extends Error {\n code;\n retryable;\n details;\n sessionId;\n cause;\n constructor(sessionId, cause) {\n const candidate = typeof cause === 'object' && cause !== null\n ? cause\n : undefined;\n const reason = cause instanceof Error\n ? cause.message\n : typeof candidate?.message === 'string'\n ? candidate.message\n : String(cause);\n super(reason);\n this.name = 'WorktreeSessionBindingError';\n const conflict = candidate?.code === 'SESSION_ALREADY_BOUND';\n this.code = conflict ? 'SESSION_ALREADY_BOUND' : 'SESSION_BINDING_FAILED';\n this.retryable = conflict ? false : candidate?.retryable !== false;\n this.details = typeof candidate?.details === 'object' && candidate.details !== null\n && !Array.isArray(candidate.details)\n ? candidate.details\n : {};\n this.sessionId = sessionId;\n this.cause = cause;\n }\n}\n/** A Session is retained after permission confirmation or permission setup needs retry. */\nexport class WorktreeSessionPermissionError extends Error {\n code;\n retryable = true;\n details;\n sessionId;\n createdSession;\n cause;\n constructor(sessionId, createdSession, cause) {\n const reason = cause instanceof Error ? cause.message : cause === undefined ? '' : String(cause);\n super(reason);\n this.name = 'WorktreeSessionPermissionError';\n this.code = cause === undefined\n ? 'WORKTREE_PERMISSION_CONFIRMATION_REQUIRED'\n : 'WORKTREE_PERMISSION_FAILED';\n this.details = { sessionId };\n this.sessionId = sessionId;\n this.createdSession = createdSession;\n this.cause = cause;\n }\n}\nfunction recordDetails(value) {\n if (typeof value !== 'object' || value === null || Array.isArray(value))\n return undefined;\n const details = value.details;\n if (typeof details !== 'object' || details === null || Array.isArray(details))\n return undefined;\n return details;\n}\n/** Convert any adapter/Gateway failure into renderable, retry-aware UI data. */\nexport function toWorktreeViewError(error) {\n if (typeof error === 'object' && error !== null) {\n const candidate = error;\n const details = error instanceof WorktreeSessionBindingError || error instanceof WorktreeSessionPermissionError\n ? { ...(recordDetails(error) ?? {}), sessionId: error.sessionId }\n : recordDetails(error);\n return {\n code: typeof candidate.code === 'string' ? candidate.code : 'WORKTREE_VIEW_FAILED',\n message: typeof candidate.message === 'string' ? candidate.message : '',\n retryable: candidate.retryable !== false,\n ...(details === undefined ? {} : { details }),\n };\n }\n return {\n code: 'WORKTREE_VIEW_FAILED',\n message: '',\n retryable: true,\n };\n}\n/** Keep ordering mutation/refresh failures reachable from the surface Retry control. */\nexport function toRetryableWorktreeOrderError(error) {\n return {\n ...toWorktreeViewError(error),\n retryable: true,\n };\n}\n//# sourceMappingURL=worktree-view-errors.js.map","import { WorktreeSessionBindingError } from './worktree-view-errors.js';\nfunction browserRandomUuid() {\n const randomUUID = globalThis.crypto?.randomUUID;\n if (typeof randomUUID === 'function')\n return randomUUID.call(globalThis.crypto);\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n/** Generate a short, editable default branch name without colliding with known local names. */\nexport function createDefaultWorktreeName(existingNames, randomUuid = browserRandomUuid) {\n const usedNames = new Set([...existingNames].map((name) => name.trim()));\n for (let attempt = 0; attempt < 100; attempt += 1) {\n const suffix = randomUuid().replace(/[^a-z0-9]/gi, '').slice(0, 8).toLowerCase();\n if (suffix.length < 8)\n continue;\n const candidate = `dsh/${suffix}`;\n if (!usedNames.has(candidate))\n return candidate;\n }\n throw new Error('Unable to generate an available default Worktree name.');\n}\n/** Generate the next available numeric sibling name for a selected Worktree. */\nexport function createNumberedWorktreeName(baseName, existingNames) {\n const normalizedBaseName = baseName.trim();\n const usedNames = new Set([...existingNames].map((name) => name.trim()));\n const numberedBase = normalizedBaseName.match(/^(.*)-(\\d+)$/);\n const prefix = numberedBase?.[1] || normalizedBaseName || 'worktree';\n const parsedNumber = numberedBase === null ? 1 : Number(numberedBase[2]);\n let number = Number.isSafeInteger(parsedNumber) ? parsedNumber + 1 : 2;\n for (let attempt = 0; attempt < 10000; attempt += 1) {\n const candidate = `${prefix}-${number}`;\n if (!usedNames.has(candidate))\n return candidate;\n number += 1;\n }\n throw new Error('Unable to generate an available numbered Worktree name.');\n}\n/** Resolve a row-half drop target to native-style optional before-anchor semantics. */\nexport function resolveWorktreeMove(worktreeIds, sourceWorktreeId, targetWorktreeId, half) {\n const sourceIndex = worktreeIds.indexOf(sourceWorktreeId);\n const targetIndex = worktreeIds.indexOf(targetWorktreeId);\n if (sourceIndex === -1 || targetIndex === -1)\n return undefined;\n const beforeWorktreeId = half === 'before'\n ? targetWorktreeId\n : worktreeIds[targetIndex + 1];\n if (beforeWorktreeId === sourceWorktreeId)\n return undefined;\n const anchorIndex = beforeWorktreeId === undefined\n ? worktreeIds.length\n : worktreeIds.indexOf(beforeWorktreeId);\n if (anchorIndex === sourceIndex || anchorIndex === sourceIndex + 1)\n return undefined;\n return beforeWorktreeId === undefined ? {} : { beforeWorktreeId };\n}\n/** Keep mutation routing in the browser Consumer while leaving wire details to the adapter. */\nexport async function executeWorktreeAction(manager, action) {\n if (action.type === 'createWorktree') {\n return manager.createWorktree(action.input);\n }\n if (action.type === 'importWorktree') {\n return manager.importWorktree(action.input);\n }\n if (action.type === 'removeWorktree') {\n await manager.removeWorktree(action.input);\n return;\n }\n if (action.type === 'unarchiveWorktree') {\n await manager.unarchiveWorktree(action.input);\n return;\n }\n if (action.type === 'cleanWorktree') {\n await manager.cleanWorktree(action.input);\n return;\n }\n if (action.type === 'forgetWorktree') {\n await manager.forgetWorktree(action.input);\n return;\n }\n}\n/**\n * Create a normal DSH Session at a Worktree cwd, then add the external binding.\n * A binding failure deliberately leaves the DSH-created Session intact.\n */\nexport async function createSessionForWorktree(input) {\n const sessionId = await input.createSession({ cwd: input.cwd });\n try {\n await input.manager.bindSession({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId,\n });\n }\n catch (error) {\n throw new WorktreeSessionBindingError(sessionId, error);\n }\n await input.beforeOpen?.(sessionId);\n input.openSession(sessionId);\n return sessionId;\n}\n//# sourceMappingURL=worktree-view-actions.js.map","import { toWorktreeViewError } from './worktree-view-errors.js';\n/** Merge one freshly read Workspace projection without clearing other ready views. */\nexport function mergeWorktreeView(views, nextView) {\n const index = views.findIndex((view) => view.workspaceId === nextView.workspaceId);\n if (index === -1)\n return [...views, nextView];\n const merged = [...views];\n merged[index] = nextView;\n return merged;\n}\n/** Merge explicit Workspace updates while preserving current order and ready references. */\nexport function mergeWorktreeViews(existing, workspaceIds, updates) {\n const byWorkspaceId = new Map(existing.map((view) => [view.workspaceId, view]));\n for (const update of updates)\n byWorkspaceId.set(update.workspaceId, update);\n return [...new Set(workspaceIds)].flatMap((workspaceId) => {\n const view = byWorkspaceId.get(workspaceId);\n return view === undefined ? [] : [view];\n });\n}\n/** Reuse the previous ID snapshot when DSH republishes equivalent Workspace items. */\nexport function stableWorkspaceIds(previous, next) {\n if (previous.length !== next.length)\n return next;\n for (let index = 0; index < previous.length; index += 1) {\n if (previous[index] !== next[index])\n return next;\n }\n return previous;\n}\n/** Keep only the most recently started Worktree surface refresh authoritative. */\nexport function createWorktreeRefreshGuard() {\n let latestGeneration = 0;\n const begin = () => {\n latestGeneration += 1;\n return latestGeneration;\n };\n const isCurrent = (generation) => generation === latestGeneration;\n const invalidate = () => {\n latestGeneration += 1;\n };\n return {\n begin,\n isCurrent,\n invalidate,\n async run(load, onSuccess, onError) {\n const generation = begin();\n let value;\n try {\n value = await load();\n }\n catch (error) {\n if (!isCurrent(generation))\n return;\n onError(error);\n return;\n }\n if (!isCurrent(generation))\n return;\n onSuccess(value);\n },\n };\n}\n/** Prefer the branch checked out by the DSH Workspace, then fall back to any local branch. */\nexport function selectDefaultBaseBranch(branches) {\n return branches.find((branch) => branch.isCurrent)?.name ?? branches[0]?.name ?? '';\n}\n/** Keep a valid user choice across branch-list refreshes, otherwise choose the current branch. */\nexport function reconcileBaseBranchSelection(selectedBranch, branches) {\n if (branches.some((branch) => branch.name === selectedBranch))\n return selectedBranch;\n return selectDefaultBaseBranch(branches);\n}\n/** Return copyable, read-only setup commands for a Git readiness state. */\nexport function worktreeSetupCommands(status) {\n switch (status) {\n case 'gitNotInstalled':\n return [];\n case 'noRepository':\n return [\n 'git init',\n 'printf \"# README\\\\n\" > README.md',\n 'git add README.md',\n 'git commit -m \"Initial commit\"',\n ];\n case 'noInitialCommit':\n return [\n 'printf \"# README\\\\n\" > README.md',\n 'git add README.md',\n 'git commit -m \"Initial commit\"',\n ];\n case 'noLocalBranch':\n return ['git switch -c main'];\n case 'ready':\n return [];\n }\n}\nfunction readinessFromBranchError(error) {\n const viewError = toWorktreeViewError(error);\n if (viewError.code === 'GIT_NOT_INSTALLED') {\n return { status: 'gitNotInstalled', error: viewError };\n }\n if (viewError.code === 'WORKSPACE_NOT_GIT_REPOSITORY') {\n return { status: 'noRepository', error: viewError };\n }\n if (viewError.code === 'WORKTREE_REQUIRES_INITIAL_COMMIT') {\n return { status: 'noInitialCommit', error: viewError };\n }\n return undefined;\n}\n/** Share complete Workspace reads without allowing stale generations to repopulate the cache. */\nexport function createWorktreeViewReader(manager) {\n const entries = new Map();\n let disposed = false;\n const entryFor = (workspaceId) => {\n const current = entries.get(workspaceId);\n if (current !== undefined)\n return current;\n const created = { generation: 0, stale: false };\n entries.set(workspaceId, created);\n return created;\n };\n const read = (workspaceId) => {\n if (disposed)\n return Promise.reject(new Error('Worktree view reader disposed'));\n const entry = entryFor(workspaceId);\n if (!entry.stale && entry.view !== undefined)\n return Promise.resolve(entry.view);\n if (entry.inFlight?.generation === entry.generation)\n return entry.inFlight.promise;\n const generation = entry.generation;\n const promise = loadWorktreeView(manager, workspaceId)\n .then((data) => {\n const view = { workspaceId, ...data };\n if (!disposed && entries.get(workspaceId) === entry && entry.generation === generation) {\n entry.view = view;\n entry.stale = false;\n }\n return view;\n })\n .finally(() => {\n if (entry.inFlight?.promise === promise)\n entry.inFlight = undefined;\n });\n entry.inFlight = { generation, promise };\n return promise;\n };\n return {\n invalidate(workspaceId, options) {\n if (disposed)\n return;\n const entry = entryFor(workspaceId);\n // Read-only menu opens may share a current read. Mutations must retire it.\n if (options?.reuseInFlight && entry.inFlight?.generation === entry.generation)\n return;\n entry.generation += 1;\n entry.stale = true;\n entry.view = undefined;\n },\n read,\n readMany(workspaceIds) {\n const uniqueIds = [...new Set(workspaceIds)];\n return Promise.all(uniqueIds.map((workspaceId) => read(workspaceId)));\n },\n dispose() {\n if (disposed)\n return;\n disposed = true;\n entries.clear();\n },\n };\n}\n/** Read the Worktree, branch, binding, and Workspace-root Main projections in one refresh. */\nexport async function loadWorktreeView(manager, workspaceId) {\n const [worktreesResult, branchesResult, bindingsResult, mainInstructionsResult] = await Promise.allSettled([\n manager.listWorktrees({ workspaceId }),\n manager.listBranches({ workspaceId }),\n manager.listBindings({ workspaceId }),\n typeof manager.getWorktreeInstructions === 'function'\n ? manager.getWorktreeInstructions({ workspaceId, worktreeId: `main:${workspaceId}` })\n : Promise.resolve(''),\n ]);\n if (worktreesResult.status === 'rejected')\n throw worktreesResult.reason;\n if (bindingsResult.status === 'rejected')\n throw bindingsResult.reason;\n if (mainInstructionsResult.status === 'rejected')\n throw mainInstructionsResult.reason;\n if (branchesResult.status === 'rejected') {\n const readiness = readinessFromBranchError(branchesResult.reason);\n if (readiness !== undefined) {\n return {\n worktrees: worktreesResult.value,\n branches: [],\n bindings: bindingsResult.value,\n mainInstructions: mainInstructionsResult.value,\n readiness,\n };\n }\n throw branchesResult.reason;\n }\n return {\n worktrees: worktreesResult.value,\n branches: branchesResult.value,\n bindings: bindingsResult.value,\n mainInstructions: mainInstructionsResult.value,\n readiness: branchesResult.value.length > 0\n ? { status: 'ready' }\n : { status: 'noLocalBranch' },\n };\n}\n/** Isolate modal-target callbacks while sharing the Client Workspace reader. */\nexport function createWorktreeModalViewLoader(reader) {\n const guard = createWorktreeRefreshGuard();\n return {\n invalidate: guard.invalidate,\n load(workspaceId, onSuccess, onError) {\n return guard.run(() => reader.read(workspaceId), onSuccess, (error) => onError(toWorktreeViewError(error)));\n },\n };\n}\n/** Load one independent projection per DSH Workspace for the flat sidebar hierarchy. */\nexport async function loadWorktreeViews(manager, workspaceIds) {\n return Promise.all(workspaceIds.map(async (workspaceId) => ({\n workspaceId,\n ...(await loadWorktreeView(manager, workspaceId)),\n })));\n}\n/** Hide DSH-archived Sessions from the browser-local Worktree projection. */\nexport function filterArchivedSessionIds(sessionIds, archivedSessionIds) {\n return sessionIds.filter((sessionId) => !archivedSessionIds.includes(sessionId));\n}\n//# sourceMappingURL=worktree-view-read.js.map","/** Prefer the legacy selected-id field; DSH 1.7 represents selection by mainView retention. */\nexport function currentSessionIdFromList(sessions) {\n if (sessions.current !== undefined)\n return sessions.current;\n const sessionIds = Object.keys(sessions.byId);\n return sessionIds.find((sessionId) => (sessions.byId[sessionId]?.retainedBy?.mainView ?? 0) > 0);\n}\n//# sourceMappingURL=session-selection.js.map","import { currentSessionIdFromList } from './session-selection.js';\nfunction isPendingInteractionStatus(value) {\n return value === 'approval' || value === 'plan-review' || value === 'question';\n}\nfunction validUpdatedAt(value) {\n return value !== undefined && Number.isFinite(value);\n}\n/**\n * Native-compatible subagent lineage index. The upstream runtime's public client\n * entry is a browser module-loader bundle, so keeping this pure mirror local lets\n * the browser Consumer and its Node tests share the same status semantics.\n */\nfunction indexSubagentDescendants(summaries) {\n const indexed = new Map();\n for (const descendant of Object.values(summaries)) {\n if (descendant.origin !== 'subagent')\n continue;\n const seen = new Set();\n let current = descendant;\n while (current?.origin === 'subagent' &&\n current.parentId !== undefined &&\n !seen.has(current.id)) {\n seen.add(current.id);\n const aggregate = indexed.get(current.parentId);\n if (aggregate === undefined) {\n indexed.set(current.parentId, {\n count: 1,\n runningCount: descendant.running ? 1 : 0,\n });\n }\n else {\n aggregate.count += 1;\n if (descendant.running)\n aggregate.runningCount += 1;\n }\n current = summaries[current.parentId];\n }\n }\n return indexed;\n}\n/** Native Workspace relative-time buckets, kept pure for deterministic rendering/tests. */\nexport function relativeTime(updatedAt, now) {\n if (!validUpdatedAt(updatedAt) || !Number.isFinite(now))\n return undefined;\n const MIN = 60_000;\n const HOUR = 3_600_000;\n const DAY = 86_400_000;\n const diff = Math.max(0, now - updatedAt);\n if (diff < MIN)\n return { unit: 'now', n: 0 };\n if (diff < HOUR)\n return { unit: 'minutes', n: Math.floor(diff / MIN) };\n if (diff < DAY)\n return { unit: 'hours', n: Math.floor(diff / HOUR) };\n if (diff < 30 * DAY)\n return { unit: 'days', n: Math.floor(diff / DAY) };\n if (diff < 365 * DAY)\n return { unit: 'months', n: Math.floor(diff / (30 * DAY)) };\n return { unit: 'years', n: Math.floor(diff / (365 * DAY)) };\n}\n/** Match native Workspace status priority while retaining the aggregate subagent count. */\nexport function sessionStatus(session, runningSubagentCount) {\n const count = Number.isFinite(runningSubagentCount) && runningSubagentCount > 0\n ? Math.floor(runningSubagentCount)\n : 0;\n if (isPendingInteractionStatus(session.pendingInteraction)) {\n const labelKey = session.pendingInteraction === 'approval'\n ? 'waitingApproval'\n : session.pendingInteraction === 'plan-review'\n ? 'planReview'\n : 'waitingAnswer';\n return { state: 'warning', labelKey, runningSubagentCount: count };\n }\n if (session.running === true) {\n return { state: 'ongoing', labelKey: 'running', runningSubagentCount: count };\n }\n if (count > 0) {\n return { state: 'ongoing', labelKey: 'subagentsRunning', runningSubagentCount: count };\n }\n if (session.completed === true) {\n return { state: 'done', labelKey: 'completed', runningSubagentCount: 0 };\n }\n return { state: 'done', labelKey: 'idle', runningSubagentCount: 0 };\n}\nfunction toLineageSummary(sessionId, summary) {\n return {\n id: sessionId,\n running: summary.running === true,\n ...(summary.parentId === undefined ? {} : { parentId: summary.parentId }),\n ...(summary.origin === 'subagent' ? { origin: 'subagent' } : {}),\n };\n}\n/** Derive row and group activity facts from one retained DSH Session snapshot. */\nexport function deriveSessionPresentationIndex(sessions) {\n const lineageSummaries = Object.fromEntries(Object.entries(sessions.byId).map(([sessionId, summary]) => [\n sessionId,\n toLineageSummary(sessionId, summary),\n ]));\n const descendants = indexSubagentDescendants(lineageSummaries);\n return Object.fromEntries(Object.entries(sessions.byId).map(([sessionId, summary]) => {\n const runningSubagentCount = descendants.get(sessionId)?.runningCount ?? 0;\n const status = sessionStatus(summary, runningSubagentCount);\n return [\n sessionId,\n {\n status,\n running: summary.running === true,\n ongoing: summary.running === true || runningSubagentCount > 0,\n runningSubagentCount,\n completed: summary.completed === true,\n ...(validUpdatedAt(summary.updatedAt) ? { updatedAt: summary.updatedAt } : {}),\n },\n ];\n }));\n}\n/** Aggregate only live ongoing activity; callers decide which IDs are in the group. */\nexport function hasOngoingSession(sessionIds, presentations) {\n return sessionIds.some((sessionId) => presentations[sessionId]?.ongoing === true);\n}\nfunction pendingStatusRank(status) {\n switch (status.labelKey) {\n case 'waitingApproval':\n return 3;\n case 'planReview':\n return 2;\n case 'waitingAnswer':\n return 1;\n default:\n return 0;\n }\n}\nfunction ongoingStatusRank(status) {\n return status.labelKey === 'running' ? 2 : status.labelKey === 'subagentsRunning' ? 1 : 0;\n}\n/**\n * Select the single Session status that a collapsed group should expose.\n *\n * The result is a representative status rather than a list: callers render at most one\n * StateDot. Pending interaction warnings outrank live activity, which outranks a completed\n * reminder. Idle Sessions do not contribute a group status.\n */\nexport function aggregateSessionStatus(sessionIds, presentations) {\n let pending;\n let pendingRank = 0;\n let ongoing;\n let ongoingRank = 0;\n let completed = false;\n for (const sessionId of sessionIds) {\n const presentation = presentations[sessionId];\n if (presentation === undefined)\n continue;\n if (presentation.status.state === 'warning') {\n const rank = pendingStatusRank(presentation.status);\n if (pending === undefined || rank > pendingRank) {\n pending = presentation.status;\n pendingRank = rank;\n }\n }\n else if (presentation.ongoing === true) {\n const rank = ongoingStatusRank(presentation.status);\n if (ongoing === undefined || rank > ongoingRank) {\n ongoing = presentation.status;\n ongoingRank = rank;\n }\n }\n if (presentation.completed === true)\n completed = true;\n }\n if (pending !== undefined)\n return pending;\n if (ongoing !== undefined)\n return ongoing;\n return completed\n ? { state: 'done', labelKey: 'completed', runningSubagentCount: 0 }\n : undefined;\n}\n/** Read the native blank flag without inferring blankness from title or id. */\nexport function isBlankSession(sessionId, sessions) {\n return sessions.byId[sessionId]?.blank === true;\n}\n/** Native tree visibility: ordinary rows plus the currently selected blank row. */\nfunction isVisibleSession(sessionId, sessions) {\n return !isBlankSession(sessionId, sessions) || currentSessionIdFromList(sessions) === sessionId;\n}\n/** Filter a group without mutating its source order. */\nexport function filterVisibleSessionIds(sessionIds, sessions) {\n return sessionIds.filter((sessionId) => isVisibleSession(sessionId, sessions));\n}\n/** Resolve a row title while keeping the blank label outside the DSH summary. */\nexport function sessionDisplayLabel(sessionId, sessions, blankLabel) {\n const summary = sessions.byId[sessionId];\n return summary?.blank === true ? blankLabel : (summary?.displayTitle ?? sessionId);\n}\n/** Match only durable Session titles or the final diagnostic id fallback. */\nexport function sessionMatchesQuery(sessionId, sessions, normalizedQuery) {\n const summary = sessions.byId[sessionId];\n if (summary?.blank === true)\n return false;\n const label = summary?.displayTitle ?? sessionId;\n return label.toLocaleLowerCase().includes(normalizedQuery);\n}\n//# sourceMappingURL=session-view.js.map","import { sessionDisplayLabel, sessionMatchesQuery, } from '../session/session-view.js';\n/** Native activity changes invalidate only the archived Worktrees' owning reads. */\nexport function worktreeActivityRefreshWorkspaceIds(views, previous, next) {\n return views\n .filter((view) => view.bindings.some((binding) => previous[binding.sessionId]?.ongoing !== next[binding.sessionId]?.ongoing &&\n view.worktrees.some((record) => record.worktreeId === binding.worktreeId && record.status === 'removed')))\n .map((view) => view.workspaceId);\n}\nexport function sessionLabel(sessionId, sessions, t) {\n return sessionDisplayLabel(sessionId, sessions, t('session.new'));\n}\nexport function bindingIdsFor(bindings, worktreeId) {\n return bindings\n .filter((binding) => binding.worktreeId === worktreeId)\n .map((binding) => binding.sessionId);\n}\nexport function clearSessionGroupExpansion(current, groupKeys) {\n const next = { ...current };\n for (const key of groupKeys)\n delete next[key];\n return next;\n}\n/** DSH list snapshots report a monotone `pending` → `ready` arrival phase. */\nexport function isPendingListPhase(phase) {\n return phase !== undefined && phase !== 'ready';\n}\n/**\n * True only for an authoritative Worktree projection: the confirmed Workspace list is\n * non-empty and every Workspace in it has a ready view.\n *\n * An empty `workspaceIds` means the Workspace list has not arrived yet — never that every\n * Workspace disappeared. Callers prune browser-local preferences on `true`, so an empty or\n * partial read must stay incomplete and keep those preferences untouched.\n */\nexport function isCompleteWorktreeWorkspaceSnapshot(workspaceIds, views) {\n if (workspaceIds.length === 0)\n return false;\n if (views.length !== workspaceIds.length)\n return false;\n const expected = new Set(workspaceIds);\n const actual = new Set(views.map((view) => view.workspaceId));\n return actual.size === expected.size && [...expected].every((id) => actual.has(id));\n}\nexport function includesText(value, query) {\n return value.toLocaleLowerCase().includes(query);\n}\nexport function workspaceMatches(workspace, view, sessions, query) {\n if (query.length === 0)\n return true;\n if (includesText(workspace.title, query))\n return true;\n if (workspace.sessionIds.some((sessionId) => sessionMatchesQuery(sessionId, sessions, query))) {\n return true;\n }\n if (view === undefined)\n return false;\n if (view.worktrees.some((record) => includesText(record.branch, query) || includesText(record.absolutePath, query))) {\n return true;\n }\n return view.bindings.some((binding) => sessionMatchesQuery(binding.sessionId, sessions, query));\n}\nexport function resolveCurrentSessionLocation(currentSessionId, workspaces, views) {\n if (currentSessionId === undefined)\n return undefined;\n const workspace = workspaces.find((candidate) => candidate.sessionIds.includes(currentSessionId));\n if (workspace === undefined)\n return undefined;\n const view = views.find((candidate) => candidate.workspaceId === workspace.workspaceId);\n if (view === undefined)\n return undefined;\n const binding = view.bindings.find((candidate) => candidate.sessionId === currentSessionId);\n if (binding === undefined) {\n return {\n sessionId: currentSessionId,\n workspaceId: workspace.workspaceId,\n groupKey: 'main:' + workspace.workspaceId,\n kind: 'main',\n };\n }\n const worktree = view.worktrees.find((candidate) => candidate.worktreeId === binding.worktreeId &&\n candidate.workspaceId === workspace.workspaceId);\n if (worktree === undefined)\n return undefined;\n return {\n sessionId: currentSessionId,\n workspaceId: workspace.workspaceId,\n groupKey: 'worktree:' + worktree.worktreeId,\n kind: 'worktree',\n worktreeId: worktree.worktreeId,\n ...(worktree.status === 'removed' ? { archived: true } : {}),\n };\n}\nexport function currentSessionRevealKeys(location) {\n if (location === undefined)\n return [];\n return [\n 'workspace:' + location.workspaceId,\n ...(location.kind === 'worktree' && location.archived\n ? ['archived:' + location.workspaceId]\n : []),\n location.kind === 'main' ? 'main:' + location.workspaceId : 'worktree:' + location.worktreeId,\n 'session-group:' + location.groupKey,\n ];\n}\nexport function shouldRevealCurrentSessionGroup(sessionIds, currentSessionId) {\n if (currentSessionId === undefined || sessionIds.length <= 5)\n return false;\n return sessionIds.indexOf(currentSessionId) >= 5;\n}\nexport function isSessionGroupAutoExpanded(sessionIds, currentSessionId, currentSessionRevealActive) {\n return (currentSessionRevealActive && shouldRevealCurrentSessionGroup(sessionIds, currentSessionId));\n}\n/** Lifecycle mutations rely on user confirmation, not Session activity coverage. */\nexport function worktreeLifecycleBlockReason(actionPending, health) {\n if (actionPending)\n return 'pending';\n if (health === 'recovery-needed')\n return 'recovery';\n return undefined;\n}\n//# sourceMappingURL=selectors.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Button, Input, Modal } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { formatWorktreeViewError } from '../../view/worktree-error-copy.js';\nimport { worktreeSetupCommands } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { worktreeLifecycleBlockReason } from '../selectors.js';\nexport function WorktreeAdoptBranchDialog({ t, worktree, actionPending, error, onClose, onSubmit, onRetry, }) {\n if (worktree === undefined || typeof worktree.currentBranch !== 'string')\n return null;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (!actionPending)\n onClose();\n }, closeLabel: t('dialog.cancel'), title: t('worktree.adoptBranch'), description: t('worktree.adoptDescription', {\n previous: worktree.branch,\n current: worktree.currentBranch,\n }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending || error !== undefined, onClick: () => {\n void onSubmit();\n }, children: t('worktree.adoptBranch') })] }), children: error !== undefined && (_jsxs(\"div\", { role: \"alert\", children: [_jsx(\"p\", { className: styles.message, children: formatWorktreeViewError(error, t) }), _jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onRetry, children: t('action.retry') })] })) }));\n}\nfunction worktreeSetupMessage(status, t) {\n switch (status) {\n case 'gitNotInstalled':\n return t('worktree.setup.gitNotInstalled');\n case 'noRepository':\n return t('worktree.setup.noRepository');\n case 'noInitialCommit':\n return t('worktree.setup.noInitialCommit');\n case 'noLocalBranch':\n return t('worktree.setup.noLocalBranch');\n }\n}\nexport function WorktreeSessionRenameDialog({ t, target, draft, pending, error, onClose, onDraftChange, onSubmit, }) {\n return (_jsxs(Modal, { open: target !== undefined, onClose: onClose, closeLabel: t('dialog.close'), title: t('session.rename'), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: pending || draft.trim().length === 0, onClick: () => {\n void onSubmit();\n }, children: t('dialog.rename') })] }), children: [_jsx(Input, { className: styles.renameInput, value: draft, \"aria-label\": t('session.name'), autoFocus: true, disabled: pending, onFocus: (event) => {\n event.currentTarget.select();\n }, onChange: (event) => {\n onDraftChange(event.currentTarget.value);\n }, onKeyDown: (event) => {\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n void onSubmit();\n }\n } }), error !== undefined && (_jsx(\"p\", { className: styles.renameError, role: \"alert\", children: formatWorktreeViewError(error, t) }))] }));\n}\nexport function WorktreeWorkspaceRenameDialog({ t, target, draft, pending, duplicate, error, onClose, onDraftChange, onSubmit, }) {\n if (target === undefined)\n return null;\n return (_jsxs(Modal, { open: true, onClose: onClose, closeLabel: t('dialog.closeWorkspaceRename'), title: t('workspace.renameTitle'), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: pending ||\n draft.trim().length === 0 ||\n draft.trim() === target.currentTitle ||\n duplicate, onClick: () => {\n void onSubmit();\n }, children: t('dialog.rename') })] }), children: [_jsx(Input, { className: styles.renameInput, value: draft, \"aria-label\": t('workspace.name'), autoFocus: true, disabled: pending, onFocus: (event) => {\n event.currentTarget.select();\n }, onChange: (event) => {\n onDraftChange(event.currentTarget.value);\n }, onKeyDown: (event) => {\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n void onSubmit();\n }\n } }), duplicate && (_jsx(\"p\", { className: styles.renameError, role: \"alert\", children: t('workspace.duplicate') })), error !== undefined && (_jsx(\"p\", { className: styles.renameError, role: \"alert\", children: formatWorktreeViewError(error, t) }))] }));\n}\nexport function WorktreeWorkspaceDeleteDialog({ t, target, pending, error, onClose, onSubmit, }) {\n if (target === undefined)\n return null;\n return (_jsx(Modal, { open: true, onClose: onClose, closeLabel: t('dialog.closeWorkspaceDelete'), title: t('workspace.deleteTitle'), description: t('workspace.deleteDescription', { name: target.title }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"outline\", disabled: pending, onClick: () => {\n void onSubmit();\n }, children: t('dialog.delete') })] }), children: error !== undefined && (_jsx(\"p\", { className: styles.renameError, role: \"alert\", children: formatWorktreeViewError(error, t) })) }));\n}\nexport function WorktreeCreateDialog({ t, workspace, view, readError, setupStatus, canCreate, mode, importCandidates, selectedImportPath, selectedBranch, newBranch, actionPending, onClose, onRetry, onModeChange, onRetryImportCandidates, onSelectedImportPathChange, onSelectedBranchChange, onNewBranchChange, onSubmit, }) {\n if (workspace === undefined)\n return null;\n const setupCommands = setupStatus === undefined ? [] : worktreeSetupCommands(setupStatus);\n const importing = mode === 'import';\n const importBlocked = actionPending || importCandidates.status === 'loading' || selectedImportPath === undefined;\n return (_jsxs(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeCreate'), title: t('worktree.createTitle'), description: importing\n ? t('worktree.importDescription', { name: workspace.title })\n : t('worktree.createDescription', { name: workspace.title }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: importing\n ? importBlocked\n : actionPending ||\n !canCreate ||\n selectedBranch.length === 0 ||\n newBranch.trim().length === 0, onClick: () => {\n void onSubmit();\n }, children: importing ? t('worktree.import') : t('worktree.create') })] }), children: [_jsxs(\"div\", { className: styles.worktreeModalTabs, role: \"tablist\", \"aria-label\": t('worktree.title'), children: [_jsx(\"button\", { className: styles.worktreeModalTab, type: \"button\", role: \"tab\", \"aria-selected\": mode === 'create', disabled: actionPending, onClick: () => {\n onModeChange('create');\n }, children: t('worktree.tabCreate') }), _jsx(\"button\", { className: styles.worktreeModalTab, type: \"button\", role: \"tab\", \"aria-selected\": mode === 'import', disabled: actionPending, onClick: () => {\n onModeChange('import');\n }, children: t('worktree.tabImport') })] }), importing ? (_jsxs(\"div\", { className: styles.worktreeImportCandidates, role: \"tabpanel\", children: [importCandidates.status === 'loading' && importCandidates.candidates.length === 0 && (_jsx(\"p\", { className: styles.message, children: t('worktree.importLoading') })), importCandidates.status === 'error' && (_jsxs(\"div\", { className: styles.worktreeImportError, role: \"alert\", children: [_jsx(\"p\", { className: styles.message, children: formatWorktreeViewError(importCandidates.error, t) }), _jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onRetryImportCandidates, children: t('action.retry') })] })), importCandidates.candidates.length === 0 && importCandidates.status === 'ready' && (_jsx(\"p\", { className: styles.message, children: t('worktree.importEmpty') })), importCandidates.candidates.length > 0 && (_jsxs(\"label\", { className: styles.modalField, children: [t('worktree.tabImport'), _jsxs(\"select\", { className: styles.worktreeImportSelect, \"data-worktree-import-select\": true, \"aria-label\": t('worktree.tabImport'), value: selectedImportPath ?? '', disabled: actionPending, onChange: (event) => {\n onSelectedImportPathChange(event.currentTarget.value);\n }, children: [_jsx(\"option\", { value: \"\", disabled: true, children: t('worktree.importPlaceholder') }), importCandidates.candidates.map((candidate) => (_jsxs(\"option\", { value: candidate.absolutePath, children: [candidate.branch, \" \\u2014 \", candidate.absolutePath] }, candidate.absolutePath)))] })] }))] })) : readError !== undefined ? (_jsxs(\"div\", { className: styles.gitReadiness, \"data-worktree-readiness\": \"error\", role: \"alert\", children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(readError, t) }), readError.retryable && onRetry !== undefined && (_jsx(\"button\", { type: \"button\", className: styles.retryButton, disabled: actionPending, onClick: onRetry, children: t('action.retry') }))] })) : canCreate ? (_jsxs(_Fragment, { children: [_jsxs(\"label\", { className: styles.modalField, children: [t('worktree.baseBranch'), _jsx(\"select\", { className: styles.actionSelect, \"aria-label\": t('worktree.baseBranch'), value: selectedBranch, disabled: actionPending, onChange: (event) => {\n onSelectedBranchChange(event.currentTarget.value);\n }, children: view?.branches.map((branch) => (_jsxs(\"option\", { value: branch.name, children: [branch.name, branch.isCurrent ? t('branch.current') : '', branch.checkedOut ? t('branch.checkedOut') : ''] }, branch.name))) })] }), _jsxs(\"label\", { className: styles.modalField, children: [t('worktree.name'), _jsx(Input, { className: styles.renameInput, \"aria-label\": t('worktree.name'), value: newBranch, placeholder: \"dsh/12345678\", disabled: actionPending, onChange: (event) => {\n onNewBranchChange(event.currentTarget.value);\n } })] })] })) : (_jsxs(\"div\", { className: styles.gitReadiness, \"data-worktree-readiness\": setupStatus ?? 'loading', role: \"alert\", children: [_jsx(\"p\", { className: styles.message, children: setupStatus === undefined ? t('status.loading') : worktreeSetupMessage(setupStatus, t) }), setupCommands.length > 0 && (_jsx(\"pre\", { className: styles.commandBlock, \"aria-label\": t('worktree.setup.commands'), children: setupCommands.join('\\n') }))] }))] }));\n}\nexport function WorktreeRemovalDialog({ t, worktree, actionPending, onClose, onSubmit, }) {\n if (worktree === undefined)\n return null;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeArchive'), title: t('worktree.archive'), description: worktree.source === 'external'\n ? t('worktree.archiveExternalDescription', { name: worktree.branch })\n : t('worktree.archiveDescription', { name: worktree.branch }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending, onClick: () => {\n void onSubmit();\n }, children: t('worktree.archive') })] }) }));\n}\nexport function WorktreeCleanDiskDialog({ t, worktree, actionPending, onClose, onSubmit, }) {\n if (worktree === undefined)\n return null;\n const activityBlock = worktreeLifecycleBlockReason(actionPending, worktree.health);\n const isBlocked = activityBlock !== undefined;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeCleanDisk'), title: t('worktree.cleanDiskTitle'), description: activityBlock === 'recovery'\n ? t('worktree.recovery')\n : t('worktree.cleanDiskDescription', {\n name: worktree.branch,\n path: worktree.absolutePath,\n }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending || isBlocked, onClick: () => {\n void onSubmit();\n }, children: t('dialog.cleanDisk') })] }) }));\n}\nexport function WorktreeForgetDialog({ t, worktree, actionPending, onClose, onSubmit, }) {\n if (worktree === undefined)\n return null;\n const activityBlock = worktreeLifecycleBlockReason(actionPending, worktree.health);\n const isBlocked = activityBlock !== undefined;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeForget'), title: t('worktree.forgetTitle'), description: activityBlock === 'recovery'\n ? t('worktree.recovery')\n : t('worktree.forgetDescription', { name: worktree.branch }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending || isBlocked, onClick: () => {\n void onSubmit();\n }, children: t('dialog.forget') })] }) }));\n}\n//# sourceMappingURL=dialogs.js.map","export async function runWorktreeCleanupFlow(input) {\n await input.clean();\n if (!input.isCurrent())\n return;\n input.onCommitted();\n const follow = async (stage, operation) => {\n if (!input.isCurrent())\n return;\n try {\n await operation();\n }\n catch (error) {\n if (input.isCurrent())\n input.onFollowUpError(stage, error);\n }\n };\n await Promise.all([follow('refresh', input.refresh), follow('permission', input.normalize)]);\n}\n//# sourceMappingURL=worktree-cleanup-flow.js.map","import { runWorktreeCleanupFlow } from './worktree-cleanup-flow.js';\nimport { executeWorktreeAction, toWorktreeViewError } from '../../view/worktree-view.js';\nimport { bindingIdsFor } from '../selectors.js';\n/** Archive, disk cleanup and forget retain their separate commit/recovery semantics. */\nexport function createLifecycleCommands({ props, lifecycleState, mutation, lifecycle, expansion, read, session, }) {\n const { manager, permission, onPermissionNotice, onWorktreeForgotten } = props;\n const { worktreeBranchAdoption, setWorktreeBranchAdoption, worktreeRemoval, setWorktreeRemoval, setWorktreeCleanDisk, cleanupGuard, setWorktreeForget, } = lifecycleState;\n const { runMutation, setActionError, setActionPending } = mutation;\n const { cleanDiskTarget, forgetTarget } = lifecycle;\n const { suppressCurrentSessionReveal, clearSessionGroups } = expansion;\n const { readStateRef, setReadState, refresh, readState } = read;\n const { pendingSessionBinding, setPendingSessionBinding } = session;\n const confirmBranchAdoption = () => {\n const target = worktreeBranchAdoption;\n if (!manager || !target?.mutationToken || typeof target.currentBranch !== 'string')\n return;\n const expectedBranch = target.currentBranch;\n const mutationToken = target.mutationToken;\n void runMutation(async () => {\n await manager.adoptWorktreeBranch({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n expectedBranch,\n });\n setWorktreeBranchAdoption(undefined);\n }, { scope: { kind: 'workspace', workspaceId: target.workspaceId }, preserveCurrent: true });\n };\n const confirmArchive = () => {\n if (manager === undefined || worktreeRemoval === undefined)\n return;\n const target = worktreeRemoval;\n const mutationToken = target.mutationToken;\n if (mutationToken === undefined) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n },\n });\n return;\n }\n void runMutation(async () => {\n await executeWorktreeAction(manager, {\n type: 'removeWorktree',\n input: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n },\n });\n suppressCurrentSessionReveal('archived:' + target.workspaceId);\n setWorktreeRemoval(undefined);\n }, {\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n };\n const confirmDiskCleanup = () => {\n if (manager === undefined || cleanDiskTarget === undefined)\n return;\n const target = cleanDiskTarget;\n const mutationToken = target.mutationToken;\n if (mutationToken === undefined) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n },\n });\n return;\n }\n const generation = cleanupGuard.current.begin();\n const isCurrent = () => cleanupGuard.current.isCurrent(generation) &&\n readStateRef.current.views.some((view) => view.workspaceId === target.workspaceId &&\n view.worktrees.some((record) => record.worktreeId === target.worktreeId));\n setActionPending(true);\n setActionError(undefined);\n void runWorktreeCleanupFlow({\n clean: async () => {\n await executeWorktreeAction(manager, {\n type: 'cleanWorktree',\n input: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n },\n });\n },\n onCommitted: () => {\n setWorktreeCleanDisk(undefined);\n setReadState((current) => {\n if (current.status !== 'ready')\n return current;\n return {\n ...current,\n views: current.views.map((v) => {\n if (v.workspaceId !== target.workspaceId)\n return v;\n return {\n ...v,\n worktrees: v.worktrees.map((w) => {\n if (w.worktreeId !== target.worktreeId)\n return w;\n return {\n ...w,\n status: 'removed',\n diskCleanup: 'completed',\n health: 'cleaned',\n mutationToken: undefined,\n };\n }),\n bindings: v.bindings.map((b) => {\n if (b.worktreeId !== target.worktreeId)\n return b;\n return {\n ...b,\n status: 'detached',\n };\n }),\n };\n }),\n };\n });\n },\n refresh: async () => {\n await refresh({\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n },\n normalize: async () => {\n if (permission?.normalizeDetachedWorktreePermissions === undefined)\n return;\n try {\n const result = await permission.normalizeDetachedWorktreePermissions({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n });\n if (result !== undefined && isCurrent()) {\n onPermissionNotice?.({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n }, result);\n }\n }\n catch {\n if (isCurrent()) {\n onPermissionNotice?.({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n }, {\n status: 'unverified',\n retryable: true,\n });\n }\n }\n },\n isCurrent,\n onFollowUpError: () => {\n // Follow-up errors do not fail the clean mutation\n },\n })\n .catch((error) => {\n if (isCurrent())\n setActionError(toWorktreeViewError(error));\n })\n .finally(() => {\n if (isCurrent())\n setActionPending(false);\n });\n };\n const confirmForget = () => {\n if (manager === undefined || forgetTarget === undefined)\n return;\n const target = forgetTarget;\n const mutationToken = target.mutationToken;\n if (mutationToken === undefined) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n },\n });\n return;\n }\n const targetBindings = readState.status === 'ready'\n ? (readState.views.find((v) => v.workspaceId === target.workspaceId)?.bindings ?? [])\n : [];\n const affectedSessionIds = bindingIdsFor(targetBindings, target.worktreeId);\n void runMutation(async () => {\n await executeWorktreeAction(manager, {\n type: 'forgetWorktree',\n input: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n },\n });\n cleanupGuard.current.invalidate();\n onWorktreeForgotten?.({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n sessionIds: affectedSessionIds,\n });\n if (pendingSessionBinding?.worktreeId === target.worktreeId) {\n setPendingSessionBinding(undefined);\n }\n clearSessionGroups(['worktree:' + target.worktreeId]);\n setReadState((current) => {\n if (current.status !== 'ready')\n return current;\n return {\n ...current,\n views: current.views.map((v) => {\n if (v.workspaceId !== target.workspaceId)\n return v;\n return {\n ...v,\n worktrees: v.worktrees.filter((w) => w.worktreeId !== target.worktreeId),\n bindings: v.bindings.filter((b) => b.worktreeId !== target.worktreeId),\n };\n }),\n };\n });\n setWorktreeForget(undefined);\n }, {\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n };\n return { confirmBranchAdoption, confirmArchive, confirmDiskCleanup, confirmForget };\n}\n//# sourceMappingURL=lifecycle-commands.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { WorktreeAdoptBranchDialog, WorktreeCleanDiskDialog, WorktreeForgetDialog, WorktreeRemovalDialog, } from './dialogs.js';\nimport { createLifecycleCommands } from '../actions/lifecycle-commands.js';\nexport function LifecycleDialogs({ props, lifecycleState, mutation, lifecycle, expansion, read, session, }) {\n const { t } = props;\n const { worktreeBranchAdoption, branchAdoptionGuard, setWorktreeBranchAdoption, worktreeRemoval, setWorktreeRemoval, setWorktreeCleanDisk, setWorktreeForget, } = lifecycleState;\n const { actionPending, actionError } = mutation;\n const { refreshBranchAdoption, cleanDiskTarget, forgetTarget } = lifecycle;\n const { confirmBranchAdoption, confirmArchive, confirmDiskCleanup, confirmForget } = createLifecycleCommands({\n props,\n lifecycleState,\n mutation,\n lifecycle,\n expansion,\n read,\n session,\n });\n return (_jsxs(_Fragment, { children: [_jsx(WorktreeAdoptBranchDialog, { t: t, worktree: worktreeBranchAdoption, actionPending: actionPending, error: actionError, onRetry: () => {\n void refreshBranchAdoption();\n }, onClose: () => {\n branchAdoptionGuard.current.invalidate();\n setWorktreeBranchAdoption(undefined);\n }, onSubmit: confirmBranchAdoption }), _jsx(WorktreeRemovalDialog, { t: t, worktree: worktreeRemoval, actionPending: actionPending, onClose: () => {\n setWorktreeRemoval(undefined);\n }, onSubmit: confirmArchive }), _jsx(WorktreeCleanDiskDialog, { t: t, worktree: cleanDiskTarget, actionPending: actionPending, onClose: () => {\n setWorktreeCleanDisk(undefined);\n }, onSubmit: confirmDiskCleanup }), _jsx(WorktreeForgetDialog, { t: t, worktree: forgetTarget, actionPending: actionPending, onClose: () => {\n setWorktreeForget(undefined);\n }, onSubmit: confirmForget })] }));\n}\n//# sourceMappingURL=LifecycleDialogs.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { WorktreeSessionRenameDialog, WorktreeWorkspaceDeleteDialog, WorktreeWorkspaceRenameDialog, } from './dialogs.js';\nexport function NativeDialogs({ props, native }) {\n const { t } = props;\n const { sessionRenameTarget, sessionRenameDraft, sessionRenamePending, sessionRenameError, closeSessionRename, setSessionRenameDraft, setSessionRenameError, confirmSessionRename, workspaceRenameTarget, workspaceRenameDraft, workspaceRenamePending, workspaceRenameDuplicate, workspaceRenameError, closeWorkspaceRename, setWorkspaceRenameDraft, setWorkspaceRenameError, confirmWorkspaceRename, workspaceDeleteTarget, workspaceDeletePending, workspaceDeleteError, closeWorkspaceDelete, confirmWorkspaceDelete, } = native;\n return (_jsxs(_Fragment, { children: [_jsx(WorktreeSessionRenameDialog, { t: t, target: sessionRenameTarget, draft: sessionRenameDraft, pending: sessionRenamePending, error: sessionRenameError, onClose: closeSessionRename, onDraftChange: (draft) => {\n setSessionRenameDraft(draft);\n setSessionRenameError(undefined);\n }, onSubmit: confirmSessionRename }), _jsx(WorktreeWorkspaceRenameDialog, { t: t, target: workspaceRenameTarget, draft: workspaceRenameDraft, pending: workspaceRenamePending, duplicate: workspaceRenameDuplicate, error: workspaceRenameError, onClose: closeWorkspaceRename, onDraftChange: (draft) => {\n setWorkspaceRenameDraft(draft);\n setWorkspaceRenameError(undefined);\n }, onSubmit: confirmWorkspaceRename }), _jsx(WorktreeWorkspaceDeleteDialog, { t: t, target: workspaceDeleteTarget, pending: workspaceDeletePending, error: workspaceDeleteError, onClose: closeWorkspaceDelete, onSubmit: confirmWorkspaceDelete })] }));\n}\n//# sourceMappingURL=NativeDialogs.js.map","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { WorktreeCreateDialog } from './dialogs.js';\nexport function RegistrationDialog({ props, registration, registrationState, mutation, read, }) {\n const { t } = props;\n const { modalWorkspace, modalView, modalSetupStatus, modalCanCreate, closeWorktreeCreator, changeWorktreeModalMode, loadImportCandidates, submitWorktree, } = registration;\n const { modalReadError, worktreeModalMode, importCandidates, selectedImportPath, selectedBranch, newBranch, worktreeModalWorkspaceId, modalReadViewRef, setSelectedBranch, setNewBranch, setSelectedImportPath, } = registrationState;\n const { actionPending } = mutation;\n const { loadModalWorktreeView } = read;\n return (_jsx(_Fragment, { children: _jsx(WorktreeCreateDialog, { t: t, workspace: modalWorkspace, view: modalView, readError: modalReadError, setupStatus: modalSetupStatus, canCreate: modalCanCreate, mode: worktreeModalMode, importCandidates: importCandidates, selectedImportPath: selectedImportPath, selectedBranch: selectedBranch, newBranch: newBranch, actionPending: actionPending, onClose: closeWorktreeCreator, onRetry: () => {\n if (worktreeModalWorkspaceId === undefined)\n return;\n modalReadViewRef.current = undefined;\n setSelectedBranch('');\n setNewBranch('');\n loadModalWorktreeView(worktreeModalWorkspaceId);\n }, onModeChange: changeWorktreeModalMode, onRetryImportCandidates: () => {\n if (worktreeModalWorkspaceId !== undefined) {\n void loadImportCandidates(worktreeModalWorkspaceId);\n }\n }, onSelectedImportPathChange: setSelectedImportPath, onSelectedBranchChange: setSelectedBranch, onNewBranchChange: setNewBranch, onSubmit: submitWorktree }) }));\n}\n//# sourceMappingURL=RegistrationDialog.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useRef } from 'react';\nimport { stableWorkspaceIds, toWorktreeViewError, } from '../view/worktree-view.js';\nexport function toNativeWorktreeViewError(error) {\n const viewError = toWorktreeViewError(error);\n if (typeof error === 'object' && error !== null)\n return viewError;\n return { ...viewError, message: String(error) };\n}\nexport const EMPTY_READ_STATE = { status: 'idle', views: [] };\nexport const EMPTY_PERMISSION_NOTICE = undefined;\nexport const EMPTY_PERMISSION_NOTICE_SUBSCRIBE = () => () => { };\nexport const EMPTY_PERMISSION_NOTICE_SNAPSHOT = () => EMPTY_PERMISSION_NOTICE;\nexport const EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE = () => () => { };\nexport const EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT = () => undefined;\nexport const EMPTY_FORK_RECOVERY_SNAPSHOT = {\n revision: 0,\n pending: [],\n affectedWorkspaceIds: [],\n};\nexport const EMPTY_FORK_RECOVERY_STORE = {\n getSnapshot: () => EMPTY_FORK_RECOVERY_SNAPSHOT,\n subscribe: () => () => { },\n};\nexport function cx(...classes) {\n return classes.filter(Boolean).join(' ');\n}\nexport function updatedAtById(sessionIds, sessions) {\n return Object.fromEntries(sessionIds.map((sessionId) => [sessionId, sessions.byId[sessionId]?.updatedAt]));\n}\nexport function forkRecoveryError(recovery) {\n const error = toNativeWorktreeViewError(recovery.error);\n return {\n ...error,\n code: error.code === 'WORKTREE_VIEW_FAILED' ? 'SESSION_BINDING_FAILED' : error.code,\n details: {\n ...(error.details ?? {}),\n sessionId: recovery.childSessionId,\n },\n };\n}\nexport function useStableWorkspaceIds(workspaces) {\n const next = workspaces.map((workspace) => workspace.workspaceId);\n const previousRef = useRef([]);\n const stable = stableWorkspaceIds(previousRef.current, next);\n if (stable !== previousRef.current)\n previousRef.current = stable;\n return previousRef.current;\n}\nexport function IconCollapseAll16({ size = 16 }) {\n return (_jsx(\"svg\", { width: size, height: size, viewBox: \"0 0 16 16\", fill: \"currentColor\", children: _jsx(\"path\", { d: \"M9 11h6v1H9v-1zm6-3H9v1h6V8zm-6-3h6v1H9V5zM4.15 2.15l-.71.7L5.59 5H1v1h4.59L3.44 8.15l.71.7L7.5 5.5 4.15 2.15zm0 6l-.71.7L5.59 11H1v1h4.59l-2.15 2.15.71.7L7.5 11.5 4.15 8.15z\" }) }));\n}\n//# sourceMappingURL=shared.js.map","/** Open an existing Session through DSH without touching the peer view mode. */\nexport function openWorktreeSession(opener, sessionId) {\n opener.open(sessionId);\n}\n//# sourceMappingURL=navigation.js.map","import { currentSessionIdFromList } from '../session/session-selection.js';\n/** Browser-local storage key; it is never sent to DSH or the sidecar. */\nexport const WORKTREE_VIEW_MODE_STORAGE_KEY = 'clutch-dsh-worktree.view-mode';\n/** Guard persisted values before they become a visible mode. */\nexport function isWorktreeViewMode(value) {\n return value === 'workspace-session' || value === 'worktree';\n}\n/** Degraded/unavailable plugin state always exposes the original DSH view. */\nexport function effectiveViewMode(preferred, worktreeServiceAvailable) {\n if (!worktreeServiceAvailable || !isWorktreeViewMode(preferred))\n return 'workspace-session';\n return preferred;\n}\n/** Keep the Main bucket scoped to the selected DSH Workspace before filtering bindings. */\nexport function workspaceSessionIds(workspaces, workspaceId, sessionIds) {\n if (workspaceId === undefined)\n return [];\n const workspace = workspaces.items.find((candidate) => candidate.workspaceId === workspaceId);\n if (workspace === undefined)\n return [];\n const listed = new Set(sessionIds);\n return workspace.sessionIds.filter((sessionId) => listed.has(sessionId));\n}\nexport function unboundSessionIds(sessionIds, boundSessionIds) {\n const bound = new Set(boundSessionIds);\n return sessionIds.filter((sessionId) => !bound.has(sessionId));\n}\nexport function projectVirtualWorkspaceMembership(snapshot, previousBindings, nextBindings) {\n const previousSessionIds = new Set(previousBindings.map((binding) => binding.sessionId));\n const nextByWorkspace = new Map();\n for (const binding of nextBindings) {\n const sessionIds = nextByWorkspace.get(binding.workspaceId) ?? [];\n if (!sessionIds.includes(binding.sessionId))\n sessionIds.push(binding.sessionId);\n nextByWorkspace.set(binding.workspaceId, sessionIds);\n }\n const items = snapshot.items.map((workspace) => {\n const nativeSessionIds = workspace.sessionIds.filter((sessionId) => !previousSessionIds.has(sessionId));\n const virtualSessionIds = nextByWorkspace.get(workspace.workspaceId) ?? [];\n const sessionIds = [\n ...nativeSessionIds,\n ...virtualSessionIds.filter((sessionId) => !nativeSessionIds.includes(sessionId)),\n ];\n if (sessionIds.length === workspace.sessionIds.length &&\n sessionIds.every((sessionId, index) => sessionId === workspace.sessionIds[index])) {\n return workspace;\n }\n return { ...workspace, sessionIds };\n });\n if (items.every((workspace, index) => workspace === snapshot.items[index]))\n return snapshot;\n return { ...snapshot, items };\n}\nfunction validTimestamp(value) {\n return typeof value === 'number' && Number.isFinite(value);\n}\nfunction createdAtTimestamp(createdAt) {\n const timestamp = Date.parse(createdAt);\n return Number.isFinite(timestamp) ? timestamp : undefined;\n}\n/**\n * Derive the most recent Workspace from rc.1 Session/Workspace metadata.\n * Host order is retained when timestamps tie, so equal activity never causes\n * the native Workspace order to oscillate.\n */\nexport function deriveRecentWorkspaceId(workspaces, sessionsById) {\n let recentWorkspaceId;\n let recentTimestamp = Number.NEGATIVE_INFINITY;\n for (const workspace of workspaces.items) {\n let workspaceTimestamp;\n for (const sessionId of workspace.sessionIds) {\n const updatedAt = sessionsById[sessionId]?.updatedAt;\n if (validTimestamp(updatedAt)) {\n workspaceTimestamp = Math.max(workspaceTimestamp ?? updatedAt, updatedAt);\n }\n }\n workspaceTimestamp ??= createdAtTimestamp(workspace.createdAt);\n if (workspaceTimestamp === undefined || workspaceTimestamp <= recentTimestamp)\n continue;\n recentWorkspaceId = workspace.workspaceId;\n recentTimestamp = workspaceTimestamp;\n }\n return recentWorkspaceId;\n}\n/**\n * Select the initial Worktree surface Workspace without navigating DSH:\n * current Session membership wins, then derived DSH recency, then the first available\n * Workspace keeps the surface usable in an empty/reconnecting fixture.\n */\nexport function initialWorkspaceId(workspaces, sessions) {\n const currentSessionId = currentSessionIdFromList(sessions);\n if (currentSessionId !== undefined) {\n const currentWorkspace = workspaces.items.find((workspace) => workspace.sessionIds.includes(currentSessionId));\n if (currentWorkspace !== undefined)\n return currentWorkspace.workspaceId;\n }\n const recentWorkspaceId = deriveRecentWorkspaceId(workspaces, sessions.byId);\n if (recentWorkspaceId !== undefined)\n return recentWorkspaceId;\n return workspaces.items[0]?.workspaceId;\n}\n//# sourceMappingURL=view-mode.js.map","/** Browser-local storage identity; never sent to DSH or the plugin sidecar. */\nexport const WORKTREE_EXPAND_STATE_STORAGE_KEY = 'clutch-dsh-worktree.expand-state';\nfunction emptyState() {\n return {\n collapsedWorkspaceIds: {},\n collapsedMainWorkspaceIds: {},\n collapsedWorktreeIds: {},\n };\n}\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction normalizeIds(value) {\n if (!isRecord(value))\n return {};\n return Object.fromEntries(Object.entries(value).filter(([id, collapsed]) => id.length > 0 && collapsed === true));\n}\n/** Turn any persisted JSON value into the current state shape. */\nexport function normalizeWorktreeExpandState(value) {\n const source = isRecord(value) ? value : {};\n return {\n collapsedWorkspaceIds: normalizeIds(source.collapsedWorkspaceIds),\n collapsedMainWorkspaceIds: normalizeIds(source.collapsedMainWorkspaceIds),\n collapsedWorktreeIds: normalizeIds(source.collapsedWorktreeIds),\n };\n}\nexport function isWorkspaceExpanded(state, workspaceId) {\n return state.collapsedWorkspaceIds[workspaceId] !== true;\n}\nexport function isMainExpanded(state, workspaceId) {\n return state.collapsedMainWorkspaceIds[workspaceId] !== true;\n}\nexport function isWorktreeExpanded(state, worktreeId) {\n return state.collapsedWorktreeIds[worktreeId] !== true;\n}\nfunction toggle(record, id) {\n if (record[id] === true)\n delete record[id];\n else\n record[id] = true;\n}\nfunction retain(record, ids) {\n const allowed = new Set(ids);\n for (const id of Object.keys(record)) {\n if (!allowed.has(id))\n delete record[id];\n }\n}\n/** Create one apply-scoped store; component remounts share this instance. */\nexport function createWorktreeExpandStateStore(snapshotStoreFactory) {\n let store;\n try {\n store = snapshotStoreFactory(emptyState(), {\n persist: { name: WORKTREE_EXPAND_STATE_STORAGE_KEY },\n });\n }\n catch {\n // A throwing browser storage getter can fail before runtime persistence's own guard.\n store = snapshotStoreFactory(emptyState());\n }\n // Runtime persistence handles invalid JSON; normalize valid but wrong-shaped JSON.\n store.set(normalizeWorktreeExpandState(store.getSnapshot()));\n const actions = {\n toggleWorkspace: (workspaceId) => {\n store.update((draft) => { toggle(draft.collapsedWorkspaceIds, workspaceId); });\n },\n toggleMain: (workspaceId) => {\n store.update((draft) => { toggle(draft.collapsedMainWorkspaceIds, workspaceId); });\n },\n toggleWorktree: (worktreeId) => {\n store.update((draft) => { toggle(draft.collapsedWorktreeIds, worktreeId); });\n },\n collapseAll: (workspaceIds, worktreeIds = [], mainWorkspaceIds = workspaceIds) => {\n store.update((draft) => {\n for (const id of workspaceIds) {\n draft.collapsedWorkspaceIds[id] = true;\n }\n for (const id of mainWorkspaceIds) {\n draft.collapsedMainWorkspaceIds[id] = true;\n }\n for (const id of worktreeIds) {\n draft.collapsedWorktreeIds[id] = true;\n }\n });\n },\n retain: (workspaceIds, worktreeIds) => {\n // No Workspace IDs means the Workspace list has not arrived yet. Pruning from that\n // read would delete every stored preference, so refuse it outright: only a caller\n // holding a complete, non-empty snapshot may prune.\n if (workspaceIds.length === 0)\n return;\n store.update((draft) => {\n retain(draft.collapsedWorkspaceIds, workspaceIds);\n retain(draft.collapsedMainWorkspaceIds, workspaceIds);\n retain(draft.collapsedWorktreeIds, worktreeIds);\n });\n },\n };\n return Object.assign(store, { actions });\n}\n//# sourceMappingURL=worktree-expand-state.js.map","export function isMainWorktreeId(worktreeId) {\n return worktreeId === 'main' || worktreeId.startsWith('main:');\n}\nexport function isManagedDashboardRecord(record) {\n return !isMainWorktreeId(record.worktreeId);\n}\nexport function createMainWorktreeRecord(workspace, currentBranch, instructions = '') {\n return {\n worktreeId: `main:${workspace.workspaceId}`,\n workspaceId: workspace.workspaceId,\n // Main is a browser-local projection, not a plugin-managed Worktree. Keep\n // unavailable branch and health facts empty instead of inventing values.\n branch: currentBranch ?? '',\n currentBranch,\n absolutePath: workspace.path,\n status: 'active',\n instructions,\n };\n}\nexport function resolveDashboardRecord(selection, mode, currentSessionId, workspaceIds, records, mainRecord) {\n if (selection === undefined ||\n mode !== 'worktree' ||\n (selection.sessionId !== undefined && selection.sessionId !== currentSessionId) ||\n !workspaceIds.includes(selection.workspaceId))\n return undefined;\n if (mainRecord !== undefined &&\n (isMainWorktreeId(selection.worktreeId) || selection.worktreeId === mainRecord.worktreeId)) {\n return mainRecord;\n }\n return records?.find((record) => record.workspaceId === selection.workspaceId && record.worktreeId === selection.worktreeId);\n}\n//# sourceMappingURL=dashboard-selection.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { HoverCard, Menu, StateDot, writeClipboard, } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconArchiveOutline20, IconBranchOutline16, IconChevronDownOutline14, IconChevronRightOutline14, IconCopyOutline16, IconEditOutline16, IconEllipsisOutline16, IconFolderClose16, IconFolderOpen16, IconPlusOutline16, IconRefreshOutline16, IconTrashOutline16, } from '../../dsh-icons.js';\nimport { useEffect, useRef, useState } from 'react';\nimport { IconDashboard } from '../../dashboard/dashboard-icon.js';\nimport { isBlankSession, relativeTime, } from '../../session/session-view.js';\nimport styles from '../../worktree.css';\nimport { sessionLabel } from '../selectors.js';\nfunction rowHalf(event) {\n const rect = event.currentTarget.getBoundingClientRect();\n return event.clientY < rect.top + rect.height / 2 ? 'before' : 'after';\n}\nconst WORKTREE_LABEL_SCROLL_START_PAUSE_MS = 800;\nconst WORKTREE_LABEL_SCROLL_FORWARD_MS = 3_000;\nconst WORKTREE_LABEL_SCROLL_END_PAUSE_MS = 1_000;\nconst WORKTREE_LABEL_SCROLL_RETURN_MS = 3_000;\nconst WORKTREE_LABEL_SCROLL_CYCLE_MS = WORKTREE_LABEL_SCROLL_START_PAUSE_MS +\n WORKTREE_LABEL_SCROLL_FORWARD_MS +\n WORKTREE_LABEL_SCROLL_END_PAUSE_MS +\n WORKTREE_LABEL_SCROLL_RETURN_MS;\nfunction worktreeLabelScrollProgress(elapsedMs) {\n const elapsed = elapsedMs % WORKTREE_LABEL_SCROLL_CYCLE_MS;\n const forwardStart = WORKTREE_LABEL_SCROLL_START_PAUSE_MS;\n const forwardEnd = forwardStart + WORKTREE_LABEL_SCROLL_FORWARD_MS;\n const returnStart = forwardEnd + WORKTREE_LABEL_SCROLL_END_PAUSE_MS;\n if (elapsed < forwardStart)\n return 0;\n if (elapsed < forwardEnd) {\n return (elapsed - forwardStart) / WORKTREE_LABEL_SCROLL_FORWARD_MS;\n }\n if (elapsed < returnStart)\n return 1;\n return 1 - (elapsed - returnStart) / WORKTREE_LABEL_SCROLL_RETURN_MS;\n}\nfunction sessionStatusLabel(t, status) {\n switch (status.labelKey) {\n case 'running':\n return t('session.status.running');\n case 'subagentsRunning':\n return t(status.runningSubagentCount === 1\n ? 'session.status.subagentsRunning.one'\n : 'session.status.subagentsRunning.other', { n: status.runningSubagentCount });\n case 'idle':\n return t('session.status.idle');\n case 'waitingApproval':\n return t('session.status.waitingApproval');\n case 'planReview':\n return t('session.status.planReview');\n case 'waitingAnswer':\n return t('session.status.waitingAnswer');\n case 'completed':\n return t('session.status.completed');\n }\n}\nfunction sessionTimeLabel(t, value) {\n switch (value.unit) {\n case 'now':\n return t('session.time.now');\n case 'minutes':\n return t('session.time.minutes', { n: value.n });\n case 'hours':\n return t('session.time.hours', { n: value.n });\n case 'days':\n return t('session.time.days', { n: value.n });\n case 'months':\n return t('session.time.months', { n: value.n });\n case 'years':\n return t('session.time.years', { n: value.n });\n }\n}\n/** Native Workspace hover-card time copy, including the trailing \"ago\" marker. */\nfunction sessionHoverTimeLabel(t, value) {\n const label = sessionTimeLabel(t, value);\n return value.unit === 'now' ? label : t('session.time.ago', { t: label });\n}\n/** Native Workspace hover-card status list, including a secondary subagent status when relevant. */\nfunction sessionHoverStatuses(presentation) {\n if (presentation.runningSubagentCount === 0 ||\n presentation.status.labelKey === 'subagentsRunning') {\n return [presentation.status];\n }\n return [\n presentation.status,\n {\n state: 'ongoing',\n labelKey: 'subagentsRunning',\n runningSubagentCount: presentation.runningSubagentCount,\n },\n ];\n}\n/** Native Workspace Session hover-card details, adapted to the Worktree row projection. */\nfunction WorktreeSessionHoverContent({ label, blank, presentation, t, }) {\n const statuses = presentation === undefined ? [] : sessionHoverStatuses(presentation);\n const timeValue = !blank && presentation?.updatedAt !== undefined\n ? relativeTime(presentation.updatedAt, Date.now())\n : undefined;\n return (_jsxs(\"div\", { className: styles.sessionHoverContent, children: [_jsx(\"div\", { className: styles.sessionHoverTitle, children: label }), !blank && timeValue !== undefined && (_jsx(\"div\", { className: styles.sessionHoverTime, children: sessionHoverTimeLabel(t, timeValue) })), statuses.map((status) => (_jsxs(\"div\", { className: styles.sessionHoverStatus, children: [_jsx(StateDot, { state: status.state }), _jsx(\"span\", { children: sessionStatusLabel(t, status) })] }, `${status.labelKey}-${status.runningSubagentCount}`)))] }));\n}\n/** Workspace row using the native DSH menu, fixed action column, and drag contract. */\nexport function WorktreeWorkspaceRow({ t, workspace, expanded, groupActivityStatus, actionPending, menuOpen, drag, onToggle, onCreateWorktree, onRename, onDelete, onMenuOpenChange, }) {\n const workspaceMenuItems = [\n {\n id: 'rename',\n label: t('workspace.rename'),\n icon: _jsx(IconEditOutline16, {}),\n disabled: actionPending,\n },\n {\n id: 'delete',\n label: t('workspace.delete'),\n icon: _jsx(IconTrashOutline16, {}),\n danger: true,\n disabled: actionPending,\n },\n ];\n const markerClass = drag.marker === 'before' ? styles.dropBefore : drag.marker === 'after' ? styles.dropAfter : '';\n const groupActivityVisible = !expanded && groupActivityStatus !== undefined;\n const groupActivityLabel = groupActivityStatus === undefined ? undefined : sessionStatusLabel(t, groupActivityStatus);\n return (_jsxs(\"div\", { className: `${styles.workspaceRow} ${markerClass}`, \"data-workspace-drag\": drag.active ? 'active' : undefined, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, \"data-menu-open\": menuOpen || undefined, draggable: true, onClick: () => {\n onToggle();\n }, onDragStart: (event) => {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', workspace.workspaceId);\n drag.start();\n }, onDragEnd: drag.end, onDragOver: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n drag.hover(rowHalf(event));\n }, onDrop: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n drag.drop(rowHalf(event));\n }, children: [_jsx(\"button\", { type: \"button\", className: `${styles.disclosureButton} ${styles.workspaceDisclosure}`, \"aria-label\": t(expanded ? 'workspace.collapse' : 'workspace.expand', {\n name: workspace.title,\n }), \"aria-expanded\": expanded, onClick: (event) => {\n event.stopPropagation();\n onToggle();\n }, children: expanded ? (_jsx(IconChevronDownOutline14, { size: 18 })) : (_jsx(IconChevronRightOutline14, { size: 18 })) }), _jsx(\"span\", { className: styles.workspaceIcon, \"aria-hidden\": \"true\", children: expanded ? _jsx(IconFolderOpen16, {}) : _jsx(IconFolderClose16, {}) }), _jsx(\"span\", { className: styles.workspaceTitle, children: workspace.title }), _jsxs(\"span\", { className: `${styles.treeActionSlot} ${styles.workspaceActions}`, children: [_jsx(\"span\", { className: styles.groupActivity, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, role: groupActivityVisible ? 'img' : undefined, \"aria-label\": groupActivityVisible ? groupActivityLabel : undefined, title: groupActivityVisible ? groupActivityLabel : undefined, children: groupActivityVisible && groupActivityStatus !== undefined && (_jsx(StateDot, { state: groupActivityStatus.state })) }), _jsx(\"span\", { className: styles.menuAction, children: _jsx(Menu, { open: menuOpen, onClose: () => {\n onMenuOpenChange(false);\n }, items: workspaceMenuItems, onSelect: (id) => {\n onMenuOpenChange(false);\n if (id === 'rename')\n onRename();\n if (id === 'delete')\n onDelete();\n }, portal: true, closeOnPointerLeave: true, anchor: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-workspace-menu\": true, \"aria-label\": t('workspace.options', { name: workspace.title }), onClick: (event) => {\n event.stopPropagation();\n onMenuOpenChange(!menuOpen);\n }, children: _jsx(IconEllipsisOutline16, {}) }) }) }), _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-add-worktree\": true, \"aria-label\": t('workspace.addWorktree', { name: workspace.title }), onClick: (event) => {\n event.stopPropagation();\n onCreateWorktree();\n }, children: _jsx(IconPlusOutline16, {}) })] })] }));\n}\n/** Shared Main/Worktree group row with parameterized icon, state, and actions. */\nexport function WorktreeGroupRow({ t, kind, label, worktreeId, expanded, groupActivityStatus, icon, workspaceTitle, state, stateLabel, repairGuidance, onToggle, onCreateSession, showDashboardAction, menu, drag, }) {\n const main = kind === 'main';\n const groupActivityVisible = !expanded && groupActivityStatus !== undefined;\n const groupActivityLabel = groupActivityStatus === undefined ? undefined : sessionStatusLabel(t, groupActivityStatus);\n const worktreeStateVisible = stateLabel !== undefined;\n const dashboardActionVisible = showDashboardAction === true && menu?.onDashboard !== undefined;\n const worktreeLabelRef = useRef(null);\n const labelScrollFrameRef = useRef(undefined);\n const worktreeLabelPointerInsideRef = useRef(false);\n const stopWorktreeLabelScroll = () => {\n if (labelScrollFrameRef.current !== undefined) {\n cancelAnimationFrame(labelScrollFrameRef.current);\n labelScrollFrameRef.current = undefined;\n }\n if (worktreeLabelRef.current !== null) {\n worktreeLabelRef.current.scrollLeft = 0;\n }\n };\n const startWorktreeLabelScroll = () => {\n if (labelScrollFrameRef.current !== undefined) {\n return;\n }\n const labelElement = worktreeLabelRef.current;\n const prefersReducedMotion = typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n if (labelElement === null || prefersReducedMotion) {\n return;\n }\n const startedAt = performance.now();\n const animate = (timestamp) => {\n if (worktreeLabelRef.current !== labelElement) {\n labelScrollFrameRef.current = undefined;\n return;\n }\n const maxScrollLeft = Math.max(0, labelElement.scrollWidth - labelElement.clientWidth);\n if (maxScrollLeft === 0) {\n labelElement.scrollLeft = 0;\n labelScrollFrameRef.current = undefined;\n return;\n }\n labelElement.scrollLeft =\n maxScrollLeft * worktreeLabelScrollProgress(timestamp - startedAt);\n labelScrollFrameRef.current = requestAnimationFrame(animate);\n };\n labelScrollFrameRef.current = requestAnimationFrame(animate);\n };\n const syncWorktreeLabelScroll = () => {\n if (worktreeLabelPointerInsideRef.current || groupActivityVisible) {\n startWorktreeLabelScroll();\n }\n else {\n stopWorktreeLabelScroll();\n }\n };\n useEffect(() => {\n syncWorktreeLabelScroll();\n }, [groupActivityVisible, label]);\n useEffect(() => {\n return () => {\n if (labelScrollFrameRef.current !== undefined) {\n cancelAnimationFrame(labelScrollFrameRef.current);\n labelScrollFrameRef.current = undefined;\n }\n };\n }, []);\n const markerClass = drag?.marker === 'before'\n ? styles.dropBefore\n : drag?.marker === 'after'\n ? styles.dropAfter\n : '';\n const dragProps = drag === undefined\n ? {}\n : {\n draggable: true,\n onDragStart: (event) => {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', worktreeId ?? label);\n drag.start();\n },\n onDragEnd: drag.end,\n onDragOver: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n drag.hover(rowHalf(event));\n },\n onDrop: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n drag.drop(rowHalf(event));\n },\n };\n const row = (_jsxs(\"div\", { className: `${styles.worktreeRow} ${markerClass}`, \"data-main-group\": main ? 'true' : undefined, \"data-main-expanded\": main ? String(expanded) : undefined, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, \"data-menu-open\": menu?.open ? 'true' : undefined, \"data-worktree-drag\": drag?.active ? 'active' : undefined, ...dragProps, onClick: onToggle, onMouseEnter: () => {\n worktreeLabelPointerInsideRef.current = true;\n syncWorktreeLabelScroll();\n }, onMouseLeave: () => {\n worktreeLabelPointerInsideRef.current = false;\n syncWorktreeLabelScroll();\n }, children: [_jsx(\"button\", { type: \"button\", className: `${styles.disclosureButton} ${styles.worktreeDisclosure}`, \"aria-label\": t(expanded ? 'worktree.collapse' : 'worktree.expand', { name: label }), \"aria-expanded\": expanded, onClick: (event) => {\n event.stopPropagation();\n onToggle();\n }, children: expanded ? (_jsx(IconChevronDownOutline14, { size: 18 })) : (_jsx(IconChevronRightOutline14, { size: 18 })) }), _jsx(\"span\", { className: styles.worktreeIcon, \"data-worktree-state\": state, \"aria-hidden\": \"true\", children: icon }), worktreeStateVisible && (_jsx(\"span\", { className: styles.worktreeStateLabel, children: stateLabel })), _jsx(\"span\", { ref: worktreeLabelRef, className: styles.worktreeLabel, children: label }), _jsxs(\"span\", { className: styles.treeActionSlot, children: [_jsx(\"span\", { className: styles.groupActivity, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, role: groupActivityVisible ? 'img' : undefined, \"aria-label\": groupActivityVisible ? groupActivityLabel : undefined, title: groupActivityVisible ? groupActivityLabel : undefined, children: groupActivityVisible && groupActivityStatus !== undefined && (_jsx(StateDot, { state: groupActivityStatus.state })) }), dashboardActionVisible && (_jsx(\"span\", { className: styles.dashboardAction, children: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-dashboard-action\": true, \"aria-label\": t('dashboard.title'), onClick: (event) => {\n event.stopPropagation();\n menu?.onDashboard?.();\n }, children: _jsx(IconDashboard, { size: 16 }) }) })), menu !== undefined && (_jsx(\"span\", { className: styles.menuAction, children: _jsx(Menu, { open: menu.open, onClose: () => {\n menu.onOpenChange(false);\n }, items: [\n ...(menu.onDashboard === undefined\n ? []\n : [{ id: 'dashboard', label: t('dashboard.title'), icon: _jsx(IconDashboard, { size: 16 }) }]),\n ...(menu.showCreate\n ? [\n {\n id: 'create',\n label: t('worktree.createNew'),\n icon: _jsx(IconPlusOutline16, {}),\n disabled: menu.disabled || menu.onCreateWorktree === undefined,\n },\n ]\n : []),\n {\n id: 'copy-path',\n label: t('worktree.copyPath'),\n icon: _jsx(IconCopyOutline16, {}),\n disabled: menu.disabled,\n },\n ...(menu.showRemove\n ? [\n {\n id: 'remove',\n label: t('worktree.archive'),\n icon: _jsx(IconArchiveOutline20, { size: 16 }),\n danger: true,\n disabled: menu.disabled || menu.onRemove === undefined,\n },\n ]\n : []),\n ...(menu.onAdoptBranch\n ? [\n {\n id: 'adopt-branch',\n label: t('worktree.adoptBranch'),\n disabled: menu.disabled,\n },\n ]\n : []),\n ...(menu.onRecover\n ? [{ id: 'recover', label: t('worktree.retryRecovery'), disabled: menu.disabled }]\n : []),\n ...(menu.showUnarchive\n ? [\n {\n id: 'unarchive',\n label: menu.unarchiveDisabledReason\n ? `${t('worktree.unarchive')} (${menu.unarchiveDisabledReason})`\n : t('worktree.unarchive'),\n icon: _jsx(IconRefreshOutline16, {}),\n disabled: menu.disabled || menu.unarchiveDisabled || menu.onUnarchive === undefined,\n },\n ]\n : []),\n ...(menu.showCleanDisk\n ? [\n {\n id: 'clean-disk',\n label: menu.cleanDiskDisabledReason\n ? `${t('worktree.cleanDisk')} (${menu.cleanDiskDisabledReason})`\n : t('worktree.cleanDisk'),\n icon: _jsx(IconTrashOutline16, {}),\n danger: true,\n disabled: menu.disabled || menu.cleanDiskDisabled || menu.onCleanDisk === undefined,\n },\n ]\n : []),\n ...(menu.showForget\n ? [\n {\n id: 'forget',\n label: menu.forgetDisabledReason\n ? `${t('worktree.forget')} (${menu.forgetDisabledReason})`\n : t('worktree.forget'),\n icon: _jsx(IconTrashOutline16, {}),\n danger: true,\n disabled: menu.disabled || menu.forgetDisabled || menu.onForget === undefined,\n },\n ]\n : []),\n ], onSelect: (id) => {\n menu.onOpenChange(false);\n if (id === 'create' && menu.showCreate)\n menu.onCreateWorktree?.();\n if (id === 'dashboard')\n menu.onDashboard?.();\n if (id === 'adopt-branch')\n menu.onAdoptBranch?.();\n if (id === 'recover')\n menu.onRecover?.();\n if (id === 'copy-path')\n void writeClipboard(menu.copyPath);\n if (id === 'remove' && menu.showRemove)\n menu.onRemove?.();\n if (id === 'unarchive' && menu.showUnarchive)\n menu.onUnarchive?.();\n if (id === 'clean-disk' && menu.showCleanDisk)\n menu.onCleanDisk?.();\n if (id === 'forget' && menu.showForget)\n menu.onForget?.();\n }, portal: true, closeOnPointerLeave: true, anchor: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-worktree-menu\": true, \"aria-label\": t('worktree.options', { name: menu.label }), onClick: (event) => {\n event.stopPropagation();\n menu.onOpenChange(!menu.open);\n }, children: _jsx(IconEllipsisOutline16, {}) }) }) })), onCreateSession !== undefined && (_jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-add-main-session\": main ? 'true' : undefined, \"data-add-session\": main ? undefined : 'true', \"aria-label\": t('worktree.addSession', { name: workspaceTitle }), onClick: (event) => {\n event.stopPropagation();\n onCreateSession();\n }, children: _jsx(IconPlusOutline16, {}) }))] })] }));\n if (main)\n return row;\n return (_jsx(HoverCard, { anchor: row, content: _jsxs(\"div\", { className: styles.worktreeHoverDetails, children: [_jsx(\"div\", { className: styles.worktreeHoverTitle, children: label }), stateLabel !== undefined && state !== 'done' && (_jsx(\"p\", { className: styles.worktreeHoverTitle, children: stateLabel })), repairGuidance !== undefined && (_jsxs(_Fragment, { children: [_jsx(\"p\", { className: styles.worktreeHoverTitle, children: menu?.copyPath }), _jsx(\"p\", { className: styles.worktreeHoverTitle, children: repairGuidance })] }))] }), openDelayMs: 500, disabled: menu?.open === true || drag?.active === true, copyLabel: t('copy'), copiedLabel: t('hover.copied') }));\n}\n/** Worktree-mode Session row with the same trailing options menu as native DSH rows. */\nexport function WorktreeSessionRow({ t, sessionId, blank, current, label, drag, actionPending, onOpen, onRename, onFork, onArchive, presentation, }) {\n const [menuOpen, setMenuOpen] = useState(false);\n const markerClass = drag.marker === 'before' ? styles.dropBefore : drag.marker === 'after' ? styles.dropAfter : '';\n const sessionMenuItems = [\n {\n id: 'rename',\n label: t('session.rename'),\n icon: _jsx(IconEditOutline16, {}),\n disabled: onRename === undefined || actionPending,\n },\n {\n id: 'fork',\n label: t('session.fork'),\n icon: _jsx(IconBranchOutline16, {}),\n disabled: onFork === undefined || actionPending,\n },\n {\n id: 'archive',\n label: t('session.archive'),\n icon: _jsx(IconArchiveOutline20, { size: 16 }),\n disabled: onArchive === undefined || actionPending,\n },\n {\n id: 'copy-session-id',\n label: t('session.copyId'),\n icon: _jsx(IconCopyOutline16, {}),\n },\n ];\n const statusLabel = presentation === undefined ? undefined : sessionStatusLabel(t, presentation.status);\n const showTrailingStatus = !blank &&\n presentation !== undefined &&\n (presentation.status.state !== 'done' || presentation.completed);\n const timeValue = !blank && !showTrailingStatus && presentation?.updatedAt !== undefined\n ? relativeTime(presentation.updatedAt, Date.now())\n : undefined;\n const timeLabel = timeValue === undefined ? undefined : sessionTimeLabel(t, timeValue);\n const row = (_jsxs(\"div\", { className: `${styles.treeSessionRow} ${markerClass}`, \"data-session-id\": sessionId, \"data-session-blank\": blank ? 'true' : undefined, \"data-session-current\": current ? 'true' : undefined, \"data-session-drag\": drag.active ? 'active' : undefined, \"data-menu-open\": menuOpen || undefined, role: \"treeitem\", \"aria-current\": current ? 'true' : undefined, draggable: true, onDragStart: (event) => {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', sessionId);\n drag.start();\n }, onDragEnd: drag.end, onDragOver: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n drag.hover(rowHalf(event));\n }, onDrop: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n drag.drop(rowHalf(event));\n }, children: [_jsx(\"button\", { type: \"button\", className: styles.treeSessionContent, onClick: onOpen, children: _jsx(\"span\", { className: styles.sessionLabel, children: label }) }), !blank && (_jsxs(\"span\", { className: styles.sessionTrailing, children: [_jsx(\"span\", { className: styles.sessionMeta, children: showTrailingStatus && presentation !== undefined ? (_jsx(\"span\", { className: styles.sessionStatus, \"data-session-status\": statusLabel, role: \"img\", \"aria-label\": statusLabel, title: statusLabel, children: _jsx(StateDot, { state: presentation.status.state }) })) : timeLabel !== undefined ? (_jsx(\"span\", { className: styles.sessionTime, \"data-session-time\": true, children: timeLabel })) : null }), _jsx(\"span\", { className: styles.rowActions, children: _jsx(Menu, { open: menuOpen, onClose: () => {\n setMenuOpen(false);\n }, items: sessionMenuItems, onSelect: (id) => {\n setMenuOpen(false);\n if (id === 'rename')\n onRename?.(sessionId, label);\n if (id === 'fork')\n onFork?.(sessionId);\n if (id === 'archive')\n onArchive?.(sessionId);\n if (id === 'copy-session-id')\n void writeClipboard(sessionId);\n }, portal: true, closeOnPointerLeave: true, anchor: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-session-menu\": true, \"aria-label\": t('session.options', { name: label }), onClick: (event) => {\n event.stopPropagation();\n setMenuOpen((current) => !current);\n }, children: _jsx(IconEllipsisOutline16, {}) }) }) })] }))] }));\n return (_jsx(HoverCard, { anchor: row, content: _jsx(WorktreeSessionHoverContent, { label: label, blank: blank, presentation: presentation, t: t }), openDelayMs: 500, disabled: menuOpen || drag.active, copyText: blank ? undefined : label, copyLabel: t('copy'), copiedLabel: t('hover.copied') }));\n}\nexport function WorktreeSessionGroup({ t, groupKey, sessionIds, workspaceId, currentSessionId, expanded, actionPending, sessions, sessionPresentations, dragState, onToggleExpanded, onStartDrag, onHoverDrag, onClearDrag, onFinishDrag, onCommitDrag, onOpen, onRename, onFork, onArchive, }) {\n const visibleSessionIds = expanded ? sessionIds : sessionIds.slice(0, 5);\n const sameGroupDrag = dragState?.groupKey === groupKey;\n return (_jsxs(_Fragment, { children: [visibleSessionIds.map((sessionId) => (_jsx(WorktreeSessionRow, { t: t, sessionId: sessionId, blank: isBlankSession(sessionId, sessions), current: sessionId === currentSessionId, label: sessionLabel(sessionId, sessions, t), presentation: sessionPresentations[sessionId], drag: {\n active: sameGroupDrag,\n marker: sameGroupDrag && dragState.over?.sessionId === sessionId ? dragState.over.half : null,\n start: () => {\n onStartDrag(groupKey, sessionId);\n },\n hover: (half) => {\n onHoverDrag(sessionId, half);\n },\n drop: (half) => {\n if (dragState === undefined)\n return;\n onCommitDrag(dragState, { sessionId, half }, sessionIds, workspaceId);\n },\n end: () => {\n if (dragState?.over !== null && dragState?.over !== undefined) {\n onCommitDrag(dragState, dragState.over, sessionIds, workspaceId);\n }\n else {\n onClearDrag();\n }\n onFinishDrag();\n },\n }, actionPending: actionPending, onOpen: () => {\n onOpen(sessionId);\n }, onRename: onRename, onFork: onFork, onArchive: onArchive }, `${groupKey}:${sessionId}`))), sessionIds.length > 5 && (_jsx(\"button\", { type: \"button\", className: styles.sessionOverflowButton, \"aria-expanded\": expanded, onClick: onToggleExpanded, children: expanded\n ? t('session.collapse')\n : t('session.expandMore', { count: sessionIds.length - 5 }) }))] }));\n}\n//# sourceMappingURL=rows.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconBranchOutline16 } from '../../dsh-icons.js';\nimport { filterVisibleSessionIds, aggregateSessionStatus, sessionMatchesQuery, } from '../../session/session-view.js';\nimport { isWorktreeExpanded } from '../../view/worktree-expand-state.js';\nimport { createNumberedWorktreeName, filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { WorktreeGroupRow, WorktreeSessionGroup } from './rows.js';\nimport { bindingIdsFor, includesText, isSessionGroupAutoExpanded } from '../selectors.js';\nexport function ActiveWorktree({ record, source, expansion, ordering, props, lifecycle, session, menus, mutation, read, registration, lifecycleState, drag, native, bindings, workspaceMatchesQuery, workspace, workspaceWorktreeNames, sameWorkspaceWorktreeDrag, activeWorktrees, }) {\n const { sessions, archivedSessionIds, currentSessionId, expandSnapshot, sessionPresentations } = source;\n const { query, isCurrentSessionReveal, expandedSessionGroups, toggleWorktree, toggleSessionGroup, } = expansion;\n const { orderedSessionIdsByAccount } = ordering;\n const { t, renameSession, forkSession, archiveSession } = props;\n const { branchLabel, branchActions } = lifecycle;\n const { createSession, openWorkspaceSession } = session;\n const { openWorktreeMenuId, setOpenWorktreeMenuId } = menus;\n const { actionPending, setActionError } = mutation;\n const { refresh } = read;\n const { openWorktreeCreator } = registration;\n const { setWorktreeRemoval } = lifecycleState;\n const { worktreeDrag, worktreeDropCommitted, setWorktreeDrag, commitWorktreeDrag, sessionDrag, sessionDropCommitted, setSessionDrag, commitSessionDrag, } = drag;\n const { openSessionRename, archiveWorktreeSession } = native;\n const worktreeSessionIds = filterVisibleSessionIds(filterArchivedSessionIds(bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId)), archivedSessionIds), sessions);\n const worktreeMatchesQuery = workspaceMatchesQuery ||\n includesText(record.branch, query) ||\n includesText(record.absolutePath, query);\n if (query.length > 0 &&\n !worktreeMatchesQuery &&\n !worktreeSessionIds.some((sessionId) => sessionMatchesQuery(sessionId, sessions, query))) {\n return null;\n }\n const visibleWorktreeSessionIds = worktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const worktreeGroupKey = `worktree:${record.worktreeId}`;\n const orderedWorktreeSessionIds = orderedSessionIdsByAccount.get(worktreeGroupKey) ?? worktreeSessionIds;\n const orderedVisibleWorktreeSessionIds = orderedWorktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const sessionIds = orderedVisibleWorktreeSessionIds.length === visibleWorktreeSessionIds.length\n ? orderedVisibleWorktreeSessionIds\n : visibleWorktreeSessionIds;\n const sessionGroupAutoExpanded = isSessionGroupAutoExpanded(sessionIds, currentSessionId, isCurrentSessionReveal('session-group:' + worktreeGroupKey));\n const sessionGroupExpanded = expandedSessionGroups[worktreeGroupKey] === true || sessionGroupAutoExpanded;\n const state = record.health === 'repair' || record.health === 'recovery-needed'\n ? 'error'\n : record.health === 'branch-drift'\n ? 'warning'\n : 'done';\n const stateLabel = record.health === 'recovery-needed'\n ? t('worktree.recovery')\n : record.health === 'repair'\n ? t('worktree.repair')\n : record.health === 'branch-drift'\n ? t('worktree.branchDrift')\n : t('worktree.ready');\n const worktreeExpanded = isWorktreeExpanded(expandSnapshot, record.worktreeId) ||\n isCurrentSessionReveal('worktree:' + record.worktreeId);\n return (_jsxs(\"div\", { className: styles.worktreeGroup, \"data-worktree-id\": record.worktreeId, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"worktree\", label: branchLabel(record), worktreeId: record.worktreeId, expanded: worktreeExpanded, groupActivityStatus: aggregateSessionStatus(worktreeSessionIds, sessionPresentations), icon: _jsx(IconBranchOutline16, {}), workspaceTitle: workspace.title, state: state, stateLabel: stateLabel, repairGuidance: record.health === 'repair'\n ? t('worktree.repairGuidance')\n : record.health === 'recovery-needed'\n ? t('worktree.recoveryGuidance')\n : record.health === 'branch-drift'\n ? t(record.currentBranch === null ? 'worktree.detachedGuidance' : 'worktree.branchDriftGuidance')\n : undefined, onToggle: () => {\n toggleWorktree(record.worktreeId);\n }, showDashboardAction: props.openDashboard !== undefined, onCreateSession: record.status === 'active' &&\n record.health !== 'repair' &&\n record.health !== 'recovery-needed'\n ? () => {\n void createSession({\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n cwd: record.absolutePath,\n });\n }\n : undefined, menu: {\n onDashboard: props.openDashboard === undefined ? undefined : () => props.openDashboard?.(record),\n ...branchActions(record),\n open: openWorktreeMenuId === record.worktreeId,\n label: record.branch,\n copyPath: record.absolutePath,\n showCreate: record.status === 'active' &&\n record.health !== 'repair' &&\n record.health !== 'recovery-needed' &&\n record.currentBranch !== null,\n showRemove: record.status === 'active' && record.health !== 'recovery-needed',\n disabled: actionPending,\n onOpenChange: (open) => {\n setOpenWorktreeMenuId(open ? record.worktreeId : undefined);\n if (open)\n void refresh({\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n reuseInFlight: true,\n invalidateContext: false,\n });\n },\n onCreateWorktree: record.status === 'active' &&\n record.health !== 'repair' &&\n record.health !== 'recovery-needed' &&\n record.currentBranch !== null\n ? () => {\n openWorktreeCreator(workspace, {\n baseBranch: record.currentBranch ?? record.branch,\n newBranch: createNumberedWorktreeName(record.currentBranch ?? record.branch, workspaceWorktreeNames),\n });\n }\n : undefined,\n onRemove: record.status === 'active'\n ? () => {\n setWorktreeRemoval(record);\n setActionError(undefined);\n }\n : undefined,\n }, drag: {\n active: sameWorkspaceWorktreeDrag,\n marker: worktreeDrag?.over?.worktreeId === record.worktreeId ? worktreeDrag.over.half : null,\n start: () => {\n worktreeDropCommitted.current = false;\n setWorktreeDrag({\n workspaceId: workspace.workspaceId,\n worktreeId: record.worktreeId,\n over: null,\n });\n },\n hover: (half) => {\n setWorktreeDrag((current) => current === undefined || current.workspaceId !== workspace.workspaceId\n ? current\n : {\n ...current,\n over: { worktreeId: record.worktreeId, half },\n });\n },\n drop: (half) => {\n if (worktreeDrag === undefined)\n return;\n commitWorktreeDrag(worktreeDrag, { worktreeId: record.worktreeId, half }, activeWorktrees.map((candidate) => candidate.worktreeId), workspace.workspaceId);\n },\n end: () => {\n setWorktreeDrag(undefined);\n worktreeDropCommitted.current = false;\n },\n } }), worktreeExpanded && (_jsx(WorktreeSessionGroup, { t: t, groupKey: worktreeGroupKey, sessionIds: sessionIds, workspaceId: workspace.workspaceId, currentSessionId: currentSessionId, expanded: sessionGroupExpanded, actionPending: actionPending, sessions: sessions, sessionPresentations: sessionPresentations, dragState: sessionDrag, onToggleExpanded: () => {\n toggleSessionGroup(worktreeGroupKey, sessionGroupAutoExpanded);\n }, onStartDrag: (groupKey, sessionId) => {\n sessionDropCommitted.current = false;\n setSessionDrag({ groupKey, sessionId, over: null });\n }, onHoverDrag: (sessionId, half) => {\n setSessionDrag((current) => current === undefined ? current : { ...current, over: { sessionId, half } });\n }, onClearDrag: () => {\n setSessionDrag(undefined);\n }, onFinishDrag: () => {\n sessionDropCommitted.current = false;\n }, onCommitDrag: commitSessionDrag, onOpen: (sessionId) => {\n openWorkspaceSession(workspace.workspaceId, sessionId);\n }, onRename: renameSession === undefined ? undefined : openSessionRename, onFork: forkSession, onArchive: archiveSession === undefined ? undefined : archiveWorktreeSession }))] }, record.worktreeId));\n}\n//# sourceMappingURL=ActiveWorktree.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconBranchOutline16 } from '../../dsh-icons.js';\nimport { filterVisibleSessionIds, aggregateSessionStatus, sessionMatchesQuery, } from '../../session/session-view.js';\nimport { isWorktreeExpanded } from '../../view/worktree-expand-state.js';\nimport { executeWorktreeAction, filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { WorktreeGroupRow, WorktreeSessionGroup } from './rows.js';\nimport { bindingIdsFor, includesText, isSessionGroupAutoExpanded, worktreeLifecycleBlockReason, } from '../selectors.js';\nexport function ArchivedWorktree({ record, source, expansion, ordering, props, lifecycle, mutation, menus, read, lifecycleState, drag, session, native, bindings, workspaceMatchesQuery, workspace, }) {\n const { sessions, archivedSessionIds, currentSessionId, expandSnapshot, sessionPresentations } = source;\n const { query, isCurrentSessionReveal, expandedSessionGroups, toggleWorktree, toggleSessionGroup, } = expansion;\n const { orderedSessionIdsByAccount } = ordering;\n const { t, manager, renameSession, forkSession, archiveSession } = props;\n const { branchLabel, branchActions } = lifecycle;\n const { actionPending, setActionError, runMutation } = mutation;\n const { openWorktreeMenuId, setOpenWorktreeMenuId } = menus;\n const { refresh } = read;\n const { setWorktreeCleanDisk, setWorktreeForget } = lifecycleState;\n const { sessionDrag, sessionDropCommitted, setSessionDrag, commitSessionDrag } = drag;\n const { openWorkspaceSession } = session;\n const { openSessionRename, archiveWorktreeSession } = native;\n const worktreeSessionIds = filterVisibleSessionIds(filterArchivedSessionIds(bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId)), archivedSessionIds), sessions);\n const worktreeMatchesQuery = workspaceMatchesQuery ||\n includesText(record.branch, query) ||\n includesText(record.absolutePath, query);\n if (query.length > 0 &&\n !worktreeMatchesQuery &&\n !worktreeSessionIds.some((sessionId) => sessionMatchesQuery(sessionId, sessions, query))) {\n return null;\n }\n const visibleWorktreeSessionIds = worktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const worktreeGroupKey = 'worktree:' + record.worktreeId;\n const orderedWorktreeSessionIds = orderedSessionIdsByAccount.get(worktreeGroupKey) ?? worktreeSessionIds;\n const orderedVisibleWorktreeSessionIds = orderedWorktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const sessionIds = orderedVisibleWorktreeSessionIds.length === visibleWorktreeSessionIds.length\n ? orderedVisibleWorktreeSessionIds\n : visibleWorktreeSessionIds;\n const sessionGroupAutoExpanded = isSessionGroupAutoExpanded(sessionIds, currentSessionId, isCurrentSessionReveal('session-group:' + worktreeGroupKey));\n const sessionGroupExpanded = expandedSessionGroups[worktreeGroupKey] === true || sessionGroupAutoExpanded;\n const state = record.health === 'recovery-needed'\n ? 'error'\n : record.diskCleanup === 'completed'\n ? undefined\n : record.health === 'repair'\n ? 'error'\n : 'warning';\n const stateLabel = record.health === 'recovery-needed'\n ? t('worktree.recovery')\n : record.diskCleanup === 'completed'\n ? t('worktree.cleaned')\n : record.health === 'repair'\n ? t('worktree.repair')\n : record.health === 'branch-drift'\n ? t('worktree.branchDrift')\n : t('worktree.detached');\n const worktreeExpanded = isWorktreeExpanded(expandSnapshot, record.worktreeId) ||\n isCurrentSessionReveal('worktree:' + record.worktreeId);\n return (_jsxs(\"div\", { className: styles.worktreeGroup, \"data-worktree-id\": record.worktreeId, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"worktree\", label: branchLabel(record), worktreeId: record.worktreeId, expanded: worktreeExpanded, groupActivityStatus: aggregateSessionStatus(worktreeSessionIds, sessionPresentations), icon: _jsx(IconBranchOutline16, {}), workspaceTitle: workspace.title, state: state, stateLabel: stateLabel, onToggle: () => {\n toggleWorktree(record.worktreeId);\n }, showDashboardAction: props.openDashboard !== undefined, menu: (() => {\n const activityBlocked = worktreeLifecycleBlockReason(actionPending, record.health);\n const blockedReasonText = activityBlocked === 'recovery' ? t('worktree.recovery') : undefined;\n return {\n onDashboard: props.openDashboard === undefined ? undefined : () => props.openDashboard?.(record),\n ...branchActions(record),\n open: openWorktreeMenuId === record.worktreeId,\n label: record.branch,\n copyPath: record.absolutePath,\n showCreate: false,\n showRemove: false,\n showUnarchive: record.diskCleanup !== 'completed',\n showCleanDisk: record.diskCleanup !== 'completed',\n showForget: true,\n disabled: actionPending,\n unarchiveDisabled: activityBlocked !== undefined || record.health === 'repair',\n cleanDiskDisabled: activityBlocked !== undefined || record.health === 'branch-drift',\n forgetDisabled: activityBlocked !== undefined,\n unarchiveDisabledReason: record.health === 'repair'\n ? t('worktree.unarchiveDisabledRepair')\n : blockedReasonText,\n cleanDiskDisabledReason: record.health === 'branch-drift' ? t('worktree.adoptBeforeClean') : blockedReasonText,\n forgetDisabledReason: blockedReasonText,\n onOpenChange: (open) => {\n setOpenWorktreeMenuId(open ? record.worktreeId : undefined);\n if (open)\n void refresh({\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n reuseInFlight: true,\n invalidateContext: false,\n });\n },\n onUnarchive: () => {\n if (!manager)\n return;\n if (!record.mutationToken) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n },\n });\n return;\n }\n void runMutation(async () => {\n await executeWorktreeAction(manager, {\n type: 'unarchiveWorktree',\n input: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n mutationToken: record.mutationToken,\n },\n });\n }, {\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n });\n },\n onCleanDisk: () => {\n setWorktreeCleanDisk(record);\n setActionError(undefined);\n },\n onForget: () => {\n setWorktreeForget(record);\n setActionError(undefined);\n },\n };\n })() }), worktreeExpanded && (_jsx(WorktreeSessionGroup, { t: t, groupKey: worktreeGroupKey, sessionIds: sessionIds, workspaceId: workspace.workspaceId, currentSessionId: currentSessionId, expanded: sessionGroupExpanded, actionPending: actionPending, sessions: sessions, sessionPresentations: sessionPresentations, dragState: sessionDrag, onToggleExpanded: () => {\n toggleSessionGroup(worktreeGroupKey, sessionGroupAutoExpanded);\n }, onStartDrag: (groupKey, sessionId) => {\n sessionDropCommitted.current = false;\n setSessionDrag({ groupKey, sessionId, over: null });\n }, onHoverDrag: (sessionId, half) => {\n setSessionDrag((current) => current === undefined ? current : { ...current, over: { sessionId, half } });\n }, onClearDrag: () => {\n setSessionDrag(undefined);\n }, onFinishDrag: () => {\n sessionDropCommitted.current = false;\n }, onCommitDrag: commitSessionDrag, onOpen: (sessionId) => {\n openWorkspaceSession(workspace.workspaceId, sessionId);\n }, onRename: renameSession === undefined ? undefined : openSessionRename, onFork: forkSession, onArchive: archiveSession === undefined ? undefined : archiveWorktreeSession }))] }, record.worktreeId));\n}\n//# sourceMappingURL=ArchivedWorktree.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconArchiveOutline20 } from '../../dsh-icons.js';\nimport { aggregateSessionStatus } from '../../session/session-view.js';\nimport { filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { ArchivedWorktree } from './ArchivedWorktree.js';\nimport { WorktreeGroupRow } from './rows.js';\nimport { bindingIdsFor } from '../selectors.js';\nexport function ArchivedWorktrees({ expansion, props, source, ordering, lifecycle, mutation, menus, read, lifecycleState, drag, session, native, workspace, archivedWorktrees, bindings, workspaceMatchesQuery, }) {\n const { isCurrentSessionReveal, expandedArchivedWorkspaces, toggleArchivedWorkspace } = expansion;\n const { t } = props;\n const { sessions, archivedSessionIds, sessionPresentations } = source;\n const archivedKey = 'archived:' + workspace.workspaceId;\n const isArchivedAutoExpanded = isCurrentSessionReveal(archivedKey);\n const isArchivedExpanded = expandedArchivedWorkspaces[workspace.workspaceId] === true || isArchivedAutoExpanded;\n return (_jsxs(\"div\", { className: styles.archivedGroup, \"data-archived-group\": true, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"archived-group\", label: `${t('worktree.archivedGroup')} (${archivedWorktrees.length})`, expanded: isArchivedExpanded, groupActivityStatus: aggregateSessionStatus(filterArchivedSessionIds(archivedWorktrees.flatMap((record) => bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId))), archivedSessionIds), sessionPresentations), icon: _jsx(IconArchiveOutline20, { size: 16 }), workspaceTitle: workspace.title, onToggle: () => {\n toggleArchivedWorkspace(workspace.workspaceId);\n } }), isArchivedExpanded && (_jsx(\"div\", { className: styles.treeChildren, children: archivedWorktrees.map((record) => (_jsx(ArchivedWorktree, { record: record, source: source, expansion: expansion, ordering: ordering, props: props, lifecycle: lifecycle, mutation: mutation, menus: menus, read: read, lifecycleState: lifecycleState, drag: drag, session: session, native: native, bindings: bindings, workspaceMatchesQuery: workspaceMatchesQuery, workspace: workspace }, record.worktreeId))) }))] }));\n}\n//# sourceMappingURL=ArchivedWorktrees.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { IconBranchOutline16 } from '../../dsh-icons.js';\nimport { openWorktreeSession } from '../../view/navigation.js';\nimport { filterVisibleSessionIds, aggregateSessionStatus, sessionMatchesQuery, } from '../../session/session-view.js';\nimport { unboundSessionIds, workspaceSessionIds } from '../../view/view-mode.js';\nimport { isMainExpanded, isWorkspaceExpanded } from '../../view/worktree-expand-state.js';\nimport { createNumberedWorktreeName, filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport { createMainWorktreeRecord } from '../../dashboard/dashboard-selection.js';\nimport styles from '../../worktree.css';\nimport { ActiveWorktree } from './ActiveWorktree.js';\nimport { ArchivedWorktrees } from './ArchivedWorktrees.js';\nimport { WorktreeGroupRow, WorktreeSessionGroup, WorktreeWorkspaceRow } from './rows.js';\nimport { includesText, isSessionGroupAutoExpanded, workspaceMatches } from '../selectors.js';\nexport function WorkspaceTree({ props, read, source, expansion, ordering, drag, mutation, menus, registration, native, lifecycle, session, lifecycleState, }) {\n const { t, createMainSession, openSession, renameSession, forkSession, archiveSession } = props;\n const { viewByWorkspace } = read;\n const { expandSnapshot, workspaces, sessions, archivedSessionIds, sessionPresentations, currentSessionId, } = source;\n const { isCurrentSessionReveal, query, expandedSessionGroups, toggleWorkspace, toggleMain, toggleSessionGroup, } = expansion;\n const { orderedSessionIdsByAccount } = ordering;\n const { worktreeDrag, workspaceDrag, workspaceDropCommitted, setWorkspaceDrag, commitWorkspaceDrag, sessionDrag, sessionDropCommitted, setSessionDrag, commitSessionDrag, } = drag;\n const { actionPending } = mutation;\n const { openWorkspaceMenuId, setOpenWorkspaceMenuId, openMainMenuId, setOpenMainMenuId } = menus;\n const { openWorktreeCreator } = registration;\n const { openWorkspaceRename, openWorkspaceDelete, openSessionRename, archiveWorktreeSession } = native;\n const visibleWorkspaces = workspaces.items.filter((workspace) => workspaceMatches(workspace, viewByWorkspace.get(workspace.workspaceId), sessions, query));\n return (_jsx(_Fragment, { children: _jsx(\"div\", { className: styles.workspaceList, children: visibleWorkspaces.length === 0 ? (_jsx(\"p\", { className: styles.empty, children: t('workspace.noMatches') })) : (visibleWorkspaces.map((workspace) => {\n const view = viewByWorkspace.get(workspace.workspaceId);\n const currentBranch = view?.branches.find((branch) => branch.isCurrent)?.name;\n const mainLabel = currentBranch === undefined\n ? t('worktree.main')\n : t('worktree.mainWithBranch', { branch: currentBranch });\n const expanded = isWorkspaceExpanded(expandSnapshot, workspace.workspaceId) ||\n isCurrentSessionReveal('workspace:' + workspace.workspaceId);\n const workspaceMatchesQuery = includesText(workspace.title, query);\n const allWorkspaceSessionIds = filterArchivedSessionIds(workspaceSessionIds(workspaces, workspace.workspaceId, sessions.ids), archivedSessionIds);\n const workspaceActivitySessionIds = filterVisibleSessionIds(allWorkspaceSessionIds, sessions);\n const workspaceGroupActivityStatus = aggregateSessionStatus(workspaceActivitySessionIds, sessionPresentations);\n const bindings = view?.bindings ?? [];\n const boundSessionIds = new Set(bindings.map((binding) => binding.sessionId));\n const mainSessionIds = filterVisibleSessionIds(unboundSessionIds(allWorkspaceSessionIds, [...boundSessionIds]), sessions);\n const mainGroupKey = `main:${workspace.workspaceId}`;\n const orderedMainSessionIds = orderedSessionIdsByAccount.get(mainGroupKey) ?? mainSessionIds;\n const visibleMainSessionIds = mainSessionIds.filter((sessionId) => workspaceMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const orderedVisibleMainSessionIds = orderedMainSessionIds.filter((sessionId) => workspaceMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const mainExpanded = isMainExpanded(expandSnapshot, workspace.workspaceId) ||\n isCurrentSessionReveal('main:' + workspace.workspaceId);\n const sessionIds = orderedVisibleMainSessionIds.length === visibleMainSessionIds.length\n ? orderedVisibleMainSessionIds\n : visibleMainSessionIds;\n const mainSessionGroupAutoExpanded = isSessionGroupAutoExpanded(sessionIds, currentSessionId, isCurrentSessionReveal('session-group:' + mainGroupKey));\n const mainSessionGroupExpanded = expandedSessionGroups[mainGroupKey] === true || mainSessionGroupAutoExpanded;\n const worktrees = view?.worktrees ?? [];\n const activeWorktrees = worktrees.filter((record) => record.status === 'active');\n const archivedWorktrees = worktrees.filter((record) => record.status === 'removed');\n const workspaceWorktreeNames = [\n ...(view?.branches.map((branch) => branch.name) ?? []),\n ...(view?.worktrees.map((worktree) => worktree.branch) ?? []),\n ];\n const sameWorkspaceWorktreeDrag = worktreeDrag?.workspaceId === workspace.workspaceId;\n return (_jsxs(\"section\", { className: styles.workspaceGroup, \"data-workspace-id\": workspace.workspaceId, children: [_jsx(WorktreeWorkspaceRow, { t: t, workspace: workspace, expanded: expanded, groupActivityStatus: workspaceGroupActivityStatus, actionPending: actionPending, menuOpen: openWorkspaceMenuId === workspace.workspaceId, drag: {\n active: workspaceDrag !== undefined,\n marker: workspaceDrag?.over?.workspaceId === workspace.workspaceId\n ? workspaceDrag.over.half\n : null,\n start: () => {\n workspaceDropCommitted.current = false;\n setWorkspaceDrag({ workspaceId: workspace.workspaceId, over: null });\n },\n hover: (half) => {\n setWorkspaceDrag((current) => current === undefined\n ? current\n : {\n ...current,\n over: { workspaceId: workspace.workspaceId, half },\n });\n },\n drop: (half) => {\n if (workspaceDrag === undefined)\n return;\n commitWorkspaceDrag(workspaceDrag, {\n workspaceId: workspace.workspaceId,\n half,\n });\n },\n end: () => {\n if (workspaceDrag?.over !== null && workspaceDrag?.over !== undefined) {\n commitWorkspaceDrag(workspaceDrag, workspaceDrag.over);\n }\n else {\n setWorkspaceDrag(undefined);\n }\n workspaceDropCommitted.current = false;\n },\n }, onToggle: () => {\n toggleWorkspace(workspace.workspaceId);\n }, onCreateWorktree: () => {\n openWorktreeCreator(workspace);\n }, onRename: () => {\n openWorkspaceRename(workspace);\n }, onDelete: () => {\n openWorkspaceDelete(workspace);\n }, onMenuOpenChange: (open) => {\n setOpenWorkspaceMenuId(open ? workspace.workspaceId : undefined);\n } }), expanded && (_jsxs(\"div\", { className: styles.treeChildren, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"main\", label: mainLabel, expanded: mainExpanded, groupActivityStatus: aggregateSessionStatus(mainSessionIds, sessionPresentations), icon: _jsx(IconBranchOutline16, {}), workspaceTitle: workspace.title, onToggle: () => {\n toggleMain(workspace.workspaceId);\n }, showDashboardAction: props.openDashboard !== undefined, menu: {\n onDashboard: props.openDashboard === undefined\n ? undefined\n : () => props.openDashboard?.(createMainWorktreeRecord(workspace, currentBranch)),\n open: openMainMenuId === workspace.workspaceId,\n label: mainLabel,\n copyPath: workspace.path,\n showCreate: currentBranch !== undefined,\n showRemove: false,\n disabled: actionPending,\n onOpenChange: (open) => {\n setOpenMainMenuId(open ? workspace.workspaceId : undefined);\n },\n onCreateWorktree: currentBranch === undefined\n ? undefined\n : () => {\n openWorktreeCreator(workspace, {\n baseBranch: currentBranch,\n newBranch: createNumberedWorktreeName(currentBranch, workspaceWorktreeNames),\n });\n },\n }, onCreateSession: createMainSession === undefined\n ? undefined\n : () => {\n createMainSession(workspace.workspaceId);\n } }), mainExpanded && (_jsx(WorktreeSessionGroup, { t: t, groupKey: mainGroupKey, sessionIds: sessionIds, workspaceId: workspace.workspaceId, currentSessionId: currentSessionId, expanded: mainSessionGroupExpanded, actionPending: actionPending, sessions: sessions, sessionPresentations: sessionPresentations, dragState: sessionDrag, onToggleExpanded: () => {\n toggleSessionGroup(mainGroupKey, mainSessionGroupAutoExpanded);\n }, onStartDrag: (groupKey, sessionId) => {\n sessionDropCommitted.current = false;\n setSessionDrag({ groupKey, sessionId, over: null });\n }, onHoverDrag: (sessionId, half) => {\n setSessionDrag((current) => current === undefined\n ? current\n : { ...current, over: { sessionId, half } });\n }, onClearDrag: () => {\n setSessionDrag(undefined);\n }, onFinishDrag: () => {\n sessionDropCommitted.current = false;\n }, onCommitDrag: commitSessionDrag, onOpen: (sessionId) => {\n openWorktreeSession({ open: openSession }, sessionId);\n }, onRename: renameSession === undefined ? undefined : openSessionRename, onFork: forkSession, onArchive: archiveSession === undefined ? undefined : archiveWorktreeSession })), activeWorktrees.length === 0 && archivedWorktrees.length === 0 && (_jsx(\"p\", { className: styles.emptyNested, children: t('worktree.noWorktrees') })), activeWorktrees.map((record) => (_jsx(ActiveWorktree, { record: record, source: source, expansion: expansion, ordering: ordering, props: props, lifecycle: lifecycle, session: session, menus: menus, mutation: mutation, read: read, registration: registration, lifecycleState: lifecycleState, drag: drag, native: native, bindings: bindings, workspaceMatchesQuery: workspaceMatchesQuery, workspace: workspace, workspaceWorktreeNames: workspaceWorktreeNames, sameWorkspaceWorktreeDrag: sameWorkspaceWorktreeDrag, activeWorktrees: activeWorktrees }, record.worktreeId))), archivedWorktrees.length > 0 && (_jsx(ArchivedWorktrees, { expansion: expansion, props: props, source: source, ordering: ordering, lifecycle: lifecycle, mutation: mutation, menus: menus, read: read, lifecycleState: lifecycleState, drag: drag, session: session, native: native, workspace: workspace, archivedWorktrees: archivedWorktrees, bindings: bindings, workspaceMatchesQuery: workspaceMatchesQuery }))] }))] }, workspace.workspaceId));\n })) }) }));\n}\n//# sourceMappingURL=WorkspaceTree.js.map","/** Resolved notices leave the queue; unchanged snapshots never announce twice. */\nexport function reconcileNotifications(state, notices) {\n const unique = [...new Map(notices.map((notice) => [notice.key, notice])).values()];\n const active = new Set(unique.map((notice) => notice.key));\n const seen = new Set(state.seen);\n const pending = state.pending.filter((notice) => active.has(notice.key));\n for (const notice of unique) {\n if (!seen.has(notice.key))\n pending.push(notice);\n }\n const nextSeen = [...active];\n if (nextSeen.length === state.seen.length &&\n nextSeen.every((key, index) => key === state.seen[index]) &&\n pending.length === state.pending.length &&\n pending.every((notice, index) => notice === state.pending[index]))\n return state;\n return { seen: nextSeen, pending };\n}\n//# sourceMappingURL=notification-queue.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Toast } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useCallback, useEffect, useState } from 'react';\nimport { reconcileNotifications, } from '../notification-queue.js';\n/** One native toast at a time; recovery controls remain available after it fades. */\nexport function NotificationToasts({ notices, detailsLabel, }) {\n const [queue, setQueue] = useState({ seen: [], pending: [] });\n useEffect(() => {\n setQueue((current) => reconcileNotifications(current, notices));\n }, [notices]);\n const current = queue.pending[0];\n const key = current?.key;\n const onDone = useCallback(() => {\n setQueue((state) => ({\n ...state,\n pending: state.pending.filter((notice) => notice.key !== key),\n }));\n }, [key]);\n if (current === undefined)\n return null;\n const text = current.text.length > 240 ? current.text.slice(0, 240) + '…' : current.text;\n return (_jsx(Toast, { text: text + ' · ' + detailsLabel, holdMs: 6000, onDone: onDone }, current.key));\n}\n//# sourceMappingURL=NotificationToasts.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { formatWorktreePermissionNotice, formatWorktreeViewError, } from '../../view/worktree-error-copy.js';\nimport styles from '../../worktree.css';\nimport { forkRecoveryError } from '../shared.js';\nimport { WorkspaceTree } from './WorkspaceTree.js';\nimport { NotificationToasts } from './NotificationToasts.js';\nexport function SurfaceContent({ source, props, lifecycle, mutation, session, read, expansion, ordering, drag, menus, registration, native, lifecycleState, }) {\n const { permissionNoticeSnapshot, forkRecoverySnapshot } = source;\n const { t, retryForkSession, openSession } = props;\n const { permissionRetryTarget, retryCleanupPermissions, recoveryAction } = lifecycle;\n const { actionPending, actionError, setActionError } = mutation;\n const { forkRetryKey, retryForkBinding, pendingSessionBinding, pendingSessionArchived, retrySessionBinding, setPendingSessionBinding, } = session;\n const { refresh, readState } = read;\n const notices = [];\n const addNotice = (scope, text) => {\n notices.push({ key: JSON.stringify([scope, text]), text });\n };\n if (permissionNoticeSnapshot !== undefined) {\n addNotice('permission:' +\n permissionNoticeSnapshot.workspaceId +\n ':' +\n permissionNoticeSnapshot.worktreeId, formatWorktreePermissionNotice(permissionNoticeSnapshot.result, t));\n }\n for (const recovery of forkRecoverySnapshot.pending) {\n addNotice('fork:' + recovery.key, formatWorktreeViewError(forkRecoveryError(recovery), t));\n }\n if (actionError !== undefined) {\n addNotice('action:' + JSON.stringify(actionError.details), formatWorktreeViewError(actionError, t));\n }\n if (readState.targetError !== undefined) {\n addNotice('target:' + JSON.stringify(readState.targetError.workspaceIds), formatWorktreeViewError(readState.targetError.error, t));\n }\n if (readState.status === 'error' && readState.error !== undefined) {\n addNotice('read', formatWorktreeViewError(readState.error, t));\n }\n return (_jsxs(\"div\", { ref: expansion.contentRef, className: styles.content, tabIndex: 0, children: [_jsx(NotificationToasts, { notices: notices, detailsLabel: t('notice.details') }), notices.length > 0 && (_jsxs(\"details\", { className: styles.notificationDetails, children: [_jsxs(\"summary\", { children: [t('notice.details'), \" (\", notices.length, \")\"] }), permissionNoticeSnapshot !== undefined && (_jsxs(\"div\", { className: styles.notice, role: \"status\", \"data-worktree-permission-notice\": true, children: [_jsx(\"p\", { className: styles.message, children: formatWorktreePermissionNotice(permissionNoticeSnapshot.result, t) }), permissionRetryTarget !== undefined && (_jsx(\"button\", { type: \"button\", className: styles.retryButton, disabled: actionPending, onClick: retryCleanupPermissions, children: t('action.retry') }))] })), forkRecoverySnapshot.pending.map((recovery) => {\n const recoveryViewError = forkRecoveryError(recovery);\n return (_jsxs(\"div\", { className: styles.error, role: \"alert\", \"data-fork-recovery\": recovery.key, children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(recoveryViewError, t) }), _jsxs(\"div\", { className: styles.recoveryActions, children: [retryForkSession !== undefined && recoveryViewError.retryable && (_jsx(\"button\", { type: \"button\", className: styles.actionButton, disabled: forkRetryKey !== undefined, onClick: () => {\n void retryForkBinding(recovery.key);\n }, children: t('action.retryBinding') })), _jsx(\"button\", { type: \"button\", className: styles.actionButton, disabled: forkRetryKey !== undefined, onClick: () => {\n openSession(recovery.childSessionId);\n }, children: t('action.openCreatedSession') })] })] }, recovery.key));\n }), actionError !== undefined && (_jsxs(\"div\", { className: styles.error, role: \"alert\", \"data-worktree-error\": true, children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(actionError, t) }), recoveryAction(actionError), pendingSessionBinding !== undefined && (_jsxs(\"div\", { className: styles.recoveryActions, children: [_jsx(\"button\", { type: \"button\", className: styles.actionButton, disabled: actionPending || pendingSessionArchived, onClick: () => {\n void retrySessionBinding();\n }, children: t('action.retryBinding') }), !pendingSessionBinding.permissionRequired && (_jsx(\"button\", { type: \"button\", className: styles.actionButton, disabled: actionPending, onClick: () => {\n const sessionId = pendingSessionBinding.sessionId;\n setPendingSessionBinding(undefined);\n setActionError(undefined);\n openSession(sessionId);\n }, children: t('action.openCreatedSession') }))] })), actionError.retryable && (_jsx(\"button\", { type: \"button\", className: styles.retryButton, onClick: () => {\n setActionError(undefined);\n void refresh({ scope: { kind: 'global' } });\n }, children: t('action.retry') }))] })), readState.targetError !== undefined && (_jsxs(\"div\", { className: styles.error, role: \"alert\", \"data-worktree-target-error\": true, children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(readState.targetError.error, t) }), recoveryAction(readState.targetError.error), _jsx(\"button\", { type: \"button\", className: styles.retryButton, onClick: () => {\n void refresh({\n scope: {\n kind: 'workspaces',\n workspaceIds: readState.targetError.workspaceIds,\n },\n preserveCurrent: true,\n });\n }, children: t('action.retry') })] })), readState.status === 'error' && readState.error !== undefined ? (_jsxs(\"div\", { className: styles.error, role: \"alert\", \"data-worktree-error\": true, children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(readState.error, t) }), recoveryAction(readState.error), _jsx(\"button\", { type: \"button\", className: styles.retryButton, onClick: () => {\n void refresh({ scope: { kind: 'global' } });\n }, children: t('action.retry') })] })) : null] })), readState.status === 'loading' && _jsx(\"p\", { className: styles.message, children: t('status.loading') }), readState.status === 'ready' ? (_jsx(WorkspaceTree, { props: props, read: read, source: source, expansion: expansion, ordering: ordering, drag: drag, mutation: mutation, menus: menus, registration: registration, native: native, lifecycle: lifecycle, session: session, lifecycleState: lifecycleState })) : null] }));\n}\n//# sourceMappingURL=SurfaceContent.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Tooltip } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconCloseFill14, IconCloseOutline16, IconProjectAddOutline16, IconSearchOutline16, } from '../../dsh-icons.js';\nimport styles from '../../worktree.css';\nimport { cx, IconCollapseAll16 } from '../shared.js';\nexport function SurfaceHeader({ expansion, props, source, read, mutation }) {\n const { searchExpanded, searchRoot, setSearchExpanded, searchInput, searchQuery, setSearchQuery, setExpandedArchivedWorkspaces, setExpandedSessionGroups, setCurrentSessionReveal, currentSessionLocation, } = expansion;\n const { t, expandState, createWorkspace, actions } = props;\n const { workspaceIds } = source;\n const { readState } = read;\n const { runMutation } = mutation;\n const currentWorkspaceId = currentSessionLocation?.workspaceId;\n const currentWorktreeId = currentSessionLocation?.kind === 'worktree' ? currentSessionLocation.worktreeId : undefined;\n const targetWorkspaceIds = workspaceIds.filter((id) => id !== currentWorkspaceId);\n const worktreeIds = readState.views\n .flatMap((view) => view.worktrees.map((record) => record.worktreeId))\n .filter((worktreeId) => worktreeId !== currentWorktreeId);\n return (_jsx(_Fragment, { children: _jsxs(\"header\", { className: styles.header, children: [_jsx(\"span\", { className: cx(styles.title, searchExpanded && styles.titleHidden), children: t('worktree.title') }), _jsx(\"div\", { className: cx(styles.searchSlot, searchExpanded && styles.searchSlotExpanded), children: _jsxs(\"div\", { ref: searchRoot, className: cx(styles.search, searchExpanded && styles.searchExpanded), onClick: () => {\n if (!searchExpanded) {\n setSearchExpanded(true);\n searchInput.current?.focus();\n }\n }, children: [_jsx(Tooltip, { label: t('workspace.search'), side: \"bottom\", delayMs: 500, disabled: searchExpanded, children: _jsx(\"button\", { type: \"button\", className: styles.searchButton, \"aria-label\": t('workspace.search'), \"aria-expanded\": searchExpanded, onClick: () => {\n setSearchExpanded(true);\n searchInput.current?.focus();\n }, children: _jsx(IconSearchOutline16, { size: searchExpanded ? 12 : 14 }) }) }), _jsx(\"input\", { ref: searchInput, className: styles.searchInput, type: \"text\", \"aria-label\": t('workspace.search'), placeholder: t('workspace.search'), value: searchQuery, tabIndex: searchExpanded ? 0 : -1, onChange: (event) => {\n setSearchQuery(event.currentTarget.value);\n }, onKeyDown: (event) => {\n if (event.key === 'Escape') {\n setSearchQuery('');\n setSearchExpanded(false);\n }\n } }), searchExpanded && (_jsx(\"button\", { type: \"button\", className: styles.clearButton, \"aria-label\": t('search.clear'), onClick: (event) => {\n event.stopPropagation();\n setSearchQuery('');\n setSearchExpanded(false);\n }, children: _jsx(IconCloseFill14, {}) }))] }) }), _jsxs(\"div\", { className: cx(styles.headerActions, searchExpanded && styles.headerActionsHidden), children: [_jsx(Tooltip, { label: t('workspace.collapseAll'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"aria-label\": t('workspace.collapseAll'), onClick: () => {\n // Keep the current Session's workspace and worktree expanded in state,\n // while collapsing all other unrelated workspaces and worktrees, and collapsing all Main groups.\n if (currentSessionLocation === undefined)\n setCurrentSessionReveal(undefined);\n expandState.actions.collapseAll(targetWorkspaceIds, worktreeIds, workspaceIds);\n setExpandedArchivedWorkspaces({});\n setExpandedSessionGroups({});\n }, children: _jsx(IconCollapseAll16, {}) }) }), _jsx(Tooltip, { label: t('workspace.add'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"aria-label\": t('workspace.add'), onClick: () => {\n if (createWorkspace !== undefined)\n void runMutation(createWorkspace);\n }, children: _jsx(IconProjectAddOutline16, {}) }) }), _jsx(Tooltip, { label: t('mode.exit'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.closeButton, \"aria-label\": t('mode.exit'), onClick: () => {\n actions.setViewMode('workspace-session');\n }, children: _jsx(IconCloseOutline16, {}) }) })] })] }) }));\n}\n//# sourceMappingURL=SurfaceHeader.js.map","/** Browser-only persistence key; this state never crosses the DSH or sidecar boundary. */\nexport const WORKTREE_SESSION_ORDER_STORAGE_KEY = 'clutch-dsh-worktree.session-order';\nfunction emptyState() {\n return { accounts: {} };\n}\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction isValidTimestamp(value) {\n return typeof value === 'number' && Number.isFinite(value);\n}\nfunction normalizeIds(value) {\n if (!Array.isArray(value))\n return [];\n const seen = new Set();\n const ids = [];\n for (const id of value) {\n if (typeof id !== 'string' || id.length === 0 || seen.has(id))\n continue;\n seen.add(id);\n ids.push(id);\n }\n return ids;\n}\nfunction normalizeAccount(value) {\n if (!isRecord(value))\n return undefined;\n const order = normalizeIds(value.order);\n const allowed = new Set(order);\n const observedUpdatedAt = {};\n if (isRecord(value.observedUpdatedAt)) {\n for (const [id, timestamp] of Object.entries(value.observedUpdatedAt)) {\n if (allowed.has(id) && isValidTimestamp(timestamp))\n observedUpdatedAt[id] = timestamp;\n }\n }\n return { order, observedUpdatedAt };\n}\n/** Normalize persisted state without trusting any browser-local JSON shape. */\nexport function normalizeWorktreeSessionOrderState(value) {\n if (!isRecord(value) || !isRecord(value.accounts))\n return emptyState();\n const accounts = {};\n for (const [accountKey, account] of Object.entries(value.accounts)) {\n if (accountKey.length === 0)\n continue;\n const normalized = normalizeAccount(account);\n if (normalized !== undefined)\n accounts[accountKey] = normalized;\n }\n return { accounts };\n}\nfunction validIds(ids) {\n return normalizeIds([...ids]);\n}\nfunction sameRecord(left, right) {\n if (left === undefined)\n return false;\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n if (leftKeys.length !== rightKeys.length)\n return false;\n return rightKeys.every((key) => left[key] === right[key]);\n}\nfunction sameAccount(left, right) {\n return (left !== undefined &&\n left.order.length === right.order.length &&\n left.order.every((id, index) => id === right.order[index]) &&\n sameRecord(left.observedUpdatedAt, right.observedUpdatedAt));\n}\nfunction orderByUpdatedAt(ids, updatedAtById) {\n return ids\n .map((id, index) => ({ id, index, timestamp: updatedAtById[id] }))\n .sort((left, right) => {\n const leftValid = isValidTimestamp(left.timestamp);\n const rightValid = isValidTimestamp(right.timestamp);\n if (leftValid && rightValid) {\n const difference = Number(right.timestamp) - Number(left.timestamp);\n if (difference !== 0)\n return difference;\n }\n if (leftValid !== rightValid)\n return leftValid ? -1 : 1;\n return left.index - right.index;\n })\n .map(({ id }) => id);\n}\n/** Native-style activity order transition driven by the latest Session timestamp. */\nexport function nextSessionOrderAccount(input) {\n const baseIds = validIds(input.baseIds);\n const previous = input.previous;\n if (previous === undefined) {\n const observedUpdatedAt = {};\n for (const id of baseIds) {\n const timestamp = input.updatedAtById[id];\n if (isValidTimestamp(timestamp))\n observedUpdatedAt[id] = timestamp;\n }\n return { order: orderByUpdatedAt(baseIds, input.updatedAtById), observedUpdatedAt };\n }\n const available = new Set(baseIds);\n const order = [];\n const seen = new Set();\n for (const id of previous.order) {\n if (available.has(id) && !seen.has(id)) {\n seen.add(id);\n order.push(id);\n }\n }\n for (const id of baseIds) {\n if (!seen.has(id)) {\n seen.add(id);\n order.push(id);\n }\n }\n const observedUpdatedAt = {};\n const previousIds = new Set(previous.order);\n const newlyObserved = [];\n const promoted = [];\n for (const [index, id] of order.entries()) {\n if (!previousIds.has(id))\n newlyObserved.push(id);\n const previousTimestamp = previous.observedUpdatedAt[id];\n const timestamp = input.updatedAtById[id];\n if (isValidTimestamp(previousTimestamp))\n observedUpdatedAt[id] = previousTimestamp;\n if (isValidTimestamp(timestamp)) {\n if (!isValidTimestamp(previousTimestamp) || timestamp > previousTimestamp) {\n if (isValidTimestamp(previousTimestamp)) {\n promoted.push({ id, timestamp, index });\n }\n observedUpdatedAt[id] = Math.max(observedUpdatedAt[id] ?? timestamp, timestamp);\n }\n }\n }\n const orderedNewlyObserved = orderByUpdatedAt(newlyObserved, input.updatedAtById);\n promoted.sort((left, right) => right.timestamp - left.timestamp || left.index - right.index);\n const promotedIds = new Set([\n ...orderedNewlyObserved,\n ...promoted.map(({ id }) => id),\n ]);\n return {\n order: [\n ...orderedNewlyObserved,\n ...promoted.map(({ id }) => id),\n ...order.filter((id) => !promotedIds.has(id)),\n ],\n observedUpdatedAt,\n };\n}\n/** Apply a successful manual drag without dropping IDs hidden by search. */\nexport function reorderSessionIds(order, sessionId, overSessionId, half) {\n const next = order.filter((id) => id !== sessionId);\n const targetIndex = next.indexOf(overSessionId);\n if (targetIndex === -1)\n return [...order];\n next.splice(half === 'before' ? targetIndex : targetIndex + 1, 0, sessionId);\n return next;\n}\nfunction cloneAccount(account) {\n return {\n order: [...account.order],\n observedUpdatedAt: { ...account.observedUpdatedAt },\n };\n}\n/** Create one apply-scoped, browser-local Session ordering store. */\nexport function createWorktreeSessionOrderStore(snapshotStoreFactory) {\n let store;\n try {\n store = snapshotStoreFactory(emptyState(), {\n persist: { name: WORKTREE_SESSION_ORDER_STORAGE_KEY },\n });\n }\n catch {\n store = snapshotStoreFactory(emptyState());\n }\n store.set(normalizeWorktreeSessionOrderState(store.getSnapshot()));\n let disposed = false;\n const actions = {\n reconcile: (accountKey, baseIds, updatedAtById) => {\n if (disposed || accountKey.length === 0)\n return;\n store.update((draft) => {\n const next = nextSessionOrderAccount({\n baseIds,\n updatedAtById,\n previous: draft.accounts[accountKey],\n });\n if (sameAccount(draft.accounts[accountKey], next))\n return;\n draft.accounts[accountKey] = cloneAccount(next);\n });\n },\n setOrder: (accountKey, order, updatedAtById) => {\n if (disposed || accountKey.length === 0)\n return;\n store.update((draft) => {\n const current = draft.accounts[accountKey] ?? {\n order: [],\n observedUpdatedAt: {},\n };\n const observedUpdatedAt = { ...current.observedUpdatedAt };\n if (updatedAtById !== undefined) {\n for (const [id, timestamp] of Object.entries(updatedAtById)) {\n if (isValidTimestamp(timestamp)) {\n observedUpdatedAt[id] = Math.max(observedUpdatedAt[id] ?? timestamp, timestamp);\n }\n }\n }\n const next = {\n order: validIds(order),\n observedUpdatedAt,\n };\n if (sameAccount(current, next))\n return;\n draft.accounts[accountKey] = next;\n });\n },\n retain: (accountKeys) => {\n if (disposed)\n return;\n const allowed = new Set(accountKeys);\n if (allowed.size === 0)\n return;\n store.update((draft) => {\n for (const accountKey of Object.keys(draft.accounts)) {\n if (!allowed.has(accountKey))\n delete draft.accounts[accountKey];\n }\n });\n },\n };\n return Object.assign(store, {\n actions,\n dispose: () => {\n disposed = true;\n },\n });\n}\n//# sourceMappingURL=worktree-session-order.js.map","import { useRef, useState } from 'react';\nimport { reorderSessionIds } from '../../session/worktree-session-order.js';\nimport { resolveWorktreeMove, toRetryableWorktreeOrderError, toWorktreeViewError, } from '../../view/worktree-view.js';\nimport { updatedAtById } from '../shared.js';\n/**\n * Persist one visual Session move without crossing the Worktree membership boundary.\n * Worktree Sessions are plugin-local projections, while Main Sessions remain native DSH members.\n */\nexport async function commitSessionOrder(input) {\n if (input.groupKey.startsWith('worktree:')) {\n input.setOrder(input.groupKey, input.nextOrder, input.updatedAtById);\n return;\n }\n if (input.insertSessionBefore === undefined) {\n throw new Error('Native Session ordering is unavailable');\n }\n await input.insertSessionBefore(input.workspaceId, input.sessionId, input.beforeSessionId);\n input.setOrder(input.groupKey, input.nextOrder, input.updatedAtById);\n}\n/** Resolve a visual drop against the full account order, retaining filtered IDs. */\nexport function resolveSessionDragOrder(input) {\n const targetIndex = input.visibleSessionIds.indexOf(input.over.sessionId);\n const sourceIndex = input.visibleSessionIds.indexOf(input.sessionId);\n if (targetIndex === -1 || sourceIndex === -1)\n return undefined;\n const currentOrder = [...input.currentOrder];\n const knownIds = new Set(currentOrder);\n for (const id of input.visibleSessionIds) {\n if (!knownIds.has(id)) {\n knownIds.add(id);\n currentOrder.push(id);\n }\n }\n const nextOrder = reorderSessionIds(currentOrder, input.sessionId, input.over.sessionId, input.over.half);\n if (nextOrder.length === currentOrder.length &&\n nextOrder.every((id, index) => id === currentOrder[index])) {\n return undefined;\n }\n const nextIndex = nextOrder.indexOf(input.sessionId);\n if (nextIndex === -1)\n return undefined;\n return {\n beforeSessionId: nextOrder[nextIndex + 1],\n nextOrder,\n };\n}\nexport function useDragActions({ source, orderedSessionIdsByAccount, props, mutation, read, }) {\n const { workspaces, sessionOrderSnapshot } = source;\n const { insertWorkspaceBefore, insertSessionBefore, sessionOrder, insertWorktreeBefore } = props;\n const { setActionError } = mutation;\n const { refresh } = read;\n const [workspaceDrag, setWorkspaceDrag] = useState();\n const workspaceDropCommitted = useRef(false);\n const [sessionDrag, setSessionDrag] = useState();\n const sessionDropCommitted = useRef(false);\n const [worktreeDrag, setWorktreeDrag] = useState();\n const worktreeDropCommitted = useRef(false);\n const commitWorkspaceDrag = (activeDrag, over) => {\n if (workspaceDropCommitted.current)\n return;\n workspaceDropCommitted.current = true;\n setWorkspaceDrag(undefined);\n const rows = workspaces.items;\n const targetIndex = rows.findIndex((workspace) => workspace.workspaceId === over.workspaceId);\n const sourceIndex = rows.findIndex((workspace) => workspace.workspaceId === activeDrag.workspaceId);\n if (targetIndex === -1 || sourceIndex === -1)\n return;\n const beforeWorkspaceId = over.half === 'before' ? over.workspaceId : rows[targetIndex + 1]?.workspaceId;\n const anchorIndex = beforeWorkspaceId === undefined\n ? rows.length\n : rows.findIndex((workspace) => workspace.workspaceId === beforeWorkspaceId);\n if (beforeWorkspaceId === activeDrag.workspaceId ||\n anchorIndex === sourceIndex ||\n anchorIndex === sourceIndex + 1) {\n return;\n }\n if (insertWorkspaceBefore === undefined) {\n setActionError({\n code: 'WORKSPACE_ORDER_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionError(undefined);\n void insertWorkspaceBefore(activeDrag.workspaceId, beforeWorkspaceId).catch((error) => {\n setActionError(toWorktreeViewError(error));\n });\n };\n const commitSessionDrag = (activeDrag, over, sessionIds, workspaceId) => {\n if (sessionDropCommitted.current)\n return;\n sessionDropCommitted.current = true;\n setSessionDrag(undefined);\n const currentOrder = orderedSessionIdsByAccount.get(activeDrag.groupKey) ??\n sessionOrderSnapshot.accounts[activeDrag.groupKey]?.order ??\n sessionIds;\n const move = resolveSessionDragOrder({\n visibleSessionIds: sessionIds,\n currentOrder,\n sessionId: activeDrag.sessionId,\n over,\n });\n if (move === undefined)\n return;\n const isWorktreeSession = activeDrag.groupKey.startsWith('worktree:');\n if (!isWorktreeSession && insertSessionBefore === undefined) {\n setActionError({\n code: 'SESSION_ORDER_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionError(undefined);\n void commitSessionOrder({\n groupKey: activeDrag.groupKey,\n workspaceId,\n sessionId: activeDrag.sessionId,\n beforeSessionId: move.beforeSessionId,\n nextOrder: move.nextOrder,\n insertSessionBefore,\n setOrder: sessionOrder.actions.setOrder,\n updatedAtById: updatedAtById(sessionIds, source.sessions),\n }).catch((error) => {\n setActionError(toWorktreeViewError(error));\n });\n };\n const commitWorktreeDrag = (activeDrag, over, worktreeIds, workspaceId) => {\n if (worktreeDropCommitted.current)\n return;\n worktreeDropCommitted.current = true;\n setWorktreeDrag(undefined);\n if (activeDrag.workspaceId !== workspaceId)\n return;\n const move = resolveWorktreeMove(worktreeIds, activeDrag.worktreeId, over.worktreeId, over.half);\n if (move === undefined)\n return;\n if (insertWorktreeBefore === undefined) {\n setActionError({\n code: 'WORKTREE_ORDER_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionError(undefined);\n void insertWorktreeBefore(workspaceId, activeDrag.worktreeId, move.beforeWorktreeId)\n .then(() => refresh({\n scope: { kind: 'workspace', workspaceId },\n preserveCurrent: true,\n invalidateContext: false,\n }))\n .catch((error) => {\n setActionError(toRetryableWorktreeOrderError(error));\n });\n };\n return {\n workspaceDrag,\n setWorkspaceDrag,\n workspaceDropCommitted,\n sessionDrag,\n setSessionDrag,\n sessionDropCommitted,\n worktreeDrag,\n setWorktreeDrag,\n worktreeDropCommitted,\n commitWorkspaceDrag,\n commitSessionDrag,\n commitWorktreeDrag,\n };\n}\n//# sourceMappingURL=useDragActions.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { mergeWorktreeView, toWorktreeViewError, } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nexport function useLifecycleActions({ read, lifecycleState, source, props, mutation }) {\n const { viewByWorkspace, readStateRef, refresh, setReadState } = read;\n const { worktreeCleanDisk, worktreeForget, permissionRetryPending, cleanupGuard, setWorktreeBranchAdoption, worktreeBranchAdoption, branchAdoptionGuard, } = lifecycleState;\n const { mode, permissionNoticeSnapshot, workspaceIdsRef } = source;\n const { permission, permissionNotice, onPermissionNotice, manager, t, viewReader } = props;\n const { actionPending, setActionPending, runMutation, setActionError } = mutation;\n const latestLifecycleTarget = (target) => target === undefined\n ? undefined\n : viewByWorkspace\n .get(target.workspaceId)\n ?.worktrees.find((record) => record.worktreeId === target.worktreeId);\n const cleanDiskTarget = latestLifecycleTarget(worktreeCleanDisk);\n const forgetTarget = latestLifecycleTarget(worktreeForget);\n const permissionRetryTarget = mode === 'worktree' &&\n permissionNoticeSnapshot?.result.retryable === true &&\n permission?.normalizeDetachedWorktreePermissions !== undefined\n ? viewByWorkspace\n .get(permissionNoticeSnapshot.workspaceId)\n ?.worktrees.find((record) => record.worktreeId === permissionNoticeSnapshot.worktreeId &&\n record.diskCleanup === 'completed')\n : undefined;\n const retryCleanupPermissions = async () => {\n if (!permissionRetryTarget || !permission || actionPending || permissionRetryPending.current)\n return;\n const target = {\n workspaceId: permissionRetryTarget.workspaceId,\n worktreeId: permissionRetryTarget.worktreeId,\n };\n const notice = permissionNoticeSnapshot;\n const generation = cleanupGuard.current.begin();\n const isCurrent = () => cleanupGuard.current.isCurrent(generation) &&\n permissionNotice?.getSnapshot() === notice &&\n readStateRef.current.views.some((view) => view.workspaceId === target.workspaceId &&\n view.worktrees.some((record) => record.worktreeId === target.worktreeId && record.diskCleanup === 'completed'));\n if (!isCurrent())\n return;\n permissionRetryPending.current = true;\n setActionPending(true);\n try {\n const result = await permission.normalizeDetachedWorktreePermissions(target);\n if (isCurrent())\n onPermissionNotice?.(target, result);\n }\n catch {\n if (isCurrent())\n onPermissionNotice?.(target, { status: 'unverified', retryable: true });\n }\n finally {\n if (cleanupGuard.current.isCurrent(generation)) {\n permissionRetryPending.current = false;\n setActionPending(false);\n }\n }\n };\n const recoveryAction = (error) => {\n const workspaceId = error?.details?.workspaceId;\n if (!manager || error?.code !== 'WORKTREE_RECOVERY_REQUIRED' || typeof workspaceId !== 'string')\n return null;\n return (_jsx(\"button\", { type: \"button\", className: styles.retryButton, disabled: actionPending, onClick: () => {\n void runMutation(() => manager.recoverWorktrees({ workspaceId }), {\n scope: { kind: 'workspace', workspaceId },\n preserveCurrent: true,\n });\n }, children: t('worktree.retryRecovery') }));\n };\n const branchActions = (record) => ({\n onAdoptBranch: record.health === 'branch-drift' && typeof record.currentBranch === 'string'\n ? () => {\n setWorktreeBranchAdoption(record);\n setActionError(undefined);\n }\n : undefined,\n onRecover: record.health === 'recovery-needed'\n ? () => {\n if (!manager)\n return;\n void runMutation(() => manager.recoverWorktrees({ workspaceId: record.workspaceId }), {\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n });\n }\n : undefined,\n });\n const refreshBranchAdoption = async () => {\n const target = worktreeBranchAdoption;\n if (!manager || !target)\n return;\n const generation = branchAdoptionGuard.current.begin();\n const isCurrent = () => branchAdoptionGuard.current.isCurrent(generation);\n setActionPending(true);\n try {\n await refresh({\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n if (!isCurrent())\n return;\n const view = await viewReader.read(target.workspaceId);\n if (!isCurrent())\n return;\n if (!workspaceIdsRef.current.includes(target.workspaceId)) {\n setWorktreeBranchAdoption(undefined);\n setActionError(undefined);\n return;\n }\n const latest = view.worktrees.find((record) => record.worktreeId === target.worktreeId);\n setReadState((current) => ({ ...current, views: mergeWorktreeView(current.views, view) }));\n setWorktreeBranchAdoption(latest?.health === 'branch-drift' && typeof latest.currentBranch === 'string'\n ? latest\n : undefined);\n setActionError(undefined);\n }\n catch (error) {\n if (isCurrent())\n setActionError(toWorktreeViewError(error));\n }\n finally {\n if (isCurrent())\n setActionPending(false);\n }\n };\n const branchLabel = (record) => record.health === 'branch-drift'\n ? `${record.branch} → ${record.currentBranch ?? t('worktree.detachedHead')}`\n : record.branch;\n return {\n latestLifecycleTarget,\n cleanDiskTarget,\n forgetTarget,\n permissionRetryTarget,\n retryCleanupPermissions,\n recoveryAction,\n branchActions,\n refreshBranchAdoption,\n branchLabel,\n };\n}\n//# sourceMappingURL=useLifecycleActions.js.map","import { useEffect, useRef, useState } from 'react';\nimport { createWorktreeRefreshGuard } from '../../view/worktree-view.js';\nexport function useLifecycleState({ props, source, mutation }) {\n const { manager } = props;\n const { mode } = source;\n const { setActionPending } = mutation;\n const [worktreeBranchAdoption, setWorktreeBranchAdoption] = useState();\n const [worktreeRemoval, setWorktreeRemoval] = useState();\n const [worktreeCleanDisk, setWorktreeCleanDisk] = useState();\n const [worktreeForget, setWorktreeForget] = useState();\n const cleanupGuard = useRef(createWorktreeRefreshGuard());\n const branchAdoptionGuard = useRef(createWorktreeRefreshGuard());\n useEffect(() => {\n const guard = branchAdoptionGuard.current;\n setWorktreeBranchAdoption(undefined);\n return () => guard.invalidate();\n }, [manager, mode]);\n const permissionRetryPending = useRef(false);\n useEffect(() => {\n const guard = cleanupGuard.current;\n permissionRetryPending.current = false;\n setActionPending(false);\n return () => guard.invalidate();\n }, [manager, mode]);\n return {\n worktreeBranchAdoption,\n setWorktreeBranchAdoption,\n worktreeRemoval,\n setWorktreeRemoval,\n worktreeCleanDisk,\n setWorktreeCleanDisk,\n worktreeForget,\n setWorktreeForget,\n cleanupGuard,\n branchAdoptionGuard,\n permissionRetryPending,\n };\n}\n//# sourceMappingURL=useLifecycleState.js.map","import { useState } from 'react';\nimport { toNativeWorktreeViewError } from '../shared.js';\nexport function useNativeActions({ source, props, mutation }) {\n const { workspaces } = source;\n const { renameWorkspace, deleteWorkspace, renameSession, archiveSession } = props;\n const { runMutation } = mutation;\n const [sessionRenameTarget, setSessionRenameTarget] = useState();\n const [sessionRenameDraft, setSessionRenameDraft] = useState('');\n const [sessionRenamePending, setSessionRenamePending] = useState(false);\n const [sessionRenameError, setSessionRenameError] = useState();\n const [workspaceRenameTarget, setWorkspaceRenameTarget] = useState();\n const [workspaceRenameDraft, setWorkspaceRenameDraft] = useState('');\n const [workspaceRenamePending, setWorkspaceRenamePending] = useState(false);\n const [workspaceRenameError, setWorkspaceRenameError] = useState();\n const [workspaceDeleteTarget, setWorkspaceDeleteTarget] = useState();\n const [workspaceDeletePending, setWorkspaceDeletePending] = useState(false);\n const [workspaceDeleteError, setWorkspaceDeleteError] = useState();\n const workspaceRenameTrimmed = workspaceRenameDraft.trim();\n const workspaceRenameDuplicate = workspaceRenameTarget !== undefined &&\n workspaceRenameTrimmed.length > 0 &&\n workspaces.items.some((workspace) => workspace.workspaceId !== workspaceRenameTarget.workspaceId &&\n workspace.title === workspaceRenameTrimmed);\n const workspaceRenameBlocked = workspaceRenamePending ||\n workspaceRenameTarget === undefined ||\n workspaceRenameTrimmed.length === 0 ||\n workspaceRenameTrimmed === workspaceRenameTarget?.currentTitle ||\n workspaceRenameDuplicate;\n const openWorkspaceRename = (workspace) => {\n setWorkspaceRenameTarget({\n workspaceId: workspace.workspaceId,\n currentTitle: workspace.title,\n });\n setWorkspaceRenameDraft(workspace.title);\n setWorkspaceRenameError(undefined);\n };\n const closeWorkspaceRename = () => {\n if (workspaceRenamePending)\n return;\n setWorkspaceRenameTarget(undefined);\n setWorkspaceRenameError(undefined);\n };\n const confirmWorkspaceRename = async () => {\n const target = workspaceRenameTarget;\n if (workspaceRenameBlocked || target === undefined)\n return;\n if (renameWorkspace === undefined) {\n setWorkspaceRenameError({\n code: 'WORKSPACE_RENAME_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setWorkspaceRenamePending(true);\n setWorkspaceRenameError(undefined);\n try {\n await renameWorkspace(target.workspaceId, workspaceRenameTrimmed);\n setWorkspaceRenameTarget(undefined);\n }\n catch (error) {\n setWorkspaceRenameError(toNativeWorktreeViewError(error));\n }\n finally {\n setWorkspaceRenamePending(false);\n }\n };\n const openWorkspaceDelete = (workspace) => {\n setWorkspaceDeleteTarget({ workspaceId: workspace.workspaceId, title: workspace.title });\n setWorkspaceDeleteError(undefined);\n };\n const closeWorkspaceDelete = () => {\n if (workspaceDeletePending)\n return;\n setWorkspaceDeleteTarget(undefined);\n setWorkspaceDeleteError(undefined);\n };\n const confirmWorkspaceDelete = async () => {\n const target = workspaceDeleteTarget;\n if (target === undefined || workspaceDeletePending)\n return;\n if (deleteWorkspace === undefined) {\n setWorkspaceDeleteError({\n code: 'WORKSPACE_DELETE_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setWorkspaceDeletePending(true);\n setWorkspaceDeleteError(undefined);\n try {\n await deleteWorkspace(target.workspaceId);\n setWorkspaceDeleteTarget(undefined);\n }\n catch (error) {\n setWorkspaceDeleteError(toNativeWorktreeViewError(error));\n }\n finally {\n setWorkspaceDeletePending(false);\n }\n };\n const openSessionRename = (sessionId, currentTitle) => {\n setSessionRenameTarget({ sessionId, currentTitle });\n setSessionRenameDraft(currentTitle);\n setSessionRenameError(undefined);\n };\n const closeSessionRename = () => {\n if (sessionRenamePending)\n return;\n setSessionRenameTarget(undefined);\n setSessionRenameError(undefined);\n };\n const confirmSessionRename = async () => {\n const target = sessionRenameTarget;\n const title = sessionRenameDraft.trim();\n if (target === undefined || title.length === 0 || sessionRenamePending)\n return;\n if (renameSession === undefined) {\n setSessionRenameError({\n code: 'SESSION_RENAME_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setSessionRenamePending(true);\n setSessionRenameError(undefined);\n try {\n await renameSession(target.sessionId, title);\n setSessionRenameTarget(undefined);\n }\n catch (error) {\n setSessionRenameError(toNativeWorktreeViewError(error));\n }\n finally {\n setSessionRenamePending(false);\n }\n };\n const archiveWorktreeSession = async (sessionId) => {\n if (archiveSession === undefined)\n return;\n await runMutation(() => archiveSession(sessionId));\n };\n return {\n sessionRenameTarget,\n setSessionRenameTarget,\n sessionRenameDraft,\n setSessionRenameDraft,\n sessionRenamePending,\n setSessionRenamePending,\n sessionRenameError,\n setSessionRenameError,\n workspaceRenameTarget,\n setWorkspaceRenameTarget,\n workspaceRenameDraft,\n setWorkspaceRenameDraft,\n workspaceRenamePending,\n setWorkspaceRenamePending,\n workspaceRenameError,\n setWorkspaceRenameError,\n workspaceDeleteTarget,\n setWorkspaceDeleteTarget,\n workspaceDeletePending,\n setWorkspaceDeletePending,\n workspaceDeleteError,\n setWorkspaceDeleteError,\n workspaceRenameTrimmed,\n workspaceRenameDuplicate,\n workspaceRenameBlocked,\n openWorkspaceRename,\n closeWorkspaceRename,\n confirmWorkspaceRename,\n openWorkspaceDelete,\n closeWorkspaceDelete,\n confirmWorkspaceDelete,\n openSessionRename,\n closeSessionRename,\n confirmSessionRename,\n archiveWorktreeSession,\n };\n}\n//# sourceMappingURL=useNativeActions.js.map","import { useRef, useState } from 'react';\nimport { createWorktreeModalViewLoader, createWorktreeRefreshGuard, } from '../../view/worktree-view.js';\nexport function useRegistrationState({ props }) {\n const { viewReader } = props;\n const [worktreeModalWorkspaceId, setWorktreeModalWorkspaceId] = useState();\n const [modalReadError, setModalReadError] = useState();\n const [modalReadLoading, setModalReadLoading] = useState(false);\n const [worktreeModalMode, setWorktreeModalMode] = useState('create');\n const [importCandidates, setImportCandidates] = useState({\n status: 'idle',\n candidates: [],\n });\n const [selectedImportPath, setSelectedImportPath] = useState();\n const [selectedBranch, setSelectedBranch] = useState('');\n const [newBranch, setNewBranch] = useState('');\n const modalReadLoader = useRef(createWorktreeModalViewLoader(viewReader));\n const modalReadViewRef = useRef();\n const importCandidatesGuard = useRef(createWorktreeRefreshGuard());\n const modalWorkspaceIdRef = useRef(worktreeModalWorkspaceId);\n modalWorkspaceIdRef.current = worktreeModalWorkspaceId;\n return {\n worktreeModalWorkspaceId,\n setWorktreeModalWorkspaceId,\n modalReadError,\n setModalReadError,\n modalReadLoading,\n setModalReadLoading,\n worktreeModalMode,\n setWorktreeModalMode,\n importCandidates,\n setImportCandidates,\n selectedImportPath,\n setSelectedImportPath,\n selectedBranch,\n setSelectedBranch,\n newBranch,\n setNewBranch,\n modalReadLoader,\n modalReadViewRef,\n importCandidatesGuard,\n modalWorkspaceIdRef,\n };\n}\n//# sourceMappingURL=useRegistrationState.js.map","/**\n * Browser-safe Windows path identity helpers. They intentionally do not touch\n * the filesystem; Provider adds physical stat/realpath checks where it has\n * access to Node APIs.\n */\nconst EXTENDED_PATH_PREFIX = '//?/';\nconst EXTENDED_UNC_PREFIX = '//?/UNC/';\nexport function isWindowsPath(value) {\n return /^[A-Za-z]:[\\\\/]/u.test(value) ||\n value.startsWith('\\\\\\\\') ||\n /^\\/\\/\\?(?:\\/|\\\\)/u.test(value);\n}\n/** Strip only the extended drive/UNC prefixes supported by the browser boundary. */\nexport function stripExtendedWindowsPrefix(value) {\n const normalized = value.replaceAll('\\\\', '/');\n const normalizedUncPrefix = EXTENDED_UNC_PREFIX.toLowerCase();\n if (normalized.toLowerCase().startsWith(normalizedUncPrefix)) {\n return '//' + normalized.slice(EXTENDED_UNC_PREFIX.length);\n }\n if (normalized.startsWith(EXTENDED_PATH_PREFIX)) {\n const drivePath = normalized.slice(EXTENDED_PATH_PREFIX.length);\n if (/^[A-Za-z]:\\//u.test(drivePath))\n return drivePath;\n }\n return value;\n}\nexport function normalizeWindowsPath(value) {\n let normalized = stripExtendedWindowsPrefix(value).replaceAll('\\\\', '/');\n const unc = normalized.startsWith('//');\n normalized = normalized.replace(/\\/{2,}/gu, '/');\n if (unc && normalized.startsWith('/'))\n normalized = '/' + normalized;\n if (normalized.length > 3)\n normalized = normalized.replace(/\\/+$/u, '');\n return normalized.toLowerCase();\n}\nexport function sameWindowsPath(left, right) {\n return (isWindowsPath(left) || isWindowsPath(right)) &&\n normalizeWindowsPath(left) === normalizeWindowsPath(right);\n}\n//# sourceMappingURL=windows-path.js.map","import { sameWindowsPath } from '../../contract/windows-path.js';\nimport { createSessionForWorktree, WorktreeSessionBindingError, } from '../view/worktree-view.js';\nimport { WorktreeSessionPermissionError } from '../view/worktree-view-errors.js';\nexport { WorktreeSessionPermissionError } from '../view/worktree-view-errors.js';\nexport class WorktreeSessionActionError extends Error {\n code;\n retryable;\n details;\n constructor(code, message, retryable, details = {}) {\n super(message);\n this.code = code;\n this.retryable = retryable;\n this.name = 'WorktreeSessionActionError';\n this.details = details;\n }\n}\n/**\n * Keep the confirmation and second permission call in one place for new,\n * reused, and retried Sessions. The Host still validates the relation.\n */\nexport async function ensureWorktreeSessionPermission(input) {\n if (input.permission === undefined)\n return;\n const request = {\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: input.sessionId,\n binding: 'active',\n };\n let result;\n try {\n result = await input.permission.ensureWorktreePermission(request);\n }\n catch (error) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession, error);\n }\n if (result.status === 'confirmation-required') {\n let confirmed;\n try {\n confirmed = input.confirmFullAccess === undefined\n ? false\n : await input.confirmFullAccess({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: input.sessionId,\n cwd: input.cwd,\n });\n }\n catch (error) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession, error);\n }\n if (!confirmed) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession);\n }\n try {\n result = await input.permission.ensureWorktreePermission({ ...request, confirmed: true });\n }\n catch (error) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession, error);\n }\n }\n if (result.status === 'confirmation-required') {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession);\n }\n input.onPermissionResult?.({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: input.sessionId,\n cwd: input.cwd,\n }, result);\n}\n/**\n * Compare paths for browser-side candidate filtering and the no-Host safety fallback.\n * When Host validation is available, it remains authoritative for physical aliases.\n */\nfunction sameWorktreePath(left, right) {\n return left === right || sameWindowsPath(left, right);\n}\nexport function resolveWorktreeSessionAction(input) {\n if (input.target.status !== 'active' ||\n input.target.health === 'repair' ||\n input.target.health === 'recovery-needed') {\n return { kind: 'reject', reason: 'worktree-not-available' };\n }\n if (input.sessions.phase !== 'ready') {\n return { kind: 'wait', reason: 'sessions-not-ready' };\n }\n const targetBinding = input.bindings.find((binding) => binding.worktreeId === input.target.worktreeId && binding.status === 'active');\n if (targetBinding !== undefined) {\n const summary = input.sessions.byId[targetBinding.sessionId];\n if (summary === undefined) {\n return {\n kind: 'repair',\n reason: 'active-binding-session-missing',\n sessionId: targetBinding.sessionId,\n };\n }\n if (summary.cwd === undefined ||\n (!input.hostValidatesPhysicalPath && !sameWorktreePath(summary.cwd, input.target.absolutePath))) {\n return {\n kind: 'repair',\n reason: 'active-binding-cwd-mismatch',\n sessionId: targetBinding.sessionId,\n };\n }\n if (summary.blank === true &&\n !input.archivedSessionIds.includes(targetBinding.sessionId)) {\n return { kind: 'open-bound', sessionId: targetBinding.sessionId };\n }\n }\n for (const sessionId of input.sessions.ids) {\n const summary = input.sessions.byId[sessionId];\n if (summary === undefined ||\n summary.blank === undefined ||\n (summary.blank === true && summary.cwd === undefined)) {\n return { kind: 'wait', reason: 'session-facts-incomplete' };\n }\n }\n for (const sessionId of input.sessions.ids) {\n const summary = input.sessions.byId[sessionId];\n if (summary?.blank !== true ||\n summary.cwd === undefined ||\n !sameWorktreePath(summary.cwd, input.target.absolutePath) ||\n input.archivedSessionIds.includes(sessionId)) {\n continue;\n }\n if (!input.bindings.some((binding) => binding.sessionId === sessionId)) {\n return { kind: 'bind-existing', sessionId };\n }\n }\n return { kind: 'create' };\n}\nfunction actionError(action) {\n switch (action.kind) {\n case 'wait':\n return new WorktreeSessionActionError(action.reason === 'sessions-not-ready' ? 'SESSION_LIST_NOT_READY' : 'SESSION_FACTS_INCOMPLETE', '', true);\n case 'repair':\n return new WorktreeSessionActionError('WORKTREE_SESSION_REPAIR_REQUIRED', action.reason, true, {\n ...(action.sessionId === undefined ? {} : { sessionId: action.sessionId }),\n });\n case 'reject':\n return new WorktreeSessionActionError('WORKTREE_SESSION_UNAVAILABLE', action.reason, false);\n default:\n return new WorktreeSessionActionError('WORKTREE_SESSION_ACTION_FAILED', '', true);\n }\n}\nexport async function retryWorktreeSessionBinding(input) {\n if (input.archived) {\n throw new WorktreeSessionActionError('SESSION_ARCHIVED', '', false, {\n sessionId: input.pending.sessionId,\n });\n }\n try {\n await input.manager.bindSession({\n workspaceId: input.pending.workspaceId,\n worktreeId: input.pending.worktreeId,\n sessionId: input.pending.sessionId,\n });\n }\n catch (error) {\n throw new WorktreeSessionBindingError(input.pending.sessionId, error);\n }\n await ensureWorktreeSessionPermission({\n permission: input.permission,\n confirmFullAccess: input.confirmFullAccess,\n onPermissionResult: input.onPermissionResult,\n sessionId: input.pending.sessionId,\n workspaceId: input.pending.workspaceId,\n worktreeId: input.pending.worktreeId,\n cwd: input.pending.cwd,\n createdSession: true,\n });\n input.ensureSessionWorkspace(input.pending.workspaceId, input.pending.sessionId);\n input.openSession(input.pending.sessionId);\n return input.pending.sessionId;\n}\n/**\n * Browser-only Worktree `+` connector. It owns the read/resolve/bind/create/open\n * sequence and coalesces repeated calls for one Worktree within one Client fiber.\n */\nexport function createWorktreeSessionConnector(options) {\n const inFlight = new Map();\n let disposed = false;\n const run = async (input) => {\n const [worktrees, bindings] = await Promise.all([\n options.manager.listWorktrees({ workspaceId: input.workspaceId }),\n options.manager.listBindings({ workspaceId: input.workspaceId }),\n ]);\n if (disposed) {\n throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);\n }\n const target = worktrees.find((record) => record.worktreeId === input.worktreeId);\n if (target === undefined ||\n (options.permission === undefined && !sameWorktreePath(target.absolutePath, input.cwd))) {\n throw new WorktreeSessionActionError('WORKTREE_SESSION_REPAIR_REQUIRED', 'worktree target unavailable', true);\n }\n const action = resolveWorktreeSessionAction({\n target,\n sessions: options.sessions.getSnapshot(),\n archivedSessionIds: options.archivedSessionIds(),\n bindings,\n hostValidatesPhysicalPath: options.permission !== undefined,\n });\n if (action.kind === 'open-bound') {\n await ensureWorktreeSessionPermission({\n permission: options.permission,\n confirmFullAccess: options.confirmFullAccess,\n onPermissionResult: options.onPermissionResult,\n sessionId: action.sessionId,\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n cwd: input.cwd,\n createdSession: false,\n });\n options.ensureSessionWorkspace(input.workspaceId, action.sessionId);\n if (!disposed)\n options.openSession(action.sessionId);\n return action.sessionId;\n }\n if (action.kind === 'bind-existing') {\n try {\n await options.manager.bindSession({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: action.sessionId,\n });\n }\n catch (error) {\n throw new WorktreeSessionBindingError(action.sessionId, error);\n }\n await ensureWorktreeSessionPermission({\n permission: options.permission,\n confirmFullAccess: options.confirmFullAccess,\n onPermissionResult: options.onPermissionResult,\n sessionId: action.sessionId,\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n cwd: input.cwd,\n createdSession: false,\n });\n if (!disposed) {\n options.ensureSessionWorkspace(input.workspaceId, action.sessionId);\n if (!disposed)\n options.openSession(action.sessionId);\n }\n return action.sessionId;\n }\n if (action.kind !== 'create')\n throw actionError(action);\n if (disposed)\n throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);\n return createSessionForWorktree({\n ...input,\n createSession: options.createSession,\n manager: options.manager,\n beforeOpen: async (sessionId) => {\n if (disposed)\n throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);\n await ensureWorktreeSessionPermission({\n permission: options.permission,\n confirmFullAccess: options.confirmFullAccess,\n onPermissionResult: options.onPermissionResult,\n sessionId,\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n cwd: input.cwd,\n createdSession: true,\n });\n },\n openSession: (sessionId) => {\n if (!disposed)\n options.openSession(sessionId);\n },\n });\n };\n return {\n create(input) {\n const key = `${input.workspaceId}\\u0000${input.worktreeId}`;\n const current = inFlight.get(key);\n if (current !== undefined)\n return current;\n const promise = run(input).finally(() => {\n if (inFlight.get(key) === promise)\n inFlight.delete(key);\n });\n inFlight.set(key, promise);\n return promise;\n },\n dispose() {\n disposed = true;\n inFlight.clear();\n },\n };\n}\n//# sourceMappingURL=worktree-session.js.map","import { useState } from 'react';\nimport { openWorktreeSession } from '../../view/navigation.js';\nimport { retryWorktreeSessionBinding } from '../../session/worktree-session.js';\nimport { toWorktreeViewError, WorktreeSessionBindingError, WorktreeSessionPermissionError, } from '../../view/worktree-view.js';\nimport { toNativeWorktreeViewError } from '../shared.js';\nexport function useSessionActions({ source, props, mutation, read }) {\n const { archivedSessionIds } = source;\n const { createSessionForWorktree: createSessionCallback, manager, ensureSessionWorkspace, permission, confirmFullAccess, onPermissionResult, openSession, retryForkSession, } = props;\n const { setActionError, setActionPending } = mutation;\n const { refresh } = read;\n const [pendingSessionBinding, setPendingSessionBinding] = useState();\n const [forkRetryKey, setForkRetryKey] = useState();\n const pendingSessionArchived = pendingSessionBinding !== undefined &&\n archivedSessionIds.includes(pendingSessionBinding.sessionId);\n const createSession = async (input) => {\n if (createSessionCallback === undefined) {\n setActionError({\n code: 'SESSION_CREATE_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionPending(true);\n setActionError(undefined);\n setPendingSessionBinding(undefined);\n try {\n await createSessionCallback(input);\n await refresh({\n scope: { kind: 'workspace', workspaceId: input.workspaceId },\n preserveCurrent: true,\n });\n }\n catch (error) {\n if (error instanceof WorktreeSessionBindingError && error.retryable) {\n setPendingSessionBinding({ ...input, sessionId: error.sessionId });\n }\n if (error instanceof WorktreeSessionPermissionError && error.retryable) {\n setPendingSessionBinding({\n ...input,\n sessionId: error.sessionId,\n permissionRequired: true,\n });\n }\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n const retrySessionBinding = async () => {\n if (manager === undefined || pendingSessionBinding === undefined || pendingSessionArchived)\n return;\n const pending = pendingSessionBinding;\n setActionPending(true);\n setActionError(undefined);\n try {\n await retryWorktreeSessionBinding({\n manager,\n pending,\n archived: false,\n ensureSessionWorkspace: (workspaceId, sessionId) => {\n ensureSessionWorkspace?.(workspaceId, sessionId);\n },\n permission,\n confirmFullAccess,\n onPermissionResult,\n openSession,\n });\n setPendingSessionBinding(undefined);\n await refresh({\n scope: { kind: 'workspace', workspaceId: pending.workspaceId },\n preserveCurrent: true,\n });\n }\n catch (error) {\n if (error instanceof WorktreeSessionBindingError && !error.retryable) {\n setPendingSessionBinding(undefined);\n }\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n const retryForkBinding = async (key) => {\n if (retryForkSession === undefined || forkRetryKey !== undefined)\n return;\n setForkRetryKey(key);\n try {\n await retryForkSession(key);\n }\n catch (error) {\n setActionError(toNativeWorktreeViewError(error));\n }\n finally {\n setForkRetryKey(undefined);\n }\n };\n const openWorkspaceSession = (workspaceId, sessionId) => {\n ensureSessionWorkspace?.(workspaceId, sessionId);\n openWorktreeSession({ open: openSession }, sessionId);\n };\n return {\n pendingSessionBinding,\n setPendingSessionBinding,\n forkRetryKey,\n setForkRetryKey,\n pendingSessionArchived,\n createSession,\n retrySessionBinding,\n retryForkBinding,\n openWorkspaceSession,\n };\n}\n//# sourceMappingURL=useSessionActions.js.map","/** Keep one current Session row in the Worktree content scrollport. */\nexport function scrollCurrentSessionIntoView(root, sessionId) {\n if (root === null)\n return false;\n const row = Array.from(root.querySelectorAll('[data-session-id]')).find((candidate) => candidate.dataset.sessionId === sessionId);\n if (row === undefined)\n return false;\n const rootRect = root.getBoundingClientRect();\n const rowRect = row.getBoundingClientRect();\n if (rowRect.top < rootRect.top) {\n root.scrollTop -= rootRect.top - rowRect.top;\n }\n else if (rowRect.bottom > rootRect.bottom) {\n root.scrollTop += rowRect.bottom - rootRect.bottom;\n }\n return true;\n}\n//# sourceMappingURL=worktree-session-position.js.map","import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { isMainExpanded, isWorkspaceExpanded, isWorktreeExpanded, } from '../../view/worktree-expand-state.js';\nimport { scrollCurrentSessionIntoView } from '../../session/worktree-session-position.js';\nimport { clearSessionGroupExpansion, currentSessionRevealKeys, isCompleteWorktreeWorkspaceSnapshot, isPendingListPhase, resolveCurrentSessionLocation, } from '../selectors.js';\nexport function useSessionExpansion({ read, source, props }) {\n const { readState, viewByWorkspace } = read;\n const { currentSessionId, workspaces, mode, expandSnapshot, workspaceIds } = source;\n const { expandState } = props;\n const [searchQuery, setSearchQuery] = useState('');\n const [searchExpanded, setSearchExpanded] = useState(false);\n const searchRoot = useRef(null);\n const searchInput = useRef(null);\n const contentRef = useRef(null);\n const [currentSessionReveal, setCurrentSessionReveal] = useState();\n const revealSessionIdRef = useRef(Symbol('initial'));\n const revealModeRef = useRef(Symbol('initial'));\n let activeReveal = currentSessionReveal;\n if (currentSessionId !== revealSessionIdRef.current || mode !== revealModeRef.current) {\n revealSessionIdRef.current = currentSessionId;\n revealModeRef.current = mode;\n activeReveal =\n currentSessionId === undefined || mode !== 'worktree'\n ? undefined\n : { sessionId: currentSessionId, suppressedKeys: {} };\n setCurrentSessionReveal(activeReveal);\n }\n const searchQueryRef = useRef(searchQuery);\n searchQueryRef.current = searchQuery;\n useEffect(() => {\n if (!searchExpanded)\n return;\n const onClick = (event) => {\n if (!(event.target instanceof Node) || searchRoot.current?.contains(event.target) === true)\n return;\n searchInput.current?.blur();\n if (searchQuery.trim() !== '')\n return;\n setSearchExpanded(false);\n };\n document.addEventListener('click', onClick);\n return () => {\n document.removeEventListener('click', onClick);\n };\n }, [searchExpanded, searchQuery]);\n useEffect(() => {\n if (searchExpanded) {\n searchInput.current?.focus({ preventScroll: true });\n }\n }, [searchExpanded]);\n const locateGenerationRef = useRef(0);\n const positionedLocateGenerationRef = useRef();\n const [expandedArchivedWorkspaces, setExpandedArchivedWorkspaces] = useState({});\n const [expandedSessionGroups, setExpandedSessionGroups] = useState({});\n const query = searchQuery.trim().toLocaleLowerCase();\n const currentSessionLocation = useMemo(() => readState.status === 'ready'\n ? resolveCurrentSessionLocation(currentSessionId, workspaces.items, readState.views)\n : undefined, [currentSessionId, readState.status, readState.views, workspaces.items]);\n const currentRevealKeys = useMemo(() => new Set(currentSessionRevealKeys(currentSessionLocation)), [currentSessionLocation]);\n const isCurrentSessionReveal = (key) => activeReveal !== undefined &&\n activeReveal.sessionId === currentSessionId &&\n currentRevealKeys.has(key) &&\n activeReveal.suppressedKeys[key] !== true;\n useLayoutEffect(() => {\n locateGenerationRef.current += 1;\n positionedLocateGenerationRef.current = undefined;\n if (mode !== 'worktree') {\n setSearchExpanded(false);\n return;\n }\n if (searchQueryRef.current.trim().length > 0) {\n setSearchQuery('');\n setSearchExpanded(false);\n }\n }, [currentSessionId, mode]);\n useLayoutEffect(() => {\n if (mode !== 'worktree' ||\n currentSessionId === undefined ||\n currentSessionLocation === undefined) {\n return;\n }\n const generation = locateGenerationRef.current;\n if (positionedLocateGenerationRef.current === generation)\n return;\n let cancelled = false;\n const frame = requestAnimationFrame(() => {\n if (cancelled || generation !== locateGenerationRef.current)\n return;\n if (!scrollCurrentSessionIntoView(contentRef.current, currentSessionId))\n return;\n positionedLocateGenerationRef.current = generation;\n });\n return () => {\n cancelled = true;\n cancelAnimationFrame(frame);\n };\n }, [\n currentSessionId,\n currentSessionLocation,\n activeReveal,\n expandSnapshot,\n mode,\n query,\n readState.status,\n ]);\n useEffect(() => {\n // Pruning is destructive: require a confirmed Workspace list whose projections all\n // arrived. A pending or partial read means \"nothing arrived yet\", not \"nothing exists\".\n if (readState.status !== 'ready' ||\n isPendingListPhase(workspaces.phase) ||\n !isCompleteWorktreeWorkspaceSnapshot(workspaceIds, readState.views))\n return;\n expandState.actions.retain(workspaceIds, readState.views.flatMap((view) => view.worktrees.map((record) => record.worktreeId)));\n }, [expandState, readState.status, readState.views, workspaceIds, workspaces.phase]);\n const clearSessionGroups = (groupKeys) => {\n if (groupKeys.length === 0)\n return;\n setExpandedSessionGroups((current) => clearSessionGroupExpansion(current, groupKeys));\n };\n const suppressCurrentSessionReveal = (key) => {\n if (!isCurrentSessionReveal(key))\n return false;\n setCurrentSessionReveal((current) => {\n if (current === undefined || current.sessionId !== currentSessionId)\n return current;\n return {\n ...current,\n suppressedKeys: { ...current.suppressedKeys, [key]: true },\n };\n });\n return true;\n };\n const toggleWorkspace = (workspaceId) => {\n const persistedExpanded = isWorkspaceExpanded(expandSnapshot, workspaceId);\n const autoExpanded = isCurrentSessionReveal('workspace:' + workspaceId);\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal('workspace:' + workspaceId);\n }\n if (visuallyExpanded && !persistedExpanded) {\n clearSessionGroups([\n 'main:' + workspaceId,\n ...(viewByWorkspace.get(workspaceId)?.worktrees.map((record) => record.worktreeId) ?? []).map((worktreeId) => 'worktree:' + worktreeId),\n ]);\n return;\n }\n expandState.actions.toggleWorkspace(workspaceId);\n if (visuallyExpanded) {\n clearSessionGroups([\n 'main:' + workspaceId,\n ...(viewByWorkspace.get(workspaceId)?.worktrees.map((record) => record.worktreeId) ?? []).map((worktreeId) => 'worktree:' + worktreeId),\n ]);\n }\n };\n const toggleMain = (workspaceId) => {\n const persistedExpanded = isMainExpanded(expandSnapshot, workspaceId);\n const autoExpanded = isCurrentSessionReveal('main:' + workspaceId);\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal('main:' + workspaceId);\n }\n if (visuallyExpanded && !persistedExpanded) {\n clearSessionGroups(['main:' + workspaceId]);\n return;\n }\n expandState.actions.toggleMain(workspaceId);\n if (visuallyExpanded)\n clearSessionGroups(['main:' + workspaceId]);\n };\n const toggleWorktree = (worktreeId) => {\n const persistedExpanded = isWorktreeExpanded(expandSnapshot, worktreeId);\n const autoExpanded = isCurrentSessionReveal('worktree:' + worktreeId);\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal('worktree:' + worktreeId);\n }\n if (visuallyExpanded && !persistedExpanded) {\n clearSessionGroups(['worktree:' + worktreeId]);\n return;\n }\n expandState.actions.toggleWorktree(worktreeId);\n if (visuallyExpanded)\n clearSessionGroups(['worktree:' + worktreeId]);\n };\n const toggleArchivedWorkspace = (workspaceId) => {\n const archivedKey = 'archived:' + workspaceId;\n const autoExpanded = isCurrentSessionReveal(archivedKey);\n const persistedExpanded = expandedArchivedWorkspaces[workspaceId] === true;\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal(archivedKey);\n }\n setExpandedArchivedWorkspaces((current) => ({\n ...current,\n [workspaceId]: !visuallyExpanded,\n }));\n };\n const toggleSessionGroup = (groupKey, autoExpanded) => {\n const transientExpanded = expandedSessionGroups[groupKey] === true;\n if (autoExpanded) {\n suppressCurrentSessionReveal('session-group:' + groupKey);\n setExpandedSessionGroups((current) => {\n const next = { ...current };\n delete next[groupKey];\n return next;\n });\n return;\n }\n setExpandedSessionGroups((current) => ({\n ...current,\n [groupKey]: !transientExpanded,\n }));\n };\n return {\n searchQuery,\n setSearchQuery,\n searchExpanded,\n setSearchExpanded,\n searchRoot,\n searchInput,\n contentRef,\n currentSessionReveal: activeReveal,\n setCurrentSessionReveal,\n searchQueryRef,\n locateGenerationRef,\n positionedLocateGenerationRef,\n expandedArchivedWorkspaces,\n setExpandedArchivedWorkspaces,\n expandedSessionGroups,\n setExpandedSessionGroups,\n query,\n currentSessionLocation,\n currentRevealKeys,\n isCurrentSessionReveal,\n clearSessionGroups,\n suppressCurrentSessionReveal,\n toggleWorkspace,\n toggleMain,\n toggleWorktree,\n toggleArchivedWorkspace,\n toggleSessionGroup,\n };\n}\n//# sourceMappingURL=useSessionExpansion.js.map","import { useEffect, useMemo } from 'react';\nimport { filterVisibleSessionIds } from '../../session/session-view.js';\nimport { unboundSessionIds, workspaceSessionIds } from '../../view/view-mode.js';\nimport { nextSessionOrderAccount, } from '../../session/worktree-session-order.js';\nimport { filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport { bindingIdsFor, isCompleteWorktreeWorkspaceSnapshot, isPendingListPhase, } from '../selectors.js';\nimport { updatedAtById } from '../shared.js';\nexport function useSessionOrdering({ read, source, props }) {\n const { readState, viewByWorkspace } = read;\n const { workspaces, sessions, archivedSessionIds, sessionOrderSnapshot, mode, workspaceIds } = source;\n const { sessionOrder } = props;\n // DSH lists report a monotone `pending` → `ready` arrival phase, and an empty list in\n // the pending phase means \"nothing arrived yet\" rather than \"nothing exists\". Deriving\n // accounts from that read would reset every stored order to no order at all.\n const sourcesReady = readState.status === 'ready' &&\n !isPendingListPhase(sessions.phase) &&\n !isPendingListPhase(workspaces.phase);\n // Reconciling may run as soon as one Workspace projection is ready, but deleting accounts\n // for Workspaces that no longer exist requires the complete, non-empty projection.\n const canRetainAccounts = sourcesReady && isCompleteWorktreeWorkspaceSnapshot(workspaceIds, readState.views);\n const sessionOrderInputs = useMemo(() => {\n if (!sourcesReady)\n return [];\n const inputs = [];\n for (const workspace of workspaces.items) {\n // Before this Workspace's projection lands, which Sessions belong to a Worktree is\n // unknown. Skipping it keeps the stored order instead of rebuilding it from a guess.\n const view = viewByWorkspace.get(workspace.workspaceId);\n if (view === undefined)\n continue;\n const allWorkspaceSessionIds = filterArchivedSessionIds(workspaceSessionIds(workspaces, workspace.workspaceId, sessions.ids), archivedSessionIds);\n const bindings = view.bindings;\n const boundSessionIds = new Set(bindings.map((binding) => binding.sessionId));\n const mainSessionIds = filterVisibleSessionIds(unboundSessionIds(allWorkspaceSessionIds, [...boundSessionIds]), sessions);\n inputs.push({\n accountKey: `main:${workspace.workspaceId}`,\n sessionIds: mainSessionIds,\n updatedAtById: updatedAtById(mainSessionIds, sessions),\n });\n for (const record of view.worktrees) {\n const worktreeSessionIds = filterVisibleSessionIds(filterArchivedSessionIds(bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId)), archivedSessionIds), sessions);\n inputs.push({\n accountKey: `worktree:${record.worktreeId}`,\n sessionIds: worktreeSessionIds,\n updatedAtById: updatedAtById(worktreeSessionIds, sessions),\n });\n }\n }\n return inputs;\n }, [\n archivedSessionIds,\n sessions.byId,\n sessions.ids,\n sourcesReady,\n viewByWorkspace,\n workspaces,\n workspaces.items,\n ]);\n const orderedSessionIdsByAccount = useMemo(() => {\n const ordered = new Map();\n for (const input of sessionOrderInputs) {\n const previous = sessionOrderSnapshot.accounts[input.accountKey];\n ordered.set(input.accountKey, nextSessionOrderAccount({\n baseIds: input.sessionIds,\n updatedAtById: input.updatedAtById,\n previous,\n }).order);\n }\n return ordered;\n }, [sessionOrderInputs, sessionOrderSnapshot]);\n useEffect(() => {\n if (mode !== 'worktree' || sessionOrderInputs.length === 0)\n return;\n for (const input of sessionOrderInputs) {\n sessionOrder.actions.reconcile(input.accountKey, input.sessionIds, input.updatedAtById);\n }\n if (!canRetainAccounts)\n return;\n sessionOrder.actions.retain(sessionOrderInputs.map((input) => input.accountKey));\n }, [canRetainAccounts, mode, sessionOrder, sessionOrderInputs]);\n return { sessionOrderInputs, orderedSessionIdsByAccount };\n}\n//# sourceMappingURL=useSessionOrdering.js.map","import { useState } from 'react';\nexport function useSurfaceMenus() {\n const [openWorkspaceMenuId, setOpenWorkspaceMenuId] = useState();\n const [openMainMenuId, setOpenMainMenuId] = useState();\n const [openWorktreeMenuId, setOpenWorktreeMenuId] = useState();\n return {\n openWorkspaceMenuId,\n setOpenWorkspaceMenuId,\n openMainMenuId,\n setOpenMainMenuId,\n openWorktreeMenuId,\n setOpenWorktreeMenuId,\n };\n}\n//# sourceMappingURL=useSurfaceMenus.js.map","import { useState } from 'react';\nimport { toWorktreeViewError } from '../../view/worktree-view.js';\nexport function useSurfaceMutation({ read }) {\n const { refresh } = read;\n const [actionError, setActionError] = useState();\n const [actionPending, setActionPending] = useState(false);\n const runMutation = async (operation, refreshOptions) => {\n setActionPending(true);\n setActionError(undefined);\n try {\n await operation();\n if (refreshOptions !== undefined)\n await refresh(refreshOptions);\n }\n catch (error) {\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n return { actionError, setActionError, actionPending, setActionPending, runMutation };\n}\n//# sourceMappingURL=useSurfaceMutation.js.map","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { createWorktreeRefreshGuard, mergeWorktreeView, mergeWorktreeViews, toWorktreeViewError, } from '../../view/worktree-view.js';\nimport { worktreeActivityRefreshWorkspaceIds } from '../selectors.js';\nimport { EMPTY_READ_STATE } from '../shared.js';\nexport function useSurfaceRefresh({ source, props, registrationState }) {\n const { forkRecoverySnapshot, workspaceIdsRef, mode, workspaceIds, sessionPresentations } = source;\n const { manager, viewReader, invalidateWorktreeContext, syncSessionWorkspaces } = props;\n const { modalReadViewRef, setModalReadError, setModalReadLoading, modalReadLoader, setWorktreeModalWorkspaceId, } = registrationState;\n const [readState, setReadState] = useState(EMPTY_READ_STATE);\n const readStateRef = useRef(readState);\n readStateRef.current = readState;\n const refreshGuard = useRef(createWorktreeRefreshGuard());\n const targetRefreshGuards = useRef(new Map());\n const forkRecoveryRevisionRef = useRef(forkRecoverySnapshot.revision);\n const guardFor = (workspaceId) => {\n const current = targetRefreshGuards.current.get(workspaceId);\n if (current !== undefined)\n return current;\n const created = createWorktreeRefreshGuard();\n targetRefreshGuards.current.set(workspaceId, created);\n return created;\n };\n const refresh = useCallback(async (options = {}) => {\n if (manager === undefined) {\n refreshGuard.current.invalidate();\n for (const guard of targetRefreshGuards.current.values())\n guard.invalidate();\n setReadState(EMPTY_READ_STATE);\n return;\n }\n const scope = options.scope ?? { kind: 'global' };\n const preserveCurrent = options.preserveCurrent === true;\n const currentWorkspaceIds = workspaceIdsRef.current;\n if (scope.kind === 'global') {\n if (!preserveCurrent) {\n setReadState({ status: 'loading', views: [] });\n }\n const selectedWorkspaceIds = [...currentWorkspaceIds];\n for (const workspaceId of selectedWorkspaceIds) {\n viewReader.invalidate(workspaceId);\n }\n const contextRefresh = options.invalidateContext === false ? undefined : invalidateWorktreeContext?.();\n await refreshGuard.current.run(async () => {\n const [views] = await Promise.all([\n viewReader.readMany(selectedWorkspaceIds),\n contextRefresh ?? Promise.resolve(),\n ]);\n return views;\n }, (views) => {\n setReadState((current) => {\n const merged = mergeWorktreeViews(current.views, workspaceIdsRef.current, views);\n return {\n status: 'ready',\n views: modalReadViewRef.current === undefined\n ? merged\n : mergeWorktreeView(merged, modalReadViewRef.current),\n };\n });\n }, (error) => {\n if (preserveCurrent)\n throw error;\n setReadState({\n status: 'error',\n views: modalReadViewRef.current === undefined ? [] : [modalReadViewRef.current],\n error: toWorktreeViewError(error),\n });\n });\n return;\n }\n const requestedWorkspaceIds = scope.kind === 'workspace' ? [scope.workspaceId] : scope.workspaceIds;\n const selectedWorkspaceIds = [...new Set(requestedWorkspaceIds)].filter((workspaceId) => currentWorkspaceIds.includes(workspaceId));\n if (selectedWorkspaceIds.length === 0)\n return;\n await Promise.allSettled(selectedWorkspaceIds.map(async (workspaceId) => {\n const guard = guardFor(workspaceId);\n viewReader.invalidate(workspaceId, { reuseInFlight: options.reuseInFlight });\n const contextRefresh = options.invalidateContext === false\n ? undefined\n : invalidateWorktreeContext?.(workspaceId);\n const generation = guard.begin();\n try {\n const view = await viewReader.read(workspaceId);\n if (!guard.isCurrent(generation))\n return;\n if (!workspaceIdsRef.current.includes(workspaceId))\n return;\n setReadState((current) => {\n const remainingTargetError = current.targetError?.workspaceIds.filter((candidate) => candidate !== workspaceId) ?? [];\n const next = {\n ...current,\n status: 'ready',\n views: mergeWorktreeViews(current.views, workspaceIdsRef.current, [view]),\n error: undefined,\n };\n if (remainingTargetError.length === 0) {\n const withoutTargetError = { ...next };\n delete withoutTargetError.targetError;\n return withoutTargetError;\n }\n return {\n ...next,\n targetError: {\n workspaceIds: remainingTargetError,\n error: current.targetError.error,\n },\n };\n });\n }\n catch (error) {\n if (!guard.isCurrent(generation))\n return;\n if (!workspaceIdsRef.current.includes(workspaceId))\n return;\n setReadState((current) => {\n const previousIds = current.targetError?.workspaceIds ?? [];\n return {\n ...current,\n status: 'ready',\n views: mergeWorktreeViews(current.views, workspaceIdsRef.current, []),\n error: undefined,\n targetError: {\n workspaceIds: [...new Set([...previousIds, workspaceId])],\n error: {\n ...toWorktreeViewError(error),\n retryable: true,\n },\n },\n };\n });\n }\n finally {\n await contextRefresh?.catch(() => undefined);\n }\n }));\n }, [invalidateWorktreeContext, manager, viewReader]);\n const loadModalWorktreeView = useCallback((workspaceId) => {\n setModalReadError(undefined);\n setModalReadLoading(true);\n if (manager === undefined) {\n setModalReadLoading(false);\n setModalReadError({\n code: 'WORKTREE_VIEW_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n void modalReadLoader.current.load(workspaceId, (view) => {\n modalReadViewRef.current = view;\n setModalReadLoading(false);\n setReadState((current) => ({\n ...current,\n views: mergeWorktreeView(current.views, view),\n }));\n }, (error) => {\n setModalReadLoading(false);\n setModalReadError(toWorktreeViewError(error));\n });\n }, [manager, viewReader]);\n useEffect(() => {\n if (mode === 'worktree') {\n void refresh({ preserveCurrent: readStateRef.current.status === 'ready' });\n }\n else {\n refreshGuard.current.invalidate();\n for (const guard of targetRefreshGuards.current.values())\n guard.invalidate();\n modalReadLoader.current.invalidate();\n modalReadViewRef.current = undefined;\n setWorktreeModalWorkspaceId(undefined);\n setModalReadError(undefined);\n setModalReadLoading(false);\n setReadState(EMPTY_READ_STATE);\n }\n }, [mode, refresh]);\n const previousWorkspaceIdsRef = useRef(workspaceIds);\n useEffect(() => {\n const previousWorkspaceIds = previousWorkspaceIdsRef.current;\n previousWorkspaceIdsRef.current = workspaceIds;\n if (mode !== 'worktree')\n return;\n const addedWorkspaceIds = workspaceIds.filter((workspaceId) => !previousWorkspaceIds.includes(workspaceId));\n const removedWorkspaceIds = previousWorkspaceIds.filter((workspaceId) => !workspaceIds.includes(workspaceId));\n for (const workspaceId of removedWorkspaceIds) {\n targetRefreshGuards.current.delete(workspaceId);\n }\n setReadState((current) => {\n const views = mergeWorktreeViews(current.views, workspaceIds, []);\n const remainingTargetError = current.targetError?.workspaceIds.filter((workspaceId) => workspaceIds.includes(workspaceId)) ?? [];\n const next = { ...current, views };\n if (remainingTargetError.length === 0) {\n const withoutTargetError = { ...next };\n delete withoutTargetError.targetError;\n return withoutTargetError;\n }\n return {\n ...next,\n targetError: {\n workspaceIds: remainingTargetError,\n error: current.targetError.error,\n },\n };\n });\n for (const workspaceId of addedWorkspaceIds) {\n void refresh({\n scope: { kind: 'workspace', workspaceId },\n preserveCurrent: true,\n }).catch(() => {\n // The target error remains visible and can be retried explicitly.\n });\n }\n }, [mode, refresh, workspaceIds]);\n useEffect(() => {\n if (forkRecoveryRevisionRef.current === forkRecoverySnapshot.revision)\n return;\n forkRecoveryRevisionRef.current = forkRecoverySnapshot.revision;\n if (mode !== 'worktree' || manager === undefined)\n return;\n if (forkRecoverySnapshot.affectedWorkspaceIds.length === 0)\n return;\n void refresh({\n scope: {\n kind: 'workspaces',\n workspaceIds: forkRecoverySnapshot.affectedWorkspaceIds,\n },\n preserveCurrent: readStateRef.current.status === 'ready',\n }).catch(() => {\n // Recovery state remains visible; the next explicit retry can refresh it again.\n });\n }, [\n forkRecoverySnapshot.affectedWorkspaceIds,\n forkRecoverySnapshot.revision,\n manager,\n mode,\n refresh,\n ]);\n useEffect(() => {\n if (readState.status !== 'ready' || syncSessionWorkspaces === undefined)\n return;\n syncSessionWorkspaces(readState.views.flatMap((view) => view.bindings.map((binding) => ({\n workspaceId: binding.workspaceId,\n sessionId: binding.sessionId,\n }))));\n }, [readState.status, readState.views, syncSessionWorkspaces]);\n const viewByWorkspace = useMemo(() => new Map(readState.views.map((view) => [view.workspaceId, view])), [readState.views]);\n const previousActivityRef = useRef(sessionPresentations);\n useEffect(() => {\n const previous = previousActivityRef.current;\n previousActivityRef.current = sessionPresentations;\n if (mode !== 'worktree')\n return;\n const affected = worktreeActivityRefreshWorkspaceIds(readStateRef.current.views, previous, sessionPresentations);\n if (affected.length > 0)\n void refresh({\n scope: { kind: 'workspaces', workspaceIds: affected },\n preserveCurrent: true,\n });\n }, [mode, refresh, sessionPresentations]);\n return {\n readState,\n setReadState,\n readStateRef,\n refreshGuard,\n targetRefreshGuards,\n forkRecoveryRevisionRef,\n guardFor,\n refresh,\n loadModalWorktreeView,\n previousWorkspaceIdsRef,\n viewByWorkspace,\n previousActivityRef,\n };\n}\n//# sourceMappingURL=useSurfaceRefresh.js.map","export function computeOverlayBounds(frame, newSession, footer) {\n if (newSession === undefined || footer === undefined) {\n return { ready: false, top: 0, height: 0 };\n }\n const top = Math.max(0, newSession.top - frame.top);\n const footerTop = Math.max(top, footer.top - frame.top);\n return { ready: true, top, height: footerTop - top };\n}\n//# sourceMappingURL=overlay-bounds.js.map","import { useLayoutEffect, useRef, useState } from 'react';\nimport { computeOverlayBounds } from './overlay-bounds.js';\nconst EMPTY_BOUNDS = { ready: false, top: 0, height: 0 };\nfunction asRect(element) {\n const rect = element.getBoundingClientRect();\n return { top: rect.top, bottom: rect.bottom };\n}\nexport function syncObservedElement(observer, previous, next) {\n const nextElement = next ?? undefined;\n if (previous === nextElement)\n return previous;\n if (previous !== undefined)\n observer?.unobserve(previous);\n if (nextElement !== undefined)\n observer?.observe(nextElement);\n return nextElement;\n}\nexport function resolveNativeSidebarRoot(sidebar) {\n const directChild = sidebar.firstElementChild;\n if (directChild === null)\n return undefined;\n const directRect = directChild.getBoundingClientRect();\n if (directRect.width > 0 || directRect.height > 0)\n return directChild;\n return directChild.firstElementChild ?? directChild;\n}\nexport function findNewSessionAnchor(root) {\n const labels = ['新建会话', 'New session', '新会话', 'New Session'];\n const buttons = Array.from(root.querySelectorAll('button'));\n const visibleLabel = buttons.find((button) => {\n const text = button.textContent?.trim();\n return text === '新会话' || text === 'New Session';\n });\n if (visibleLabel !== undefined)\n return visibleLabel;\n for (const label of labels) {\n const button = buttons.find((candidate) => candidate.getAttribute('aria-label') === label);\n if (button !== undefined)\n return button;\n }\n return undefined;\n}\nexport function useSidebarOverlayGeometry(active) {\n const ref = useRef(null);\n const [width, setWidth] = useState(280);\n const [bounds, setBounds] = useState(EMPTY_BOUNDS);\n useLayoutEffect(() => {\n if (!active) {\n setBounds(EMPTY_BOUNDS);\n return;\n }\n const surface = ref.current;\n const overlay = surface?.closest('[data-shell-overlay]');\n const frame = overlay?.parentElement;\n const sidebar = frame?.firstElementChild;\n const nativeRoot = sidebar === null || sidebar === undefined ? undefined : resolveNativeSidebarRoot(sidebar);\n if (!(overlay instanceof HTMLElement) ||\n !(sidebar instanceof HTMLElement) ||\n !(nativeRoot instanceof HTMLElement)) {\n setBounds(EMPTY_BOUNDS);\n return;\n }\n const overlayElement = overlay;\n const sidebarElement = sidebar;\n const nativeRootElement = nativeRoot;\n let frameHandle;\n let observedNewSession;\n let observedFooter;\n function update() {\n const newSession = findNewSessionAnchor(nativeRootElement);\n const footer = nativeRootElement.lastElementChild;\n observedNewSession = syncObservedElement(resizeObserver, observedNewSession, newSession);\n observedFooter = syncObservedElement(resizeObserver, observedFooter, footer);\n const nextWidth = sidebarElement.getBoundingClientRect().width;\n if (nextWidth > 0)\n setWidth(nextWidth);\n setBounds(computeOverlayBounds(asRect(overlayElement), newSession === undefined ? undefined : asRect(newSession), footer === null ? undefined : asRect(footer)));\n }\n function scheduleUpdate() {\n if (frameHandle !== undefined)\n return;\n frameHandle = requestAnimationFrame(() => {\n frameHandle = undefined;\n update();\n });\n }\n const resizeObserver = typeof ResizeObserver === 'function'\n ? new ResizeObserver(scheduleUpdate)\n : undefined;\n for (const element of [overlayElement, sidebarElement, nativeRootElement]) {\n resizeObserver?.observe(element);\n }\n update();\n const mutationObserver = typeof MutationObserver === 'function'\n ? new MutationObserver(scheduleUpdate)\n : undefined;\n mutationObserver?.observe(nativeRootElement, { childList: true, subtree: true });\n return () => {\n resizeObserver?.disconnect();\n mutationObserver?.disconnect();\n if (frameHandle !== undefined)\n cancelAnimationFrame(frameHandle);\n };\n }, [active]);\n return { ref, width, bounds };\n}\n//# sourceMappingURL=sidebar-overlay-geometry.js.map","import { useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport { deriveSessionPresentationIndex } from '../../session/session-view.js';\nimport { useSidebarOverlayGeometry } from '../../overlay/sidebar-overlay-geometry.js';\nimport { effectiveViewMode } from '../../view/view-mode.js';\nimport { currentSessionIdFromList } from '../../session/session-selection.js';\nimport { EMPTY_FORK_RECOVERY_STORE, EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT, EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE, EMPTY_PERMISSION_NOTICE_SNAPSHOT, EMPTY_PERMISSION_NOTICE_SUBSCRIBE, useStableWorkspaceIds, } from '../shared.js';\nexport function useSurfaceSources({ props }) {\n const { useStore, available, manager, useSessions, useWorkspaces, forkRecovery, expandState, permissionNotice, fullAccessConfirmation, sessionOrder, } = props;\n const preferredMode = useStore((state) => state.viewMode);\n const mode = effectiveViewMode(preferredMode, available && manager !== undefined);\n const sessions = useSessions((state) => state);\n const workspaces = useWorkspaces((state) => state);\n const forkRecoveryStore = forkRecovery ?? EMPTY_FORK_RECOVERY_STORE;\n const forkRecoverySnapshot = useSyncExternalStore(forkRecoveryStore.subscribe, forkRecoveryStore.getSnapshot, forkRecoveryStore.getSnapshot);\n const currentSessionId = currentSessionIdFromList(sessions);\n const workspaceIds = useStableWorkspaceIds(workspaces.items);\n const workspaceIdsRef = useRef(workspaceIds);\n workspaceIdsRef.current = workspaceIds;\n const expandSnapshot = useSyncExternalStore(expandState.subscribe, expandState.getSnapshot, expandState.getSnapshot);\n const permissionNoticeSnapshot = useSyncExternalStore(permissionNotice?.subscribe ?? EMPTY_PERMISSION_NOTICE_SUBSCRIBE, permissionNotice?.getSnapshot ?? EMPTY_PERMISSION_NOTICE_SNAPSHOT, permissionNotice?.getSnapshot ?? EMPTY_PERMISSION_NOTICE_SNAPSHOT);\n const fullAccessConfirmationSnapshot = useSyncExternalStore(fullAccessConfirmation?.subscribe ?? EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE, fullAccessConfirmation?.getSnapshot ?? EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT, fullAccessConfirmation?.getSnapshot ?? EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT);\n const fullAccessConfirmationKey = fullAccessConfirmationSnapshot === undefined\n ? ''\n : [\n fullAccessConfirmationSnapshot.workspaceId,\n fullAccessConfirmationSnapshot.worktreeId,\n fullAccessConfirmationSnapshot.sessionId,\n fullAccessConfirmationSnapshot.cwd,\n ].join('\\u0000');\n const [fullAccessAcknowledged, setFullAccessAcknowledged] = useState(false);\n useEffect(() => {\n setFullAccessAcknowledged(false);\n }, [fullAccessConfirmationKey]);\n const sessionOrderSnapshot = useSyncExternalStore(sessionOrder.subscribe, sessionOrder.getSnapshot, sessionOrder.getSnapshot);\n const sessionPresentations = useMemo(() => deriveSessionPresentationIndex(sessions), [sessions.byId]);\n const { ref, width, bounds } = useSidebarOverlayGeometry(mode === 'worktree');\n const collapsed = width <= 64;\n const archivedSessionIds = workspaces.archivedSessionIds ?? [];\n return {\n preferredMode,\n mode,\n sessions,\n workspaces,\n forkRecoveryStore,\n forkRecoverySnapshot,\n currentSessionId,\n workspaceIds,\n workspaceIdsRef,\n expandSnapshot,\n permissionNoticeSnapshot,\n fullAccessConfirmationSnapshot,\n fullAccessConfirmationKey,\n fullAccessAcknowledged,\n setFullAccessAcknowledged,\n sessionOrderSnapshot,\n sessionPresentations,\n ref,\n width,\n bounds,\n collapsed,\n archivedSessionIds,\n };\n}\n//# sourceMappingURL=useSurfaceSources.js.map","import { useCallback, useEffect } from 'react';\nimport { createDefaultWorktreeName, executeWorktreeAction, reconcileBaseBranchSelection, selectDefaultBaseBranch, toWorktreeViewError, WorktreeSessionBindingError, WorktreeSessionPermissionError, } from '../../view/worktree-view.js';\nexport function useWorktreeRegistration({ source, registrationState, read, props, mutation, session, }) {\n const { workspaces } = source;\n const { worktreeModalWorkspaceId, modalReadLoading, setSelectedBranch, setNewBranch, setImportCandidates, importCandidatesGuard, modalWorkspaceIdRef, modalReadLoader, modalReadViewRef, setWorktreeModalWorkspaceId, setModalReadError, setModalReadLoading, setWorktreeModalMode, setSelectedImportPath, importCandidates, newBranch, selectedImportPath, worktreeModalMode, selectedBranch, } = registrationState;\n const { viewByWorkspace, loadModalWorktreeView, refresh } = read;\n const { manager, createSessionForWorktree: createSessionCallback } = props;\n const { actionPending, setActionError, setActionPending } = mutation;\n const { setPendingSessionBinding } = session;\n const modalWorkspace = workspaces.items.find((workspace) => workspace.workspaceId === worktreeModalWorkspaceId);\n const modalView = worktreeModalWorkspaceId === undefined\n ? undefined\n : viewByWorkspace.get(worktreeModalWorkspaceId);\n const modalReadiness = modalView?.readiness;\n const modalSetupStatus = modalView === undefined\n ? undefined\n : modalReadiness?.status === 'ready'\n ? modalView.branches.length === 0\n ? 'noLocalBranch'\n : undefined\n : modalReadiness?.status;\n const modalCanCreate = !modalReadLoading && modalSetupStatus === undefined && modalReadiness?.status === 'ready';\n useEffect(() => {\n if (worktreeModalWorkspaceId === undefined || modalView === undefined)\n return;\n if (modalView.readiness.status !== 'ready') {\n setSelectedBranch('');\n setNewBranch('');\n return;\n }\n setSelectedBranch((current) => reconcileBaseBranchSelection(current, modalView.branches));\n setNewBranch((current) => {\n if (current.length > 0)\n return current;\n const existingNames = [\n ...modalView.branches.map((branch) => branch.name),\n ...modalView.worktrees.map((worktree) => worktree.branch),\n ];\n return createDefaultWorktreeName(existingNames);\n });\n }, [modalView, worktreeModalWorkspaceId]);\n const loadImportCandidates = useCallback(async (workspaceId) => {\n if (manager === undefined)\n return;\n setImportCandidates((current) => ({ status: 'loading', candidates: current.candidates }));\n await importCandidatesGuard.current.run(() => manager.listImportCandidates({ workspaceId }), (candidates) => {\n if (modalWorkspaceIdRef.current !== workspaceId)\n return;\n setImportCandidates({ status: 'ready', candidates });\n }, (error) => {\n if (modalWorkspaceIdRef.current !== workspaceId)\n return;\n setImportCandidates((current) => ({\n status: 'error',\n candidates: current.candidates,\n error: toWorktreeViewError(error),\n }));\n });\n }, [manager]);\n const closeWorktreeCreator = (force = false) => {\n if (actionPending && !force)\n return;\n modalReadLoader.current.invalidate();\n modalReadViewRef.current = undefined;\n importCandidatesGuard.current.invalidate();\n setWorktreeModalWorkspaceId(undefined);\n setModalReadError(undefined);\n setModalReadLoading(false);\n };\n const openWorktreeCreator = (workspace, defaults = {}) => {\n const view = viewByWorkspace.get(workspace.workspaceId);\n modalReadLoader.current.invalidate();\n modalReadViewRef.current = undefined;\n importCandidatesGuard.current.invalidate();\n setWorktreeModalWorkspaceId(workspace.workspaceId);\n setWorktreeModalMode('create');\n setImportCandidates({ status: 'idle', candidates: [] });\n setSelectedImportPath(undefined);\n setActionError(undefined);\n setModalReadError(undefined);\n setModalReadLoading(false);\n if (view === undefined) {\n setSelectedBranch(defaults.baseBranch ?? '');\n setNewBranch(defaults.newBranch ?? '');\n loadModalWorktreeView(workspace.workspaceId);\n return;\n }\n setSelectedBranch(defaults.baseBranch ?? selectDefaultBaseBranch(view.branches));\n setNewBranch(defaults.newBranch ??\n createDefaultWorktreeName([\n ...view.branches.map((branch) => branch.name),\n ...view.worktrees.map((worktree) => worktree.branch),\n ]));\n };\n const changeWorktreeModalMode = (mode) => {\n setWorktreeModalMode(mode);\n if (mode === 'import' &&\n worktreeModalWorkspaceId !== undefined &&\n importCandidates.status === 'idle') {\n void loadImportCandidates(worktreeModalWorkspaceId);\n }\n };\n const continueWorktreeRegistration = async (registeredWorktree) => {\n closeWorktreeCreator(true);\n if (createSessionCallback === undefined) {\n await refresh({\n scope: { kind: 'workspace', workspaceId: registeredWorktree.workspaceId },\n preserveCurrent: true,\n });\n setActionError({\n code: 'WORKTREE_REGISTRATION_SESSION_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n const sessionInput = {\n workspaceId: registeredWorktree.workspaceId,\n worktreeId: registeredWorktree.worktreeId,\n cwd: registeredWorktree.absolutePath,\n };\n try {\n await createSessionCallback(sessionInput);\n }\n catch (error) {\n if (error instanceof WorktreeSessionBindingError && error.retryable) {\n setPendingSessionBinding({ ...sessionInput, sessionId: error.sessionId });\n }\n if (error instanceof WorktreeSessionPermissionError && error.retryable) {\n setPendingSessionBinding({\n ...sessionInput,\n sessionId: error.sessionId,\n permissionRequired: true,\n });\n }\n throw error;\n }\n await refresh({\n scope: { kind: 'workspace', workspaceId: registeredWorktree.workspaceId },\n preserveCurrent: true,\n });\n };\n const submitWorktree = async () => {\n const worktreeName = newBranch.trim();\n const selectedImportCandidate = importCandidates.candidates.find((candidate) => candidate.absolutePath === selectedImportPath);\n if (manager === undefined || modalWorkspace === undefined)\n return;\n if (worktreeModalMode === 'create' &&\n (!modalCanCreate || selectedBranch.length === 0 || worktreeName.length === 0))\n return;\n if (worktreeModalMode === 'import' && selectedImportCandidate === undefined)\n return;\n setActionPending(true);\n setActionError(undefined);\n setPendingSessionBinding(undefined);\n try {\n const registeredWorktree = worktreeModalMode === 'create'\n ? await executeWorktreeAction(manager, {\n type: 'createWorktree',\n input: {\n workspaceId: modalWorkspace.workspaceId,\n branch: selectedBranch,\n newBranch: worktreeName,\n },\n })\n : await executeWorktreeAction(manager, {\n type: 'importWorktree',\n input: {\n workspaceId: modalWorkspace.workspaceId,\n absolutePath: selectedImportCandidate.absolutePath,\n },\n });\n if (registeredWorktree === undefined) {\n throw {\n code: 'WORKTREE_RECORD_MISSING',\n message: '',\n retryable: true,\n };\n }\n await continueWorktreeRegistration(registeredWorktree);\n }\n catch (error) {\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n return {\n modalWorkspace,\n modalView,\n modalReadiness,\n modalSetupStatus,\n modalCanCreate,\n loadImportCandidates,\n closeWorktreeCreator,\n openWorktreeCreator,\n changeWorktreeModalMode,\n continueWorktreeRegistration,\n submitWorktree,\n };\n}\n//# sourceMappingURL=useWorktreeRegistration.js.map","/** Localize the native-compatible Session status used by both surfaces. */\nexport function sessionStatusLabel(t, status) {\n switch (status.labelKey) {\n case 'running':\n return t('session.status.running');\n case 'subagentsRunning':\n return t(status.runningSubagentCount === 1\n ? 'session.status.subagentsRunning.one'\n : 'session.status.subagentsRunning.other', { n: status.runningSubagentCount });\n case 'idle':\n return t('session.status.idle');\n case 'waitingApproval':\n return t('session.status.waitingApproval');\n case 'planReview':\n return t('session.status.planReview');\n case 'waitingAnswer':\n return t('session.status.waitingAnswer');\n case 'completed':\n return t('session.status.completed');\n }\n}\n/** Localize the compact relative time shown for idle Sessions. */\nexport function sessionTimeLabel(t, value) {\n switch (value.unit) {\n case 'now':\n return t('session.time.now');\n case 'minutes':\n return t('session.time.minutes', { n: value.n });\n case 'hours':\n return t('session.time.hours', { n: value.n });\n case 'days':\n return t('session.time.days', { n: value.n });\n case 'months':\n return t('session.time.months', { n: value.n });\n case 'years':\n return t('session.time.years', { n: value.n });\n }\n}\n/** Include the native relative-time suffix used in Session hover details. */\nexport function sessionHoverTimeLabel(t, value) {\n const label = sessionTimeLabel(t, value);\n return value.unit === 'now' ? label : t('session.time.ago', { t: label });\n}\n//# sourceMappingURL=session-labels.js.map","import { stripExtendedWindowsPrefix } from '../../contract/windows-path.js';\n/** Encode path segments while retaining Windows drive and directory separators. */\nexport function vscodeFolderUrl(absolutePath) {\n const normalizedPath = stripExtendedWindowsPrefix(absolutePath);\n const windowsPath = /^[a-z]:[\\\\/]/i.test(normalizedPath) ||\n normalizedPath.startsWith('\\\\\\\\') || normalizedPath.startsWith('//');\n const path = windowsPath ? normalizedPath.replaceAll('\\\\', '/') : normalizedPath;\n const encoded = path.split('/').map(encodeURIComponent).join('/');\n const withDrive = windowsPath ? encoded.replace(/^([a-z])%3A/i, '$1:') : encoded;\n return 'vscode://file' + (withDrive.startsWith('/') ? '' : '/') + withDrive;\n}\n//# sourceMappingURL=vscode-url.js.map","// Official DSH Host open-in-app routes. Keep these URLs relative so requests stay on\n// the current DSH host and retain the Host's validation and permission checks.\nexport const OPEN_IN_APP_APPS_ROUTE = '/open-in-app/apps';\nexport const OPEN_IN_APP_ICON_ROUTE = '/open-in-app/icon/';\nexport const OPEN_IN_APP_OPEN_ROUTE = '/open-in-app/open';\nexport class OpenInAppController {\n fetcher;\n _apps = null;\n _choice = '';\n _loading;\n _listeners = new Set();\n constructor(fetcher = (input, init) => fetch(input, init)) {\n this.fetcher = fetcher;\n }\n get apps() {\n return this._apps;\n }\n get choice() {\n return this._choice;\n }\n subscribe(listener) {\n this._listeners.add(listener);\n return () => {\n this._listeners.delete(listener);\n };\n }\n notify() {\n for (const listener of this._listeners) {\n listener();\n }\n }\n load() {\n this._loading ??= this.run();\n return this._loading;\n }\n choose(appId) {\n if (this._choice === appId)\n return;\n this._choice = appId;\n this.notify();\n }\n iconUrl(appId) {\n return `${OPEN_IN_APP_ICON_ROUTE}${encodeURIComponent(appId)}`;\n }\n async launch(appId, path) {\n const body = { app: appId, path };\n const response = await this.fetcher(OPEN_IN_APP_OPEN_ROUTE, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(body),\n });\n if (!response.ok)\n throw new Error(`open failed: HTTP ${String(response.status)}`);\n }\n async run() {\n let apps = [];\n try {\n const response = await this.fetcher(OPEN_IN_APP_APPS_ROUTE, {\n headers: { accept: 'application/json' },\n });\n if (response.ok) {\n const payload = (await response.json());\n if (Array.isArray(payload.apps)) {\n apps = payload.apps.filter((id) => typeof id === 'string');\n }\n }\n }\n catch {\n // Swallows network failures: falls back to empty apps list\n }\n this._apps = apps;\n this.notify();\n }\n}\nexport const defaultOpenInAppController = new OpenInAppController();\n//# sourceMappingURL=open-in-app-controller.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from 'react';\nimport { Menu } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconChevronDownOutline14 } from '../dsh-icons.js';\nimport { vscodeFolderUrl } from './vscode-url.js';\nimport { defaultOpenInAppController } from './open-in-app-controller.js';\nimport css from './open-in-app.css';\nconst APP_NAMES = {\n cursor: 'Cursor',\n vscode: 'VS Code',\n vscodeinsiders: 'VS Code Insiders',\n windsurf: 'Windsurf',\n zed: 'Zed',\n sublimetext: 'Sublime Text',\n xcode: 'Xcode',\n androidstudio: 'Android Studio',\n intellij: 'IntelliJ IDEA',\n pycharm: 'PyCharm',\n webstorm: 'WebStorm',\n phpstorm: 'PhpStorm',\n goland: 'GoLand',\n rider: 'Rider',\n rustrover: 'RustRover',\n fork: 'Fork',\n sourcetree: 'Sourcetree',\n github: 'GitHub Desktop',\n tower: 'Tower',\n gitkraken: 'GitKraken',\n smartgit: 'SmartGit',\n sublimemerge: 'Sublime Merge',\n ghostty: 'Ghostty',\n warp: 'Warp',\n iterm: 'iTerm2',\n kitty: 'kitty',\n terminal: 'Terminal',\n finder: 'Finder',\n explorer: 'Explorer',\n};\nconst failedIcons = new Set();\nfunction AppIcon({ id, url, size }) {\n const [failed, setFailed] = useState(failedIcons.has(id));\n if (failed) {\n return (_jsx(\"svg\", { width: size, height: size, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1.8, className: css.icon, \"aria-hidden\": \"true\", children: _jsx(\"rect\", { x: \"3\", y: \"3\", width: \"18\", height: \"18\", rx: \"5\" }) }));\n }\n return (_jsx(\"img\", { src: url, width: size, height: size, className: css.icon, alt: \"\", \"aria-hidden\": \"true\", draggable: false, onError: () => {\n failedIcons.add(id);\n setFailed(true);\n } }));\n}\nconst BUSY_DRESS_DELAY_MS = 250;\nexport function OpenInAppButton({ path, t, controller = defaultOpenInAppController, }) {\n useEffect(() => {\n void controller.load();\n }, [controller]);\n const appsSnapshot = useSyncExternalStore((onStoreChange) => controller.subscribe(onStoreChange), () => controller.apps, () => null);\n const choiceSnapshot = useSyncExternalStore((onStoreChange) => controller.subscribe(onStoreChange), () => controller.choice, () => '');\n const [open, setOpen] = useState(false);\n const [phase, setPhase] = useState('idle');\n const inFlight = useRef(false);\n const busyTimer = useRef(undefined);\n const errorTimer = useRef(undefined);\n useEffect(() => () => {\n clearTimeout(busyTimer.current);\n clearTimeout(errorTimer.current);\n }, []);\n // If host has no apps or request failed, fallback to native vscode:// link\n if (appsSnapshot === null || appsSnapshot.length === 0) {\n return (_jsx(\"a\", { className: `${css.split} ${css.fallback}`, href: vscodeFolderUrl(path), \"data-dashboard-action\": \"open-editor\", children: _jsx(\"span\", { className: css.main, children: t('dashboard.openEditor') }) }));\n }\n const validApps = appsSnapshot;\n const currentAppId = validApps.find((appId) => appId === choiceSnapshot) ?? validApps[0] ?? 'vscode';\n const currentAppName = APP_NAMES[currentAppId] ?? currentAppId;\n const buttonLabel = t('dashboard.openIn', { app: currentAppName });\n const launch = (appId) => {\n if (inFlight.current)\n return;\n inFlight.current = true;\n clearTimeout(errorTimer.current);\n clearTimeout(busyTimer.current);\n busyTimer.current = setTimeout(() => {\n setPhase('busy');\n }, BUSY_DRESS_DELAY_MS);\n controller\n .launch(appId, path)\n .then(() => {\n inFlight.current = false;\n clearTimeout(busyTimer.current);\n setPhase('idle');\n })\n .catch(() => {\n inFlight.current = false;\n clearTimeout(busyTimer.current);\n setPhase('error');\n clearTimeout(errorTimer.current);\n errorTimer.current = setTimeout(() => {\n setPhase('idle');\n }, 2000);\n });\n };\n const menuItems = validApps.map((appId) => ({\n id: appId,\n label: APP_NAMES[appId] ?? appId,\n icon: _jsx(AppIcon, { id: appId, url: controller.iconUrl(appId), size: 16 }),\n }));\n return (_jsx(\"div\", { className: css.control, onKeyDown: (event) => {\n if (event.key === 'Escape' && open) {\n event.stopPropagation();\n setOpen(false);\n }\n }, children: _jsx(Menu, { open: open, align: \"end\", dense: true, onClose: () => {\n setOpen(false);\n }, items: menuItems, selectedId: currentAppId, onSelect: (id) => {\n setOpen(false);\n if (inFlight.current)\n return;\n controller.choose(id);\n launch(id);\n }, anchor: _jsxs(\"div\", { className: css.split, \"data-dashboard-action\": \"open-editor\", children: [_jsxs(\"button\", { type: \"button\", className: css.main, \"data-state\": phase, disabled: phase === 'busy', \"aria-label\": buttonLabel, title: buttonLabel, onClick: () => {\n launch(currentAppId);\n }, children: [_jsx(AppIcon, { id: currentAppId, url: controller.iconUrl(currentAppId), size: 16 }), _jsx(\"span\", { children: buttonLabel })] }), validApps.length > 1 && (_jsx(\"button\", { type: \"button\", className: css.chevron, \"aria-expanded\": open, \"aria-haspopup\": \"menu\", \"aria-label\": t('dashboard.editorMenu'), disabled: phase === 'busy', onClick: () => {\n setOpen((prev) => !prev);\n }, children: _jsx(IconChevronDownOutline14, { size: 12 }) }))] }) }) }));\n}\n//# sourceMappingURL=OpenInAppButton.js.map","// Upstream AppFrame's 8px Sidebar handle is centered on the track boundary.\n// Keep its 4px right half outside this higher stacking-context overlay.\nconst SIDEBAR_RESIZE_HANDLE_HALF_WIDTH = 4;\n/** Reversible presentation only: leave the native React tree and Session alive. */\nexport function concealDashboardBackground(element) {\n const visibility = element.style.getPropertyValue('visibility');\n const priority = element.style.getPropertyPriority('visibility');\n const inert = element.getAttribute('inert');\n const hidden = element.getAttribute('aria-hidden');\n element.style.setProperty('visibility', 'hidden');\n element.setAttribute('inert', '');\n element.setAttribute('aria-hidden', 'true');\n return () => {\n if (element.style.getPropertyValue('visibility') === 'hidden') {\n if (visibility)\n element.style.setProperty('visibility', visibility, priority);\n else\n element.style.removeProperty('visibility');\n }\n for (const [name, value] of [\n ['inert', inert],\n ['aria-hidden', hidden],\n ]) {\n if (value === null)\n element.removeAttribute(name);\n else\n element.setAttribute(name, value);\n }\n };\n}\nexport function isRightSidebarOpenFromDom(frame, rightbar) {\n if (typeof frame.querySelector === 'function') {\n if (frame.querySelector('[data-sidebar-right-open]') !== null) {\n return true;\n }\n if (frame.hasAttribute('data-rightbar-collapsed')) {\n return false;\n }\n }\n if (frame.getAttribute?.('data-rightbar-collapsed') !== null) {\n return false;\n }\n if (rightbar instanceof HTMLElement) {\n if (rightbar.getAttribute?.('data-sidebar-right-open') !== null) {\n return true;\n }\n }\n return false;\n}\n/** Layout seam shared with the existing Sidebar overlay; fail closed on frame/center loss. */\nexport function mountDashboardOverlay(surface, onPlacement, options) {\n const overlay = surface.closest('[data-shell-overlay]');\n const frame = overlay?.parentElement;\n if (!overlay || !frame) {\n onPlacement(undefined);\n options?.onRightSidebarChange?.(false);\n return () => { };\n }\n const hidden = new Map();\n let observed = [];\n let scheduled;\n let disposed = false;\n let lastRightSidebarOpen;\n const restore = () => {\n for (const cleanup of hidden.values())\n cleanup();\n hidden.clear();\n };\n const schedule = () => {\n if (disposed || scheduled !== undefined)\n return;\n scheduled = requestAnimationFrame(() => {\n scheduled = undefined;\n update();\n });\n };\n const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(schedule);\n const update = () => {\n if (disposed)\n return;\n // AppFrame owns Sidebar | CenterColumn | [RightbarColumn] | shell.overlay.\n // The native rightbar is absent on a page with no current Session, but the\n // Dashboard still needs the same center-to-frame placement in that layout.\n // Do not depend on generated CSS class names or mutate slot registrations.\n const sidebar = frame.firstElementChild;\n const center = sidebar?.nextElementSibling;\n const rightbar = center?.nextElementSibling;\n const hasRightbar = rightbar instanceof HTMLElement &&\n rightbar !== overlay &&\n rightbar.nextElementSibling === overlay;\n const hasNoRightbar = rightbar === overlay;\n const valid = overlay.isConnected &&\n overlay.parentElement === frame &&\n sidebar instanceof HTMLElement &&\n center instanceof HTMLElement &&\n (hasRightbar || hasNoRightbar);\n const nextObserved = valid\n ? hasRightbar\n ? [overlay, sidebar, center, rightbar]\n : [overlay, sidebar, center]\n : [frame];\n for (const old of observed)\n if (!nextObserved.includes(old))\n resize?.unobserve(old);\n for (const next of nextObserved)\n if (!observed.includes(next))\n resize?.observe(next);\n observed = nextObserved;\n if (!valid) {\n restore();\n onPlacement(undefined);\n if (lastRightSidebarOpen) {\n lastRightSidebarOpen = false;\n options?.onRightSidebarChange?.(false);\n }\n return;\n }\n const box = overlay.getBoundingClientRect();\n const boundary = sidebar.getBoundingClientRect();\n const rightBoundary = hasRightbar && rightbar instanceof HTMLElement ? rightbar.getBoundingClientRect().left : box.right;\n const left = Math.max(0, boundary.right - box.left + SIDEBAR_RESIZE_HANDLE_HALF_WIDTH);\n const rightEdge = Math.min(box.right, rightBoundary);\n const width = rightEdge - box.left - left;\n if (width <= 0 || box.height <= 0) {\n restore();\n onPlacement(undefined);\n return;\n }\n for (const [element, cleanup] of hidden) {\n if (element !== center) {\n cleanup();\n hidden.delete(element);\n }\n }\n if (!hidden.has(center))\n hidden.set(center, concealDashboardBackground(center));\n onPlacement({ left, top: 0, width, height: box.height });\n const isRightSidebarOpen = options?.isRightSidebarExpanded !== undefined\n ? options.isRightSidebarExpanded()\n : isRightSidebarOpenFromDom(frame, hasRightbar ? rightbar : undefined);\n if (lastRightSidebarOpen !== isRightSidebarOpen) {\n lastRightSidebarOpen = isRightSidebarOpen;\n options?.onRightSidebarChange?.(isRightSidebarOpen);\n }\n };\n const mutation = typeof MutationObserver === 'undefined' ? undefined : new MutationObserver(schedule);\n try {\n mutation?.observe(frame, {\n childList: true,\n attributes: true,\n subtree: true,\n attributeFilter: [\n 'data-rightbar-collapsed',\n 'data-sidebar-right-open',\n 'data-sidebar-right-panel',\n ],\n });\n }\n catch {\n mutation?.observe(frame, { childList: true });\n }\n // Frame replacement may detach all original anchors at once.\n if (frame.parentElement) {\n try {\n mutation?.observe(frame.parentElement, { childList: true });\n }\n catch {\n // ignore\n }\n }\n update();\n return () => {\n disposed = true;\n resize?.disconnect();\n mutation?.disconnect();\n if (scheduled !== undefined)\n cancelAnimationFrame(scheduled);\n restore();\n if (lastRightSidebarOpen) {\n lastRightSidebarOpen = false;\n options?.onRightSidebarChange?.(false);\n }\n };\n}\n//# sourceMappingURL=dashboard-overlay.js.map","export function selectWorktreeAcquisitionFacts(record) {\n return {\n timestampKind: record.source === 'external' ? 'imported' : 'created',\n ...(record.source === 'external'\n ? record.importedAt === undefined\n ? {}\n : { timestamp: record.importedAt }\n : record.createdAt === undefined\n ? {}\n : { timestamp: record.createdAt }),\n ...(record.baseBranch === undefined ? {} : { baseBranch: record.baseBranch }),\n };\n}\n//# sourceMappingURL=worktree-acquisition-facts.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect, useRef, useState } from 'react';\nimport styles from './dashboard.css';\nexport function WorktreeInstructions({ value, onSave, t, disabled, }) {\n const [saved, setSaved] = useState(value);\n const [draft, setDraft] = useState();\n const [error, setError] = useState(false);\n const [pending, setPending] = useState(false);\n const busy = useRef(false);\n const alive = useRef(true);\n useEffect(() => {\n alive.current = true;\n return () => {\n alive.current = false;\n };\n }, []);\n useEffect(() => {\n setSaved(value);\n }, [value]);\n const expected = useRef(value);\n const save = async () => {\n if (busy.current || draft === undefined || !onSave)\n return;\n busy.current = true;\n setPending(true);\n setError(false);\n try {\n const result = await onSave(draft, expected.current);\n if (alive.current) {\n setSaved(result);\n setDraft(undefined);\n }\n }\n catch {\n if (alive.current)\n setError(true);\n }\n finally {\n busy.current = false;\n if (alive.current)\n setPending(false);\n }\n };\n return (_jsxs(\"div\", { children: [_jsx(\"p\", { children: t('dashboard.instructionsHint') }), draft === undefined ? (_jsxs(_Fragment, { children: [_jsx(\"p\", { className: styles.dashboardInstructionsText, children: saved || t('dashboard.noInstructions') }), _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: disabled || !onSave, onClick: () => {\n expected.current = saved;\n setDraft(saved);\n setError(false);\n }, children: t('dashboard.edit') })] })) : (_jsxs(_Fragment, { children: [_jsx(\"textarea\", { className: styles.dashboardInstructionsInput, \"aria-label\": t('dashboard.instructions'), value: draft, maxLength: 32000, rows: 8, disabled: pending, onChange: (event) => setDraft(event.target.value) }), _jsxs(\"div\", { className: styles.dashboardInstructionActions, children: [_jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: pending || disabled, onClick: () => void save(), children: t(pending ? 'dashboard.savingInstructions' : 'dashboard.saveInstructions') }), _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: pending, onClick: () => {\n setDraft(undefined);\n setError(false);\n }, children: t('dashboard.cancelInstructions') })] }), error && _jsx(\"p\", { role: \"alert\", children: t('dashboard.instructionsSaveFailed') })] }))] }));\n}\n//# sourceMappingURL=WorktreeInstructions.js.map","/**\n * Shared Git-tab facts. These helpers stay free of React and DOM APIs so the\n * Dashboard's branch, Main, and line-total rules have one definition.\n */\n/** Main (Local) Worktree ids never carry a Worktree-relative Git comparison. */\nexport function isMainWorktreeId(worktreeId) {\n return worktreeId === 'main' || worktreeId.startsWith('main:');\n}\n/** Trim a branch value and drop empty strings. */\nexport function normalizeBranch(branch) {\n const normalized = branch?.trim();\n return normalized === undefined || normalized.length === 0 ? undefined : normalized;\n}\n/** A baseline equal to the current Worktree branch is not a usable default. */\nexport function normalizeBaselineBranch(value, currentBranch) {\n const baseline = normalizeBranch(value);\n return baseline === undefined || baseline === currentBranch ? undefined : baseline;\n}\n/**\n * Sum the known text-file additions/deletions. Binary files have no line\n * counts, so they are ignored when a target also contains readable files;\n * binary-only targets remain explicitly unknown.\n */\nexport function sumLineTotals(files) {\n let additions = 0;\n let deletions = 0;\n let knownFiles = 0;\n for (const file of files) {\n if (file.additions === undefined || file.deletions === undefined)\n continue;\n additions += file.additions;\n deletions += file.deletions;\n knownFiles += 1;\n }\n return files.length === 0 || knownFiles > 0 ? { additions, deletions } : undefined;\n}\n//# sourceMappingURL=git-facts.js.map","const byName = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\nfunction compareNodes(left, right) {\n if (left.kind !== right.kind)\n return left.kind === 'folder' ? -1 : 1;\n return byName.compare(left.name, right.name);\n}\nfunction materialize(nodes) {\n return [...nodes.values()].sort(compareNodes).map((node) => node.kind === 'folder'\n ? {\n kind: 'folder',\n name: node.name,\n path: node.path,\n children: materialize(node.children),\n }\n : node);\n}\n/** Build a stable, directory-first tree from Git's slash-separated relative paths. */\nexport function buildGitFileTree(files) {\n const roots = new Map();\n for (const file of files) {\n const segments = file.path.split('/').filter((segment) => segment.length > 0);\n if (segments.length === 0) {\n roots.set(file.path, { kind: 'file', name: file.path, file });\n continue;\n }\n let nodes = roots;\n let directoryPath = '';\n for (let index = 0; index < segments.length - 1; index += 1) {\n const segment = segments[index];\n directoryPath = directoryPath.length === 0 ? segment : directoryPath + '/' + segment;\n const folderKey = 'folder:' + segment;\n const existing = nodes.get(folderKey);\n if (existing?.kind === 'folder') {\n nodes = existing.children;\n continue;\n }\n const folder = {\n kind: 'folder',\n name: segment,\n path: directoryPath,\n children: new Map(),\n };\n nodes.set(folderKey, folder);\n nodes = folder.children;\n }\n const name = segments[segments.length - 1];\n const fileKey = 'file:' + name + ':' + file.path + ':' + (file.oldPath ?? '');\n nodes.set(fileKey, { kind: 'file', name, file });\n }\n return materialize(roots);\n}\n//# sourceMappingURL=git-file-tree.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as primitives from '@deepseek-ai/dsh-client-ui-primitives';\nfunction FallbackFileIcon({ className, size = 16 }) {\n return (_jsxs(\"svg\", { viewBox: \"0 0 16 16\", width: size, height: size, fill: \"none\", stroke: \"currentColor\", strokeWidth: \"1.2\", strokeLinecap: \"round\", strokeLinejoin: \"round\", className: className, \"aria-hidden\": \"true\", children: [_jsx(\"path\", { d: \"M3 2h6l4 4v8H3V2z\" }), _jsx(\"path\", { d: \"M9 2v4h4\" })] }));\n}\n/**\n * Standard DSH file type icon with fallback.\n * Uses FileTypeIcon from @deepseek-ai/dsh-client-ui-primitives when available,\n * and falls back to a clean SVG file glyph in older runtimes.\n */\n/**\n * Optional native primitives, resolved once at module scope instead of on every\n * rendered changed-file row.\n */\nconst primitivesRecord = primitives;\nconst FileTypeIcon = primitivesRecord.FileTypeIcon;\nconst classifyFileType = primitivesRecord.classifyFileType;\nexport function GitFileTypeIcon({ path, className, size = 16 }) {\n if (typeof FileTypeIcon === 'function' && typeof classifyFileType === 'function') {\n return _jsx(FileTypeIcon, { kind: classifyFileType(path), size: size, className: className });\n }\n return _jsx(FallbackFileIcon, { className: className, size: size });\n}\n//# sourceMappingURL=GitFileTypeIcon.js.map","import { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport styles from './worktree-git.css';\n/** Compact, color-coded Git line counts shared by overview and changed-file rows. */\nexport function GitLineStats({ additions, deletions, ariaLabel, className, }) {\n if (additions === undefined && deletions === undefined)\n return null;\n return (_jsxs(\"span\", { className: [styles.gitLineStats, className].filter(Boolean).join(' '), \"aria-label\": ariaLabel, \"data-dashboard-git-line-stats\": true, children: [additions !== undefined && (_jsxs(\"span\", { className: styles.gitLineAdded, \"data-dashboard-git-additions\": true, children: [\"+\", additions] })), deletions !== undefined && (_jsxs(\"span\", { className: styles.gitLineRemoved, \"data-dashboard-git-deletions\": true, children: [\"-\", deletions] }))] }));\n}\n//# sourceMappingURL=GitLineStats.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconFolderClose16, IconFolderOpen16 } from '../../dsh-icons.js';\nimport { useId, useMemo, useState } from 'react';\nimport { buildGitFileTree } from './git-file-tree.js';\nimport { GitFileTypeIcon } from './GitFileTypeIcon.js';\nimport { GitLineStats } from './GitLineStats.js';\nimport styles from './worktree-git.css';\n/** Localized status wording for the row title and accessible label, so the color cue is still announced. */\nconst STATUS_LABELS = {\n added: 'dashboard.git.status.added',\n modified: 'dashboard.git.status.modified',\n deleted: 'dashboard.git.status.deleted',\n renamed: 'dashboard.git.status.renamed',\n copied: 'dashboard.git.status.copied',\n 'type-changed': 'dashboard.git.status.typeChanged',\n};\nfunction shortCommit(commit) {\n return commit.slice(0, 7);\n}\nfunction fileName(path) {\n const segments = path.split('/').filter((segment) => segment.length > 0);\n return segments.at(-1) ?? path;\n}\nfunction fileTitle(file) {\n return file.oldPath !== undefined && file.oldPath !== file.path\n ? file.oldPath + ' → ' + file.path\n : file.path;\n}\nfunction fileLabel(file) {\n const name = fileName(file.path);\n if (file.oldPath === undefined || file.oldPath === file.path)\n return name;\n return (_jsxs(_Fragment, { children: [fileName(file.oldPath), \" \", _jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u2192\" }), \" \", name] }));\n}\nfunction folderId(treeId, path) {\n return 'dashboard-git-folder-' + treeId + '-' + encodeURIComponent(path);\n}\nfunction renderTreeNodes({ treeId, level, nodes, collapsedFolders, toggleFolder, selectedPath, onSelect, t, }) {\n return nodes.map((node, index) => {\n if (node.kind === 'folder') {\n const collapsed = collapsedFolders.has(node.path);\n const childrenId = folderId(treeId, node.path);\n return (_jsxs(\"li\", { className: styles.gitFolder, role: \"treeitem\", \"aria-level\": level, \"aria-posinset\": index + 1, \"aria-setsize\": nodes.length, \"aria-expanded\": !collapsed, children: [_jsxs(\"button\", { type: \"button\", className: styles.gitFolderButton, \"data-dashboard-git-folder\": node.path, \"aria-expanded\": !collapsed, \"aria-controls\": childrenId, onClick: () => toggleFolder(node.path), onKeyDown: (event) => {\n if (event.key === 'ArrowRight' && collapsed) {\n event.preventDefault();\n toggleFolder(node.path);\n }\n else if (event.key === 'ArrowLeft' && !collapsed) {\n event.preventDefault();\n toggleFolder(node.path);\n }\n }, children: [_jsx(\"span\", { className: styles.gitFolderIcon, \"aria-hidden\": \"true\", children: collapsed ? _jsx(IconFolderClose16, {}) : _jsx(IconFolderOpen16, {}) }), _jsx(\"span\", { className: styles.gitFolderName, title: node.path, children: node.name })] }), _jsx(\"ul\", { id: childrenId, className: styles.gitFolderChildren, role: \"group\", hidden: collapsed, children: renderTreeNodes({\n treeId,\n level: level + 1,\n nodes: node.children,\n collapsedFolders,\n toggleFolder,\n selectedPath,\n onSelect,\n t,\n }) })] }, 'folder:' + node.path));\n }\n const { file } = node;\n const isSelected = selectedPath === file.path || selectedPath === file.oldPath;\n // The row color carries the status visually; the localized wording stays in the\n // title and accessible label so the row remains readable without color.\n const statusText = fileTitle(file) + ' · ' + t(STATUS_LABELS[file.status]);\n return (_jsx(\"li\", { role: \"treeitem\", \"aria-level\": level, \"aria-posinset\": index + 1, \"aria-setsize\": nodes.length, \"aria-selected\": isSelected, children: _jsxs(\"button\", { type: \"button\", \"aria-selected\": isSelected, \"data-dashboard-git-file\": file.path, \"aria-label\": statusText, title: statusText, onClick: () => onSelect(file.path), children: [_jsx(\"span\", { className: styles.gitFileIcon, \"aria-hidden\": \"true\", children: _jsx(GitFileTypeIcon, { path: file.path, className: styles.gitFileIconGlyph }) }), _jsx(\"span\", { className: styles.gitFilePath, \"data-status\": file.status, title: statusText, children: fileLabel(file) }), _jsx(GitLineStats, { additions: file.additions, deletions: file.deletions, ariaLabel: file.additions === undefined || file.deletions === undefined\n ? undefined\n : t('dashboard.git.lineStats', { additions: file.additions, deletions: file.deletions }) }), file.commits !== undefined && file.commits.length > 0 && (_jsx(\"code\", { className: styles.gitFileContributors, title: file.commits.join(', '), children: file.commits.map(shortCommit).join(', ') }))] }) }, 'file:' + (file.oldPath ?? '') + '\\u0000' + file.path));\n });\n}\n/** Changed-file tree; only paths returned by Host are selectable. */\nexport function GitChangedFiles({ files, selectedPath, onSelect, t }) {\n const treeInstanceId = useId().replaceAll(':', '');\n const [collapsedFolders, setCollapsedFolders] = useState(() => new Set());\n // Building the tree sorts every folder, so it is derived once per file list\n // instead of on each render of the surrounding panel.\n const tree = useMemo(() => buildGitFileTree(files), [files]);\n const toggleFolder = (path) => {\n setCollapsedFolders((previous) => {\n const next = new Set(previous);\n if (next.has(path))\n next.delete(path);\n else\n next.add(path);\n return next;\n });\n };\n return (_jsx(\"ul\", { className: styles.gitChangedFileList, role: \"tree\", \"aria-label\": t('dashboard.git.changedFiles'), \"data-dashboard-git-file-tree\": true, children: renderTreeNodes({\n treeId: treeInstanceId,\n level: 1,\n nodes: tree,\n collapsedFolders,\n toggleFolder,\n selectedPath,\n onSelect,\n t,\n }) }));\n}\n//# sourceMappingURL=GitChangedFiles.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useRef } from 'react';\nimport styles from './worktree-git.css';\nfunction commitDate(value) {\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString();\n}\n/** Keyboard-navigable, optionally multi-selectable, graph-free commit list for the Dashboard. */\nexport function GitCommitList({ commits, selectedCommit, selectedCommits = [], multiSelect = false, onSelect, onToggle, t }) {\n const itemRefs = useRef([]);\n const move = (index, direction) => {\n const nextIndex = direction === 'first'\n ? 0\n : direction === 'last'\n ? commits.length - 1\n : Math.max(0, Math.min(commits.length - 1, index + direction));\n itemRefs.current[nextIndex]?.focus();\n };\n const pick = (commit) => {\n // The working tree is a single live target, so it always replaces the selection.\n if (!multiSelect || commit.kind === 'working-tree' || onToggle === undefined)\n onSelect(commit.sha);\n else\n onToggle(commit.sha);\n };\n return (_jsx(\"ul\", { className: styles.gitCommitList, role: \"listbox\", \"aria-multiselectable\": multiSelect, \"data-dashboard-git-commit-multiselect\": multiSelect ? 'on' : 'off', \"aria-label\": t('dashboard.git.commits'), \"aria-describedby\": multiSelect ? 'dashboard-git-commit-selection-hint' : undefined, children: commits.map((commit, index) => {\n const isWorkingTree = commit.kind === 'working-tree';\n const isSelected = isWorkingTree\n ? selectedCommit === commit.sha\n : selectedCommits.includes(commit.sha);\n return (_jsx(\"li\", { children: _jsxs(\"button\", { ref: (element) => { itemRefs.current[index] = element; }, type: \"button\", role: \"option\", \"aria-selected\": isSelected, \"aria-posinset\": index + 1, \"aria-setsize\": commits.length, \"data-dashboard-git-commit\": commit.sha, \"data-dashboard-git-commit-kind\": commit.kind ?? 'commit', onClick: () => pick(commit), onKeyDown: (event) => {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n move(index, -1);\n }\n else if (event.key === 'ArrowDown') {\n event.preventDefault();\n move(index, 1);\n }\n else if (event.key === 'Home') {\n event.preventDefault();\n move(index, 'first');\n }\n else if (event.key === 'End') {\n event.preventDefault();\n move(index, 'last');\n }\n else if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n pick(commit);\n }\n }, children: [multiSelect && (_jsx(\"span\", { className: styles.gitCommitSelectionMark, \"aria-hidden\": \"true\", children: isSelected ? '✓' : '○' })), _jsx(\"span\", { className: styles.gitCommitSubject, children: isWorkingTree ? t('dashboard.git.uncommittedChanges') : commit.subject || t('dashboard.git.untitledCommit') }), _jsx(\"span\", { className: styles.gitCommitMeta, children: isWorkingTree ? (_jsx(\"span\", { className: styles.gitCommitWorkingTree, children: t('dashboard.git.workingTree') })) : (_jsxs(_Fragment, { children: [_jsx(\"code\", { children: commit.sha.slice(0, 7) }), _jsx(\"span\", { children: commit.authorName }), _jsx(\"time\", { dateTime: commit.authoredAt, title: commitDate(commit.authoredAt), children: commitDate(commit.authoredAt) })] })) })] }) }, commit.sha));\n }) }));\n}\n//# sourceMappingURL=GitCommitList.js.map","const HUNK_HEADER = /^@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/u;\n/** Parse only the small unified-diff subset needed by the V1 plain-text renderer. */\nexport function parseUnifiedDiff(patch) {\n const hunks = [];\n let current;\n let oldLine = 0;\n let newLine = 0;\n const flush = () => {\n if (current === undefined)\n return;\n hunks.push({\n oldStart: current.oldStart,\n oldLines: current.oldLines,\n newStart: current.newStart,\n newLines: current.newLines,\n lines: current.lines,\n });\n current = undefined;\n };\n for (const rawLine of patch.split(/\\r?\\n/u)) {\n const header = HUNK_HEADER.exec(rawLine);\n if (header !== null) {\n flush();\n oldLine = Number(header[1]);\n newLine = Number(header[3]);\n current = {\n oldStart: oldLine,\n oldLines: Number(header[2] ?? '1'),\n newStart: newLine,\n newLines: Number(header[4] ?? '1'),\n lines: [],\n };\n continue;\n }\n if (current === undefined || rawLine === '\\\')\n continue;\n const marker = rawLine[0];\n const text = rawLine.slice(1);\n if (marker === ' ') {\n current.lines.push({ type: 'context', oldLine, newLine, text });\n oldLine += 1;\n newLine += 1;\n }\n else if (marker === '+') {\n current.lines.push({ type: 'add', newLine, text });\n newLine += 1;\n }\n else if (marker === '-') {\n current.lines.push({ type: 'delete', oldLine, text });\n oldLine += 1;\n }\n }\n flush();\n return hunks;\n}\n//# sourceMappingURL=git-diff-parser.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { IconRightUpOutline16 } from '../../dsh-icons.js';\nimport { useEffect, useMemo, useState } from 'react';\nimport { parseUnifiedDiff } from './git-diff-parser.js';\nimport { GitFileTypeIcon } from './GitFileTypeIcon.js';\nimport styles from './worktree-git.css';\n/**\n * Rendering budget for one patch. The provider already bounds patch bytes, but a\n * large summary can still hold thousands of lines, so the panel folds hunks\n * beyond this budget and offers to render the rest on request.\n */\nconst MAX_RENDERED_DIFF_LINES = 2000;\nfunction hunkLabel(hunk) {\n return '@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@';\n}\nfunction shortCommit(commit) {\n return commit.slice(0, 7);\n}\n/** Fold whole hunks once the render budget is reached. */\nfunction limitHunks(hunks, maxLines) {\n const visible = [];\n let rendered = 0;\n let hiddenLines = 0;\n for (const hunk of hunks) {\n const cost = hunk.lines.length + 1;\n if (rendered < maxLines) {\n visible.push(hunk);\n rendered += cost;\n continue;\n }\n hiddenLines += cost;\n }\n return { hunks: visible, hiddenLines };\n}\n/** Render one unified patch as escaped plain text with lightweight line numbers. */\nfunction DiffHunks({ patch, t }) {\n const hunks = useMemo(() => parseUnifiedDiff(patch), [patch]);\n const [expanded, setExpanded] = useState(false);\n useEffect(() => {\n setExpanded(false);\n }, [patch]);\n if (hunks.length === 0) {\n return _jsx(\"pre\", { className: styles.gitRawDiff, children: patch || t('dashboard.git.emptyDiff') });\n }\n const limited = expanded ? { hunks, hiddenLines: 0 } : limitHunks(hunks, MAX_RENDERED_DIFF_LINES);\n return (_jsxs(_Fragment, { children: [limited.hunks.map((hunk, hunkIndex) => (_jsxs(\"section\", { className: styles.gitDiffHunk, children: [_jsx(\"div\", { className: styles.gitDiffHunkHeader, children: hunkLabel(hunk) }), hunk.lines.map((line, lineIndex) => (_jsxs(\"div\", { className: styles.gitDiffLine + ' ' + styles['gitDiffLine' + line.type], children: [_jsx(\"span\", { className: styles.gitDiffLineNumber, children: line.type === 'add' ? '' : line.oldLine }), _jsx(\"span\", { className: styles.gitDiffLineNumber, children: line.type === 'delete' ? '' : line.newLine }), _jsxs(\"code\", { children: [_jsx(\"span\", { \"aria-hidden\": \"true\", children: line.type === 'context' ? ' ' : line.type === 'add' ? '+' : '-' }), line.text] })] }, line.type + '-' + lineIndex)))] }, hunk.oldStart + '-' + hunk.newStart + '-' + hunkIndex))), limited.hiddenLines > 0 && (_jsxs(\"div\", { className: styles.gitDiffFolded, children: [_jsx(\"span\", { children: t('dashboard.git.diffLinesHidden', { n: limited.hiddenLines }) }), _jsx(\"button\", { type: \"button\", className: styles.gitDiffShowAll, \"data-dashboard-git-show-full-diff\": true, onClick: () => setExpanded(true), children: t('dashboard.git.showFullDiff') })] }))] }));\n}\nfunction DiffSegment({ segment, t }) {\n return (_jsxs(\"section\", { className: styles.gitDiffSegment, children: [_jsxs(\"div\", { className: styles.gitDiffSegmentHeader, children: [t('dashboard.git.commitDiffSection'), \" \", _jsx(\"code\", { children: shortCommit(segment.commit) })] }), segment.binary ? (_jsx(\"div\", { className: styles.gitDiffMessage, children: t('dashboard.git.binary') })) : segment.truncated ? (_jsx(\"div\", { className: styles.gitDiffMessage, children: t('dashboard.git.diffTruncated') })) : (_jsx(DiffHunks, { patch: segment.patch, t: t }))] }));\n}\n/** Render unified diff content as escaped plain text with lightweight line numbers. */\nexport function GitDiffView({ diff, onOpenFile, t }) {\n if (diff === undefined) {\n return _jsx(\"div\", { className: styles.gitDiffEmpty, children: t('dashboard.git.selectFile') });\n }\n const toolbar = (_jsxs(\"div\", { className: styles.gitDiffToolbar, children: [_jsxs(\"span\", { className: styles.gitDiffPath, title: diff.path, children: [_jsx(GitFileTypeIcon, { path: diff.path, className: styles.gitFileIconGlyph }), diff.path] }), onOpenFile !== undefined && (_jsxs(\"button\", { type: \"button\", className: styles.gitDiffOpenInSidebar, onClick: () => onOpenFile(diff.path), title: t('dashboard.git.openInSidebar'), \"data-dashboard-git-open-file\": diff.path, children: [_jsx(IconRightUpOutline16, { size: 14, className: styles.gitDiffOpenIcon }), _jsx(\"span\", { children: t('dashboard.git.openInSidebar') })] }))] }));\n if (diff.segments !== undefined) {\n return (_jsxs(\"div\", { className: styles.gitDiffContainer, children: [toolbar, _jsx(\"div\", { className: styles.gitDiff, role: \"document\", \"aria-label\": t('dashboard.git.diff'), children: diff.segments.map((segment, index) => (_jsx(DiffSegment, { segment: segment, t: t }, segment.commit + '-' + index))) })] }));\n }\n if (diff.binary || diff.truncated) {\n return (_jsxs(\"div\", { className: styles.gitDiffContainer, children: [toolbar, _jsx(\"div\", { className: styles.gitDiffMessage, children: diff.binary ? t('dashboard.git.binary') : t('dashboard.git.diffTruncated') })] }));\n }\n return (_jsxs(\"div\", { className: styles.gitDiffContainer, children: [toolbar, _jsx(\"div\", { className: styles.gitDiff, role: \"document\", \"aria-label\": t('dashboard.git.diff'), children: _jsx(DiffHunks, { patch: diff.patch, t: t }) })] }));\n}\n//# sourceMappingURL=GitDiffView.js.map","/**\n * Geometry for the two draggable Git dividers. Each divider splits one grid axis\n * of the panel into a leading pane, the divider itself, and a trailing pane.\n * These helpers stay free of DOM and React APIs so the drag math is testable.\n */\n/** Share of the stacked axis, in percent, given to the commits pane by default. */\nexport const GIT_SPLIT_DEFAULT_ROW_PERCENT = 45;\n/** Share of the side-by-side axis, in percent, given to the left column by default. */\nexport const GIT_SPLIT_DEFAULT_COLUMN_PERCENT = 38;\n/** Smallest rendered height, in CSS pixels, kept usable for a stacked pane. */\nexport const GIT_SPLIT_MIN_ROW_PX = 140;\n/** Smallest rendered width, in CSS pixels, kept usable for a side-by-side pane. */\nexport const GIT_SPLIT_MIN_COLUMN_PX = 240;\n/** Percentage points moved by one arrow-key press (Shift multiplies the step). */\nexport const GIT_SPLIT_KEY_STEP = 4;\nfunction roundPercent(percent) {\n return Math.round(percent * 100) / 100;\n}\n/**\n * Clamp a leading-pane share to the range that keeps both panes usable, or\n * undefined when the measured geometry cannot express a usable split at all.\n */\nexport function clampGitSplitPercent(percent, geometry) {\n if (!Number.isFinite(percent))\n return undefined;\n const { size, divider, minimum } = geometry;\n if (!Number.isFinite(size) || size <= 0)\n return undefined;\n const lower = (minimum / size) * 100;\n const upper = 100 - ((minimum + Math.max(divider, 0)) / size) * 100;\n if (upper <= lower)\n return undefined;\n return roundPercent(Math.min(Math.max(percent, lower), upper));\n}\n/** Resolve the share that keeps the divider centered under a pointer. */\nexport function gitSplitPercentFromPointer(pointer, geometry) {\n const halfDivider = Math.max(geometry.divider, 0) / 2;\n const leadingPx = pointer - geometry.start - halfDivider;\n return clampGitSplitPercent((leadingPx / geometry.size) * 100, geometry);\n}\n//# sourceMappingURL=git-column-split.js.map","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { GIT_SPLIT_KEY_STEP, clampGitSplitPercent, gitSplitPercentFromPointer } from './git-column-split.js';\n/**\n * Remembers every divider position for the rest of the browser session, so\n * closing and reopening the Git tab keeps the split the user dragged to.\n */\nconst rememberedPercents = new Map();\n/** Arrow keys that move a leading pane forward or backward along one axis. */\nconst KEY_DIRECTIONS = {\n horizontal: { ArrowUp: -1, ArrowDown: 1 },\n vertical: { ArrowLeft: -1, ArrowRight: 1 },\n};\n/**\n * Resize one grid axis with a pointer or the keyboard. The dragging frame writes\n * straight to the DOM custom property, so heavy commit and file lists never\n * re-render per pointer move; React state commits once per gesture.\n */\nexport function useGitPaneSplit(options) {\n const { containerRef, orientation, property, minimum, fallback } = options;\n const splitterRef = useRef(null);\n const [percent, setPercent] = useState(() => rememberedPercents.get(property) ?? fallback);\n const [dragging, setDragging] = useState(false);\n const percentRef = useRef(percent);\n const geometryRef = useRef(undefined);\n const draggingRef = useRef(false);\n const applyPercent = useCallback((next) => {\n percentRef.current = next;\n containerRef.current?.style.setProperty(property, next + '%');\n splitterRef.current?.setAttribute('aria-valuenow', String(Math.round(next)));\n }, [containerRef, property]);\n const commitPercent = useCallback((next) => {\n applyPercent(next);\n rememberedPercents.set(property, next);\n setPercent(next);\n }, [applyPercent, property]);\n useEffect(() => {\n applyPercent(percent);\n rememberedPercents.set(property, percent);\n }, [applyPercent, percent, property]);\n useEffect(() => {\n if (!dragging)\n return undefined;\n // Keep the resize cursor and suppress selection while the pointer is captured.\n const previousCursor = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n document.body.style.cursor = orientation === 'horizontal' ? 'row-resize' : 'col-resize';\n document.body.style.userSelect = 'none';\n return () => {\n document.body.style.cursor = previousCursor;\n document.body.style.userSelect = previousUserSelect;\n };\n }, [dragging, orientation]);\n const measure = useCallback(() => {\n const container = containerRef.current;\n const splitter = splitterRef.current;\n if (container === null || splitter === null)\n return undefined;\n const containerRect = container.getBoundingClientRect();\n const splitterRect = splitter.getBoundingClientRect();\n return orientation === 'horizontal'\n ? { start: containerRect.top, size: containerRect.height, divider: splitterRect.height, minimum }\n : { start: containerRect.left, size: containerRect.width, divider: splitterRect.width, minimum };\n }, [containerRef, minimum, orientation]);\n const startDrag = useCallback((event) => {\n if (event.button !== 0)\n return;\n const geometry = measure();\n if (geometry === undefined)\n return;\n geometryRef.current = geometry;\n draggingRef.current = true;\n setDragging(true);\n event.currentTarget.setPointerCapture(event.pointerId);\n event.preventDefault();\n // preventDefault suppresses the default focus; keep the divider keyboard-reachable.\n event.currentTarget.focus({ preventScroll: true });\n }, [measure]);\n const drag = useCallback((event) => {\n const geometry = geometryRef.current;\n if (!draggingRef.current || geometry === undefined)\n return;\n const pointer = orientation === 'horizontal' ? event.clientY : event.clientX;\n const next = gitSplitPercentFromPointer(pointer, geometry);\n if (next !== undefined)\n applyPercent(next);\n }, [applyPercent, orientation]);\n const endDrag = useCallback((event) => {\n if (!draggingRef.current)\n return;\n draggingRef.current = false;\n geometryRef.current = undefined;\n setDragging(false);\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n const geometry = measure();\n commitPercent(geometry === undefined\n ? percentRef.current\n : clampGitSplitPercent(percentRef.current, geometry) ?? percentRef.current);\n }, [commitPercent, measure]);\n const onKeyDown = useCallback((event) => {\n const direction = KEY_DIRECTIONS[orientation][event.key];\n if (direction === undefined)\n return;\n const geometry = measure();\n if (geometry === undefined)\n return;\n event.preventDefault();\n const step = GIT_SPLIT_KEY_STEP * (event.shiftKey ? 4 : 1);\n const next = clampGitSplitPercent(percentRef.current + direction * step, geometry);\n if (next !== undefined)\n commitPercent(next);\n }, [commitPercent, measure, orientation]);\n const reset = useCallback(() => {\n commitPercent(fallback);\n }, [commitPercent, fallback]);\n return { splitterRef, percent, dragging, startDrag, drag, endDrag, onKeyDown, reset };\n}\n//# sourceMappingURL=useGitPaneSplit.js.map","/**\n * 插件的稳定、浏览器安全契约层;这里只定义领域值与服务形状,不依赖 Git、sidecar 或 Node runtime。\n * Stable, browser-safe contract layer for the plugin; it defines domain values and service shapes without Git, sidecar, or Node runtime dependencies.\n *\n * @packageDocumentation\n */\n/**\n * 跨 Host/浏览器边界保持稳定的领域错误码;新增、删除或重命名成员都属于公开契约变更。\n * Stable domain error codes shared across the Host/browser boundary; adding, removing, or renaming a member is a public contract change.\n */\nexport const WORKTREE_ERROR_CODES = Object.freeze([\n 'WORKSPACE_NOT_FOUND',\n 'WORKSPACE_NOT_GIT_REPOSITORY',\n 'GIT_NOT_INSTALLED',\n 'WORKTREE_REQUIRES_INITIAL_COMMIT',\n 'WORKTREE_BRANCH_CONFLICT',\n 'WORKTREE_NOT_FOUND',\n 'WORKTREE_ORDER_INVALID',\n 'WORKTREE_REMOVED',\n 'WORKTREE_IMPORT_INVALID',\n 'WORKTREE_ALREADY_MANAGED',\n 'SESSION_NOT_FOUND',\n 'SESSION_CWD_MISMATCH',\n 'SESSION_ALREADY_BOUND',\n 'SIDECAR_UNAVAILABLE',\n 'SIDECAR_CORRUPT',\n 'SIDECAR_SYNC_REQUIRED',\n 'GIT_OPERATION_FAILED',\n 'WORKTREE_MUTATION_BUSY',\n 'WORKTREE_STATE_CONFLICT',\n 'WORKTREE_RECOVERY_REQUIRED',\n 'WORKTREE_IDENTITY_CHANGED',\n 'WORKTREE_PERMISSION_BINDING_REQUIRED',\n 'WORKTREE_SESSION_BUSY',\n 'WORKTREE_ACTIVITY_UNAVAILABLE',\n]);\n/** Stable synthetic commit id used for the current uncommitted working tree entry. */\nexport const WORKTREE_GIT_WORKING_TREE = 'working-tree';\n/** Stable synthetic id used by the Dashboard's baseline-wide summary view. */\nexport const WORKTREE_GIT_SUMMARY = 'summary';\n/**\n * Git object-name guard shared by the Contract, Provider, Manage and Client\n * seams so commit-SHA validation cannot drift between layers. SHA-1 and SHA-256\n * repository formats are both accepted.\n */\nexport const WORKTREE_GIT_COMMIT_PATTERN = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/iu;\n/** True when the value is a full-length Git commit SHA. */\nexport function isWorktreeGitCommit(value) {\n return typeof value === 'string' && WORKTREE_GIT_COMMIT_PATTERN.test(value);\n}\nexport * from './worktree-permission.js';\nexport * from './windows-path.js';\n/**\n * 创建错误 DTO 而不抛出异常,供 Host 将已识别的领域失败投影到 Remote result。\n * Creates an error DTO without throwing, allowing the Host to project recognized domain failures into a Remote result.\n */\nexport function createWorktreeError(code, message, details = {}) {\n return { code, message, details };\n}\n/**\n * Browser Remote 可调用的方法白名单;runtime cwd 解析刻意不进入该边界。\n * Allowlist of Browser Remote methods; runtime cwd resolution is intentionally excluded from this boundary.\n */\nexport const WORKTREE_REMOTE_METHODS = Object.freeze([\n 'getWorktreeInstructions',\n 'updateWorktreeInstructions',\n 'updateWorktreeBaseBranch',\n 'listWorktrees',\n 'listWorktreeCommits',\n 'listWorktreeCommitFiles',\n 'getWorktreeCommitFileDiff',\n 'listImportCandidates',\n 'listBranches',\n 'createWorktree',\n 'importWorktree',\n 'removeWorktree',\n 'unarchiveWorktree',\n 'cleanWorktree',\n 'adoptWorktreeBranch',\n 'recoverWorktrees',\n 'forgetWorktree',\n 'insertWorktreeBefore',\n 'listBindings',\n 'bindSession',\n 'ensureWorktreePermission',\n 'normalizeDetachedWorktreePermissions',\n]);\n//# sourceMappingURL=index.js.map","import { WORKTREE_GIT_WORKING_TREE, isWorktreeGitCommit, } from '../../../contract/index.js';\nexport const MAX_FILE_CACHE = 8;\nexport const MAX_DIFF_CACHE = 24;\n/** The summary selection for one working-tree inclusion mode. */\nexport function summarySelection(includeWorkingTree) {\n return includeWorkingTree ? { kind: 'summary', includeWorkingTree: true } : { kind: 'summary' };\n}\nfunction targetKey(target) {\n if (target.kind === 'commit')\n return 'commit\\u0000' + target.commit;\n if (target.selection.kind === 'summary') {\n return target.selection.includeWorkingTree === true ? 'summary\\u0000working-tree' : 'summary';\n }\n return 'commits\\u0000' + target.selection.commits.join('\\u0000');\n}\nfunction historyProjectionKey(history) {\n if (history.status !== 'ready')\n return 'unknown';\n return (history.value.baseline?.commit ?? 'unknown') + '\\u0000' + (history.value.headCommit ?? 'unknown');\n}\n/** True when the target reads the live working tree and must not be cached. */\nexport function isLiveTarget(target) {\n return target.kind === 'commit'\n ? target.commit === WORKTREE_GIT_WORKING_TREE\n : target.selection.kind === 'summary' && target.selection.includeWorkingTree === true;\n}\n/**\n * Live-result markers complete a cache key. Matching on the marker rather than\n * on a hand-written substring keeps key construction and invalidation aligned.\n */\nconst LIVE_KEY_MARKERS = [\n '\\u0000' + targetKey({ kind: 'commit', commit: WORKTREE_GIT_WORKING_TREE }),\n '\\u0000' + targetKey({ kind: 'selection', selection: summarySelection(true) }),\n];\n/** True when a file or diff cache key belongs to a live working-tree read. */\nexport function isLiveCacheKey(key) {\n return LIVE_KEY_MARKERS.some((marker) => key.includes(marker));\n}\n/**\n * Key token for a read that names no baseline branch and therefore asks the\n * Manager to resolve the Worktree's captured acquisition commit. The leading NUL\n * cannot appear in a local branch name, so the token can never collide with one.\n */\nconst CAPTURED_BASELINE_KEY = '\\u0000captured';\nfunction baselineKey(baseBranch) {\n return baseBranch ?? CAPTURED_BASELINE_KEY;\n}\nexport function gitCacheKey(baseBranch, history, target) {\n return baselineKey(baseBranch) + '\\u0000' + historyProjectionKey(history) + '\\u0000' + targetKey(target);\n}\nexport function diffCacheKey(baseBranch, history, target, filePath) {\n return gitCacheKey(baseBranch, history, target) + '\\u0000' + filePath;\n}\n/** Compare two targets by projection identity rather than object identity. */\nexport function sameTarget(left, right) {\n return targetKey(left) === targetKey(right);\n}\n/** Drop the oldest entries until the cache respects its bound. */\nexport function trimCache(cache, maxSize) {\n while (cache.size > maxSize) {\n const oldest = cache.keys().next().value;\n if (oldest === undefined)\n return;\n cache.delete(oldest);\n }\n}\n/** Find the changed-file row for a new or previous path. */\nexport function fileForPath(files, selectedPath) {\n return files.files.find((file) => file.path === selectedPath || file.oldPath === selectedPath);\n}\n/** Keep only SHAs that are still part of the current history projection. */\nexport function canonicalizeCommits(history, commits) {\n if (history === undefined)\n return [];\n const requested = new Set(commits.filter((commit) => isWorktreeGitCommit(commit)));\n return history.commits\n .filter((commit) => commit.sha !== WORKTREE_GIT_WORKING_TREE && requested.has(commit.sha))\n .map((commit) => commit.sha);\n}\n//# sourceMappingURL=git-state-cache.js.map","import { useEffect, useMemo, useSyncExternalStore } from 'react';\nimport { WORKTREE_GIT_WORKING_TREE } from '../../../contract/index.js';\nimport { isMainWorktreeId } from './git-facts.js';\nimport { MAX_DIFF_CACHE, MAX_FILE_CACHE, canonicalizeCommits, diffCacheKey, fileForPath, gitCacheKey, isLiveCacheKey, isLiveTarget, sameTarget, summarySelection, trimCache, } from './git-state-cache.js';\nfunction asError(error) {\n return error instanceof Error ? error : new Error(String(error));\n}\nfunction normalizeBranch(branch) {\n const normalized = branch?.trim();\n return normalized === undefined || normalized.length === 0 ? undefined : normalized;\n}\nfunction emptyState(defaultBaselineBranch, main) {\n return {\n branches: { status: 'idle' },\n baselineBranch: normalizeBranch(defaultBaselineBranch),\n history: { status: 'idle' },\n view: main ? 'commits' : 'summary',\n includeWorkingTree: false,\n selectedCommits: [],\n commitMultiSelect: false,\n files: { status: 'idle' },\n diff: { status: 'idle' },\n };\n}\n/**\n * Create the browser-safe Git Dashboard state machine. Construction is inert;\n * the caller explicitly starts history loading on first Git-tab activation.\n */\nexport function createWorktreeGitStateController(input) {\n // Main reads the Workspace-root HEAD history directly; Worktree reads still\n // require either an explicit baseline branch or an immutable acquisition commit.\n const main = isMainWorktreeId(input.worktreeId);\n const capturedBaseline = input.capturedBaseline === true;\n const canRead = (baselineBranch) => main || capturedBaseline || baselineBranch !== undefined;\n let state = emptyState(input.defaultBaselineBranch, main);\n let disposed = false;\n let branchesLoaded = false;\n let branchesRequest = 0;\n let historyLoaded = false;\n let historyRequest = 0;\n let filesRequest = 0;\n let diffRequest = 0;\n let branchesInFlight;\n let historyInFlight;\n const filesInFlight = new Map();\n const diffInFlight = new Map();\n const listeners = new Set();\n const filesCache = new Map();\n const diffCache = new Map();\n const emit = () => {\n if (disposed)\n return;\n for (const listener of listeners)\n listener();\n };\n const update = (next) => {\n if (disposed)\n return;\n state = next;\n emit();\n };\n const invalidateWorkingTreeCache = () => {\n for (const key of filesCache.keys()) {\n if (isLiveCacheKey(key))\n filesCache.delete(key);\n }\n for (const key of diffCache.keys()) {\n if (isLiveCacheKey(key))\n diffCache.delete(key);\n }\n };\n const retireLiveInFlight = () => {\n let retired = false;\n for (const key of filesInFlight.keys()) {\n if (isLiveCacheKey(key)) {\n filesInFlight.delete(key);\n retired = true;\n }\n }\n for (const key of diffInFlight.keys()) {\n if (isLiveCacheKey(key)) {\n diffInFlight.delete(key);\n retired = true;\n }\n }\n return retired;\n };\n const currentTarget = () => {\n if (state.view === 'summary') {\n return { kind: 'selection', selection: summarySelection(state.includeWorkingTree) };\n }\n if (state.selectedCommit === undefined)\n return undefined;\n if (state.selectedCommit !== WORKTREE_GIT_WORKING_TREE &&\n state.selectedCommits.length > 1) {\n return { kind: 'selection', selection: { kind: 'commits', commits: state.selectedCommits } };\n }\n return { kind: 'commit', commit: state.selectedCommit };\n };\n /**\n * Stale-response guard. A completion only publishes while it is still the\n * newest request for the same baseline, projection, and selected path.\n */\n const isCurrentRequest = (request, latestRequest, baselineBranch, target, selectedPath) => {\n if (disposed || request !== latestRequest || state.baselineBranch !== baselineBranch)\n return false;\n const active = currentTarget();\n if (active === undefined || !sameTarget(active, target))\n return false;\n return selectedPath === undefined || state.selectedPath === selectedPath;\n };\n const requestFiles = (baseBranch, history, target) => {\n const key = gitCacheKey(baseBranch, history, target);\n const existing = filesInFlight.get(key);\n if (existing !== undefined)\n return existing;\n if (input.manager === undefined)\n return Promise.reject(new Error('Git manager unavailable'));\n const request = target.kind === 'commit'\n ? { commit: target.commit }\n : { selection: target.selection };\n let promise;\n try {\n promise = input.manager.listWorktreeCommitFiles({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n ...request,\n baseBranch,\n });\n }\n catch (error) {\n promise = Promise.reject(error);\n }\n filesInFlight.set(key, promise);\n void promise.then(() => {\n if (filesInFlight.get(key) === promise)\n filesInFlight.delete(key);\n }, () => {\n if (filesInFlight.get(key) === promise)\n filesInFlight.delete(key);\n });\n return promise;\n };\n const requestDiff = (baseBranch, history, target, diffPath) => {\n const key = diffCacheKey(baseBranch, history, target, diffPath);\n const existing = diffInFlight.get(key);\n if (existing !== undefined)\n return existing;\n if (input.manager === undefined)\n return Promise.reject(new Error('Git manager unavailable'));\n const request = target.kind === 'commit'\n ? { commit: target.commit }\n : { selection: target.selection };\n let promise;\n try {\n promise = input.manager.getWorktreeCommitFileDiff({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n ...request,\n path: diffPath,\n baseBranch,\n });\n }\n catch (error) {\n promise = Promise.reject(error);\n }\n diffInFlight.set(key, promise);\n void promise.then(() => {\n if (diffInFlight.get(key) === promise)\n diffInFlight.delete(key);\n }, () => {\n if (diffInFlight.get(key) === promise)\n diffInFlight.delete(key);\n });\n return promise;\n };\n const loadDiff = async (target, selectedPath, diffPath) => {\n const baselineBranch = state.baselineBranch;\n if (!canRead(baselineBranch))\n return;\n const request = ++diffRequest;\n const key = diffCacheKey(baselineBranch, state.history, target, diffPath);\n const cached = isLiveTarget(target) ? undefined : diffCache.get(key);\n if (cached !== undefined) {\n update({ ...state, selectedPath, diff: { status: 'ready', value: cached } });\n return;\n }\n update({ ...state, selectedPath, diff: { status: 'loading' } });\n try {\n const value = await requestDiff(baselineBranch, state.history, target, diffPath);\n if (!isCurrentRequest(request, diffRequest, baselineBranch, target, selectedPath))\n return;\n if (!isLiveTarget(target)) {\n diffCache.set(key, value);\n trimCache(diffCache, MAX_DIFF_CACHE);\n }\n update({ ...state, diff: { status: 'ready', value } });\n }\n catch (error) {\n if (!isCurrentRequest(request, diffRequest, baselineBranch, target, selectedPath))\n return;\n update({ ...state, diff: { status: 'error', error: asError(error) } });\n }\n };\n const applyFiles = (target, value) => {\n const selectedPath = value.files[0]?.path;\n update({\n ...state,\n files: { status: 'ready', value },\n selectedPath,\n diff: { status: 'idle' },\n });\n if (selectedPath !== undefined)\n void loadDiff(target, selectedPath, selectedPath);\n };\n const loadFiles = async (target, preserveReady = false) => {\n const baselineBranch = state.baselineBranch;\n if (!canRead(baselineBranch))\n return;\n const request = ++filesRequest;\n ++diffRequest;\n const key = gitCacheKey(baselineBranch, state.history, target);\n const cached = isLiveTarget(target) ? undefined : filesCache.get(key);\n if (cached !== undefined) {\n applyFiles(target, cached);\n return;\n }\n const previousFiles = state.files.status === 'ready' ? state.files : undefined;\n if (!preserveReady || previousFiles === undefined) {\n update({ ...state, files: { status: 'loading' }, selectedPath: undefined, diff: { status: 'idle' } });\n }\n else {\n update({ ...state, files: { ...previousFiles, refreshing: true } });\n }\n try {\n const value = await requestFiles(baselineBranch, state.history, target);\n if (!isCurrentRequest(request, filesRequest, baselineBranch, target))\n return;\n if (!isLiveTarget(target)) {\n filesCache.set(key, value);\n trimCache(filesCache, MAX_FILE_CACHE);\n }\n applyFiles(target, value);\n }\n catch (error) {\n if (!isCurrentRequest(request, filesRequest, baselineBranch, target))\n return;\n if (preserveReady && previousFiles !== undefined) {\n update({ ...state, files: { status: 'ready', value: previousFiles.value, error: asError(error) } });\n }\n else {\n update({ ...state, files: { status: 'error', error: asError(error) }, selectedPath: undefined, diff: { status: 'idle' } });\n }\n }\n };\n const resetTarget = (next) => {\n retireLiveInFlight();\n ++filesRequest;\n ++diffRequest;\n update({\n ...state,\n ...next,\n files: { status: 'idle' },\n selectedPath: undefined,\n diff: { status: 'idle' },\n });\n };\n const selectBaselineBranch = (branch) => {\n if (disposed || main)\n return;\n const nextBranch = normalizeBranch(branch);\n if (state.baselineBranch === nextBranch)\n return;\n ++historyRequest;\n ++filesRequest;\n ++diffRequest;\n historyInFlight = undefined;\n historyLoaded = false;\n filesInFlight.clear();\n diffInFlight.clear();\n filesCache.clear();\n diffCache.clear();\n update({\n ...state,\n baselineBranch: nextBranch,\n history: { status: 'idle' },\n view: 'summary',\n selectedCommit: undefined,\n selectedCommits: [],\n files: { status: 'idle' },\n selectedPath: undefined,\n diff: { status: 'idle' },\n });\n // Clearing an explicit selection falls back to the captured baseline, so it\n // must re-read rather than leave the previous branch projection on screen.\n if (nextBranch !== undefined || capturedBaseline)\n void loadHistory();\n };\n const selectSummary = () => {\n if (disposed || main || !canRead(state.baselineBranch))\n return;\n const target = { kind: 'selection', selection: summarySelection(state.includeWorkingTree) };\n resetTarget({ view: 'summary', selectedCommit: undefined, selectedCommits: [] });\n void loadFiles(target);\n };\n const setIncludeWorkingTree = (includeWorkingTree) => {\n if (disposed || main || state.includeWorkingTree === includeWorkingTree)\n return;\n if (state.view !== 'summary' || !canRead(state.baselineBranch)) {\n update({ ...state, includeWorkingTree });\n return;\n }\n const target = { kind: 'selection', selection: summarySelection(includeWorkingTree) };\n resetTarget({ includeWorkingTree });\n void loadFiles(target);\n };\n const selectView = (view) => {\n if (view === 'summary') {\n selectSummary();\n return;\n }\n if (disposed || !canRead(state.baselineBranch))\n return;\n const selectedCommit = state.selectedCommit;\n const selectedCommits = state.selectedCommits;\n if (state.view === 'commits' && state.files.status === 'ready')\n return;\n resetTarget({ view: 'commits' });\n if (selectedCommit === undefined)\n return;\n const target = selectedCommit !== WORKTREE_GIT_WORKING_TREE && selectedCommits.length > 1\n ? { kind: 'selection', selection: { kind: 'commits', commits: selectedCommits } }\n : { kind: 'commit', commit: selectedCommit };\n void loadFiles(target);\n };\n const selectCommit = (commit) => {\n if (disposed || !canRead(state.baselineBranch))\n return;\n const history = state.history.status === 'ready' ? state.history.value : undefined;\n if (history !== undefined && !history.commits.some((candidate) => candidate.sha === commit))\n return;\n const target = { kind: 'commit', commit };\n const selectedCommits = commit === WORKTREE_GIT_WORKING_TREE ? [] : [commit];\n if (state.view === 'commits' && state.selectedCommit === commit && state.files.status === 'ready' && state.selectedCommits.length <= 1)\n return;\n resetTarget({ view: 'commits', selectedCommit: commit, selectedCommits });\n void loadFiles(target);\n };\n const toggleCommit = (commit) => {\n if (disposed || !canRead(state.baselineBranch) || commit === WORKTREE_GIT_WORKING_TREE)\n return;\n const history = state.history.status === 'ready' ? state.history.value : undefined;\n if (history === undefined || !history.commits.some((candidate) => candidate.sha === commit && candidate.sha !== WORKTREE_GIT_WORKING_TREE))\n return;\n const selected = state.selectedCommits.includes(commit)\n ? state.selectedCommits.filter((candidate) => candidate !== commit)\n : [...state.selectedCommits, commit];\n const canonical = canonicalizeCommits(history, selected);\n if (canonical.length === 0) {\n resetTarget({ view: 'commits', selectedCommit: undefined, selectedCommits: [] });\n return;\n }\n const selectedCommit = canonical.includes(commit) ? commit : canonical[canonical.length - 1];\n const target = canonical.length > 1\n ? { kind: 'selection', selection: { kind: 'commits', commits: canonical } }\n : { kind: 'commit', commit: selectedCommit };\n resetTarget({ view: 'commits', selectedCommit, selectedCommits: canonical });\n void loadFiles(target);\n };\n /**\n * Switch between replace-on-click and additive selection. Turning multi-select\n * off collapses an aggregate target back to its primary commit so the files and\n * diff panes keep matching the visible selection.\n */\n const setCommitMultiSelect = (enabled) => {\n if (disposed || state.commitMultiSelect === enabled)\n return;\n if (enabled) {\n update({ ...state, commitMultiSelect: true });\n return;\n }\n const primary = state.selectedCommit;\n const aggregated = state.view === 'commits' && primary !== undefined && state.selectedCommits.length > 1;\n if (!aggregated) {\n update({\n ...state,\n commitMultiSelect: false,\n selectedCommits: primary === undefined ? [] : [primary],\n });\n return;\n }\n // selectCommit must still observe the aggregate selection; collapsing it first\n // would trip the \"already showing this commit\" guard and keep the union files.\n update({ ...state, commitMultiSelect: false });\n selectCommit(primary);\n };\n const clearCommitSelection = () => {\n if (disposed || !canRead(state.baselineBranch))\n return;\n resetTarget({ view: 'commits', selectedCommit: undefined, selectedCommits: [] });\n };\n const selectPath = (selectedPath) => {\n if (disposed || state.files.status !== 'ready')\n return;\n const target = currentTarget();\n if (target === undefined)\n return;\n const changedFile = fileForPath(state.files.value, selectedPath);\n if (changedFile === undefined)\n return;\n ++diffRequest;\n void loadDiff(target, selectedPath, changedFile.path);\n };\n const loadBranches = (refresh = false) => {\n if (disposed || main)\n return Promise.resolve();\n if (branchesInFlight !== undefined)\n return branchesInFlight;\n if (!refresh && branchesLoaded)\n return Promise.resolve();\n const request = ++branchesRequest;\n const previous = state.branches;\n if (refresh && previous.status === 'ready') {\n update({ ...state, branches: { status: 'ready', value: previous.value, refreshing: true } });\n }\n else if (refresh && previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, branches: { status: 'ready', value: previous.previous, refreshing: true } });\n }\n else {\n update({ ...state, branches: { status: 'loading' } });\n }\n const run = async () => {\n if (input.manager?.listBranches === undefined) {\n if (!disposed && request === branchesRequest) {\n branchesLoaded = true;\n update({ ...state, branches: { status: 'ready', value: [] } });\n }\n return;\n }\n try {\n const value = await input.manager.listBranches({ workspaceId: input.workspaceId });\n if (disposed || request !== branchesRequest)\n return;\n branchesLoaded = true;\n update({ ...state, branches: { status: 'ready', value } });\n }\n catch (error) {\n if (disposed || request !== branchesRequest)\n return;\n branchesLoaded = false;\n const nextError = asError(error);\n if (previous.status === 'ready') {\n update({ ...state, branches: { status: 'ready', value: previous.value, error: nextError } });\n }\n else if (previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, branches: { status: 'ready', value: previous.previous, error: nextError } });\n }\n else {\n update({ ...state, branches: { status: 'error', error: nextError } });\n }\n }\n };\n const promise = run().finally(() => {\n if (branchesInFlight === promise)\n branchesInFlight = undefined;\n });\n branchesInFlight = promise;\n return promise;\n };\n const loadHistory = (refresh = false) => {\n if (disposed || !canRead(state.baselineBranch))\n return Promise.resolve();\n if (historyInFlight !== undefined)\n return historyInFlight;\n if (!refresh && historyLoaded)\n return Promise.resolve();\n const baselineBranch = state.baselineBranch;\n const request = ++historyRequest;\n const previous = state.history;\n const refreshesWorkingTree = refresh && state.selectedCommit === WORKTREE_GIT_WORKING_TREE;\n if (refresh) {\n const retiredLiveReads = retireLiveInFlight();\n if (retiredLiveReads) {\n ++filesRequest;\n ++diffRequest;\n if (state.files.status === 'loading') {\n update({ ...state, files: { status: 'idle' }, selectedPath: undefined, diff: { status: 'idle' } });\n }\n else if (state.diff.status === 'loading') {\n update({ ...state, diff: { status: 'idle' } });\n }\n }\n }\n if (refreshesWorkingTree)\n invalidateWorkingTreeCache();\n if (refresh && previous.status === 'ready') {\n update({ ...state, history: { status: 'ready', value: previous.value, refreshing: true } });\n }\n else if (refresh && previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, history: { status: 'ready', value: previous.previous, refreshing: true } });\n }\n else {\n update({ ...state, history: { status: 'loading' } });\n }\n const run = async () => {\n if (input.manager === undefined) {\n const error = new Error('Git manager unavailable');\n if (!disposed && request === historyRequest) {\n historyLoaded = true;\n update({ ...state, history: { status: 'error', error } });\n }\n return;\n }\n try {\n const value = await input.manager.listWorktreeCommits({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n });\n if (disposed || request !== historyRequest || state.baselineBranch !== baselineBranch)\n return;\n historyLoaded = true;\n const selectedCommits = state.view === 'summary'\n ? []\n : canonicalizeCommits(value, state.selectedCommits);\n const selectedCommitStillExists = state.view !== 'summary' &&\n state.selectedCommit !== undefined &&\n value.commits.some((commit) => commit.sha === state.selectedCommit);\n const nextSelectedCommit = state.view === 'summary'\n ? undefined\n : selectedCommitStillExists\n ? state.selectedCommit\n : selectedCommits[0] ?? value.commits[0]?.sha;\n const nextSelectedCommits = state.view === 'summary'\n ? []\n : selectedCommits.length > 0\n ? selectedCommits\n : nextSelectedCommit !== undefined && nextSelectedCommit !== WORKTREE_GIT_WORKING_TREE\n ? [nextSelectedCommit]\n : [];\n update({\n ...state,\n history: { status: 'ready', value },\n selectedCommits: nextSelectedCommits,\n selectedCommit: nextSelectedCommit,\n });\n if (state.view === 'summary') {\n void loadFiles({ kind: 'selection', selection: summarySelection(state.includeWorkingTree) }, true);\n }\n else if (nextSelectedCommit === undefined) {\n resetTarget({ selectedCommit: undefined, selectedCommits: [] });\n }\n else if (!selectedCommitStillExists || selectedCommits.length !== state.selectedCommits.length || refreshesWorkingTree) {\n const target = nextSelectedCommit !== WORKTREE_GIT_WORKING_TREE && selectedCommits.length > 1\n ? { kind: 'selection', selection: { kind: 'commits', commits: selectedCommits } }\n : { kind: 'commit', commit: nextSelectedCommit };\n void loadFiles(target, refreshesWorkingTree);\n }\n }\n catch (error) {\n if (disposed || request !== historyRequest || state.baselineBranch !== baselineBranch)\n return;\n historyLoaded = true;\n const nextError = asError(error);\n if (previous.status === 'ready') {\n update({ ...state, history: { status: 'ready', value: previous.value, error: nextError } });\n }\n else if (previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, history: { status: 'ready', value: previous.previous, error: nextError } });\n }\n else {\n update({ ...state, history: { status: 'error', error: nextError } });\n }\n }\n };\n const promise = run().finally(() => {\n if (historyInFlight === promise)\n historyInFlight = undefined;\n });\n historyInFlight = promise;\n return promise;\n };\n const controller = {\n getSnapshot: () => state,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n loadBranches: () => loadBranches(false),\n loadHistory: () => loadHistory(false),\n refresh: () => {\n const branchesTask = loadBranches(true);\n const historyTask = loadHistory(true);\n return Promise.all([branchesTask, historyTask]).then(() => undefined);\n },\n selectBaselineBranch,\n selectView,\n selectSummary,\n setIncludeWorkingTree,\n selectCommit,\n toggleCommit,\n setCommitMultiSelect,\n clearCommitSelection,\n selectPath,\n dispose: () => {\n if (disposed)\n return;\n disposed = true;\n ++branchesRequest;\n ++historyRequest;\n ++filesRequest;\n ++diffRequest;\n listeners.clear();\n },\n };\n return controller;\n}\n/** React adapter; the first Git history request starts in the mount effect. */\nexport function useWorktreeGitState(input) {\n const controller = useMemo(() => createWorktreeGitStateController(input), [\n input.manager,\n input.workspaceId,\n input.worktreeId,\n input.defaultBaselineBranch,\n input.capturedBaseline,\n ]);\n const snapshot = useSyncExternalStore(controller.subscribe, controller.getSnapshot, controller.getSnapshot);\n useEffect(() => {\n void controller.loadBranches();\n void controller.loadHistory();\n return controller.dispose;\n }, [controller]);\n return {\n ...snapshot,\n loadBranches: controller.loadBranches,\n loadHistory: controller.loadHistory,\n refresh: controller.refresh,\n selectBaselineBranch: controller.selectBaselineBranch,\n selectView: controller.selectView,\n selectSummary: controller.selectSummary,\n setIncludeWorkingTree: controller.setIncludeWorkingTree,\n selectCommit: controller.selectCommit,\n toggleCommit: controller.toggleCommit,\n setCommitMultiSelect: controller.setCommitMultiSelect,\n clearCommitSelection: controller.clearCommitSelection,\n selectPath: controller.selectPath,\n dispose: controller.dispose,\n };\n}\n//# sourceMappingURL=useWorktreeGitState.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useRef } from 'react';\nimport { isMainWorktreeId, normalizeBaselineBranch, sumLineTotals } from './git-facts.js';\nimport { GitChangedFiles } from './GitChangedFiles.js';\nimport { GitLineStats } from './GitLineStats.js';\nimport { GitCommitList } from './GitCommitList.js';\nimport { GitDiffView } from './GitDiffView.js';\nimport { GIT_SPLIT_DEFAULT_COLUMN_PERCENT, GIT_SPLIT_DEFAULT_ROW_PERCENT, GIT_SPLIT_MIN_COLUMN_PX, GIT_SPLIT_MIN_ROW_PX, } from './git-column-split.js';\nimport { useGitPaneSplit } from './useGitPaneSplit.js';\nimport { useWorktreeGitState } from './useWorktreeGitState.js';\nimport styles from './worktree-git.css';\nfunction shortCommit(commit) {\n return commit === undefined ? '—' : commit.slice(0, 7);\n}\nfunction selectedCommit(history, sha) {\n return history?.commits.find((commit) => commit.sha === sha);\n}\nfunction commitCountLabel(history, t) {\n const committedCount = history.commits.filter((commit) => commit.kind !== 'working-tree').length;\n return history.commits.some((commit) => commit.kind === 'working-tree')\n ? t('dashboard.git.commitCountWithWorkingTree', { commits: committedCount })\n : t('dashboard.git.commitCount', { n: committedCount });\n}\nfunction commitLabel(commit, t) {\n return commit.kind === 'working-tree'\n ? t('dashboard.git.workingTree')\n : shortCommit(commit.sha);\n}\nfunction readyFiles(value) {\n return value?.files ?? [];\n}\n/** Empty-state copy per honest unavailable reason; one definition for both blocks. */\nconst UNAVAILABLE_COPY = {\n main: {\n title: 'dashboard.git.mainUnavailableTitle',\n description: 'dashboard.git.mainUnavailableDescription',\n },\n 'baseline-unselected': {\n title: 'dashboard.git.selectBaselineTitle',\n description: 'dashboard.git.selectBaselineDescription',\n },\n 'baseline-unknown': {\n title: 'dashboard.git.baselineUnknownTitle',\n description: 'dashboard.git.baselineUnknownDescription',\n },\n};\nfunction UnavailableNotice({ reason, t, }) {\n return (_jsxs(\"div\", { className: styles.gitUnavailable, \"data-dashboard-git-unavailable\": true, children: [_jsx(\"strong\", { children: t(UNAVAILABLE_COPY[reason].title) }), _jsx(\"p\", { children: t(UNAVAILABLE_COPY[reason].description) })] }));\n}\n/** Git & Changes tab: read-only, on-demand history -> target files -> one-file diff. */\nexport function WorktreeGitPanel({ manager, workspaceId, worktreeId, defaultBaselineBranch, currentBranch, capturedBaseline, onOpenFile, t, }) {\n const isMain = isMainWorktreeId(worktreeId);\n const selectedDefaultBaseline = normalizeBaselineBranch(defaultBaselineBranch, currentBranch);\n const state = useWorktreeGitState({\n manager,\n workspaceId,\n worktreeId,\n defaultBaselineBranch: isMain ? undefined : selectedDefaultBaseline,\n capturedBaseline: isMain ? false : capturedBaseline,\n });\n const gridRef = useRef(null);\n // Both dividers share the grid: one splits rows, one splits columns, in either layout.\n const rows = useGitPaneSplit({\n containerRef: gridRef,\n orientation: 'horizontal',\n property: '--git-rows-top',\n minimum: GIT_SPLIT_MIN_ROW_PX,\n fallback: GIT_SPLIT_DEFAULT_ROW_PERCENT,\n });\n const columns = useGitPaneSplit({\n containerRef: gridRef,\n orientation: 'vertical',\n property: '--git-columns-left',\n minimum: GIT_SPLIT_MIN_COLUMN_PX,\n fallback: GIT_SPLIT_DEFAULT_COLUMN_PERCENT,\n });\n const historyValue = state.history.status === 'ready' ? state.history.value : undefined;\n const commit = selectedCommit(historyValue, state.selectedCommit);\n const files = state.files.status === 'ready' ? readyFiles(state.files.value) : [];\n const diff = state.diff.status === 'ready' ? state.diff.value : undefined;\n const refreshing = state.history.status === 'ready' && state.history.refreshing === true;\n const unavailable = historyValue?.unavailableReason;\n const branchOptions = (state.branches.status === 'ready' ? state.branches.value : [])\n .filter((branch) => branch.name !== currentBranch);\n const branchError = state.branches.status === 'error'\n ? state.branches.error\n : state.branches.status === 'ready'\n ? state.branches.error\n : undefined;\n const baselineCommit = historyValue?.baseline?.commit;\n const baselineRef = state.baselineBranch ?? historyValue?.baseline?.ref;\n const targetLabel = state.view === 'summary'\n ? t('dashboard.git.baselineSummary')\n : state.selectedCommits.length > 1\n ? t('dashboard.git.selectedCommitCount', { n: state.selectedCommits.length })\n : commit === undefined\n ? undefined\n : commitLabel(commit, t);\n const hasTarget = state.view === 'summary' || commit !== undefined;\n const lineTotals = state.files.status === 'ready' && hasTarget ? sumLineTotals(files) : undefined;\n return (_jsxs(\"section\", { className: styles.gitPanel, \"data-dashboard-git-panel\": true, children: [_jsxs(\"header\", { className: styles.gitPanelHeader, children: [_jsxs(\"div\", { className: styles.gitPanelHeading, children: [_jsx(\"h2\", { children: t('dashboard.git.title') }), !isMain && (_jsxs(\"label\", { className: styles.gitBaselineSelector, children: [_jsx(\"span\", { children: t('dashboard.git.baselineSelector') }), _jsxs(\"select\", { value: state.baselineBranch ?? '', \"data-dashboard-git-baseline\": true, disabled: state.branches.status === 'loading', onChange: (event) => state.selectBaselineBranch(event.currentTarget.value || undefined), children: [_jsx(\"option\", { value: \"\", children: t('dashboard.git.selectBaseline') }), state.baselineBranch !== undefined && !branchOptions.some((branch) => branch.name === state.baselineBranch) && (_jsx(\"option\", { value: state.baselineBranch, children: state.baselineBranch })), branchOptions.map((branch) => (_jsx(\"option\", { value: branch.name, children: branch.name }, branch.name)))] })] })), baselineCommit !== undefined && (_jsxs(\"dl\", { className: styles.gitBaselineFacts, children: [_jsxs(\"div\", { children: [_jsx(\"dt\", { children: t('dashboard.git.base') }), _jsxs(\"dd\", { children: [baselineRef !== undefined ? (_jsxs(_Fragment, { children: [baselineRef, _jsxs(\"code\", { children: [\"@ \", shortCommit(baselineCommit)] })] })) : (_jsx(\"code\", { children: shortCommit(baselineCommit) })), historyValue?.baseline?.source === 'derived' && (_jsx(\"span\", { className: styles.gitDerived, children: t('dashboard.git.derived') }))] })] }), historyValue !== undefined && (_jsxs(_Fragment, { children: [_jsxs(\"div\", { children: [_jsx(\"dt\", { children: t('dashboard.git.head') }), _jsx(\"dd\", { children: _jsx(\"code\", { children: shortCommit(historyValue.headCommit) }) })] }), _jsxs(\"div\", { children: [_jsx(\"dt\", { children: t('dashboard.git.commits') }), _jsx(\"dd\", { children: commitCountLabel(historyValue, t) })] }), historyValue.ahead !== undefined && historyValue.behind !== undefined && (_jsxs(\"div\", { children: [_jsx(\"dt\", { children: t('dashboard.aheadBehind') }), _jsx(\"dd\", { children: _jsx(GitLineStats, { additions: historyValue.ahead, deletions: historyValue.behind, ariaLabel: t('dashboard.git.aheadBehindStats', {\n ahead: historyValue.ahead,\n behind: historyValue.behind,\n }) }) })] }))] }))] })), isMain && historyValue !== undefined && (_jsxs(\"dl\", { className: styles.gitBaselineFacts, children: [_jsxs(\"div\", { children: [_jsx(\"dt\", { children: t('dashboard.git.head') }), _jsx(\"dd\", { children: _jsx(\"code\", { children: shortCommit(historyValue.headCommit) }) })] }), _jsxs(\"div\", { children: [_jsx(\"dt\", { children: t('dashboard.git.commits') }), _jsx(\"dd\", { children: commitCountLabel(historyValue, t) })] })] }))] }), _jsx(\"button\", { type: \"button\", className: styles.gitRefresh, \"data-dashboard-git-refresh\": true, disabled: refreshing || state.history.status === 'loading', \"aria-busy\": refreshing || state.history.status === 'loading', onClick: () => void state.refresh(), children: refreshing ? t('dashboard.git.refreshing') : t('dashboard.git.refresh') })] }), branchError !== undefined && (_jsxs(\"div\", { className: styles.gitError, role: \"alert\", children: [_jsx(\"p\", { children: t('dashboard.git.loadFailed', { reason: errorText(branchError, t) }) }), _jsx(\"button\", { type: \"button\", onClick: () => void state.loadBranches(), children: t('dashboard.git.retry') })] })), !isMain && unavailable === 'baseline-unselected' && (_jsxs(\"div\", { className: styles.gitBaselinePrompt, \"data-dashboard-git-baseline-prompt\": true, children: [_jsx(\"strong\", { children: t('dashboard.git.selectBaselineTitle') }), _jsx(\"p\", { children: t('dashboard.git.selectBaselineDescription') })] })), state.history.status === 'loading' && (_jsx(\"div\", { className: styles.gitLoading, role: \"status\", children: t('dashboard.git.loading') })), state.history.status === 'error' && (_jsxs(\"div\", { className: styles.gitError, role: \"alert\", children: [_jsx(\"p\", { children: t('dashboard.git.loadFailed', { reason: errorText(state.history.error, t) }) }), _jsx(\"button\", { type: \"button\", onClick: () => void state.refresh(), children: t('dashboard.git.retry') })] })), state.history.status === 'ready' && state.history.error !== undefined && (_jsxs(\"div\", { className: styles.gitError, role: \"alert\", children: [_jsx(\"p\", { children: t('dashboard.git.refreshFailed', { reason: errorText(state.history.error, t) }) }), _jsx(\"button\", { type: \"button\", onClick: () => void state.refresh(), children: t('dashboard.git.retry') })] })), state.history.status === 'ready' && historyValue !== undefined && unavailable !== undefined && (_jsx(UnavailableNotice, { reason: unavailable, t: t })), state.history.status === 'ready' && historyValue !== undefined && unavailable === undefined && (_jsxs(\"div\", { className: styles.gitColumns, ref: gridRef, children: [_jsxs(\"section\", { className: styles.gitColumn, \"data-dashboard-git-pane\": \"commits\", \"aria-label\": t('dashboard.git.commits'), children: [_jsxs(\"div\", { className: styles.gitColumnHeader, children: [_jsx(\"h3\", { children: t('dashboard.git.commits') }), _jsxs(\"div\", { className: styles.gitColumnHeaderControls, children: [historyValue.truncated && _jsx(\"span\", { children: t('dashboard.git.truncatedHistory') }), _jsxs(\"label\", { className: styles.gitCommitMultiSelect, title: t('dashboard.git.multiSelectCommitsDescription'), children: [_jsx(\"input\", { type: \"checkbox\", role: \"switch\", \"data-dashboard-git-multi-select\": true, \"aria-describedby\": \"dashboard-git-commit-selection-hint\", checked: state.commitMultiSelect, onChange: (event) => state.setCommitMultiSelect(event.currentTarget.checked) }), _jsx(\"span\", { className: styles.gitCommitMultiSelectTrack, \"aria-hidden\": \"true\", children: _jsx(\"span\", { className: styles.gitCommitMultiSelectThumb }) }), _jsx(\"span\", { className: styles.gitCommitMultiSelectLabel, children: t('dashboard.git.multiSelectCommits') })] })] })] }), !isMain && (_jsxs(\"button\", { type: \"button\", className: styles.gitSummaryButton, \"data-dashboard-git-summary\": true, \"aria-pressed\": state.view === 'summary', onClick: state.selectSummary, children: [_jsx(\"span\", { children: t('dashboard.git.baselineSummary') }), _jsx(\"small\", { children: t('dashboard.git.baselineSummaryDescription') })] })), !isMain && state.view === 'summary' && (_jsxs(\"label\", { className: styles.gitSummaryToggle, \"data-dashboard-git-include-working-tree\": true, children: [_jsx(\"input\", { type: \"checkbox\", checked: state.includeWorkingTree, disabled: state.files.status === 'loading', onChange: (event) => state.setIncludeWorkingTree(event.currentTarget.checked) }), _jsxs(\"span\", { children: [_jsx(\"strong\", { children: t('dashboard.git.includeWorkingTree') }), _jsx(\"small\", { children: t('dashboard.git.includeWorkingTreeDescription') })] })] })), _jsx(\"span\", { id: \"dashboard-git-commit-selection-hint\", className: styles.gitSrOnly, children: t('dashboard.git.commitSelectionHint') }), historyValue.commits.length === 0 && _jsx(\"div\", { className: styles.gitEmpty, children: t('dashboard.git.noCommits') }), _jsx(GitCommitList, { commits: historyValue.commits, selectedCommit: state.selectedCommit, selectedCommits: state.selectedCommits, multiSelect: state.commitMultiSelect, onSelect: state.selectCommit, onToggle: state.toggleCommit, t: t })] }), _jsx(GitSplitter, { split: rows, orientation: \"horizontal\", axis: \"rows\", label: t('dashboard.git.resizeRows') }), _jsxs(\"section\", { className: styles.gitColumn, \"data-dashboard-git-pane\": \"changed-files\", \"aria-label\": t('dashboard.git.changedFiles'), \"aria-busy\": state.files.status === 'loading', children: [_jsxs(\"div\", { className: styles.gitColumnHeader, children: [_jsx(\"h3\", { children: t('dashboard.git.changedFiles') }), _jsxs(\"div\", { className: styles.gitColumnHeaderMeta, children: [targetLabel !== undefined && (state.selectedCommits.length > 1 || state.view === 'summary'\n ? _jsx(\"span\", { children: targetLabel })\n : _jsx(\"code\", { children: targetLabel })), state.files.status === 'ready' && hasTarget && (lineTotals === undefined ? (_jsx(\"span\", { className: styles.gitColumnHeaderUnknown, children: t('dashboard.unknown') })) : (_jsx(GitLineStats, { additions: lineTotals.additions, deletions: lineTotals.deletions, ariaLabel: t('dashboard.git.lineStats', {\n additions: lineTotals.additions,\n deletions: lineTotals.deletions,\n }) })))] })] }), state.commitMultiSelect && state.selectedCommits.length > 0 && state.view === 'commits' && (_jsxs(\"div\", { className: styles.gitSelectionToolbar, children: [_jsx(\"span\", { children: t('dashboard.git.selectedCommitCount', { n: state.selectedCommits.length }) }), _jsx(\"button\", { type: \"button\", onClick: state.clearCommitSelection, children: t('dashboard.git.clearCommitSelection') })] })), !hasTarget ? (_jsx(\"div\", { className: styles.gitEmpty, children: t('dashboard.git.selectCommit') })) : state.files.status === 'loading' ? (_jsx(\"div\", { className: styles.gitLoading, role: \"status\", children: state.view === 'summary' ? t('dashboard.git.loadingSummaryFiles') : t('dashboard.git.loadingFiles') })) : state.files.status === 'error' ? (_jsx(\"div\", { className: styles.gitError, role: \"alert\", children: errorText(state.files.error, t) })) : (_jsxs(_Fragment, { children: [state.files.status === 'ready' && state.files.error !== undefined && (_jsx(\"div\", { className: styles.gitError, role: \"alert\", children: errorText(state.files.error, t) })), state.files.status === 'ready' && state.files.value.truncated === true && (_jsx(\"div\", { className: styles.gitEmpty, role: \"status\", \"data-dashboard-git-files-truncated\": true, children: t('dashboard.git.truncatedFiles') })), files.length === 0 && !(state.files.status === 'ready' && state.files.value.truncated === true) ? (_jsx(\"div\", { className: styles.gitEmpty, children: state.view === 'summary'\n ? state.includeWorkingTree\n ? t('dashboard.git.noLiveBaselineChanges')\n : t('dashboard.git.noBaselineChanges')\n : t('dashboard.git.noFiles') })) : (_jsx(GitChangedFiles, { files: files, selectedPath: state.selectedPath, onSelect: state.selectPath, t: t }))] }))] }), _jsx(GitSplitter, { split: columns, orientation: \"vertical\", axis: \"columns\", label: t('dashboard.git.resizeColumns') }), _jsxs(\"section\", { className: styles.gitColumn, \"data-dashboard-git-pane\": \"diff\", \"aria-label\": t('dashboard.git.diff'), \"aria-busy\": state.diff.status === 'loading', children: [_jsxs(\"div\", { className: styles.gitColumnHeader, children: [_jsx(\"h3\", { children: state.view === 'summary' ? t('dashboard.git.summaryDiff') : t('dashboard.git.diff') }), state.selectedPath !== undefined && _jsx(\"code\", { title: state.selectedPath, children: state.selectedPath })] }), state.diff.status === 'loading' ? (_jsx(\"div\", { className: styles.gitLoading, role: \"status\", children: state.view === 'summary' ? t('dashboard.git.loadingSummaryDiff') : t('dashboard.git.loadingDiff') })) : state.diff.status === 'error' ? (_jsx(\"div\", { className: styles.gitError, role: \"alert\", children: errorText(state.diff.error, t) })) : (_jsx(GitDiffView, { diff: diff, onOpenFile: onOpenFile, t: t }))] })] }))] }));\n}\n/**\n * Draggable divider that resizes one axis of the Git grid. The wide layout puts\n * the row divider inside the left column and the column divider beside it; the\n * narrow layout keeps both, between the top panes and above the diff.\n */\nfunction GitSplitter({ split, orientation, axis, label }) {\n return (_jsx(\"div\", { className: styles.gitColumnSplitter, \"data-dashboard-git-splitter\": axis, \"data-dashboard-git-splitting\": split.dragging ? 'true' : undefined, role: \"separator\", \"aria-orientation\": orientation, \"aria-label\": label, \"aria-valuemin\": 0, \"aria-valuemax\": 100, \"aria-valuenow\": Math.round(split.percent), title: label, tabIndex: 0, ref: split.splitterRef, onPointerDown: split.startDrag, onPointerMove: split.drag, onPointerUp: split.endDrag, onPointerCancel: split.endDrag, onLostPointerCapture: split.endDrag, onDoubleClick: split.reset, onKeyDown: split.onKeyDown }));\n}\nfunction errorText(error, t) {\n return error.message || t('dashboard.unknownError');\n}\n//# sourceMappingURL=WorktreeGitPanel.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, useState } from 'react';\nimport { WORKTREE_GIT_WORKING_TREE } from '../../../contract/index.js';\nimport { isMainWorktreeId, normalizeBaselineBranch, sumLineTotals } from './git-facts.js';\nimport { GitLineStats } from './GitLineStats.js';\nimport styles from '../dashboard.css';\nfunction isWorkingTreeCommit(commit) {\n return commit.kind === 'working-tree' || commit.sha === WORKTREE_GIT_WORKING_TREE;\n}\n/** Read the compact Git projections needed by the Overview status facts. */\nexport function useWorktreeGitOverview(input) {\n const baselineBranch = normalizeBaselineBranch(input.defaultBaselineBranch, input.currentBranch);\n // A captured acquisition commit keeps the Overview readable without a selected\n // branch; Main keeps this comparison-only Overview disconnected while its Git tab reads direct history.\n const readable = input.capturedBaseline === true || baselineBranch !== undefined;\n const [state, setState] = useState({ status: 'unavailable' });\n useEffect(() => {\n if (input.manager === undefined || isMainWorktreeId(input.worktreeId) || !readable) {\n setState({ status: 'unavailable' });\n return;\n }\n const manager = input.manager;\n let active = true;\n setState({ status: 'loading' });\n void manager.listWorktreeCommits({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n })\n .then(async (history) => {\n const workingTree = history.commits.find(isWorkingTreeCommit);\n const committedFilesPromise = history.unavailableReason === undefined\n ? manager.listWorktreeCommitFiles({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n selection: { kind: 'summary', includeWorkingTree: false },\n }).then((result) => result.files)\n : Promise.resolve([]);\n const workingTreeFilesPromise = workingTree === undefined\n ? Promise.resolve([])\n : manager.listWorktreeCommitFiles({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n commit: workingTree.sha,\n }).then((result) => result.files);\n const [committedFiles, workingTreeFiles] = await Promise.all([\n committedFilesPromise,\n workingTreeFilesPromise,\n ]);\n if (active)\n setState({ status: 'ready', history, committedFiles, workingTreeFiles });\n })\n .catch(() => {\n if (active)\n setState({ status: 'error' });\n });\n return () => {\n active = false;\n };\n }, [baselineBranch, readable, input.manager, input.workspaceId, input.worktreeId]);\n return state;\n}\nexport function WorktreeGitOverviewValue({ state, metric, t, }) {\n if (state.status !== 'ready') {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });\n }\n if (metric === 'aheadBehind') {\n const { ahead, behind } = state.history;\n if (ahead === undefined || behind === undefined) {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });\n }\n return (_jsx(GitLineStats, { additions: ahead, deletions: behind, ariaLabel: t('dashboard.git.aheadBehindStats', { ahead, behind }) }));\n }\n if (state.history.unavailableReason !== undefined) {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });\n }\n const files = metric === 'committed' ? state.committedFiles : state.workingTreeFiles;\n const totals = sumLineTotals(files);\n if (totals === undefined) {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.unknown') });\n }\n return (_jsx(GitLineStats, { additions: totals.additions, deletions: totals.deletions, ariaLabel: t('dashboard.git.lineStats', {\n additions: totals.additions,\n deletions: totals.deletions,\n }) }));\n}\n//# sourceMappingURL=WorktreeGitOverview.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useEffect, useId, useLayoutEffect, useRef, useState } from 'react';\nimport { Button, Input, Modal, StateDot, Tooltip, writeClipboard, } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconBranchOutline16, IconCheckOutline16, IconCopyOutline16, IconEditOutline16, IconPanelLeftOutline16, IconSearchOutline16, } from '../dsh-icons.js';\nimport { isBlankSession, relativeTime, sessionDisplayLabel } from '../session/session-view.js';\nimport { currentSessionIdFromList } from '../session/session-selection.js';\nimport { sessionStatusLabel, sessionTimeLabel } from '../session/session-labels.js';\nimport { OpenInAppButton } from './OpenInAppButton.js';\nimport { mountDashboardOverlay } from './dashboard-overlay.js';\nimport { isMainWorktreeId } from './dashboard-selection.js';\nimport { selectWorktreeAcquisitionFacts } from './worktree-acquisition-facts.js';\nimport styles from './dashboard.css';\nimport { WorktreeInstructions } from './WorktreeInstructions.js';\nimport { WorktreeGitPanel } from './git/WorktreeGitPanel.js';\nimport { useWorktreeGitOverview, WorktreeGitOverviewValue, } from './git/WorktreeGitOverview.js';\nconst TABS = ['overview', 'git', 'sessions', 'children', 'settings'];\nfunction DashboardIcon({ kind }) {\n const paths = {\n overview: 'M3 3h7v7H3z M14 3h7v7h-7z M3 14h7v7H3z M14 14h7v7h-7z',\n git: 'M7 7v10 M17 7v3c0 4-10 0-10 4 M5 3h4v4H5z M5 17h4v4H5z M15 3h4v4h-4z',\n sessions: 'M4 4h16v13H9l-5 4z M8 8h8 M8 12h5',\n children: 'M12 7v5 M5 17v-5h14v5 M9 3h6v4H9z M2 17h6v4H2z M16 17h6v4h-6z',\n settings: 'M4 6h16 M4 12h16 M4 18h16 M8 3v6 M16 9v6 M10 15v6',\n instructions: 'M5 3h14v18H5z M8 7h8 M8 11h8 M8 15h5',\n actions: 'M13 2 4 14h7l-1 8 10-13h-8z',\n };\n return (_jsx(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"1.6\", strokeLinecap: \"round\", strokeLinejoin: \"round\", \"aria-hidden\": \"true\", children: _jsx(\"path\", { d: paths[kind] }) }));\n}\nfunction Card({ title, icon, action, children, }) {\n return (_jsxs(\"section\", { className: styles.dashboardCard, children: [_jsxs(\"div\", { className: styles.dashboardCardHeading, children: [_jsxs(\"h2\", { children: [icon, title] }), action] }), children] }));\n}\nfunction DashboardFactRow({ label, children, action, baseline = false, }) {\n return (_jsxs(\"div\", { children: [_jsx(\"dt\", { children: label }), _jsx(\"dd\", { \"data-dashboard-baseline\": baseline ? true : undefined, children: children }), _jsx(\"span\", { className: styles.dashboardFactAction, children: action })] }));\n}\nfunction PlaceholderButton({ children, t }) {\n return (_jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: true, title: t('dashboard.soon'), children: children }));\n}\nfunction WorktreeBaselineEditor({ value, branches, currentBranch, onSave, t, disabled, }) {\n const [saved, setSaved] = useState(value);\n const [draft, setDraft] = useState();\n const [search, setSearch] = useState('');\n const [pending, setPending] = useState(false);\n const [error, setError] = useState(false);\n const busy = useRef(false);\n const alive = useRef(true);\n const optionRefs = useRef([]);\n const trigger = useRef(null);\n const wasOpen = useRef(false);\n const expected = useRef(value);\n const pickerId = useId();\n const options = branches.filter((branch) => branch.name !== currentBranch);\n useEffect(() => {\n alive.current = true;\n return () => {\n alive.current = false;\n };\n }, []);\n useEffect(() => {\n setSaved(value);\n expected.current = value;\n }, [value]);\n useEffect(() => {\n if (wasOpen.current && draft === undefined)\n trigger.current?.focus();\n wasOpen.current = draft !== undefined;\n }, [draft]);\n const closeEditor = () => {\n if (pending)\n return;\n setDraft(undefined);\n setSearch('');\n setError(false);\n };\n const openEditor = () => {\n expected.current = saved;\n setDraft(saved ?? '');\n setSearch('');\n setError(false);\n };\n const query = search.trim().toLowerCase();\n const filteredOptions = query.length === 0\n ? options\n : options.filter((branch) => branch.name.toLowerCase().includes(query));\n const activeIndex = filteredOptions.findIndex((branch) => branch.name === draft);\n // The list is a permanent, fixed-height region: filtering swaps its rows but\n // never changes its height, so the modal frame stays put.\n const listOpen = filteredOptions.length > 0;\n const selectOption = (index) => {\n if (pending)\n return;\n const branch = filteredOptions[index];\n if (branch === undefined)\n return;\n setDraft(branch.name);\n };\n const moveOption = (offset) => {\n if (filteredOptions.length === 0)\n return;\n const nextIndex = activeIndex < 0\n ? offset > 0\n ? 0\n : filteredOptions.length - 1\n : (activeIndex + offset + filteredOptions.length) % filteredOptions.length;\n selectOption(nextIndex);\n optionRefs.current[nextIndex]?.scrollIntoView({ block: 'nearest' });\n };\n const onSearchKeyDown = (event) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n moveOption(event.key === 'ArrowDown' ? 1 : -1);\n }\n else if (event.key === 'Enter' && filteredOptions.length > 0) {\n event.preventDefault();\n selectOption(activeIndex < 0 ? 0 : activeIndex);\n }\n };\n const save = async () => {\n if (busy.current ||\n draft === undefined ||\n onSave === undefined ||\n !options.some((branch) => branch.name === draft))\n return;\n busy.current = true;\n setPending(true);\n setError(false);\n try {\n const result = await onSave(draft, expected.current);\n if (alive.current) {\n setSaved(result);\n expected.current = result;\n setDraft(undefined);\n setSearch('');\n }\n }\n catch {\n if (alive.current)\n setError(true);\n }\n finally {\n busy.current = false;\n if (alive.current)\n setPending(false);\n }\n };\n return (_jsxs(_Fragment, { children: [_jsx(DashboardFactRow, { label: t('dashboard.base'), baseline: true, action: onSave !== undefined ? (_jsx(Tooltip, { label: t('dashboard.editBase'), side: \"bottom\", delayMs: 500, disabled: disabled || options.length === 0, children: _jsx(\"button\", { type: \"button\", ref: trigger, className: styles.dashboardIconButton, \"data-dashboard-baseline-edit\": true, \"aria-label\": t('dashboard.editBase'), title: t('dashboard.editBase'), \"aria-haspopup\": \"dialog\", \"aria-expanded\": draft !== undefined, disabled: disabled || options.length === 0, onClick: openEditor, children: _jsx(IconEditOutline16, {}) }) })) : undefined, children: saved === undefined ? (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) : (_jsx(\"span\", { \"data-dashboard-baseline-value\": true, children: saved })) }), _jsx(Modal, { open: draft !== undefined, onClose: closeEditor, closeLabel: t('dialog.closeBaseline'), title: t('dashboard.editBase'), description: t('dashboard.editBaseDescription'), className: styles.dashboardBaselineModal, contentClassName: styles.dashboardBaselineModalContent, footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: closeEditor, children: t('dashboard.cancelBase') }), _jsx(Button, { variant: \"primary\", \"data-dashboard-baseline-save\": true, disabled: pending || disabled || !options.some((branch) => branch.name === draft), onClick: () => void save(), children: t(pending ? 'dashboard.savingBase' : 'dashboard.saveBase') })] }), children: _jsxs(\"div\", { className: styles.dashboardBaselinePicker, \"data-dashboard-baseline-modal\": true, children: [_jsx(Input, { icon: _jsx(IconSearchOutline16, {}), className: styles.dashboardBaselineSearch, \"aria-label\": t('dashboard.searchBranches'), role: \"combobox\", \"aria-autocomplete\": \"list\", \"aria-controls\": listOpen ? `${pickerId}-options` : undefined, \"aria-expanded\": listOpen, \"aria-haspopup\": \"listbox\", \"aria-activedescendant\": listOpen && activeIndex >= 0 ? `${pickerId}-option-${activeIndex}` : undefined, \"data-dashboard-baseline-search\": true, disabled: pending || disabled, placeholder: t('dashboard.searchBranches'), value: search, onKeyDown: onSearchKeyDown, onChange: (event) => setSearch(event.currentTarget.value) }), _jsx(\"div\", { className: styles.dashboardBaselineOptions, \"data-dashboard-baseline-options\": true, children: listOpen ? (_jsx(\"div\", { id: `${pickerId}-options`, className: styles.dashboardBaselineList, role: \"listbox\", \"aria-label\": t('dashboard.searchBranches'), children: filteredOptions.map((branch, index) => (_jsxs(\"button\", { type: \"button\", ref: (element) => {\n optionRefs.current[index] = element;\n }, id: `${pickerId}-option-${index}`, className: styles.dashboardBaselineOption, \"data-dashboard-baseline-option\": branch.name, \"data-highlighted\": activeIndex === index ? true : undefined, role: \"option\", \"aria-selected\": branch.name === draft, onClick: () => selectOption(index), children: [_jsx(IconBranchOutline16, {}), _jsx(\"span\", { className: styles.dashboardBaselineOptionLabel, children: branch.name }), branch.name === draft && _jsx(IconCheckOutline16, {})] }, branch.name))) })) : (_jsx(\"div\", { className: styles.dashboardBaselineEmpty, \"data-dashboard-baseline-empty\": true, role: \"status\", \"aria-live\": \"polite\", children: t('dashboard.noMatchingBranches') })) }), _jsx(\"div\", { className: styles.dashboardBaselineStatus, \"data-dashboard-baseline-status\": true, children: error && (_jsx(\"span\", { className: styles.dashboardBaselineError, \"data-dashboard-baseline-error\": true, role: \"alert\", children: t('dashboard.baseSaveFailed') })) })] }) })] }));\n}\n/** A managed Worktree or browser Main projection with explicit unavailable states for inapplicable facts. */\nexport function WorktreeDashboard({ manager, record, workspaceTitle, t, onClose, onOpenSidebar, isRightSidebarExpanded, sessions, sessionPresentations, sessionIds, actionPending, onOpenSession, onCreateSession, onCreateWorktree, onArchiveWorktree, onOpenFile, onSaveInstructions, onSaveBaseline, branches = [], }) {\n const surface = useRef(null);\n const heading = useRef(null);\n const [placement, setPlacement] = useState();\n const [rightSidebarOpen, setRightSidebarOpen] = useState(Boolean(isRightSidebarExpanded?.()));\n const [tab, setTab] = useState('overview');\n const [baselineBranch, setBaselineBranch] = useState(record.baseBranch);\n const [copyState, setCopyState] = useState('idle');\n const [branchCopyState, setBranchCopyState] = useState('idle');\n const copyGeneration = useRef(0);\n const branchCopyGeneration = useRef(0);\n const copyPending = useRef(false);\n const branchCopyPending = useRef(false);\n const id = useId();\n useEffect(() => {\n setBaselineBranch(record.baseBranch);\n }, [record.baseBranch]);\n useLayoutEffect(() => {\n const element = surface.current;\n if (!element)\n return;\n return mountDashboardOverlay(element, (next) => setPlacement((previous) => JSON.stringify(previous) === JSON.stringify(next) ? previous : next), {\n onRightSidebarChange: (open) => setRightSidebarOpen(open),\n isRightSidebarExpanded,\n });\n }, [isRightSidebarExpanded]);\n useLayoutEffect(() => {\n if (!placement)\n return;\n const previous = document.activeElement;\n const element = surface.current;\n heading.current?.focus({ preventScroll: true });\n return () => {\n if (previous instanceof HTMLElement &&\n previous.isConnected &&\n (element?.contains(document.activeElement) || document.activeElement === document.body)) {\n previous.focus({ preventScroll: true });\n }\n };\n }, [placement !== undefined]);\n useEffect(() => {\n copyGeneration.current += 1;\n copyPending.current = false;\n setCopyState('idle');\n return () => {\n copyGeneration.current += 1;\n };\n }, [record.absolutePath]);\n useEffect(() => {\n branchCopyGeneration.current += 1;\n branchCopyPending.current = false;\n setBranchCopyState('idle');\n return () => {\n branchCopyGeneration.current += 1;\n };\n }, [record.branch]);\n const copyPath = async () => {\n if (copyPending.current)\n return;\n copyPending.current = true;\n const generation = copyGeneration.current;\n setCopyState('pending');\n try {\n const copied = await writeClipboard(record.absolutePath);\n if (generation === copyGeneration.current)\n setCopyState(copied ? 'copied' : 'failed');\n }\n catch {\n if (generation === copyGeneration.current)\n setCopyState('failed');\n }\n finally {\n if (generation === copyGeneration.current)\n copyPending.current = false;\n }\n };\n const branchAvailable = record.branch.length > 0;\n const displayBranch = branchAvailable ? record.branch : t('dashboard.branchUnavailable');\n const copyBranch = async () => {\n if (!branchAvailable || branchCopyPending.current)\n return;\n branchCopyPending.current = true;\n const generation = branchCopyGeneration.current;\n setBranchCopyState('pending');\n try {\n const copied = await writeClipboard(record.branch);\n if (generation === branchCopyGeneration.current)\n setBranchCopyState(copied ? 'copied' : 'failed');\n }\n catch {\n if (generation === branchCopyGeneration.current)\n setBranchCopyState('failed');\n }\n finally {\n if (generation === branchCopyGeneration.current)\n branchCopyPending.current = false;\n }\n };\n const healthKey = record.health === 'ready'\n ? 'worktree.ready'\n : record.health === 'repair'\n ? 'worktree.repair'\n : record.health === 'recovery-needed'\n ? 'worktree.recovery'\n : record.health === 'branch-drift'\n ? 'worktree.branchDrift'\n : record.health === 'cleaned'\n ? 'dashboard.cleaned'\n : 'dashboard.unknown';\n const liveBranch = record.currentBranch === null\n ? t('dashboard.detached')\n : (record.currentBranch ??\n (branchAvailable ? record.branch : t('dashboard.branchUnavailable')));\n const baselineCurrentBranch = record.currentBranch === undefined ? record.branch : record.currentBranch ?? undefined;\n const persistBaseline = onSaveBaseline === undefined\n ? undefined\n : async (baseBranch, expectedBaseBranch) => {\n const result = await onSaveBaseline(baseBranch, expectedBaseBranch);\n setBaselineBranch(result);\n return result;\n };\n const displayedBaseline = onSaveBaseline === undefined ? record.baseBranch : baselineBranch;\n const gitOverview = useWorktreeGitOverview({\n manager,\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n defaultBaselineBranch: displayedBaseline,\n currentBranch: baselineCurrentBranch,\n capturedBaseline: record.baseCommit !== undefined,\n });\n const acquisitionFacts = selectWorktreeAcquisitionFacts(record);\n const acquisitionLabel = acquisitionFacts.timestampKind === 'imported' ? 'dashboard.imported' : 'dashboard.created';\n const tabLabel = (value) => t(`dashboard.tab.${value}`);\n const placeholder = _jsx(\"span\", { className: styles.dashboardSoon, children: t('dashboard.soon') });\n const selectTab = (next, focus = false) => {\n setTab(next);\n if (focus)\n document.getElementById(`${id}-${next}`)?.focus();\n };\n const tabLink = (next, label) => (_jsxs(\"button\", { type: \"button\", className: styles.dashboardLink, onClick: () => selectTab(next, true), children: [label, _jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u2192\" })] }));\n const sessionList = (ids) => ids.length === 0 ? (_jsx(\"div\", { className: styles.dashboardEmpty, children: _jsx(\"p\", { children: t('dashboard.noSessions') }) })) : (_jsx(\"ul\", { className: styles.dashboardSessions, children: ids.map((sessionId) => {\n const presentation = sessionPresentations[sessionId];\n const blank = isBlankSession(sessionId, sessions);\n const statusLabel = presentation === undefined ? undefined : sessionStatusLabel(t, presentation.status);\n const showTrailingStatus = !blank &&\n presentation !== undefined &&\n (presentation.status.state !== 'done' || presentation.completed);\n const timeValue = !blank && !showTrailingStatus && presentation?.updatedAt !== undefined\n ? relativeTime(presentation.updatedAt, Date.now())\n : undefined;\n const timeLabel = timeValue === undefined ? undefined : sessionTimeLabel(t, timeValue);\n return (_jsx(\"li\", { children: _jsxs(\"button\", { type: \"button\", \"data-dashboard-session\": sessionId, \"aria-current\": currentSessionIdFromList(sessions) === sessionId ? 'page' : undefined, onClick: () => onOpenSession(sessionId), children: [_jsx(DashboardIcon, { kind: \"sessions\" }), _jsx(\"span\", { className: styles.dashboardSessionLabel, children: sessionDisplayLabel(sessionId, sessions, t('session.new')) }), !blank && (_jsx(\"span\", { className: styles.dashboardSessionMeta, children: showTrailingStatus && presentation !== undefined ? (_jsx(\"span\", { className: styles.dashboardSessionStatus, \"data-dashboard-session-status\": statusLabel, role: \"img\", \"aria-label\": statusLabel, title: statusLabel, children: _jsx(StateDot, { state: presentation.status.state }) })) : timeLabel !== undefined ? (_jsx(\"span\", { className: styles.dashboardSessionTime, \"data-dashboard-session-time\": true, children: timeLabel })) : null })), _jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u2192\" })] }) }, sessionId));\n }) }));\n const topActionIsCreateSession = sessionIds.length === 0 && onCreateSession !== undefined;\n return (_jsx(\"section\", { ref: surface, className: styles.dashboardSurface, \"data-worktree-dashboard\": record.worktreeId, \"aria-labelledby\": `${id}-title`, style: placement ?? { visibility: 'hidden', height: 0 }, onKeyDown: (event) => {\n if (event.key === 'Escape') {\n // Other dashboard menus own Escape even when focus remains elsewhere in the surface.\n if (event.currentTarget.querySelector('[role=\"menu\"]'))\n return;\n event.stopPropagation();\n onClose();\n }\n }, children: _jsxs(\"div\", { className: styles.dashboardPage, children: [_jsxs(\"div\", { className: styles.dashboardTopline, children: [_jsxs(\"span\", { children: [workspaceTitle, _jsx(\"span\", { \"aria-hidden\": \"true\", children: \" / \" }), t('dashboard.preview')] }), _jsxs(\"div\", { className: styles.dashboardToplineActions, children: [_jsx(\"button\", { type: \"button\", className: styles.dashboardButton, \"aria-label\": t(topActionIsCreateSession ? 'dashboard.newSession' : 'dashboard.back'), onClick: () => {\n if (topActionIsCreateSession)\n onCreateSession?.();\n else\n onClose();\n }, children: topActionIsCreateSession ? t('dashboard.newSession') : _jsxs(_Fragment, { children: [\"\\u2190 \", t('dashboard.back')] }) }), !rightSidebarOpen && onOpenSidebar !== undefined && (_jsx(Tooltip, { label: t('dashboard.openSidebar'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.dashboardSidebarButton, \"aria-label\": t('dashboard.openSidebar'), title: t('dashboard.openSidebar'), \"data-sidebar-right-expand\": true, onClick: () => {\n onOpenSidebar();\n setRightSidebarOpen(true);\n }, children: _jsx(IconPanelLeftOutline16, {}) }) }))] })] }), _jsxs(\"header\", { className: styles.dashboardHeader, children: [_jsxs(\"div\", { className: styles.dashboardIdentity, children: [_jsxs(\"div\", { className: styles.dashboardTitleRow, \"data-dashboard-copy\": \"branch\", role: branchAvailable ? 'button' : undefined, tabIndex: branchAvailable ? 0 : undefined, \"aria-label\": branchAvailable ? t('dashboard.copyBranch') : undefined, title: branchAvailable ? t('dashboard.copyBranch') : undefined, \"aria-busy\": branchAvailable && branchCopyState === 'pending' ? true : undefined, onClick: branchAvailable ? () => void copyBranch() : undefined, onKeyDown: branchAvailable\n ? (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n void copyBranch();\n }\n }\n : undefined, children: [_jsx(IconBranchOutline16, {}), _jsx(\"h1\", { id: `${id}-title`, ref: heading, tabIndex: -1, children: displayBranch }), _jsxs(\"span\", { className: styles.dashboardHealth, \"data-health\": record.health ?? 'unknown', children: [_jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u25CF\" }), t(healthKey)] }), record.status === 'removed' && (_jsx(\"span\", { className: styles.dashboardSoon, children: t('dashboard.archived') }))] }), _jsxs(\"div\", { className: styles.dashboardPath, children: [_jsx(\"span\", { className: styles.dashboardFieldLabel, children: \"cwd\" }), _jsx(\"code\", { children: record.absolutePath }), _jsx(\"button\", { type: \"button\", className: styles.dashboardIconButton, \"aria-label\": t('worktree.copyPath'), title: t('worktree.copyPath'), disabled: copyState === 'pending', onClick: () => {\n void copyPath();\n }, children: _jsx(IconCopyOutline16, {}) })] }), _jsx(\"p\", { className: styles.dashboardCopyStatus, role: branchCopyState === 'failed' ||\n (branchCopyState === 'idle' && copyState === 'failed')\n ? 'alert'\n : 'status', children: branchCopyState === 'pending'\n ? '\\u00a0'\n : branchCopyState === 'copied'\n ? t('dashboard.branchCopied')\n : branchCopyState === 'failed'\n ? t('dashboard.branchCopyFailed')\n : copyState === 'copied'\n ? t('dashboard.copied')\n : copyState === 'failed'\n ? t('dashboard.copyFailed')\n : '\\u00a0' })] }), _jsxs(\"div\", { className: styles.dashboardHeaderAside, children: [_jsx(OpenInAppButton, { path: record.absolutePath, t: t }), _jsxs(\"dl\", { className: styles.dashboardFacts, children: [_jsx(DashboardFactRow, { label: t(acquisitionLabel), children: acquisitionFacts.timestamp ? (_jsx(\"time\", { dateTime: acquisitionFacts.timestamp, children: new Date(acquisitionFacts.timestamp).toLocaleString() })) : (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) }), !isMainWorktreeId(record.worktreeId) && persistBaseline !== undefined ? (_jsx(WorktreeBaselineEditor, { value: baselineBranch, branches: branches, currentBranch: baselineCurrentBranch, onSave: persistBaseline, t: t, disabled: record.status !== 'active' || record.health === 'recovery-needed' })) : (_jsx(DashboardFactRow, { label: t('dashboard.base'), baseline: true, children: displayedBaseline ?? (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) })), _jsx(DashboardFactRow, { label: t('dashboard.source'), children: isMainWorktreeId(record.worktreeId)\n ? t('worktree.main')\n : t(record.source === 'external' ? 'dashboard.external' : 'dashboard.plugin') })] })] })] }), _jsx(\"div\", { className: styles.dashboardTabs, role: \"tablist\", \"aria-label\": t('dashboard.title'), children: TABS.map((value) => (_jsxs(\"button\", { type: \"button\", id: `${id}-${value}`, role: \"tab\", \"aria-selected\": tab === value, \"aria-controls\": `${id}-panel`, tabIndex: tab === value ? 0 : -1, onClick: () => selectTab(value), onKeyDown: (event) => {\n const index = TABS.indexOf(value);\n const next = event.key === 'ArrowRight'\n ? TABS[(index + 1) % TABS.length]\n : event.key === 'ArrowLeft'\n ? TABS[(index + TABS.length - 1) % TABS.length]\n : event.key === 'Home'\n ? TABS[0]\n : event.key === 'End'\n ? TABS[TABS.length - 1]\n : undefined;\n if (next) {\n event.preventDefault();\n selectTab(next, true);\n }\n }, children: [_jsx(DashboardIcon, { kind: value }), tabLabel(value)] }, value))) }), _jsx(\"div\", { id: `${id}-panel`, role: \"tabpanel\", \"aria-labelledby\": `${id}-${tab}`, tabIndex: 0, className: styles.dashboardPanel, children: tab === 'overview' ? (_jsxs(\"div\", { className: styles.dashboardGrid, children: [_jsxs(\"div\", { className: styles.dashboardColumn, children: [_jsxs(\"section\", { className: styles.dashboardStart, children: [_jsxs(\"h2\", { children: [_jsx(IconBranchOutline16, {}), t('dashboard.start')] }), _jsx(\"p\", { children: t('dashboard.startDescription') }), _jsxs(\"div\", { className: styles.dashboardStartActions, children: [_jsxs(\"button\", { type: \"button\", disabled: actionPending || !onCreateWorktree, onClick: onCreateWorktree, \"data-dashboard-action\": \"create-worktree\", children: [_jsx(DashboardIcon, { kind: \"git\" }), _jsxs(\"span\", { children: [_jsx(\"strong\", { children: t('dashboard.newWorktree') }), _jsx(\"small\", { children: t('dashboard.newWorktreeDescription') })] })] }), _jsxs(\"button\", { type: \"button\", disabled: actionPending || !onCreateSession, onClick: onCreateSession, \"data-dashboard-action\": \"create-session\", children: [_jsx(DashboardIcon, { kind: \"sessions\" }), _jsxs(\"span\", { children: [_jsx(\"strong\", { children: t('dashboard.newSession') }), _jsx(\"small\", { children: t('dashboard.newSessionDescription') })] })] })] })] }), _jsxs(Card, { title: t('dashboard.instructions'), icon: _jsx(DashboardIcon, { kind: \"instructions\" }), children: [_jsx(\"p\", { children: t('dashboard.instructionsDescription') }), _jsx(WorktreeInstructions, { value: record.instructions ?? '', onSave: onSaveInstructions, t: t, disabled: actionPending || record.health === 'recovery-needed' })] }), _jsxs(Card, { title: tabLabel('sessions'), icon: _jsx(DashboardIcon, { kind: \"sessions\" }), action: _jsx(\"span\", { children: sessionIds.length }), children: [sessionList(sessionIds.slice(0, 5)), tabLink('sessions', t('dashboard.viewSessions'))] })] }), _jsxs(\"div\", { className: styles.dashboardColumn, children: [_jsxs(Card, { title: t('dashboard.status'), icon: _jsx(DashboardIcon, { kind: \"git\" }), children: [_jsx(\"p\", { children: t('dashboard.statusHint') }), _jsxs(\"dl\", { className: styles.dashboardFacts, children: [_jsx(DashboardFactRow, { label: t('dashboard.health'), children: t(healthKey) }), _jsx(DashboardFactRow, { label: t('dashboard.branch'), children: liveBranch }), _jsx(DashboardFactRow, { label: t('dashboard.base'), children: displayedBaseline ?? (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) }), _jsx(DashboardFactRow, { label: t('dashboard.aheadBehind'), children: _jsx(WorktreeGitOverviewValue, { state: gitOverview, metric: \"aheadBehind\", t: t }) }), _jsx(DashboardFactRow, { label: t('dashboard.committedChanges'), children: _jsx(WorktreeGitOverviewValue, { state: gitOverview, metric: \"committed\", t: t }) }), _jsx(DashboardFactRow, { label: t('dashboard.workingTree'), children: _jsx(WorktreeGitOverviewValue, { state: gitOverview, metric: \"workingTree\", t: t }) })] }), tabLink('git', t('dashboard.viewDetails'))] }), _jsxs(Card, { title: t('dashboard.derived'), icon: _jsx(DashboardIcon, { kind: \"children\" }), action: placeholder, children: [_jsx(\"div\", { className: styles.dashboardEmpty, children: _jsx(\"p\", { children: t('dashboard.childrenHint') }) }), tabLink('children', t('dashboard.viewChildren'))] }), _jsx(Card, { title: t('dashboard.quickActions'), icon: _jsx(DashboardIcon, { kind: \"actions\" }), children: _jsxs(\"div\", { className: styles.dashboardQuickActions, children: [['terminal', 'diff', 'pullRequest', 'tests', 'sync'].map((action) => (_jsx(PlaceholderButton, { t: t, children: t(`dashboard.action.${action}`) }, action))), _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: actionPending || !onArchiveWorktree, onClick: onArchiveWorktree, \"data-dashboard-action\": \"archive-worktree\", children: t('dashboard.action.archive') })] }) })] })] })) : tab === 'git' ? (_jsx(WorktreeGitPanel, { manager: manager, workspaceId: record.workspaceId, worktreeId: record.worktreeId, defaultBaselineBranch: displayedBaseline, currentBranch: baselineCurrentBranch, capturedBaseline: record.baseCommit !== undefined, onOpenFile: (filePath) => {\n onOpenFile?.(filePath);\n setRightSidebarOpen(true);\n }, t: t })) : tab === 'sessions' ? (_jsx(Card, { title: tabLabel('sessions'), icon: _jsx(DashboardIcon, { kind: \"sessions\" }), action: _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: actionPending || !onCreateSession, onClick: onCreateSession, children: t('dashboard.newSession') }), children: sessionList(sessionIds) })) : (_jsxs(\"section\", { className: styles.dashboardTabPlaceholder, children: [_jsx(DashboardIcon, { kind: tab }), _jsx(\"h2\", { children: tabLabel(tab) }), _jsx(\"p\", { children: t(`dashboard.hint.${tab}`) }), placeholder] })) }), _jsx(\"p\", { className: styles.dashboardFooter, children: t('dashboard.mvpHint') })] }) }));\n}\n//# sourceMappingURL=WorktreeDashboard.js.map","import { filterVisibleSessionIds } from '../session/session-view.js';\nimport { filterArchivedSessionIds } from '../view/worktree-view.js';\nimport { isMainWorktreeId } from './dashboard-selection.js';\n/** Join retained snapshots without reading, mutating, or applying Sidebar search. */\nexport function dashboardSessionIds(record, sessions, bindings, archivedSessionIds, orderedIds = [], workspaceSessionIds = []) {\n if (isMainWorktreeId(record.worktreeId)) {\n const boundSessionIds = new Set(bindings\n .filter((binding) => binding.workspaceId === record.workspaceId && binding.status !== 'detached')\n .map((binding) => binding.sessionId));\n const visible = filterVisibleSessionIds(filterArchivedSessionIds(workspaceSessionIds.filter((sessionId) => !boundSessionIds.has(sessionId)), archivedSessionIds), sessions);\n const visibleIds = new Set(visible);\n return [...new Set([...orderedIds, ...visible])].filter((id) => visibleIds.has(id));\n }\n const members = new Set(bindings\n .filter((binding) => binding.workspaceId === record.workspaceId && binding.worktreeId === record.worktreeId)\n .map((binding) => binding.sessionId));\n const visible = filterVisibleSessionIds(filterArchivedSessionIds(sessions.ids.filter((sessionId) => members.has(sessionId)), archivedSessionIds), sessions);\n const visibleIds = new Set(visible);\n return [...new Set([...orderedIds, ...visible])].filter((id) => visibleIds.has(id));\n}\n//# sourceMappingURL=dashboard-sessions.js.map","/**\n * Keep Dashboard and the native Session sidebars on one Session identity.\n *\n * Keep the current Session when it belongs to the target; otherwise use the\n * first visible id in the Worktree's retained head order. An empty list is\n * still a valid page-level dashboard target: it carries no native Session identity\n * and leaves Session creation to the explicit Dashboard action.\n */\nexport function prepareDashboardNavigation(record, sessionIds, currentSessionId, phase = 'ready') {\n if (phase === 'pending') {\n return {\n selection: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n sessionId: undefined,\n },\n sessionIdToOpen: undefined,\n waitForSessionList: true,\n };\n }\n const sessionIdToOpen = currentSessionId !== undefined && sessionIds.includes(currentSessionId)\n ? currentSessionId\n : sessionIds[0];\n return {\n selection: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n sessionId: sessionIdToOpen,\n },\n sessionIdToOpen: sessionIdToOpen === undefined || sessionIdToOpen === currentSessionId\n ? undefined\n : sessionIdToOpen,\n };\n}\n/**\n * Settle a pending Session switch without resurrecting it after an unrelated switch.\n */\nexport function settlePendingDashboardNavigation(pending, currentSessionId) {\n if (pending === undefined)\n return { kind: 'wait' };\n if (currentSessionId === pending.selection.sessionId) {\n return { kind: 'open', selection: pending.selection };\n }\n if (currentSessionId !== pending.originSessionId)\n return { kind: 'clear' };\n return { kind: 'wait' };\n}\n//# sourceMappingURL=dashboard-navigation.js.map","/**\n * Canonical DSH session file address constructor.\n * Equivalent to `sessionFileAddress` from `@deepseek-ai/dsh-util-workspace-path`.\n * Address grammar: `dsh-resource://file/session/<sessionId>/<encodedPath>`\n */\nfunction encodeSegment(segment) {\n return encodeURIComponent(segment).replace(/%3A/gi, ':');\n}\nfunction encodePath(path) {\n return path.split('/').map(encodeSegment).join('/');\n}\nexport function buildSessionFileAddress(sessionId, path) {\n const normalized = path.replace(/\\\\/g, '/').replace(/^(?:\\.\\/)+/, '');\n return `dsh-resource://file/session/${encodeSegment(sessionId)}/${encodePath(normalized)}`;\n}\n//# sourceMappingURL=file-address.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { AccessConfirmation } from './surface/components/AccessConfirmation.js';\nimport { LifecycleDialogs } from './surface/components/LifecycleDialogs.js';\nimport { NativeDialogs } from './surface/components/NativeDialogs.js';\nimport { RegistrationDialog } from './surface/components/RegistrationDialog.js';\nimport { SurfaceContent } from './surface/components/SurfaceContent.js';\nimport { SurfaceHeader } from './surface/components/SurfaceHeader.js';\nimport { useDragActions } from './surface/actions/useDragActions.js';\nimport { useLifecycleActions } from './surface/actions/useLifecycleActions.js';\nimport { useLifecycleState } from './surface/state/useLifecycleState.js';\nimport { useNativeActions } from './surface/actions/useNativeActions.js';\nimport { useRegistrationState } from './surface/state/useRegistrationState.js';\nimport { useSessionActions } from './surface/actions/useSessionActions.js';\nimport { useSessionExpansion } from './surface/state/useSessionExpansion.js';\nimport { useSessionOrdering } from './surface/state/useSessionOrdering.js';\nimport { useSurfaceMenus } from './surface/state/useSurfaceMenus.js';\nimport { useSurfaceMutation } from './surface/actions/useSurfaceMutation.js';\nimport { useSurfaceRefresh } from './surface/state/useSurfaceRefresh.js';\nimport { useSurfaceSources } from './surface/state/useSurfaceSources.js';\nimport { useWorktreeRegistration } from './surface/actions/useWorktreeRegistration.js';\nimport styles from './worktree.css';\nimport { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react';\nimport { WorktreeDashboard } from './dashboard/WorktreeDashboard.js';\nimport { createMainWorktreeRecord, isMainWorktreeId, isManagedDashboardRecord, resolveDashboardRecord, } from './dashboard/dashboard-selection.js';\nimport { dashboardSessionIds } from './dashboard/dashboard-sessions.js';\nimport { prepareDashboardNavigation, settlePendingDashboardNavigation, } from './dashboard/dashboard-navigation.js';\nimport { buildSessionFileAddress } from './dashboard/git/file-address.js';\nimport { createNumberedWorktreeName } from './view/worktree-view.js';\nimport { workspaceSessionIds } from './view/view-mode.js';\n/** Composes independent surface state/action domains into the sidebar overlay. */\nexport function WorktreeSurface(inputProps) {\n const [internalDashboard, setInternalDashboard] = useState();\n const pendingDashboard = useRef();\n const pendingDashboardRecord = useRef();\n const openDashboardRef = useRef();\n const externalDashboard = inputProps.dashboardStore\n ? useSyncExternalStore(inputProps.dashboardStore.subscribe, inputProps.dashboardStore.getSnapshot, () => undefined)\n : undefined;\n const dashboard = inputProps.dashboardStore !== undefined ? externalDashboard : internalDashboard;\n const setDashboard = useCallback((selection) => {\n if (inputProps.dashboardStore !== undefined) {\n inputProps.dashboardStore.set(selection);\n }\n setInternalDashboard(selection);\n }, [inputProps.dashboardStore]);\n const closeDashboard = useCallback(() => {\n pendingDashboard.current = undefined;\n pendingDashboardRecord.current = undefined;\n setDashboard(undefined);\n }, [setDashboard]);\n const source = useSurfaceSources({ props: inputProps });\n useEffect(() => {\n if (source.mode !== 'worktree')\n closeDashboard();\n }, [source.mode, closeDashboard]);\n useEffect(() => () => {\n inputProps.dashboardStore?.set(undefined);\n }, [inputProps.dashboardStore]);\n const props = {\n ...inputProps,\n openDashboard: (record) => openDashboardRef.current?.(record),\n openSession: (sessionId) => {\n closeDashboard();\n inputProps.openSession(sessionId);\n },\n createMainSession: inputProps.createMainSession === undefined\n ? undefined\n : (workspaceId) => {\n closeDashboard();\n inputProps.createMainSession?.(workspaceId);\n },\n };\n const registrationState = useRegistrationState({ props });\n const read = useSurfaceRefresh({ source, props, registrationState });\n const targetWorkspace = dashboard === undefined\n ? undefined\n : source.workspaces.items.find((workspace) => workspace.workspaceId === dashboard.workspaceId);\n const targetView = dashboard === undefined ? undefined : read.viewByWorkspace.get(dashboard.workspaceId);\n const dashboardMainBranch = targetView?.branches.find((branch) => branch.isCurrent)?.name;\n const dashboardMainRecord = targetWorkspace === undefined\n ? undefined\n : createMainWorktreeRecord(targetWorkspace, dashboardMainBranch, targetView?.mainInstructions);\n const dashboardRecord = resolveDashboardRecord(dashboard, source.mode, source.currentSessionId, source.workspaceIds, dashboard === undefined\n ? undefined\n : targetView?.worktrees, dashboardMainRecord);\n useEffect(() => {\n if (dashboard !== undefined && dashboardRecord === undefined) {\n // A target Session switch can invalidate the old Dashboard in the same\n // commit that settles a new Worktree navigation. Do not cancel that\n // pending navigation while dismissing the stale page.\n setDashboard(undefined);\n }\n }, [dashboard, dashboardRecord, setDashboard]);\n const mutation = useSurfaceMutation({ read });\n const lifecycleState = useLifecycleState({ props, source, mutation });\n const menus = useSurfaceMenus();\n const ordering = useSessionOrdering({ read, source, props });\n const openDashboard = useCallback((record) => {\n const workspace = source.workspaces.items.find((candidate) => candidate.workspaceId === record.workspaceId);\n const view = read.viewByWorkspace.get(record.workspaceId);\n const sessionIds = dashboardSessionIds(record, source.sessions, view?.bindings ?? [], source.archivedSessionIds, isMainWorktreeId(record.worktreeId)\n ? ordering.orderedSessionIdsByAccount.get(`main:${record.workspaceId}`)\n : ordering.orderedSessionIdsByAccount.get(`worktree:${record.worktreeId}`), workspace === undefined\n ? []\n : workspaceSessionIds(source.workspaces, workspace.workspaceId, source.sessions.ids));\n const navigation = prepareDashboardNavigation(record, sessionIds, source.currentSessionId, source.sessions.phase ?? 'ready');\n if (navigation.waitForSessionList === true) {\n pendingDashboard.current = undefined;\n pendingDashboardRecord.current = record;\n return;\n }\n pendingDashboardRecord.current = undefined;\n if (navigation.sessionIdToOpen !== undefined) {\n pendingDashboard.current = {\n selection: navigation.selection,\n originSessionId: source.currentSessionId,\n };\n inputProps.openSession(navigation.sessionIdToOpen);\n return;\n }\n pendingDashboard.current = undefined;\n if (navigation.selection.sessionId === undefined)\n inputProps.closeRightSidebar?.();\n setDashboard(navigation.selection);\n }, [\n inputProps.closeRightSidebar,\n inputProps.openSession,\n ordering.orderedSessionIdsByAccount,\n read.viewByWorkspace,\n setDashboard,\n source.archivedSessionIds,\n source.currentSessionId,\n source.sessions,\n source.workspaces,\n ]);\n openDashboardRef.current = openDashboard;\n useEffect(() => {\n if (source.sessions.phase === 'pending')\n return;\n const pendingRecord = pendingDashboardRecord.current;\n if (pendingRecord === undefined)\n return;\n pendingDashboardRecord.current = undefined;\n openDashboard(pendingRecord);\n }, [openDashboard, source.sessions.phase]);\n useEffect(() => {\n const settlement = settlePendingDashboardNavigation(pendingDashboard.current, source.currentSessionId);\n if (settlement.kind === 'open') {\n pendingDashboard.current = undefined;\n setDashboard(settlement.selection);\n }\n else if (settlement.kind === 'clear') {\n pendingDashboard.current = undefined;\n }\n }, [setDashboard, source.currentSessionId]);\n const expansion = useSessionExpansion({ read, source, props });\n const native = useNativeActions({ source, props, mutation });\n const drag = useDragActions({\n source,\n orderedSessionIdsByAccount: ordering.orderedSessionIdsByAccount,\n props,\n mutation,\n read,\n });\n const session = useSessionActions({ source, props, mutation, read });\n const registration = useWorktreeRegistration({\n source,\n registrationState,\n read,\n props,\n mutation,\n session,\n });\n const lifecycle = useLifecycleActions({ read, lifecycleState, source, props, mutation });\n const dashboardWorkspace = source.workspaces.items.find((workspace) => workspace.workspaceId === dashboardRecord?.workspaceId);\n const dashboardView = dashboardRecord === undefined\n ? undefined\n : read.viewByWorkspace.get(dashboardRecord.workspaceId);\n const dashboardCanCreate = dashboardRecord?.status === 'active' &&\n dashboardRecord.diskCleanup !== 'completed' &&\n dashboardRecord.health !== 'cleaned' &&\n dashboardRecord.health !== 'repair' &&\n dashboardRecord.health !== 'recovery-needed';\n const dashboardManagedRecord = dashboardRecord !== undefined && isManagedDashboardRecord(dashboardRecord)\n ? dashboardRecord\n : undefined;\n const onOpenFile = useCallback((filePath, options) => {\n if (typeof props.openResource !== 'function' || dashboardRecord === undefined)\n return;\n const worktreeSessions = dashboardSessionIds(dashboardRecord, source.sessions, dashboardView?.bindings ?? [], source.archivedSessionIds, isMainWorktreeId(dashboardRecord.worktreeId)\n ? ordering.orderedSessionIdsByAccount.get(`main:${dashboardRecord.workspaceId}`)\n : ordering.orderedSessionIdsByAccount.get(`worktree:${dashboardRecord.worktreeId}`), dashboardWorkspace === undefined\n ? []\n : workspaceSessionIds(source.workspaces, dashboardWorkspace.workspaceId, source.sessions.ids));\n // A file opened from Git must stay inside the Dashboard Worktree.\n // Never fall back to the current or another Workspace Session.\n const targetSessionId = source.currentSessionId !== undefined &&\n worktreeSessions.includes(source.currentSessionId)\n ? source.currentSessionId\n : undefined;\n if (targetSessionId === undefined)\n return;\n const address = buildSessionFileAddress(targetSessionId, filePath);\n props.openResource(address, options);\n }, [\n props.openResource,\n dashboardRecord,\n source.currentSessionId,\n source.sessions,\n source.archivedSessionIds,\n source.workspaces,\n dashboardView?.bindings,\n ordering.orderedSessionIdsByAccount,\n dashboardWorkspace,\n ]);\n if (source.mode !== 'worktree')\n return null;\n const { ref, width, bounds, collapsed } = source;\n const { t } = props;\n return (_jsxs(_Fragment, { children: [_jsxs(\"aside\", { ref: ref, className: styles.surface, \"data-worktree-surface\": true, \"data-collapsed\": collapsed || undefined, \"aria-label\": t('mode.navigation'), style: {\n width: `${width}px`,\n ...(bounds.ready\n ? { top: `${bounds.top}px`, height: `${bounds.height}px` }\n : { height: '0px', visibility: 'hidden' }),\n }, children: [_jsxs(\"div\", { className: styles.wideContent, children: [_jsx(SurfaceHeader, { expansion: expansion, props: props, source: source, read: read, mutation: mutation }), _jsx(SurfaceContent, { source: source, props: props, lifecycle: lifecycle, mutation: mutation, session: session, read: read, expansion: expansion, ordering: ordering, drag: drag, menus: menus, registration: registration, native: native, lifecycleState: lifecycleState })] }), _jsx(NativeDialogs, { props: props, native: native }), _jsx(RegistrationDialog, { props: props, registration: registration, registrationState: registrationState, mutation: mutation, read: read }), _jsx(LifecycleDialogs, { props: props, lifecycleState: lifecycleState, mutation: mutation, lifecycle: lifecycle, expansion: expansion, read: read, session: session }), _jsx(AccessConfirmation, { source: source, props: props })] }), dashboardRecord !== undefined && (_jsx(WorktreeDashboard, { manager: props.manager, record: dashboardRecord, onSaveInstructions: props.manager\n ? async (instructions, expectedInstructions) => {\n try {\n return await props.manager.updateWorktreeInstructions({\n workspaceId: dashboardRecord.workspaceId,\n worktreeId: dashboardRecord.worktreeId,\n instructions,\n expectedInstructions,\n });\n }\n finally {\n void read.refresh({\n preserveCurrent: true,\n scope: { kind: 'workspace', workspaceId: dashboardRecord.workspaceId },\n });\n }\n }\n : undefined, onSaveBaseline: props.manager &&\n typeof props.manager.updateWorktreeBaseBranch === 'function' &&\n dashboardManagedRecord !== undefined &&\n dashboardCanCreate\n ? async (baseBranch, expectedBaseBranch) => {\n try {\n return await props.manager.updateWorktreeBaseBranch({\n workspaceId: dashboardRecord.workspaceId,\n worktreeId: dashboardRecord.worktreeId,\n baseBranch,\n expectedBaseBranch,\n });\n }\n finally {\n void read.refresh({\n preserveCurrent: true,\n scope: { kind: 'workspace', workspaceId: dashboardRecord.workspaceId },\n });\n }\n }\n : undefined, branches: dashboardView?.branches ?? [], workspaceTitle: dashboardWorkspace?.title ?? '', sessions: source.sessions, sessionPresentations: source.sessionPresentations, sessionIds: dashboardSessionIds(dashboardRecord, source.sessions, dashboardView?.bindings ?? [], source.archivedSessionIds, isMainWorktreeId(dashboardRecord.worktreeId)\n ? ordering.orderedSessionIdsByAccount.get(`main:${dashboardRecord.workspaceId}`)\n : ordering.orderedSessionIdsByAccount.get(`worktree:${dashboardRecord.worktreeId}`), dashboardWorkspace === undefined\n ? []\n : workspaceSessionIds(source.workspaces, dashboardWorkspace.workspaceId, source.sessions.ids)), actionPending: mutation.actionPending, onOpenFile: typeof props.openResource === 'function' ? onOpenFile : undefined, onOpenSession: (sessionId) => session.openWorkspaceSession(dashboardRecord.workspaceId, sessionId), onCreateSession: dashboardCanCreate &&\n (isMainWorktreeId(dashboardRecord.worktreeId)\n ? props.createMainSession !== undefined\n : props.createSessionForWorktree !== undefined)\n ? () => {\n if (mutation.actionPending)\n return;\n closeDashboard();\n if (isMainWorktreeId(dashboardRecord.worktreeId)) {\n props.createMainSession?.(dashboardRecord.workspaceId);\n }\n else {\n void session.createSession({\n workspaceId: dashboardRecord.workspaceId,\n worktreeId: dashboardRecord.worktreeId,\n cwd: dashboardRecord.absolutePath,\n });\n }\n }\n : undefined, onCreateWorktree: dashboardCanCreate &&\n dashboardRecord.currentBranch !== null &&\n dashboardRecord.branch.length > 0 &&\n dashboardWorkspace !== undefined &&\n dashboardView !== undefined\n ? () => {\n if (mutation.actionPending)\n return;\n const branch = dashboardRecord.currentBranch ?? dashboardRecord.branch;\n registration.openWorktreeCreator(dashboardWorkspace, {\n baseBranch: branch,\n newBranch: createNumberedWorktreeName(branch, [\n ...dashboardView.branches.map((candidate) => candidate.name),\n ...dashboardView.worktrees.map((candidate) => candidate.branch),\n ]),\n });\n }\n : undefined, onArchiveWorktree: dashboardManagedRecord !== undefined &&\n dashboardManagedRecord.status === 'active' &&\n dashboardManagedRecord.health !== 'recovery-needed'\n ? () => {\n if (mutation.actionPending)\n return;\n lifecycleState.setWorktreeRemoval(dashboardManagedRecord);\n mutation.setActionError(undefined);\n }\n : undefined, t: t, onClose: closeDashboard, onOpenSidebar: source.currentSessionId === undefined ? undefined : props.openRightSidebar, isRightSidebarExpanded: props.isRightSidebarExpanded }, `${dashboardRecord.workspaceId}:${dashboardRecord.worktreeId}`))] }));\n}\n//# sourceMappingURL=WorktreeSurface.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { WorktreeHeroContext } from '../context/WorktreeHeroContext.js';\nimport { WorktreeSurface } from '../WorktreeSurface.js';\n/** Compose the independent Hero context and Worktree navigation overlays. */\nexport function WorktreeOverlay(props) {\n return (_jsxs(_Fragment, { children: [_jsx(WorktreeHeroContext, { ...props }), _jsx(WorktreeSurface, { ...props })] }));\n}\n//# sourceMappingURL=WorktreeOverlay.js.map","const none = (reason) => ({\n kind: 'none',\n reason,\n});\n/** Resolve the branch or active Worktree label for one current DSH Session. */\nexport function resolveWorktreeSessionContext(input) {\n const sessionId = input.currentSessionId;\n if (sessionId === undefined && input.currentWorkspaceId === undefined)\n return none('no-session');\n const workspace = sessionId === undefined\n ? input.workspaces.find(({ workspaceId }) => workspaceId === input.currentWorkspaceId)\n : input.workspaces.find(({ sessionIds }) => sessionIds.includes(sessionId));\n if (workspace === undefined)\n return none('unbound');\n const binding = sessionId === undefined\n ? undefined\n : input.bindings.find((candidate) => candidate.sessionId === sessionId);\n if (binding !== undefined) {\n if (binding.workspaceId !== workspace.workspaceId)\n return none('workspace-mismatch');\n if (binding.status === 'detached')\n return none('detached');\n const record = input.worktrees.find((candidate) => candidate.worktreeId === binding.worktreeId);\n if (record === undefined || record.workspaceId !== workspace.workspaceId) {\n return none(record === undefined ? 'stale' : 'workspace-mismatch');\n }\n if (record.diskCleanup === 'completed' || record.health === 'cleaned') {\n return none('detached');\n }\n if (record.health === 'repair' || record.health === 'recovery-needed') {\n return none('repair');\n }\n if (record.branch.length === 0)\n return none('not-ready');\n return {\n kind: 'worktree',\n workspaceId: workspace.workspaceId,\n worktreeId: record.worktreeId,\n label: record.branch,\n source: 'active-binding',\n };\n }\n const currentBranch = input.branches.find(({ isCurrent }) => isCurrent);\n if (currentBranch === undefined || currentBranch.name.length === 0)\n return none('not-ready');\n return {\n kind: 'main',\n workspaceId: workspace.workspaceId,\n label: currentBranch.name,\n source: 'current-branch',\n };\n}\n//# sourceMappingURL=worktree-context.js.map","import { currentSessionIdFromList } from '../session/session-selection.js';\nimport { resolveWorktreeSessionContext, } from './worktree-context.js';\nimport { deriveRecentWorkspaceId } from '../view/view-mode.js';\nimport { toWorktreeViewError, } from '../view/worktree-view.js';\nconst notReady = () => ({ kind: 'none', reason: 'not-ready' });\nfunction scheduledRefresh() {\n let resolve;\n const promise = new Promise((resolvePromise) => {\n resolve = resolvePromise;\n });\n return { promise, resolve };\n}\nfunction identityFrom(sessions, workspaces) {\n const sessionSnapshot = sessions.getSnapshot();\n const workspaceSnapshot = workspaces.getSnapshot();\n const sessionId = currentSessionIdFromList(sessionSnapshot);\n if (sessionId === undefined) {\n return {\n workspaceId: deriveRecentWorkspaceId({ items: workspaceSnapshot.items }, sessionSnapshot.byId),\n };\n }\n const workspace = workspaceSnapshot.items.find((candidate) => candidate.sessionIds.includes(sessionId));\n return { sessionId, workspaceId: workspace?.workspaceId };\n}\n/**\n * Build one browser-local current-Session projection shared by the header\n * consumer. Superseded requests may still finish on the transport, but their\n * results never become visible in the current snapshot.\n */\nexport function createWorktreeContextProjection(input) {\n const store = input.storeFactory({\n status: 'idle',\n value: notReady(),\n });\n let disposed = false;\n let generation = 0;\n let scheduled = false;\n let scheduleTicket = 0;\n let scheduledCompletion;\n let latestRefresh = Promise.resolve();\n let lastObservedIdentity;\n const sameIdentity = (left, right) => left?.sessionId === right.sessionId\n && left?.workspaceId === right.workspaceId;\n const workspaceTitleFor = (workspaceId) => input.workspaces.getSnapshot().items.find((candidate) => candidate.workspaceId === workspaceId)\n ?.title;\n const valueFrom = (identity, data) => resolveWorktreeSessionContext({\n currentSessionId: identity.sessionId,\n currentWorkspaceId: identity.workspaceId,\n workspaces: input.workspaces.getSnapshot().items,\n branches: data.branches,\n worktrees: data.worktrees,\n bindings: data.bindings,\n });\n const syncWorkspaceTitle = (identity) => {\n const current = store.getSnapshot();\n if (current.sessionId !== identity.sessionId ||\n current.workspaceId !== identity.workspaceId ||\n identity.workspaceId === undefined)\n return;\n const workspaceTitle = workspaceTitleFor(identity.workspaceId);\n if (current.workspaceTitle === workspaceTitle)\n return;\n store.set({ ...current, workspaceTitle });\n };\n const setPending = (identity) => {\n if (identity.workspaceId === undefined) {\n store.set({\n status: 'ready',\n value: resolveWorktreeSessionContext({\n currentSessionId: identity.sessionId,\n currentWorkspaceId: identity.workspaceId,\n workspaces: input.workspaces.getSnapshot().items,\n branches: [],\n worktrees: [],\n bindings: [],\n }),\n });\n return;\n }\n const current = store.getSnapshot();\n if (current.status === 'ready' && current.workspaceId !== identity.workspaceId) {\n // Keep the last valid context visible until the new Workspace facts arrive.\n return;\n }\n if (current.status === 'ready' && current.workspaceId === identity.workspaceId) {\n store.set({\n status: 'ready',\n ...(identity.sessionId === undefined ? {} : { sessionId: identity.sessionId }),\n workspaceId: identity.workspaceId,\n workspaceTitle: workspaceTitleFor(identity.workspaceId),\n value: current.value,\n });\n return;\n }\n store.set({\n status: 'loading',\n ...(identity.sessionId === undefined ? {} : { sessionId: identity.sessionId }),\n workspaceId: identity.workspaceId,\n workspaceTitle: workspaceTitleFor(identity.workspaceId),\n value: notReady(),\n });\n };\n const matchesCurrent = (request, requestGeneration) => {\n if (disposed || generation !== requestGeneration)\n return false;\n const current = identityFrom(input.sessions, input.workspaces);\n return current.sessionId === request.sessionId && current.workspaceId === request.workspaceId;\n };\n const runRefresh = async () => {\n if (disposed)\n return;\n const requestGeneration = ++generation;\n const identity = identityFrom(input.sessions, input.workspaces);\n lastObservedIdentity = identity;\n setPending(identity);\n if (identity.workspaceId === undefined)\n return;\n const request = {\n sessionId: identity.sessionId,\n workspaceId: identity.workspaceId,\n };\n try {\n const data = await input.viewReader.read(request.workspaceId);\n if (!matchesCurrent(request, requestGeneration))\n return;\n const workspace = input.workspaces.getSnapshot().items.find((candidate) => candidate.workspaceId === request.workspaceId);\n if ('error' in data.readiness) {\n store.set({\n status: 'error',\n ...(request.sessionId === undefined ? {} : { sessionId: request.sessionId }),\n workspaceId: request.workspaceId,\n workspaceTitle: workspace?.title,\n value: notReady(),\n error: data.readiness.error,\n });\n return;\n }\n store.set({\n status: 'ready',\n ...(request.sessionId === undefined ? {} : { sessionId: request.sessionId }),\n workspaceId: request.workspaceId,\n workspaceTitle: workspace?.title,\n value: valueFrom(request, data),\n });\n }\n catch (error) {\n if (!matchesCurrent(request, requestGeneration))\n return;\n store.set({\n status: 'error',\n ...(request.sessionId === undefined ? {} : { sessionId: request.sessionId }),\n workspaceId: request.workspaceId,\n workspaceTitle: input.workspaces.getSnapshot().items.find((candidate) => candidate.workspaceId === request.workspaceId)?.title,\n value: notReady(),\n error: toWorktreeViewError(error),\n });\n }\n };\n const cancelScheduledRefresh = () => {\n scheduleTicket += 1;\n scheduled = false;\n const completion = scheduledCompletion;\n scheduledCompletion = undefined;\n completion?.resolve();\n };\n const refresh = () => {\n cancelScheduledRefresh();\n lastObservedIdentity = identityFrom(input.sessions, input.workspaces);\n const completion = runRefresh();\n latestRefresh = completion;\n return completion;\n };\n const scheduleRefresh = () => {\n if (disposed)\n return;\n const identity = identityFrom(input.sessions, input.workspaces);\n if (sameIdentity(lastObservedIdentity, identity)) {\n syncWorkspaceTitle(identity);\n return;\n }\n lastObservedIdentity = identity;\n generation += 1;\n setPending(identity);\n if (scheduled)\n return;\n scheduled = true;\n const ticket = ++scheduleTicket;\n const completion = scheduledRefresh();\n scheduledCompletion = completion;\n latestRefresh = completion.promise;\n queueMicrotask(() => {\n if (disposed || ticket !== scheduleTicket) {\n completion.resolve();\n return;\n }\n scheduled = false;\n void runRefresh().finally(() => {\n if (scheduledCompletion === completion)\n scheduledCompletion = undefined;\n completion.resolve();\n });\n });\n };\n const waitForLatestRefresh = async (workspaceId) => {\n let observed;\n while (!disposed) {\n if (workspaceId !== undefined\n && identityFrom(input.sessions, input.workspaces).workspaceId !== workspaceId) {\n return;\n }\n const completion = latestRefresh;\n if (completion === observed)\n return;\n observed = completion;\n await completion;\n }\n };\n const unsubscribeSessions = input.sessions.subscribe(scheduleRefresh);\n const unsubscribeWorkspaces = input.workspaces.subscribe(scheduleRefresh);\n return {\n store,\n refresh,\n async invalidate(workspaceId) {\n if (disposed)\n return;\n const identity = identityFrom(input.sessions, input.workspaces);\n if (workspaceId !== undefined && workspaceId !== identity.workspaceId)\n return;\n if (identity.workspaceId === undefined)\n return;\n input.viewReader.invalidate(identity.workspaceId);\n await refresh();\n await waitForLatestRefresh(workspaceId ?? identity.workspaceId);\n },\n dispose() {\n if (disposed)\n return;\n disposed = true;\n generation += 1;\n cancelScheduledRefresh();\n unsubscribeSessions();\n unsubscribeWorkspaces();\n store.set({ status: 'idle', value: notReady() });\n },\n };\n}\n//# sourceMappingURL=worktree-context-store.js.map","import { defineStore } from '@deepseek-ai/dsh-client-store';\nimport { WORKTREE_VIEW_MODE_STORAGE_KEY, } from './view-mode.js';\n/** Create one root-scoped, browser-local view-mode store for the two slot entries. */\nexport function createWorktreeViewStore() {\n return defineStore({\n init: () => ({ viewMode: 'workspace-session' }),\n persist: WORKTREE_VIEW_MODE_STORAGE_KEY,\n actions: {\n setViewMode: (draft, mode) => {\n draft.viewMode = mode;\n },\n },\n });\n}\n//# sourceMappingURL=view-mode-store.js.map","import { projectVirtualWorkspaceMembership, } from '../view/view-mode.js';\nfunction normalizeBindings(bindings) {\n const bySession = new Map();\n for (const binding of bindings) {\n if (binding.workspaceId.length === 0 || binding.sessionId.length === 0)\n continue;\n bySession.set(binding.sessionId, binding);\n }\n return [...bySession.values()];\n}\nfunction sameBindings(left, right) {\n return left.length === right.length && left.every((binding, index) => {\n const other = right[index];\n return binding.workspaceId === other.workspaceId && binding.sessionId === other.sessionId;\n });\n}\n/**\n * Decorate DSH's read-only WorkspaceSource with a browser-local membership\n * projection. The source's native model is never written: the wrapper keeps\n * the current sidecar bindings in memory, reprojects every native snapshot,\n * and publishes only the projected view to subscribers.\n */\nexport function createVirtualWorkspaceMembership(list) {\n if (!Object.isExtensible(list)) {\n throw new Error('Workspace membership projection requires an extensible WorkspaceSource');\n }\n const nativeGetSnapshot = list.getSnapshot.bind(list);\n const nativeSubscribe = list.subscribe.bind(list);\n const originalGetSnapshot = Object.getOwnPropertyDescriptor(list, 'getSnapshot');\n const originalSubscribe = Object.getOwnPropertyDescriptor(list, 'subscribe');\n const listeners = new Set();\n let bindings = [];\n let nativeSnapshot = nativeGetSnapshot();\n let projectedSnapshot = projectVirtualWorkspaceMembership(nativeSnapshot, [], bindings);\n let disposed = false;\n const project = (nextNativeSnapshot, previousBindings, nextBindings) => projectVirtualWorkspaceMembership(nextNativeSnapshot, previousBindings, nextBindings);\n const refreshSnapshot = () => {\n const nextNativeSnapshot = nativeGetSnapshot();\n if (nextNativeSnapshot === nativeSnapshot)\n return false;\n nativeSnapshot = nextNativeSnapshot;\n const nextProjectedSnapshot = project(nextNativeSnapshot, bindings, bindings);\n const changed = nextProjectedSnapshot !== projectedSnapshot;\n projectedSnapshot = nextProjectedSnapshot;\n return changed;\n };\n const notify = () => {\n if (disposed)\n return;\n if (!refreshSnapshot())\n return;\n for (const listener of [...listeners])\n listener();\n };\n const getSnapshot = () => {\n if (disposed)\n return nativeGetSnapshot();\n refreshSnapshot();\n return projectedSnapshot;\n };\n const subscribe = (listener) => {\n if (disposed)\n return () => undefined;\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n Object.defineProperty(list, 'getSnapshot', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: getSnapshot,\n });\n Object.defineProperty(list, 'subscribe', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: subscribe,\n });\n const unsubscribeNative = nativeSubscribe(notify);\n const sync = (nextBindings) => {\n if (disposed)\n return;\n const normalized = normalizeBindings(nextBindings);\n if (sameBindings(bindings, normalized))\n return;\n const previousBindings = bindings;\n bindings = normalized;\n nativeSnapshot = nativeGetSnapshot();\n const previousProjectedSnapshot = projectedSnapshot;\n projectedSnapshot = project(nativeSnapshot, previousBindings, bindings);\n if (projectedSnapshot === previousProjectedSnapshot)\n return;\n for (const listener of [...listeners])\n listener();\n };\n const restoreMethod = (name, descriptor) => {\n if (descriptor === undefined) {\n delete list[name];\n return;\n }\n Object.defineProperty(list, name, descriptor);\n };\n return {\n ensure(binding) {\n if (disposed)\n return;\n if (bindings.some((current) => current.workspaceId === binding.workspaceId && current.sessionId === binding.sessionId)) {\n return;\n }\n sync([...bindings.filter((current) => current.sessionId !== binding.sessionId), binding]);\n },\n sync,\n removeSession(sessionId) {\n sync(bindings.filter((binding) => binding.sessionId !== sessionId));\n },\n dispose() {\n if (disposed)\n return;\n bindings = [];\n projectedSnapshot = nativeGetSnapshot();\n disposed = true;\n for (const listener of [...listeners])\n listener();\n unsubscribeNative();\n listeners.clear();\n restoreMethod('getSnapshot', originalGetSnapshot);\n restoreMethod('subscribe', originalSubscribe);\n },\n };\n}\n//# sourceMappingURL=virtual-workspace-membership.js.map","/** Rename a listed Session across DSH generations with different retention semantics. */\nexport async function renameWorktreeSession(sessions, sessionId, title) {\n const compatibleSessions = sessions;\n if (typeof compatibleSessions.using === 'function') {\n const result = await compatibleSessions.using(sessionId, { source: 'workspaceOperation' }, (reference) => reference.binding.session.rename(title));\n if (!result.ok)\n throw new Error(result.error.message);\n return;\n }\n // DSH versions before borrow-only bindings expose a live Session for a listed id.\n const session = compatibleSessions.binding(sessionId)?.session;\n if (session === undefined)\n throw new Error(`unknown session \"${sessionId}\"`);\n const result = await session.rename(title);\n if (!result.ok)\n throw new Error(result.error.message);\n}\n//# sourceMappingURL=session-rename.js.map","/** Use DSH-owned navigation in 1.7; keep the older Session-controller fallback. */\nexport function openWorktreeSession(uiWorkspace, sessions, sessionId) {\n const compatibleUiWorkspace = uiWorkspace;\n if (typeof compatibleUiWorkspace.openSession === 'function') {\n compatibleUiWorkspace.openSession(sessionId);\n return;\n }\n const legacyOpen = sessions.open;\n if (typeof legacyOpen === 'function') {\n legacyOpen(sessionId);\n return;\n }\n throw new Error('DSH Client does not expose a Session navigation method');\n}\n//# sourceMappingURL=session-navigation.js.map","const englishReason = 'This Worktree Session may need Git metadata and linked Worktree files outside the Session directory. '\n + 'Full Access disables filesystem confinement for this Session; approval prompts remain enabled, '\n + 'and network and process policy is unchanged. Continue?';\nconst chineseReason = '这个 Worktree Session 可能需要访问 Session 目录之外的 Git 元数据和关联 Worktree 文件。'\n + '完全访问会关闭此 Session 的文件系统沙箱,但会保留审批提示,网络和进程策略不变。'\n + '是否继续?';\nexport function worktreeFullAccessConfirmationMessage(input, locale = globalThis.navigator?.language) {\n const reason = locale?.toLocaleLowerCase().startsWith('zh') === true\n ? chineseReason\n : englishReason;\n return `${reason}\\n\\nWorktree: ${input.cwd}`;\n}\n/**\n * Coordinate async permission requests with the one in-page confirmation\n * rendered by the Worktree surface. Requests are serialized so concurrent\n * Worktree Session creations cannot replace one another's dialog.\n */\nexport function createWorktreeFullAccessConfirmationController() {\n let active;\n const queue = [];\n const listeners = new Set();\n let disposed = false;\n const notify = () => {\n for (const listener of listeners)\n listener();\n };\n const showNext = () => {\n if (active !== undefined)\n return;\n active = queue.shift();\n notify();\n };\n const controller = {\n getSnapshot: () => active?.input,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n request: (input) => {\n if (disposed)\n return Promise.resolve(false);\n return new Promise((resolve) => {\n queue.push({ input, resolve });\n showNext();\n });\n },\n resolve: (confirmed) => {\n if (active === undefined)\n return;\n const current = active;\n active = undefined;\n current.resolve(confirmed);\n showNext();\n },\n dispose: () => {\n if (disposed)\n return;\n disposed = true;\n active?.resolve(false);\n active = undefined;\n for (const pending of queue.splice(0))\n pending.resolve(false);\n notify();\n },\n };\n return controller;\n}\n//# sourceMappingURL=worktree-permission.js.map","const PLUGIN_ID = '@cerbur/clutch-dsh-worktree';\nconst STYLE_ID = `${PLUGIN_ID}/permission-icon`;\nconst WORKTREE_PERMISSION_LABEL = 'Worktree Full Access';\n/** DOM marker owned only by this plugin's permission icon decorator. */\nexport const WORKTREE_PERMISSION_ICON_ATTRIBUTE = 'data-clutch-dsh-worktree-permission-icon';\n// The native DSH menu has no icon extension point for host-configured values.\n// A branch glyph keeps the custom option visually distinct while preserving\n// the same 16px geometry as the built-in permission glyphs.\nconst ICON_SVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M13.0762 1.37207C14.0846 1.37228 14.9021 2.19077 14.9023 3.19922C14.9022 4.20772 14.0847 5.02518 13.0762 5.02539C12.2967 5.02539 11.6325 4.53691 11.3701 3.84961H4.35547C4.79397 4.26458 5.15861 4.7644 5.41699 5.33496L7.10645 9.06738C7.88526 10.7875 9.55104 11.9228 11.4189 12.0371C11.7085 11.4109 12.3411 10.9756 13.0762 10.9756C14.0843 10.9759 14.9023 11.7936 14.9023 12.8018C14.9023 13.81 14.0843 14.6277 13.0762 14.6279C12.2534 14.6279 11.5574 14.0832 11.3291 13.335C8.9868 13.1879 6.89981 11.7612 5.92285 9.60352L4.23242 5.87109C3.67503 4.64033 2.44878 3.84961 1.09766 3.84961V2.54883C1.10665 2.54883 1.11601 2.54975 1.125 2.5498L11.3701 2.54883C11.6326 1.86151 12.2969 1.37207 13.0762 1.37207ZM13.0762 12.2764C12.7858 12.2764 12.5508 12.5114 12.5508 12.8018C12.5508 13.0921 12.7858 13.3281 13.0762 13.3281C13.3664 13.3279 13.6025 13.092 13.6025 12.8018C13.6025 12.5115 13.3664 12.2766 13.0762 12.2764ZM13.0762 2.67285C12.7855 2.67285 12.55 2.90861 12.5498 3.19922C12.5499 3.48987 12.7855 3.72559 13.0762 3.72559C13.3667 3.72538 13.6024 3.48975 13.6025 3.19922C13.6023 2.90874 13.3666 2.67306 13.0762 2.67285Z\" fill=\"black\"/></svg>';\nfunction iconStyles() {\n const mask = `url(\"data:image/svg+xml,${encodeURIComponent(ICON_SVG)}\")`;\n return `\n[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]::before {\n content: \"\";\n display: inline-block;\n flex: 0 0 auto;\n width: 16px;\n height: 16px;\n background-color: var(--dsw-alias-label-tertiary, currentColor);\n -webkit-mask-image: ${mask};\n mask-image: ${mask};\n -webkit-mask-position: center;\n mask-position: center;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: contain;\n mask-size: contain;\n}\n[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}=\"trigger\"]::before {\n width: 14px;\n height: 14px;\n}\n@container (max-width: 460px) {\n [${WORKTREE_PERMISSION_ICON_ATTRIBUTE}=\"trigger\"] > span:first-of-type {\n display: none;\n }\n}\n`;\n}\nfunction normalizedText(element) {\n return (element.textContent ?? '').replace(/\\s+/g, ' ').trim();\n}\nfunction isWorktreeMenuItem(element) {\n return element.matches('button[role=\"menuitem\"]') &&\n normalizedText(element) === WORKTREE_PERMISSION_LABEL &&\n element.closest('[role=\"menu\"]') !== null;\n}\nfunction isWorktreeTrigger(element) {\n if (!element.matches('button[aria-label]'))\n return false;\n const label = element.getAttribute('aria-label') ?? '';\n return /^(?:access mode,\\s*current:\\s*|访问模式,当前:\\s*)worktree full access$/iu.test(label.trim());\n}\n/** Mark the native custom permission row and trigger for CSS decoration. */\nexport function decorateWorktreePermissionIcons(document) {\n for (const marked of document.querySelectorAll(`[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]`)) {\n const kind = marked.getAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);\n if ((kind === 'menu' && !isWorktreeMenuItem(marked)) ||\n (kind === 'trigger' && !isWorktreeTrigger(marked))) {\n marked.removeAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);\n }\n }\n for (const item of document.querySelectorAll('button[role=\"menuitem\"]')) {\n if (isWorktreeMenuItem(item)) {\n item.setAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE, 'menu');\n }\n }\n for (const button of document.querySelectorAll('button[aria-label]')) {\n if (isWorktreeTrigger(button)) {\n button.setAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE, 'trigger');\n }\n }\n}\n/** Install the Worktree permission icon and return a plugin-local disposer. */\nexport function installWorktreePermissionIcon(document) {\n for (const existing of document.querySelectorAll('style[data-plugin-css]')) {\n if (existing.getAttribute('data-plugin-css') === STYLE_ID)\n existing.remove();\n }\n const style = document.createElement('style');\n style.setAttribute('data-plugin', PLUGIN_ID);\n style.setAttribute('data-plugin-css', STYLE_ID);\n style.textContent = iconStyles();\n document.head.appendChild(style);\n let active = true;\n let queued = false;\n const scan = () => {\n if (!active || queued)\n return;\n queued = true;\n queueMicrotask(() => {\n queued = false;\n if (active)\n decorateWorktreePermissionIcons(document);\n });\n };\n decorateWorktreePermissionIcons(document);\n const observer = typeof MutationObserver === 'function'\n ? new MutationObserver(scan)\n : undefined;\n observer?.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['aria-label'],\n characterData: true,\n childList: true,\n subtree: true,\n });\n return () => {\n if (!active)\n return;\n active = false;\n observer?.disconnect();\n style.remove();\n for (const marked of document.querySelectorAll(`[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]`)) {\n marked.removeAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);\n }\n };\n}\n//# sourceMappingURL=worktree-permission-icon.js.map","function reconciliationSnapshot(snapshot) {\n if (typeof snapshot !== 'object' ||\n snapshot === null ||\n snapshot.phase === 'pending' ||\n (snapshot.phase !== undefined && snapshot.phase !== 'ready') ||\n !Array.isArray(snapshot.ids) ||\n typeof snapshot.byId !== 'object' ||\n snapshot.byId === null ||\n Array.isArray(snapshot.byId)) {\n return undefined;\n }\n for (const sessionId of snapshot.ids) {\n if (typeof sessionId !== 'string')\n return undefined;\n const summary = snapshot.byId[sessionId];\n if (summary !== undefined &&\n (typeof summary !== 'object' || summary === null || Array.isArray(summary))) {\n return undefined;\n }\n const parentId = summary?.parentId;\n const origin = summary?.origin;\n const blank = summary?.blank;\n if ((parentId !== undefined && typeof parentId !== 'string') ||\n (origin !== undefined && typeof origin !== 'string') ||\n (blank !== undefined && typeof blank !== 'boolean')) {\n return undefined;\n }\n }\n const candidates = snapshot.ids.flatMap((childSessionId) => {\n const summary = snapshot.byId[childSessionId];\n if (summary?.parentId === undefined ||\n summary.parentId === childSessionId ||\n summary.blank === true ||\n summary.origin === 'subagent' ||\n snapshot.byId[summary.parentId] === undefined) {\n return [];\n }\n return [{ childSessionId, sourceSessionId: summary.parentId }];\n });\n const candidateFacts = candidates\n .map(({ childSessionId, sourceSessionId }) => [childSessionId, sourceSessionId])\n .sort(([leftChild, leftSource], [rightChild, rightSource]) => leftChild < rightChild || (leftChild === rightChild && leftSource < rightSource)\n ? -1\n : leftChild === rightChild && leftSource === rightSource\n ? 0\n : 1);\n return {\n // Ordinary Session notifications must not invalidate persisted Fork candidates.\n signature: JSON.stringify([snapshot.phase ?? 'ready', candidateFacts]),\n candidates,\n };\n}\nfunction recoveryKey(sourceSessionId, childSessionId) {\n return `${sourceSessionId}\\u0000${childSessionId}`;\n}\n/**\n * Coordinate native Session fork with the plugin-owned Worktree relation.\n * Native Session creation always wins: plugin lookup/bind failures are kept as\n * recovery state and never turn an already-created child into a failed fork.\n */\nexport function createWorktreeSessionForkCoordinator(options) {\n let disposed = false;\n let revision = 0;\n let pending = new Map();\n let recoverySnapshot = {\n revision: 0,\n pending: [],\n affectedWorkspaceIds: [],\n };\n const subscribers = new Set();\n const boundChildren = new Set();\n const bindingInFlight = new Map();\n let reconciliationInFlight;\n let reconciliationAgain = false;\n let reconciliationForce = false;\n let lastSessionLineageSignature;\n const sourceGeneration = new Map();\n const worktreeGeneration = new Map();\n const keyOf = (workspaceId, worktreeId) => JSON.stringify([workspaceId, worktreeId]);\n const versionOf = (versions, key) => versions.get(key) ?? 0;\n const publish = (affectedWorkspaceIds = []) => {\n revision += 1;\n recoverySnapshot = {\n revision,\n pending: [...pending.values()],\n affectedWorkspaceIds: [...new Set(affectedWorkspaceIds)],\n };\n for (const subscriber of subscribers)\n subscriber();\n };\n const setRecovery = (sourceSessionId, childSessionId, error, target) => {\n if (disposed)\n return;\n const key = recoveryKey(sourceSessionId, childSessionId);\n pending = new Map(pending).set(key, {\n key,\n sourceSessionId,\n childSessionId,\n ...(target === undefined ? {} : { binding: target }),\n error,\n });\n publish(target === undefined ? [] : [target.workspaceId]);\n };\n const clearRecovery = (sourceSessionId, childSessionId) => {\n const key = recoveryKey(sourceSessionId, childSessionId);\n const current = pending.get(key);\n if (current === undefined)\n return { cleared: false };\n const next = new Map(pending);\n next.delete(key);\n pending = next;\n return { cleared: true, workspaceId: current.binding?.workspaceId };\n };\n const lookupBinding = async (sourceSessionId) => {\n try {\n const index = await options.findBindings([sourceSessionId]);\n return index.bySessionId.get(sourceSessionId) ?? { status: 'missing' };\n }\n catch (error) {\n return { status: 'error', error };\n }\n };\n const attemptBinding = async (sourceSessionId, childSessionId, providedLookup) => {\n if (disposed || boundChildren.has(childSessionId))\n return { bound: false };\n const initialSourceGen = versionOf(sourceGeneration, sourceSessionId);\n const lookup = providedLookup ?? (await lookupBinding(sourceSessionId));\n if (disposed)\n return { bound: false };\n if (versionOf(sourceGeneration, sourceSessionId) !== initialSourceGen) {\n return { bound: false };\n }\n if (lookup.status === 'error') {\n setRecovery(sourceSessionId, childSessionId, lookup.error);\n return { bound: false };\n }\n if (lookup.status === 'missing' || lookup.binding.status !== 'active') {\n const cleared = clearRecovery(sourceSessionId, childSessionId);\n if (cleared.cleared) {\n publish(cleared.workspaceId === undefined ? [] : [cleared.workspaceId]);\n }\n return { bound: false };\n }\n const target = lookup.binding;\n const wtKey = keyOf(target.workspaceId, target.worktreeId);\n const initialWtGen = versionOf(worktreeGeneration, wtKey);\n try {\n await options.bindSession({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n sessionId: childSessionId,\n });\n if (disposed)\n return { bound: false };\n if (versionOf(sourceGeneration, sourceSessionId) !== initialSourceGen ||\n versionOf(worktreeGeneration, wtKey) !== initialWtGen) {\n return { bound: false };\n }\n const childBinding = {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n sessionId: childSessionId,\n status: 'active',\n };\n boundChildren.add(childSessionId);\n const { workspaceId: previousWorkspaceId } = clearRecovery(sourceSessionId, childSessionId);\n options.onBound?.(childBinding);\n publish([target.workspaceId, ...(previousWorkspaceId === undefined ? [] : [previousWorkspaceId])]);\n return { bound: true };\n }\n catch (error) {\n if (disposed ||\n versionOf(sourceGeneration, sourceSessionId) !== initialSourceGen ||\n versionOf(worktreeGeneration, wtKey) !== initialWtGen) {\n return { bound: false };\n }\n setRecovery(sourceSessionId, childSessionId, error, target);\n return { bound: false };\n }\n };\n const bindChild = (sourceSessionId, childSessionId, providedLookup) => {\n if (disposed || boundChildren.has(childSessionId)) {\n return Promise.resolve({ bound: false });\n }\n const key = recoveryKey(sourceSessionId, childSessionId);\n const current = bindingInFlight.get(key);\n if (current !== undefined)\n return current;\n const promise = attemptBinding(sourceSessionId, childSessionId, providedLookup).finally(() => {\n if (bindingInFlight.get(key) === promise)\n bindingInFlight.delete(key);\n });\n bindingInFlight.set(key, promise);\n return promise;\n };\n const reconcileNow = async (force) => {\n if (disposed || options.sessions === undefined)\n return;\n const snapshot = options.sessions.getSnapshot();\n const normalized = reconciliationSnapshot(snapshot);\n if (normalized === undefined)\n return;\n if (!force && normalized.signature === lastSessionLineageSignature)\n return;\n lastSessionLineageSignature = normalized.signature;\n const candidates = normalized.candidates.filter(({ childSessionId }) => !boundChildren.has(childSessionId));\n if (candidates.length === 0)\n return;\n const sourceSessionIds = [...new Set(candidates.map(({ sourceSessionId }) => sourceSessionId))];\n const lookupGenerations = new Map(sourceSessionIds.map((id) => [id, versionOf(sourceGeneration, id)]));\n let index;\n try {\n index = await options.findBindings(sourceSessionIds);\n }\n catch (error) {\n const bySessionId = new Map();\n for (const sourceSessionId of sourceSessionIds) {\n bySessionId.set(sourceSessionId, { status: 'error', error });\n }\n index = { bySessionId };\n }\n if (disposed)\n return;\n await Promise.all(candidates.filter(({ sourceSessionId }) => lookupGenerations.get(sourceSessionId) === versionOf(sourceGeneration, sourceSessionId)).map(({ childSessionId, sourceSessionId }) => bindChild(sourceSessionId, childSessionId, index.bySessionId.get(sourceSessionId) ?? { status: 'missing' }).then(() => undefined)));\n };\n const reconcile = (input = {}) => {\n const force = input.force === true;\n if (reconciliationInFlight !== undefined) {\n reconciliationAgain = true;\n reconciliationForce ||= force;\n return reconciliationInFlight;\n }\n let nextForce = force;\n const run = async () => {\n do {\n const forceThisPass = nextForce || reconciliationForce;\n nextForce = false;\n reconciliationForce = false;\n reconciliationAgain = false;\n await reconcileNow(forceThisPass);\n } while (!disposed && reconciliationAgain);\n };\n const promise = run().finally(() => {\n if (reconciliationInFlight === promise)\n reconciliationInFlight = undefined;\n });\n reconciliationInFlight = promise;\n return promise;\n };\n return {\n recovery: {\n getSnapshot() {\n return recoverySnapshot;\n },\n subscribe(listener) {\n subscribers.add(listener);\n return () => subscribers.delete(listener);\n },\n },\n async fork(input) {\n const generation = versionOf(sourceGeneration, input.sessionId);\n const childSessionId = await options.fork(input);\n if (!disposed && generation === versionOf(sourceGeneration, input.sessionId)) {\n await bindChild(input.sessionId, childSessionId);\n }\n return childSessionId;\n },\n reconcile,\n async retry(key) {\n const item = pending.get(key);\n if (item === undefined || disposed)\n return false;\n const providedLookup = item.binding === undefined\n ? undefined\n : { status: 'found', binding: item.binding };\n return (await bindChild(item.sourceSessionId, item.childSessionId, providedLookup)).bound;\n },\n forgetWorktree(input) {\n if (disposed)\n return;\n const wtKey = keyOf(input.workspaceId, input.worktreeId);\n worktreeGeneration.set(wtKey, versionOf(worktreeGeneration, wtKey) + 1);\n for (const sid of input.sessionIds) {\n sourceGeneration.set(sid, versionOf(sourceGeneration, sid) + 1);\n }\n let changed = false;\n const next = new Map(pending);\n for (const [key, item] of pending.entries()) {\n const matchWorktree = item.binding?.workspaceId === input.workspaceId &&\n item.binding?.worktreeId === input.worktreeId;\n const matchSession = input.sessionIds.includes(item.sourceSessionId);\n if (matchWorktree || matchSession) {\n next.delete(key);\n changed = true;\n }\n }\n if (changed) {\n pending = next;\n publish([input.workspaceId]);\n }\n },\n dispose() {\n disposed = true;\n bindingInFlight.clear();\n subscribers.clear();\n },\n };\n}\n//# sourceMappingURL=worktree-session-fork.js.map","import { createElement } from 'react';\nimport { createSnapshotStore } from '@deepseek-ai/dsh-client-store';\nimport { WORKTREE_NS, en, zh } from './locales.js';\nimport { createWorktreeConnectionAdapter } from './worktree-connection.js';\nimport { WorktreeHeaderContext } from './context/WorktreeContext.js';\nimport { WorktreeModeAction } from './view/WorktreeModeAction.js';\nimport { switchViewMode } from './view/view-mode-dispatch.js';\nimport { IconDashboard } from './dashboard/dashboard-icon.js';\nimport { DashboardHeaderAction } from './dashboard/DashboardHeaderAction.js';\nimport { WorktreeOverlay } from './overlay/WorktreeOverlay.js';\nimport { createWorktreeContextProjection } from './context/worktree-context-store.js';\nimport { createWorktreeExpandStateStore } from './view/worktree-expand-state.js';\nimport { createWorktreeSessionOrderStore } from './session/worktree-session-order.js';\nimport { createWorktreeViewStore } from './view/view-mode-store.js';\nimport { createWorktreeViewReader } from './view/worktree-view-read.js';\nimport { createVirtualWorkspaceMembership, } from './session/virtual-workspace-membership.js';\nimport { createWorktreeSessionConnector, } from './session/worktree-session.js';\nimport { renameWorktreeSession } from './session/session-rename.js';\nimport { openWorktreeSession } from './session/session-navigation.js';\nimport { createWorktreeFullAccessConfirmationController, } from './permission/worktree-permission.js';\nimport { installWorktreePermissionIcon } from './permission/worktree-permission-icon.js';\nimport { createWorktreeSessionForkCoordinator, } from './session/worktree-session-fork.js';\nexport { WORKTREE_CONNECTION_CHANNEL, WORKTREE_CONNECTION_ENDPOINTS, WorktreeConnectionError, createWorktreeConnectionAdapter, } from './worktree-connection.js';\nfunction sidebarRightController(ctx) {\n // Optional sibling service: property access requires a declared Cordis injection.\n // Resolve at action time so late registration/disposal is reflected without\n // making the whole Worktree navigation depend on the rightbar plugin.\n return ctx.get('sidebarRight');\n}\nfunction forkRelatedSessionIds(snapshot) {\n if (typeof snapshot !== 'object' ||\n snapshot === null ||\n !Array.isArray(snapshot.ids) ||\n typeof snapshot.byId !== 'object' ||\n snapshot.byId === null ||\n Array.isArray(snapshot.byId)) {\n return undefined;\n }\n const related = new Set();\n for (const childSessionId of snapshot.ids) {\n if (typeof childSessionId !== 'string')\n return undefined;\n const summary = snapshot.byId[childSessionId];\n if (summary !== undefined &&\n (typeof summary !== 'object' || summary === null || Array.isArray(summary))) {\n return undefined;\n }\n const parentSessionId = summary?.parentId;\n if (parentSessionId === undefined ||\n parentSessionId === childSessionId ||\n summary?.blank === true ||\n summary?.origin === 'subagent' ||\n snapshot.byId[parentSessionId] === undefined) {\n continue;\n }\n related.add(childSessionId);\n related.add(parentSessionId);\n }\n return related;\n}\nfunction workspaceMembershipSignature(snapshot, sessions) {\n const relatedSessionIds = forkRelatedSessionIds(sessions);\n if (relatedSessionIds === undefined)\n return undefined;\n if (typeof snapshot !== 'object' || snapshot === null || !Array.isArray(snapshot.items)) {\n return undefined;\n }\n const facts = [];\n for (const workspace of snapshot.items) {\n if (typeof workspace !== 'object' ||\n workspace === null ||\n typeof workspace.workspaceId !== 'string' ||\n !Array.isArray(workspace.sessionIds) ||\n workspace.sessionIds.some((sessionId) => typeof sessionId !== 'string')) {\n return undefined;\n }\n facts.push([\n workspace.workspaceId,\n workspace.sessionIds.filter((sessionId) => relatedSessionIds.has(sessionId)).sort(),\n ]);\n }\n // This signature tracks membership, not presentation order.\n facts.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0));\n return JSON.stringify(facts);\n}\n/** Required DSH Client services; Connection is the sole Worktree wire dependency. */\nexport const inject = ['connection', 'locale', 'slots', 'sessions', 'workspaces', 'uiWorkspace'];\n/**\n * DSH Client entry. The adapter is composed once per plugin fiber and is disposed\n * with that fiber, so slot consumers share one manager and one request lifetime.\n */\nexport function apply(ctx) {\n const locale = ctx.locale;\n if (typeof document !== 'undefined') {\n ctx.effect(() => installWorktreePermissionIcon(document), 'clutch-dsh-worktree: permission icon cleanup');\n }\n ctx.effect(() => locale.register(WORKTREE_NS, { zh, en }), 'clutch-dsh-worktree: locale dictionaries');\n const manager = createWorktreeConnectionAdapter(ctx.connection.rpc);\n const viewReader = createWorktreeViewReader(manager);\n const fullAccessConfirmation = createWorktreeFullAccessConfirmationController();\n const permissionNotice = createSnapshotStore(undefined);\n const permissionManager = typeof document !== 'undefined' ? manager : undefined;\n const dashboardStore = createSnapshotStore(undefined);\n const reportPermissionNotice = (input, result) => {\n const visible = result.status === 'fallback-workspace-write' ||\n result.status === 'user-restricted' ||\n result.status === 'unverified';\n permissionNotice.set(visible ? { ...input, result } : undefined);\n };\n const sessions = ctx.sessions;\n const slots = ctx.slots;\n const virtualWorkspaceMembership = createVirtualWorkspaceMembership(ctx.workspaces.list);\n const contextProjection = createWorktreeContextProjection({\n sessions: ctx.sessions.list,\n workspaces: ctx.workspaces.list,\n viewReader,\n storeFactory: createSnapshotStore,\n });\n ctx.effect(() => () => manager.dispose(), 'clutch-dsh-worktree: connection cleanup');\n ctx.effect(() => () => viewReader.dispose(), 'clutch-dsh-worktree: view reader cleanup');\n ctx.effect(() => () => fullAccessConfirmation.dispose(), 'clutch-dsh-worktree: Full Access confirmation cleanup');\n ctx.effect(() => () => virtualWorkspaceMembership.dispose(), 'clutch-dsh-worktree: Workspace membership cleanup');\n ctx.effect(() => () => contextProjection.dispose(), 'clutch-dsh-worktree: Session context cleanup');\n void contextProjection.refresh();\n const viewStore = createWorktreeViewStore();\n const expandState = createWorktreeExpandStateStore(createSnapshotStore);\n const sessionOrder = createWorktreeSessionOrderStore(createSnapshotStore);\n ctx.effect(() => () => sessionOrder.dispose(), 'clutch-dsh-worktree: Session order cleanup');\n const ensureSessionWorkspace = (workspaceId, sessionId) => {\n virtualWorkspaceMembership.ensure({ workspaceId, sessionId });\n };\n const syncSessionWorkspaces = (bindings) => {\n virtualWorkspaceMembership.sync(bindings);\n };\n const forkableSessions = ctx.sessions;\n const nativeFork = forkableSessions.fork;\n const workspaceBindingReads = new Map();\n const readWorkspaceBindings = (workspaceId) => {\n const current = workspaceBindingReads.get(workspaceId);\n if (current !== undefined)\n return current;\n const promise = manager.listBindings({ workspaceId }).finally(() => {\n if (workspaceBindingReads.get(workspaceId) === promise) {\n workspaceBindingReads.delete(workspaceId);\n }\n });\n workspaceBindingReads.set(workspaceId, promise);\n return promise;\n };\n const findWorktreeSessionBindings = async (sessionIds) => {\n const requested = [...new Set(sessionIds)];\n const requestedSet = new Set(requested);\n const workspaces = ctx.workspaces.list.getSnapshot().items;\n const workspaceIds = [\n ...new Set(workspaces.map((workspace) => workspace.workspaceId)),\n ];\n const owners = new Map();\n for (const workspace of workspaces) {\n for (const sessionId of workspace.sessionIds) {\n if (!requestedSet.has(sessionId))\n continue;\n const workspaceOwners = owners.get(sessionId) ?? [];\n if (!workspaceOwners.includes(workspace.workspaceId)) {\n workspaceOwners.push(workspace.workspaceId);\n owners.set(sessionId, workspaceOwners);\n }\n }\n }\n const unknownScope = requested.some((sessionId) => (owners.get(sessionId)?.length ?? 0) === 0);\n const selectedWorkspaceIds = unknownScope\n ? workspaceIds\n : workspaceIds.filter((workspaceId) => requested.some((sessionId) => owners.get(sessionId)?.includes(workspaceId) === true));\n const results = await Promise.allSettled(selectedWorkspaceIds.map((workspaceId) => readWorkspaceBindings(workspaceId)));\n const resultByWorkspaceId = new Map(selectedWorkspaceIds.map((workspaceId, index) => [workspaceId, results[index]]));\n const bySessionId = new Map();\n for (const sessionId of requested) {\n const relevantWorkspaceIds = owners.get(sessionId) ?? selectedWorkspaceIds;\n let found;\n let failed;\n for (const workspaceId of relevantWorkspaceIds) {\n const result = resultByWorkspaceId.get(workspaceId);\n if (result === undefined)\n continue;\n if (result.status === 'rejected') {\n failed ??= result.reason;\n continue;\n }\n const binding = result.value.find((candidate) => candidate.sessionId === sessionId && candidate.status === 'active');\n if (binding !== undefined) {\n found = binding;\n break;\n }\n }\n bySessionId.set(sessionId, found === undefined\n ? failed === undefined ? { status: 'missing' } : { status: 'error', error: failed }\n : { status: 'found', binding: found });\n }\n return { bySessionId };\n };\n const forkCoordinator = typeof nativeFork !== 'function'\n ? undefined\n : createWorktreeSessionForkCoordinator({\n fork: (input) => nativeFork.call(ctx.sessions, input),\n findBindings: findWorktreeSessionBindings,\n bindSession: (input) => manager.bindSession(input),\n sessions: ctx.sessions.list,\n });\n if (forkCoordinator !== undefined) {\n forkableSessions.fork = (input) => forkCoordinator.fork(input);\n const reconcileForkChildren = () => {\n void forkCoordinator.reconcile();\n };\n let lastWorkspaceMembershipSignature = workspaceMembershipSignature(ctx.workspaces.list.getSnapshot(), ctx.sessions.list.getSnapshot());\n const reconcileForkChildrenForWorkspace = () => {\n const nextSignature = workspaceMembershipSignature(ctx.workspaces.list.getSnapshot(), ctx.sessions.list.getSnapshot());\n const changed = nextSignature !== undefined && nextSignature !== lastWorkspaceMembershipSignature;\n if (nextSignature !== undefined)\n lastWorkspaceMembershipSignature = nextSignature;\n void forkCoordinator.reconcile({ force: changed });\n };\n const unsubscribeSessionList = ctx.sessions.list.subscribe(reconcileForkChildren);\n const unsubscribeWorkspaceList = ctx.workspaces.list.subscribe(reconcileForkChildrenForWorkspace);\n ctx.effect(() => () => {\n unsubscribeSessionList();\n unsubscribeWorkspaceList();\n forkCoordinator.dispose();\n forkableSessions.fork = nativeFork;\n }, 'clutch-dsh-worktree: Session fork cleanup');\n void forkCoordinator.reconcile();\n }\n const worktreeSessionConnector = createWorktreeSessionConnector({\n manager,\n sessions: ctx.sessions.list,\n archivedSessionIds: () => ctx.workspaces.list.getSnapshot().archivedSessionIds,\n createSession: async (input) => String(await sessions.create(input)),\n ensureSessionWorkspace,\n permission: permissionManager,\n confirmFullAccess: permissionManager === undefined\n ? undefined\n : fullAccessConfirmation.request,\n onPermissionResult: reportPermissionNotice,\n openSession: (sessionId) => openWorktreeSession(ctx.uiWorkspace, ctx.sessions, sessionId),\n });\n ctx.effect(() => () => worktreeSessionConnector.dispose(), 'clutch-dsh-worktree: Worktree Session connector cleanup');\n const openDashboardForSession = (sessionId) => {\n switchViewMode('worktree');\n const contextSnapshot = contextProjection.store.getSnapshot();\n let targetWorkspaceId;\n let targetWorktreeId;\n if (contextSnapshot.sessionId === sessionId) {\n if (contextSnapshot.value.kind === 'worktree') {\n targetWorkspaceId = contextSnapshot.workspaceId;\n targetWorktreeId = contextSnapshot.value.worktreeId;\n }\n else if (contextSnapshot.value.kind === 'main') {\n targetWorkspaceId = contextSnapshot.workspaceId;\n targetWorktreeId = 'main';\n }\n }\n if (targetWorkspaceId === undefined) {\n const workspaces = ctx.workspaces.list.getSnapshot()?.items ?? [];\n const workspace = workspaces.find((candidate) => candidate.sessionIds?.includes(sessionId));\n if (workspace !== undefined) {\n targetWorkspaceId = workspace.workspaceId;\n targetWorktreeId = 'main';\n }\n }\n if (targetWorkspaceId !== undefined && targetWorktreeId !== undefined) {\n dashboardStore.set({\n workspaceId: targetWorkspaceId,\n worktreeId: targetWorktreeId,\n sessionId,\n });\n }\n };\n slots.inject('conversation.session.header.actions', () => slots.register({\n name: 'conversation.session.header.actions',\n id: 'clutch-dsh-worktree-context-header',\n order: -5,\n locale: WORKTREE_NS,\n inject: () => ({ hooks: { worktreeContext: contextProjection.store } }),\n }, WorktreeHeaderContext));\n slots.inject('conversation.session.header.utilities', () => slots.register({\n name: 'conversation.session.header.utilities',\n id: 'clutch-dsh-worktree-dashboard-header',\n order: -10,\n locale: WORKTREE_NS,\n inject: () => ({\n hooks: { worktreeContext: contextProjection.store },\n openDashboard: openDashboardForSession,\n }),\n }, DashboardHeaderAction));\n slots.inject('sidebar.footer.action', () => slots.register({\n name: 'sidebar.footer.action',\n id: 'clutch-dsh-worktree-mode-action',\n store: viewStore,\n locale: WORKTREE_NS,\n inject: () => ({ available: true }),\n }, WorktreeModeAction));\n slots.inject('shell.overlay', () => slots.register({\n name: 'shell.overlay',\n id: 'clutch-dsh-worktree-navigation',\n store: viewStore,\n locale: WORKTREE_NS,\n inject: () => ({\n available: true,\n openResource: (address, options) => {\n const sidebar = sidebarRightController(ctx);\n if (sidebar && typeof sidebar.openResource === 'function') {\n sidebar.openResource(address, options?.line !== undefined ? { params: { line: options.line } } : undefined);\n return true;\n }\n return false;\n },\n closeRightSidebar: () => {\n const sidebar = sidebarRightController(ctx);\n if (sidebar?.isExpanded?.() === true)\n sidebar.toggleExpanded?.();\n },\n openRightSidebar: () => {\n const sidebar = sidebarRightController(ctx);\n if (sidebar?.isExpanded?.() === false)\n sidebar.toggleExpanded?.();\n },\n isRightSidebarExpanded: () => {\n const sidebar = sidebarRightController(ctx);\n return sidebar?.isExpanded?.() === true;\n },\n expandState,\n sessionOrder,\n dashboardStore,\n hooks: { worktreeContext: contextProjection.store },\n manager,\n viewReader,\n permission: permissionManager,\n confirmFullAccess: permissionManager === undefined\n ? undefined\n : fullAccessConfirmation.request,\n fullAccessConfirmation: typeof document === 'undefined'\n ? undefined\n : fullAccessConfirmation,\n onPermissionResult: reportPermissionNotice,\n onPermissionNotice: reportPermissionNotice,\n permissionNotice,\n createWorkspace: async () => {\n const workspacePath = await ctx.uiWorkspace.pickDirectory();\n if (workspacePath !== null)\n await ctx.workspaces.create({ path: workspacePath });\n },\n createSessionForWorktree: (input) => worktreeSessionConnector.create(input),\n invalidateWorktreeContext: (workspaceId) => contextProjection.invalidate(workspaceId),\n createMainSession: (workspaceId) => {\n ctx.uiWorkspace.startSession(workspaceId);\n },\n renameWorkspace: async (workspaceId, title) => {\n await ctx.workspaces.rename(workspaceId, title);\n },\n deleteWorkspace: async (workspaceId) => {\n await ctx.workspaces.delete(workspaceId);\n },\n insertWorkspaceBefore: async (workspaceId, beforeWorkspaceId) => {\n await ctx.workspaces.insertBefore(workspaceId, beforeWorkspaceId);\n },\n insertSessionBefore: async (workspaceId, sessionId, beforeSessionId) => {\n await ctx.workspaces.insertSessionBefore(workspaceId, sessionId, beforeSessionId);\n },\n insertWorktreeBefore: (workspaceId, worktreeId, beforeWorktreeId) => manager.insertWorktreeBefore({\n workspaceId,\n worktreeId,\n beforeWorktreeId,\n }),\n renameSession: (sessionId, title) => renameWorktreeSession(ctx.sessions, sessionId, title),\n forkSession: (sessionId) => {\n if (forkableSessions.fork === undefined)\n return;\n void ctx.sessions.fork({\n sessionId: sessionId,\n increaseTitle: true,\n })\n .then((childId) => {\n openWorktreeSession(ctx.uiWorkspace, ctx.sessions, childId);\n })\n .catch(() => {\n // Fork failure leaves the current Session and Worktree projection unchanged.\n });\n },\n archiveSession: (sessionId) => ctx.workspaces.archiveSession(sessionId),\n ensureSessionWorkspace,\n syncSessionWorkspaces,\n forkRecovery: forkCoordinator?.recovery,\n retryForkSession: forkCoordinator === undefined\n ? undefined\n : async (key) => {\n await forkCoordinator.retry(key);\n },\n openSession: (sessionId) => openWorktreeSession(ctx.uiWorkspace, ctx.sessions, sessionId),\n onWorktreeForgotten: (input) => {\n forkCoordinator?.forgetWorktree(input);\n for (const sessionId of input.sessionIds) {\n virtualWorkspaceMembership.removeSession(sessionId);\n }\n const currentNotice = permissionNotice.getSnapshot();\n if (currentNotice !== undefined &&\n (currentNotice.worktreeId === input.worktreeId ||\n (currentNotice.sessionId !== undefined && input.sessionIds.includes(currentNotice.sessionId)))) {\n permissionNotice.set(undefined);\n }\n },\n }),\n }, WorktreeOverlay));\n if (typeof ctx.inject === 'function') {\n ctx.inject(['sessionLogDownload'], (innerCtx) => {\n const sessionLogDownload = innerCtx.get('sessionLogDownload');\n if (typeof sessionLogDownload?.registerMoreItem !== 'function')\n return;\n innerCtx.effect(() => {\n return sessionLogDownload.registerMoreItem({\n id: 'clutch-dsh-worktree-dashboard',\n label: () => innerCtx.locale.getLocale().active === 'zh'\n ? '前往 Dashboard'\n : 'Go to Dashboard',\n icon: createElement(IconDashboard, { size: 16 }),\n order: -1,\n onSelect: openDashboardForSession,\n });\n }, 'clutch-dsh-worktree: session header more item');\n });\n }\n}\n//# sourceMappingURL=entry.js.map"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
|