{
  "version": 3,
  "sources": ["../src/command.ts", "../src/git.ts", "../src/session.ts", "../src/status.ts", "../src/settings.ts", "../src/worktree.ts"],
  "sourcesContent": ["import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { ExtensionAPI, ExtensionCommandContext } from \"@earendil-works/pi-coding-agent\";\nimport {\n\taddWorktree,\n\tadministrativeHistoryOids,\n\tadministrativePruneCandidates,\n\tcurrentWorktreePath,\n\tdefaultWorktreePath,\n\tdurableRefExists,\n\tdurableRefsContaining,\n\tformatWorktree,\n\tlistWorktrees,\n\tlocalBranchExists,\n\tpathEntryExists,\n\tpathIdentity,\n\tpathsEqual,\n\tprunePreview,\n\tpruneWorktrees,\n\tremoveWorktree,\n\tresolveCommit,\n\tsameWorktreeIdentity,\n\tstripTerminalControls,\n\tsymbolicBranch,\n\tunresolvableSymlinkAncestor,\n\tvalidateBranch,\n\ttype WorktreeRecord,\n\tworktreeAdministrativeDirectory,\n\tworktreeForBranch,\n\tworktreeInventory,\n} from \"./git.js\";\nimport { switchToWorktree } from \"./session.js\";\nimport type { WorktreeSettingsRuntime } from \"./settings.js\";\nimport { loadWorktreeStatusCards, type WorktreeStatusCard } from \"./status.js\";\n\nconst ACTION_STATUS = \"Worktree status\";\nconst ACTION_ADD = \"Add worktree\";\nconst ACTION_SWITCH = \"Switch worktree\";\nconst ACTION_REMOVE = \"Remove worktree\";\nconst ACTION_PRUNE = \"Prune stale metadata\";\nconst ACTION_CONFIGURE_ROOT = \"Configure worktree root\";\nconst ACTIONS = {\n\tstatus: ACTION_STATUS,\n\tadd: ACTION_ADD,\n\tswitch: ACTION_SWITCH,\n\tremove: ACTION_REMOVE,\n\tprune: ACTION_PRUNE,\n\tconfigure: ACTION_CONFIGURE_ROOT,\n} as const;\n\ninterface WorktreeMenuState {\n\tstatusCards: WorktreeStatusCard[];\n}\n\ninterface WorktreeMenuOwner {\n\tsignal: AbortSignal;\n\tisCurrent(): boolean;\n}\n\ninterface AdministrativeHistoryRisk {\n\tlabel: string;\n\toids: string[];\n}\n\ninterface AddBaseProvenance {\n\tkind: \"existing-local-branch\" | \"current-branch\" | \"explicit-commit-ish\";\n\tlabel: string;\n\toid: string;\n}\n\nexport function registerWorktreeCommand(\n\tpi: ExtensionAPI,\n\tsettings: WorktreeSettingsRuntime,\n\tgetMenuOwner: () => WorktreeMenuOwner,\n): void {\n\tpi.registerCommand(\"worktree\", {\n\t\tdescription: \"Interactively manage Git worktrees and their default root\",\n\t\thandler: async (args, ctx) => {\n\t\t\tif (args.trim()) {\n\t\t\t\tsafeNotify(\n\t\t\t\t\tctx,\n\t\t\t\t\t\"/worktree does not accept arguments; run it without arguments to open the menu.\",\n\t\t\t\t\t\"warning\",\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!ctx.hasUI) {\n\t\t\t\tsafeNotify(ctx, \"/worktree requires TUI or RPC mode.\", \"error\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait ctx.waitForIdle();\n\t\t\t\tconst records = await listWorktrees(pi, ctx.cwd, ctx.signal);\n\t\t\t\tconst currentPath = await currentWorktreePath(pi, ctx.cwd, ctx.signal);\n\t\t\t\tconst root = settings.get();\n\t\t\t\tconst warning = root.warning ? \" \u2014 settings warning\" : \"\";\n\t\t\t\tconst owner = getMenuOwner();\n\t\t\t\tconst { defineMenu, runMenu } = await import(\"@narumitw/pi-tui-kit\");\n\t\t\t\tif (owner.signal.aborted || !owner.isCurrent()) return;\n\t\t\t\tconst runFlow = async (flow: () => Promise<void>) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait flow();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tsafeNotify(ctx, formatError(error), \"error\");\n\t\t\t\t\t}\n\t\t\t\t\treturn { kind: \"close\" } as const;\n\t\t\t\t};\n\t\t\t\tconst state: WorktreeMenuState = { statusCards: [] };\n\t\t\t\ttype Screen = \"main\" | \"status\";\n\t\t\t\ttype Action = keyof typeof ACTIONS;\n\t\t\t\tconst menu = defineMenu<WorktreeMenuState, Screen, Action, ExtensionCommandContext>({\n\t\t\t\t\tstart: \"main\",\n\t\t\t\t\tscreens: {\n\t\t\t\t\t\tmain: () => ({\n\t\t\t\t\t\t\tkind: \"actions\",\n\t\t\t\t\t\t\ttitle: \"Git worktrees\",\n\t\t\t\t\t\t\tlines: [\n\t\t\t\t\t\t\t\t`Registered: ${records.length}`,\n\t\t\t\t\t\t\t\t`Current: ${currentPath}`,\n\t\t\t\t\t\t\t\t`Worktree root: ${root.effectiveRoot} (${root.source})${warning}`,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\titems: Object.entries(ACTIONS).map(([id, label]) => ({\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tlabel,\n\t\t\t\t\t\t\t\taction: id as Action,\n\t\t\t\t\t\t\t\tbusyLabel: id === \"status\" ? \"Inspecting worktrees\u2026\" : undefined,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\thint: \"close\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tstatus: ({ state: currentState }) => ({\n\t\t\t\t\t\t\tkind: \"browse\",\n\t\t\t\t\t\t\ttitle: \"Worktree status\",\n\t\t\t\t\t\t\tlines: [\"Local Git snapshot; no fetch performed.\"],\n\t\t\t\t\t\t\titems: currentState.statusCards,\n\t\t\t\t\t\t\tviewportSize: \"adaptive\",\n\t\t\t\t\t\t\thint: \"back\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t\tactions: {\n\t\t\t\t\t\tstatus: async ({ signal }) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst statusRecords = await listWorktrees(pi, ctx.cwd, signal);\n\t\t\t\t\t\t\t\tstate.statusCards = await loadWorktreeStatusCards(\n\t\t\t\t\t\t\t\t\tpi,\n\t\t\t\t\t\t\t\t\tstatusRecords,\n\t\t\t\t\t\t\t\t\tcurrentPath,\n\t\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif (signal.aborted || !owner.isCurrent()) return { kind: \"close\" };\n\t\t\t\t\t\t\t\treturn { kind: \"to\", screen: \"status\" };\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tif (signal.aborted || !owner.isCurrent()) return { kind: \"close\" };\n\t\t\t\t\t\t\t\tsafeNotify(ctx, formatError(error), \"error\");\n\t\t\t\t\t\t\t\treturn { kind: \"stay\" };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tadd: async () => runFlow(() => addFlow(pi, ctx, records, root.effectiveRoot)),\n\t\t\t\t\t\tswitch: async ({ signal }) =>\n\t\t\t\t\t\t\trunFlow(() => switchFlow(pi, ctx, records, currentPath, signal)),\n\t\t\t\t\t\tremove: async ({ signal }) =>\n\t\t\t\t\t\t\trunFlow(() => removeFlow(pi, ctx, records, currentPath, signal)),\n\t\t\t\t\t\tprune: async () => runFlow(() => pruneFlow(pi, ctx, records)),\n\t\t\t\t\t\tconfigure: async () => runFlow(() => configureRootFlow(ctx, settings)),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tawait runMenu(ctx, menu, {\n\t\t\t\t\tgetState: () => state,\n\t\t\t\t\tsignal: owner.signal,\n\t\t\t\t\tisCurrent: owner.isCurrent,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tsafeNotify(ctx, formatError(error), \"error\");\n\t\t\t}\n\t\t},\n\t});\n}\n\nasync function configureRootFlow(\n\tctx: ExtensionCommandContext,\n\tsettings: WorktreeSettingsRuntime,\n): Promise<void> {\n\tconst current = await settings.reload();\n\tif (!current.canSave) {\n\t\tthrow new Error(\n\t\t\tcurrent.warning ?? `Fix ${settings.getPath()} before changing pi-worktree settings.`,\n\t\t);\n\t}\n\tconst requested = await ctx.ui.input(\n\t\t\"Worktree root (blank restores ~/.worktrees)\",\n\t\tstripTerminalControls(current.configuredRoot ?? current.effectiveRoot),\n\t);\n\tif (requested === undefined) return;\n\tconst configuredRoot = requested.trim() || undefined;\n\tconst updated = await settings.save(configuredRoot);\n\tsafeNotify(\n\t\tctx,\n\t\tconfiguredRoot === undefined\n\t\t\t? `Worktree root reset to ${updated.effectiveRoot}.`\n\t\t\t: `Worktree root saved as ${updated.effectiveRoot}.`,\n\t\t\"info\",\n\t);\n}\n\nasync function addFlow(\n\tpi: ExtensionAPI,\n\tctx: ExtensionCommandContext,\n\trecords: readonly WorktreeRecord[],\n\tworktreeRoot: string,\n): Promise<void> {\n\tconst main = records[0];\n\tif (!main) throw new Error(\"Git returned no registered worktrees.\");\n\tif (main.bare) {\n\t\tthrow new Error(\"The main worktree is bare; pi-worktree cannot derive a safe default path.\");\n\t}\n\tif (!existsSync(main.path)) {\n\t\tthrow new Error(\n\t\t\t`The registered main worktree path is stale: ${main.path}. Repair it with Git first.`,\n\t\t);\n\t}\n\n\tconst requestedBranch = await ctx.ui.input(\"Branch for the new worktree\", \"feat/my-change\");\n\tif (requestedBranch === undefined) return;\n\tconst branchInput = requestedBranch.trim();\n\tif (!branchInput) throw new Error(\"Branch name is required.\");\n\tconst branch = await validateBranch(pi, ctx.cwd, branchInput, ctx.signal);\n\tconst branchExists = await localBranchExists(pi, ctx.cwd, branch, ctx.signal);\n\tconst occupied = worktreeForBranch(records, branch);\n\tif (occupied) {\n\t\tthrow new Error(`Branch ${branch} is already checked out at ${occupied.path}.`);\n\t}\n\n\tlet startOid: string | undefined;\n\tlet provenance: AddBaseProvenance;\n\tif (branchExists) {\n\t\tprovenance = {\n\t\t\tkind: \"existing-local-branch\",\n\t\t\tlabel: branch,\n\t\t\toid: await resolveCommit(pi, ctx.cwd, `refs/heads/${branch}`, ctx.signal),\n\t\t};\n\t} else {\n\t\tconst defaultStart = await symbolicBranch(pi, ctx.cwd, ctx.signal);\n\t\tconst requestedStart = await ctx.ui.input(\n\t\t\tstripTerminalControls(\n\t\t\t\tdefaultStart\n\t\t\t\t\t? `Start point for ${branch} (blank uses ${defaultStart})`\n\t\t\t\t\t: `Start point for ${branch} (required because HEAD is detached)`,\n\t\t\t),\n\t\t\tstripTerminalControls(defaultStart ?? \"commit-ish\"),\n\t\t);\n\t\tif (requestedStart === undefined) return;\n\t\tconst explicitStart = requestedStart.trim();\n\t\tconst startLabel = explicitStart || defaultStart;\n\t\tif (!startLabel) throw new Error(\"An explicit start point is required from detached HEAD.\");\n\t\tstartOid = await resolveCommit(pi, ctx.cwd, startLabel, ctx.signal);\n\t\tprovenance = {\n\t\t\tkind: explicitStart ? \"explicit-commit-ish\" : \"current-branch\",\n\t\t\tlabel: startLabel,\n\t\t\toid: startOid,\n\t\t};\n\t}\n\n\tconst suggestedPath = defaultWorktreePath(main.path, branch, worktreeRoot);\n\tconst requestedPath = await ctx.ui.input(\n\t\tstripTerminalControls(`Worktree path (blank uses ${suggestedPath})`),\n\t\tstripTerminalControls(suggestedPath),\n\t);\n\tif (requestedPath === undefined) return;\n\tconst targetPath = pathIdentity(\n\t\trequestedPath.trim() ? resolve(ctx.cwd, requestedPath.trim()) : suggestedPath,\n\t);\n\tassertTargetFilesystemAvailable(targetPath);\n\tconst pathCollision = records.find((record) => pathsEqual(record.path, targetPath));\n\tif (pathCollision) {\n\t\tthrow new Error(`The target path is already registered as a worktree: ${pathCollision.path}.`);\n\t}\n\n\tconst summary = formatAddPreview(branch, branchExists, provenance, targetPath);\n\tif (!(await ctx.ui.confirm(\"Create Git worktree\", summary))) return;\n\n\tassertTargetFilesystemAvailable(targetPath);\n\tconst latestRecords = await listWorktrees(pi, ctx.cwd, ctx.signal);\n\tconst latestOccupied = worktreeForBranch(latestRecords, branch);\n\tif (latestOccupied) {\n\t\tthrow new Error(\n\t\t\t`Branch ${branch} is now checked out at ${latestOccupied.path}; select it again.`,\n\t\t);\n\t}\n\tconst latestPathCollision = latestRecords.find((record) => pathsEqual(record.path, targetPath));\n\tif (latestPathCollision) {\n\t\tthrow new Error(\n\t\t\t`The target path is now registered as a worktree: ${latestPathCollision.path}. Select it again.`,\n\t\t);\n\t}\n\tconst branchStillExists = await localBranchExists(pi, ctx.cwd, branch, ctx.signal);\n\tif (branchStillExists !== branchExists) {\n\t\tthrow new Error(`Branch ${branch} changed after confirmation; select it again.`);\n\t}\n\tif (branchExists) {\n\t\tconst latestOid = await resolveCommit(pi, ctx.cwd, `refs/heads/${branch}`, ctx.signal);\n\t\tif (latestOid !== provenance.oid) {\n\t\t\tthrow new Error(`Branch ${branch} moved after confirmation; select it again.`);\n\t\t}\n\t}\n\n\tassertTargetFilesystemAvailable(targetPath);\n\tawait addWorktree(pi, ctx.cwd, { path: targetPath, branch, startOid }, ctx.signal);\n\tlet created: WorktreeRecord;\n\ttry {\n\t\tconst updated = await listWorktrees(pi, ctx.cwd, ctx.signal);\n\t\tconst verified = updated.find((record) => pathsEqual(record.path, targetPath));\n\t\tif (!verified || verified.branch !== branch || verified.head !== provenance.oid) {\n\t\t\tthrow new Error(\n\t\t\t\t\"the expected path, branch, and approved HEAD were not present in Git porcelain output\",\n\t\t\t);\n\t\t}\n\t\tcreated = verified;\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Git add completed, so the worktree was retained at ${targetPath}, but verification failed: ${formatError(error)}. Inspect git worktree list before retrying.`,\n\t\t);\n\t}\n\tsafeNotify(ctx, `Created worktree ${targetPath} on branch ${branch}.`, \"info\");\n\n\tif (\n\t\tawait ctx.ui.confirm(\n\t\t\t\"Switch Pi workspace?\",\n\t\t\tstripTerminalControls(`Continue this conversation in ${targetPath}?`),\n\t\t)\n\t) {\n\t\tconst latest = await revalidateWorktreeIdentity(pi, ctx, created);\n\t\tif (latest.prunableReason !== undefined || !existsSync(latest.path)) {\n\t\t\tthrow new Error(\"The newly created worktree became unavailable; select it again.\");\n\t\t}\n\t\tawait switchToWorktree(ctx, latest.path);\n\t}\n}\n\nfunction formatAddPreview(\n\tbranch: string,\n\tbranchExists: boolean,\n\tprovenance: AddBaseProvenance,\n\ttargetPath: string,\n): string {\n\tconst base =\n\t\tprovenance.kind === \"existing-local-branch\"\n\t\t\t? `existing local branch ${quoteTerminalValue(provenance.label)}`\n\t\t\t: provenance.kind === \"current-branch\"\n\t\t\t\t? `current branch ${quoteTerminalValue(provenance.label)}`\n\t\t\t\t: `explicit commit-ish ${quoteTerminalValue(provenance.label)}`;\n\treturn [\n\t\t`Branch: ${quoteTerminalValue(branch)} (${branchExists ? \"existing\" : \"new\"} local branch)`,\n\t\t`Base: ${base}`,\n\t\t`Base commit: ${provenance.oid}`,\n\t\t`Path: ${quoteTerminalValue(targetPath)}`,\n\t].join(\"; \");\n}\n\nfunction quoteTerminalValue(value: string): string {\n\tlet quoted = \"\";\n\tfor (const character of value) {\n\t\tconst code = character.codePointAt(0) ?? 0;\n\t\tif (code <= 0x1f || (code >= 0x7f && code <= 0x9f)) {\n\t\t\tquoted += `\\\\u${code.toString(16).padStart(4, \"0\")}`;\n\t\t} else if (character === \"\\\\\" || character === '\"') {\n\t\t\tquoted += `\\\\${character}`;\n\t\t} else {\n\t\t\tquoted += character;\n\t\t}\n\t}\n\treturn `\"${quoted}\"`;\n}\n\nfunction assertTargetFilesystemAvailable(targetPath: string): void {\n\tif (pathEntryExists(targetPath)) {\n\t\tthrow new Error(`The target path already exists: ${targetPath}.`);\n\t}\n\tconst unsafeAncestor = unresolvableSymlinkAncestor(targetPath);\n\tif (unsafeAncestor) {\n\t\tthrow new Error(\n\t\t\t`The target path has an unresolvable symbolic-link ancestor: ${unsafeAncestor}.`,\n\t\t);\n\t}\n}\n\nasync function switchFlow(\n\tpi: ExtensionAPI,\n\tctx: ExtensionCommandContext,\n\trecords: readonly WorktreeRecord[],\n\tcurrentPath: string,\n\tsignal?: AbortSignal,\n): Promise<void> {\n\tconst candidates = records.filter(\n\t\t(record) =>\n\t\t\t!record.bare &&\n\t\t\trecord.prunableReason === undefined &&\n\t\t\texistsSync(record.path) &&\n\t\t\t!pathsEqual(record.path, currentPath),\n\t);\n\tconst selected = await selectWorktree(ctx, \"Switch to worktree\", candidates, currentPath, signal);\n\tif (!selected) return;\n\tconst latest = await revalidateWorktreeIdentity(pi, ctx, selected);\n\tif (\n\t\tlatest.bare ||\n\t\tlatest.prunableReason !== undefined ||\n\t\t!existsSync(latest.path) ||\n\t\tpathsEqual(latest.path, currentPath)\n\t) {\n\t\tthrow new Error(\"The selected worktree changed state; select it again.\");\n\t}\n\tawait switchToWorktree(ctx, latest.path);\n}\n\nasync function removeFlow(\n\tpi: ExtensionAPI,\n\tctx: ExtensionCommandContext,\n\trecords: readonly WorktreeRecord[],\n\tcurrentPath: string,\n\tsignal?: AbortSignal,\n): Promise<void> {\n\tconst candidates = records.filter(\n\t\t(record) => !record.isMain && !record.bare && !pathsEqual(record.path, currentPath),\n\t);\n\tconst selected = await selectWorktree(\n\t\tctx,\n\t\t\"Remove linked worktree\",\n\t\tcandidates,\n\t\tcurrentPath,\n\t\tsignal,\n\t);\n\tif (!selected) return;\n\tif (selected.lockedReason !== undefined) {\n\t\tthrow new Error(\n\t\t\t`Worktree is locked${selected.lockedReason ? `: ${selected.lockedReason}` : \".\"} Unlock it explicitly with Git before removal.`,\n\t\t);\n\t}\n\tif (selected.prunableReason !== undefined || !existsSync(selected.path)) {\n\t\tthrow new Error(\"The selected worktree path is stale. Use prune instead of remove.\");\n\t}\n\n\tconst inventory = classifyRemovalInventory(\n\t\tawait worktreeInventory(pi, selected.path, ctx.signal),\n\t);\n\tif (inventory.protected.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Removal refused because ${selected.path} contains tracked, untracked, index-flagged, or submodule data:\\n${inventory.protected.join(\"\\n\")}`,\n\t\t);\n\t}\n\tawait assertDetachedHeadIsDurable(pi, ctx, selected);\n\tconst administrativePath = await worktreeAdministrativeDirectory(pi, selected.path, ctx.signal);\n\tconst approvedHistoryRisks = historyRisks(\n\t\tselected.path,\n\t\tawait unreachableAdministrativeHistoryOids(pi, ctx, administrativePath),\n\t);\n\tconst recoveryWarning = formatAdministrativeRecoveryWarning(approvedHistoryRisks);\n\tconst ignoredWarning = formatIgnoredDataWarning(inventory.ignored);\n\tconst removalWarning =\n\t\tignoredWarning && recoveryWarning\n\t\t\t? `${ignoredWarning}\\n${recoveryWarning.trimStart()}`\n\t\t\t: `${ignoredWarning}${recoveryWarning}`;\n\tconst confirmationTitle =\n\t\tinventory.ignored.length > 0\n\t\t\t? recoveryWarning\n\t\t\t\t? \"Remove worktree and discard local/recovery data\"\n\t\t\t\t: \"Remove worktree and delete ignored files\"\n\t\t\t: recoveryWarning\n\t\t\t\t? \"Remove worktree and discard recovery history\"\n\t\t\t\t: \"Remove Git worktree\";\n\tif (\n\t\t!(await ctx.ui.confirm(\n\t\t\tconfirmationTitle,\n\t\t\t`Delete the worktree directory ${stripTerminalControls(selected.path)}? The branch will be preserved.${removalWarning}`,\n\t\t))\n\t) {\n\t\treturn;\n\t}\n\n\tawait assertAdministrativeHistoryUnchanged(\n\t\tpi,\n\t\tctx,\n\t\tselected.path,\n\t\tadministrativePath,\n\t\tapprovedHistoryRisks,\n\t);\n\n\tconst beforeRemoval = await listWorktrees(pi, ctx.cwd, ctx.signal);\n\tconst latest = beforeRemoval.find((record) => pathsEqual(record.path, selected.path));\n\tif (!latest) throw new Error(`Worktree ${selected.path} is no longer registered.`);\n\tif (!sameWorktreeIdentity(selected, latest)) {\n\t\tthrow new Error(`Worktree ${selected.path} changed identity; select it again.`);\n\t}\n\tif (latest.isMain || latest.lockedReason !== undefined || latest.prunableReason !== undefined) {\n\t\tthrow new Error(\n\t\t\t`Worktree ${selected.path} changed state after confirmation; removal was refused.`,\n\t\t);\n\t}\n\tconst latestInventory = classifyRemovalInventory(\n\t\tawait worktreeInventory(pi, latest.path, ctx.signal),\n\t);\n\tif (latestInventory.protected.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Removal refused because new protected local data appeared after confirmation:\\n${latestInventory.protected.join(\"\\n\")}`,\n\t\t);\n\t}\n\tif (!sameInventory(inventory.ignored, latestInventory.ignored)) {\n\t\tthrow new Error(\n\t\t\t`Removal refused because ignored data changed after confirmation:\\n${latestInventory.ignored.join(\"\\n\") || \"(none)\"}`,\n\t\t);\n\t}\n\tawait assertDetachedHeadIsDurable(pi, ctx, latest);\n\tawait assertAdministrativeHistoryUnchanged(\n\t\tpi,\n\t\tctx,\n\t\tlatest.path,\n\t\tadministrativePath,\n\t\tapprovedHistoryRisks,\n\t);\n\tawait removeWorktree(pi, ctx.cwd, latest.path, ctx.signal);\n\tconst updated = await listWorktrees(pi, ctx.cwd, ctx.signal);\n\tif (updated.some((record) => pathsEqual(record.path, selected.path))) {\n\t\tthrow new Error(`Git remove returned success, but ${selected.path} is still registered.`);\n\t}\n\tsafeNotify(ctx, `Removed worktree ${selected.path}. Its branch was preserved.`, \"info\");\n}\n\nasync function pruneFlow(\n\tpi: ExtensionAPI,\n\tctx: ExtensionCommandContext,\n\trecords: readonly WorktreeRecord[],\n): Promise<void> {\n\tfor (const record of records.filter(\n\t\t(candidate) => candidate.prunableReason !== undefined && candidate.detached,\n\t)) {\n\t\tawait assertDetachedHeadIsDurable(pi, ctx, record);\n\t}\n\tconst preview = await prunePreview(pi, ctx.cwd, ctx.signal);\n\tif (!preview) {\n\t\tctx.ui.notify(\"Git found no stale worktree metadata to prune.\", \"info\");\n\t\treturn;\n\t}\n\tconst approvedHistoryRisks = await inspectAdministrativePruneCandidates(pi, ctx);\n\tconst safePreview = stripTerminalControls(preview);\n\tconst recoveryWarning = formatAdministrativeRecoveryWarning(approvedHistoryRisks);\n\tctx.ui.notify(`git worktree prune --dry-run --verbose\\n${safePreview}`, \"warning\");\n\tif (\n\t\t!(await ctx.ui.confirm(\n\t\t\trecoveryWarning\n\t\t\t\t? \"Prune metadata and discard recovery history\"\n\t\t\t\t: \"Prune stale worktree metadata\",\n\t\t\tstripTerminalControls(`${safePreview}${recoveryWarning}`),\n\t\t))\n\t) {\n\t\treturn;\n\t}\n\tconst latest = await listWorktrees(pi, ctx.cwd, ctx.signal);\n\tfor (const record of latest.filter(\n\t\t(candidate) => candidate.prunableReason !== undefined && candidate.detached,\n\t)) {\n\t\tawait assertDetachedHeadIsDurable(pi, ctx, record);\n\t}\n\tconst beforePreviewHistoryRisks = await inspectAdministrativePruneCandidates(pi, ctx);\n\tif (!sameAdministrativeHistoryRisks(approvedHistoryRisks, beforePreviewHistoryRisks)) {\n\t\tthrow new Error(\"Stale worktree metadata changed after confirmation; run prune again.\");\n\t}\n\tconst latestPreview = await prunePreview(pi, ctx.cwd, ctx.signal);\n\tconst finalHistoryRisks = await inspectAdministrativePruneCandidates(pi, ctx);\n\tif (\n\t\tlatestPreview !== preview ||\n\t\t!sameAdministrativeHistoryRisks(approvedHistoryRisks, finalHistoryRisks)\n\t) {\n\t\tthrow new Error(\"Stale worktree metadata changed after confirmation; run prune again.\");\n\t}\n\tconst output = await pruneWorktrees(pi, ctx.cwd, ctx.signal);\n\tsafeNotify(\n\t\tctx,\n\t\toutput ? `Pruned stale worktree metadata:\\n${output}` : \"Pruned stale worktree metadata.\",\n\t\t\"info\",\n\t);\n}\n\nasync function assertAdministrativeHistoryUnchanged(\n\tpi: ExtensionAPI,\n\tctx: ExtensionCommandContext,\n\tselectedPath: string,\n\tapprovedAdministrativePath: string,\n\tapprovedHistoryRisks: readonly AdministrativeHistoryRisk[],\n): Promise<void> {\n\tconst latestAdministrativePath = await worktreeAdministrativeDirectory(\n\t\tpi,\n\t\tselectedPath,\n\t\tctx.signal,\n\t);\n\tconst latestHistoryRisks = historyRisks(\n\t\tselectedPath,\n\t\tawait unreachableAdministrativeHistoryOids(pi, ctx, latestAdministrativePath),\n\t);\n\tif (\n\t\t!pathsEqual(approvedAdministrativePath, latestAdministrativePath) ||\n\t\t!sameAdministrativeHistoryRisks(approvedHistoryRisks, latestHistoryRisks)\n\t) {\n\t\tthrow new Error(\n\t\t\t`Worktree ${selectedPath} administrative recovery history changed after confirmation; select it again.`,\n\t\t);\n\t}\n}\n\nasync function inspectAdministrativePruneCandidates(\n\tpi: ExtensionAPI,\n\tctx: ExtensionCommandContext,\n): Promise<AdministrativeHistoryRisk[]> {\n\tconst risks: AdministrativeHistoryRisk[] = [];\n\tfor (const candidate of await administrativePruneCandidates(pi, ctx.cwd, ctx.signal)) {\n\t\tif (candidate.indexDirty) {\n\t\t\tthrow new Error(\n\t\t\t\t`Prune refused because administrative worktree ${candidate.id} contains staged-only index changes.`,\n\t\t\t);\n\t\t}\n\t\tif (candidate.head) {\n\t\t\tconst refs = await durableRefsContaining(pi, ctx.cwd, candidate.head, ctx.signal);\n\t\t\tif (refs.length === 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Prune refused because administrative worktree ${candidate.id} has detached HEAD ${candidate.head}, which is not reachable from a durable ref.`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (\n\t\t\t!candidate.branchRef ||\n\t\t\t!(await durableRefExists(pi, ctx.cwd, candidate.branchRef, ctx.signal))\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Prune refused because administrative worktree ${candidate.id} does not resolve to a durable ref.`,\n\t\t\t);\n\t\t}\n\t\trisks.push(\n\t\t\t...historyRisks(\n\t\t\t\tcandidate.id,\n\t\t\t\tawait unreachableAdministrativeHistoryOids(pi, ctx, candidate.administrativePath),\n\t\t\t),\n\t\t);\n\t}\n\treturn normalizeAdministrativeHistoryRisks(risks);\n}\n\nasync function unreachableAdministrativeHistoryOids(\n\tpi: ExtensionAPI,\n\tctx: ExtensionCommandContext,\n\tadministrativePath: string,\n): Promise<string[]> {\n\tconst unreachable: string[] = [];\n\tfor (const oid of await administrativeHistoryOids(pi, ctx.cwd, administrativePath, ctx.signal)) {\n\t\tconst refs = await durableRefsContaining(pi, ctx.cwd, oid, ctx.signal);\n\t\tif (refs.length === 0) unreachable.push(oid);\n\t}\n\treturn [...new Set(unreachable)].sort();\n}\n\nfunction historyRisks(label: string, oids: string[]): AdministrativeHistoryRisk[] {\n\treturn oids.length > 0 ? [{ label, oids }] : [];\n}\n\nfunction normalizeAdministrativeHistoryRisks(\n\trisks: readonly AdministrativeHistoryRisk[],\n): AdministrativeHistoryRisk[] {\n\treturn risks\n\t\t.map((risk) => ({ label: risk.label, oids: [...new Set(risk.oids)].sort() }))\n\t\t.filter((risk) => risk.oids.length > 0)\n\t\t.sort((left, right) => left.label.localeCompare(right.label));\n}\n\nfunction sameAdministrativeHistoryRisks(\n\tleft: readonly AdministrativeHistoryRisk[],\n\tright: readonly AdministrativeHistoryRisk[],\n): boolean {\n\treturn (\n\t\tJSON.stringify(normalizeAdministrativeHistoryRisks(left)) ===\n\t\tJSON.stringify(normalizeAdministrativeHistoryRisks(right))\n\t);\n}\n\nfunction formatAdministrativeRecoveryWarning(risks: readonly AdministrativeHistoryRisk[]): string {\n\tif (risks.length === 0) return \"\";\n\tconst entries = risks\n\t\t.map(\n\t\t\t(risk) =>\n\t\t\t\t`${stripTerminalControls(risk.label)}: ${risk.oids.map(stripTerminalControls).join(\", \")}`,\n\t\t)\n\t\t.join(\"; \");\n\treturn ` Administrative recovery warning: these commits are not reachable from a branch, tag, or remote ref: ${entries}. Discarding their recovery pointers means they may later be garbage-collected.`;\n}\n\ninterface RemovalInventory {\n\tignored: string[];\n\tprotected: string[];\n}\n\nfunction classifyRemovalInventory(lines: readonly string[]): RemovalInventory {\n\tconst ignored: string[] = [];\n\tconst protectedData: string[] = [];\n\tfor (const line of lines) {\n\t\t(line.startsWith(\"!! \") ? ignored : protectedData).push(line);\n\t}\n\treturn {\n\t\tignored: normalizeInventory(ignored),\n\t\tprotected: normalizeInventory(protectedData),\n\t};\n}\n\nfunction normalizeInventory(lines: readonly string[]): string[] {\n\treturn [...new Set(lines)].sort();\n}\n\nfunction sameInventory(left: readonly string[], right: readonly string[]): boolean {\n\treturn JSON.stringify(normalizeInventory(left)) === JSON.stringify(normalizeInventory(right));\n}\n\nfunction formatIgnoredDataWarning(ignored: readonly string[]): string {\n\tif (ignored.length === 0) return \"\";\n\treturn ` Ignored files and directories that will be deleted:\\n${ignored.map(stripTerminalControls).join(\"\\n\")}`;\n}\n\nasync function assertDetachedHeadIsDurable(\n\tpi: ExtensionAPI,\n\tctx: ExtensionCommandContext,\n\trecord: WorktreeRecord,\n): Promise<void> {\n\tif (!record.detached) return;\n\tif (!record.head)\n\t\tthrow new Error(`Detached worktree ${record.path} has no HEAD object; refusing.`);\n\tconst refs = await durableRefsContaining(pi, ctx.cwd, record.head, ctx.signal);\n\tif (refs.length === 0) {\n\t\tthrow new Error(\n\t\t\t`Detached HEAD ${record.head} at ${record.path} is not reachable from a local branch, tag, or remote ref. Preserve it before continuing.`,\n\t\t);\n\t}\n}\n\nasync function revalidateWorktreeIdentity(\n\tpi: ExtensionAPI,\n\tctx: ExtensionCommandContext,\n\tselected: WorktreeRecord,\n): Promise<WorktreeRecord> {\n\tconst latest = (await listWorktrees(pi, ctx.cwd, ctx.signal)).find((record) =>\n\t\tpathsEqual(record.path, selected.path),\n\t);\n\tif (!latest) throw new Error(`Worktree ${selected.path} is no longer registered.`);\n\tif (!sameWorktreeIdentity(selected, latest)) {\n\t\tthrow new Error(`Worktree ${selected.path} changed identity; select it again.`);\n\t}\n\treturn latest;\n}\n\nasync function selectWorktree(\n\tctx: ExtensionCommandContext,\n\ttitle: string,\n\trecords: readonly WorktreeRecord[],\n\tcurrentPath: string,\n\tsignal?: AbortSignal,\n): Promise<WorktreeRecord | undefined> {\n\tif (records.length === 0) {\n\t\tctx.ui.notify(\"No eligible worktrees are available for this action.\", \"info\");\n\t\treturn undefined;\n\t}\n\tconst { defineMenu, runMenu } = await import(\"@narumitw/pi-tui-kit\");\n\tif (signal?.aborted || ctx.signal?.aborted) return undefined;\n\tlet selected: WorktreeRecord | undefined;\n\tconst menu = defineMenu<undefined, \"worktrees\", \"choose\", ExtensionCommandContext>({\n\t\tstart: \"worktrees\",\n\t\tscreens: {\n\t\t\tworktrees: () => ({\n\t\t\t\tkind: \"choice\",\n\t\t\t\ttitle,\n\t\t\t\tenableSearch: true,\n\t\t\t\titems: records.map((record, index) => ({\n\t\t\t\t\tid: record.path,\n\t\t\t\t\tlabel: `${index + 1}. ${formatWorktree(record, currentPath)}`,\n\t\t\t\t\tsearchText: [record.path, record.branch, record.head].filter(Boolean).join(\" \"),\n\t\t\t\t})),\n\t\t\t\taction: \"choose\",\n\t\t\t\thint: \"close\",\n\t\t\t}),\n\t\t},\n\t\tactions: {\n\t\t\tchoose: async ({ itemId }) => {\n\t\t\t\tselected = records.find((record) => record.path === itemId);\n\t\t\t\treturn selected ? { kind: \"close\" } : { kind: \"rejected\" };\n\t\t\t},\n\t\t},\n\t});\n\tawait runMenu(ctx, menu, {\n\t\tgetState: () => undefined,\n\t\tsignal,\n\t\tisCurrent: () => !signal?.aborted,\n\t});\n\treturn selected;\n}\n\nfunction safeNotify(\n\tctx: ExtensionCommandContext,\n\tmessage: string,\n\tlevel: \"info\" | \"warning\" | \"error\",\n): void {\n\ttry {\n\t\tctx.ui.notify(stripTerminalControls(message), level);\n\t} catch {\n\t\tconsole.error(message);\n\t}\n}\n\nfunction formatError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n", "import { spawn } from \"node:child_process\";\nimport { existsSync, lstatSync, readdirSync, readFileSync, realpathSync } from \"node:fs\";\nimport { basename, dirname, resolve } from \"node:path\";\nimport type { ExecResult, ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\n\nconst GIT_TIMEOUT_MS = 15_000;\nconst GIT_MUTATION_TIMEOUT_MS = 60_000;\nconst LOCAL_BRANCH_PREFIX = \"refs/heads/\";\n\nexport interface WorktreeRecord {\n\tpath: string;\n\thead?: string;\n\tbranchRef?: string;\n\tbranch?: string;\n\tisMain: boolean;\n\tbare: boolean;\n\tdetached: boolean;\n\tlockedReason?: string;\n\tprunableReason?: string;\n}\n\nexport interface AddArguments {\n\tpath: string;\n\tbranch: string;\n\tstartOid?: string;\n}\n\nexport interface AdministrativePruneCandidate {\n\tid: string;\n\tadministrativePath: string;\n\thead?: string;\n\tbranchRef?: string;\n\tindexDirty: boolean;\n}\n\nexport interface GitClient {\n\texec(command: string, args: string[], options?: GitExecOptions): Promise<ExecResult>;\n}\n\ninterface GitExecOptions {\n\tcwd?: string;\n\tsignal?: AbortSignal;\n\ttimeout?: number;\n}\n\nexport class GitWorktreeError extends Error {\n\treadonly args?: readonly string[];\n\n\tconstructor(message: string, args?: readonly string[]) {\n\t\tsuper(message);\n\t\tthis.name = \"GitWorktreeError\";\n\t\tthis.args = args;\n\t}\n}\n\nexport function parseWorktreePorcelain(output: string): WorktreeRecord[] {\n\tconst records: WorktreeRecord[] = [];\n\tlet current: Omit<WorktreeRecord, \"isMain\"> | undefined;\n\n\tconst finish = () => {\n\t\tif (!current) return;\n\t\trecords.push({ ...current, isMain: records.length === 0 });\n\t\tcurrent = undefined;\n\t};\n\n\tfor (const field of output.split(\"\\0\")) {\n\t\tif (field === \"\") {\n\t\t\tfinish();\n\t\t\tcontinue;\n\t\t}\n\t\tconst separator = field.indexOf(\" \");\n\t\tconst key = separator < 0 ? field : field.slice(0, separator);\n\t\tconst value = separator < 0 ? \"\" : field.slice(separator + 1);\n\n\t\tif (key === \"worktree\") {\n\t\t\tfinish();\n\t\t\tif (!value) throw new GitWorktreeError(\"Worktree porcelain record is missing path.\");\n\t\t\tcurrent = { path: value, bare: false, detached: false };\n\t\t\tcontinue;\n\t\t}\n\t\tif (!current) {\n\t\t\tthrow new GitWorktreeError(\n\t\t\t\t`Worktree porcelain field ${JSON.stringify(key)} appears before worktree.`,\n\t\t\t);\n\t\t}\n\n\t\tswitch (key) {\n\t\t\tcase \"HEAD\":\n\t\t\t\tcurrent.head = value;\n\t\t\t\tbreak;\n\t\t\tcase \"branch\":\n\t\t\t\tcurrent.branchRef = value;\n\t\t\t\tcurrent.branch = value.startsWith(LOCAL_BRANCH_PREFIX)\n\t\t\t\t\t? value.slice(LOCAL_BRANCH_PREFIX.length)\n\t\t\t\t\t: undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"bare\":\n\t\t\t\tcurrent.bare = true;\n\t\t\t\tbreak;\n\t\t\tcase \"detached\":\n\t\t\t\tcurrent.detached = true;\n\t\t\t\tbreak;\n\t\t\tcase \"locked\":\n\t\t\t\tcurrent.lockedReason = value;\n\t\t\t\tbreak;\n\t\t\tcase \"prunable\":\n\t\t\t\tcurrent.prunableReason = value;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tfinish();\n\treturn records;\n}\n\nexport function worktreeForBranch(\n\trecords: readonly WorktreeRecord[],\n\tbranch: string,\n): WorktreeRecord | undefined {\n\tconst branchRef = `${LOCAL_BRANCH_PREFIX}${branch}`;\n\treturn records.find((record) => record.branchRef === branchRef);\n}\n\nexport function defaultWorktreePath(\n\tmainWorktreePath: string,\n\tbranch: string,\n\tworktreeRoot: string,\n): string {\n\treturn resolve(worktreeRoot, basename(mainWorktreePath), branch.replaceAll(\"/\", \"-\"));\n}\n\nexport function buildAddArguments(input: AddArguments): string[] {\n\treturn input.startOid\n\t\t? [\"worktree\", \"add\", \"-b\", input.branch, input.path, input.startOid]\n\t\t: [\"worktree\", \"add\", input.path, input.branch];\n}\n\nexport function pathIdentity(path: string): string {\n\tconst absolute = resolve(path);\n\tif (!existsSync(absolute)) return absolute;\n\ttry {\n\t\treturn realpathSync.native(absolute);\n\t} catch {\n\t\treturn absolute;\n\t}\n}\n\nexport function pathEntryExists(path: string): boolean {\n\ttry {\n\t\tlstatSync(path);\n\t\treturn true;\n\t} catch (error) {\n\t\tif (isNodeError(error) && error.code === \"ENOENT\") return false;\n\t\tthrow new GitWorktreeError(`Cannot inspect filesystem path ${path}: ${formatError(error)}`);\n\t}\n}\n\nexport function unresolvableSymlinkAncestor(path: string): string | undefined {\n\tlet current = dirname(resolve(path));\n\twhile (true) {\n\t\ttry {\n\t\t\tconst stat = lstatSync(current);\n\t\t\tif (!stat.isSymbolicLink()) return undefined;\n\t\t\ttry {\n\t\t\t\trealpathSync.native(current);\n\t\t\t\treturn undefined;\n\t\t\t} catch (error) {\n\t\t\t\tif (isNodeError(error) && (error.code === \"ENOENT\" || error.code === \"ELOOP\")) {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\tthrow new GitWorktreeError(\n\t\t\t\t\t`Cannot resolve filesystem ancestor ${current}: ${formatError(error)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (!isNodeError(error) || error.code !== \"ENOENT\") {\n\t\t\t\tif (error instanceof GitWorktreeError) throw error;\n\t\t\t\tthrow new GitWorktreeError(\n\t\t\t\t\t`Cannot inspect filesystem ancestor ${current}: ${formatError(error)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst parent = dirname(current);\n\t\t\tif (parent === current) return undefined;\n\t\t\tcurrent = parent;\n\t\t}\n\t}\n}\n\nexport function pathsEqual(left: string, right: string): boolean {\n\treturn pathIdentity(left) === pathIdentity(right);\n}\n\nexport function sameWorktreeIdentity(left: WorktreeRecord, right: WorktreeRecord): boolean {\n\treturn (\n\t\tpathsEqual(left.path, right.path) &&\n\t\tleft.head === right.head &&\n\t\tleft.branchRef === right.branchRef &&\n\t\tleft.detached === right.detached &&\n\t\tleft.isMain === right.isMain &&\n\t\tleft.bare === right.bare\n\t);\n}\n\nexport async function listWorktrees(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tsignal?: AbortSignal,\n): Promise<WorktreeRecord[]> {\n\tconst result = await runGit(pi, [\"worktree\", \"list\", \"--porcelain\", \"-z\"], cwd, signal);\n\treturn parseWorktreePorcelain(result.stdout);\n}\n\nexport async function currentWorktreePath(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tsignal?: AbortSignal,\n): Promise<string> {\n\tconst result = await runGit(pi, [\"rev-parse\", \"--show-toplevel\"], cwd, signal);\n\tconst path = removeLineEnding(result.stdout);\n\tif (!path) throw new GitWorktreeError(\"Git did not return the current worktree path.\");\n\treturn pathIdentity(path);\n}\n\nexport async function symbolicBranch(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tsignal?: AbortSignal,\n): Promise<string | undefined> {\n\tconst result = await runGitAllowFailure(\n\t\tpi,\n\t\t[\"symbolic-ref\", \"--quiet\", \"--short\", \"HEAD\"],\n\t\tcwd,\n\t\tsignal,\n\t);\n\tif (result.killed) throw killedError([\"symbolic-ref\", \"--quiet\", \"--short\", \"HEAD\"]);\n\tif (result.code !== 0) return undefined;\n\treturn result.stdout.trim() || undefined;\n}\n\nexport async function validateBranch(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tbranch: string,\n\tsignal?: AbortSignal,\n): Promise<string> {\n\tconst result = await runGit(pi, [\"check-ref-format\", \"--branch\", branch], cwd, signal);\n\tconst normalized = result.stdout.trim();\n\tif (!normalized) throw new GitWorktreeError(\"Git returned an empty branch name.\");\n\treturn normalized;\n}\n\nexport async function localBranchExists(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tbranch: string,\n\tsignal?: AbortSignal,\n): Promise<boolean> {\n\tconst result = await runGitAllowFailure(\n\t\tpi,\n\t\t[\"show-ref\", \"--verify\", \"--quiet\", `${LOCAL_BRANCH_PREFIX}${branch}`],\n\t\tcwd,\n\t\tsignal,\n\t);\n\tif (result.killed) throw killedError([\"show-ref\", \"--verify\", \"--quiet\"]);\n\tif (result.code === 0) return true;\n\tif (result.code === 1) return false;\n\tthrow gitFailure([\"show-ref\", \"--verify\", \"--quiet\"], result);\n}\n\nexport async function resolveCommit(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tstartPoint: string,\n\tsignal?: AbortSignal,\n): Promise<string> {\n\tconst result = await runGit(\n\t\tpi,\n\t\t[\"rev-parse\", \"--verify\", \"--end-of-options\", `${startPoint}^{commit}`],\n\t\tcwd,\n\t\tsignal,\n\t);\n\tconst oid = result.stdout.trim();\n\tif (!/^[0-9a-fA-F]{40,64}$/u.test(oid)) {\n\t\tthrow new GitWorktreeError(`Git returned an invalid commit object for ${startPoint}.`);\n\t}\n\treturn oid;\n}\n\nexport async function addWorktree(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tinput: AddArguments,\n\tsignal?: AbortSignal,\n): Promise<void> {\n\tawait runGit(pi, buildAddArguments(input), cwd, signal, GIT_MUTATION_TIMEOUT_MS);\n}\n\nexport async function removeWorktree(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tpath: string,\n\tsignal?: AbortSignal,\n): Promise<void> {\n\tawait runGit(pi, [\"worktree\", \"remove\", path], cwd, signal, GIT_MUTATION_TIMEOUT_MS);\n}\n\nexport async function worktreeInventory(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tpath: string,\n\tsignal?: AbortSignal,\n): Promise<string[]> {\n\tconst statusArgs = [\n\t\t\"status\",\n\t\t\"--porcelain=v1\",\n\t\t\"--untracked-files=all\",\n\t\t\"--ignored=matching\",\n\t\t\"--ignore-submodules=none\",\n\t];\n\tconst status = await runGit(pi, statusArgs, path, signal);\n\tconst indexFlags = await runGit(pi, [\"ls-files\", \"-v\", \"-z\"], path, signal);\n\tconst indexInventory = await indexFlagInventory(pi, indexFlags.stdout, path, signal);\n\tconst submoduleStatus = await runGit(pi, [\"submodule\", \"status\", \"--recursive\"], path, signal);\n\tconst initializedSubmodules = nonEmptyLines(submoduleStatus.stdout)\n\t\t.filter((line) => !line.startsWith(\"-\"))\n\t\t.map((line) => `initialized submodule: ${line.slice(1).trimStart()}`);\n\tconst submodules = await runGit(\n\t\tpi,\n\t\t[\n\t\t\t\"submodule\",\n\t\t\t\"foreach\",\n\t\t\t\"--recursive\",\n\t\t\t\"--quiet\",\n\t\t\t\"git status --porcelain=v1 --untracked-files=all --ignored=matching --ignore-submodules=none\",\n\t\t],\n\t\tpath,\n\t\tsignal,\n\t);\n\treturn [\n\t\t...nonEmptyLines(status.stdout),\n\t\t...indexInventory,\n\t\t...initializedSubmodules,\n\t\t...nonEmptyLines(submodules.stdout),\n\t];\n}\n\nexport async function worktreeAdministrativeDirectory(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tsignal?: AbortSignal,\n): Promise<string> {\n\tconst result = await runGit(\n\t\tpi,\n\t\t[\"rev-parse\", \"--path-format=absolute\", \"--git-dir\"],\n\t\tcwd,\n\t\tsignal,\n\t);\n\tconst value = removeLineEnding(result.stdout);\n\tif (!value) throw new GitWorktreeError(\"Git did not return its worktree administrative path.\");\n\treturn resolve(cwd, value);\n}\n\nexport async function administrativeHistoryOids(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tadministrativePath: string,\n\tsignal?: AbortSignal,\n): Promise<string[]> {\n\tconst gitDirArgument = `--git-dir=${administrativePath}`;\n\tconst values = readAdministrativeReflogOids(resolve(administrativePath, \"logs\"));\n\n\tconst refs = await runGit(\n\t\tpi,\n\t\t[gitDirArgument, \"for-each-ref\", \"--format=%(objectname)\", \"refs/worktree\", \"refs/bisect\"],\n\t\tcwd,\n\t\tsignal,\n\t);\n\tvalues.push(...splitAdministrativeOids(refs.stdout, \"per-worktree refs\"));\n\n\tfor (const name of [\n\t\t\"ORIG_HEAD\",\n\t\t\"MERGE_HEAD\",\n\t\t\"REBASE_HEAD\",\n\t\t\"CHERRY_PICK_HEAD\",\n\t\t\"REVERT_HEAD\",\n\t\t\"BISECT_HEAD\",\n\t]) {\n\t\tconst contents = readAdministrativeFile(administrativePath, name);\n\t\tif (contents === undefined) continue;\n\t\tvalues.push(...splitAdministrativeOids(contents, name));\n\t}\n\tconst fetchHead = readAdministrativeFile(administrativePath, \"FETCH_HEAD\");\n\tif (fetchHead !== undefined) {\n\t\tvalues.push(...splitFetchHeadOids(fetchHead));\n\t}\n\treturn [...new Set(values)];\n}\n\nexport async function administrativePruneCandidates(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tsignal?: AbortSignal,\n): Promise<AdministrativePruneCandidate[]> {\n\tconst commonResult = await runGit(\n\t\tpi,\n\t\t[\"rev-parse\", \"--path-format=absolute\", \"--git-common-dir\"],\n\t\tcwd,\n\t\tsignal,\n\t);\n\tconst commonValue = removeLineEnding(commonResult.stdout);\n\tif (!commonValue) throw new GitWorktreeError(\"Git did not return its common directory.\");\n\tconst commonDirectory = resolve(cwd, commonValue);\n\tconst administrativeRoot = resolve(commonDirectory, \"worktrees\");\n\tif (!existsSync(administrativeRoot)) return [];\n\n\tconst candidates: AdministrativePruneCandidate[] = [];\n\tfor (const entry of readdirSync(administrativeRoot, { withFileTypes: true })) {\n\t\tconst administrativePath = resolve(administrativeRoot, entry.name);\n\t\tif (!entry.isDirectory() || entry.isSymbolicLink()) {\n\t\t\tthrow new GitWorktreeError(\n\t\t\t\t`Unexpected Git worktree administrative entry: ${administrativePath}.`,\n\t\t\t);\n\t\t}\n\t\tif (existsSync(resolve(administrativePath, \"locked\"))) continue;\n\n\t\tconst gitdirPath = resolve(administrativePath, \"gitdir\");\n\t\tlet registeredGitFile: string | undefined;\n\t\ttry {\n\t\t\tregisteredGitFile = removeLineEnding(readFileSync(gitdirPath, \"utf8\"));\n\t\t} catch (error) {\n\t\t\tif (!isNodeError(error) || error.code !== \"ENOENT\") throw error;\n\t\t}\n\t\tif (registeredGitFile) {\n\t\t\tconst targetGitFile = resolve(administrativePath, registeredGitFile);\n\t\t\tif (existsSync(targetGitFile)) continue;\n\t\t}\n\n\t\tconst headPath = resolve(administrativePath, \"HEAD\");\n\t\tlet headValue: string;\n\t\ttry {\n\t\t\tif (!lstatSync(headPath).isFile()) {\n\t\t\t\tthrow new GitWorktreeError(`Git worktree administrative HEAD is not a file: ${headPath}.`);\n\t\t\t}\n\t\t\theadValue = removeLineEnding(readFileSync(headPath, \"utf8\"));\n\t\t} catch (error) {\n\t\t\tif (error instanceof GitWorktreeError) throw error;\n\t\t\tthrow new GitWorktreeError(\n\t\t\t\t`Cannot inspect Git worktree administrative HEAD ${headPath}: ${formatError(error)}`,\n\t\t\t);\n\t\t}\n\t\tconst indexDirty = await administrativeIndexIsDirty(pi, cwd, administrativePath, signal);\n\t\tif (headValue.startsWith(\"ref: \")) {\n\t\t\tconst branchRef = headValue.slice(\"ref: \".length);\n\t\t\tif (!branchRef) {\n\t\t\t\tthrow new GitWorktreeError(\n\t\t\t\t\t`Git worktree administrative HEAD has an empty ref: ${headPath}.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcandidates.push({\n\t\t\t\tid: entry.name,\n\t\t\t\tadministrativePath,\n\t\t\t\tbranchRef,\n\t\t\t\tindexDirty,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (!/^[0-9a-fA-F]{40,64}$/u.test(headValue)) {\n\t\t\tthrow new GitWorktreeError(`Git worktree administrative HEAD is malformed: ${headPath}.`);\n\t\t}\n\t\tcandidates.push({\n\t\t\tid: entry.name,\n\t\t\tadministrativePath,\n\t\t\thead: headValue,\n\t\t\tindexDirty,\n\t\t});\n\t}\n\treturn candidates;\n}\n\nasync function administrativeIndexIsDirty(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tadministrativePath: string,\n\tsignal?: AbortSignal,\n): Promise<boolean> {\n\tconst args = [\n\t\t`--git-dir=${administrativePath}`,\n\t\t\"diff\",\n\t\t\"--cached\",\n\t\t\"--quiet\",\n\t\t\"--no-ext-diff\",\n\t\t\"--no-textconv\",\n\t\t\"--ignore-submodules=none\",\n\t\t\"--\",\n\t];\n\tconst result = await runGitAllowFailure(pi, args, cwd, signal);\n\tif (result.killed) throw killedError(args);\n\tif (result.code === 0) return false;\n\tif (result.code === 1) return true;\n\tthrow gitFailure(args, result);\n}\n\nexport async function durableRefExists(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tref: string,\n\tsignal?: AbortSignal,\n): Promise<boolean> {\n\tif (!ref.startsWith(\"refs/\") || ref.includes(\"\\0\")) {\n\t\tthrow new GitWorktreeError(\"Git worktree administrative HEAD contains an invalid ref.\");\n\t}\n\tconst result = await runGitAllowFailure(\n\t\tpi,\n\t\t[\"show-ref\", \"--verify\", \"--quiet\", ref],\n\t\tcwd,\n\t\tsignal,\n\t);\n\tif (result.killed) throw killedError([\"show-ref\", \"--verify\", \"--quiet\"]);\n\tif (result.code === 0) return true;\n\tif (result.code === 1) return false;\n\tthrow gitFailure([\"show-ref\", \"--verify\", \"--quiet\"], result);\n}\n\nexport async function durableRefsContaining(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\thead: string,\n\tsignal?: AbortSignal,\n): Promise<string[]> {\n\tif (!/^[0-9a-fA-F]{40,64}$/u.test(head)) {\n\t\tthrow new GitWorktreeError(\"Detached worktree has an invalid HEAD object.\");\n\t}\n\tconst result = await runGit(\n\t\tpi,\n\t\t[\n\t\t\t\"for-each-ref\",\n\t\t\t\"--format=%(refname)\",\n\t\t\t`--contains=${head}`,\n\t\t\t\"refs/heads\",\n\t\t\t\"refs/tags\",\n\t\t\t\"refs/remotes\",\n\t\t],\n\t\tcwd,\n\t\tsignal,\n\t);\n\treturn nonEmptyLines(result.stdout);\n}\n\nexport async function prunePreview(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tsignal?: AbortSignal,\n): Promise<string> {\n\tconst result = await runGit(pi, [\"worktree\", \"prune\", \"--dry-run\", \"--verbose\"], cwd, signal);\n\treturn combineOutput(result);\n}\n\nexport async function pruneWorktrees(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tsignal?: AbortSignal,\n): Promise<string> {\n\tconst result = await runGit(\n\t\tpi,\n\t\t[\"worktree\", \"prune\", \"--verbose\"],\n\t\tcwd,\n\t\tsignal,\n\t\tGIT_MUTATION_TIMEOUT_MS,\n\t);\n\treturn combineOutput(result);\n}\n\nexport function formatWorktree(record: WorktreeRecord, currentPath?: string): string {\n\tconst labels = [\n\t\tcurrentPath && pathsEqual(record.path, currentPath) ? \"current\" : undefined,\n\t\trecord.isMain ? \"main\" : undefined,\n\t\trecord.bare ? \"bare\" : undefined,\n\t\trecord.detached ? \"detached\" : record.branch,\n\t\trecord.lockedReason !== undefined\n\t\t\t? `locked${record.lockedReason ? `: ${record.lockedReason}` : \"\"}`\n\t\t\t: undefined,\n\t\trecord.prunableReason !== undefined\n\t\t\t? `prunable${record.prunableReason ? `: ${record.prunableReason}` : \"\"}`\n\t\t\t: undefined,\n\t].filter((label): label is string => Boolean(label));\n\tconst head = record.head ? record.head.slice(0, 8) : \"no HEAD\";\n\treturn stripTerminalControls(`${record.path}  [${labels.join(\", \") || \"unknown\"}]  ${head}`);\n}\n\nexport function stripTerminalControls(value: string): string {\n\treturn [...value]\n\t\t.filter((character) => {\n\t\t\tconst code = character.codePointAt(0) ?? 0;\n\t\t\treturn code > 0x1f && (code < 0x7f || code > 0x9f);\n\t\t})\n\t\t.join(\"\");\n}\n\nasync function runGit(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\targs: string[],\n\tcwd: string,\n\tsignal?: AbortSignal,\n\ttimeout = GIT_TIMEOUT_MS,\n): Promise<ExecResult> {\n\tconst result = await runGitAllowFailure(pi, args, cwd, signal, timeout);\n\tif (result.killed) throw killedError(args);\n\tif (result.code !== 0) throw gitFailure(args, result);\n\treturn result;\n}\n\nasync function runGitAllowFailure(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\targs: string[],\n\tcwd: string,\n\tsignal?: AbortSignal,\n\ttimeout = GIT_TIMEOUT_MS,\n): Promise<ExecResult> {\n\ttry {\n\t\treturn await pi.exec(\"git\", args, { cwd, signal, timeout });\n\t} catch (error) {\n\t\tconst message = formatError(error);\n\t\tif (/\\bENOENT\\b|not found/i.test(message)) {\n\t\t\tthrow new GitWorktreeError(\"Git executable was not found. Install Git and retry.\", args);\n\t\t}\n\t\tthrow new GitWorktreeError(\n\t\t\t`Could not start git ${args.slice(0, 2).join(\" \")}: ${message}`,\n\t\t\targs,\n\t\t);\n\t}\n}\n\nfunction gitFailure(args: string[], result: ExecResult): GitWorktreeError {\n\tconst detail = stripTerminalControls(\n\t\t[result.stderr.trim(), result.stdout.trim()].filter(Boolean).join(\"\\n\"),\n\t);\n\tconst hint = /not a git repository/i.test(detail)\n\t\t? \"The current Pi workspace is not inside a Git repository.\"\n\t\t: detail || `Git exited with code ${result.code}.`;\n\treturn new GitWorktreeError(`git ${args.slice(0, 2).join(\" \")} failed: ${hint}`, args);\n}\n\nfunction killedError(args: string[]): GitWorktreeError {\n\treturn new GitWorktreeError(\n\t\t`git ${args.slice(0, 2).join(\" \")} timed out or was cancelled.`,\n\t\targs,\n\t);\n}\n\nfunction nonEmptyLines(value: string): string[] {\n\treturn value.split(/\\r?\\n/u).filter((line) => line.length > 0);\n}\n\ninterface IndexFlagEntry {\n\tpath: string;\n\tskipWorktree: boolean;\n\tassumeUnchanged: boolean;\n}\n\nasync function indexFlagInventory(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tvalue: string,\n\tcwd: string,\n\tsignal?: AbortSignal,\n): Promise<string[]> {\n\tconst entries = parseIndexFlagEntries(value);\n\tconst sparseManagedPaths = await sparseManagedSkipWorktreePaths(\n\t\tpi,\n\t\tcwd,\n\t\tentries.filter((entry) => entry.skipWorktree).map((entry) => entry.path),\n\t\tsignal,\n\t);\n\tconst inventory: string[] = [];\n\tfor (const entry of entries) {\n\t\tconst flags = [\n\t\t\tentry.skipWorktree && !sparseManagedPaths.has(entry.path) ? \"skip-worktree\" : undefined,\n\t\t\tentry.assumeUnchanged ? \"assume-unchanged\" : undefined,\n\t\t].filter((flag): flag is string => flag !== undefined);\n\t\tif (flags.length > 0) inventory.push(`index flag ${flags.join(\"+\")}: ${entry.path}`);\n\t}\n\treturn inventory;\n}\n\nfunction parseIndexFlagEntries(value: string): IndexFlagEntry[] {\n\tconst entries: IndexFlagEntry[] = [];\n\tfor (const entry of value.split(\"\\0\")) {\n\t\tif (!entry) continue;\n\t\tif (entry.length < 3 || entry[1] !== \" \") {\n\t\t\tthrow new GitWorktreeError(\"Git returned malformed ls-files index-flag output.\");\n\t\t}\n\t\tconst tag = entry[0] ?? \"\";\n\t\tconst skipWorktree = tag.toUpperCase() === \"S\";\n\t\tconst assumeUnchanged = /[a-z]/u.test(tag);\n\t\tif (skipWorktree || assumeUnchanged) {\n\t\t\tentries.push({ path: entry.slice(2), skipWorktree, assumeUnchanged });\n\t\t}\n\t}\n\treturn entries;\n}\n\nasync function sparseManagedSkipWorktreePaths(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\tcwd: string,\n\tpaths: readonly string[],\n\tsignal?: AbortSignal,\n): Promise<ReadonlySet<string>> {\n\tif (paths.length === 0) return new Set();\n\tconst configArgs = [\"config\", \"--bool\", \"--get\", \"core.sparseCheckout\"];\n\tconst config = await runGitAllowFailure(pi, configArgs, cwd, signal);\n\tif (config.killed) throw killedError(configArgs);\n\tif (config.code !== 0 || config.stdout.trim() !== \"true\") return new Set();\n\n\tconst candidates = new Set(paths);\n\tconst checkArgs = [\"sparse-checkout\", \"check-rules\", \"-z\"];\n\tconst checked = await runGitWithInputAllowFailure(\n\t\tcheckArgs,\n\t\tcwd,\n\t\t`${[...candidates].join(\"\\0\")}\\0`,\n\t\tsignal,\n\t);\n\tif (checked.killed) throw killedError(checkArgs);\n\t// Older Git versions lack check-rules; retain every flag rather than guessing.\n\tif (checked.code !== 0) return new Set();\n\n\tconst included = new Set(nulSeparatedPaths(checked.stdout, \"sparse-checkout rules\"));\n\tif ([...included].some((path) => !candidates.has(path))) {\n\t\tthrow new GitWorktreeError(\"Git returned an unexpected sparse-checkout path.\");\n\t}\n\treturn new Set([...candidates].filter((path) => !included.has(path)));\n}\n\nfunction runGitWithInputAllowFailure(\n\targs: string[],\n\tcwd: string,\n\tinput: string,\n\tsignal?: AbortSignal,\n\ttimeout = GIT_TIMEOUT_MS,\n): Promise<ExecResult> {\n\tif (signal?.aborted) {\n\t\treturn Promise.resolve({ stdout: \"\", stderr: \"\", code: 1, killed: true });\n\t}\n\treturn new Promise((resolveResult, reject) => {\n\t\t// ExtensionAPI.exec has no stdin channel, so this read-only check uses an argv-only child.\n\t\tconst child = spawn(\"git\", args, { cwd, stdio: [\"pipe\", \"pipe\", \"pipe\"], windowsHide: true });\n\t\tlet stdout = \"\";\n\t\tlet stderr = \"\";\n\t\tlet killed = false;\n\t\tlet settled = false;\n\t\tconst finish = (result: ExecResult) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tclearTimeout(timeoutHandle);\n\t\t\tsignal?.removeEventListener(\"abort\", stop);\n\t\t\tresolveResult(result);\n\t\t};\n\t\tconst fail = (error: unknown) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tclearTimeout(timeoutHandle);\n\t\t\tsignal?.removeEventListener(\"abort\", stop);\n\t\t\tchild.kill();\n\t\t\tconst message = formatError(error);\n\t\t\treject(\n\t\t\t\t/\\bENOENT\\b|not found/i.test(message)\n\t\t\t\t\t? new GitWorktreeError(\"Git executable was not found. Install Git and retry.\", args)\n\t\t\t\t\t: new GitWorktreeError(\n\t\t\t\t\t\t\t`Could not start git ${args.slice(0, 2).join(\" \")}: ${message}`,\n\t\t\t\t\t\t\targs,\n\t\t\t\t\t\t),\n\t\t\t);\n\t\t};\n\t\tconst stop = () => {\n\t\t\tkilled = true;\n\t\t\tchild.kill();\n\t\t};\n\t\tconst timeoutHandle = setTimeout(stop, timeout);\n\t\tchild.stdout.setEncoding(\"utf8\");\n\t\tchild.stderr.setEncoding(\"utf8\");\n\t\tchild.stdout.on(\"data\", (chunk: string) => {\n\t\t\tstdout += chunk;\n\t\t});\n\t\tchild.stderr.on(\"data\", (chunk: string) => {\n\t\t\tstderr += chunk;\n\t\t});\n\t\tchild.stdin.on(\"error\", (error) => {\n\t\t\tif (!isNodeError(error) || error.code !== \"EPIPE\") fail(error);\n\t\t});\n\t\tchild.once(\"error\", fail);\n\t\tchild.once(\"close\", (code, closeSignal) => {\n\t\t\tfinish({ stdout, stderr, code: code ?? 1, killed: killed || closeSignal !== null });\n\t\t});\n\t\tsignal?.addEventListener(\"abort\", stop, { once: true });\n\t\tif (signal?.aborted) stop();\n\t\tchild.stdin.end(input);\n\t});\n}\n\nfunction nulSeparatedPaths(value: string, source: string): string[] {\n\tif (value && !value.endsWith(\"\\0\")) {\n\t\tthrow new GitWorktreeError(`Git returned malformed ${source} output.`);\n\t}\n\treturn value.split(\"\\0\").filter(Boolean);\n}\n\nfunction combineOutput(result: ExecResult): string {\n\treturn [result.stdout.trimEnd(), result.stderr.trimEnd()].filter(Boolean).join(\"\\n\");\n}\n\nfunction removeLineEnding(value: string): string {\n\tif (value.endsWith(\"\\r\\n\")) return value.slice(0, -2);\n\tif (value.endsWith(\"\\n\")) return value.slice(0, -1);\n\treturn value;\n}\n\nfunction splitAdministrativeOids(value: string, source: string): string[] {\n\tconst normalized = value.endsWith(\"\\n\") ? value.slice(0, -1) : value;\n\tif (!normalized) return [];\n\tconst values = normalized\n\t\t.split(\"\\n\")\n\t\t.map((line) => (line.endsWith(\"\\r\") ? line.slice(0, -1) : line));\n\tif (values.some((oid) => !/^[0-9a-fA-F]{40,64}$/u.test(oid))) {\n\t\tthrow new GitWorktreeError(`Git returned malformed object IDs for ${source}.`);\n\t}\n\treturn values;\n}\n\nfunction splitFetchHeadOids(value: string): string[] {\n\tconst normalized = value.endsWith(\"\\n\") ? value.slice(0, -1) : value;\n\tif (!normalized) return [];\n\treturn normalized.split(\"\\n\").map((line) => {\n\t\tconst match = /^([0-9a-fA-F]{40,64})\\t/u.exec(line);\n\t\tif (!match?.[1]) {\n\t\t\tthrow new GitWorktreeError(\"Git worktree administrative FETCH_HEAD is malformed.\");\n\t\t}\n\t\treturn match[1];\n\t});\n}\n\nfunction readAdministrativeFile(administrativePath: string, name: string): string | undefined {\n\tconst path = resolve(administrativePath, name);\n\tlet stat: ReturnType<typeof lstatSync>;\n\ttry {\n\t\tstat = lstatSync(path);\n\t} catch (error) {\n\t\tif (isNodeError(error) && error.code === \"ENOENT\") return undefined;\n\t\tthrow new GitWorktreeError(\n\t\t\t`Cannot inspect Git worktree administrative ${name}: ${formatError(error)}`,\n\t\t);\n\t}\n\tif (stat.isSymbolicLink() || !stat.isFile()) {\n\t\tthrow new GitWorktreeError(\n\t\t\t`Git worktree administrative ${name} must be a regular file: ${path}.`,\n\t\t);\n\t}\n\ttry {\n\t\treturn readFileSync(path, \"utf8\");\n\t} catch (error) {\n\t\tthrow new GitWorktreeError(\n\t\t\t`Cannot inspect Git worktree administrative ${name}: ${formatError(error)}`,\n\t\t);\n\t}\n}\n\nfunction readAdministrativeReflogOids(logPath: string): string[] {\n\tif (!existsSync(logPath)) return [];\n\tlet stat: ReturnType<typeof lstatSync>;\n\ttry {\n\t\tstat = lstatSync(logPath);\n\t} catch (error) {\n\t\tthrow new GitWorktreeError(`Cannot inspect Git reflog path ${logPath}: ${formatError(error)}`);\n\t}\n\tif (stat.isSymbolicLink()) {\n\t\tthrow new GitWorktreeError(`Git reflog path must not be a symbolic link: ${logPath}.`);\n\t}\n\tif (stat.isDirectory()) {\n\t\tconst values: string[] = [];\n\t\tfor (const entry of readdirSync(logPath, { withFileTypes: true })) {\n\t\t\tvalues.push(...readAdministrativeReflogOids(resolve(logPath, entry.name)));\n\t\t}\n\t\treturn values;\n\t}\n\tif (!stat.isFile()) {\n\t\tthrow new GitWorktreeError(`Unexpected Git reflog entry type: ${logPath}.`);\n\t}\n\n\tlet contents: string;\n\ttry {\n\t\tcontents = readFileSync(logPath, \"utf8\");\n\t} catch (error) {\n\t\tthrow new GitWorktreeError(`Cannot read Git reflog ${logPath}: ${formatError(error)}`);\n\t}\n\tconst normalized = contents.endsWith(\"\\n\") ? contents.slice(0, -1) : contents;\n\tif (!normalized) return [];\n\tconst values: string[] = [];\n\tfor (const line of normalized.split(\"\\n\")) {\n\t\tconst match = /^([0-9a-fA-F]{40,64}) ([0-9a-fA-F]{40,64}) /u.exec(line);\n\t\tif (!match?.[1] || !match[2] || match[1].length !== match[2].length) {\n\t\t\tthrow new GitWorktreeError(`Git worktree reflog is malformed: ${logPath}.`);\n\t\t}\n\t\tfor (const oid of [match[1], match[2]]) {\n\t\t\tif (!/^0+$/u.test(oid)) values.push(oid);\n\t\t}\n\t}\n\treturn values;\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n\treturn error instanceof Error && \"code\" in error;\n}\n\nfunction formatError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n", "import { existsSync, writeFileSync } from \"node:fs\";\nimport type { ExtensionCommandContext, SessionEntry } from \"@earendil-works/pi-coding-agent\";\nimport { SessionManager } from \"@earendil-works/pi-coding-agent\";\nimport { stripTerminalControls } from \"./git.js\";\n\nexport type WorktreeSwitchResult = \"switched\" | \"cancelled\" | \"failed\";\n\nexport async function switchToWorktree(\n\tctx: ExtensionCommandContext,\n\ttargetPath: string,\n): Promise<WorktreeSwitchResult> {\n\tlet sessionPath: string | undefined;\n\ttry {\n\t\tsessionPath = createTargetSession(ctx, targetPath);\n\t\tconst result = await ctx.switchSession(sessionPath, {\n\t\t\twithSession: async (replacementCtx) => {\n\t\t\t\treplacementCtx.ui.notify(\n\t\t\t\t\tstripTerminalControls(`Switched Pi workspace to ${targetPath}.`),\n\t\t\t\t\t\"info\",\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t\tif (result.cancelled) {\n\t\t\tctx.ui.notify(\n\t\t\t\tstripTerminalControls(\n\t\t\t\t\t`Workspace switch was cancelled. The prepared target session was retained at ${sessionPath}.`,\n\t\t\t\t),\n\t\t\t\t\"info\",\n\t\t\t);\n\t\t\treturn \"cancelled\";\n\t\t}\n\t\treturn \"switched\";\n\t} catch (error) {\n\t\tconst retained = sessionPath ? \" The prepared target session was retained.\" : \"\";\n\t\tconst message = stripTerminalControls(\n\t\t\t`Could not switch Pi workspace to ${targetPath}.${retained} The worktree was retained. Retry from /worktree. ${formatError(error)}`,\n\t\t);\n\t\ttry {\n\t\t\tctx.ui.notify(message, \"error\");\n\t\t} catch {\n\t\t\tconsole.error(message);\n\t\t}\n\t\treturn \"failed\";\n\t}\n}\n\nexport function createTargetSession(ctx: ExtensionCommandContext, targetPath: string): string {\n\tconst sourceFile = ctx.sessionManager.getSessionFile();\n\tif (sourceFile && existsSync(sourceFile)) {\n\t\tconst persisted = SessionManager.open(sourceFile);\n\t\tconst activeLeaf = ctx.sessionManager.getLeafId();\n\t\tif (persisted.getLeafId() === activeLeaf) {\n\t\t\tconst forked = SessionManager.forkFrom(sourceFile, targetPath);\n\t\t\tconst targetFile = forked.getSessionFile();\n\t\t\tif (!targetFile || !existsSync(targetFile)) {\n\t\t\t\tthrow new Error(\"Pi did not create the target worktree session file.\");\n\t\t\t}\n\t\t\treturn targetFile;\n\t\t}\n\t\tif (activeLeaf !== null && !persisted.getEntry(activeLeaf)) {\n\t\t\tthrow new Error(\"The active Pi session branch is not present in the persisted source file.\");\n\t\t}\n\t\treturn writeTargetSession(targetPath, ctx.sessionManager.getBranch(), sourceFile, activeLeaf);\n\t}\n\n\tif (ctx.sessionManager.getEntries().length > 0) {\n\t\treturn writeTargetSession(\n\t\t\ttargetPath,\n\t\t\tctx.sessionManager.getBranch(),\n\t\t\tundefined,\n\t\t\tctx.sessionManager.getLeafId(),\n\t\t);\n\t}\n\n\treturn writeTargetSession(targetPath, [], undefined, null);\n}\n\nfunction writeTargetSession(\n\ttargetPath: string,\n\tentries: readonly SessionEntry[],\n\tparentSession: string | undefined,\n\texpectedLeaf: string | null,\n): string {\n\tconst target = SessionManager.create(targetPath, undefined, { parentSession });\n\tconst targetFile = target.getSessionFile();\n\tconst header = target.getHeader();\n\tif (!targetFile || !header) throw new Error(\"Pi could not prepare a target session.\");\n\tconst document = [header, ...entries].map((entry) => JSON.stringify(entry)).join(\"\\n\");\n\twriteFileSync(targetFile, `${document}\\n`, {\n\t\tencoding: \"utf8\",\n\t\tflag: \"wx\",\n\t\tmode: 0o600,\n\t});\n\tconst verified = SessionManager.open(targetFile);\n\tif (verified.getCwd() !== targetPath || verified.getLeafId() !== expectedLeaf) {\n\t\tthrow new Error(\"Pi could not verify the target session cwd and active branch.\");\n\t}\n\treturn targetFile;\n}\n\nfunction formatError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n", "import { existsSync } from \"node:fs\";\nimport type { ExecResult, ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\nimport { pathsEqual, stripTerminalControls, type WorktreeRecord } from \"./git.js\";\n\nconst GIT_STATUS_TIMEOUT_MS = 15_000;\nconst DEFAULT_STATUS_CONCURRENCY = 4;\nconst OID_PATTERN = /^[0-9a-fA-F]{40,64}$/u;\nconst STATUS_XY_PATTERN = /^[.MADRCUT]{2}$/u;\n\nexport interface WorktreeStatusSnapshot {\n\theadOid?: string;\n\tbranch?: string;\n\tdetached: boolean;\n\tupstream?: string;\n\tahead?: number;\n\tbehind?: number;\n\tstaged: number;\n\tunstaged: number;\n\tuntracked: number;\n\tconflicts: number;\n}\n\nexport interface LastCommitSummary {\n\tcommittedAt: string;\n\tsubject: string;\n}\n\nexport type WorktreeStatusResult =\n\t| {\n\t\t\tkind: \"available\";\n\t\t\tsnapshot: WorktreeStatusSnapshot;\n\t\t\tlastCommit?: LastCommitSummary;\n\t  }\n\t| { kind: \"unavailable\"; reason: string };\n\nexport interface WorktreeStatusCard {\n\tid: string;\n\tlabel: string;\n\tdescription: string;\n\tstatusText: string;\n\tsearchText: string;\n\tdetails: string[];\n}\n\ninterface LoadStatusOptions {\n\tconcurrency?: number;\n}\n\nexport function parseWorktreeStatusPorcelain(output: string): WorktreeStatusSnapshot {\n\tif (output && !output.endsWith(\"\\0\")) {\n\t\tthrow new Error(\"Git status porcelain output is not NUL-terminated.\");\n\t}\n\tconst entries = output ? output.slice(0, -1).split(\"\\0\") : [];\n\tconst snapshot: WorktreeStatusSnapshot = {\n\t\tdetached: false,\n\t\tstaged: 0,\n\t\tunstaged: 0,\n\t\tuntracked: 0,\n\t\tconflicts: 0,\n\t};\n\n\tfor (let index = 0; index < entries.length; index += 1) {\n\t\tconst entry = entries[index] ?? \"\";\n\t\tif (entry.startsWith(\"# \")) {\n\t\t\tparseBranchHeader(snapshot, entry);\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.startsWith(\"1 \")) {\n\t\t\tassertFieldCount(entry, 9, \"ordinary\");\n\t\t\tcountTrackedState(snapshot, statusCode(entry));\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.startsWith(\"2 \")) {\n\t\t\tassertFieldCount(entry, 10, \"renamed\");\n\t\t\tcountTrackedState(snapshot, statusCode(entry));\n\t\t\tconst originalPath = entries[index + 1];\n\t\t\tif (!originalPath) throw new Error(\"Git status returned a malformed renamed record.\");\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.startsWith(\"u \")) {\n\t\t\tassertFieldCount(entry, 11, \"unmerged\");\n\t\t\tstatusCode(entry);\n\t\t\tsnapshot.conflicts += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.startsWith(\"? \")) {\n\t\t\tif (entry.length === 2) throw new Error(\"Git status returned a malformed untracked record.\");\n\t\t\tsnapshot.untracked += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.startsWith(\"! \")) continue;\n\t\tthrow new Error(\"Git status returned an unknown porcelain-v2 record.\");\n\t}\n\treturn snapshot;\n}\n\nexport function formatWorktreeStatusCard(\n\trecord: WorktreeRecord,\n\tcurrentPath: string,\n\tresult: WorktreeStatusResult,\n): WorktreeStatusCard {\n\tconst path = safeDisplay(record.path);\n\tconst identity = [\n\t\tpathsEqual(record.path, currentPath) ? \"current\" : undefined,\n\t\trecord.isMain ? \"main\" : undefined,\n\t\trecord.bare ? \"bare\" : undefined,\n\t\trecord.detached ? \"detached\" : undefined,\n\t].filter((value): value is string => value !== undefined);\n\tconst label = safeDisplay(\n\t\trecord.branch ??\n\t\t\t(record.detached\n\t\t\t\t? `Detached ${record.head?.slice(0, 8) ?? \"HEAD\"}`\n\t\t\t\t: record.bare\n\t\t\t\t\t? \"Bare worktree\"\n\t\t\t\t\t: \"Unknown worktree\"),\n\t);\n\tconst statePrefix = identity.length > 0 ? `${identity.join(\" \u00B7 \")} \u00B7 ` : \"\";\n\tconst baseDetails = [\n\t\t`Path: ${path}`,\n\t\t`Identity: ${identity.join(\" \u00B7 \") || \"linked\"}`,\n\t\t`Registered HEAD: ${safeDisplay(record.head ?? \"unavailable\")}`,\n\t];\n\tif (record.lockedReason !== undefined) {\n\t\tbaseDetails.push(\n\t\t\trecord.lockedReason\n\t\t\t\t? `Locked: ${safeDisplay(record.lockedReason)}`\n\t\t\t\t: \"Locked: no reason provided\",\n\t\t);\n\t}\n\tif (record.prunableReason !== undefined) {\n\t\tbaseDetails.push(\n\t\t\trecord.prunableReason\n\t\t\t\t? `Prunable: ${safeDisplay(record.prunableReason)}`\n\t\t\t\t: \"Prunable: no reason provided\",\n\t\t);\n\t}\n\n\tif (result.kind === \"unavailable\") {\n\t\tconst reason = safeDisplay(result.reason);\n\t\treturn {\n\t\t\tid: record.path,\n\t\t\tlabel,\n\t\t\tdescription: path,\n\t\t\tstatusText: `${statePrefix}unavailable`,\n\t\t\tsearchText: `${label} ${path} ${identity.join(\" \")} unavailable ${reason}`,\n\t\t\tdetails: [\n\t\t\t\t...baseDetails,\n\t\t\t\t`Status: ${reason}`,\n\t\t\t\t\"Snapshot: local Git state; no fetch performed.\",\n\t\t\t],\n\t\t};\n\t}\n\n\tconst { snapshot, lastCommit } = result;\n\tconst workingState = formatWorkingState(snapshot);\n\tconst upstream = snapshot.upstream\n\t\t? snapshot.ahead !== undefined && snapshot.behind !== undefined\n\t\t\t? `${safeDisplay(snapshot.upstream)} \u00B7 ahead ${snapshot.ahead} \u00B7 behind ${snapshot.behind}`\n\t\t\t: `${safeDisplay(snapshot.upstream)} \u00B7 ahead/behind unavailable`\n\t\t: \"not configured; ahead/behind unavailable\";\n\tconst details = [\n\t\t...baseDetails,\n\t\t`Snapshot HEAD: ${safeDisplay(snapshot.headOid ?? \"unborn\")}`,\n\t\t`Working tree: ${workingState}`,\n\t\t`Upstream: ${upstream}`,\n\t\tlastCommit\n\t\t\t? `Last commit: ${safeDisplay(lastCommit.committedAt)} \u00B7 ${safeDisplay(lastCommit.subject || \"(no subject)\")}`\n\t\t\t: \"Last commit: unavailable\",\n\t\t\"Snapshot: local Git state; no fetch performed; removal uses stricter checks.\",\n\t];\n\treturn {\n\t\tid: record.path,\n\t\tlabel,\n\t\tdescription: path,\n\t\tstatusText: `${statePrefix}${workingState}`,\n\t\tsearchText: `${label} ${path} ${identity.join(\" \")} ${workingState} ${safeDisplay(snapshot.upstream ?? \"\")}`,\n\t\tdetails,\n\t};\n}\n\nexport async function loadWorktreeStatusCards(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\trecords: readonly WorktreeRecord[],\n\tcurrentPath: string,\n\tsignal?: AbortSignal,\n\toptions: LoadStatusOptions = {},\n): Promise<WorktreeStatusCard[]> {\n\tconst concurrency = Math.max(\n\t\t1,\n\t\tMath.min(options.concurrency ?? DEFAULT_STATUS_CONCURRENCY, records.length || 1),\n\t);\n\tconst cards = new Array<WorktreeStatusCard>(records.length);\n\tlet nextIndex = 0;\n\n\tconst worker = async () => {\n\t\twhile (true) {\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst index = nextIndex;\n\t\t\tif (index >= records.length) return;\n\t\t\tnextIndex += 1;\n\t\t\tconst record = records[index];\n\t\t\tif (!record) return;\n\t\t\tconst unavailable = unavailableReason(record);\n\t\t\tif (unavailable) {\n\t\t\t\tcards[index] = formatWorktreeStatusCard(record, currentPath, {\n\t\t\t\t\tkind: \"unavailable\",\n\t\t\t\t\treason: unavailable,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst status = await runGit(\n\t\t\t\t\tpi,\n\t\t\t\t\t[\n\t\t\t\t\t\t\"status\",\n\t\t\t\t\t\t\"--porcelain=v2\",\n\t\t\t\t\t\t\"--branch\",\n\t\t\t\t\t\t\"-z\",\n\t\t\t\t\t\t\"--untracked-files=all\",\n\t\t\t\t\t\t\"--ignore-submodules=none\",\n\t\t\t\t\t],\n\t\t\t\t\trecord.path,\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\t\t\t\tconst snapshot = parseWorktreeStatusPorcelain(status.stdout);\n\t\t\t\tconst lastCommit = snapshot.headOid\n\t\t\t\t\t? parseLastCommit(\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tawait runGit(\n\t\t\t\t\t\t\t\t\tpi,\n\t\t\t\t\t\t\t\t\t[\"show\", \"-s\", \"--format=%aI%x00%s\", \"--end-of-options\", snapshot.headOid],\n\t\t\t\t\t\t\t\t\trecord.path,\n\t\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t).stdout,\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined;\n\t\t\t\tcards[index] = formatWorktreeStatusCard(record, currentPath, {\n\t\t\t\t\tkind: \"available\",\n\t\t\t\t\tsnapshot,\n\t\t\t\t\tlastCommit,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrowIfAborted(signal);\n\t\t\t\tcards[index] = formatWorktreeStatusCard(record, currentPath, {\n\t\t\t\t\tkind: \"unavailable\",\n\t\t\t\t\treason: `Status failed: ${formatError(error)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tawait Promise.all(Array.from({ length: concurrency }, worker));\n\tthrowIfAborted(signal);\n\treturn cards;\n}\n\nfunction parseBranchHeader(snapshot: WorktreeStatusSnapshot, entry: string): void {\n\tif (entry.startsWith(\"# branch.oid \")) {\n\t\tconst oid = entry.slice(\"# branch.oid \".length);\n\t\tif (oid === \"(initial)\") {\n\t\t\tsnapshot.headOid = undefined;\n\t\t\treturn;\n\t\t}\n\t\tif (!OID_PATTERN.test(oid)) throw new Error(\"Git status returned a malformed branch OID.\");\n\t\tsnapshot.headOid = oid;\n\t\treturn;\n\t}\n\tif (entry.startsWith(\"# branch.head \")) {\n\t\tconst branch = entry.slice(\"# branch.head \".length);\n\t\tif (!branch) throw new Error(\"Git status returned a malformed branch head.\");\n\t\tsnapshot.detached = branch === \"(detached)\";\n\t\tsnapshot.branch = snapshot.detached || branch === \"(unknown)\" ? undefined : branch;\n\t\treturn;\n\t}\n\tif (entry.startsWith(\"# branch.upstream \")) {\n\t\tconst upstream = entry.slice(\"# branch.upstream \".length);\n\t\tif (!upstream) throw new Error(\"Git status returned a malformed upstream.\");\n\t\tsnapshot.upstream = upstream;\n\t\treturn;\n\t}\n\tif (entry.startsWith(\"# branch.ab \")) {\n\t\tconst match = /^# branch\\.ab \\+(\\d+) -(\\d+)$/u.exec(entry);\n\t\tif (!match?.[1] || !match[2]) {\n\t\t\tthrow new Error(\"Git status returned malformed ahead/behind counts.\");\n\t\t}\n\t\tsnapshot.ahead = Number.parseInt(match[1], 10);\n\t\tsnapshot.behind = Number.parseInt(match[2], 10);\n\t}\n}\n\nfunction statusCode(entry: string): string {\n\tconst code = entry.slice(2, 4);\n\tif (!STATUS_XY_PATTERN.test(code)) {\n\t\tthrow new Error(\"Git status returned a malformed tracked status code.\");\n\t}\n\treturn code;\n}\n\nfunction countTrackedState(snapshot: WorktreeStatusSnapshot, code: string): void {\n\tif (code[0] !== \".\") snapshot.staged += 1;\n\tif (code[1] !== \".\") snapshot.unstaged += 1;\n}\n\nfunction assertFieldCount(entry: string, minimum: number, kind: string): void {\n\tif (entry.split(\" \").length < minimum) {\n\t\tthrow new Error(`Git status returned a malformed ${kind} record.`);\n\t}\n}\n\nfunction formatWorkingState(snapshot: WorktreeStatusSnapshot): string {\n\tconst values = [\n\t\tsnapshot.conflicts > 0\n\t\t\t? `${snapshot.conflicts} conflict${snapshot.conflicts === 1 ? \"\" : \"s\"}`\n\t\t\t: undefined,\n\t\tsnapshot.staged > 0 ? `${snapshot.staged} staged` : undefined,\n\t\tsnapshot.unstaged > 0 ? `${snapshot.unstaged} unstaged` : undefined,\n\t\tsnapshot.untracked > 0 ? `${snapshot.untracked} untracked` : undefined,\n\t].filter((value): value is string => value !== undefined);\n\treturn values.join(\" \u00B7 \") || \"clean\";\n}\n\nfunction unavailableReason(record: WorktreeRecord): string | undefined {\n\tif (record.bare) return \"Bare worktree cannot be inspected\";\n\tif (record.prunableReason !== undefined) {\n\t\treturn record.prunableReason\n\t\t\t? `Prunable: ${record.prunableReason}`\n\t\t\t: \"Prunable worktree metadata\";\n\t}\n\tif (!existsSync(record.path)) return \"Worktree path is missing\";\n\treturn undefined;\n}\n\nasync function runGit(\n\tpi: Pick<ExtensionAPI, \"exec\">,\n\targs: string[],\n\tcwd: string,\n\tsignal?: AbortSignal,\n): Promise<ExecResult> {\n\tthrowIfAborted(signal);\n\tconst result = await pi.exec(\"git\", args, { cwd, signal, timeout: GIT_STATUS_TIMEOUT_MS });\n\tif (result.killed) {\n\t\tthrowIfAborted(signal);\n\t\tthrow new Error(`git ${args.slice(0, 2).join(\" \")} timed out.`);\n\t}\n\tif (result.code !== 0) {\n\t\tconst detail = [result.stderr.trim(), result.stdout.trim()].filter(Boolean).join(\" \");\n\t\tthrow new Error(detail || `git ${args.slice(0, 2).join(\" \")} exited with code ${result.code}.`);\n\t}\n\treturn result;\n}\n\nfunction parseLastCommit(output: string): LastCommitSummary {\n\tconst separator = output.indexOf(\"\\0\");\n\tif (separator <= 0 || output.indexOf(\"\\0\", separator + 1) >= 0) {\n\t\tthrow new Error(\"Git returned malformed last-commit details.\");\n\t}\n\tconst committedAt = output.slice(0, separator);\n\tconst subject = removeLineEnding(output.slice(separator + 1));\n\tif (!committedAt) throw new Error(\"Git returned an empty last-commit timestamp.\");\n\treturn { committedAt, subject };\n}\n\nfunction safeDisplay(value: string): string {\n\treturn stripTerminalControls(value);\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n\tif (signal?.aborted) {\n\t\tthrow new DOMException(\"Worktree status loading was aborted.\", \"AbortError\");\n\t}\n}\n\nfunction removeLineEnding(value: string): string {\n\tif (value.endsWith(\"\\r\\n\")) return value.slice(0, -2);\n\tif (value.endsWith(\"\\n\")) return value.slice(0, -1);\n\treturn value;\n}\n\nfunction formatError(error: unknown): string {\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn safeDisplay(message).slice(0, 500);\n}\n", "import { lstat, mkdir, readFile, rename, unlink, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, posix, win32 } from \"node:path\";\nimport { getAgentDir } from \"@earendil-works/pi-coding-agent\";\n\nexport const SETTINGS_FILE = \"pi-worktree.json\";\n\nexport type WorktreeSettingsSource = \"default\" | \"user\";\n\nexport interface LoadedWorktreeSettings {\n\tkind: \"missing\" | \"loaded\" | \"invalid\";\n\tpath: string;\n\teffectiveRoot: string;\n\tsource: WorktreeSettingsSource;\n\tconfiguredRoot?: string;\n\tdocument?: Record<string, unknown>;\n\twarning?: string;\n}\n\nexport interface WorktreeSettingsState {\n\teffectiveRoot: string;\n\tsource: WorktreeSettingsSource;\n\tconfiguredRoot?: string;\n\twarning?: string;\n\tcanSave: boolean;\n}\n\nexport interface SettingsFileOperations {\n\twrite(path: string, data: string): Promise<void>;\n\trename(source: string, destination: string): Promise<void>;\n}\n\nexport interface WorktreeSettingsRuntime {\n\tget(): Readonly<WorktreeSettingsState>;\n\tgetPath(): string;\n\treload(): Promise<Readonly<WorktreeSettingsState>>;\n\tsave(configuredRoot: string | undefined): Promise<Readonly<WorktreeSettingsState>>;\n\tflush?(): Promise<void>;\n}\n\ninterface RuntimeOptions {\n\tpath?: string | (() => string);\n\thome?: string;\n\tplatform?: NodeJS.Platform;\n\toperations?: Partial<SettingsFileOperations>;\n}\n\nconst DEFAULT_FILE_OPERATIONS: SettingsFileOperations = {\n\twrite: (path, data) =>\n\t\twriteFile(path, data, { encoding: \"utf8\", flag: \"wx\", mode: 0o600 }).then(() => undefined),\n\trename,\n};\n\nexport function settingsFilePath(): string {\n\treturn join(getAgentDir(), SETTINGS_FILE);\n}\n\nexport function defaultWorktreeRoot(\n\thome = homedir(),\n\tplatform: NodeJS.Platform = process.platform,\n): string {\n\treturn platformPath(platform).join(home, \".worktrees\");\n}\n\nexport function resolveWorktreeRoot(\n\tvalue: string,\n\thome = homedir(),\n\tplatform: NodeJS.Platform = process.platform,\n): string {\n\tif (!value || value.includes(\"\\0\")) {\n\t\tthrow new Error(\"worktreeRoot must be a non-empty path without NUL characters.\");\n\t}\n\tif (hasShellVariableSyntax(value)) {\n\t\tthrow new Error(\"worktreeRoot must not contain shell variable syntax.\");\n\t}\n\n\tconst path = platformPath(platform);\n\tlet candidate = value;\n\tif (value === \"~\") {\n\t\tcandidate = home;\n\t} else if (value.startsWith(\"~/\") || (platform === \"win32\" && value.startsWith(\"~\\\\\"))) {\n\t\tcandidate = path.resolve(home, value.slice(2));\n\t} else if (value.startsWith(\"~\")) {\n\t\tthrow new Error(\"worktreeRoot supports only ~ itself or a path beginning with ~/.\");\n\t}\n\tif (!path.isAbsolute(candidate)) {\n\t\tthrow new Error(\"worktreeRoot must be an absolute path or begin with ~/.\");\n\t}\n\n\ttry {\n\t\tconst normalized = path.normalize(candidate);\n\t\tif (!normalized || !path.isAbsolute(normalized)) {\n\t\t\tthrow new Error(\"normalization did not produce an absolute path\");\n\t\t}\n\t\treturn normalized;\n\t} catch (error) {\n\t\tthrow new Error(`worktreeRoot could not be normalized: ${formatError(error)}`);\n\t}\n}\n\nexport async function loadWorktreeSettings(\n\tpath = settingsFilePath(),\n\thome = homedir(),\n\tplatform: NodeJS.Platform = process.platform,\n): Promise<LoadedWorktreeSettings> {\n\tconst fallback = defaultWorktreeRoot(home, platform);\n\tlet text: string;\n\ttry {\n\t\tconst stats = await lstat(path);\n\t\tif (stats.isSymbolicLink()) return invalid(path, fallback, \"symbolic links are not accepted\");\n\t\tif (!stats.isFile()) return invalid(path, fallback, \"settings path is not a regular file\");\n\t\ttext = await readFile(path, \"utf8\");\n\t} catch (error) {\n\t\tif (isNodeError(error) && error.code === \"ENOENT\") {\n\t\t\treturn {\n\t\t\t\tkind: \"missing\",\n\t\t\t\tpath,\n\t\t\t\teffectiveRoot: fallback,\n\t\t\t\tsource: \"default\",\n\t\t\t\tdocument: {},\n\t\t\t};\n\t\t}\n\t\treturn invalid(path, fallback, formatError(error));\n\t}\n\n\ttry {\n\t\tconst document = JSON.parse(text) as unknown;\n\t\tif (!isRecord(document)) return invalid(path, fallback, \"the top level must be a JSON object\");\n\t\tif (!Object.hasOwn(document, \"worktreeRoot\")) {\n\t\t\treturn {\n\t\t\t\tkind: \"loaded\",\n\t\t\t\tpath,\n\t\t\t\teffectiveRoot: fallback,\n\t\t\t\tsource: \"default\",\n\t\t\t\tdocument,\n\t\t\t};\n\t\t}\n\t\tif (typeof document.worktreeRoot !== \"string\") {\n\t\t\treturn invalid(path, fallback, \"worktreeRoot must be a string\");\n\t\t}\n\t\tconst effectiveRoot = resolveWorktreeRoot(document.worktreeRoot, home, platform);\n\t\treturn {\n\t\t\tkind: \"loaded\",\n\t\t\tpath,\n\t\t\teffectiveRoot,\n\t\t\tsource: \"user\",\n\t\t\tconfiguredRoot: document.worktreeRoot,\n\t\t\tdocument,\n\t\t};\n\t} catch (error) {\n\t\treturn invalid(path, fallback, formatError(error));\n\t}\n}\n\nexport async function saveWorktreeSettings(\n\tdocument: Record<string, unknown>,\n\tconfiguredRoot: string | undefined,\n\tpath = settingsFilePath(),\n\toperations: Partial<SettingsFileOperations> = {},\n): Promise<Record<string, unknown>> {\n\tconst nextDocument = { ...document };\n\tif (configuredRoot === undefined) delete nextDocument.worktreeRoot;\n\telse nextDocument.worktreeRoot = configuredRoot;\n\n\tawait mkdir(dirname(path), { recursive: true });\n\tconst temporaryPath = temporaryFilePath(path);\n\ttry {\n\t\tawait (operations.write ?? DEFAULT_FILE_OPERATIONS.write)(\n\t\t\ttemporaryPath,\n\t\t\t`${JSON.stringify(nextDocument, null, 2)}\\n`,\n\t\t);\n\t\tawait (operations.rename ?? DEFAULT_FILE_OPERATIONS.rename)(temporaryPath, path);\n\t\treturn nextDocument;\n\t} catch (error) {\n\t\tawait unlink(temporaryPath).catch(() => undefined);\n\t\tthrow error;\n\t}\n}\n\nexport function createWorktreeSettingsRuntime(\n\toptions: RuntimeOptions = {},\n): WorktreeSettingsRuntime {\n\tconst home = options.home ?? homedir();\n\tconst platform = options.platform ?? process.platform;\n\tlet resolvedPath: string | undefined;\n\tconst getPath = () => {\n\t\tresolvedPath ??=\n\t\t\ttypeof options.path === \"function\" ? options.path() : (options.path ?? settingsFilePath());\n\t\treturn resolvedPath;\n\t};\n\tlet operationQueue = Promise.resolve();\n\tconst enqueue = <T>(operation: () => Promise<T>): Promise<T> => {\n\t\tconst result = operationQueue.then(operation, operation);\n\t\toperationQueue = result.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn result;\n\t};\n\tlet state: WorktreeSettingsState = {\n\t\teffectiveRoot: defaultWorktreeRoot(home, platform),\n\t\tsource: \"default\",\n\t\tcanSave: true,\n\t};\n\n\treturn {\n\t\tget: () => Object.freeze({ ...state }),\n\t\tgetPath,\n\t\tasync flush() {\n\t\t\tawait operationQueue;\n\t\t},\n\t\treload() {\n\t\t\treturn enqueue(async () => {\n\t\t\t\tconst loaded = await loadWorktreeSettings(getPath(), home, platform);\n\t\t\t\tif (loaded.kind === \"invalid\") {\n\t\t\t\t\tstate = { ...state, warning: loaded.warning, canSave: false };\n\t\t\t\t\treturn Object.freeze({ ...state });\n\t\t\t\t}\n\t\t\t\tstate = stateFromLoaded(loaded);\n\t\t\t\treturn Object.freeze({ ...state });\n\t\t\t});\n\t\t},\n\t\tsave(configuredRoot) {\n\t\t\treturn enqueue(async () => {\n\t\t\t\tif (!state.canSave) {\n\t\t\t\t\tthrow new Error(`Fix the pi-worktree settings file at ${getPath()} before changing it.`);\n\t\t\t\t}\n\t\t\t\tconst effectiveRoot =\n\t\t\t\t\tconfiguredRoot === undefined\n\t\t\t\t\t\t? defaultWorktreeRoot(home, platform)\n\t\t\t\t\t\t: resolveWorktreeRoot(configuredRoot, home, platform);\n\t\t\t\tconst latest = await loadWorktreeSettings(getPath(), home, platform);\n\t\t\t\tif (latest.kind === \"invalid\") {\n\t\t\t\t\tstate = { ...state, warning: latest.warning, canSave: false };\n\t\t\t\t\tthrow new Error(`Fix the pi-worktree settings file at ${getPath()} before changing it.`);\n\t\t\t\t}\n\t\t\t\tawait saveWorktreeSettings(\n\t\t\t\t\tlatest.document ?? {},\n\t\t\t\t\tconfiguredRoot,\n\t\t\t\t\tgetPath(),\n\t\t\t\t\toptions.operations,\n\t\t\t\t);\n\t\t\t\tstate = {\n\t\t\t\t\teffectiveRoot,\n\t\t\t\t\tsource: configuredRoot === undefined ? \"default\" : \"user\",\n\t\t\t\t\t...(configuredRoot === undefined ? {} : { configuredRoot }),\n\t\t\t\t\tcanSave: true,\n\t\t\t\t};\n\t\t\t\treturn Object.freeze({ ...state });\n\t\t\t});\n\t\t},\n\t};\n}\n\nfunction stateFromLoaded(loaded: LoadedWorktreeSettings): WorktreeSettingsState {\n\treturn {\n\t\teffectiveRoot: loaded.effectiveRoot,\n\t\tsource: loaded.source,\n\t\t...(loaded.configuredRoot === undefined ? {} : { configuredRoot: loaded.configuredRoot }),\n\t\t...(loaded.warning === undefined ? {} : { warning: loaded.warning }),\n\t\tcanSave: true,\n\t};\n}\n\nfunction invalid(path: string, fallback: string, reason: string): LoadedWorktreeSettings {\n\treturn {\n\t\tkind: \"invalid\",\n\t\tpath,\n\t\teffectiveRoot: fallback,\n\t\tsource: \"default\",\n\t\twarning: `${SETTINGS_FILE} ignored (${path}: ${reason}); using the safe default or last valid root without overwriting the file.`,\n\t};\n}\n\nfunction platformPath(platform: NodeJS.Platform): typeof posix | typeof win32 {\n\treturn platform === \"win32\" ? win32 : posix;\n}\n\nfunction hasShellVariableSyntax(value: string): boolean {\n\treturn /\\$|%[^%]+%/u.test(value);\n}\n\nfunction temporaryFilePath(path: string): string {\n\treturn `${path}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n\treturn error instanceof Error && \"code\" in error;\n}\n\nfunction formatError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n", "import type { ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\nimport { registerWorktreeCommand } from \"./command.js\";\nimport {\n\tcreateWorktreeSettingsRuntime,\n\tsettingsFilePath,\n\ttype WorktreeSettingsRuntime,\n} from \"./settings.js\";\n\ninterface WorktreeExtensionOptions {\n\tsettings?: WorktreeSettingsRuntime;\n}\n\nexport default function worktreeExtension(\n\tpi: ExtensionAPI,\n\toptions: WorktreeExtensionOptions = {},\n): void {\n\tconst settings = options.settings ?? createWorktreeSettingsRuntime({ path: settingsFilePath });\n\tlet sessionGeneration = 0;\n\tlet menuController = new AbortController();\n\tregisterWorktreeCommand(pi, settings, () => {\n\t\tconst generation = sessionGeneration;\n\t\treturn {\n\t\t\tsignal: menuController.signal,\n\t\t\tisCurrent: () => generation === sessionGeneration && !menuController.signal.aborted,\n\t\t};\n\t});\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tconst generation = ++sessionGeneration;\n\t\tmenuController.abort(new DOMException(\"Worktree session replaced\", \"AbortError\"));\n\t\tmenuController = new AbortController();\n\t\tconst loaded = await settings.reload();\n\t\tif (generation !== sessionGeneration || !loaded.warning || !ctx.hasUI) return;\n\t\tctx.ui.notify(loaded.warning, \"warning\");\n\t});\n\tpi.on(\"session_shutdown\", async () => {\n\t\tsessionGeneration += 1;\n\t\tmenuController.abort(new DOMException(\"Worktree session shut down\", \"AbortError\"));\n\t\tawait settings.flush?.();\n\t});\n}\n"],
  "mappings": "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",
  "names": ["existsSync", "resolve", "values", "existsSync", "formatError", "existsSync", "existsSync", "runGit", "formatError", "existsSync", "removeLineEnding", "formatError", "existsSync", "resolve", "dirname", "formatError", "isNodeError"]
}
