viba-cli 0.23.0 → 0.26.0
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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +2 -0
- package/.next/build-manifest.json +2 -2
- package/.next/fallback-build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/routes-manifest.json +12 -0
- package/.next/server/app/_global-error/page.js +2 -2
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +2 -2
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/api/component-source/resolve/route.js +1 -1
- package/.next/server/app/api/component-source/resolve/route.js.nft.json +1 -1
- package/.next/server/app/api/notifications/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/notifications/route/build-manifest.json +11 -0
- package/.next/server/app/api/notifications/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/notifications/route.js +8 -0
- package/.next/server/app/api/notifications/route.js.map +5 -0
- package/.next/server/app/api/notifications/route.js.nft.json +1 -0
- package/.next/server/app/api/notifications/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/notifications/socket/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/notifications/socket/route/build-manifest.json +11 -0
- package/.next/server/app/api/notifications/socket/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/notifications/socket/route.js +8 -0
- package/.next/server/app/api/notifications/socket/route.js.map +5 -0
- package/.next/server/app/api/notifications/socket/route.js.nft.json +1 -0
- package/.next/server/app/api/notifications/socket/route_client-reference-manifest.js +2 -0
- package/.next/server/app/api/preview-proxy/start/route.js +2 -2
- package/.next/server/app/api/preview-proxy/start/route.js.nft.json +1 -1
- package/.next/server/app/credentials/page/server-reference-manifest.json +4 -4
- package/.next/server/app/credentials/page.js +1 -1
- package/.next/server/app/credentials/page.js.nft.json +1 -1
- package/.next/server/app/credentials/page_client-reference-manifest.js +1 -1
- package/.next/server/app/credentials.html +1 -1
- package/.next/server/app/credentials.rsc +2 -2
- package/.next/server/app/credentials.segments/_full.segment.rsc +2 -2
- package/.next/server/app/credentials.segments/_head.segment.rsc +1 -1
- package/.next/server/app/credentials.segments/_index.segment.rsc +1 -1
- package/.next/server/app/credentials.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/credentials.segments/credentials/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/credentials.segments/credentials.segment.rsc +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/new/page/server-reference-manifest.json +25 -25
- package/.next/server/app/new/page.js +1 -1
- package/.next/server/app/new/page.js.nft.json +1 -1
- package/.next/server/app/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page/server-reference-manifest.json +25 -25
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/session/[sessionId]/page/server-reference-manifest.json +20 -20
- package/.next/server/app/session/[sessionId]/page.js +1 -1
- package/.next/server/app/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/server/app/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +2 -0
- package/.next/server/chunks/[externals]__6f5f63a1._.js +3 -0
- package/.next/server/chunks/[externals]__ad3eabe7._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__c6a126af._.js → [root-of-the-server]__1368fab8._.js} +4 -4
- package/.next/server/chunks/{[root-of-the-server]__c6a126af._.js.map → [root-of-the-server]__1368fab8._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__3f327856._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__3f327856._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__d29cc8f7._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__d29cc8f7._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__fe40c3b1._.js +4 -0
- package/.next/server/chunks/[root-of-the-server]__fe40c3b1._.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_notifications_route_actions_850cb780.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_notifications_route_actions_850cb780.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_notifications_socket_route_actions_41c2015d.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_notifications_socket_route_actions_41c2015d.js.map +1 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__999d9da5._.js → [root-of-the-server]__012c2bdd._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__04684e03._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__04684e03._.js.map +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__1362ccb6._.js → [root-of-the-server]__04bf0b15._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__1362ccb6._.js.map → [root-of-the-server]__04bf0b15._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1c2594e3._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__319c1c59._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__319c1c59._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__352d2b3c._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__352d2b3c._.js.map +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__2dd6f545._.js → [root-of-the-server]__5afb130a._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__17345fe7._.js → [root-of-the-server]__7cd07782._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__9201693f._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__9201693f._.js.map +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__ff59cd57._.js → [root-of-the-server]__9f8d4cf6._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__a091a4c1._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__a091a4c1._.js.map +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__1d6e2635._.js → [root-of-the-server]__b2c27322._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__1d6e2635._.js.map → [root-of-the-server]__b2c27322._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__ba6de807._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__e659426d._.js.map → [root-of-the-server]__ba6de807._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__ca05f4a0._.js +4 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__cb11b5eb._.js.map → [root-of-the-server]__ca05f4a0._.js.map} +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__45281821._.js → [root-of-the-server]__ebb382fb._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__ee9c5185._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__ee9c5185._.js.map +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__fdfc808a._.js → [root-of-the-server]__fbfe5cd5._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__fdfc808a._.js.map → [root-of-the-server]__fbfe5cd5._.js.map} +1 -1
- package/.next/server/chunks/ssr/src_app_session_[sessionId]_SessionPageClient_tsx_dab490d7._.js +1 -1
- package/.next/server/chunks/ssr/src_app_session_[sessionId]_SessionPageClient_tsx_dab490d7._.js.map +1 -1
- package/.next/server/chunks/ssr/src_components_GitRepoSelector_tsx_05c81afa._.js +1 -1
- package/.next/server/chunks/ssr/src_components_GitRepoSelector_tsx_05c81afa._.js.map +1 -1
- package/.next/server/functions-config-manifest.json +2 -0
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +2 -2
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +44 -44
- package/.next/static/chunks/{2613561c4b47e8eb.js → 2da4ff7bd7ef7984.js} +2 -2
- package/.next/static/chunks/{ffed048819dbdb7a.js → 4cb45c81c3579aa0.js} +1 -1
- package/.next/static/chunks/68be4ececa8dedfc.js +1 -0
- package/.next/static/chunks/{dcc7288680eb7bd1.js → 8347c7b3b84ae4c2.js} +3 -3
- package/.next/static/chunks/{712dd048a65347d2.js → 8f4ebe93d38185fb.js} +2 -2
- package/.next/static/chunks/{ff2b704204f9fc2a.js → c814bb803eca5aea.js} +1 -1
- package/README.md +1 -1
- package/bin/viba.mjs +45 -31
- package/package.json +4 -2
- package/.next/server/chunks/[externals]__5d99c4a5._.js +0 -3
- package/.next/server/chunks/[externals]__60650a97._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__cb11b5eb._.js +0 -4
- package/.next/server/chunks/ssr/[root-of-the-server]__e659426d._.js +0 -3
- package/.next/static/chunks/c5d2ae34c99c3b12.js +0 -1
- /package/.next/server/chunks/{[externals]__5d99c4a5._.js.map → [externals]__6f5f63a1._.js.map} +0 -0
- /package/.next/server/chunks/{[externals]__60650a97._.js.map → [externals]__ad3eabe7._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__999d9da5._.js.map → [root-of-the-server]__012c2bdd._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__2dd6f545._.js.map → [root-of-the-server]__5afb130a._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__17345fe7._.js.map → [root-of-the-server]__7cd07782._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__ff59cd57._.js.map → [root-of-the-server]__9f8d4cf6._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{[root-of-the-server]__45281821._.js.map → [root-of-the-server]__ebb382fb._.js.map} +0 -0
- /package/.next/static/{jXn52hk-Se2m-ROMNVoDZ → T2HRQ3n5Gcw83spbEWvCi}/_buildManifest.js +0 -0
- /package/.next/static/{jXn52hk-Se2m-ROMNVoDZ → T2HRQ3n5Gcw83spbEWvCi}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{jXn52hk-Se2m-ROMNVoDZ → T2HRQ3n5Gcw83spbEWvCi}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app/actions/data%3Afdeecc%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A807bc1%20%3Ctext/javascript%3E","../../../../src/components/FileBrowser.tsx","../../../../src/app/actions/data%3A81f1b8%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A9dd0ae%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Afbc960%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A769910%20%3Ctext/javascript%3E","../../../../src/components/GitRepoSelector.tsx","../../../../src/app/actions/data%3Ae6446b%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A3e7fae%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A659d3c%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A55aa6a%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A09c207%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Acbbe0c%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A6c4190%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Ae040e1%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Afa29e1%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Aa171bb%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A04fa54%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A70f563%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A3e76cb%20%3Ctext/javascript%3E","../../../../node_modules/lucide-react/src/icons/chevron-right.ts","../../../../node_modules/lucide-react/src/icons/check.ts","../../../../node_modules/lucide-react/src/icons/x.ts","../../../../node_modules/lucide-react/src/icons/bot.ts","../../../../node_modules/lucide-react/src/icons/cpu.ts","../../../../node_modules/lucide-react/src/icons/cloud-download.ts","../../../../node_modules/lucide-react/src/icons/folder-cog.ts","../../../../node_modules/lucide-react/src/icons/settings.ts","../../../../node_modules/lucide-react/src/icons/folder-git-2.ts"],"sourcesContent":["/* __next_internal_action_entry_do_not_use__ [{\"7f7cd6bff3bb5c179c2bfe27e51f7ddd3663f3fd02\":\"getDefaultDevServerScript\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_17=/*#__PURE__*/createServerReference(\"7f7cd6bff3bb5c179c2bfe27e51f7ddd3663f3fd02\",callServer,void 0,findSourceMapURL,\"getDefaultDevServerScript\");export{$$RSC_SERVER_ACTION_17 as getDefaultDevServerScript};","/* __next_internal_action_entry_do_not_use__ [{\"402f660b95d08db5f0771b084fb45d10c53415ff04\":\"listDirectories\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"402f660b95d08db5f0771b084fb45d10c53415ff04\",callServer,void 0,findSourceMapURL,\"listDirectories\");export{$$RSC_SERVER_ACTION_2 as listDirectories};","'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { checkDirectoryAccessible, listDirectories, getHomeDirectory } from '@/app/actions/git';\nimport { Folder, ArrowLeft, Check } from 'lucide-react';\nimport { getDirName } from '@/lib/path';\nimport { useDialogKeyboardShortcuts } from '@/hooks/useDialogKeyboardShortcuts';\n\ninterface FileSystemItem {\n name: string;\n path: string;\n isDirectory: boolean;\n isGitRepo: boolean;\n}\n\ninterface FileBrowserProps {\n title?: string;\n initialPath?: string;\n onSelect: (path: string) => void | Promise<unknown>;\n onCancel: () => void;\n checkRepo?: (path: string) => Promise<boolean>;\n}\n\nexport default function FileBrowser({ title, initialPath, onSelect, onCancel, checkRepo }: FileBrowserProps) {\n const [currentPath, setCurrentPath] = useState<string>('');\n const [homePath, setHomePath] = useState<string>('');\n const [items, setItems] = useState<FileSystemItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let isMounted = true;\n\n const init = async () => {\n try {\n const home = await getHomeDirectory();\n if (!isMounted) return;\n\n setHomePath(home);\n setCurrentPath(initialPath || home);\n } catch (err) {\n console.error('Failed to resolve home directory:', err);\n if (!isMounted) return;\n setError('Failed to access your home directory.');\n setCurrentPath(initialPath || '/');\n }\n };\n\n void init();\n\n return () => {\n isMounted = false;\n };\n }, [initialPath]);\n\n useEffect(() => {\n if (!currentPath) return;\n\n let isMounted = true;\n\n const fetchItems = async () => {\n setLoading(true);\n setError(null);\n try {\n const dirs = await listDirectories(currentPath);\n if (!isMounted) return;\n\n if (dirs.length === 0 && homePath && currentPath !== homePath) {\n const accessible = await checkDirectoryAccessible(currentPath);\n if (!isMounted) return;\n\n if (!accessible) {\n setError(`Could not access \"${currentPath}\". Showing home directory.`);\n setCurrentPath(homePath);\n return;\n }\n }\n\n const mapped: FileSystemItem[] = dirs.map(d => ({\n name: d.name,\n path: d.path,\n isDirectory: d.isDirectory,\n isGitRepo: d.isGitRepo\n }));\n setItems(mapped);\n } catch (err) {\n console.error(err);\n if (!isMounted) return;\n\n if (homePath && currentPath !== homePath) {\n setError(`Could not access \"${currentPath}\". Showing home directory.`);\n setCurrentPath(homePath);\n return;\n }\n\n setItems([]);\n setError('Failed to load directory contents');\n } finally {\n if (isMounted) {\n setLoading(false);\n }\n }\n };\n\n void fetchItems();\n\n return () => {\n isMounted = false;\n };\n }, [currentPath, homePath]);\n\n const handleSelectPath = useCallback(async (path: string) => {\n if (checkRepo) {\n const isValid = await checkRepo(path);\n if (!isValid) {\n setError(\"Selected directory is not a valid git repository.\");\n // Clear error after 3 seconds\n setTimeout(() => setError(null), 3000);\n return;\n }\n }\n await onSelect(path);\n }, [checkRepo, onSelect]);\n\n const handleSelect = useCallback(async () => {\n await handleSelectPath(currentPath);\n }, [currentPath, handleSelectPath]);\n\n useDialogKeyboardShortcuts({\n onConfirm: handleSelect,\n onDismiss: onCancel,\n canConfirm: Boolean(currentPath),\n });\n\n const handleNavigate = (path: string) => {\n setCurrentPath(path);\n };\n\n const handleGoUp = () => {\n // Navigate up one directory\n // Use the cross-platform getDirName utility to handle Windows and POSIX paths.\n const parent = getDirName(currentPath);\n if (parent && parent !== currentPath) {\n setCurrentPath(parent);\n }\n };\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4\">\n <div className=\"bg-base-200 rounded-lg shadow-xl w-full max-w-3xl h-[80vh] flex flex-col\">\n {/* Header */}\n <div className=\"flex items-center justify-between p-4 border-b border-base-300\">\n <h2 className=\"text-xl font-bold flex items-center gap-2\">\n <Folder className=\"w-5 h-5\" />\n {title || \"Browse Local Repository\"}\n </h2>\n <button onClick={onCancel} className=\"btn btn-sm btn-ghost btn-circle\">\n ✕\n </button>\n </div>\n\n {/* Current Path Bar */}\n <div className=\"flex items-center gap-2 p-3 bg-base-300\">\n <button\n onClick={handleGoUp}\n className=\"btn btn-sm btn-square btn-ghost\"\n title=\"Go Up\"\n disabled={currentPath === '/' || !currentPath}\n >\n <ArrowLeft className=\"w-4 h-4\" />\n </button>\n <div className=\"flex-1 overflow-x-auto whitespace-nowrap px-2 font-mono text-sm\">\n {currentPath}\n </div>\n <button\n onClick={handleSelect}\n className=\"btn btn-sm btn-primary\"\n >\n Select Current Folder\n </button>\n </div>\n\n {/* List Content */}\n <div className=\"flex-1 overflow-y-auto p-2\">\n {loading ? (\n <div className=\"flex justify-center items-center h-full\">\n <span className=\"loading loading-spinner loading-lg\"></span>\n </div>\n ) : error ? (\n <div className=\"alert alert-error\">{error}</div>\n ) : items.length === 0 ? (\n <div className=\"text-center text-base-content/50 mt-10\">Empty directory</div>\n ) : (\n <div className=\"grid grid-cols-1 gap-1\">\n {items.map((item) => (\n <div\n key={item.path}\n className=\"flex items-center justify-between p-2 hover:bg-base-100 rounded-md cursor-pointer transition-colors\"\n onClick={() => handleNavigate(item.path)}\n >\n <div className=\"flex items-center gap-3 overflow-hidden\">\n <Folder className={`w-5 h-5 ${item.isGitRepo ? 'text-primary' : 'text-base-content/70'}`} />\n <span className=\"truncate\">{item.name}</span>\n {item.isGitRepo && (\n <span className=\"badge badge-xs badge-primary\">git</span>\n )}\n </div>\n {item.isGitRepo && (\n <button\n className=\"btn btn-xs btn-primary\"\n onClick={(e) => {\n e.stopPropagation();\n void handleSelectPath(item.path);\n }}\n title={`Select ${item.name}`}\n >\n <Check className=\"w-3 h-3\" />\n Select\n </button>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Footer info */}\n <div className=\"p-3 border-t border-base-300 text-xs text-base-content/50 text-center\">\n Navigate to a folder and click "Select Current Folder" to choose it.\n </div>\n </div>\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40252879884cdbf10287eaa82dd8e7bc637e21a9fc\":\"checkIsGitRepo\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_6=/*#__PURE__*/createServerReference(\"40252879884cdbf10287eaa82dd8e7bc637e21a9fc\",callServer,void 0,findSourceMapURL,\"checkIsGitRepo\");export{$$RSC_SERVER_ACTION_6 as checkIsGitRepo};","/* __next_internal_action_entry_do_not_use__ [{\"40b808b8e4aafb1bfdfcc787ede3c282627e4a61a9\":\"getBranches\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_4=/*#__PURE__*/createServerReference(\"40b808b8e4aafb1bfdfcc787ede3c282627e4a61a9\",callServer,void 0,findSourceMapURL,\"getBranches\");export{$$RSC_SERVER_ACTION_4 as getBranches};","/* __next_internal_action_entry_do_not_use__ [{\"60a9f7ac11b0f69d14b8ba76fafde6acaf815e3442\":\"checkoutBranch\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_5=/*#__PURE__*/createServerReference(\"60a9f7ac11b0f69d14b8ba76fafde6acaf815e3442\",callServer,void 0,findSourceMapURL,\"checkoutBranch\");export{$$RSC_SERVER_ACTION_5 as checkoutBranch};","/* __next_internal_action_entry_do_not_use__ [{\"7f72e2243da9163bf4c0e759cd99ac037a5112fc58\":\"getStartupScript\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_16=/*#__PURE__*/createServerReference(\"7f72e2243da9163bf4c0e759cd99ac037a5112fc58\",callServer,void 0,findSourceMapURL,\"getStartupScript\");export{$$RSC_SERVER_ACTION_16 as getStartupScript};","'use client';\n\nimport React, { useState, useEffect, useCallback, useMemo, useRef } from 'react';\nimport { FolderGit2, GitBranch as GitBranchIcon, Plus, X, ChevronRight, FolderCog, Bot, Cpu, Trash2, Play, KeyRound, Settings, ExternalLink, CloudDownload } from 'lucide-react';\nimport FileBrowser from './FileBrowser';\nimport {\n checkIsGitRepo,\n getBranches,\n checkoutBranch,\n GitBranch,\n startTtydProcess,\n getStartupScript,\n getDefaultDevServerScript,\n listRepoFiles,\n saveAttachments,\n checkAgentCliInstalled,\n installAgentCli,\n SupportedAgentCli,\n} from '@/app/actions/git';\nimport { cloneRemoteRepository, resolveRepositoryByName } from '@/app/actions/repository';\nimport { copySessionAttachments, createSession, deleteSession, getSessionPrefillContext, listSessions, saveSessionLaunchContext, SessionMetadata } from '@/app/actions/session';\nimport { getConfig, updateConfig, updateRepoSettings, Config } from '@/app/actions/config';\nimport { listCredentials } from '@/app/actions/credentials';\nimport type { Credential } from '@/lib/credentials';\nimport { useRouter } from 'next/navigation';\nimport { getBaseName } from '@/lib/path';\nimport { notifySessionsUpdated, SESSIONS_UPDATED_EVENT, SESSIONS_UPDATED_STORAGE_KEY } from '@/lib/session-updates';\nimport Image from 'next/image';\nimport { useDialogKeyboardShortcuts } from '@/hooks/useDialogKeyboardShortcuts';\n\nimport agentProvidersDataRaw from '@/data/agent-providers.json';\n\ntype Model = {\n id: string;\n label: string;\n description?: string;\n};\n\ntype AgentProvider = {\n name: string;\n cli: string;\n description?: string;\n models: Model[];\n};\n\ntype SessionMode = 'fast' | 'plan';\ntype RepoCredentialSelection = 'auto' | string;\n\nfunction getCredentialOptionLabel(credential: Credential): string {\n if (credential.type === 'github') {\n return `GitHub - ${credential.username}`;\n }\n\n let host = credential.serverUrl;\n try {\n host = new URL(credential.serverUrl).host;\n } catch {\n // Keep raw server URL if parsing fails.\n }\n\n return `GitLab - ${credential.username} @ ${host}`;\n}\n\nconst agentProvidersData = agentProvidersDataRaw as unknown as AgentProvider[];\nconst SESSION_MODE_STORAGE_KEY = 'viba:new-session-mode';\nconst AGENT_LOGIN_COMMANDS: Record<SupportedAgentCli, string> = {\n gemini: 'gemini',\n codex: 'codex',\n agent: 'agent',\n};\nconst AGENT_CLI_LABELS: Record<SupportedAgentCli, string> = {\n gemini: 'Gemini CLI',\n codex: 'Codex CLI',\n agent: 'Cursor Agent CLI',\n};\n\ntype TerminalWindow = Window & {\n term?: {\n paste: (text: string) => void;\n };\n};\n\ntype GitRepoSelectorProps = {\n mode?: 'home' | 'new';\n repoPath?: string | null;\n fromRepoName?: string | null;\n prefillFromSession?: string | null;\n};\n\nexport default function GitRepoSelector({\n mode = 'home',\n repoPath = null,\n fromRepoName = null,\n prefillFromSession = null,\n}: GitRepoSelectorProps) {\n const [isBrowsing, setIsBrowsing] = useState(false);\n const [isSelectingRoot, setIsSelectingRoot] = useState(false);\n const [isRepoSettingsDialogOpen, setIsRepoSettingsDialogOpen] = useState(false);\n const [isCloneRemoteDialogOpen, setIsCloneRemoteDialogOpen] = useState(false);\n const [remoteRepoUrl, setRemoteRepoUrl] = useState('');\n const [cloneCredentialSelection, setCloneCredentialSelection] = useState<RepoCredentialSelection>('auto');\n const [cloneRemoteError, setCloneRemoteError] = useState<string | null>(null);\n const [isCloningRemote, setIsCloningRemote] = useState(false);\n const [isLoadingCloneCredentialOptions, setIsLoadingCloneCredentialOptions] = useState(false);\n\n const [config, setConfig] = useState<Config | null>(null);\n\n const [selectedRepo, setSelectedRepo] = useState<string | null>(null);\n const [repoForSettings, setRepoForSettings] = useState<string | null>(null);\n const [repoCredentialSelection, setRepoCredentialSelection] = useState<RepoCredentialSelection>('auto');\n const [credentialOptions, setCredentialOptions] = useState<Credential[]>([]);\n\n const router = useRouter();\n\n const [branches, setBranches] = useState<GitBranch[]>([]);\n const [currentBranchName, setCurrentBranchName] = useState<string>('');\n const [existingSessions, setExistingSessions] = useState<SessionMetadata[]>([]);\n const [allSessions, setAllSessions] = useState<SessionMetadata[]>([]);\n\n const [selectedProvider, setSelectedProvider] = useState<AgentProvider | null>(null);\n const [selectedModel, setSelectedModel] = useState<string>('');\n const [startupScript, setStartupScript] = useState<string>('');\n const [devServerScript, setDevServerScript] = useState<string>('');\n const [showSessionAdvanced, setShowSessionAdvanced] = useState(false);\n const [initialMessage, setInitialMessage] = useState<string>('');\n const [title, setTitle] = useState<string>('');\n const [sessionMode, setSessionMode] = useState<SessionMode>('fast');\n const [attachments, setAttachments] = useState<File[]>([]);\n const [prefilledAttachmentNames, setPrefilledAttachmentNames] = useState<string[]>([]);\n const [prefillSourceSessionName, setPrefillSourceSessionName] = useState<string | null>(null);\n const [hasAppliedPrefill, setHasAppliedPrefill] = useState(false);\n\n const [loading, setLoading] = useState(false);\n const [deletingSessionName, setDeletingSessionName] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [isResolvingRepoFromName, setIsResolvingRepoFromName] = useState(false);\n const [isLoaded, setIsLoaded] = useState(false);\n const [isInstallingAgentCli, setIsInstallingAgentCli] = useState(false);\n const [installingAgentCli, setInstallingAgentCli] = useState<SupportedAgentCli | null>(null);\n const [isLoginModalOpen, setIsLoginModalOpen] = useState(false);\n const [loginAgentCli, setLoginAgentCli] = useState<SupportedAgentCli | null>(null);\n const [loginCommand, setLoginCommand] = useState('');\n const [loginCommandInjected, setLoginCommandInjected] = useState(false);\n const [loginModalError, setLoginModalError] = useState<string | null>(null);\n const [repoSettingsError, setRepoSettingsError] = useState<string | null>(null);\n const [isLoadingCredentialOptions, setIsLoadingCredentialOptions] = useState(false);\n const [isSavingRepoSettings, setIsSavingRepoSettings] = useState(false);\n const loginTerminalRef = useRef<HTMLIFrameElement>(null);\n\n const collapsedSessionSetupLabel = selectedProvider && selectedModel\n ? `Show Session Setup (${selectedProvider.name} / ${selectedModel})`\n : 'Show Session Setup';\n\n const notifySessionsChanged = useCallback(() => {\n notifySessionsUpdated();\n }, []);\n\n const refreshSessionData = useCallback(async (repo: string | null = selectedRepo) => {\n try {\n const [allSess, repoSess] = await Promise.all([\n listSessions(),\n repo ? listSessions(repo) : Promise.resolve([] as SessionMetadata[]),\n ]);\n setAllSessions(allSess);\n if (repo) {\n setExistingSessions(repoSess);\n }\n } catch (e) {\n console.error('Failed to refresh sessions', e);\n }\n }, [selectedRepo]);\n\n const toSupportedAgentCli = useCallback((value: string | null | undefined): SupportedAgentCli | null => {\n if (value === 'gemini' || value === 'codex' || value === 'agent') return value;\n return null;\n }, []);\n\n const resolveRepoCredentialSelection = useCallback((repo: string, credentials: Credential[] = credentialOptions): RepoCredentialSelection => {\n const repoSettings = config?.repoSettings?.[repo];\n if (!repoSettings) return 'auto';\n\n if (repoSettings.credentialId) {\n return repoSettings.credentialId;\n }\n\n const legacyPreference = repoSettings.credentialPreference;\n if (legacyPreference === 'github' || legacyPreference === 'gitlab') {\n const matched = credentials.find((credential) => credential.type === legacyPreference);\n if (matched) return matched.id;\n }\n\n return 'auto';\n }, [config, credentialOptions]);\n\n const getRepoCredentialLabel = useCallback((repo: string): string => {\n const repoSettings = config?.repoSettings?.[repo];\n if (!repoSettings) return 'Auto';\n\n if (repoSettings.credentialId) {\n const matched = credentialOptions.find((credential) => credential.id === repoSettings.credentialId);\n return matched ? getCredentialOptionLabel(matched) : 'Selected credential';\n }\n\n if (repoSettings.credentialPreference === 'github') return 'GitHub (legacy)';\n if (repoSettings.credentialPreference === 'gitlab') return 'GitLab (legacy)';\n\n return 'Auto';\n }, [config, credentialOptions]);\n\n const dismissRepoSettingsDialog = useCallback(() => {\n if (isSavingRepoSettings) return;\n setIsRepoSettingsDialogOpen(false);\n setRepoForSettings(null);\n setRepoCredentialSelection('auto');\n setRepoSettingsError(null);\n setIsLoadingCredentialOptions(false);\n }, [isSavingRepoSettings]);\n\n const openCloneRemoteDialog = useCallback(() => {\n setIsCloneRemoteDialogOpen(true);\n setRemoteRepoUrl('');\n setCloneCredentialSelection('auto');\n setCloneRemoteError(null);\n setIsLoadingCloneCredentialOptions(true);\n\n void (async () => {\n try {\n const result = await listCredentials();\n if (!result.success) {\n setCloneRemoteError(result.error);\n return;\n }\n\n setCredentialOptions(result.credentials);\n } catch (error) {\n console.error(error);\n setCloneRemoteError('Failed to load credentials.');\n } finally {\n setIsLoadingCloneCredentialOptions(false);\n }\n })();\n }, []);\n\n const dismissCloneRemoteDialog = useCallback(() => {\n if (isCloningRemote) return;\n setIsCloneRemoteDialogOpen(false);\n setRemoteRepoUrl('');\n setCloneCredentialSelection('auto');\n setCloneRemoteError(null);\n setIsLoadingCloneCredentialOptions(false);\n }, [isCloningRemote]);\n\n // Load config and all sessions on mount\n useEffect(() => {\n const loadData = async () => {\n try {\n const [cfg, sessions, credentialsResult] = await Promise.all([\n getConfig(),\n listSessions(),\n listCredentials(),\n ]);\n setConfig(cfg);\n setAllSessions(sessions);\n if (credentialsResult.success) {\n setCredentialOptions(credentialsResult.credentials);\n }\n } catch (e) {\n console.error('Failed to load data', e);\n } finally {\n setIsLoaded(true);\n }\n };\n loadData();\n }, []);\n\n useEffect(() => {\n if (mode !== 'new') return;\n\n try {\n const storedMode = window.localStorage.getItem(SESSION_MODE_STORAGE_KEY);\n if (storedMode === 'fast' || storedMode === 'plan') {\n setSessionMode(storedMode);\n }\n } catch {\n // Ignore localStorage errors.\n }\n }, [mode]);\n\n useEffect(() => {\n const refresh = () => {\n const repoForList = mode === 'new' ? selectedRepo : null;\n void refreshSessionData(repoForList);\n };\n\n const handleStorage = (event: StorageEvent) => {\n if (event.key === SESSIONS_UPDATED_STORAGE_KEY) {\n refresh();\n }\n };\n\n const handleFocus = () => {\n refresh();\n };\n\n const handleSessionsUpdated = () => {\n refresh();\n };\n\n window.addEventListener('storage', handleStorage);\n window.addEventListener('focus', handleFocus);\n window.addEventListener(SESSIONS_UPDATED_EVENT, handleSessionsUpdated);\n\n return () => {\n window.removeEventListener('storage', handleStorage);\n window.removeEventListener('focus', handleFocus);\n window.removeEventListener(SESSIONS_UPDATED_EVENT, handleSessionsUpdated);\n };\n }, [mode, refreshSessionData, selectedRepo]);\n\n const loadSelectedRepoData = async (path: string) => {\n setSelectedRepo(path);\n setRepoFilesCache([]);\n\n // Load saved provider/model\n await loadSavedAgentSettings(path);\n\n // Load branches\n await loadBranches(path);\n\n await refreshSessionData(path);\n };\n\n const handleSelectRepo = async (path: string) => {\n setLoading(true);\n setError(null);\n try {\n const isValid = await checkIsGitRepo(path);\n if (!isValid) {\n setError('Selected directory is not a valid git repository.');\n return false;\n }\n\n const currentConfig = config || await getConfig();\n let newRecent = [...currentConfig.recentRepos];\n if (!newRecent.includes(path)) {\n newRecent.unshift(path);\n } else {\n // Move to top\n newRecent = [path, ...newRecent.filter(r => r !== path)];\n }\n\n // Update config\n const newConfig = await updateConfig({ recentRepos: newRecent });\n setConfig(newConfig);\n\n setIsBrowsing(false);\n\n if (mode === 'home') {\n router.push(`/new?repo=${encodeURIComponent(path)}`);\n return true;\n }\n\n await loadSelectedRepoData(path);\n return true;\n } catch (err) {\n console.error(err);\n setError('Failed to open repository.');\n return false;\n } finally {\n setLoading(false);\n }\n };\n\n const handleCloneRemoteRepo = async () => {\n if (isCloningRemote) return;\n\n const trimmedRemoteUrl = remoteRepoUrl.trim();\n if (!trimmedRemoteUrl) {\n setCloneRemoteError('Please enter a remote repository URL.');\n return;\n }\n\n setIsCloningRemote(true);\n setCloneRemoteError(null);\n setError(null);\n\n try {\n const result = await cloneRemoteRepository(\n trimmedRemoteUrl,\n cloneCredentialSelection === 'auto' ? null : cloneCredentialSelection,\n );\n\n if (!result.success || !result.repoPath) {\n setCloneRemoteError(result.error || 'Failed to clone repository.');\n return;\n }\n\n const opened = await handleSelectRepo(result.repoPath);\n if (!opened) {\n setCloneRemoteError('Repository was cloned, but failed to open it.');\n return;\n }\n\n setIsCloneRemoteDialogOpen(false);\n setRemoteRepoUrl('');\n setCloneCredentialSelection('auto');\n setCloneRemoteError(null);\n } catch (error) {\n console.error(error);\n setCloneRemoteError('Failed to clone repository.');\n } finally {\n setIsCloningRemote(false);\n }\n };\n\n const handleCurrentRepoChange = async (e: React.ChangeEvent<HTMLSelectElement>) => {\n if (mode !== 'new') return;\n\n const nextRepo = e.target.value;\n if (!nextRepo || nextRepo === selectedRepo) return;\n\n const changed = await handleSelectRepo(nextRepo);\n if (!changed) return;\n\n const params = new URLSearchParams();\n params.set('repo', nextRepo);\n if (prefillFromSession) {\n params.set('prefillFromSession', prefillFromSession);\n }\n\n router.replace(`/new?${params.toString()}`);\n };\n\n useEffect(() => {\n if (mode !== 'new') return;\n\n if (!repoPath) {\n setSelectedRepo(null);\n setExistingSessions([]);\n setBranches([]);\n setCurrentBranchName('');\n return;\n }\n\n if (repoPath === selectedRepo) return;\n void handleSelectRepo(repoPath);\n // `handleSelectRepo` is intentionally excluded to avoid retriggering from function identity changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mode, repoPath, selectedRepo]);\n\n useEffect(() => {\n if (mode !== 'new') return;\n if (repoPath) {\n setIsResolvingRepoFromName(false);\n return;\n }\n\n const trimmedFromRepoName = fromRepoName?.trim() ?? '';\n if (!trimmedFromRepoName) {\n setIsResolvingRepoFromName(false);\n return;\n }\n\n let isCancelled = false;\n\n const resolveFromRepoName = async () => {\n setError(null);\n setIsResolvingRepoFromName(true);\n\n const result = await resolveRepositoryByName(trimmedFromRepoName);\n if (isCancelled) return;\n\n if (!result.success) {\n setError(result.error || 'Failed to search repositories.');\n setIsResolvingRepoFromName(false);\n return;\n }\n\n if (!result.repoPath) {\n setError(`Could not find a matching repository for \"${trimmedFromRepoName}\".`);\n setIsResolvingRepoFromName(false);\n return;\n }\n\n const params = new URLSearchParams();\n params.set('repo', result.repoPath);\n if (prefillFromSession) {\n params.set('prefillFromSession', prefillFromSession);\n }\n router.replace(`/new?${params.toString()}`);\n };\n\n void resolveFromRepoName();\n\n return () => {\n isCancelled = true;\n };\n }, [fromRepoName, mode, prefillFromSession, repoPath, router]);\n\n useEffect(() => {\n setHasAppliedPrefill(false);\n setPrefilledAttachmentNames([]);\n setPrefillSourceSessionName(null);\n }, [prefillFromSession]);\n\n useEffect(() => {\n if (mode !== 'new' || !selectedRepo || !prefillFromSession || hasAppliedPrefill) {\n return;\n }\n\n let isCancelled = false;\n\n const loadPrefill = async () => {\n const prefillResult = await getSessionPrefillContext(prefillFromSession);\n if (isCancelled) return;\n\n if (!prefillResult.success || !prefillResult.context) {\n if (prefillResult.error) {\n setError(prefillResult.error);\n }\n setHasAppliedPrefill(true);\n return;\n }\n\n const context = prefillResult.context;\n if (context.repoPath !== selectedRepo) {\n setHasAppliedPrefill(true);\n return;\n }\n\n const provider = agentProvidersData.find(p => p.cli === context.agentProvider);\n if (provider) {\n setSelectedProvider(provider);\n if (context.model && (context.model === 'auto' || provider.models.some(m => m.id === context.model))) {\n setSelectedModel(context.model);\n } else {\n setSelectedModel('auto');\n }\n }\n\n setTitle(context.title || '');\n setInitialMessage(context.initialMessage || '');\n setPrefilledAttachmentNames(context.attachmentNames || []);\n setPrefillSourceSessionName(context.sourceSessionName);\n setShowSessionAdvanced(true);\n setHasAppliedPrefill(true);\n };\n\n void loadPrefill();\n\n return () => {\n isCancelled = true;\n };\n }, [hasAppliedPrefill, mode, prefillFromSession, selectedRepo]);\n\n const loadSavedAgentSettings = async (repoPath: string) => {\n // Refresh config to ensure we have latest settings?\n // We can just rely on current config state if we assume single user or minimal concurrency.\n // Or we can refetch.\n const currentConfig = config || await getConfig();\n if (!config) setConfig(currentConfig);\n\n const settings = currentConfig.repoSettings[repoPath] || {};\n\n const savedProviderCli = settings.agentProvider;\n const savedModel = settings.agentModel;\n const savedStartupScript = settings.startupScript;\n const savedDevServerScript = settings.devServerScript;\n\n if (savedProviderCli) {\n const provider = agentProvidersData.find(p => p.cli === savedProviderCli);\n if (provider) {\n setSelectedProvider(provider);\n if (savedModel && (savedModel === 'auto' || provider.models.some(m => m.id === savedModel))) {\n setSelectedModel(savedModel);\n } else {\n setSelectedModel('auto');\n }\n } else {\n // Default if saved one is invalid\n setSelectedProvider(agentProvidersData[0]);\n setSelectedModel('auto');\n }\n } else {\n // Default\n setSelectedProvider(agentProvidersData[0]);\n setSelectedModel('auto');\n }\n\n if (savedStartupScript !== undefined && savedStartupScript !== null) {\n setStartupScript(savedStartupScript);\n } else {\n // Determine default based on repo content\n const defaultScript = await getStartupScript(repoPath);\n setStartupScript(defaultScript);\n }\n\n if (savedDevServerScript !== undefined && savedDevServerScript !== null) {\n setDevServerScript(savedDevServerScript);\n } else {\n const defaultDevServerScript = await getDefaultDevServerScript(repoPath);\n setDevServerScript(defaultDevServerScript);\n }\n };\n\n const handleSetDefaultRoot = async (path: string) => {\n const newConfig = await updateConfig({ defaultRoot: path });\n setConfig(newConfig);\n setIsSelectingRoot(false);\n };\n\n const loadBranches = async (repoPath: string) => {\n try {\n const data = await getBranches(repoPath);\n setBranches(data);\n\n const currentConfig = config || await getConfig();\n const settings = currentConfig.repoSettings[repoPath] || {};\n const lastPicked = settings.lastBranch;\n\n // Check current checked out branch\n const currentCheckedOut = data.find(b => b.current)?.name;\n\n if (lastPicked && data.some(b => b.name === lastPicked)) {\n setCurrentBranchName(lastPicked);\n if (lastPicked !== currentCheckedOut) {\n try {\n await checkoutBranch(repoPath, lastPicked);\n const updatedData = await getBranches(repoPath);\n setBranches(updatedData);\n } catch (e) {\n console.warn(\"Could not auto-checkout to remembered branch\", e);\n if (currentCheckedOut) setCurrentBranchName(currentCheckedOut);\n }\n }\n } else {\n if (currentCheckedOut) setCurrentBranchName(currentCheckedOut);\n }\n } catch (e) {\n console.error(\"Failed to load branches\", e);\n setError(\"Failed to load branches.\");\n }\n };\n\n const handleBranchChange = async (e: React.ChangeEvent<HTMLSelectElement>) => {\n const newBranch = e.target.value;\n if (!selectedRepo) return;\n\n setLoading(true);\n try {\n await checkoutBranch(selectedRepo, newBranch);\n setCurrentBranchName(newBranch);\n\n const newConfig = await updateRepoSettings(selectedRepo, { lastBranch: newBranch });\n setConfig(newConfig);\n\n const data = await getBranches(selectedRepo);\n setBranches(data);\n } catch {\n setError(`Failed to checkout branch ${newBranch}`);\n } finally {\n setLoading(false);\n }\n };\n\n const handleProviderChange = async (e: React.ChangeEvent<HTMLSelectElement>) => {\n const cli = e.target.value;\n const provider = agentProvidersData.find(p => p.cli === cli);\n if (provider && selectedRepo) {\n setSelectedProvider(provider);\n // Default to auto\n const defaultModel = 'auto';\n setSelectedModel(defaultModel);\n\n const newConfig = await updateRepoSettings(selectedRepo, {\n agentProvider: provider.cli,\n agentModel: defaultModel\n });\n setConfig(newConfig);\n }\n };\n\n const handleModelChange = async (e: React.ChangeEvent<HTMLSelectElement>) => {\n const model = e.target.value;\n setSelectedModel(model);\n if (selectedRepo) {\n const newConfig = await updateRepoSettings(selectedRepo, { agentModel: model });\n setConfig(newConfig);\n }\n };\n\n const handleSessionModeChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const nextMode = e.target.value === 'plan' ? 'plan' : 'fast';\n setSessionMode(nextMode);\n\n try {\n window.localStorage.setItem(SESSION_MODE_STORAGE_KEY, nextMode);\n } catch {\n // Ignore localStorage errors.\n }\n };\n\n const handleStartupScriptChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const script = e.target.value;\n setStartupScript(script);\n // Debounce saving? Or just save on blur/change?\n // For simplicity, I'll save on change but it triggers server action every keystroke which is bad.\n // Better to save on blur or debounce.\n // Or just save when starting session?\n // The previous code saved on every change to localStorage.\n // Let's rely on saving when starting session? No, we want to persist even if not started.\n // I'll save on blur for now, or just save here and accept the cost.\n // Given the \"async\" nature, let's just save. But it might be laggy.\n // Actually, let's just update local state here, and use `onBlur` to save.\n };\n\n const saveStartupScript = async () => {\n if (selectedRepo) {\n const newConfig = await updateRepoSettings(selectedRepo, { startupScript });\n setConfig(newConfig);\n }\n }\n\n const handleDevServerScriptChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setDevServerScript(e.target.value);\n };\n\n const saveDevServerScriptValue = async (script: string) => {\n if (selectedRepo) {\n const newConfig = await updateRepoSettings(selectedRepo, { devServerScript: script });\n setConfig(newConfig);\n }\n };\n\n const saveDevServerScript = async () => {\n await saveDevServerScriptValue(devServerScript);\n };\n\n const normalizeAttachmentFile = useCallback((file: File, index: number): File => {\n if (file.name && file.name.trim().length > 0) {\n return file;\n }\n\n const extension = file.type\n ? file.type.split('/')[1]?.split('+')[0] || 'bin'\n : 'bin';\n const generatedName = `pasted-file-${Date.now()}-${index + 1}.${extension}`;\n\n return new File([file], generatedName, {\n type: file.type,\n lastModified: file.lastModified || Date.now(),\n });\n }, []);\n\n const appendAttachments = useCallback((incomingFiles: File[]) => {\n if (incomingFiles.length === 0) return;\n\n setAttachments(prev => {\n const byName = new Map(prev.map(file => [file.name, file]));\n incomingFiles.forEach(file => {\n byName.set(file.name, file);\n });\n return Array.from(byName.values());\n });\n }, []);\n\n // Suggestion state\n const [showSuggestions, setShowSuggestions] = useState(false);\n const [suggestionList, setSuggestionList] = useState<string[]>([]);\n const [, setSuggestionQuery] = useState('');\n const [cursorPosition, setCursorPosition] = useState(0);\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n // Cache filtered files\n const [repoFilesCache, setRepoFilesCache] = useState<string[]>([]);\n\n const updateSuggestions = (query: string, files: string[], currentAttachments: File[], carriedAttachments: string[]) => {\n const lowerQ = query.toLowerCase();\n\n const attachmentNames = [...currentAttachments.map(f => f.name), ...carriedAttachments];\n // prioritize attachments\n const matchedAttachments = attachmentNames.filter(n => n.toLowerCase().includes(lowerQ));\n const matchedFiles = files.filter(f => f.toLowerCase().includes(lowerQ)).slice(0, 20);\n\n const newList = [...matchedAttachments, ...matchedFiles];\n setSuggestionList(newList);\n setSelectedIndex(0); // Reset selection\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Cmd+Enter to submit\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleStartSession();\n return;\n }\n\n if (showSuggestions && suggestionList.length > 0) {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setSelectedIndex(prev => (prev > 0 ? prev - 1 : suggestionList.length - 1)); // Wrap around\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n setSelectedIndex(prev => (prev < suggestionList.length - 1 ? prev + 1 : 0)); // Wrap around\n } else if (e.key === 'Enter' || e.key === 'Tab') {\n e.preventDefault();\n handleSelectSuggestion(suggestionList[selectedIndex]);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setShowSuggestions(false);\n }\n }\n };\n\n const handleMessageChange = async (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const val = e.target.value;\n const pos = e.target.selectionStart;\n setInitialMessage(val);\n setCursorPosition(pos);\n\n // Check for @ mention\n const textBeforeCursor = val.substring(0, pos);\n const lastAt = textBeforeCursor.lastIndexOf('@');\n\n if (lastAt !== -1) {\n const query = textBeforeCursor.substring(lastAt + 1);\n if (!/\\s/.test(query)) {\n setSuggestionQuery(query);\n setShowSuggestions(true);\n\n if (selectedRepo) {\n let files = repoFilesCache;\n if (repoFilesCache.length === 0) {\n files = await listRepoFiles(selectedRepo);\n setRepoFilesCache(files);\n }\n updateSuggestions(query, files, attachments, prefilledAttachmentNames);\n }\n return;\n }\n }\n\n setShowSuggestions(false);\n };\n\n const handleSelectSuggestion = (suggestion: string) => {\n const textBeforeCursor = initialMessage.substring(0, cursorPosition);\n const lastAt = textBeforeCursor.lastIndexOf('@');\n\n if (lastAt !== -1) {\n const prefix = initialMessage.substring(0, lastAt);\n const suffix = initialMessage.substring(cursorPosition);\n\n const newValue = `${prefix}@${suggestion} ${suffix}`;\n setInitialMessage(newValue);\n setShowSuggestions(false);\n }\n };\n\n const handleFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!e.target.files) return;\n\n const selectedFiles = Array.from(e.target.files).map((file, index) => normalizeAttachmentFile(file, index));\n appendAttachments(selectedFiles);\n e.target.value = '';\n };\n\n useEffect(() => {\n if (mode !== 'new' || !selectedRepo) return;\n\n const handlePaste = (event: ClipboardEvent) => {\n const clipboardData = event.clipboardData;\n if (!clipboardData) return;\n\n const fromItems = Array.from(clipboardData.items)\n .filter(item => item.kind === 'file')\n .map(item => item.getAsFile())\n .filter((file): file is File => file !== null);\n\n const pastedFiles = (fromItems.length > 0 ? fromItems : Array.from(clipboardData.files))\n .map((file, index) => normalizeAttachmentFile(file, index));\n\n if (pastedFiles.length === 0) return;\n\n event.preventDefault();\n appendAttachments(pastedFiles);\n };\n\n window.addEventListener('paste', handlePaste);\n return () => {\n window.removeEventListener('paste', handlePaste);\n };\n }, [appendAttachments, mode, normalizeAttachmentFile, selectedRepo]);\n\n const removeAttachment = (idx: number) => {\n setAttachments(prev => prev.filter((_, i) => i !== idx));\n };\n\n const removePrefilledAttachment = (idx: number) => {\n setPrefilledAttachmentNames(prev => prev.filter((_, i) => i !== idx));\n };\n\n\n const handleRemoveRecent = async (e: React.MouseEvent, repo: string) => {\n e.stopPropagation();\n if (config) {\n const newRecent = config.recentRepos.filter(r => r !== repo);\n const newConfig = await updateConfig({ recentRepos: newRecent });\n setConfig(newConfig);\n }\n };\n\n const handleOpenRepoSettings = async (e: React.MouseEvent, repo: string) => {\n e.stopPropagation();\n\n setRepoForSettings(repo);\n setRepoCredentialSelection(resolveRepoCredentialSelection(repo));\n setRepoSettingsError(null);\n setIsRepoSettingsDialogOpen(true);\n setIsLoadingCredentialOptions(true);\n\n try {\n const result = await listCredentials();\n if (!result.success) {\n setRepoSettingsError(result.error);\n setCredentialOptions([]);\n } else {\n setCredentialOptions(result.credentials);\n setRepoCredentialSelection(resolveRepoCredentialSelection(repo, result.credentials));\n }\n } catch (err) {\n console.error(err);\n setRepoSettingsError('Failed to load credentials.');\n setCredentialOptions([]);\n } finally {\n setIsLoadingCredentialOptions(false);\n }\n };\n\n const handleSaveRepoSettings = async () => {\n if (!repoForSettings) return;\n const credentialId = repoCredentialSelection === 'auto' ? null : repoCredentialSelection;\n\n if (credentialId && !credentialOptions.some((credential) => credential.id === credentialId)) {\n setRepoSettingsError('Selected credential no longer exists. Please choose another credential.');\n return;\n }\n\n setIsSavingRepoSettings(true);\n setRepoSettingsError(null);\n try {\n const newConfig = await updateRepoSettings(repoForSettings, {\n credentialId,\n credentialPreference: undefined,\n });\n setConfig(newConfig);\n dismissRepoSettingsDialog();\n } catch (err) {\n console.error(err);\n setRepoSettingsError('Failed to save repository settings.');\n } finally {\n setIsSavingRepoSettings(false);\n }\n };\n\n const handleLoginTerminalLoad = useCallback(() => {\n if (!isLoginModalOpen || !loginCommand || !loginTerminalRef.current) {\n return;\n }\n\n const iframe = loginTerminalRef.current;\n const checkAndInject = (attempts = 0) => {\n if (attempts > 40) {\n setLoginModalError('Timed out while waiting for terminal to initialize.');\n return;\n }\n\n try {\n const win = iframe.contentWindow as TerminalWindow | null;\n if (win?.term) {\n win.term.paste(`${loginCommand}\\r`);\n setLoginCommandInjected(true);\n setLoginModalError(null);\n win.focus();\n return;\n }\n\n setTimeout(() => checkAndInject(attempts + 1), 300);\n } catch (e) {\n console.error('Failed to inject login command into terminal iframe:', e);\n setLoginModalError('Could not access ttyd terminal. Ensure ttyd is running and try again.');\n }\n };\n\n setTimeout(() => checkAndInject(), 500);\n }, [isLoginModalOpen, loginCommand]);\n\n const ensureAgentCliReady = useCallback(async (): Promise<boolean> => {\n const agentCli = toSupportedAgentCli(selectedProvider?.cli);\n if (!agentCli) return true;\n\n const checkResult = await checkAgentCliInstalled(agentCli);\n if (!checkResult.success) {\n setError(checkResult.error || `Failed to verify ${AGENT_CLI_LABELS[agentCli]} installation status.`);\n return false;\n }\n\n if (checkResult.installed) {\n return true;\n }\n\n setIsInstallingAgentCli(true);\n setInstallingAgentCli(agentCli);\n setError(null);\n\n const installResult = await installAgentCli(agentCli);\n setIsInstallingAgentCli(false);\n setInstallingAgentCli(null);\n\n if (!installResult.success) {\n setError(installResult.error || `Failed to install ${AGENT_CLI_LABELS[agentCli]}.`);\n return false;\n }\n\n const ttydResult = await startTtydProcess();\n if (!ttydResult.success) {\n setError(ttydResult.error || 'Failed to start ttyd');\n return false;\n }\n\n setLoginAgentCli(agentCli);\n setLoginCommand(AGENT_LOGIN_COMMANDS[agentCli]);\n setLoginCommandInjected(false);\n setLoginModalError(null);\n setIsLoginModalOpen(true);\n return false;\n }, [selectedProvider?.cli, toSupportedAgentCli]);\n\n const startSession = async (options: { skipAgentSetup?: boolean } = {}) => {\n if (!selectedRepo) return;\n setLoading(true);\n setError(null);\n\n try {\n if (!options.skipAgentSetup) {\n const isAgentCliReady = await ensureAgentCliReady();\n if (!isAgentCliReady) {\n setLoading(false);\n return;\n }\n }\n\n const trimmedDevServerScript = devServerScript.trim();\n let resolvedDevServerScript = trimmedDevServerScript;\n\n if (!resolvedDevServerScript) {\n resolvedDevServerScript = await getDefaultDevServerScript(selectedRepo);\n if (resolvedDevServerScript) {\n setDevServerScript(resolvedDevServerScript);\n }\n }\n\n // Also save startup script if changed\n await saveStartupScript();\n await saveDevServerScriptValue(resolvedDevServerScript);\n\n // 1. Start TTYD if needed\n const ttydResult = await startTtydProcess();\n if (!ttydResult.success) {\n setError(ttydResult.error || \"Failed to start ttyd\");\n setLoading(false);\n return;\n }\n\n // 2. Create Session Worktree\n // Use current selected branch as base\n const baseBranch = currentBranchName || 'main'; // Fallback to main if empty, though shouldn't happen\n\n const wtResult = await createSession(selectedRepo, baseBranch, {\n agent: selectedProvider?.cli || 'agent',\n model: selectedModel || '',\n title: title,\n devServerScript: resolvedDevServerScript || undefined\n });\n\n if (wtResult.success && wtResult.sessionName && wtResult.worktreePath && wtResult.branchName) {\n let uploadedAttachmentNames: string[] = [];\n let carriedAttachmentNames: string[] = [];\n\n // Upload newly selected attachments.\n if (attachments.length > 0) {\n const formData = new FormData();\n attachments.forEach(file => formData.append(file.name, file)); // Use filename as key or just 'files'\n // Backend iterates entries [name, file].\n uploadedAttachmentNames = await saveAttachments(wtResult.worktreePath, formData);\n }\n\n // Copy carried attachments from the source session.\n if (prefillSourceSessionName && prefilledAttachmentNames.length > 0) {\n const copiedResult = await copySessionAttachments(\n prefillSourceSessionName,\n wtResult.worktreePath,\n prefilledAttachmentNames\n );\n\n if (!copiedResult.success) {\n setError(copiedResult.error || 'Failed to carry over attachments from source session');\n setLoading(false);\n return;\n }\n\n carriedAttachmentNames = copiedResult.copiedAttachmentNames;\n }\n\n const allAttachmentNames = Array.from(new Set([\n ...uploadedAttachmentNames,\n ...carriedAttachmentNames,\n ]));\n\n // Process initial message mentions\n const trimmedInitialMessage = initialMessage.trim();\n let processedMessage = trimmedInitialMessage;\n\n // Helper to match replacement\n processedMessage = processedMessage.replace(/@(\\S+)/g, (match, name) => {\n if (allAttachmentNames.includes(name)) {\n return `${wtResult.worktreePath}-attachments/${name}`;\n }\n // Assume repo file - keep relative path as we run in worktree root\n return name;\n });\n\n // 3. Persist launch context for the new session\n const launchContextResult = await saveSessionLaunchContext(wtResult.sessionName, {\n title: title || undefined,\n initialMessage: processedMessage || undefined,\n rawInitialMessage: trimmedInitialMessage || undefined,\n startupScript: startupScript || undefined,\n attachmentNames: allAttachmentNames,\n agentProvider: selectedProvider?.cli || 'agent',\n model: selectedModel || '',\n sessionMode,\n });\n\n if (!launchContextResult.success) {\n setError(launchContextResult.error || 'Failed to save session context');\n setLoading(false);\n return;\n }\n\n // 4. Navigate to session page by path only\n const dest = `/session/${wtResult.sessionName}`;\n notifySessionsChanged();\n router.push(dest);\n setLoading(false);\n\n // No need to refresh sessions as we are navigating away\n } else {\n setError(wtResult.error || \"Failed to create session worktree\");\n setLoading(false);\n }\n\n } catch (e) {\n console.error(e);\n setError(\"Failed to start session\");\n setLoading(false);\n }\n };\n\n const handleStartSession = () => {\n void startSession();\n };\n\n const dismissLoginModal = useCallback(() => {\n setIsLoginModalOpen(false);\n setLoginAgentCli(null);\n setLoginCommand('');\n setLoginCommandInjected(false);\n setLoginModalError(null);\n }, []);\n\n const handleLoginDone = async () => {\n dismissLoginModal();\n await startSession({ skipAgentSetup: true });\n };\n\n useDialogKeyboardShortcuts({\n enabled: mode === 'new' && isLoginModalOpen && !!loginAgentCli,\n onConfirm: handleLoginDone,\n onDismiss: dismissLoginModal,\n canConfirm: !loading,\n });\n\n useDialogKeyboardShortcuts({\n enabled: mode === 'home' && isRepoSettingsDialogOpen && !!repoForSettings,\n onConfirm: handleSaveRepoSettings,\n onDismiss: dismissRepoSettingsDialog,\n canConfirm: !isSavingRepoSettings,\n });\n\n useDialogKeyboardShortcuts({\n enabled: mode === 'home' && isCloneRemoteDialogOpen,\n onConfirm: handleCloneRemoteRepo,\n onDismiss: dismissCloneRemoteDialog,\n canConfirm: !isCloningRemote && remoteRepoUrl.trim().length > 0 && !isLoadingCloneCredentialOptions,\n });\n\n const handleResumeSession = async (session: SessionMetadata) => {\n if (!selectedRepo) return;\n setLoading(true);\n\n try {\n // 1. Start TTYD\n const ttydResult = await startTtydProcess();\n if (!ttydResult.success) {\n setError(ttydResult.error || \"Failed to start ttyd\");\n setLoading(false);\n return;\n }\n\n // 2. Navigate — session already has initialized=true so SessionPageClient will resume\n const dest = `/session/${session.sessionName}`;\n router.push(dest);\n setLoading(false);\n\n } catch (e) {\n console.error(e);\n setError(\"Failed to resume session\");\n setLoading(false);\n }\n };\n\n const handleNewAttemptFromSession = (session: SessionMetadata) => {\n if (!selectedRepo) return;\n const nextUrl = `/new?repo=${encodeURIComponent(selectedRepo)}&prefillFromSession=${encodeURIComponent(session.sessionName)}`;\n router.push(nextUrl);\n };\n\n const handleDeleteSession = async (session: SessionMetadata) => {\n if (!selectedRepo) return;\n\n const confirmed = confirm(\n `Delete session \"${session.sessionName}\"?\\n\\nThis will remove the worktree, branch, and session metadata.`\n );\n if (!confirmed) return;\n\n setDeletingSessionName(session.sessionName);\n setError(null);\n\n try {\n const result = await deleteSession(session.sessionName);\n if (!result.success) {\n setError(result.error || 'Failed to delete session');\n return;\n }\n\n const sessions = await listSessions(selectedRepo);\n setExistingSessions(sessions);\n\n // Also refresh all sessions\n const allSess = await listSessions();\n setAllSessions(allSess);\n notifySessionsChanged();\n } catch (e) {\n console.error(e);\n setError('Failed to delete session');\n } finally {\n setDeletingSessionName(null);\n }\n };\n\n const runningSessionCountByRepo = useMemo(() => {\n const counts = new Map<string, number>();\n for (const session of allSessions) {\n counts.set(session.repoPath, (counts.get(session.repoPath) ?? 0) + 1);\n }\n return counts;\n }, [allSessions]);\n\n const recentRepos = config?.recentRepos ?? [];\n const selectableRepos = selectedRepo\n ? (recentRepos.includes(selectedRepo) ? recentRepos : [selectedRepo, ...recentRepos])\n : recentRepos;\n\n return (\n <>\n {mode === 'home' && (\n <div className=\"card w-full max-w-4xl bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <Image src=\"/icon.png\" alt=\"Viba\" width={24} height={24} className=\"rounded-sm\" />\n Viba\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n className=\"btn btn-ghost btn-sm gap-2\"\n onClick={() => router.push('/credentials')}\n title=\"Manage GitHub/GitLab credentials\"\n >\n <KeyRound className=\"w-4 h-4\" />\n Credentials\n </button>\n <button\n className=\"btn btn-ghost btn-sm gap-2\"\n onClick={() => setIsSelectingRoot(true)}\n title={config?.defaultRoot ? `Default: ${config.defaultRoot}` : \"Set default browsing folder\"}\n >\n <FolderCog className=\"w-4 h-4\" />\n {config?.defaultRoot ? \"Change Default\" : \"Set Default Root\"}\n </button>\n <button className=\"btn btn-secondary btn-sm gap-2\" onClick={openCloneRemoteDialog}>\n <CloudDownload className=\"w-4 h-4\" /> Clone Remote Repo\n </button>\n <button className=\"btn btn-primary btn-sm gap-2\" onClick={() => setIsBrowsing(true)}>\n <Plus className=\"w-4 h-4\" /> Open Local Repo\n </button>\n </div>\n </h2>\n\n {error && <div className=\"alert alert-error text-sm py-2 px-3 mt-2\">{error}</div>}\n\n <div className=\"mt-4 space-y-4\">\n\n <div className=\"space-y-2\">\n <h3 className=\"text-sm font-semibold opacity-70 uppercase tracking-wide\">Recent Repositories</h3>\n {!isLoaded ? (\n <div className=\"flex items-center justify-center py-8 bg-base-100 rounded-lg\">\n <span className=\"loading loading-spinner loading-md\"></span>\n </div>\n ) : (!config || config.recentRepos.length === 0) ? (\n <div className=\"text-center py-8 text-base-content/40 italic bg-base-100 rounded-lg\">\n No recent repositories found.\n </div>\n ) : (\n <div className=\"flex flex-col gap-2\">\n {config.recentRepos.map(repo => {\n const credentialLabel = getRepoCredentialLabel(repo);\n const runningSessionCount = runningSessionCountByRepo.get(repo) ?? 0;\n\n return (\n <div\n key={repo}\n onClick={() => handleSelectRepo(repo)}\n className=\"flex items-center justify-between p-3 bg-base-100 hover:bg-base-300 rounded-md cursor-pointer group transition-all border border-base-300\"\n >\n <div className=\"flex items-center gap-3 overflow-hidden shrink min-w-0\">\n <FolderGit2 className=\"w-5 h-5 text-secondary shrink-0\" />\n <div className=\"flex flex-col overflow-hidden\">\n <span className=\"font-medium truncate\">{getBaseName(repo)}</span>\n <span className=\"text-xs opacity-50 truncate\">{repo}</span>\n <span className=\"text-[10px] opacity-60 mt-0.5\">\n Credential: {credentialLabel}\n </span>\n </div>\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {runningSessionCount > 0 && (\n <span\n className=\"badge badge-sm badge-secondary\"\n title={`${runningSessionCount} running session${runningSessionCount === 1 ? '' : 's'}`}\n >\n {runningSessionCount}\n </span>\n )}\n <button\n onClick={(e) => {\n void handleOpenRepoSettings(e, repo);\n }}\n className=\"btn btn-circle btn-ghost btn-xs opacity-0 group-hover:opacity-100\"\n title=\"Repository settings\"\n >\n <Settings className=\"w-3 h-3\" />\n </button>\n <button\n onClick={(e) => handleRemoveRecent(e, repo)}\n className=\"btn btn-circle btn-ghost btn-xs opacity-0 group-hover:opacity-100 text-error\"\n title=\"Remove from history\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n <ChevronRight className=\"w-4 h-4 opacity-30\" />\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'home' && isRepoSettingsDialogOpen && repoForSettings && (\n <div className=\"fixed inset-0 z-[1002] flex items-center justify-center bg-base-content/60 p-4\">\n <div className=\"w-full max-w-xl rounded-xl border border-base-300 bg-base-100 shadow-2xl\">\n <div className=\"space-y-4 p-5 md:p-6\">\n <h3 className=\"text-xl font-semibold\">Repository Settings</h3>\n <p className=\"text-sm opacity-75\">\n Choose which credential this repository should use for authenticated Git operations.\n </p>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs uppercase tracking-wide opacity-70\">Repository</label>\n <div className=\"rounded-md border border-base-300 bg-base-200 px-3 py-2 font-mono text-xs break-all\">\n {repoForSettings}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs uppercase tracking-wide opacity-70\">Credential</label>\n <select\n className=\"select select-bordered w-full\"\n value={repoCredentialSelection}\n onChange={(event) => setRepoCredentialSelection(event.target.value)}\n disabled={isSavingRepoSettings}\n >\n <option value=\"auto\">Auto (match repository remote)</option>\n {credentialOptions.map((credential) => (\n <option key={credential.id} value={credential.id}>\n {getCredentialOptionLabel(credential)}\n </option>\n ))}\n </select>\n {credentialOptions.length === 0 && !isLoadingCredentialOptions && (\n <div className=\"text-xs opacity-60\">\n No credentials found. Add credentials from the Credentials page.\n </div>\n )}\n </div>\n\n {isLoadingCredentialOptions && (\n <div className=\"text-sm opacity-70 flex items-center gap-2\">\n <span className=\"loading loading-spinner loading-xs\"></span>\n Loading credentials...\n </div>\n )}\n\n {repoSettingsError && (\n <div className=\"alert alert-error text-sm py-2\">\n {repoSettingsError}\n </div>\n )}\n\n <div className=\"flex justify-end gap-2 pt-2\">\n <button\n className=\"btn btn-ghost\"\n onClick={dismissRepoSettingsDialog}\n disabled={isSavingRepoSettings}\n >\n Cancel\n </button>\n <button\n className=\"btn btn-primary\"\n onClick={() => void handleSaveRepoSettings()}\n disabled={isSavingRepoSettings || isLoadingCredentialOptions}\n >\n {isSavingRepoSettings ? <span className=\"loading loading-spinner loading-xs\"></span> : null}\n Save\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'home' && isCloneRemoteDialogOpen && (\n <div className=\"fixed inset-0 z-[1002] flex items-center justify-center bg-base-content/60 p-4\">\n <div className=\"w-full max-w-xl rounded-xl border border-base-300 bg-base-100 shadow-2xl\">\n <div className=\"space-y-4 p-5 md:p-6\">\n <h3 className=\"text-xl font-semibold\">Clone Remote Repository</h3>\n <p className=\"text-sm opacity-75\">\n Clone into <span className=\"font-mono\">~/.viba/repos</span> and open it as the selected repository.\n </p>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs uppercase tracking-wide opacity-70\">Remote URL</label>\n <input\n className=\"input input-bordered w-full font-mono text-sm\"\n placeholder=\"https://github.com/org/repo.git\"\n value={remoteRepoUrl}\n onChange={(event) => setRemoteRepoUrl(event.target.value)}\n disabled={isCloningRemote}\n />\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs uppercase tracking-wide opacity-70\">Credential</label>\n <select\n className=\"select select-bordered w-full\"\n value={cloneCredentialSelection}\n onChange={(event) => setCloneCredentialSelection(event.target.value)}\n disabled={isCloningRemote || isLoadingCloneCredentialOptions}\n >\n <option value=\"auto\">Auto (match repository remote)</option>\n {credentialOptions.map((credential) => (\n <option key={credential.id} value={credential.id}>\n {getCredentialOptionLabel(credential)}\n </option>\n ))}\n </select>\n {credentialOptions.length === 0 && !isLoadingCloneCredentialOptions && (\n <div className=\"text-xs opacity-60\">\n No credentials found. Clone will use anonymous access unless remote auth is otherwise configured.\n </div>\n )}\n </div>\n\n {isLoadingCloneCredentialOptions && (\n <div className=\"text-sm opacity-70 flex items-center gap-2\">\n <span className=\"loading loading-spinner loading-xs\"></span>\n Loading credentials...\n </div>\n )}\n\n {isCloningRemote && (\n <div className=\"alert py-2 text-sm flex items-center gap-2\">\n <span className=\"loading loading-spinner loading-xs\"></span>\n Cloning repository...\n </div>\n )}\n\n {cloneRemoteError && (\n <div className=\"alert alert-error text-sm py-2\">\n {cloneRemoteError}\n </div>\n )}\n\n <div className=\"flex justify-end gap-2 pt-2\">\n <button\n className=\"btn btn-ghost\"\n onClick={dismissCloneRemoteDialog}\n disabled={isCloningRemote}\n >\n Cancel\n </button>\n <button\n className=\"btn btn-primary\"\n onClick={() => void handleCloneRemoteRepo()}\n disabled={isCloningRemote || !remoteRepoUrl.trim() || isLoadingCloneCredentialOptions}\n >\n {isCloningRemote ? <span className=\"loading loading-spinner loading-xs\"></span> : null}\n Clone\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'new' && selectedRepo && (\n <div className=\"w-full max-w-6xl space-y-4\">\n {error && <div className=\"alert alert-error text-sm py-2 px-3\">{error}</div>}\n <div className=\"flex flex-col gap-4 w-full\">\n <div className=\"card w-full bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <FolderGit2 className=\"w-6 h-6 text-primary\" />\n Git Repository Selector\n </div>\n <button className=\"btn btn-sm btn-ghost\" onClick={() => router.push('/')}>\n Change Repo\n </button>\n </h2>\n\n <div className=\"mt-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"bg-base-100 p-4 rounded-lg border border-base-300 space-y-2\">\n <label className=\"text-xs opacity-50 uppercase tracking-widest\">Current Repository</label>\n <div className=\"join w-full\">\n <div className=\"join-item bg-base-300 flex items-center px-3 border border-base-content/20 border-r-0\">\n <FolderGit2 className=\"w-4 h-4 text-primary\" />\n </div>\n <select\n className=\"select select-bordered join-item w-full font-mono focus:outline-none\"\n value={selectedRepo}\n onChange={(e) => {\n void handleCurrentRepoChange(e);\n }}\n disabled={loading || selectableRepos.length === 0}\n >\n {selectableRepos.map(repo => (\n <option key={repo} value={repo}>\n {getBaseName(repo)}\n </option>\n ))}\n </select>\n </div>\n <div className=\"text-[10px] opacity-50 font-mono truncate px-1\" title={selectedRepo}>\n {selectedRepo}\n </div>\n </div>\n\n {/* Branch Selection */}\n <div className=\"bg-base-100 p-4 rounded-lg border border-base-300 space-y-2\">\n <div className=\"flex justify-between items-center\">\n <label className=\"text-sm font-medium opacity-70 uppercase tracking-widest\">Current Branch</label>\n {loading && <span className=\"loading loading-spinner loading-xs\"></span>}\n </div>\n\n <div className=\"join w-full\">\n <div className=\"join-item bg-base-300 flex items-center px-3 border border-base-content/20 border-r-0\">\n <GitBranchIcon className=\"w-4 h-4\" />\n </div>\n <select\n className=\"select select-bordered join-item w-full font-mono focus:outline-none\"\n value={currentBranchName}\n onChange={handleBranchChange}\n disabled={loading}\n >\n {branches.map(branch => (\n <option key={branch.name} value={branch.name}>\n {branch.name} {branch.current ? '(checked out)' : ''}\n </option>\n ))}\n </select>\n </div>\n <div className=\"text-[10px] opacity-50 px-1 italic\">\n Switching branches updates the working directory.\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Continue Existing Session Card */}\n {existingSessions.length > 0 && (\n <div className=\"card w-full bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex items-center gap-2\">\n <Play className=\"w-6 h-6 text-success\" />\n Continue Existing Session\n </h2>\n <div className=\"flex flex-col gap-2 mt-4 max-h-64 overflow-y-auto\">\n {existingSessions.map((session) => (\n <div key={session.sessionName} className=\"flex flex-col gap-2 p-3 bg-base-100 rounded-md border border-base-300\">\n <div className=\"flex justify-between items-start\">\n <div>\n {session.title && <div className=\"font-semibold\">{session.title}</div>}\n <div className=\"text-xs opacity-60 font-mono\">{session.sessionName}</div>\n <div className=\"text-xs opacity-60 mt-1\">\n Agent: {session.agent} • Model: {session.model}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n className=\"btn btn-sm btn-success btn-outline gap-2\"\n onClick={() => handleResumeSession(session)}\n disabled={loading || deletingSessionName === session.sessionName}\n >\n <ExternalLink className=\"w-3 h-3\" /> Open\n </button>\n <button\n className=\"btn btn-sm btn-secondary btn-outline gap-2\"\n onClick={() => handleNewAttemptFromSession(session)}\n disabled={loading || deletingSessionName === session.sessionName}\n title=\"Start a new attempt prefilled from this session\"\n >\n <Plus className=\"w-3 h-3\" /> New Attempt\n </button>\n <button\n className=\"btn btn-sm btn-error btn-outline gap-2\"\n onClick={() => handleDeleteSession(session)}\n disabled={loading || deletingSessionName === session.sessionName}\n >\n <Trash2 className=\"w-3 h-3\" />\n {deletingSessionName === session.sessionName ? 'Deleting...' : 'Delete'}\n </button>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {/* Start New Session Card */}\n <div className=\"card w-full bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex items-center gap-2\">\n <Bot className=\"w-6 h-6 text-secondary\" />\n Start New Session\n </h2>\n\n <div className=\"mt-4 space-y-6\">\n <div className=\"space-y-3\">\n <button\n type=\"button\"\n className=\"btn btn-ghost btn-sm px-2 h-auto min-h-0 normal-case justify-start gap-2\"\n onClick={() => setShowSessionAdvanced(prev => !prev)}\n >\n <ChevronRight className={`w-4 h-4 transition-transform ${showSessionAdvanced ? 'rotate-90' : ''}`} />\n {showSessionAdvanced ? 'Hide Session Setup' : collapsedSessionSetupLabel}\n </button>\n\n {showSessionAdvanced && (\n <>\n {/* Agent Selection */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Agent Provider</label>\n <div className=\"join w-full\">\n <div className=\"join-item bg-base-300 flex items-center px-3 border border-base-content/20 border-r-0\">\n <Bot className=\"w-4 h-4\" />\n </div>\n <select\n className=\"select select-bordered join-item w-full focus:outline-none\"\n value={selectedProvider?.cli || ''}\n onChange={handleProviderChange}\n disabled={loading}\n >\n {agentProvidersData.map(provider => (\n <option key={provider.cli} value={provider.cli}>\n {provider.name}\n </option>\n ))}\n </select>\n </div>\n {selectedProvider?.description && (\n <p className=\"text-[10px] opacity-60 mt-1 pl-1 italic leading-tight\">\n {selectedProvider.description}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Model</label>\n <div className=\"join w-full\">\n <div className=\"join-item bg-base-300 flex items-center px-3 border border-base-content/20 border-r-0\">\n <Cpu className=\"w-4 h-4\" />\n </div>\n <select\n className=\"select select-bordered join-item w-full focus:outline-none\"\n value={selectedModel}\n onChange={handleModelChange}\n disabled={loading || !selectedProvider}\n >\n <option value=\"auto\">Auto</option>\n {selectedProvider?.models.map(model => (\n <option key={model.id} value={model.id}>\n {model.label}\n </option>\n ))}\n </select>\n </div>\n {selectedProvider?.models.find(m => m.id === selectedModel)?.description && (\n <p className=\"text-[10px] opacity-60 mt-1 pl-1 italic leading-tight\">\n {selectedProvider.models.find(m => m.id === selectedModel)?.description}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Start up script (Optional)</label>\n <input\n type=\"text\"\n className=\"input input-bordered w-full font-mono text-sm\"\n placeholder=\"npm i\"\n value={startupScript}\n onChange={handleStartupScriptChange}\n onBlur={saveStartupScript}\n onKeyDown={(e) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleStartSession();\n }\n }}\n disabled={loading}\n />\n <div className=\"text-xs opacity-50 px-1\">\n Script to run in the terminal agent iframe upon startup.\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Dev server script (Optional)</label>\n <input\n type=\"text\"\n className=\"input input-bordered w-full font-mono text-sm\"\n placeholder=\"npm run dev\"\n value={devServerScript}\n onChange={handleDevServerScriptChange}\n onBlur={saveDevServerScript}\n onKeyDown={(e) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleStartSession();\n }\n }}\n disabled={loading}\n />\n <div className=\"text-xs opacity-50 px-1\">\n Script for the Session View Start Dev Server button in the right terminal.\n </div>\n </div>\n </>\n )}\n </div>\n\n <div className=\"divider\"></div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Session Mode</label>\n <select\n className=\"select select-bordered w-full focus:outline-none\"\n value={sessionMode}\n onChange={handleSessionModeChange}\n disabled={loading}\n >\n <option value=\"fast\">Fast Mode (default)</option>\n <option value=\"plan\">Plan Mode</option>\n </select>\n <div className=\"text-xs opacity-50 px-1\">\n {sessionMode === 'plan'\n ? 'Plan mode asks the agent to study the repo, propose a plan, and wait for your approval before implementation.'\n : 'Fast mode starts the agent with current behavior.'}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Title (Optional)</label>\n <input\n type=\"text\"\n className=\"input input-bordered w-full font-mono text-sm\"\n placeholder=\"Task Title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n onKeyDown={(e) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleStartSession();\n }\n }}\n disabled={loading}\n />\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Initial Message (Optional)</label>\n <div className=\"relative\">\n <textarea\n className=\"textarea textarea-bordered w-full h-64 font-mono text-sm leading-tight resize-none\"\n placeholder=\"Describe what you want the agent to do... Type @ to mention files.\"\n value={initialMessage}\n onChange={handleMessageChange}\n onKeyDown={handleKeyDown}\n onClick={(e) => {\n setCursorPosition(e.currentTarget.selectionStart);\n setShowSuggestions(false); // Hide on click? Or re-val?\n }}\n onKeyUp={(e) => setCursorPosition(e.currentTarget.selectionStart)}\n disabled={loading}\n ></textarea>\n {showSuggestions && suggestionList.length > 0 && (\n <div className=\"absolute left-0 right-0 z-50 mt-1 max-h-48 overflow-y-auto bg-base-100 border border-base-300 rounded-md shadow-lg\">\n {suggestionList.map((s, idx) => (\n <button\n key={s}\n className={`w-full text-left px-3 py-2 text-xs border-b border-base-200 last:border-0 truncate ${idx === selectedIndex ? 'bg-primary text-primary-content' : 'hover:bg-primary/10'\n }`}\n onMouseDown={(e) => {\n e.preventDefault(); // Prevent blur\n handleSelectSuggestion(s);\n }}\n >\n {s}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Attachments (Optional)</label>\n <input\n type=\"file\"\n multiple\n className=\"file-input file-input-bordered w-full\"\n onChange={handleFileSelect}\n disabled={loading}\n />\n <div className=\"text-xs opacity-50 px-1\">\n Paste files from clipboard with Cmd/Ctrl+V anywhere on this page.\n </div>\n {attachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mt-2\">\n {attachments.map((file, idx) => (\n <span key={`upload-${idx}`} className=\"badge badge-neutral gap-2 p-3\">\n {file.name}\n <button onClick={() => removeAttachment(idx)} className=\"btn btn-ghost btn-xs btn-circle text-error\">\n <X className=\"w-3 h-3\" />\n </button>\n </span>\n ))}\n </div>\n )}\n {prefilledAttachmentNames.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mt-2\">\n {prefilledAttachmentNames.map((name, idx) => (\n <span key={`prefill-${name}-${idx}`} className=\"badge badge-secondary gap-2 p-3\">\n {name}\n <button\n onClick={() => removePrefilledAttachment(idx)}\n className=\"btn btn-ghost btn-xs btn-circle text-error\"\n title=\"Remove carried attachment\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </span>\n ))}\n </div>\n )}\n </div>\n\n <div className=\"card-actions justify-end mt-4\">\n <button\n className=\"btn btn-primary btn-wide shadow-lg\"\n onClick={handleStartSession}\n disabled={loading}\n >\n {loading ? <span className=\"loading loading-spinner\"></span> : \"Start Session\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'new' && !selectedRepo && (\n <div className=\"card w-full max-w-2xl bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n {error && <div className=\"alert alert-error text-sm py-2 px-3\">{error}</div>}\n <h2 className=\"card-title\">Select a Repository</h2>\n <p className=\"opacity-70 text-sm\">Choose a repository first, then start or resume a session.</p>\n <div className=\"card-actions justify-end mt-4\">\n <button className=\"btn btn-primary\" onClick={() => router.push('/')}>\n Go to Home\n </button>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'new' && isInstallingAgentCli && installingAgentCli && (\n <div className=\"fixed inset-0 z-[1000] flex items-center justify-center bg-base-content/45 px-4\">\n <div className=\"w-full max-w-md rounded-xl border border-base-300 bg-base-100 p-6 shadow-2xl\">\n <div className=\"flex items-center gap-4\">\n <span className=\"loading loading-spinner loading-lg text-primary\"></span>\n <div className=\"space-y-1\">\n <h3 className=\"text-lg font-semibold\">Installing {AGENT_CLI_LABELS[installingAgentCli]}</h3>\n <p className=\"text-sm opacity-70\">\n Please wait while we install the coding agent CLI.\n </p>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'new' && isLoginModalOpen && loginAgentCli && (\n <div className=\"fixed inset-0 z-[1001] flex items-center justify-center bg-base-content/60 p-4\">\n <div className=\"w-full max-w-5xl rounded-xl border border-base-300 bg-base-100 shadow-2xl\">\n <div className=\"space-y-4 p-5 md:p-6\">\n <h3 className=\"text-xl font-semibold\">Login Required</h3>\n <p className=\"text-sm opacity-80\">\n {AGENT_CLI_LABELS[loginAgentCli]} has been installed. Complete login in the terminal below, then click Done to continue.\n </p>\n <p className=\"text-xs opacity-60\">\n Command: <span className=\"font-mono\">{loginCommand}</span>\n </p>\n\n <div className=\"h-[420px] overflow-hidden rounded-lg border border-base-300 bg-base-200\">\n <iframe\n ref={loginTerminalRef}\n src=\"/terminal\"\n className=\"h-full w-full border-none\"\n allow=\"clipboard-read; clipboard-write\"\n onLoad={handleLoginTerminalLoad}\n />\n </div>\n\n {loginModalError && (\n <div className=\"alert alert-error text-sm py-2\">\n {loginModalError}\n </div>\n )}\n\n {!loginModalError && (\n <div className=\"text-xs opacity-70\">\n {loginCommandInjected\n ? 'Login command was sent to the terminal automatically.'\n : 'Waiting for terminal to initialize...'}\n </div>\n )}\n\n <div className=\"flex justify-end\">\n <button\n className=\"btn btn-primary\"\n onClick={() => void handleLoginDone()}\n disabled={loading}\n >\n Done\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'new' && !selectedRepo && (!repoPath || !!error) && (\n <div className=\"card w-full max-w-2xl bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex items-center gap-2\">\n <FolderGit2 className=\"w-6 h-6 text-primary\" />\n Git Repository Selector\n </h2>\n {isResolvingRepoFromName ? (\n <div className=\"alert text-sm py-2 px-3 mt-2 flex items-center gap-2\">\n <span className=\"loading loading-spinner loading-sm\"></span>\n {fromRepoName\n ? `Searching for repository \"${fromRepoName}\"...`\n : 'Searching for repository...'}\n </div>\n ) : error ? (\n <div className=\"alert alert-error text-sm py-2 px-3 mt-2\">{error}</div>\n ) : (\n <div className=\"text-sm opacity-70 mt-2\">No repository specified.</div>\n )}\n <div className=\"mt-4\">\n <button className=\"btn btn-primary btn-sm\" onClick={() => router.push('/')}>\n Choose Repository\n </button>\n </div>\n </div>\n </div>\n )}\n\n\n {mode === 'home' && isBrowsing && (\n <FileBrowser\n initialPath={config?.defaultRoot || undefined}\n onSelect={handleSelectRepo}\n onCancel={() => setIsBrowsing(false)}\n checkRepo={checkIsGitRepo}\n />\n )}\n\n {mode === 'home' && isSelectingRoot && (\n <FileBrowser\n title=\"Default Root Folder\"\n initialPath={config?.defaultRoot || undefined}\n onSelect={handleSetDefaultRoot}\n onCancel={() => setIsSelectingRoot(false)}\n />\n )}\n </>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40b7731c0b4ccfe3235e04af10ac6933960b1c52c1\":\"checkDirectoryAccessible\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"40b7731c0b4ccfe3235e04af10ac6933960b1c52c1\",callServer,void 0,findSourceMapURL,\"checkDirectoryAccessible\");export{$$RSC_SERVER_ACTION_3 as checkDirectoryAccessible};","/* __next_internal_action_entry_do_not_use__ [{\"40cc2a04e2a9f4f57928143ed62ba4cfbd0fc547c4\":\"checkAgentCliInstalled\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_7=/*#__PURE__*/createServerReference(\"40cc2a04e2a9f4f57928143ed62ba4cfbd0fc547c4\",callServer,void 0,findSourceMapURL,\"checkAgentCliInstalled\");export{$$RSC_SERVER_ACTION_7 as checkAgentCliInstalled};","/* __next_internal_action_entry_do_not_use__ [{\"40e6d62a77ddeb4fd0e976994a07be3350ecbeb998\":\"installAgentCli\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_8=/*#__PURE__*/createServerReference(\"40e6d62a77ddeb4fd0e976994a07be3350ecbeb998\",callServer,void 0,findSourceMapURL,\"installAgentCli\");export{$$RSC_SERVER_ACTION_8 as installAgentCli};","/* __next_internal_action_entry_do_not_use__ [{\"60fdb41dfb5612c31a59e788e8c88ce958e40d1c3c\":\"cloneRemoteRepository\"},\"src/app/actions/repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"60fdb41dfb5612c31a59e788e8c88ce958e40d1c3c\",callServer,void 0,findSourceMapURL,\"cloneRemoteRepository\");export{$$RSC_SERVER_ACTION_1 as cloneRemoteRepository};","/* __next_internal_action_entry_do_not_use__ [{\"40cfafbb35a703a3d9f2fefab9eea25095f7b501bd\":\"resolveRepositoryByName\"},\"src/app/actions/repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40cfafbb35a703a3d9f2fefab9eea25095f7b501bd\",callServer,void 0,findSourceMapURL,\"resolveRepositoryByName\");export{$$RSC_SERVER_ACTION_0 as resolveRepositoryByName};","/* __next_internal_action_entry_do_not_use__ [{\"7054b143c1e12c70f3864c424246343aaa1f2178a3\":\"copySessionAttachments\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_5=/*#__PURE__*/createServerReference(\"7054b143c1e12c70f3864c424246343aaa1f2178a3\",callServer,void 0,findSourceMapURL,\"copySessionAttachments\");export{$$RSC_SERVER_ACTION_5 as copySessionAttachments};","/* __next_internal_action_entry_do_not_use__ [{\"700eaae678214e5ffda50020144bb61a88e1c40ab0\":\"createSession\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_8=/*#__PURE__*/createServerReference(\"700eaae678214e5ffda50020144bb61a88e1c40ab0\",callServer,void 0,findSourceMapURL,\"createSession\");export{$$RSC_SERVER_ACTION_8 as createSession};","/* __next_internal_action_entry_do_not_use__ [{\"40df7f78788a784ec57af3f3ab16758e69719d1bce\":\"deleteSession\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_10=/*#__PURE__*/createServerReference(\"40df7f78788a784ec57af3f3ab16758e69719d1bce\",callServer,void 0,findSourceMapURL,\"deleteSession\");export{$$RSC_SERVER_ACTION_10 as deleteSession};","/* __next_internal_action_entry_do_not_use__ [{\"40afbaed0d0768b60252430ab6aae26380a599e6c1\":\"getSessionPrefillContext\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_4=/*#__PURE__*/createServerReference(\"40afbaed0d0768b60252430ab6aae26380a599e6c1\",callServer,void 0,findSourceMapURL,\"getSessionPrefillContext\");export{$$RSC_SERVER_ACTION_4 as getSessionPrefillContext};","/* __next_internal_action_entry_do_not_use__ [{\"40cd45754c196cf63a958967dfe2f0737d7a512c9f\":\"listSessions\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_7=/*#__PURE__*/createServerReference(\"40cd45754c196cf63a958967dfe2f0737d7a512c9f\",callServer,void 0,findSourceMapURL,\"listSessions\");export{$$RSC_SERVER_ACTION_7 as listSessions};","/* __next_internal_action_entry_do_not_use__ [{\"60d1acfb8765a96abb52bf81dd4787842b9f5ce448\":\"saveSessionLaunchContext\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"60d1acfb8765a96abb52bf81dd4787842b9f5ce448\",callServer,void 0,findSourceMapURL,\"saveSessionLaunchContext\");export{$$RSC_SERVER_ACTION_2 as saveSessionLaunchContext};","/* __next_internal_action_entry_do_not_use__ [{\"608b0a1d7d84cf5f52da3158bf0ffb8310fe6b185e\":\"updateRepoSettings\"},\"src/app/actions/config.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"608b0a1d7d84cf5f52da3158bf0ffb8310fe6b185e\",callServer,void 0,findSourceMapURL,\"updateRepoSettings\");export{$$RSC_SERVER_ACTION_3 as updateRepoSettings};","/* __next_internal_action_entry_do_not_use__ [{\"7f6b0d598f6b90ab1fd2bf8bcafc41c221b5376b21\":\"listRepoFiles\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_18=/*#__PURE__*/createServerReference(\"7f6b0d598f6b90ab1fd2bf8bcafc41c221b5376b21\",callServer,void 0,findSourceMapURL,\"listRepoFiles\");export{$$RSC_SERVER_ACTION_18 as listRepoFiles};","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 8V4H8', key: 'hb8ula' }],\n ['rect', { width: '16', height: '12', x: '4', y: '8', rx: '2', key: 'enze0r' }],\n ['path', { d: 'M2 14h2', key: 'vft8re' }],\n ['path', { d: 'M20 14h2', key: '4cs60a' }],\n ['path', { d: 'M15 13v2', key: '1xurst' }],\n ['path', { d: 'M9 13v2', key: 'rq6x2g' }],\n];\n\n/**\n * @component @name Bot\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/bot\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Bot = createLucideIcon('bot', __iconNode);\n\nexport default Bot;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 20v2', key: '1lh1kg' }],\n ['path', { d: 'M12 2v2', key: 'tus03m' }],\n ['path', { d: 'M17 20v2', key: '1rnc9c' }],\n ['path', { d: 'M17 2v2', key: '11trls' }],\n ['path', { d: 'M2 12h2', key: '1t8f8n' }],\n ['path', { d: 'M2 17h2', key: '7oei6x' }],\n ['path', { d: 'M2 7h2', key: 'asdhe0' }],\n ['path', { d: 'M20 12h2', key: '1q8mjw' }],\n ['path', { d: 'M20 17h2', key: '1fpfkl' }],\n ['path', { d: 'M20 7h2', key: '1o8tra' }],\n ['path', { d: 'M7 20v2', key: '4gnj0m' }],\n ['path', { d: 'M7 2v2', key: '1i4yhu' }],\n ['rect', { x: '4', y: '4', width: '16', height: '16', rx: '2', key: '1vbyd7' }],\n ['rect', { x: '8', y: '8', width: '8', height: '8', rx: '1', key: 'z9xiuo' }],\n];\n\n/**\n * @component @name Cpu\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/cpu\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Cpu = createLucideIcon('cpu', __iconNode);\n\nexport default Cpu;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 13v8l-4-4', key: '1f5nwf' }],\n ['path', { d: 'm12 21 4-4', key: '1lfcce' }],\n ['path', { d: 'M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284', key: 'ui1hmy' }],\n];\n\n/**\n * @component @name CloudDownload\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/cloud-download\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CloudDownload = createLucideIcon('cloud-download', __iconNode);\n\nexport default CloudDownload;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M10.3 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.98a2 2 0 0 1 1.69.9l.66 1.2A2 2 0 0 0 12 6h8a2 2 0 0 1 2 2v3.3',\n key: '128dxu',\n },\n ],\n ['path', { d: 'm14.305 19.53.923-.382', key: '3m78fa' }],\n ['path', { d: 'm15.228 16.852-.923-.383', key: 'npixar' }],\n ['path', { d: 'm16.852 15.228-.383-.923', key: '5xggr7' }],\n ['path', { d: 'm16.852 20.772-.383.924', key: 'dpfhf9' }],\n ['path', { d: 'm19.148 15.228.383-.923', key: '1reyyz' }],\n ['path', { d: 'm19.53 21.696-.382-.924', key: '1goivc' }],\n ['path', { d: 'm20.772 16.852.924-.383', key: 'htqkph' }],\n ['path', { d: 'm20.772 19.148.924.383', key: '9w9pjp' }],\n ['circle', { cx: '18', cy: '18', r: '3', key: '1xkwt0' }],\n];\n\n/**\n * @component @name FolderCog\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder-cog\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderCog = createLucideIcon('folder-cog', __iconNode);\n\nexport default FolderCog;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915',\n key: '1i5ecw',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3', key: '1v7zrd' }],\n];\n\n/**\n * @component @name Settings\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/settings\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Settings = createLucideIcon('settings', __iconNode);\n\nexport default Settings;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 19a5 5 0 0 1-5-5v8', key: 'sz5oeg' }],\n [\n 'path',\n {\n d: 'M9 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v5',\n key: '1w6njk',\n },\n ],\n ['circle', { cx: '13', cy: '12', r: '2', key: '1j92g6' }],\n ['circle', { cx: '20', cy: '19', r: '2', key: '1obnsp' }],\n];\n\n/**\n * @component @name FolderGit2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder-git-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderGit2 = createLucideIcon('folder-git-2', __iconNode);\n\nexport default FolderGit2;\n"],"names":[],"mappings":"wDOEA,EAAA,EAAA,CAAA,CAAA,sHsBMS,CJAN,AEAG,AHAH,AIAG,ACAG,oHACE,CJCR,CAAA,CAAA,CAAA,CAAA,CAAA,OIEU,CAAA,AAAE,GAAI,CJAH,AEAA,AEAG,CJAH,AEAA,AEAG,CFAH,AEAG,AJAH,CAAA,AIAG,AFAH,CAAA,AFAA,cIA2B,IAAK,UAAU,YAC3C,GAAA,mBAA4B,IAAA,atBV3C,IAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,gCgBgBgC,kDAdhB,CEAA,ADAH,AEAG,AHAA,CGAA,AHAA,ACAH,ACAG,CCAA,AFAH,ADAG,AEAA,4DJWuC,QAbT,CAAA,ACAA,gCDAsC,GM8B9E,EAAA,CAAA,EAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,UAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,6KAtBF,CACvD,sCAA0C,CAAA,CEAD,AFAC,CAAA,AEAD,CFAM,CAAA,AEAD,CAAA,AFAC,CEAD,AFAC,CAAA,AEAD,CAAA,AFAC,CEAD,AFAC,CAAA,AEAD,GFAW,2CACV,CAAA,ACYH,CDZG,ACYH,CAAA,ADZG,CCYH,ADZG,CAAA,ACYH,CDZG,ACYH,CAAU,ACZR,AFAC,GAAU,SAChD,CFAA,AEAA,AAAE,EAAG,CFAA,AEAA,CFAA,AEAA,CFAA,AEAA,CAAA,AFAA,CAAA,AEAA,CFAA,AEAA,CFAA,AEAA,CFAA,AEAA,CAAA,AFAA,CEAA,AFAA,gBEA2B,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,EACvD,CFAA,AEAA,AEYH,CJZG,AEAA,AEYH,KFZW,CAAA,AFAA,4BEAgC,CAAA,AEYP,CAAA,AFZO,CEYP,AFZO,CEYP,AFZO,AAAK,CEYZ,AFZY,CEYZ,AFZY,CAAA,OAAU,CEYN,CAAA,CAAU,CAAA,kCFXnB,CAAA,AFAD,CEAC,AFAD,CEAC,AFAD,CAAA,AEAC,AAAK,CAAA,UAC9C,CAAC,CFAA,AEAA,CAAA,AFAA,CAAA,AEAA,CFAA,AEAA,CAAA,AFAA,CAAA,AEAA,CFAA,AEAA,AAAQ,CFAA,AEAA,4BAAgC,CAAA,AFAF,GEAO,YAC7C,CAAA,CAAA,CAAA,CAAA,GAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,oBAA0B,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,EAAU,EACtD,CFYH,AEZG,CFYH,AEZG,WAAgB,CFYP,CAAA,CAAA,CEZO,AFYP,CAAA,AEZO,QAAgB,EAAA,QAAa,QAAA,CAAU,CAAA,CAC1D,EHGM,CCZH,AEAA,ACAA,CAAA,ADAA,AFAA,ADYS,CGZT,ACAA,AHAA,ADYG,AAAM,CIZT,ADAA,AFAA,ADYG,CAAM,EAAA,OAAA,EAAA,OAAwB,CAAA,AGZpB,AFAiB,AGAE,oDJNf,CAAA,ACAJ,ACAA,AHAA,CGAA,AFAI,ACAJ,AFAA,CCAI,ACAJ,ACAA,AHAA,CAAA,AEAA,ACAA,CAAA,ADAA,AFAA,OCAkB,OAAS,IAAK,EAAG,CAAA,CAAA,CAAA,CAAK,AAAL,CAAK,CAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAK,AAAL,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,sBACrD,IAAA,0GAGA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,AAAK,CAAA,ACAA,CDAA,ACAA,CDAA,ACAA,CAAA,ADAA,CCAA,ADAA,CAAA,ACAA,CDAA,ACAA,IDChC,OCqBY,EAAA,OAAA,EAAA,sGAzBgB,CDAD,AEAX,ADAY,CCAZ,AFAW,ACAC,CDAD,AEAX,ADAY,CAAK,CCAjB,AFAgB,ACAC,CDAD,ACAC,ACAjB,CDAiB,ACAjB,AFAgB,CAAA,ACAC,ACAjB,CDAiB,ACAjB,AFAgB,CAAA,ACAC,ACAjB,CDAiB,ACAjB,eDCA,CFYN,AIZD,ACAA,AJAO,ACAA,CAAA,ADAA,AGAP,AJYC,AKZD,CAAA,AHAO,AEAP,AJYC,ACZM,CIAP,AHAO,ADAA,AGAP,AJYC,CIZD,AHAO,ACAA,AFYN,AKZD,CLYC,AEZM,AGAP,AJAO,AGAP,CHAO,AIAP,AH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","ignoreList":[21,22,23,24,25,26,27,28,29]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/app/actions/data%3A35573b%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Ade6d7d%20%3Ctext/javascript%3E","../../../../src/components/FileBrowser.tsx","../../../../src/app/actions/data%3Aa7280e%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Ab89583%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A63b1db%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Ac8717b%20%3Ctext/javascript%3E","../../../../src/components/GitRepoSelector.tsx","../../../../src/app/actions/data%3Acee727%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A913650%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Ae678c6%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Ace6179%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A7fcc4d%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A71138f%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A135d09%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A1f2e12%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Ac295c8%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Abae1bc%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A6fc553%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A3372aa%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A321bfe%20%3Ctext/javascript%3E","../../../../node_modules/lucide-react/src/icons/chevron-right.ts","../../../../node_modules/lucide-react/src/icons/check.ts","../../../../node_modules/lucide-react/src/icons/x.ts","../../../../node_modules/lucide-react/src/icons/bot.ts","../../../../node_modules/lucide-react/src/icons/cpu.ts","../../../../node_modules/lucide-react/src/icons/cloud-download.ts","../../../../node_modules/lucide-react/src/icons/folder-cog.ts","../../../../node_modules/lucide-react/src/icons/settings.ts","../../../../node_modules/lucide-react/src/icons/folder-git-2.ts"],"sourcesContent":["/* __next_internal_action_entry_do_not_use__ [{\"7f6a15dd7e521d79dd61908dc784fd2013c4bc39b0\":\"getDefaultDevServerScript\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_17=/*#__PURE__*/createServerReference(\"7f6a15dd7e521d79dd61908dc784fd2013c4bc39b0\",callServer,void 0,findSourceMapURL,\"getDefaultDevServerScript\");export{$$RSC_SERVER_ACTION_17 as getDefaultDevServerScript};","/* __next_internal_action_entry_do_not_use__ [{\"4071dd27fbdd25bab02b32c1dd7cae0c7aabe1d331\":\"listDirectories\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"4071dd27fbdd25bab02b32c1dd7cae0c7aabe1d331\",callServer,void 0,findSourceMapURL,\"listDirectories\");export{$$RSC_SERVER_ACTION_2 as listDirectories};","'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { checkDirectoryAccessible, listDirectories, getHomeDirectory } from '@/app/actions/git';\nimport { Folder, ArrowLeft, Check } from 'lucide-react';\nimport { getDirName } from '@/lib/path';\nimport { useDialogKeyboardShortcuts } from '@/hooks/useDialogKeyboardShortcuts';\n\ninterface FileSystemItem {\n name: string;\n path: string;\n isDirectory: boolean;\n isGitRepo: boolean;\n}\n\ninterface FileBrowserProps {\n title?: string;\n initialPath?: string;\n onSelect: (path: string) => void | Promise<unknown>;\n onCancel: () => void;\n checkRepo?: (path: string) => Promise<boolean>;\n}\n\nexport default function FileBrowser({ title, initialPath, onSelect, onCancel, checkRepo }: FileBrowserProps) {\n const [currentPath, setCurrentPath] = useState<string>('');\n const [homePath, setHomePath] = useState<string>('');\n const [items, setItems] = useState<FileSystemItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let isMounted = true;\n\n const init = async () => {\n try {\n const home = await getHomeDirectory();\n if (!isMounted) return;\n\n setHomePath(home);\n setCurrentPath(initialPath || home);\n } catch (err) {\n console.error('Failed to resolve home directory:', err);\n if (!isMounted) return;\n setError('Failed to access your home directory.');\n setCurrentPath(initialPath || '/');\n }\n };\n\n void init();\n\n return () => {\n isMounted = false;\n };\n }, [initialPath]);\n\n useEffect(() => {\n if (!currentPath) return;\n\n let isMounted = true;\n\n const fetchItems = async () => {\n setLoading(true);\n setError(null);\n try {\n const dirs = await listDirectories(currentPath);\n if (!isMounted) return;\n\n if (dirs.length === 0 && homePath && currentPath !== homePath) {\n const accessible = await checkDirectoryAccessible(currentPath);\n if (!isMounted) return;\n\n if (!accessible) {\n setError(`Could not access \"${currentPath}\". Showing home directory.`);\n setCurrentPath(homePath);\n return;\n }\n }\n\n const mapped: FileSystemItem[] = dirs.map(d => ({\n name: d.name,\n path: d.path,\n isDirectory: d.isDirectory,\n isGitRepo: d.isGitRepo\n }));\n setItems(mapped);\n } catch (err) {\n console.error(err);\n if (!isMounted) return;\n\n if (homePath && currentPath !== homePath) {\n setError(`Could not access \"${currentPath}\". Showing home directory.`);\n setCurrentPath(homePath);\n return;\n }\n\n setItems([]);\n setError('Failed to load directory contents');\n } finally {\n if (isMounted) {\n setLoading(false);\n }\n }\n };\n\n void fetchItems();\n\n return () => {\n isMounted = false;\n };\n }, [currentPath, homePath]);\n\n const handleSelectPath = useCallback(async (path: string) => {\n if (checkRepo) {\n const isValid = await checkRepo(path);\n if (!isValid) {\n setError(\"Selected directory is not a valid git repository.\");\n // Clear error after 3 seconds\n setTimeout(() => setError(null), 3000);\n return;\n }\n }\n await onSelect(path);\n }, [checkRepo, onSelect]);\n\n const handleSelect = useCallback(async () => {\n await handleSelectPath(currentPath);\n }, [currentPath, handleSelectPath]);\n\n useDialogKeyboardShortcuts({\n onConfirm: handleSelect,\n onDismiss: onCancel,\n canConfirm: Boolean(currentPath),\n });\n\n const handleNavigate = (path: string) => {\n setCurrentPath(path);\n };\n\n const handleGoUp = () => {\n // Navigate up one directory\n // Use the cross-platform getDirName utility to handle Windows and POSIX paths.\n const parent = getDirName(currentPath);\n if (parent && parent !== currentPath) {\n setCurrentPath(parent);\n }\n };\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4\">\n <div className=\"bg-base-200 rounded-lg shadow-xl w-full max-w-3xl h-[80vh] flex flex-col\">\n {/* Header */}\n <div className=\"flex items-center justify-between p-4 border-b border-base-300\">\n <h2 className=\"text-xl font-bold flex items-center gap-2\">\n <Folder className=\"w-5 h-5\" />\n {title || \"Browse Local Repository\"}\n </h2>\n <button onClick={onCancel} className=\"btn btn-sm btn-ghost btn-circle\">\n ✕\n </button>\n </div>\n\n {/* Current Path Bar */}\n <div className=\"flex items-center gap-2 p-3 bg-base-300\">\n <button\n onClick={handleGoUp}\n className=\"btn btn-sm btn-square btn-ghost\"\n title=\"Go Up\"\n disabled={currentPath === '/' || !currentPath}\n >\n <ArrowLeft className=\"w-4 h-4\" />\n </button>\n <div className=\"flex-1 overflow-x-auto whitespace-nowrap px-2 font-mono text-sm\">\n {currentPath}\n </div>\n <button\n onClick={handleSelect}\n className=\"btn btn-sm btn-primary\"\n >\n Select Current Folder\n </button>\n </div>\n\n {/* List Content */}\n <div className=\"flex-1 overflow-y-auto p-2\">\n {loading ? (\n <div className=\"flex justify-center items-center h-full\">\n <span className=\"loading loading-spinner loading-lg\"></span>\n </div>\n ) : error ? (\n <div className=\"alert alert-error\">{error}</div>\n ) : items.length === 0 ? (\n <div className=\"text-center text-base-content/50 mt-10\">Empty directory</div>\n ) : (\n <div className=\"grid grid-cols-1 gap-1\">\n {items.map((item) => (\n <div\n key={item.path}\n className=\"flex items-center justify-between p-2 hover:bg-base-100 rounded-md cursor-pointer transition-colors\"\n onClick={() => handleNavigate(item.path)}\n >\n <div className=\"flex items-center gap-3 overflow-hidden\">\n <Folder className={`w-5 h-5 ${item.isGitRepo ? 'text-primary' : 'text-base-content/70'}`} />\n <span className=\"truncate\">{item.name}</span>\n {item.isGitRepo && (\n <span className=\"badge badge-xs badge-primary\">git</span>\n )}\n </div>\n {item.isGitRepo && (\n <button\n className=\"btn btn-xs btn-primary\"\n onClick={(e) => {\n e.stopPropagation();\n void handleSelectPath(item.path);\n }}\n title={`Select ${item.name}`}\n >\n <Check className=\"w-3 h-3\" />\n Select\n </button>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Footer info */}\n <div className=\"p-3 border-t border-base-300 text-xs text-base-content/50 text-center\">\n Navigate to a folder and click "Select Current Folder" to choose it.\n </div>\n </div>\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40b539ada759c41a4d5b2f94373b454d817b8b5853\":\"checkIsGitRepo\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_6=/*#__PURE__*/createServerReference(\"40b539ada759c41a4d5b2f94373b454d817b8b5853\",callServer,void 0,findSourceMapURL,\"checkIsGitRepo\");export{$$RSC_SERVER_ACTION_6 as checkIsGitRepo};","/* __next_internal_action_entry_do_not_use__ [{\"4070bef6e368a632fdfb8653bf0b2b46771a1537a1\":\"getBranches\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_4=/*#__PURE__*/createServerReference(\"4070bef6e368a632fdfb8653bf0b2b46771a1537a1\",callServer,void 0,findSourceMapURL,\"getBranches\");export{$$RSC_SERVER_ACTION_4 as getBranches};","/* __next_internal_action_entry_do_not_use__ [{\"602e4b1ef0f5c65211b613592fcc29fe30dd19ddf2\":\"checkoutBranch\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_5=/*#__PURE__*/createServerReference(\"602e4b1ef0f5c65211b613592fcc29fe30dd19ddf2\",callServer,void 0,findSourceMapURL,\"checkoutBranch\");export{$$RSC_SERVER_ACTION_5 as checkoutBranch};","/* __next_internal_action_entry_do_not_use__ [{\"7f56e97b91b82b114b2b888f7669f74f3a3919ceef\":\"getStartupScript\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_16=/*#__PURE__*/createServerReference(\"7f56e97b91b82b114b2b888f7669f74f3a3919ceef\",callServer,void 0,findSourceMapURL,\"getStartupScript\");export{$$RSC_SERVER_ACTION_16 as getStartupScript};","'use client';\n\nimport React, { useState, useEffect, useCallback, useMemo, useRef } from 'react';\nimport { FolderGit2, GitBranch as GitBranchIcon, Plus, X, ChevronRight, FolderCog, Bot, Cpu, Trash2, Play, KeyRound, Settings, ExternalLink, CloudDownload } from 'lucide-react';\nimport FileBrowser from './FileBrowser';\nimport {\n checkIsGitRepo,\n getBranches,\n checkoutBranch,\n GitBranch,\n startTtydProcess,\n getStartupScript,\n getDefaultDevServerScript,\n listRepoFiles,\n saveAttachments,\n checkAgentCliInstalled,\n installAgentCli,\n SupportedAgentCli,\n} from '@/app/actions/git';\nimport { cloneRemoteRepository, resolveRepositoryByName } from '@/app/actions/repository';\nimport { copySessionAttachments, createSession, deleteSession, getSessionPrefillContext, listSessions, saveSessionLaunchContext, SessionMetadata } from '@/app/actions/session';\nimport { getConfig, updateConfig, updateRepoSettings, Config } from '@/app/actions/config';\nimport { listCredentials } from '@/app/actions/credentials';\nimport type { Credential } from '@/lib/credentials';\nimport { useRouter } from 'next/navigation';\nimport { getBaseName } from '@/lib/path';\nimport { notifySessionsUpdated, SESSIONS_UPDATED_EVENT, SESSIONS_UPDATED_STORAGE_KEY } from '@/lib/session-updates';\nimport Image from 'next/image';\nimport { useDialogKeyboardShortcuts } from '@/hooks/useDialogKeyboardShortcuts';\n\nimport agentProvidersDataRaw from '@/data/agent-providers.json';\n\ntype Model = {\n id: string;\n label: string;\n description?: string;\n};\n\ntype AgentProvider = {\n name: string;\n cli: string;\n description?: string;\n models: Model[];\n};\n\ntype SessionMode = 'fast' | 'plan';\ntype RepoCredentialSelection = 'auto' | string;\n\nfunction getCredentialOptionLabel(credential: Credential): string {\n if (credential.type === 'github') {\n return `GitHub - ${credential.username}`;\n }\n\n let host = credential.serverUrl;\n try {\n host = new URL(credential.serverUrl).host;\n } catch {\n // Keep raw server URL if parsing fails.\n }\n\n return `GitLab - ${credential.username} @ ${host}`;\n}\n\nconst agentProvidersData = agentProvidersDataRaw as unknown as AgentProvider[];\nconst SESSION_MODE_STORAGE_KEY = 'viba:new-session-mode';\nconst AGENT_LOGIN_COMMANDS: Record<SupportedAgentCli, string> = {\n gemini: 'gemini',\n codex: 'codex',\n agent: 'agent',\n};\nconst AGENT_CLI_LABELS: Record<SupportedAgentCli, string> = {\n gemini: 'Gemini CLI',\n codex: 'Codex CLI',\n agent: 'Cursor Agent CLI',\n};\n\ntype TerminalWindow = Window & {\n term?: {\n paste: (text: string) => void;\n };\n};\n\ntype GitRepoSelectorProps = {\n mode?: 'home' | 'new';\n repoPath?: string | null;\n fromRepoName?: string | null;\n prefillFromSession?: string | null;\n};\n\nexport default function GitRepoSelector({\n mode = 'home',\n repoPath = null,\n fromRepoName = null,\n prefillFromSession = null,\n}: GitRepoSelectorProps) {\n const [isBrowsing, setIsBrowsing] = useState(false);\n const [isSelectingRoot, setIsSelectingRoot] = useState(false);\n const [isRepoSettingsDialogOpen, setIsRepoSettingsDialogOpen] = useState(false);\n const [isCloneRemoteDialogOpen, setIsCloneRemoteDialogOpen] = useState(false);\n const [remoteRepoUrl, setRemoteRepoUrl] = useState('');\n const [cloneCredentialSelection, setCloneCredentialSelection] = useState<RepoCredentialSelection>('auto');\n const [cloneRemoteError, setCloneRemoteError] = useState<string | null>(null);\n const [isCloningRemote, setIsCloningRemote] = useState(false);\n const [isLoadingCloneCredentialOptions, setIsLoadingCloneCredentialOptions] = useState(false);\n\n const [config, setConfig] = useState<Config | null>(null);\n\n const [selectedRepo, setSelectedRepo] = useState<string | null>(null);\n const [repoForSettings, setRepoForSettings] = useState<string | null>(null);\n const [repoCredentialSelection, setRepoCredentialSelection] = useState<RepoCredentialSelection>('auto');\n const [credentialOptions, setCredentialOptions] = useState<Credential[]>([]);\n\n const router = useRouter();\n\n const [branches, setBranches] = useState<GitBranch[]>([]);\n const [currentBranchName, setCurrentBranchName] = useState<string>('');\n const [existingSessions, setExistingSessions] = useState<SessionMetadata[]>([]);\n const [allSessions, setAllSessions] = useState<SessionMetadata[]>([]);\n\n const [selectedProvider, setSelectedProvider] = useState<AgentProvider | null>(null);\n const [selectedModel, setSelectedModel] = useState<string>('');\n const [startupScript, setStartupScript] = useState<string>('');\n const [devServerScript, setDevServerScript] = useState<string>('');\n const [showSessionAdvanced, setShowSessionAdvanced] = useState(false);\n const [initialMessage, setInitialMessage] = useState<string>('');\n const [title, setTitle] = useState<string>('');\n const [sessionMode, setSessionMode] = useState<SessionMode>('fast');\n const [attachments, setAttachments] = useState<File[]>([]);\n const [prefilledAttachmentNames, setPrefilledAttachmentNames] = useState<string[]>([]);\n const [prefillSourceSessionName, setPrefillSourceSessionName] = useState<string | null>(null);\n const [hasAppliedPrefill, setHasAppliedPrefill] = useState(false);\n\n const [loading, setLoading] = useState(false);\n const [deletingSessionName, setDeletingSessionName] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [isResolvingRepoFromName, setIsResolvingRepoFromName] = useState(false);\n const [isLoaded, setIsLoaded] = useState(false);\n const [isInstallingAgentCli, setIsInstallingAgentCli] = useState(false);\n const [installingAgentCli, setInstallingAgentCli] = useState<SupportedAgentCli | null>(null);\n const [isLoginModalOpen, setIsLoginModalOpen] = useState(false);\n const [loginAgentCli, setLoginAgentCli] = useState<SupportedAgentCli | null>(null);\n const [loginCommand, setLoginCommand] = useState('');\n const [loginCommandInjected, setLoginCommandInjected] = useState(false);\n const [loginModalError, setLoginModalError] = useState<string | null>(null);\n const [repoSettingsError, setRepoSettingsError] = useState<string | null>(null);\n const [isLoadingCredentialOptions, setIsLoadingCredentialOptions] = useState(false);\n const [isSavingRepoSettings, setIsSavingRepoSettings] = useState(false);\n const loginTerminalRef = useRef<HTMLIFrameElement>(null);\n\n const collapsedSessionSetupLabel = selectedProvider && selectedModel\n ? `Show Session Setup (${selectedProvider.name} / ${selectedModel})`\n : 'Show Session Setup';\n\n const notifySessionsChanged = useCallback(() => {\n notifySessionsUpdated();\n }, []);\n\n const refreshSessionData = useCallback(async (repo: string | null = selectedRepo) => {\n try {\n const [allSess, repoSess] = await Promise.all([\n listSessions(),\n repo ? listSessions(repo) : Promise.resolve([] as SessionMetadata[]),\n ]);\n setAllSessions(allSess);\n if (repo) {\n setExistingSessions(repoSess);\n }\n } catch (e) {\n console.error('Failed to refresh sessions', e);\n }\n }, [selectedRepo]);\n\n const toSupportedAgentCli = useCallback((value: string | null | undefined): SupportedAgentCli | null => {\n if (value === 'gemini' || value === 'codex' || value === 'agent') return value;\n return null;\n }, []);\n\n const resolveRepoCredentialSelection = useCallback((repo: string, credentials: Credential[] = credentialOptions): RepoCredentialSelection => {\n const repoSettings = config?.repoSettings?.[repo];\n if (!repoSettings) return 'auto';\n\n if (repoSettings.credentialId) {\n return repoSettings.credentialId;\n }\n\n const legacyPreference = repoSettings.credentialPreference;\n if (legacyPreference === 'github' || legacyPreference === 'gitlab') {\n const matched = credentials.find((credential) => credential.type === legacyPreference);\n if (matched) return matched.id;\n }\n\n return 'auto';\n }, [config, credentialOptions]);\n\n const getRepoCredentialLabel = useCallback((repo: string): string => {\n const repoSettings = config?.repoSettings?.[repo];\n if (!repoSettings) return 'Auto';\n\n if (repoSettings.credentialId) {\n const matched = credentialOptions.find((credential) => credential.id === repoSettings.credentialId);\n return matched ? getCredentialOptionLabel(matched) : 'Selected credential';\n }\n\n if (repoSettings.credentialPreference === 'github') return 'GitHub (legacy)';\n if (repoSettings.credentialPreference === 'gitlab') return 'GitLab (legacy)';\n\n return 'Auto';\n }, [config, credentialOptions]);\n\n const dismissRepoSettingsDialog = useCallback(() => {\n if (isSavingRepoSettings) return;\n setIsRepoSettingsDialogOpen(false);\n setRepoForSettings(null);\n setRepoCredentialSelection('auto');\n setRepoSettingsError(null);\n setIsLoadingCredentialOptions(false);\n }, [isSavingRepoSettings]);\n\n const openCloneRemoteDialog = useCallback(() => {\n setIsCloneRemoteDialogOpen(true);\n setRemoteRepoUrl('');\n setCloneCredentialSelection('auto');\n setCloneRemoteError(null);\n setIsLoadingCloneCredentialOptions(true);\n\n void (async () => {\n try {\n const result = await listCredentials();\n if (!result.success) {\n setCloneRemoteError(result.error);\n return;\n }\n\n setCredentialOptions(result.credentials);\n } catch (error) {\n console.error(error);\n setCloneRemoteError('Failed to load credentials.');\n } finally {\n setIsLoadingCloneCredentialOptions(false);\n }\n })();\n }, []);\n\n const dismissCloneRemoteDialog = useCallback(() => {\n if (isCloningRemote) return;\n setIsCloneRemoteDialogOpen(false);\n setRemoteRepoUrl('');\n setCloneCredentialSelection('auto');\n setCloneRemoteError(null);\n setIsLoadingCloneCredentialOptions(false);\n }, [isCloningRemote]);\n\n // Load config and all sessions on mount\n useEffect(() => {\n const loadData = async () => {\n try {\n const [cfg, sessions, credentialsResult] = await Promise.all([\n getConfig(),\n listSessions(),\n listCredentials(),\n ]);\n setConfig(cfg);\n setAllSessions(sessions);\n if (credentialsResult.success) {\n setCredentialOptions(credentialsResult.credentials);\n }\n } catch (e) {\n console.error('Failed to load data', e);\n } finally {\n setIsLoaded(true);\n }\n };\n loadData();\n }, []);\n\n useEffect(() => {\n if (mode !== 'new') return;\n\n try {\n const storedMode = window.localStorage.getItem(SESSION_MODE_STORAGE_KEY);\n if (storedMode === 'fast' || storedMode === 'plan') {\n setSessionMode(storedMode);\n }\n } catch {\n // Ignore localStorage errors.\n }\n }, [mode]);\n\n useEffect(() => {\n const refresh = () => {\n const repoForList = mode === 'new' ? selectedRepo : null;\n void refreshSessionData(repoForList);\n };\n\n const handleStorage = (event: StorageEvent) => {\n if (event.key === SESSIONS_UPDATED_STORAGE_KEY) {\n refresh();\n }\n };\n\n const handleFocus = () => {\n refresh();\n };\n\n const handleSessionsUpdated = () => {\n refresh();\n };\n\n window.addEventListener('storage', handleStorage);\n window.addEventListener('focus', handleFocus);\n window.addEventListener(SESSIONS_UPDATED_EVENT, handleSessionsUpdated);\n\n return () => {\n window.removeEventListener('storage', handleStorage);\n window.removeEventListener('focus', handleFocus);\n window.removeEventListener(SESSIONS_UPDATED_EVENT, handleSessionsUpdated);\n };\n }, [mode, refreshSessionData, selectedRepo]);\n\n const loadSelectedRepoData = async (path: string) => {\n setSelectedRepo(path);\n setRepoFilesCache([]);\n\n // Load saved provider/model\n await loadSavedAgentSettings(path);\n\n // Load branches\n await loadBranches(path);\n\n await refreshSessionData(path);\n };\n\n const handleSelectRepo = async (path: string) => {\n setLoading(true);\n setError(null);\n try {\n const isValid = await checkIsGitRepo(path);\n if (!isValid) {\n setError('Selected directory is not a valid git repository.');\n return false;\n }\n\n const currentConfig = config || await getConfig();\n let newRecent = [...currentConfig.recentRepos];\n if (!newRecent.includes(path)) {\n newRecent.unshift(path);\n } else {\n // Move to top\n newRecent = [path, ...newRecent.filter(r => r !== path)];\n }\n\n // Update config\n const newConfig = await updateConfig({ recentRepos: newRecent });\n setConfig(newConfig);\n\n setIsBrowsing(false);\n\n if (mode === 'home') {\n router.push(`/new?repo=${encodeURIComponent(path)}`);\n return true;\n }\n\n await loadSelectedRepoData(path);\n return true;\n } catch (err) {\n console.error(err);\n setError('Failed to open repository.');\n return false;\n } finally {\n setLoading(false);\n }\n };\n\n const handleCloneRemoteRepo = async () => {\n if (isCloningRemote) return;\n\n const trimmedRemoteUrl = remoteRepoUrl.trim();\n if (!trimmedRemoteUrl) {\n setCloneRemoteError('Please enter a remote repository URL.');\n return;\n }\n\n setIsCloningRemote(true);\n setCloneRemoteError(null);\n setError(null);\n\n try {\n const result = await cloneRemoteRepository(\n trimmedRemoteUrl,\n cloneCredentialSelection === 'auto' ? null : cloneCredentialSelection,\n );\n\n if (!result.success || !result.repoPath) {\n setCloneRemoteError(result.error || 'Failed to clone repository.');\n return;\n }\n\n const opened = await handleSelectRepo(result.repoPath);\n if (!opened) {\n setCloneRemoteError('Repository was cloned, but failed to open it.');\n return;\n }\n\n setIsCloneRemoteDialogOpen(false);\n setRemoteRepoUrl('');\n setCloneCredentialSelection('auto');\n setCloneRemoteError(null);\n } catch (error) {\n console.error(error);\n setCloneRemoteError('Failed to clone repository.');\n } finally {\n setIsCloningRemote(false);\n }\n };\n\n const handleCurrentRepoChange = async (e: React.ChangeEvent<HTMLSelectElement>) => {\n if (mode !== 'new') return;\n\n const nextRepo = e.target.value;\n if (!nextRepo || nextRepo === selectedRepo) return;\n\n const changed = await handleSelectRepo(nextRepo);\n if (!changed) return;\n\n const params = new URLSearchParams();\n params.set('repo', nextRepo);\n if (prefillFromSession) {\n params.set('prefillFromSession', prefillFromSession);\n }\n\n router.replace(`/new?${params.toString()}`);\n };\n\n useEffect(() => {\n if (mode !== 'new') return;\n\n if (!repoPath) {\n setSelectedRepo(null);\n setExistingSessions([]);\n setBranches([]);\n setCurrentBranchName('');\n return;\n }\n\n if (repoPath === selectedRepo) return;\n void handleSelectRepo(repoPath);\n // `handleSelectRepo` is intentionally excluded to avoid retriggering from function identity changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mode, repoPath, selectedRepo]);\n\n useEffect(() => {\n if (mode !== 'new') return;\n if (repoPath) {\n setIsResolvingRepoFromName(false);\n return;\n }\n\n const trimmedFromRepoName = fromRepoName?.trim() ?? '';\n if (!trimmedFromRepoName) {\n setIsResolvingRepoFromName(false);\n return;\n }\n\n let isCancelled = false;\n\n const resolveFromRepoName = async () => {\n setError(null);\n setIsResolvingRepoFromName(true);\n\n const result = await resolveRepositoryByName(trimmedFromRepoName);\n if (isCancelled) return;\n\n if (!result.success) {\n setError(result.error || 'Failed to search repositories.');\n setIsResolvingRepoFromName(false);\n return;\n }\n\n if (!result.repoPath) {\n setError(`Could not find a matching repository for \"${trimmedFromRepoName}\".`);\n setIsResolvingRepoFromName(false);\n return;\n }\n\n const params = new URLSearchParams();\n params.set('repo', result.repoPath);\n if (prefillFromSession) {\n params.set('prefillFromSession', prefillFromSession);\n }\n router.replace(`/new?${params.toString()}`);\n };\n\n void resolveFromRepoName();\n\n return () => {\n isCancelled = true;\n };\n }, [fromRepoName, mode, prefillFromSession, repoPath, router]);\n\n useEffect(() => {\n setHasAppliedPrefill(false);\n setPrefilledAttachmentNames([]);\n setPrefillSourceSessionName(null);\n }, [prefillFromSession]);\n\n useEffect(() => {\n if (mode !== 'new' || !selectedRepo || !prefillFromSession || hasAppliedPrefill) {\n return;\n }\n\n let isCancelled = false;\n\n const loadPrefill = async () => {\n const prefillResult = await getSessionPrefillContext(prefillFromSession);\n if (isCancelled) return;\n\n if (!prefillResult.success || !prefillResult.context) {\n if (prefillResult.error) {\n setError(prefillResult.error);\n }\n setHasAppliedPrefill(true);\n return;\n }\n\n const context = prefillResult.context;\n if (context.repoPath !== selectedRepo) {\n setHasAppliedPrefill(true);\n return;\n }\n\n const provider = agentProvidersData.find(p => p.cli === context.agentProvider);\n if (provider) {\n setSelectedProvider(provider);\n if (context.model && (context.model === 'auto' || provider.models.some(m => m.id === context.model))) {\n setSelectedModel(context.model);\n } else {\n setSelectedModel('auto');\n }\n }\n\n setTitle(context.title || '');\n setInitialMessage(context.initialMessage || '');\n setPrefilledAttachmentNames(context.attachmentNames || []);\n setPrefillSourceSessionName(context.sourceSessionName);\n setShowSessionAdvanced(true);\n setHasAppliedPrefill(true);\n };\n\n void loadPrefill();\n\n return () => {\n isCancelled = true;\n };\n }, [hasAppliedPrefill, mode, prefillFromSession, selectedRepo]);\n\n const loadSavedAgentSettings = async (repoPath: string) => {\n // Refresh config to ensure we have latest settings?\n // We can just rely on current config state if we assume single user or minimal concurrency.\n // Or we can refetch.\n const currentConfig = config || await getConfig();\n if (!config) setConfig(currentConfig);\n\n const settings = currentConfig.repoSettings[repoPath] || {};\n\n const savedProviderCli = settings.agentProvider;\n const savedModel = settings.agentModel;\n const savedStartupScript = settings.startupScript;\n const savedDevServerScript = settings.devServerScript;\n\n if (savedProviderCli) {\n const provider = agentProvidersData.find(p => p.cli === savedProviderCli);\n if (provider) {\n setSelectedProvider(provider);\n if (savedModel && (savedModel === 'auto' || provider.models.some(m => m.id === savedModel))) {\n setSelectedModel(savedModel);\n } else {\n setSelectedModel('auto');\n }\n } else {\n // Default if saved one is invalid\n setSelectedProvider(agentProvidersData[0]);\n setSelectedModel('auto');\n }\n } else {\n // Default\n setSelectedProvider(agentProvidersData[0]);\n setSelectedModel('auto');\n }\n\n if (savedStartupScript !== undefined && savedStartupScript !== null) {\n setStartupScript(savedStartupScript);\n } else {\n // Determine default based on repo content\n const defaultScript = await getStartupScript(repoPath);\n setStartupScript(defaultScript);\n }\n\n if (savedDevServerScript !== undefined && savedDevServerScript !== null) {\n setDevServerScript(savedDevServerScript);\n } else {\n const defaultDevServerScript = await getDefaultDevServerScript(repoPath);\n setDevServerScript(defaultDevServerScript);\n }\n };\n\n const handleSetDefaultRoot = async (path: string) => {\n const newConfig = await updateConfig({ defaultRoot: path });\n setConfig(newConfig);\n setIsSelectingRoot(false);\n };\n\n const loadBranches = async (repoPath: string) => {\n try {\n const data = await getBranches(repoPath);\n setBranches(data);\n\n const currentConfig = config || await getConfig();\n const settings = currentConfig.repoSettings[repoPath] || {};\n const lastPicked = settings.lastBranch;\n\n // Check current checked out branch\n const currentCheckedOut = data.find(b => b.current)?.name;\n\n if (lastPicked && data.some(b => b.name === lastPicked)) {\n setCurrentBranchName(lastPicked);\n if (lastPicked !== currentCheckedOut) {\n try {\n await checkoutBranch(repoPath, lastPicked);\n const updatedData = await getBranches(repoPath);\n setBranches(updatedData);\n } catch (e) {\n console.warn(\"Could not auto-checkout to remembered branch\", e);\n if (currentCheckedOut) setCurrentBranchName(currentCheckedOut);\n }\n }\n } else {\n if (currentCheckedOut) setCurrentBranchName(currentCheckedOut);\n }\n } catch (e) {\n console.error(\"Failed to load branches\", e);\n setError(\"Failed to load branches.\");\n }\n };\n\n const handleBranchChange = async (e: React.ChangeEvent<HTMLSelectElement>) => {\n const newBranch = e.target.value;\n if (!selectedRepo) return;\n\n setLoading(true);\n try {\n await checkoutBranch(selectedRepo, newBranch);\n setCurrentBranchName(newBranch);\n\n const newConfig = await updateRepoSettings(selectedRepo, { lastBranch: newBranch });\n setConfig(newConfig);\n\n const data = await getBranches(selectedRepo);\n setBranches(data);\n } catch {\n setError(`Failed to checkout branch ${newBranch}`);\n } finally {\n setLoading(false);\n }\n };\n\n const handleProviderChange = async (e: React.ChangeEvent<HTMLSelectElement>) => {\n const cli = e.target.value;\n const provider = agentProvidersData.find(p => p.cli === cli);\n if (provider && selectedRepo) {\n setSelectedProvider(provider);\n // Default to auto\n const defaultModel = 'auto';\n setSelectedModel(defaultModel);\n\n const newConfig = await updateRepoSettings(selectedRepo, {\n agentProvider: provider.cli,\n agentModel: defaultModel\n });\n setConfig(newConfig);\n }\n };\n\n const handleModelChange = async (e: React.ChangeEvent<HTMLSelectElement>) => {\n const model = e.target.value;\n setSelectedModel(model);\n if (selectedRepo) {\n const newConfig = await updateRepoSettings(selectedRepo, { agentModel: model });\n setConfig(newConfig);\n }\n };\n\n const handleSessionModeChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const nextMode = e.target.value === 'plan' ? 'plan' : 'fast';\n setSessionMode(nextMode);\n\n try {\n window.localStorage.setItem(SESSION_MODE_STORAGE_KEY, nextMode);\n } catch {\n // Ignore localStorage errors.\n }\n };\n\n const handleStartupScriptChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const script = e.target.value;\n setStartupScript(script);\n // Debounce saving? Or just save on blur/change?\n // For simplicity, I'll save on change but it triggers server action every keystroke which is bad.\n // Better to save on blur or debounce.\n // Or just save when starting session?\n // The previous code saved on every change to localStorage.\n // Let's rely on saving when starting session? No, we want to persist even if not started.\n // I'll save on blur for now, or just save here and accept the cost.\n // Given the \"async\" nature, let's just save. But it might be laggy.\n // Actually, let's just update local state here, and use `onBlur` to save.\n };\n\n const saveStartupScript = async () => {\n if (selectedRepo) {\n const newConfig = await updateRepoSettings(selectedRepo, { startupScript });\n setConfig(newConfig);\n }\n }\n\n const handleDevServerScriptChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setDevServerScript(e.target.value);\n };\n\n const saveDevServerScriptValue = async (script: string) => {\n if (selectedRepo) {\n const newConfig = await updateRepoSettings(selectedRepo, { devServerScript: script });\n setConfig(newConfig);\n }\n };\n\n const saveDevServerScript = async () => {\n await saveDevServerScriptValue(devServerScript);\n };\n\n const normalizeAttachmentFile = useCallback((file: File, index: number): File => {\n if (file.name && file.name.trim().length > 0) {\n return file;\n }\n\n const extension = file.type\n ? file.type.split('/')[1]?.split('+')[0] || 'bin'\n : 'bin';\n const generatedName = `pasted-file-${Date.now()}-${index + 1}.${extension}`;\n\n return new File([file], generatedName, {\n type: file.type,\n lastModified: file.lastModified || Date.now(),\n });\n }, []);\n\n const appendAttachments = useCallback((incomingFiles: File[]) => {\n if (incomingFiles.length === 0) return;\n\n setAttachments(prev => {\n const byName = new Map(prev.map(file => [file.name, file]));\n incomingFiles.forEach(file => {\n byName.set(file.name, file);\n });\n return Array.from(byName.values());\n });\n }, []);\n\n // Suggestion state\n const [showSuggestions, setShowSuggestions] = useState(false);\n const [suggestionList, setSuggestionList] = useState<string[]>([]);\n const [, setSuggestionQuery] = useState('');\n const [cursorPosition, setCursorPosition] = useState(0);\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n // Cache filtered files\n const [repoFilesCache, setRepoFilesCache] = useState<string[]>([]);\n\n const updateSuggestions = (query: string, files: string[], currentAttachments: File[], carriedAttachments: string[]) => {\n const lowerQ = query.toLowerCase();\n\n const attachmentNames = [...currentAttachments.map(f => f.name), ...carriedAttachments];\n // prioritize attachments\n const matchedAttachments = attachmentNames.filter(n => n.toLowerCase().includes(lowerQ));\n const matchedFiles = files.filter(f => f.toLowerCase().includes(lowerQ)).slice(0, 20);\n\n const newList = [...matchedAttachments, ...matchedFiles];\n setSuggestionList(newList);\n setSelectedIndex(0); // Reset selection\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Cmd+Enter to submit\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleStartSession();\n return;\n }\n\n if (showSuggestions && suggestionList.length > 0) {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setSelectedIndex(prev => (prev > 0 ? prev - 1 : suggestionList.length - 1)); // Wrap around\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n setSelectedIndex(prev => (prev < suggestionList.length - 1 ? prev + 1 : 0)); // Wrap around\n } else if (e.key === 'Enter' || e.key === 'Tab') {\n e.preventDefault();\n handleSelectSuggestion(suggestionList[selectedIndex]);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setShowSuggestions(false);\n }\n }\n };\n\n const handleMessageChange = async (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const val = e.target.value;\n const pos = e.target.selectionStart;\n setInitialMessage(val);\n setCursorPosition(pos);\n\n // Check for @ mention\n const textBeforeCursor = val.substring(0, pos);\n const lastAt = textBeforeCursor.lastIndexOf('@');\n\n if (lastAt !== -1) {\n const query = textBeforeCursor.substring(lastAt + 1);\n if (!/\\s/.test(query)) {\n setSuggestionQuery(query);\n setShowSuggestions(true);\n\n if (selectedRepo) {\n let files = repoFilesCache;\n if (repoFilesCache.length === 0) {\n files = await listRepoFiles(selectedRepo);\n setRepoFilesCache(files);\n }\n updateSuggestions(query, files, attachments, prefilledAttachmentNames);\n }\n return;\n }\n }\n\n setShowSuggestions(false);\n };\n\n const handleSelectSuggestion = (suggestion: string) => {\n const textBeforeCursor = initialMessage.substring(0, cursorPosition);\n const lastAt = textBeforeCursor.lastIndexOf('@');\n\n if (lastAt !== -1) {\n const prefix = initialMessage.substring(0, lastAt);\n const suffix = initialMessage.substring(cursorPosition);\n\n const newValue = `${prefix}@${suggestion} ${suffix}`;\n setInitialMessage(newValue);\n setShowSuggestions(false);\n }\n };\n\n const handleFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!e.target.files) return;\n\n const selectedFiles = Array.from(e.target.files).map((file, index) => normalizeAttachmentFile(file, index));\n appendAttachments(selectedFiles);\n e.target.value = '';\n };\n\n useEffect(() => {\n if (mode !== 'new' || !selectedRepo) return;\n\n const handlePaste = (event: ClipboardEvent) => {\n const clipboardData = event.clipboardData;\n if (!clipboardData) return;\n\n const fromItems = Array.from(clipboardData.items)\n .filter(item => item.kind === 'file')\n .map(item => item.getAsFile())\n .filter((file): file is File => file !== null);\n\n const pastedFiles = (fromItems.length > 0 ? fromItems : Array.from(clipboardData.files))\n .map((file, index) => normalizeAttachmentFile(file, index));\n\n if (pastedFiles.length === 0) return;\n\n event.preventDefault();\n appendAttachments(pastedFiles);\n };\n\n window.addEventListener('paste', handlePaste);\n return () => {\n window.removeEventListener('paste', handlePaste);\n };\n }, [appendAttachments, mode, normalizeAttachmentFile, selectedRepo]);\n\n const removeAttachment = (idx: number) => {\n setAttachments(prev => prev.filter((_, i) => i !== idx));\n };\n\n const removePrefilledAttachment = (idx: number) => {\n setPrefilledAttachmentNames(prev => prev.filter((_, i) => i !== idx));\n };\n\n\n const handleRemoveRecent = async (e: React.MouseEvent, repo: string) => {\n e.stopPropagation();\n if (config) {\n const newRecent = config.recentRepos.filter(r => r !== repo);\n const newConfig = await updateConfig({ recentRepos: newRecent });\n setConfig(newConfig);\n }\n };\n\n const handleOpenRepoSettings = async (e: React.MouseEvent, repo: string) => {\n e.stopPropagation();\n\n setRepoForSettings(repo);\n setRepoCredentialSelection(resolveRepoCredentialSelection(repo));\n setRepoSettingsError(null);\n setIsRepoSettingsDialogOpen(true);\n setIsLoadingCredentialOptions(true);\n\n try {\n const result = await listCredentials();\n if (!result.success) {\n setRepoSettingsError(result.error);\n setCredentialOptions([]);\n } else {\n setCredentialOptions(result.credentials);\n setRepoCredentialSelection(resolveRepoCredentialSelection(repo, result.credentials));\n }\n } catch (err) {\n console.error(err);\n setRepoSettingsError('Failed to load credentials.');\n setCredentialOptions([]);\n } finally {\n setIsLoadingCredentialOptions(false);\n }\n };\n\n const handleSaveRepoSettings = async () => {\n if (!repoForSettings) return;\n const credentialId = repoCredentialSelection === 'auto' ? null : repoCredentialSelection;\n\n if (credentialId && !credentialOptions.some((credential) => credential.id === credentialId)) {\n setRepoSettingsError('Selected credential no longer exists. Please choose another credential.');\n return;\n }\n\n setIsSavingRepoSettings(true);\n setRepoSettingsError(null);\n try {\n const newConfig = await updateRepoSettings(repoForSettings, {\n credentialId,\n credentialPreference: undefined,\n });\n setConfig(newConfig);\n dismissRepoSettingsDialog();\n } catch (err) {\n console.error(err);\n setRepoSettingsError('Failed to save repository settings.');\n } finally {\n setIsSavingRepoSettings(false);\n }\n };\n\n const handleLoginTerminalLoad = useCallback(() => {\n if (!isLoginModalOpen || !loginCommand || !loginTerminalRef.current) {\n return;\n }\n\n const iframe = loginTerminalRef.current;\n const checkAndInject = (attempts = 0) => {\n if (attempts > 40) {\n setLoginModalError('Timed out while waiting for terminal to initialize.');\n return;\n }\n\n try {\n const win = iframe.contentWindow as TerminalWindow | null;\n if (win?.term) {\n win.term.paste(`${loginCommand}\\r`);\n setLoginCommandInjected(true);\n setLoginModalError(null);\n win.focus();\n return;\n }\n\n setTimeout(() => checkAndInject(attempts + 1), 300);\n } catch (e) {\n console.error('Failed to inject login command into terminal iframe:', e);\n setLoginModalError('Could not access ttyd terminal. Ensure ttyd is running and try again.');\n }\n };\n\n setTimeout(() => checkAndInject(), 500);\n }, [isLoginModalOpen, loginCommand]);\n\n const ensureAgentCliReady = useCallback(async (): Promise<boolean> => {\n const agentCli = toSupportedAgentCli(selectedProvider?.cli);\n if (!agentCli) return true;\n\n const checkResult = await checkAgentCliInstalled(agentCli);\n if (!checkResult.success) {\n setError(checkResult.error || `Failed to verify ${AGENT_CLI_LABELS[agentCli]} installation status.`);\n return false;\n }\n\n if (checkResult.installed) {\n return true;\n }\n\n setIsInstallingAgentCli(true);\n setInstallingAgentCli(agentCli);\n setError(null);\n\n const installResult = await installAgentCli(agentCli);\n setIsInstallingAgentCli(false);\n setInstallingAgentCli(null);\n\n if (!installResult.success) {\n setError(installResult.error || `Failed to install ${AGENT_CLI_LABELS[agentCli]}.`);\n return false;\n }\n\n const ttydResult = await startTtydProcess();\n if (!ttydResult.success) {\n setError(ttydResult.error || 'Failed to start ttyd');\n return false;\n }\n\n setLoginAgentCli(agentCli);\n setLoginCommand(AGENT_LOGIN_COMMANDS[agentCli]);\n setLoginCommandInjected(false);\n setLoginModalError(null);\n setIsLoginModalOpen(true);\n return false;\n }, [selectedProvider?.cli, toSupportedAgentCli]);\n\n const startSession = async (options: { skipAgentSetup?: boolean } = {}) => {\n if (!selectedRepo) return;\n setLoading(true);\n setError(null);\n\n try {\n if (!options.skipAgentSetup) {\n const isAgentCliReady = await ensureAgentCliReady();\n if (!isAgentCliReady) {\n setLoading(false);\n return;\n }\n }\n\n const trimmedDevServerScript = devServerScript.trim();\n let resolvedDevServerScript = trimmedDevServerScript;\n\n if (!resolvedDevServerScript) {\n resolvedDevServerScript = await getDefaultDevServerScript(selectedRepo);\n if (resolvedDevServerScript) {\n setDevServerScript(resolvedDevServerScript);\n }\n }\n\n // Also save startup script if changed\n await saveStartupScript();\n await saveDevServerScriptValue(resolvedDevServerScript);\n\n // 1. Start TTYD if needed\n const ttydResult = await startTtydProcess();\n if (!ttydResult.success) {\n setError(ttydResult.error || \"Failed to start ttyd\");\n setLoading(false);\n return;\n }\n\n // 2. Create Session Worktree\n // Use current selected branch as base\n const baseBranch = currentBranchName || 'main'; // Fallback to main if empty, though shouldn't happen\n\n const wtResult = await createSession(selectedRepo, baseBranch, {\n agent: selectedProvider?.cli || 'agent',\n model: selectedModel || '',\n title: title,\n devServerScript: resolvedDevServerScript || undefined\n });\n\n if (wtResult.success && wtResult.sessionName && wtResult.worktreePath && wtResult.branchName) {\n let uploadedAttachmentNames: string[] = [];\n let carriedAttachmentNames: string[] = [];\n\n // Upload newly selected attachments.\n if (attachments.length > 0) {\n const formData = new FormData();\n attachments.forEach(file => formData.append(file.name, file)); // Use filename as key or just 'files'\n // Backend iterates entries [name, file].\n uploadedAttachmentNames = await saveAttachments(wtResult.worktreePath, formData);\n }\n\n // Copy carried attachments from the source session.\n if (prefillSourceSessionName && prefilledAttachmentNames.length > 0) {\n const copiedResult = await copySessionAttachments(\n prefillSourceSessionName,\n wtResult.worktreePath,\n prefilledAttachmentNames\n );\n\n if (!copiedResult.success) {\n setError(copiedResult.error || 'Failed to carry over attachments from source session');\n setLoading(false);\n return;\n }\n\n carriedAttachmentNames = copiedResult.copiedAttachmentNames;\n }\n\n const allAttachmentNames = Array.from(new Set([\n ...uploadedAttachmentNames,\n ...carriedAttachmentNames,\n ]));\n\n // Process initial message mentions\n const trimmedInitialMessage = initialMessage.trim();\n let processedMessage = trimmedInitialMessage;\n\n // Helper to match replacement\n processedMessage = processedMessage.replace(/@(\\S+)/g, (match, name) => {\n if (allAttachmentNames.includes(name)) {\n return `${wtResult.worktreePath}-attachments/${name}`;\n }\n // Assume repo file - keep relative path as we run in worktree root\n return name;\n });\n\n // 3. Persist launch context for the new session\n const launchContextResult = await saveSessionLaunchContext(wtResult.sessionName, {\n title: title || undefined,\n initialMessage: processedMessage || undefined,\n rawInitialMessage: trimmedInitialMessage || undefined,\n startupScript: startupScript || undefined,\n attachmentNames: allAttachmentNames,\n agentProvider: selectedProvider?.cli || 'agent',\n model: selectedModel || '',\n sessionMode,\n });\n\n if (!launchContextResult.success) {\n setError(launchContextResult.error || 'Failed to save session context');\n setLoading(false);\n return;\n }\n\n // 4. Navigate to session page by path only\n const dest = `/session/${wtResult.sessionName}`;\n notifySessionsChanged();\n router.push(dest);\n setLoading(false);\n\n // No need to refresh sessions as we are navigating away\n } else {\n setError(wtResult.error || \"Failed to create session worktree\");\n setLoading(false);\n }\n\n } catch (e) {\n console.error(e);\n setError(\"Failed to start session\");\n setLoading(false);\n }\n };\n\n const handleStartSession = () => {\n void startSession();\n };\n\n const dismissLoginModal = useCallback(() => {\n setIsLoginModalOpen(false);\n setLoginAgentCli(null);\n setLoginCommand('');\n setLoginCommandInjected(false);\n setLoginModalError(null);\n }, []);\n\n const handleLoginDone = async () => {\n dismissLoginModal();\n await startSession({ skipAgentSetup: true });\n };\n\n useDialogKeyboardShortcuts({\n enabled: mode === 'new' && isLoginModalOpen && !!loginAgentCli,\n onConfirm: handleLoginDone,\n onDismiss: dismissLoginModal,\n canConfirm: !loading,\n });\n\n useDialogKeyboardShortcuts({\n enabled: mode === 'home' && isRepoSettingsDialogOpen && !!repoForSettings,\n onConfirm: handleSaveRepoSettings,\n onDismiss: dismissRepoSettingsDialog,\n canConfirm: !isSavingRepoSettings,\n });\n\n useDialogKeyboardShortcuts({\n enabled: mode === 'home' && isCloneRemoteDialogOpen,\n onConfirm: handleCloneRemoteRepo,\n onDismiss: dismissCloneRemoteDialog,\n canConfirm: !isCloningRemote && remoteRepoUrl.trim().length > 0 && !isLoadingCloneCredentialOptions,\n });\n\n const handleResumeSession = async (session: SessionMetadata) => {\n if (!selectedRepo) return;\n setLoading(true);\n\n try {\n // 1. Start TTYD\n const ttydResult = await startTtydProcess();\n if (!ttydResult.success) {\n setError(ttydResult.error || \"Failed to start ttyd\");\n setLoading(false);\n return;\n }\n\n // 2. Navigate — session already has initialized=true so SessionPageClient will resume\n const dest = `/session/${session.sessionName}`;\n router.push(dest);\n setLoading(false);\n\n } catch (e) {\n console.error(e);\n setError(\"Failed to resume session\");\n setLoading(false);\n }\n };\n\n const handleNewAttemptFromSession = (session: SessionMetadata) => {\n if (!selectedRepo) return;\n const nextUrl = `/new?repo=${encodeURIComponent(selectedRepo)}&prefillFromSession=${encodeURIComponent(session.sessionName)}`;\n router.push(nextUrl);\n };\n\n const handleDeleteSession = async (session: SessionMetadata) => {\n if (!selectedRepo) return;\n\n const confirmed = confirm(\n `Delete session \"${session.sessionName}\"?\\n\\nThis will remove the worktree, branch, and session metadata.`\n );\n if (!confirmed) return;\n\n setDeletingSessionName(session.sessionName);\n setError(null);\n\n try {\n const result = await deleteSession(session.sessionName);\n if (!result.success) {\n setError(result.error || 'Failed to delete session');\n return;\n }\n\n const sessions = await listSessions(selectedRepo);\n setExistingSessions(sessions);\n\n // Also refresh all sessions\n const allSess = await listSessions();\n setAllSessions(allSess);\n notifySessionsChanged();\n } catch (e) {\n console.error(e);\n setError('Failed to delete session');\n } finally {\n setDeletingSessionName(null);\n }\n };\n\n const runningSessionCountByRepo = useMemo(() => {\n const counts = new Map<string, number>();\n for (const session of allSessions) {\n counts.set(session.repoPath, (counts.get(session.repoPath) ?? 0) + 1);\n }\n return counts;\n }, [allSessions]);\n\n const recentRepos = config?.recentRepos ?? [];\n const selectableRepos = selectedRepo\n ? (recentRepos.includes(selectedRepo) ? recentRepos : [selectedRepo, ...recentRepos])\n : recentRepos;\n\n return (\n <>\n {mode === 'home' && (\n <div className=\"card w-full max-w-4xl bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <Image src=\"/icon.png\" alt=\"Viba\" width={24} height={24} className=\"rounded-sm\" />\n Viba\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n className=\"btn btn-ghost btn-sm gap-2\"\n onClick={() => router.push('/credentials')}\n title=\"Manage GitHub/GitLab credentials\"\n >\n <KeyRound className=\"w-4 h-4\" />\n Credentials\n </button>\n <button\n className=\"btn btn-ghost btn-sm gap-2\"\n onClick={() => setIsSelectingRoot(true)}\n title={config?.defaultRoot ? `Default: ${config.defaultRoot}` : \"Set default browsing folder\"}\n >\n <FolderCog className=\"w-4 h-4\" />\n {config?.defaultRoot ? \"Change Default\" : \"Set Default Root\"}\n </button>\n <button className=\"btn btn-secondary btn-sm gap-2\" onClick={openCloneRemoteDialog}>\n <CloudDownload className=\"w-4 h-4\" /> Clone Remote Repo\n </button>\n <button className=\"btn btn-primary btn-sm gap-2\" onClick={() => setIsBrowsing(true)}>\n <Plus className=\"w-4 h-4\" /> Open Local Repo\n </button>\n </div>\n </h2>\n\n {error && <div className=\"alert alert-error text-sm py-2 px-3 mt-2\">{error}</div>}\n\n <div className=\"mt-4 space-y-4\">\n\n <div className=\"space-y-2\">\n <h3 className=\"text-sm font-semibold opacity-70 uppercase tracking-wide\">Recent Repositories</h3>\n {!isLoaded ? (\n <div className=\"flex items-center justify-center py-8 bg-base-100 rounded-lg\">\n <span className=\"loading loading-spinner loading-md\"></span>\n </div>\n ) : (!config || config.recentRepos.length === 0) ? (\n <div className=\"text-center py-8 text-base-content/40 italic bg-base-100 rounded-lg\">\n No recent repositories found.\n </div>\n ) : (\n <div className=\"flex flex-col gap-2\">\n {config.recentRepos.map(repo => {\n const credentialLabel = getRepoCredentialLabel(repo);\n const runningSessionCount = runningSessionCountByRepo.get(repo) ?? 0;\n\n return (\n <div\n key={repo}\n onClick={() => handleSelectRepo(repo)}\n className=\"flex items-center justify-between p-3 bg-base-100 hover:bg-base-300 rounded-md cursor-pointer group transition-all border border-base-300\"\n >\n <div className=\"flex items-center gap-3 overflow-hidden shrink min-w-0\">\n <FolderGit2 className=\"w-5 h-5 text-secondary shrink-0\" />\n <div className=\"flex flex-col overflow-hidden\">\n <span className=\"font-medium truncate\">{getBaseName(repo)}</span>\n <span className=\"text-xs opacity-50 truncate\">{repo}</span>\n <span className=\"text-[10px] opacity-60 mt-0.5\">\n Credential: {credentialLabel}\n </span>\n </div>\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {runningSessionCount > 0 && (\n <span\n className=\"badge badge-sm badge-secondary\"\n title={`${runningSessionCount} running session${runningSessionCount === 1 ? '' : 's'}`}\n >\n {runningSessionCount}\n </span>\n )}\n <button\n onClick={(e) => {\n void handleOpenRepoSettings(e, repo);\n }}\n className=\"btn btn-circle btn-ghost btn-xs opacity-0 group-hover:opacity-100\"\n title=\"Repository settings\"\n >\n <Settings className=\"w-3 h-3\" />\n </button>\n <button\n onClick={(e) => handleRemoveRecent(e, repo)}\n className=\"btn btn-circle btn-ghost btn-xs opacity-0 group-hover:opacity-100 text-error\"\n title=\"Remove from history\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n <ChevronRight className=\"w-4 h-4 opacity-30\" />\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'home' && isRepoSettingsDialogOpen && repoForSettings && (\n <div className=\"fixed inset-0 z-[1002] flex items-center justify-center bg-base-content/60 p-4\">\n <div className=\"w-full max-w-xl rounded-xl border border-base-300 bg-base-100 shadow-2xl\">\n <div className=\"space-y-4 p-5 md:p-6\">\n <h3 className=\"text-xl font-semibold\">Repository Settings</h3>\n <p className=\"text-sm opacity-75\">\n Choose which credential this repository should use for authenticated Git operations.\n </p>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs uppercase tracking-wide opacity-70\">Repository</label>\n <div className=\"rounded-md border border-base-300 bg-base-200 px-3 py-2 font-mono text-xs break-all\">\n {repoForSettings}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs uppercase tracking-wide opacity-70\">Credential</label>\n <select\n className=\"select select-bordered w-full\"\n value={repoCredentialSelection}\n onChange={(event) => setRepoCredentialSelection(event.target.value)}\n disabled={isSavingRepoSettings}\n >\n <option value=\"auto\">Auto (match repository remote)</option>\n {credentialOptions.map((credential) => (\n <option key={credential.id} value={credential.id}>\n {getCredentialOptionLabel(credential)}\n </option>\n ))}\n </select>\n {credentialOptions.length === 0 && !isLoadingCredentialOptions && (\n <div className=\"text-xs opacity-60\">\n No credentials found. Add credentials from the Credentials page.\n </div>\n )}\n </div>\n\n {isLoadingCredentialOptions && (\n <div className=\"text-sm opacity-70 flex items-center gap-2\">\n <span className=\"loading loading-spinner loading-xs\"></span>\n Loading credentials...\n </div>\n )}\n\n {repoSettingsError && (\n <div className=\"alert alert-error text-sm py-2\">\n {repoSettingsError}\n </div>\n )}\n\n <div className=\"flex justify-end gap-2 pt-2\">\n <button\n className=\"btn btn-ghost\"\n onClick={dismissRepoSettingsDialog}\n disabled={isSavingRepoSettings}\n >\n Cancel\n </button>\n <button\n className=\"btn btn-primary\"\n onClick={() => void handleSaveRepoSettings()}\n disabled={isSavingRepoSettings || isLoadingCredentialOptions}\n >\n {isSavingRepoSettings ? <span className=\"loading loading-spinner loading-xs\"></span> : null}\n Save\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'home' && isCloneRemoteDialogOpen && (\n <div className=\"fixed inset-0 z-[1002] flex items-center justify-center bg-base-content/60 p-4\">\n <div className=\"w-full max-w-xl rounded-xl border border-base-300 bg-base-100 shadow-2xl\">\n <div className=\"space-y-4 p-5 md:p-6\">\n <h3 className=\"text-xl font-semibold\">Clone Remote Repository</h3>\n <p className=\"text-sm opacity-75\">\n Clone into <span className=\"font-mono\">~/.viba/repos</span> and open it as the selected repository.\n </p>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs uppercase tracking-wide opacity-70\">Remote URL</label>\n <input\n className=\"input input-bordered w-full font-mono text-sm\"\n placeholder=\"https://github.com/org/repo.git\"\n value={remoteRepoUrl}\n onChange={(event) => setRemoteRepoUrl(event.target.value)}\n disabled={isCloningRemote}\n />\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs uppercase tracking-wide opacity-70\">Credential</label>\n <select\n className=\"select select-bordered w-full\"\n value={cloneCredentialSelection}\n onChange={(event) => setCloneCredentialSelection(event.target.value)}\n disabled={isCloningRemote || isLoadingCloneCredentialOptions}\n >\n <option value=\"auto\">Auto (match repository remote)</option>\n {credentialOptions.map((credential) => (\n <option key={credential.id} value={credential.id}>\n {getCredentialOptionLabel(credential)}\n </option>\n ))}\n </select>\n {credentialOptions.length === 0 && !isLoadingCloneCredentialOptions && (\n <div className=\"text-xs opacity-60\">\n No credentials found. Clone will use anonymous access unless remote auth is otherwise configured.\n </div>\n )}\n </div>\n\n {isLoadingCloneCredentialOptions && (\n <div className=\"text-sm opacity-70 flex items-center gap-2\">\n <span className=\"loading loading-spinner loading-xs\"></span>\n Loading credentials...\n </div>\n )}\n\n {isCloningRemote && (\n <div className=\"alert py-2 text-sm flex items-center gap-2\">\n <span className=\"loading loading-spinner loading-xs\"></span>\n Cloning repository...\n </div>\n )}\n\n {cloneRemoteError && (\n <div className=\"alert alert-error text-sm py-2\">\n {cloneRemoteError}\n </div>\n )}\n\n <div className=\"flex justify-end gap-2 pt-2\">\n <button\n className=\"btn btn-ghost\"\n onClick={dismissCloneRemoteDialog}\n disabled={isCloningRemote}\n >\n Cancel\n </button>\n <button\n className=\"btn btn-primary\"\n onClick={() => void handleCloneRemoteRepo()}\n disabled={isCloningRemote || !remoteRepoUrl.trim() || isLoadingCloneCredentialOptions}\n >\n {isCloningRemote ? <span className=\"loading loading-spinner loading-xs\"></span> : null}\n Clone\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'new' && selectedRepo && (\n <div className=\"w-full max-w-6xl space-y-4\">\n {error && <div className=\"alert alert-error text-sm py-2 px-3\">{error}</div>}\n <div className=\"flex flex-col gap-4 w-full\">\n <div className=\"card w-full bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <FolderGit2 className=\"w-6 h-6 text-primary\" />\n Git Repository Selector\n </div>\n <button className=\"btn btn-sm btn-ghost\" onClick={() => router.push('/')}>\n Change Repo\n </button>\n </h2>\n\n <div className=\"mt-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"bg-base-100 p-4 rounded-lg border border-base-300 space-y-2\">\n <label className=\"text-xs opacity-50 uppercase tracking-widest\">Current Repository</label>\n <div className=\"join w-full\">\n <div className=\"join-item bg-base-300 flex items-center px-3 border border-base-content/20 border-r-0\">\n <FolderGit2 className=\"w-4 h-4 text-primary\" />\n </div>\n <select\n className=\"select select-bordered join-item w-full font-mono focus:outline-none\"\n value={selectedRepo}\n onChange={(e) => {\n void handleCurrentRepoChange(e);\n }}\n disabled={loading || selectableRepos.length === 0}\n >\n {selectableRepos.map(repo => (\n <option key={repo} value={repo}>\n {getBaseName(repo)}\n </option>\n ))}\n </select>\n </div>\n <div className=\"text-[10px] opacity-50 font-mono truncate px-1\" title={selectedRepo}>\n {selectedRepo}\n </div>\n </div>\n\n {/* Branch Selection */}\n <div className=\"bg-base-100 p-4 rounded-lg border border-base-300 space-y-2\">\n <div className=\"flex justify-between items-center\">\n <label className=\"text-sm font-medium opacity-70 uppercase tracking-widest\">Current Branch</label>\n {loading && <span className=\"loading loading-spinner loading-xs\"></span>}\n </div>\n\n <div className=\"join w-full\">\n <div className=\"join-item bg-base-300 flex items-center px-3 border border-base-content/20 border-r-0\">\n <GitBranchIcon className=\"w-4 h-4\" />\n </div>\n <select\n className=\"select select-bordered join-item w-full font-mono focus:outline-none\"\n value={currentBranchName}\n onChange={handleBranchChange}\n disabled={loading}\n >\n {branches.map(branch => (\n <option key={branch.name} value={branch.name}>\n {branch.name} {branch.current ? '(checked out)' : ''}\n </option>\n ))}\n </select>\n </div>\n <div className=\"text-[10px] opacity-50 px-1 italic\">\n Switching branches updates the working directory.\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Continue Existing Session Card */}\n {existingSessions.length > 0 && (\n <div className=\"card w-full bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex items-center gap-2\">\n <Play className=\"w-6 h-6 text-success\" />\n Continue Existing Session\n </h2>\n <div className=\"flex flex-col gap-2 mt-4 max-h-64 overflow-y-auto\">\n {existingSessions.map((session) => (\n <div key={session.sessionName} className=\"flex flex-col gap-2 p-3 bg-base-100 rounded-md border border-base-300\">\n <div className=\"flex justify-between items-start\">\n <div>\n {session.title && <div className=\"font-semibold\">{session.title}</div>}\n <div className=\"text-xs opacity-60 font-mono\">{session.sessionName}</div>\n <div className=\"text-xs opacity-60 mt-1\">\n Agent: {session.agent} • Model: {session.model}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n className=\"btn btn-sm btn-success btn-outline gap-2\"\n onClick={() => handleResumeSession(session)}\n disabled={loading || deletingSessionName === session.sessionName}\n >\n <ExternalLink className=\"w-3 h-3\" /> Open\n </button>\n <button\n className=\"btn btn-sm btn-secondary btn-outline gap-2\"\n onClick={() => handleNewAttemptFromSession(session)}\n disabled={loading || deletingSessionName === session.sessionName}\n title=\"Start a new attempt prefilled from this session\"\n >\n <Plus className=\"w-3 h-3\" /> New Attempt\n </button>\n <button\n className=\"btn btn-sm btn-error btn-outline gap-2\"\n onClick={() => handleDeleteSession(session)}\n disabled={loading || deletingSessionName === session.sessionName}\n >\n <Trash2 className=\"w-3 h-3\" />\n {deletingSessionName === session.sessionName ? 'Deleting...' : 'Delete'}\n </button>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {/* Start New Session Card */}\n <div className=\"card w-full bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex items-center gap-2\">\n <Bot className=\"w-6 h-6 text-secondary\" />\n Start New Session\n </h2>\n\n <div className=\"mt-4 space-y-6\">\n <div className=\"space-y-3\">\n <button\n type=\"button\"\n className=\"btn btn-ghost btn-sm px-2 h-auto min-h-0 normal-case justify-start gap-2\"\n onClick={() => setShowSessionAdvanced(prev => !prev)}\n >\n <ChevronRight className={`w-4 h-4 transition-transform ${showSessionAdvanced ? 'rotate-90' : ''}`} />\n {showSessionAdvanced ? 'Hide Session Setup' : collapsedSessionSetupLabel}\n </button>\n\n {showSessionAdvanced && (\n <>\n {/* Agent Selection */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Agent Provider</label>\n <div className=\"join w-full\">\n <div className=\"join-item bg-base-300 flex items-center px-3 border border-base-content/20 border-r-0\">\n <Bot className=\"w-4 h-4\" />\n </div>\n <select\n className=\"select select-bordered join-item w-full focus:outline-none\"\n value={selectedProvider?.cli || ''}\n onChange={handleProviderChange}\n disabled={loading}\n >\n {agentProvidersData.map(provider => (\n <option key={provider.cli} value={provider.cli}>\n {provider.name}\n </option>\n ))}\n </select>\n </div>\n {selectedProvider?.description && (\n <p className=\"text-[10px] opacity-60 mt-1 pl-1 italic leading-tight\">\n {selectedProvider.description}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Model</label>\n <div className=\"join w-full\">\n <div className=\"join-item bg-base-300 flex items-center px-3 border border-base-content/20 border-r-0\">\n <Cpu className=\"w-4 h-4\" />\n </div>\n <select\n className=\"select select-bordered join-item w-full focus:outline-none\"\n value={selectedModel}\n onChange={handleModelChange}\n disabled={loading || !selectedProvider}\n >\n <option value=\"auto\">Auto</option>\n {selectedProvider?.models.map(model => (\n <option key={model.id} value={model.id}>\n {model.label}\n </option>\n ))}\n </select>\n </div>\n {selectedProvider?.models.find(m => m.id === selectedModel)?.description && (\n <p className=\"text-[10px] opacity-60 mt-1 pl-1 italic leading-tight\">\n {selectedProvider.models.find(m => m.id === selectedModel)?.description}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Start up script (Optional)</label>\n <input\n type=\"text\"\n className=\"input input-bordered w-full font-mono text-sm\"\n placeholder=\"npm i\"\n value={startupScript}\n onChange={handleStartupScriptChange}\n onBlur={saveStartupScript}\n onKeyDown={(e) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleStartSession();\n }\n }}\n disabled={loading}\n />\n <div className=\"text-xs opacity-50 px-1\">\n Script to run in the terminal agent iframe upon startup.\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Dev server script (Optional)</label>\n <input\n type=\"text\"\n className=\"input input-bordered w-full font-mono text-sm\"\n placeholder=\"npm run dev\"\n value={devServerScript}\n onChange={handleDevServerScriptChange}\n onBlur={saveDevServerScript}\n onKeyDown={(e) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleStartSession();\n }\n }}\n disabled={loading}\n />\n <div className=\"text-xs opacity-50 px-1\">\n Script for the Session View Start Dev Server button in the right terminal.\n </div>\n </div>\n </>\n )}\n </div>\n\n <div className=\"divider\"></div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Session Mode</label>\n <select\n className=\"select select-bordered w-full focus:outline-none\"\n value={sessionMode}\n onChange={handleSessionModeChange}\n disabled={loading}\n >\n <option value=\"fast\">Fast Mode (default)</option>\n <option value=\"plan\">Plan Mode</option>\n </select>\n <div className=\"text-xs opacity-50 px-1\">\n {sessionMode === 'plan'\n ? 'Plan mode asks the agent to study the repo, propose a plan, and wait for your approval before implementation.'\n : 'Fast mode starts the agent with current behavior.'}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Title (Optional)</label>\n <input\n type=\"text\"\n className=\"input input-bordered w-full font-mono text-sm\"\n placeholder=\"Task Title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n onKeyDown={(e) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleStartSession();\n }\n }}\n disabled={loading}\n />\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Initial Message (Optional)</label>\n <div className=\"relative\">\n <textarea\n className=\"textarea textarea-bordered w-full h-64 font-mono text-sm leading-tight resize-none\"\n placeholder=\"Describe what you want the agent to do... Type @ to mention files.\"\n value={initialMessage}\n onChange={handleMessageChange}\n onKeyDown={handleKeyDown}\n onClick={(e) => {\n setCursorPosition(e.currentTarget.selectionStart);\n setShowSuggestions(false); // Hide on click? Or re-val?\n }}\n onKeyUp={(e) => setCursorPosition(e.currentTarget.selectionStart)}\n disabled={loading}\n ></textarea>\n {showSuggestions && suggestionList.length > 0 && (\n <div className=\"absolute left-0 right-0 z-50 mt-1 max-h-48 overflow-y-auto bg-base-100 border border-base-300 rounded-md shadow-lg\">\n {suggestionList.map((s, idx) => (\n <button\n key={s}\n className={`w-full text-left px-3 py-2 text-xs border-b border-base-200 last:border-0 truncate ${idx === selectedIndex ? 'bg-primary text-primary-content' : 'hover:bg-primary/10'\n }`}\n onMouseDown={(e) => {\n e.preventDefault(); // Prevent blur\n handleSelectSuggestion(s);\n }}\n >\n {s}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Attachments (Optional)</label>\n <input\n type=\"file\"\n multiple\n className=\"file-input file-input-bordered w-full\"\n onChange={handleFileSelect}\n disabled={loading}\n />\n <div className=\"text-xs opacity-50 px-1\">\n Paste files from clipboard with Cmd/Ctrl+V anywhere on this page.\n </div>\n {attachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mt-2\">\n {attachments.map((file, idx) => (\n <span key={`upload-${idx}`} className=\"badge badge-neutral gap-2 p-3\">\n {file.name}\n <button onClick={() => removeAttachment(idx)} className=\"btn btn-ghost btn-xs btn-circle text-error\">\n <X className=\"w-3 h-3\" />\n </button>\n </span>\n ))}\n </div>\n )}\n {prefilledAttachmentNames.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mt-2\">\n {prefilledAttachmentNames.map((name, idx) => (\n <span key={`prefill-${name}-${idx}`} className=\"badge badge-secondary gap-2 p-3\">\n {name}\n <button\n onClick={() => removePrefilledAttachment(idx)}\n className=\"btn btn-ghost btn-xs btn-circle text-error\"\n title=\"Remove carried attachment\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </span>\n ))}\n </div>\n )}\n </div>\n\n <div className=\"card-actions justify-end mt-4\">\n <button\n className=\"btn btn-primary btn-wide shadow-lg\"\n onClick={handleStartSession}\n disabled={loading}\n >\n {loading ? <span className=\"loading loading-spinner\"></span> : \"Start Session\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'new' && !selectedRepo && (\n <div className=\"card w-full max-w-2xl bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n {error && <div className=\"alert alert-error text-sm py-2 px-3\">{error}</div>}\n <h2 className=\"card-title\">Select a Repository</h2>\n <p className=\"opacity-70 text-sm\">Choose a repository first, then start or resume a session.</p>\n <div className=\"card-actions justify-end mt-4\">\n <button className=\"btn btn-primary\" onClick={() => router.push('/')}>\n Go to Home\n </button>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'new' && isInstallingAgentCli && installingAgentCli && (\n <div className=\"fixed inset-0 z-[1000] flex items-center justify-center bg-base-content/45 px-4\">\n <div className=\"w-full max-w-md rounded-xl border border-base-300 bg-base-100 p-6 shadow-2xl\">\n <div className=\"flex items-center gap-4\">\n <span className=\"loading loading-spinner loading-lg text-primary\"></span>\n <div className=\"space-y-1\">\n <h3 className=\"text-lg font-semibold\">Installing {AGENT_CLI_LABELS[installingAgentCli]}</h3>\n <p className=\"text-sm opacity-70\">\n Please wait while we install the coding agent CLI.\n </p>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'new' && isLoginModalOpen && loginAgentCli && (\n <div className=\"fixed inset-0 z-[1001] flex items-center justify-center bg-base-content/60 p-4\">\n <div className=\"w-full max-w-5xl rounded-xl border border-base-300 bg-base-100 shadow-2xl\">\n <div className=\"space-y-4 p-5 md:p-6\">\n <h3 className=\"text-xl font-semibold\">Login Required</h3>\n <p className=\"text-sm opacity-80\">\n {AGENT_CLI_LABELS[loginAgentCli]} has been installed. Complete login in the terminal below, then click Done to continue.\n </p>\n <p className=\"text-xs opacity-60\">\n Command: <span className=\"font-mono\">{loginCommand}</span>\n </p>\n\n <div className=\"h-[420px] overflow-hidden rounded-lg border border-base-300 bg-base-200\">\n <iframe\n ref={loginTerminalRef}\n src=\"/terminal\"\n className=\"h-full w-full border-none\"\n allow=\"clipboard-read; clipboard-write\"\n onLoad={handleLoginTerminalLoad}\n />\n </div>\n\n {loginModalError && (\n <div className=\"alert alert-error text-sm py-2\">\n {loginModalError}\n </div>\n )}\n\n {!loginModalError && (\n <div className=\"text-xs opacity-70\">\n {loginCommandInjected\n ? 'Login command was sent to the terminal automatically.'\n : 'Waiting for terminal to initialize...'}\n </div>\n )}\n\n <div className=\"flex justify-end\">\n <button\n className=\"btn btn-primary\"\n onClick={() => void handleLoginDone()}\n disabled={loading}\n >\n Done\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'new' && !selectedRepo && (!repoPath || !!error) && (\n <div className=\"card w-full max-w-2xl bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex items-center gap-2\">\n <FolderGit2 className=\"w-6 h-6 text-primary\" />\n Git Repository Selector\n </h2>\n {isResolvingRepoFromName ? (\n <div className=\"alert text-sm py-2 px-3 mt-2 flex items-center gap-2\">\n <span className=\"loading loading-spinner loading-sm\"></span>\n {fromRepoName\n ? `Searching for repository \"${fromRepoName}\"...`\n : 'Searching for repository...'}\n </div>\n ) : error ? (\n <div className=\"alert alert-error text-sm py-2 px-3 mt-2\">{error}</div>\n ) : (\n <div className=\"text-sm opacity-70 mt-2\">No repository specified.</div>\n )}\n <div className=\"mt-4\">\n <button className=\"btn btn-primary btn-sm\" onClick={() => router.push('/')}>\n Choose Repository\n </button>\n </div>\n </div>\n </div>\n )}\n\n\n {mode === 'home' && isBrowsing && (\n <FileBrowser\n initialPath={config?.defaultRoot || undefined}\n onSelect={handleSelectRepo}\n onCancel={() => setIsBrowsing(false)}\n checkRepo={checkIsGitRepo}\n />\n )}\n\n {mode === 'home' && isSelectingRoot && (\n <FileBrowser\n title=\"Default Root Folder\"\n initialPath={config?.defaultRoot || undefined}\n onSelect={handleSetDefaultRoot}\n onCancel={() => setIsSelectingRoot(false)}\n />\n )}\n </>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40e86f65dddc3e4892a55bce7304157ebe1ac298d9\":\"checkDirectoryAccessible\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"40e86f65dddc3e4892a55bce7304157ebe1ac298d9\",callServer,void 0,findSourceMapURL,\"checkDirectoryAccessible\");export{$$RSC_SERVER_ACTION_3 as checkDirectoryAccessible};","/* __next_internal_action_entry_do_not_use__ [{\"40b2586fc78398531dbe936975765befa293dfc724\":\"checkAgentCliInstalled\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_7=/*#__PURE__*/createServerReference(\"40b2586fc78398531dbe936975765befa293dfc724\",callServer,void 0,findSourceMapURL,\"checkAgentCliInstalled\");export{$$RSC_SERVER_ACTION_7 as checkAgentCliInstalled};","/* __next_internal_action_entry_do_not_use__ [{\"408d0a7a715dd00211611eafe71c0bd64c256c7d0d\":\"installAgentCli\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_8=/*#__PURE__*/createServerReference(\"408d0a7a715dd00211611eafe71c0bd64c256c7d0d\",callServer,void 0,findSourceMapURL,\"installAgentCli\");export{$$RSC_SERVER_ACTION_8 as installAgentCli};","/* __next_internal_action_entry_do_not_use__ [{\"605c2869ff7584c223302da590d721c1edb79926cd\":\"cloneRemoteRepository\"},\"src/app/actions/repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"605c2869ff7584c223302da590d721c1edb79926cd\",callServer,void 0,findSourceMapURL,\"cloneRemoteRepository\");export{$$RSC_SERVER_ACTION_1 as cloneRemoteRepository};","/* __next_internal_action_entry_do_not_use__ [{\"402785bac6d7a4ec171604f890489f74aa43e7c664\":\"resolveRepositoryByName\"},\"src/app/actions/repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"402785bac6d7a4ec171604f890489f74aa43e7c664\",callServer,void 0,findSourceMapURL,\"resolveRepositoryByName\");export{$$RSC_SERVER_ACTION_0 as resolveRepositoryByName};","/* __next_internal_action_entry_do_not_use__ [{\"70e7c32ce12f69479fc1538c2ab2717fd71fd9a046\":\"copySessionAttachments\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_5=/*#__PURE__*/createServerReference(\"70e7c32ce12f69479fc1538c2ab2717fd71fd9a046\",callServer,void 0,findSourceMapURL,\"copySessionAttachments\");export{$$RSC_SERVER_ACTION_5 as copySessionAttachments};","/* __next_internal_action_entry_do_not_use__ [{\"704c6db357061b7c99acb44a58eda1bf6d4c865893\":\"createSession\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_8=/*#__PURE__*/createServerReference(\"704c6db357061b7c99acb44a58eda1bf6d4c865893\",callServer,void 0,findSourceMapURL,\"createSession\");export{$$RSC_SERVER_ACTION_8 as createSession};","/* __next_internal_action_entry_do_not_use__ [{\"4074be8f086727129c5a1284fac149576065894991\":\"deleteSession\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_10=/*#__PURE__*/createServerReference(\"4074be8f086727129c5a1284fac149576065894991\",callServer,void 0,findSourceMapURL,\"deleteSession\");export{$$RSC_SERVER_ACTION_10 as deleteSession};","/* __next_internal_action_entry_do_not_use__ [{\"40a8fbf268edeeab3bb0b8c6d56461c83f24384eb5\":\"getSessionPrefillContext\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_4=/*#__PURE__*/createServerReference(\"40a8fbf268edeeab3bb0b8c6d56461c83f24384eb5\",callServer,void 0,findSourceMapURL,\"getSessionPrefillContext\");export{$$RSC_SERVER_ACTION_4 as getSessionPrefillContext};","/* __next_internal_action_entry_do_not_use__ [{\"40b0d902b232cda8947813ec2182844c0be8fbe1c9\":\"listSessions\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_7=/*#__PURE__*/createServerReference(\"40b0d902b232cda8947813ec2182844c0be8fbe1c9\",callServer,void 0,findSourceMapURL,\"listSessions\");export{$$RSC_SERVER_ACTION_7 as listSessions};","/* __next_internal_action_entry_do_not_use__ [{\"600c4c4f9bb1a5ab32de387bdbd9d9718fe5ffe1ca\":\"saveSessionLaunchContext\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"600c4c4f9bb1a5ab32de387bdbd9d9718fe5ffe1ca\",callServer,void 0,findSourceMapURL,\"saveSessionLaunchContext\");export{$$RSC_SERVER_ACTION_2 as saveSessionLaunchContext};","/* __next_internal_action_entry_do_not_use__ [{\"602a22c8f189f56968fc888dd45d1b76fe46a65ed1\":\"updateRepoSettings\"},\"src/app/actions/config.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"602a22c8f189f56968fc888dd45d1b76fe46a65ed1\",callServer,void 0,findSourceMapURL,\"updateRepoSettings\");export{$$RSC_SERVER_ACTION_3 as updateRepoSettings};","/* __next_internal_action_entry_do_not_use__ [{\"7f825383c336ac9922840528e36687b255cb8ad82e\":\"listRepoFiles\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_18=/*#__PURE__*/createServerReference(\"7f825383c336ac9922840528e36687b255cb8ad82e\",callServer,void 0,findSourceMapURL,\"listRepoFiles\");export{$$RSC_SERVER_ACTION_18 as listRepoFiles};","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 8V4H8', key: 'hb8ula' }],\n ['rect', { width: '16', height: '12', x: '4', y: '8', rx: '2', key: 'enze0r' }],\n ['path', { d: 'M2 14h2', key: 'vft8re' }],\n ['path', { d: 'M20 14h2', key: '4cs60a' }],\n ['path', { d: 'M15 13v2', key: '1xurst' }],\n ['path', { d: 'M9 13v2', key: 'rq6x2g' }],\n];\n\n/**\n * @component @name Bot\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/bot\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Bot = createLucideIcon('bot', __iconNode);\n\nexport default Bot;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 20v2', key: '1lh1kg' }],\n ['path', { d: 'M12 2v2', key: 'tus03m' }],\n ['path', { d: 'M17 20v2', key: '1rnc9c' }],\n ['path', { d: 'M17 2v2', key: '11trls' }],\n ['path', { d: 'M2 12h2', key: '1t8f8n' }],\n ['path', { d: 'M2 17h2', key: '7oei6x' }],\n ['path', { d: 'M2 7h2', key: 'asdhe0' }],\n ['path', { d: 'M20 12h2', key: '1q8mjw' }],\n ['path', { d: 'M20 17h2', key: '1fpfkl' }],\n ['path', { d: 'M20 7h2', key: '1o8tra' }],\n ['path', { d: 'M7 20v2', key: '4gnj0m' }],\n ['path', { d: 'M7 2v2', key: '1i4yhu' }],\n ['rect', { x: '4', y: '4', width: '16', height: '16', rx: '2', key: '1vbyd7' }],\n ['rect', { x: '8', y: '8', width: '8', height: '8', rx: '1', key: 'z9xiuo' }],\n];\n\n/**\n * @component @name Cpu\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/cpu\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Cpu = createLucideIcon('cpu', __iconNode);\n\nexport default Cpu;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 13v8l-4-4', key: '1f5nwf' }],\n ['path', { d: 'm12 21 4-4', key: '1lfcce' }],\n ['path', { d: 'M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284', key: 'ui1hmy' }],\n];\n\n/**\n * @component @name CloudDownload\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/cloud-download\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CloudDownload = createLucideIcon('cloud-download', __iconNode);\n\nexport default CloudDownload;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M10.3 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.98a2 2 0 0 1 1.69.9l.66 1.2A2 2 0 0 0 12 6h8a2 2 0 0 1 2 2v3.3',\n key: '128dxu',\n },\n ],\n ['path', { d: 'm14.305 19.53.923-.382', key: '3m78fa' }],\n ['path', { d: 'm15.228 16.852-.923-.383', key: 'npixar' }],\n ['path', { d: 'm16.852 15.228-.383-.923', key: '5xggr7' }],\n ['path', { d: 'm16.852 20.772-.383.924', key: 'dpfhf9' }],\n ['path', { d: 'm19.148 15.228.383-.923', key: '1reyyz' }],\n ['path', { d: 'm19.53 21.696-.382-.924', key: '1goivc' }],\n ['path', { d: 'm20.772 16.852.924-.383', key: 'htqkph' }],\n ['path', { d: 'm20.772 19.148.924.383', key: '9w9pjp' }],\n ['circle', { cx: '18', cy: '18', r: '3', key: '1xkwt0' }],\n];\n\n/**\n * @component @name FolderCog\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder-cog\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderCog = createLucideIcon('folder-cog', __iconNode);\n\nexport default FolderCog;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915',\n key: '1i5ecw',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3', key: '1v7zrd' }],\n];\n\n/**\n * @component @name Settings\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/settings\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Settings = createLucideIcon('settings', __iconNode);\n\nexport default Settings;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 19a5 5 0 0 1-5-5v8', key: 'sz5oeg' }],\n [\n 'path',\n {\n d: 'M9 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v5',\n key: '1w6njk',\n },\n ],\n ['circle', { cx: '13', cy: '12', r: '2', key: '1j92g6' }],\n ['circle', { cx: '20', cy: '19', r: '2', key: '1obnsp' }],\n];\n\n/**\n * @component @name FolderGit2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder-git-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderGit2 = createLucideIcon('folder-git-2', __iconNode);\n\nexport default FolderGit2;\n"],"names":[],"mappings":"wDOEA,EAAA,EAAA,CAAA,CAAA,sHsBMS,CJAN,AEAG,AHAH,AIAG,ACAG,oHACE,CJCR,CAAA,CAAA,CAAA,CAAA,CAAA,OIEU,CAAA,AAAE,GAAI,CJAH,AEAA,AEAG,CJAH,AEAA,AEAG,CFAH,AEAG,AJAH,CAAA,AIAG,AFAH,CAAA,AFAA,cIA2B,IAAK,UAAU,YAC3C,GAAA,mBAA4B,IAAA,atBV3C,IAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,gCgBgBgC,kDAdhB,CEAA,ADAH,AEAG,AHAA,CGAA,AHAA,ACAH,ACAG,CCAA,AFAH,ADAG,AEAA,4DJWuC,QAbT,CAAA,ACAA,gCDAsC,GM8B9E,EAAA,CAAA,EAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,UAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,6KAtBF,CACvD,sCAA0C,CAAA,CEAD,AFAC,CAAA,AEAD,CFAM,CAAA,AEAD,CAAA,AFAC,CEAD,AFAC,CAAA,AEAD,CAAA,AFAC,CEAD,AFAC,CAAA,AEAD,GFAW,2CACV,CAAA,ACYH,CDZG,ACYH,CAAA,ADZG,CCYH,ADZG,CAAA,ACYH,CDZG,ACYH,CAAU,ACZR,AFAC,GAAU,SAChD,CFAA,AEAA,AAAE,EAAG,CFAA,AEAA,CFAA,AEAA,CFAA,AEAA,CAAA,AFAA,CAAA,AEAA,CFAA,AEAA,CFAA,AEAA,CFAA,AEAA,CAAA,AFAA,CEAA,AFAA,gBEA2B,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,EACvD,CFAA,AEAA,AEYH,CJZG,AEAA,AEYH,KFZW,CAAA,AFAA,4BEAgC,CAAA,AEYP,CAAA,AFZO,CEYP,AFZO,CEYP,AFZO,AAAK,CEYZ,AFZY,CEYZ,AFZY,CAAA,OAAU,CEYN,CAAA,CAAU,CAAA,kCFXnB,CAAA,AFAD,CEAC,AFAD,CEAC,AFAD,CAAA,AEAC,AAAK,CAAA,UAC9C,CAAC,CFAA,AEAA,CAAA,AFAA,CAAA,AEAA,CFAA,AEAA,CAAA,AFAA,CAAA,AEAA,CFAA,AEAA,AAAQ,CFAA,AEAA,4BAAgC,CAAA,AFAF,GEAO,YAC7C,CAAA,CAAA,CAAA,CAAA,GAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,oBAA0B,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,EAAU,EACtD,CFYH,AEZG,CFYH,AEZG,WAAgB,CFYP,CAAA,CAAA,CEZO,AFYP,CAAA,AEZO,QAAgB,EAAA,QAAa,QAAA,CAAU,CAAA,CAC1D,EHGM,CCZH,AEAA,ACAA,CAAA,ADAA,AFAA,ADYS,CGZT,ACAA,AHAA,ADYG,AAAM,CIZT,ADAA,AFAA,ADYG,CAAM,EAAA,OAAA,EAAA,OAAwB,CAAA,AGZpB,AFAiB,AGAE,oDJNf,CAAA,ACAJ,ACAA,AHAA,CGAA,AFAI,ACAJ,AFAA,CCAI,ACAJ,ACAA,AHAA,CAAA,AEAA,ACAA,CAAA,ADAA,AFAA,OCAkB,OAAS,IAAK,EAAG,CAAA,CAAA,CAAA,CAAK,AAAL,CAAK,CAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAK,AAAL,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,sBACrD,IAAA,0GAGA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,AAAK,CAAA,ACAA,CDAA,ACAA,CDAA,ACAA,CAAA,ADAA,CCAA,ADAA,CAAA,ACAA,CDAA,ACAA,IDChC,OCqBY,EAAA,OAAA,EAAA,sGAzBgB,CDAD,AEAX,ADAY,CCAZ,AFAW,ACAC,CDAD,AEAX,ADAY,CAAK,CCAjB,AFAgB,ACAC,CDAD,ACAC,ACAjB,CDAiB,ACAjB,AFAgB,CAAA,ACAC,ACAjB,CDAiB,ACAjB,AFAgB,CAAA,ACAC,ACAjB,CDAiB,ACAjB,eDCA,CFYN,AIZD,ACAA,AJAO,ACAA,CAAA,ADAA,AGAP,AJYC,AKZD,CAAA,AHAO,AEAP,AJYC,ACZM,CIAP,AHAO,ADAA,AGAP,AJYC,CIZD,AHAO,ACAA,AFYN,AKZD,CLYC,AEZM,AGAP,AJAO,AGAP,CHAO,AIAP,AH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","ignoreList":[21,22,23,24,25,26,27,28,29]}
|