neural-loom 0.2.59 → 0.2.61
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 +3 -0
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.previewinfo +1 -1
- package/.next/cache/.rscinfo +1 -1
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +2 -2
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/routes-manifest.json +18 -0
- package/.next/server/app/_global-error.html +1 -1
- 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.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/configs/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/configs/route/build-manifest.json +9 -0
- package/.next/server/app/api/configs/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/configs/route.js +6 -0
- package/.next/server/app/api/configs/route.js.map +5 -0
- package/.next/server/app/api/configs/route.js.nft.json +1 -0
- package/.next/server/app/api/configs/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/context/aider/route.js.nft.json +1 -1
- package/.next/server/app/api/context/claude/route.js.nft.json +1 -1
- package/.next/server/app/api/context/route.js.nft.json +1 -1
- package/.next/server/app/api/context/ssh/route.js.nft.json +1 -1
- package/.next/server/app/api/recents/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/inject/route.js +2 -2
- package/.next/server/app/api/sessions/inject/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/input/route.js +2 -2
- package/.next/server/app/api/sessions/input/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/launch/route.js +2 -2
- package/.next/server/app/api/sessions/launch/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/route.js +2 -2
- package/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/scope/route.js +2 -2
- package/.next/server/app/api/sessions/scope/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/start/route.js +2 -2
- package/.next/server/app/api/sessions/start/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/stats/route.js +2 -2
- package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/stop/route.js +2 -2
- package/.next/server/app/api/sessions/stop/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/upload-image/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/sessions/upload-image/route/build-manifest.json +9 -0
- package/.next/server/app/api/sessions/upload-image/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/sessions/upload-image/route.js +7 -0
- package/.next/server/app/api/sessions/upload-image/route.js.map +5 -0
- package/.next/server/app/api/sessions/upload-image/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/upload-image/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/sql/connections/route.js.nft.json +1 -1
- package/.next/server/app/api/sql/mcp/route.js.nft.json +1 -1
- package/.next/server/app/api/sql/query/route.js.nft.json +1 -1
- package/.next/server/app/api/sql/schema/route.js.nft.json +1 -1
- package/.next/server/app/api/telemetry/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/telemetry/route/build-manifest.json +9 -0
- package/.next/server/app/api/telemetry/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/telemetry/route.js +6 -0
- package/.next/server/app/api/telemetry/route.js.map +5 -0
- package/.next/server/app/api/telemetry/route.js.nft.json +1 -0
- package/.next/server/app/api/telemetry/route_client-reference-manifest.js +3 -0
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/index.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- package/.next/server/app/page/react-loadable-manifest.json +5 -5
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +3 -0
- package/.next/server/chunks/[root-of-the-server]__0.ptwor._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0.ptwor._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__00-sqou._.js +15 -0
- package/.next/server/chunks/{[root-of-the-server]__0thsozo._.js.map → [root-of-the-server]__00-sqou._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__00l5btc._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__00l5btc._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__01621nz._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__01621nz._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__06men8g._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__06men8g._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__08r0s-s._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__08r0s-s._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__097vtn1._.js +15 -0
- package/.next/server/chunks/{[root-of-the-server]__0em6a~~._.js.map → [root-of-the-server]__097vtn1._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0_v2.a8._.js +15 -0
- package/.next/server/chunks/[root-of-the-server]__0_v2.a8._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0co.g5k._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0co.g5k._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0e03ite._.js +15 -0
- package/.next/server/chunks/{[root-of-the-server]__10wwca8._.js.map → [root-of-the-server]__0e03ite._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0fxtx7z._.js +15 -0
- package/.next/server/chunks/[root-of-the-server]__0fxtx7z._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0h.~hv6._.js +15 -0
- package/.next/server/chunks/{[root-of-the-server]__0s0is_9._.js.map → [root-of-the-server]__0h.~hv6._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0li1h1u._.js +33 -0
- package/.next/server/chunks/[root-of-the-server]__0li1h1u._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0s1axek._.js +15 -0
- package/.next/server/chunks/{[root-of-the-server]__0i~01cv._.js.map → [root-of-the-server]__0s1axek._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0tq0maq._.js +15 -0
- package/.next/server/chunks/[root-of-the-server]__0tq0maq._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0viil6b._.js +15 -0
- package/.next/server/chunks/{[root-of-the-server]__07zx04e._.js.map → [root-of-the-server]__0viil6b._.js.map} +1 -1
- package/.next/server/chunks/_next-internal_server_app_api_configs_route_actions_087k_4j.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_configs_route_actions_087k_4j.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_upload-image_route_actions_09tfn3a.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_upload-image_route_actions_09tfn3a.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_telemetry_route_actions_0.yo5qr.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_telemetry_route_actions_0.yo5qr.js.map +1 -0
- package/.next/server/chunks/ssr/_0t7oqy6._.js +1 -1
- package/.next/server/chunks/ssr/_0t7oqy6._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/07lj0adi0kt5p.css +1 -0
- package/.next/static/chunks/0xhaghhxllgzs.js +1 -0
- package/.next/static/chunks/128c-kly7grxg.js +4 -0
- package/.next/static/chunks/{0-vb7c~yrtpon.js → 15_baizhaiq8c.js} +16 -3
- package/.next/static/chunks/15sigqif_v.mu.js +1 -0
- package/.next/static/chunks/17ud2wmsyqknc.js +11 -0
- package/.next/trace +1 -1
- package/.next/trace-build +1 -1
- package/.next/types/routes.d.ts +4 -1
- package/.next/types/validator.ts +27 -0
- package/bin/cli.js +4 -4
- package/bin/fix-pwa-ubuntu.sh +50 -0
- package/package.json +2 -1
- package/src/app/api/configs/route.ts +40 -0
- package/src/app/api/sessions/launch/route.ts +3 -3
- package/src/app/api/sessions/route.ts +2 -2
- package/src/app/api/sessions/start/route.ts +2 -2
- package/src/app/api/sessions/upload-image/route.ts +57 -0
- package/src/app/api/sql/connections/route.ts +9 -6
- package/src/app/api/sql/mcp/route.ts +3 -2
- package/src/app/api/sql/query/route.ts +3 -2
- package/src/app/api/sql/schema/route.ts +3 -2
- package/src/app/api/telemetry/route.ts +18 -0
- package/src/app/components/AiderWizard.tsx +46 -2
- package/src/app/components/ClaudeWizard.tsx +30 -0
- package/src/app/components/IdeLayout.tsx +566 -70
- package/src/app/components/TerminalConsole.tsx +368 -11
- package/src/app/page.module.css +8 -2
- package/src/app/page.tsx +534 -401
- package/src/lib/agents/AgentRunner.ts +88 -5
- package/src/lib/agents/AiderRunner.ts +4 -18
- package/src/lib/agents/ClaudeRunner.ts +16 -26
- package/src/lib/agents/DockerRunner.ts +16 -26
- package/src/lib/agents/MockRunner.ts +4 -16
- package/src/lib/agents/SSHRunner.ts +16 -26
- package/src/lib/agents/SessionConfig.ts +79 -0
- package/src/lib/agents/SessionManager.ts +16 -16
- package/src/lib/agents/SessionPersister.ts +13 -9
- package/src/lib/agents/ShellRunner.ts +14 -21
- package/src/lib/agents/WebSocketServer.ts +2 -2
- package/.next/server/chunks/[root-of-the-server]__01.zh3b._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__01.zh3b._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__07zx04e._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js +0 -33
- package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0em6a~~._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__0i~01cv._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__0s0is_9._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__0thsozo._.js +0 -15
- package/.next/server/chunks/[root-of-the-server]__10wwca8._.js +0 -15
- package/.next/static/chunks/076_b43_kienv.js +0 -1
- package/.next/static/chunks/0hoyc~vbuqe0t.css +0 -1
- package/.next/static/chunks/0k2co3uj4w81_.js +0 -1
- package/.next/static/chunks/0sqeixl35qoac.js +0 -1
- package/.next/static/chunks/10pqt4p7e3rk1.js +0 -11
- /package/.next/static/{cwv8IVp6ik4mwOjuM24B1 → b48zoI5QUg8m7v1asTiCM}/_buildManifest.js +0 -0
- /package/.next/static/{cwv8IVp6ik4mwOjuM24B1 → b48zoI5QUg8m7v1asTiCM}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{cwv8IVp6ik4mwOjuM24B1 → b48zoI5QUg8m7v1asTiCM}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/next/src/shared/lib/lazy-dynamic/bailout-to-csr.ts","../../../../node_modules/next/src/shared/lib/lazy-dynamic/dynamic-bailout-to-csr.tsx","../../../../node_modules/next/src/shared/lib/encode-uri-path.ts","../../../../node_modules/next/src/shared/lib/deployment-id.ts","../../../../node_modules/next/src/shared/lib/lazy-dynamic/preload-chunks.tsx","../../../../node_modules/next/src/shared/lib/lazy-dynamic/loadable.tsx","../../../../node_modules/next/src/shared/lib/app-dynamic.tsx","turbopack:///[project]/src/app/page.module.css [app-ssr] (css module)","../../../../src/app/page.tsx","../../../../src/app/components/DbExplorer.tsx"],"sourcesContent":["// This has to be a shared module which is shared between client component error boundary and dynamic component\nconst BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING'\n\n/** An error that should be thrown when we want to bail out to client-side rendering. */\nexport class BailoutToCSRError extends Error {\n public readonly digest = BAILOUT_TO_CSR\n\n constructor(public readonly reason: string) {\n super(`Bail out to client-side rendering: ${reason}`)\n }\n}\n\n/** Checks if a passed argument is an error that is thrown if we want to bail out to client-side rendering. */\nexport function isBailoutToCSRError(err: unknown): err is BailoutToCSRError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === BAILOUT_TO_CSR\n}\n","'use client'\n\nimport type { ReactElement } from 'react'\nimport { BailoutToCSRError } from './bailout-to-csr'\n\ninterface BailoutToCSRProps {\n reason: string\n children: ReactElement\n}\n\n/**\n * If rendered on the server, this component throws an error\n * to signal Next.js that it should bail out to client-side rendering instead.\n */\nexport function BailoutToCSR({ reason, children }: BailoutToCSRProps) {\n if (typeof window === 'undefined') {\n throw new BailoutToCSRError(reason)\n }\n\n return children\n}\n","export function encodeURIPath(file: string) {\n return file\n .split('/')\n .map((p) => encodeURIComponent(p))\n .join('/')\n}\n","let deploymentId: string | undefined\n\nif (typeof window !== 'undefined') {\n deploymentId = document.documentElement.dataset.dplId\n // Immediately remove the attribute to prevent hydration errors (the dplId was inserted into the\n // HTML only), React isn't aware of it at all.\n delete document.documentElement.dataset.dplId\n} else {\n // Client side: replaced with globalThis.NEXT_DEPLOYMENT_ID\n // Server side: left as is or replaced with a string or replaced with false\n deploymentId = process.env.NEXT_DEPLOYMENT_ID || undefined\n}\n\nexport function getDeploymentId(): string | undefined {\n return deploymentId\n}\n\nexport function getDeploymentIdQuery(ampersand = false): string {\n let id = getDeploymentId()\n if (id) {\n return `${ampersand ? '&' : '?'}dpl=${id}`\n }\n return ''\n}\n\nexport function getAssetToken(): string | undefined {\n return (\n process.env.NEXT_IMMUTABLE_ASSET_TOKEN || process.env.NEXT_DEPLOYMENT_ID\n )\n}\n\nexport function getAssetTokenQuery(ampersand = false): string {\n let id = getAssetToken()\n if (id) {\n return `${ampersand ? '&' : '?'}dpl=${id}`\n }\n return ''\n}\n","'use client'\n\nimport { preload } from 'react-dom'\n\nimport { workAsyncStorage } from '../../../server/app-render/work-async-storage.external'\nimport { encodeURIPath } from '../encode-uri-path'\nimport { getAssetTokenQuery } from '../deployment-id'\n\nexport function PreloadChunks({\n moduleIds,\n}: {\n moduleIds: string[] | undefined\n}) {\n // Early return in client compilation and only load requestStore on server side\n if (typeof window !== 'undefined') {\n return null\n }\n\n const workStore = workAsyncStorage.getStore()\n if (workStore === undefined) {\n return null\n }\n\n const allFiles = []\n\n // Search the current dynamic call unique key id in react loadable manifest,\n // and find the corresponding CSS files to preload\n if (workStore.reactLoadableManifest && moduleIds) {\n const manifest = workStore.reactLoadableManifest\n for (const key of moduleIds) {\n if (!manifest[key]) continue\n const chunks = manifest[key].files\n allFiles.push(...chunks)\n }\n }\n\n if (allFiles.length === 0) {\n return null\n }\n\n const query = getAssetTokenQuery()\n\n return (\n <>\n {allFiles.map((chunk) => {\n const href = `${workStore.assetPrefix}/_next/${encodeURIPath(chunk)}${query}`\n const isCss = chunk.endsWith('.css')\n // If it's stylesheet we use `precedence` o help hoist with React Float.\n // For stylesheets we actually need to render the CSS because nothing else is going to do it so it needs to be part of the component tree.\n // The `preload` for stylesheet is not optional.\n if (isCss) {\n return (\n <link\n key={chunk}\n // @ts-ignore\n precedence=\"dynamic\"\n href={href}\n rel=\"stylesheet\"\n as=\"style\"\n nonce={workStore.nonce}\n />\n )\n } else {\n // If it's script we use ReactDOM.preload to preload the resources\n preload(href, {\n as: 'script',\n fetchPriority: 'low',\n nonce: workStore.nonce,\n })\n return null\n }\n })}\n </>\n )\n}\n","import { Suspense, Fragment, lazy } from 'react'\nimport { BailoutToCSR } from './dynamic-bailout-to-csr'\nimport type { ComponentModule } from './types'\nimport { PreloadChunks } from './preload-chunks'\n\n// Normalize loader to return the module as form { default: Component } for `React.lazy`.\n// Also for backward compatible since next/dynamic allows to resolve a component directly with loader\n// Client component reference proxy need to be converted to a module.\nfunction convertModule<P>(\n mod: React.ComponentType<P> | ComponentModule<P> | undefined\n): {\n default: React.ComponentType<P>\n} {\n // Check \"default\" prop before accessing it, as it could be client reference proxy that could break it reference.\n // Cases:\n // mod: { default: Component }\n // mod: Component\n // mod: { default: proxy(Component) }\n // mod: proxy(Component)\n const hasDefault = mod && 'default' in mod\n return {\n default: hasDefault\n ? (mod as ComponentModule<P>).default\n : (mod as React.ComponentType<P>),\n }\n}\n\nconst defaultOptions = {\n loader: () => Promise.resolve(convertModule(() => null)),\n loading: null,\n ssr: true,\n}\n\ninterface LoadableOptions {\n loader?: () => Promise<React.ComponentType<any> | ComponentModule<any>>\n loading?: React.ComponentType<any> | null\n ssr?: boolean\n modules?: string[]\n}\n\nfunction Loadable(options: LoadableOptions) {\n const opts = { ...defaultOptions, ...options }\n const Lazy = lazy(() => opts.loader().then(convertModule))\n const Loading = opts.loading\n\n function LoadableComponent(props: any) {\n const fallbackElement = Loading ? (\n <Loading isLoading={true} pastDelay={true} error={null} />\n ) : null\n\n // If it's non-SSR or provided a loading component, wrap it in a suspense boundary\n const hasSuspenseBoundary = !opts.ssr || !!opts.loading\n const Wrap = hasSuspenseBoundary ? Suspense : Fragment\n const wrapProps = hasSuspenseBoundary ? { fallback: fallbackElement } : {}\n const children = opts.ssr ? (\n <>\n {/* During SSR, we need to preload the CSS from the dynamic component to avoid flash of unstyled content */}\n {typeof window === 'undefined' ? (\n <PreloadChunks moduleIds={opts.modules} />\n ) : null}\n <Lazy {...props} />\n </>\n ) : (\n <BailoutToCSR reason=\"next/dynamic\">\n <Lazy {...props} />\n </BailoutToCSR>\n )\n\n return <Wrap {...wrapProps}>{children}</Wrap>\n }\n\n LoadableComponent.displayName = 'LoadableComponent'\n\n return LoadableComponent\n}\n\nexport default Loadable\n","import type React from 'react'\nimport type { JSX } from 'react'\nimport Loadable from './lazy-dynamic/loadable'\n\nimport type {\n LoadableGeneratedOptions,\n DynamicOptionsLoadingProps,\n Loader,\n LoaderComponent,\n} from './lazy-dynamic/types'\n\nexport {\n type LoadableGeneratedOptions,\n type DynamicOptionsLoadingProps,\n type Loader,\n type LoaderComponent,\n}\n\nexport type DynamicOptions<P = {}> = LoadableGeneratedOptions & {\n loading?: () => JSX.Element | null\n loader?: Loader<P>\n loadableGenerated?: LoadableGeneratedOptions\n modules?: string[]\n ssr?: boolean\n}\n\nexport type LoadableOptions<P = {}> = DynamicOptions<P>\n\nexport type LoadableFn<P = {}> = (\n opts: LoadableOptions<P>\n) => React.ComponentType<P>\n\nexport type LoadableComponent<P = {}> = React.ComponentType<P>\n\nexport default function dynamic<P = {}>(\n dynamicOptions: DynamicOptions<P> | Loader<P>,\n options?: DynamicOptions<P>\n): React.ComponentType<P> {\n const loadableOptions: LoadableOptions<P> = {}\n\n if (typeof dynamicOptions === 'function') {\n loadableOptions.loader = dynamicOptions\n }\n\n const mergedOptions = {\n ...loadableOptions,\n ...options,\n }\n\n return Loadable({\n ...mergedOptions,\n modules: mergedOptions.loadableGenerated?.modules,\n })\n}\n","__turbopack_context__.v({\n \"activeBorder\": \"page-module___8aEwW__activeBorder\",\n \"agentBadge\": \"page-module___8aEwW__agentBadge\",\n \"agentCard\": \"page-module___8aEwW__agentCard\",\n \"agentGrid\": \"page-module___8aEwW__agentGrid\",\n \"agentHeader\": \"page-module___8aEwW__agentHeader\",\n \"agentName\": \"page-module___8aEwW__agentName\",\n \"agentStateBadge\": \"page-module___8aEwW__agentStateBadge\",\n \"ansiCyan\": \"page-module___8aEwW__ansiCyan\",\n \"ansiGreen\": \"page-module___8aEwW__ansiGreen\",\n \"ansiMagenta\": \"page-module___8aEwW__ansiMagenta\",\n \"ansiRed\": \"page-module___8aEwW__ansiRed\",\n \"ansiYellow\": \"page-module___8aEwW__ansiYellow\",\n \"cardBody\": \"page-module___8aEwW__cardBody\",\n \"container\": \"page-module___8aEwW__container\",\n \"containerActive\": \"page-module___8aEwW__containerActive\",\n \"contextDetails\": \"page-module___8aEwW__contextDetails\",\n \"contextItem\": \"page-module___8aEwW__contextItem\",\n \"contextList\": \"page-module___8aEwW__contextList\",\n \"contextMeta\": \"page-module___8aEwW__contextMeta\",\n \"contextTitle\": \"page-module___8aEwW__contextTitle\",\n \"dashboardGrid\": \"page-module___8aEwW__dashboardGrid\",\n \"envGrid\": \"page-module___8aEwW__envGrid\",\n \"envName\": \"page-module___8aEwW__envName\",\n \"envRow\": \"page-module___8aEwW__envRow\",\n \"envStatus\": \"page-module___8aEwW__envStatus\",\n \"footer\": \"page-module___8aEwW__footer\",\n \"header\": \"page-module___8aEwW__header\",\n \"logoArea\": \"page-module___8aEwW__logoArea\",\n \"mainPanel\": \"page-module___8aEwW__mainPanel\",\n \"pulse\": \"page-module___8aEwW__pulse\",\n \"pulse-attention\": \"page-module___8aEwW__pulse-attention\",\n \"pulse-thinking\": \"page-module___8aEwW__pulse-thinking\",\n \"pulseDot\": \"page-module___8aEwW__pulseDot\",\n \"quickLaunchBtn\": \"page-module___8aEwW__quickLaunchBtn\",\n \"sectionTitle\": \"page-module___8aEwW__sectionTitle\",\n \"sidePanel\": \"page-module___8aEwW__sidePanel\",\n \"state-complete\": \"page-module___8aEwW__state-complete\",\n \"state-idle\": \"page-module___8aEwW__state-idle\",\n \"state-needs-input\": \"page-module___8aEwW__state-needs-input\",\n \"state-thinking\": \"page-module___8aEwW__state-thinking\",\n \"statusIndicator\": \"page-module___8aEwW__statusIndicator\",\n \"stoppedBadge\": \"page-module___8aEwW__stoppedBadge\",\n \"subtitle\": \"page-module___8aEwW__subtitle\",\n \"terminalContainer\": \"page-module___8aEwW__terminalContainer\",\n \"terminalInput\": \"page-module___8aEwW__terminalInput\",\n \"terminalInputArea\": \"page-module___8aEwW__terminalInputArea\",\n \"terminalLine\": \"page-module___8aEwW__terminalLine\",\n \"terminalSendBtn\": \"page-module___8aEwW__terminalSendBtn\",\n \"title\": \"page-module___8aEwW__title\",\n});\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport dynamic from \"next/dynamic\";\nimport styles from \"./page.module.css\";\nimport DbExplorer from \"./components/DbExplorer\";\n\ninterface RunnerStatus {\n id: string;\n name: string;\n type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker';\n status: 'idle' | 'running' | 'stopped';\n createdAt: string;\n logsCount: number;\n workspaceRoot?: string;\n scopedDirs?: string[];\n agentState?: 'idle' | 'thinking' | 'complete' | 'needs-input';\n}\n\nconst getModeIcon = (type: string) => {\n if (type === 'mock') return '🧪';\n if (type.includes('-docker')) return '🐳';\n if (type.includes('-ssh')) return '🌐';\n return '💻';\n};\n\n// Dynamically import TerminalConsole to bypass SSR errors\nconst TerminalConsole = dynamic(() => import(\"./components/TerminalConsole\"), {\n ssr: false,\n loading: () => (\n <div \n style={{ \n height: \"400px\", \n display: \"flex\", \n alignItems: \"center\", \n justifyContent: \"center\", \n backgroundColor: \"#05070a\", \n color: \"var(--muted)\", \n border: \"1px solid var(--border)\", \n borderBottomLeftRadius: \"12px\", \n borderBottomRightRadius: \"12px\" \n }}\n >\n <span>Initializing terminal emulator...</span>\n </div>\n ),\n});\n\n// Dynamically import ContextEditor to bypass SSR errors\nconst ContextEditor = dynamic(() => import(\"./components/ContextEditor\"), {\n ssr: false,\n loading: () => (\n <div \n style={{ \n height: \"280px\", \n display: \"flex\", \n alignItems: \"center\", \n justifyContent: \"center\", \n backgroundColor: \"var(--card)\", \n border: \"1px solid var(--border)\", \n borderRadius: \"12px\", \n marginTop: \"1.5rem\" \n }}\n >\n <span style={{ color: \"var(--muted)\" }}>Initializing prompt editor...</span>\n </div>\n ),\n});\n\n// Dynamically import SshWizard to bypass SSR errors\nconst SshWizard = dynamic(() => import(\"./components/SshWizard\"), {\n ssr: false,\n});\n\n// Dynamically import AiderWizard to bypass SSR errors\nconst AiderWizard = dynamic(() => import(\"./components/AiderWizard\"), {\n ssr: false,\n});\n\n// Dynamically import ClaudeWizard to bypass SSR errors\nconst ClaudeWizard = dynamic(() => import(\"./components/ClaudeWizard\"), {\n ssr: false,\n});\n\n// Dynamically import IdeLayout to bypass SSR errors\nconst IdeLayout = dynamic(() => import(\"./components/IdeLayout\"), {\n ssr: false,\n});\n\nexport default function Home() {\n const [sessions, setSessions] = useState<RunnerStatus[]>([]);\n const [activeSessionId, setActiveSessionId] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isSshWizardOpen, setIsSshWizardOpen] = useState<boolean>(false);\n const [isAiderWizardOpen, setIsAiderWizardOpen] = useState<boolean>(false);\n const [isAiderDockerLaunch, setIsAiderDockerLaunch] = useState<boolean>(false);\n const [isClaudeWizardOpen, setIsClaudeWizardOpen] = useState<boolean>(false);\n const [isClaudeDockerLaunch, setIsClaudeDockerLaunch] = useState<boolean>(false);\n const [serverCwd, setServerCwd] = useState<string>(\"\");\n const [wsPort, setWsPort] = useState<number>(3001);\n const [appVersion, setAppVersion] = useState<string>(\"0.2.19\");\n const [lastSessionConfig, setLastSessionConfig] = useState<{\n type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker';\n name?: string;\n workspaceRoot?: string;\n scopedDirs?: string[];\n } | null>(null);\n\n const activeAgents = sessions.filter(s => s.id !== \"workspace-terminal\");\n const activeSession = sessions.find(s => s.id === activeSessionId);\n const isDockerActive = activeAgents.some(s => (s.type === 'claude-docker' || s.type === 'aider-docker') && s.status === 'running');\n const isSshActive = activeAgents.some(s => s.type === 'claude-ssh' && s.status === 'running');\n\n // Fetch all sessions on mount & periodically\n const fetchSessions = async () => {\n try {\n const res = await fetch(\"/api/sessions\");\n const data = await res.json();\n if (data.sessions) {\n setSessions(data.sessions);\n }\n if (data.wsPort) {\n setWsPort(data.wsPort);\n }\n if (data.originalCwd) {\n setServerCwd(data.originalCwd);\n }\n if (data.version) {\n setAppVersion(data.version);\n }\n } catch (err) {\n console.error(\"Failed to fetch sessions:\", err);\n }\n };\n\n const fetchRecents = async () => {\n try {\n const res = await fetch(\"/api/recents\");\n if (res.ok) {\n const data = await res.json();\n if (data.success && data.recents && data.recents.lastSession) {\n setLastSessionConfig(data.recents.lastSession);\n }\n }\n } catch (err) {\n console.error(\"Failed to fetch recents:\", err);\n }\n };\n\n useEffect(() => {\n const initFetch = async () => {\n await fetchSessions();\n await fetchRecents();\n };\n initFetch();\n \n // Register PWA Service Worker for standalone taskbar icon installation\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.register('/sw.js')\n .then((reg) => console.log('Service Worker registered:', reg.scope))\n .catch((err) => console.error('Service Worker registration failed:', err));\n }\n\n const interval = setInterval(fetchSessions, 4000);\n return () => clearInterval(interval);\n }, []);\n\n // Launch a new Session\n const handleLaunchSession = async (\n type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker',\n customName?: string,\n customWorkspaceRoot?: string,\n customScopedDirs?: string[]\n ) => {\n setIsLoading(true);\n try {\n let sessionName = customName;\n if (!sessionName) {\n if (type === 'claude') sessionName = \"Claude Local\";\n else if (type === 'claude-docker') sessionName = \"Claude Docker\";\n else if (type === 'claude-ssh') sessionName = \"Claude SSH\";\n else if (type === 'aider') sessionName = \"Aider Local\";\n else if (type === 'aider-docker') sessionName = \"Aider Docker\";\n else if (type === 'mock') sessionName = \"Mock Session\";\n }\n\n const launchBody: {\n type: string;\n name?: string;\n workspaceRoot?: string;\n scopedDirs?: string[];\n } = { \n type, \n name: sessionName, \n workspaceRoot: customWorkspaceRoot, \n scopedDirs: customScopedDirs \n };\n\n if ((type === 'aider' || type === 'aider-docker') && !customWorkspaceRoot) {\n try {\n const configRes = await fetch(\"/api/context/aider\");\n if (configRes.ok) {\n const configData = await configRes.json();\n if (configData.success && configData.config) {\n launchBody.workspaceRoot = configData.config.workspaceRoot;\n launchBody.scopedDirs = configData.config.scopedDirs;\n }\n }\n } catch (err) {\n console.error(\"Failed to load aider configuration before launch:\", err);\n }\n }\n\n const res = await fetch(\"/api/sessions/launch\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(launchBody)\n });\n const data = await res.json();\n if (data.success) {\n await fetchSessions();\n setActiveSessionId(data.session.id);\n setLastSessionConfig({ type, name: sessionName, workspaceRoot: customWorkspaceRoot, scopedDirs: customScopedDirs });\n }\n } catch (err) {\n console.error(\"Failed to launch session:\", err);\n } finally {\n setIsLoading(false);\n }\n };\n\n // Stop/Disconnect Session\n const handleStopSession = async (id: string, deletePermanently = false) => {\n try {\n const res = await fetch(\"/api/sessions/stop\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ id, delete: deletePermanently })\n });\n const data = await res.json();\n if (data.success) {\n if (deletePermanently && activeSessionId === id) {\n setActiveSessionId(null);\n }\n await fetchSessions();\n }\n } catch (err) {\n console.error(\"Failed to stop session:\", err);\n }\n };\n\n return (\n <div className={`${styles.container} ${activeSession ? styles.containerActive : \"\"}`}>\n {/* Header */}\n <header className={styles.header}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"1.5rem\" }}>\n <img src=\"/logo.png\" alt=\"NeuralLoom Logo\" style={{ width: \"160px\", height: \"160px\", borderRadius: \"16px\", objectFit: \"contain\" }} />\n <div className={styles.logoArea}>\n <h1 className={styles.title} style={{ margin: 0, lineHeight: 1.1 }}>NeuralLoom</h1>\n <span className={styles.subtitle}>Unified AI Orchestrator & Context Bridge</span>\n </div>\n </div>\n <div className={styles.statusIndicator}>\n <span className={styles.pulseDot}></span>\n <span>Orchestrator Online</span>\n </div>\n </header>\n\n {/* Main Dashboard Grid or Active Session IDE */}\n {activeSession ? (\n <div style={{ flex: 1, minHeight: 0, display: \"flex\", flexDirection: \"column\" }}>\n <IdeLayout\n sessionId={activeSession.id}\n workspaceRoot={activeSession.workspaceRoot || \"\"}\n scopedDirs={activeSession.scopedDirs || []}\n onClose={() => setActiveSessionId(null)}\n sessions={sessions}\n onSwitchSession={(id) => setActiveSessionId(id)}\n onRefreshSessions={fetchSessions}\n wsPort={wsPort}\n />\n </div>\n ) : (\n <div className={styles.dashboardGrid}>\n \n {/* Left Panel: Active Agents & Interactive Terminal */}\n <main className={styles.mainPanel}>\n <section>\n <h2 className={styles.sectionTitle}>Active AI Agents</h2>\n \n {activeAgents.length === 0 ? (\n <div className=\"card\" style={{ padding: \"3rem 1.5rem\", textAlign: \"center\" }}>\n <p style={{ color: \"var(--muted)\", marginBottom: \"1.5rem\" }}>\n No active agent sessions in this workspace. Launch a Claude or Aider agent session to begin.\n </p>\n <div style={{ display: \"flex\", gap: \"1rem\", justifyContent: \"center\", flexWrap: \"wrap\" }}>\n {lastSessionConfig && (\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n handleLaunchSession(\n lastSessionConfig.type,\n lastSessionConfig.name,\n lastSessionConfig.workspaceRoot,\n lastSessionConfig.scopedDirs\n );\n }}\n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(38, 92%, 50%) 0%, hsl(0, 84%, 60%) 100%)\",\n border: \"none\",\n maxWidth: \"200px\"\n }}\n title={`Re-launch: ${lastSessionConfig.name || lastSessionConfig.type}`}\n >\n ⚡ Re-launch Last Session\n </button>\n )}\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n setIsClaudeDockerLaunch(false);\n setIsClaudeWizardOpen(true);\n }}\n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(262, 83%, 60%) 0%, hsl(195, 100%, 45%) 100%)\",\n border: \"none\",\n maxWidth: \"200px\"\n }}\n >\n Launch Claude PTY\n </button>\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n setIsAiderDockerLaunch(false);\n setIsAiderWizardOpen(true);\n }}\n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(210, 80%, 45%) 0%, hsl(262, 80%, 55%) 100%)\",\n border: \"none\",\n maxWidth: \"200px\"\n }}\n >\n Launch Aider PTY\n </button>\n </div>\n <div style={{ marginTop: \"1.5rem\", fontSize: \"0.75rem\", color: \"var(--muted)\" }}>\n Want to verify layout features first?{\" \"}\n <span \n onClick={() => handleLaunchSession('mock')} \n style={{ color: \"var(--primary)\", cursor: \"pointer\", textDecoration: \"underline\" }}\n >\n Start simulated sandbox session\n </span>\n </div>\n </div>\n ) : (\n <div className={styles.agentGrid}>\n {activeAgents.map(session => (\n <div key={session.id} className={`${styles.agentCard} card ${activeSessionId === session.id ? styles.activeBorder : \"\"}`}>\n <div className={styles.agentHeader}>\n <span className={styles.agentName}>{session.name}</span>\n <div style={{ display: \"flex\", gap: \"0.35rem\", alignItems: \"center\" }}>\n {session.status === 'running' && session.agentState && (\n <span className={`${styles.agentStateBadge} ${styles['state-' + session.agentState]}`}>\n {session.agentState === 'thinking' && `${getModeIcon(session.type)} 💭 thinking`}\n {session.agentState === 'needs-input' && `${getModeIcon(session.type)} ⚠️ needs input`}\n {session.agentState === 'complete' && `${getModeIcon(session.type)} ✅ complete`}\n {session.agentState === 'idle' && `${getModeIcon(session.type)} 💤 idle`}\n </span>\n )}\n <span className={`${styles.agentBadge} ${session.status === 'stopped' ? styles.stoppedBadge : \"\"}`}>\n {session.status}\n </span>\n </div>\n </div>\n <div className={styles.cardBody}>\n <p style={{ fontSize: \"0.825rem\", color: \"var(--muted)\" }}>\n ID: <code style={{ fontSize: \"0.75rem\" }}>{session.id.substring(0, 8)}</code><br />\n Type: {\n session.type === 'claude' ? \"Claude Local PTY\" :\n session.type === 'claude-docker' ? \"Claude Docker PTY\" :\n session.type === 'claude-ssh' ? \"Claude SSH PTY\" :\n session.type === 'aider' ? \"Aider Local PTY\" :\n session.type === 'aider-docker' ? \"Aider Docker PTY\" :\n session.type === 'mock' ? \"Simulated Mock PTY\" : \"Unknown PTY\"\n }<br />\n Logs: {session.logsCount} captured lines\n </p>\n \n <div style={{ display: \"flex\", gap: \"0.5rem\", marginTop: \"1rem\" }}>\n {session.status === 'running' ? (\n <button \n onClick={() => handleStopSession(session.id, false)}\n style={{\n flex: 1,\n padding: \"0.4rem 0.6rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--danger)\",\n backgroundColor: \"transparent\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n color: \"var(--danger)\"\n }}\n >Stop</button>\n ) : (\n <button \n onClick={() => handleStopSession(session.id, true)}\n style={{\n flex: 1,\n padding: \"0.4rem 0.6rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--border)\",\n backgroundColor: \"transparent\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n color: \"var(--muted)\"\n }}\n >Delete</button>\n )}\n <button \n onClick={() => setActiveSessionId(session.id)}\n style={{\n flex: 2,\n padding: \"0.4rem 0.6rem\",\n borderRadius: \"6px\",\n border: \"none\",\n backgroundColor: activeSessionId === session.id ? \"var(--border-focus)\" : \"var(--primary)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n color: \"#fff\"\n }}\n >\n {activeSessionId === session.id ? \"Connected\" : \"Open Session\"}\n </button>\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </section>\n\n {/* Interactive Session Terminal Display */}\n {activeSessionId && activeSessionId !== \"workspace-terminal\" && (\n <section className=\"card\" style={{ display: \"flex\", flexDirection: \"column\", border: \"1px solid var(--border-focus)\" }}>\n <div className={styles.agentHeader} style={{ justifyContent: \"space-between\", background: \"rgba(109, 40, 217, 0.08)\" }}>\n <span style={{ fontWeight: 600, display: \"flex\", alignItems: \"center\", gap: \"0.5rem\" }}>\n 🖥️ Console Bridge — {sessions.find(s => s.id === activeSessionId)?.name}\n </span>\n <div style={{ display: \"flex\", gap: \"0.5rem\", alignItems: \"center\" }}>\n {sessions.find(s => s.id === activeSessionId)?.status === \"stopped\" && (\n <button\n onClick={async () => {\n try {\n const res = await fetch(\"/api/sessions/start\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ id: activeSessionId }),\n });\n if (res.ok) {\n await fetchSessions();\n } else {\n const data = await res.json();\n alert(data.error || \"Failed to restart session.\");\n }\n } catch (err) {\n console.error(\"Failed to restart session:\", err);\n alert(\"Network error: failed to restart session.\");\n }\n }}\n style={{\n padding: \"0.2rem 0.5rem\",\n borderRadius: \"4px\",\n border: \"1px solid #eab308\",\n backgroundColor: \"rgba(234, 179, 8, 0.15)\",\n color: \"#eab308\",\n fontSize: \"0.7rem\",\n fontWeight: 600,\n cursor: \"pointer\",\n boxShadow: \"0 0 8px rgba(234, 179, 8, 0.2)\",\n }}\n title=\"Restart the stopped session process runner\"\n >\n ⚡ Restart Session\n </button>\n )}\n <button \n onClick={() => setActiveSessionId(null)}\n style={{\n border: \"none\",\n background: \"none\",\n color: \"var(--muted)\",\n cursor: \"pointer\",\n fontSize: \"0.75rem\"\n }}\n >Close Panel ✖</button>\n </div>\n </div>\n <TerminalConsole sessionId={activeSessionId} wsPort={wsPort} />\n </section>\n )}\n\n {/* Workspace Shell Terminal */}\n <section>\n <h2 className={styles.sectionTitle}>Workspace Shell Terminal</h2>\n <div className=\"card\" style={{ display: \"flex\", flexDirection: \"column\", border: \"1px solid var(--border)\", padding: 0 }}>\n <div className={styles.agentHeader} style={{ justifyContent: \"space-between\", background: \"rgba(255, 255, 255, 0.02)\" }}>\n <span style={{ fontWeight: 600, display: \"flex\", alignItems: \"center\", gap: \"0.5rem\", fontSize: \"0.85rem\" }}>\n 💻 Local Workspace Shell (CWD: {serverCwd || \"root\"})\n </span>\n <span style={{ fontSize: \"0.7rem\", color: \"var(--muted)\" }}>Pre-configured environment</span>\n </div>\n <TerminalConsole sessionId=\"workspace-terminal\" height=\"300px\" wsPort={wsPort} />\n </div>\n </section>\n\n {/* Context Hub Staging section */}\n <section style={{ marginTop: \"2rem\" }}>\n <h2 className={styles.sectionTitle}>Shared Context Hub & Slash Commands</h2>\n <div className={styles.contextList}>\n <div className={`${styles.contextItem} card`}>\n <div className={styles.contextMeta}>\n <span className={styles.contextTitle}>Staged Context & System Rules (/ccc)</span>\n <span className={styles.contextDetails}>Compiles AGENTS.md guidelines and project files folder hierarchy map.</span>\n </div>\n <button\n onClick={async () => {\n if (!activeSessionId) return;\n await fetch(\"/api/sessions/inject\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ id: activeSessionId, command: \"/ccc\" })\n });\n }}\n disabled={!activeSessionId}\n style={{\n padding: \"0.4rem 0.8rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--primary)\",\n backgroundColor: \"transparent\",\n color: \"var(--primary)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n opacity: activeSessionId ? 1 : 0.5,\n cursor: activeSessionId ? \"pointer\" : \"not-allowed\"\n }}\n >\n 🚀 Mount Context (/ccc)\n </button>\n </div>\n \n <div className={`${styles.contextItem} card`}>\n <div className={styles.contextMeta}>\n <span className={styles.contextTitle}>Staged Developer Prompt (/ccp)</span>\n <span className={styles.contextDetails}>Executes instructions written in .ai/neural-loom/cprompt.md.</span>\n </div>\n <button\n onClick={async () => {\n if (!activeSessionId) return;\n await fetch(\"/api/sessions/inject\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ id: activeSessionId, command: \"/ccp\" })\n });\n }}\n disabled={!activeSessionId}\n style={{\n padding: \"0.4rem 0.8rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--success)\",\n backgroundColor: \"transparent\",\n color: \"var(--success)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n opacity: activeSessionId ? 1 : 0.5,\n cursor: activeSessionId ? \"pointer\" : \"not-allowed\"\n }}\n >\n ⚡ Trigger Prompt (/ccp)\n </button>\n </div>\n </div>\n <ContextEditor />\n </section>\n\n {/* Database Explorer Section */}\n <section style={{ marginTop: \"2rem\" }}>\n <h2 className={styles.sectionTitle}>Built-in Database Explorer & SQL Client</h2>\n <div className=\"card\" style={{ padding: 0, overflow: \"hidden\", height: \"480px\", border: \"1px solid var(--border)\" }}>\n <DbExplorer workspaceRoot={serverCwd || \"\"} />\n </div>\n </section>\n </main>\n\n {/* Right Panel: Environments & Actions */}\n <aside className={styles.sidePanel}>\n <section>\n <h2 className={styles.sectionTitle}>Execution Environments</h2>\n <div className={styles.envGrid}>\n <div className={styles.envRow}>\n <span className={styles.envName}>💻 Local host OS</span>\n <span className={styles.envStatus} style={{ color: \"var(--success)\" }}>Active</span>\n </div>\n <div className={styles.envRow} style={{ opacity: isDockerActive ? 1 : 0.6 }}>\n <span className={styles.envName}>🐳 Docker Sandbox</span>\n <span className={styles.envStatus} style={{ color: isDockerActive ? \"var(--success)\" : \"var(--muted)\" }}>\n {isDockerActive ? \"Active\" : \"Not Mounted\"}\n </span>\n </div>\n <div className={styles.envRow} style={{ opacity: isSshActive ? 1 : 0.6 }}>\n <span className={styles.envName}>🌐 Remote VM (SSH)</span>\n <span className={styles.envStatus} style={{ color: isSshActive ? \"var(--success)\" : \"var(--muted)\" }}>\n {isSshActive ? \"Active\" : \"Disconnected\"}\n </span>\n </div>\n </div>\n </section>\n\n <section style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.75rem\" }}>\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n setIsClaudeDockerLaunch(false);\n setIsClaudeWizardOpen(true);\n }} \n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(262, 83%, 60%) 0%, hsl(195, 100%, 45%) 100%)\",\n border: \"none\"\n }}\n >\n <span>🤖</span>\n <span>Launch Claude PTY</span>\n </button>\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n setIsClaudeDockerLaunch(true);\n setIsClaudeWizardOpen(true);\n }} \n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(170, 72%, 40%) 0%, hsl(195, 100%, 40%) 100%)\",\n border: \"none\"\n }}\n >\n <span>🐳</span>\n <span>Launch Docker PTY</span>\n </button>\n <button \n className={styles.quickLaunchBtn} \n onClick={() => setIsSshWizardOpen(true)} \n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(38, 92%, 50%) 0%, hsl(0, 84%, 60%) 100%)\",\n border: \"none\"\n }}\n >\n <span>🌐</span>\n <span>Launch SSH PTY</span>\n </button>\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n setIsAiderDockerLaunch(false);\n setIsAiderWizardOpen(true);\n }} \n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(210, 80%, 45%) 0%, hsl(262, 80%, 55%) 100%)\",\n border: \"none\"\n }}\n >\n <span>🐍</span>\n <span>Launch Aider PTY</span>\n </button>\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n setIsAiderDockerLaunch(true);\n setIsAiderWizardOpen(true);\n }} \n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(195, 100%, 40%) 0%, hsl(262, 80%, 55%) 100%)\",\n border: \"none\"\n }}\n >\n <span>🐳</span>\n <span>Launch Aider Docker</span>\n </button>\n </section>\n\n <section className=\"card\" style={{ padding: \"1.5rem\", display: \"flex\", flexDirection: \"column\", gap: \"0.75rem\" }}>\n <h3 style={{ fontSize: \"1rem\", fontWeight: 700 }}>Quick Actions</h3>\n <ul style={{ listStyle: \"none\", fontSize: \"0.875rem\", display: \"flex\", flexDirection: \"column\", gap: \"0.5rem\", color: \"var(--muted)\" }}>\n <li style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n <span>Configure global API Keys</span>\n <span style={{ color: \"var(--primary)\", cursor: \"pointer\" }}>→</span>\n </li>\n <li style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n <span>Edit rules templates</span>\n <span style={{ color: \"var(--primary)\", cursor: \"pointer\" }}>→</span>\n </li>\n <li style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n <span>Inspect process locks</span>\n <span style={{ color: \"var(--primary)\", cursor: \"pointer\" }}>→</span>\n </li>\n </ul>\n <div style={{ marginTop: \"1.2rem\", textAlign: \"center\", fontSize: \"0.72rem\", color: \"var(--muted)\" }}>\n Need to troubleshoot?{\" \"}\n <span \n onClick={() => handleLaunchSession('mock')} \n style={{ color: \"var(--primary)\", cursor: \"pointer\", textDecoration: \"underline\" }}\n >\n Launch simulated playground sandbox\n </span>\n </div>\n </section>\n </aside>\n\n </div>\n )}\n\n {/* Footer */}\n <footer className={styles.footer}>\n <span>NeuralLoom v{appVersion} — Experimental AI Orchestrator Bridge</span>\n <span>Directory: {serverCwd || \"Loading...\"}</span>\n </footer>\n\n {isSshWizardOpen && (\n <SshWizard\n onClose={() => setIsSshWizardOpen(false)}\n onConfirmLaunch={() => {\n setIsSshWizardOpen(false);\n handleLaunchSession('claude-ssh');\n }}\n />\n )}\n\n {isAiderWizardOpen && (\n <AiderWizard\n onClose={() => setIsAiderWizardOpen(false)}\n isDocker={isAiderDockerLaunch}\n onConfirmLaunch={() => {\n setIsAiderWizardOpen(false);\n handleLaunchSession(isAiderDockerLaunch ? 'aider-docker' : 'aider');\n }}\n />\n )}\n\n {isClaudeWizardOpen && (\n <ClaudeWizard\n onClose={() => setIsClaudeWizardOpen(false)}\n isDocker={isClaudeDockerLaunch}\n onConfirmLaunch={(name, workspaceRoot, scopedDirs) => {\n setIsClaudeWizardOpen(false);\n handleLaunchSession(isClaudeDockerLaunch ? 'claude-docker' : 'claude', name, workspaceRoot, scopedDirs);\n }}\n />\n )}\n </div>\n );\n}\n","\"use client\";\n/* eslint-disable react-hooks/set-state-in-effect, react-hooks/exhaustive-deps, @typescript-eslint/no-explicit-any */\n\nimport React, { useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ninterface DbConnectionProfile {\n id: string;\n name: string;\n type: \"sqlite\" | \"postgres\" | \"mysql\" | \"mssql\";\n filepath?: string; // sqlite\n host?: string; // pg, mysql\n port?: number; // pg, mysql\n database?: string; // pg, mysql\n username?: string; // pg, mysql\n password?: string; // pg, mysql\n ssl?: boolean; // pg\n readOnly?: boolean;\n}\n\ninterface TableSchema {\n name: string;\n type: string;\n}\n\ninterface ColumnSchema {\n name: string;\n type: string;\n nullable: boolean;\n defaultValue?: string | null;\n isPrimaryKey: boolean;\n isForeignKey: boolean;\n referencedTable?: string | null;\n referencedColumn?: string | null;\n}\n\ninterface DbExplorerProps {\n workspaceRoot: string;\n}\n\nexport default function DbExplorer({ workspaceRoot }: DbExplorerProps) {\n // Connection state\n const [profiles, setProfiles] = useState<{ global: DbConnectionProfile[]; workspace: DbConnectionProfile[] }>({\n global: [],\n workspace: [],\n });\n const [activeId, setActiveId] = useState<string | null>(null);\n const [isActiveGlobal, setIsActiveGlobal] = useState<boolean>(true);\n\n // Schema state\n const [tables, setTables] = useState<TableSchema[]>([]);\n const [expandedTable, setExpandedTable] = useState<string | null>(null);\n const [tableColumns, setTableColumns] = useState<{ [tableName: string]: ColumnSchema[] }>({});\n const [schemaLoading, setSchemaLoading] = useState(false);\n\n // Query state\n const [sql, setSql] = useState<string>(\"SELECT * FROM sqlite_master;\");\n const [queryLoading, setQueryLoading] = useState(false);\n const [queryError, setQueryError] = useState<string | null>(null);\n const [queryResult, setQueryResult] = useState<{\n rows: any[];\n fields: string[];\n durationMs: number;\n affectedRows?: number;\n } | null>(null);\n\n const [editingCell, setEditingCell] = useState<{ rowIndex: number; field: string; value: string } | null>(null);\n const [editStatus, setEditStatus] = useState<{ rowIndex: number; field: string; status: 'saving' | 'success' | 'error'; message?: string } | null>(null);\n\n // Connection management modal state\n const [showAddModal, setShowAddModal] = useState(false);\n const [isNewGlobal, setIsNewGlobal] = useState(false);\n const [newProfile, setNewProfile] = useState<Partial<DbConnectionProfile>>({\n id: \"\",\n name: \"\",\n type: \"sqlite\",\n filepath: \"./dev.db\",\n host: \"localhost\",\n port: 5432,\n database: \"postgres\",\n username: \"postgres\",\n password: \"\",\n ssl: false,\n readOnly: true,\n });\n const [profileSaving, setProfileSaving] = useState(false);\n const [testStatus, setTestStatus] = useState<{ success?: boolean; message?: string } | null>(null);\n\n // Fetch connection profiles\n const fetchProfiles = async () => {\n try {\n const res = await fetch(`/api/sql/connections?root=${encodeURIComponent(workspaceRoot)}`);\n if (res.ok) {\n const data = await res.json();\n if (data.success) {\n setProfiles({\n global: data.global || [],\n workspace: data.workspace || [],\n });\n setActiveId(data.activeId);\n setIsActiveGlobal(data.isActiveGlobal);\n }\n }\n } catch (err) {\n console.error(\"Failed to load connection profiles:\", err);\n }\n };\n\n // Fetch schema tables\n const fetchSchema = async () => {\n if (!activeId) {\n setTables([]);\n return;\n }\n setSchemaLoading(true);\n try {\n const res = await fetch(`/api/sql/schema?action=list_tables&root=${encodeURIComponent(workspaceRoot)}`);\n if (res.ok) {\n const data = await res.json();\n if (data.success) {\n setTables(data.tables || []);\n setQueryError(null);\n } else {\n setQueryError(data.error || \"Failed to load database schema.\");\n }\n } else {\n const data = await res.json();\n setQueryError(data.error || \"Failed to load database schema.\");\n }\n } catch (err) {\n console.error(\"Failed to load schema:\", err);\n } finally {\n setSchemaLoading(false);\n }\n };\n\n // Fetch table columns\n const fetchTableColumns = async (tableName: string) => {\n if (tableColumns[tableName]) {\n setExpandedTable(expandedTable === tableName ? null : tableName);\n return;\n }\n try {\n const res = await fetch(\n `/api/sql/schema?action=describe_table&table=${encodeURIComponent(tableName)}&root=${encodeURIComponent(\n workspaceRoot\n )}`\n );\n if (res.ok) {\n const data = await res.json();\n if (data.success) {\n setTableColumns((prev) => ({ ...prev, [tableName]: data.columns }));\n setExpandedTable(tableName);\n }\n }\n } catch (err) {\n console.error(`Failed to load columns for table ${tableName}:`, err);\n }\n };\n\n useEffect(() => {\n fetchProfiles();\n }, [workspaceRoot]);\n\n useEffect(() => {\n fetchSchema();\n setQueryResult(null);\n setExpandedTable(null);\n setTableColumns({});\n \n // Set query template based on active database type\n const activeProfile = isActiveGlobal\n ? profiles.global.find((p) => p.id === activeId)\n : profiles.workspace.find((p) => p.id === activeId);\n \n if (activeProfile) {\n if (activeProfile.type === \"sqlite\") {\n setSql(\"SELECT name, type FROM sqlite_master WHERE type='table';\");\n } else if (activeProfile.type === \"mssql\") {\n setSql(\"SELECT * FROM sys.tables;\");\n } else {\n setSql(\"SELECT * FROM information_schema.tables LIMIT 10;\");\n }\n }\n }, [activeId, isActiveGlobal, profiles.global.length, profiles.workspace.length]);\n\n // Handle setting active profile\n const handleSelectActive = async (id: string, isGlobal: boolean) => {\n try {\n const res = await fetch(\"/api/sql/connections\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n action: \"set_active\",\n profileId: id,\n isGlobal,\n root: workspaceRoot,\n }),\n });\n if (res.ok) {\n setActiveId(id);\n setIsActiveGlobal(isGlobal);\n }\n } catch (err) {\n console.error(\"Failed to set active profile:\", err);\n }\n };\n\n // Test connection profile\n const handleTestConnection = async () => {\n setTestStatus(null);\n try {\n const res = await fetch(\"/api/sql/connections\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n action: \"test\",\n profile: newProfile,\n root: workspaceRoot,\n }),\n });\n const data = await res.json();\n if (data.success) {\n setTestStatus({ success: true, message: \"Connection test successful!\" });\n } else {\n setTestStatus({ success: false, message: data.error || \"Connection test failed.\" });\n }\n } catch (err) {\n const error = err as Error;\n setTestStatus({ success: false, message: error.message || \"Failed to make test query.\" });\n }\n };\n\n // Save connection profile\n const handleSaveConnection = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!newProfile.name || !newProfile.type) return;\n\n setProfileSaving(true);\n const profileId = newProfile.id || `profile_${Math.random().toString(36).substring(7)}`;\n const finalProfile: DbConnectionProfile = {\n ...newProfile,\n id: profileId,\n name: newProfile.name,\n type: newProfile.type!,\n } as DbConnectionProfile;\n\n try {\n const res = await fetch(\"/api/sql/connections\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n action: \"save\",\n profile: finalProfile,\n isGlobal: isNewGlobal,\n root: workspaceRoot,\n }),\n });\n if (res.ok) {\n await fetchProfiles();\n setShowAddModal(false);\n // Automatically make it active if it is the only one\n if (!activeId) {\n handleSelectActive(profileId, isNewGlobal);\n }\n }\n } catch (err) {\n console.error(\"Failed to save profile:\", err);\n } finally {\n setProfileSaving(false);\n }\n };\n\n // Delete connection profile\n const handleDeleteConnection = async (id: string, isGlobal: boolean) => {\n if (!confirm(\"Are you sure you want to delete this connection profile?\")) return;\n try {\n const res = await fetch(\"/api/sql/connections\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n action: \"delete\",\n profileId: id,\n isGlobal,\n root: workspaceRoot,\n }),\n });\n if (res.ok) {\n await fetchProfiles();\n if (activeId === id) {\n setActiveId(null);\n }\n }\n } catch (err) {\n console.error(\"Failed to delete connection profile:\", err);\n }\n };\n\n const parseTableName = (sqlQuery: string): string | null => {\n const match = sqlQuery.match(/from\\s+([a-zA-Z0-9_\\`\"\\[\\]\\.]+)/i);\n if (!match) return null;\n let tbl = match[1].trim();\n tbl = tbl.replace(/[\\`\"\\[\\]]/g, \"\");\n const parts = tbl.split(\".\");\n return parts[parts.length - 1];\n };\n\n const handleCellSubmit = async (rowIndex: number, field: string, newValue: string, oldValue: any) => {\n if (activeProfile?.readOnly) {\n alert(\"Database connection is Read-Only. Updates are disabled.\");\n return;\n }\n\n const tableName = parseTableName(sql);\n if (!tableName) {\n alert(\"Could not extract table name from query for inline edit. Please ensure your query includes 'FROM tableName'.\");\n return;\n }\n\n setEditStatus({ rowIndex, field, status: 'saving' });\n\n try {\n let cols = tableColumns[tableName];\n if (!cols) {\n const res = await fetch(\n `/api/sql/schema?action=describe_table&table=${encodeURIComponent(tableName)}&root=${encodeURIComponent(\n workspaceRoot\n )}`\n );\n if (res.ok) {\n const data = await res.json();\n if (data.success && data.columns) {\n cols = data.columns;\n setTableColumns((prev) => ({ ...prev, [tableName]: data.columns }));\n }\n }\n }\n\n if (!cols) {\n throw new Error(`Could not load schema columns for table \"${tableName}\".`);\n }\n\n const pkCol = cols.find((c) => c.isPrimaryKey);\n if (!pkCol) {\n throw new Error(`Table \"${tableName}\" does not have a primary key. Inline editing requires a primary key.`);\n }\n\n const row = queryResult?.rows[rowIndex];\n if (!row || !(pkCol.name in row)) {\n throw new Error(`Primary key column \"${pkCol.name}\" was not returned in the query results. Please include it in your SELECT statement.`);\n }\n\n const pkValue = row[pkCol.name];\n const targetColSchema = cols.find((c) => c.name === field);\n if (!targetColSchema) {\n throw new Error(`Column \"${field}\" was not found in schema columns.`);\n }\n\n const isNumeric = (type: string) => {\n const t = type.toLowerCase();\n return t.includes(\"int\") || t.includes(\"decimal\") || t.includes(\"numeric\") || t.includes(\"float\") || t.includes(\"double\") || t.includes(\"real\");\n };\n\n let setExpr = \"\";\n if (newValue.toUpperCase() === \"NULL\") {\n setExpr = `${field} = NULL`;\n } else if (isNumeric(targetColSchema.type)) {\n if (newValue === \"\" || isNaN(Number(newValue))) {\n throw new Error(`Value \"${newValue}\" is not a valid number for column \"${field}\".`);\n }\n setExpr = `${field} = ${newValue}`;\n } else {\n setExpr = `${field} = '${newValue.replace(/'/g, \"''\")}'`;\n }\n\n let pkExpr = \"\";\n if (isNumeric(pkCol.type)) {\n pkExpr = `${pkCol.name} = ${pkValue}`;\n } else {\n pkExpr = `${pkCol.name} = '${String(pkValue).replace(/'/g, \"''\")}'`;\n }\n\n const updateSql = `UPDATE ${tableName} SET ${setExpr} WHERE ${pkExpr};`;\n\n const res = await fetch(\"/api/sql/query\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n sql: updateSql,\n root: workspaceRoot,\n }),\n });\n\n const data = await res.json();\n if (res.ok && data.success) {\n if (queryResult) {\n const updatedRows = [...queryResult.rows];\n let typedVal: any = newValue;\n if (newValue.toUpperCase() === \"NULL\") {\n typedVal = null;\n } else if (isNumeric(targetColSchema.type)) {\n typedVal = Number(newValue);\n }\n updatedRows[rowIndex] = {\n ...updatedRows[rowIndex],\n [field]: typedVal,\n };\n setQueryResult({\n ...queryResult,\n rows: updatedRows,\n });\n }\n setEditStatus({ rowIndex, field, status: 'success' });\n setTimeout(() => setEditStatus(null), 1500);\n } else {\n throw new Error(data.error || \"Update database query failed.\");\n }\n } catch (err) {\n const error = err as Error;\n setEditStatus({ rowIndex, field, status: 'error', message: error.message });\n alert(`Inline Update Failed:\\n${error.message}`);\n }\n };\n\n const handleExportCSV = () => {\n if (!queryResult || queryResult.rows.length === 0) return;\n try {\n const headers = queryResult.fields.join(\",\");\n const lines = queryResult.rows.map((row) => {\n return queryResult.fields.map((f) => {\n const val = row[f];\n if (val === null) return \"NULL\";\n const str = String(val);\n if (str.includes(\",\") || str.includes('\"') || str.includes(\"\\n\") || str.includes(\"\\r\")) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n }).join(\",\");\n });\n\n const csvContent = [headers, ...lines].join(\"\\r\\n\");\n const blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8;\" });\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.setAttribute(\"href\", url);\n link.setAttribute(\"download\", `query-results-${Date.now()}.csv`);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } catch (err) {\n console.error(\"Export CSV failed:\", err);\n alert(\"Failed to export as CSV\");\n }\n };\n\n const handleExportJSON = () => {\n if (!queryResult || queryResult.rows.length === 0) return;\n try {\n const jsonContent = JSON.stringify(queryResult.rows, null, 2);\n const blob = new Blob([jsonContent], { type: \"application/json;charset=utf-8;\" });\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.setAttribute(\"href\", url);\n link.setAttribute(\"download\", `query-results-${Date.now()}.json`);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } catch (err) {\n console.error(\"Export JSON failed:\", err);\n alert(\"Failed to export as JSON\");\n }\n };\n\n // Run SQL Query\n const handleRunQuery = async () => {\n if (!sql.trim() || !activeId) return;\n\n setQueryLoading(true);\n setQueryError(null);\n setQueryResult(null);\n\n try {\n const res = await fetch(\"/api/sql/query\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n sql: sql.trim(),\n root: workspaceRoot,\n }),\n });\n\n const data = await res.json();\n if (res.ok && data.success) {\n setQueryResult({\n rows: data.rows || [],\n fields: data.fields || [],\n durationMs: data.durationMs || 0,\n affectedRows: data.affectedRows,\n });\n // Proactively refresh schema if a table creation or DDL was run\n const isDDL =\n sql.toLowerCase().includes(\"create table\") ||\n sql.toLowerCase().includes(\"drop table\") ||\n sql.toLowerCase().includes(\"alter table\");\n if (isDDL) {\n fetchSchema();\n }\n } else {\n setQueryError(data.error || \"Failed to execute query.\");\n }\n } catch (err) {\n const error = err as Error;\n setQueryError(error.message || \"An unexpected error occurred during execution.\");\n } finally {\n setQueryLoading(false);\n }\n };\n\n const activeProfile = isActiveGlobal\n ? profiles.global.find((p) => p.id === activeId)\n : profiles.workspace.find((p) => p.id === activeId);\n\n return (\n <div style={styles.container}>\n {/* Sidebar: Connections & Schemas */}\n <div style={styles.sidebar}>\n {/* Connection Profiles section */}\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Connections</span>\n <button\n style={styles.addBtn}\n onClick={() => {\n setTestStatus(null);\n setNewProfile({\n id: \"\",\n name: \"\",\n type: \"sqlite\",\n filepath: \"./dev.db\",\n host: \"localhost\",\n port: 5432,\n database: \"postgres\",\n username: \"postgres\",\n password: \"\",\n ssl: false,\n readOnly: true,\n });\n setIsNewGlobal(false);\n setShowAddModal(true);\n }}\n title=\"Add Database Connection Profile\"\n >\n ➕ Add\n </button>\n </div>\n\n <div style={styles.profileList}>\n {profiles.global.length === 0 && profiles.workspace.length === 0 && (\n <div style={styles.emptyText}>No connections configured. Add one to start.</div>\n )}\n\n {profiles.workspace.length > 0 && (\n <>\n <div style={styles.groupHeader}>WORKSPACE CONNECTIONS</div>\n {profiles.workspace.map((p) => (\n <div\n key={p.id}\n style={{\n ...styles.profileItem,\n ...(activeId === p.id && !isActiveGlobal ? styles.profileItemActive : {}),\n }}\n onClick={() => handleSelectActive(p.id, false)}\n >\n <div style={styles.profileMeta}>\n <span style={styles.profileName}>📁 {p.name}</span>\n <span style={styles.profileType}>{p.type}</span>\n </div>\n <button\n style={styles.deleteProfileBtn}\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteConnection(p.id, false);\n }}\n >\n ✖\n </button>\n </div>\n ))}\n </>\n )}\n\n {profiles.global.length > 0 && (\n <>\n <div style={styles.groupHeader}>GLOBAL CONNECTIONS</div>\n {profiles.global.map((p) => (\n <div\n key={p.id}\n style={{\n ...styles.profileItem,\n ...(activeId === p.id && isActiveGlobal ? styles.profileItemActive : {}),\n }}\n onClick={() => handleSelectActive(p.id, true)}\n >\n <div style={styles.profileMeta}>\n <span style={styles.profileName}>🌐 {p.name}</span>\n <span style={styles.profileType}>{p.type}</span>\n </div>\n <button\n style={styles.deleteProfileBtn}\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteConnection(p.id, true);\n }}\n >\n ✖\n </button>\n </div>\n ))}\n </>\n )}\n </div>\n </div>\n\n {/* Database Tables tree view */}\n <div style={{ ...styles.section, flex: 1, borderTop: \"1px solid var(--border)\" }}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Schema Tables</span>\n {schemaLoading && <span style={styles.spinnerMini}></span>}\n </div>\n\n <div style={styles.tableList}>\n {!activeId && <div style={styles.emptyText}>Select an active connection to view tables.</div>}\n {activeId && tables.length === 0 && !schemaLoading && (\n <div style={styles.emptyText}>No tables found in database schema.</div>\n )}\n\n {tables.map((t) => (\n <div key={t.name} style={styles.tableTreeItem}>\n <div style={styles.tableRow} onClick={() => fetchTableColumns(t.name)}>\n <span style={styles.tableIcon}>{t.type === \"view\" ? \"👁️\" : \"📊\"}</span>\n <span style={styles.tableName}>{t.name}</span>\n <span style={styles.tableChevron}>{expandedTable === t.name ? \"▼\" : \"▶\"}</span>\n </div>\n\n {expandedTable === t.name && tableColumns[t.name] && (\n <div style={styles.columnList}>\n {tableColumns[t.name].map((col) => (\n <div key={col.name} style={styles.columnItem}>\n <span style={styles.columnIcon}>\n {col.isPrimaryKey ? \"🔑\" : col.isForeignKey ? \"🔗\" : \"▫\"}\n </span>\n <span style={styles.columnName} title={col.type}>\n {col.name}\n </span>\n <span style={styles.columnType}>\n {col.type.toLowerCase().substring(0, 12)}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Main Panel: Query Editor & Data Results */}\n <div style={styles.mainContent}>\n {/* Connection status header */}\n <div style={styles.statusBar}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"0.5rem\" }}>\n <span style={styles.statusLabel}>Active Connection:</span>\n {activeProfile ? (\n <span style={styles.statusValue}>\n {isActiveGlobal ? \"🌐\" : \"📁\"} {activeProfile.name} ({activeProfile.type})\n {activeProfile.readOnly && <span style={styles.readOnlyBadge}>Read-Only</span>}\n </span>\n ) : (\n <span style={{ ...styles.statusValue, color: \"var(--danger)\" }}>No Connection Selected</span>\n )}\n </div>\n\n <button\n style={{\n ...styles.runBtn,\n opacity: !activeId || queryLoading ? 0.6 : 1,\n cursor: !activeId || queryLoading ? \"not-allowed\" : \"pointer\",\n }}\n onClick={handleRunQuery}\n disabled={!activeId || queryLoading}\n >\n {queryLoading ? \"⌛ Running...\" : \"⚡ Execute Query (F5)\"}\n </button>\n </div>\n\n {/* SQL Input Area */}\n <div style={styles.editorArea}>\n <textarea\n style={styles.textarea}\n value={sql}\n onChange={(e) => setSql(e.target.value)}\n placeholder=\"Write your SQL query script here...\"\n onKeyDown={(e) => {\n if (e.key === \"F5\" || (e.ctrlKey && e.key === \"Enter\")) {\n e.preventDefault();\n handleRunQuery();\n }\n }}\n />\n </div>\n\n {/* Results Viewer */}\n <div style={styles.resultsArea}>\n {queryError && (\n <div style={styles.errorContainer}>\n <h4 style={{ margin: \"0 0 0.5rem 0\", color: \"var(--danger)\" }}>⚠️ Execution Error</h4>\n <pre style={styles.errorText}>{queryError}</pre>\n {queryError.includes(\"not installed\") && (\n <div style={styles.driverPrompt}>\n <p style={{ margin: \"0 0 0.5rem 0\" }}>To resolve this, run this installer command in your workspace terminal:</p>\n <code style={styles.driverCode}>\n {activeProfile?.type === \"sqlite\"\n ? \"npm install better-sqlite3\"\n : activeProfile?.type === \"postgres\"\n ? \"npm install pg\"\n : activeProfile?.type === \"mysql\"\n ? \"npm install mysql2\"\n : \"npm install mssql\"}\n </code>\n </div>\n )}\n </div>\n )}\n\n {queryResult && (\n <div style={styles.resultsWrapper}>\n <div style={styles.resultsMeta}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"0.5rem\" }}>\n <span>\n Query completed.{\" \"}\n {queryResult.affectedRows !== undefined\n ? `Affected rows: ${queryResult.affectedRows}`\n : `Returned ${queryResult.rows.length} rows`}\n </span>\n <span>Duration: {queryResult.durationMs}ms</span>\n </div>\n {queryResult.rows.length > 0 && (\n <div style={{ display: \"flex\", gap: \"0.4rem\" }}>\n <button onClick={handleExportCSV} style={styles.exportBtn}>📥 Export CSV</button>\n <button onClick={handleExportJSON} style={styles.exportBtn}>📥 Export JSON</button>\n </div>\n )}\n </div>\n\n {queryResult.rows.length > 0 ? (\n <div style={styles.tableContainer}>\n <table style={styles.table}>\n <thead>\n <tr>\n {queryResult.fields.map((f) => (\n <th key={f} style={styles.th}>\n {f}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {queryResult.rows.map((row, idx) => (\n <tr key={idx} style={idx % 2 === 0 ? styles.trEven : styles.trOdd}>\n {queryResult.fields.map((f) => {\n const isEditing = editingCell && editingCell.rowIndex === idx && editingCell.field === f;\n const isSaving = editStatus && editStatus.rowIndex === idx && editStatus.field === f && editStatus.status === 'saving';\n const isSuccess = editStatus && editStatus.rowIndex === idx && editStatus.field === f && editStatus.status === 'success';\n const isError = editStatus && editStatus.rowIndex === idx && editStatus.field === f && editStatus.status === 'error';\n \n let cellStyle = { ...styles.td, ...styles.editableCell };\n if (isSaving) {\n cellStyle = { ...cellStyle, backgroundColor: \"rgba(168, 85, 247, 0.15)\" };\n } else if (isSuccess) {\n cellStyle = { ...cellStyle, backgroundColor: \"rgba(16, 185, 129, 0.25)\" };\n } else if (isError) {\n cellStyle = { ...cellStyle, backgroundColor: \"rgba(239, 68, 68, 0.25)\" };\n }\n\n return (\n <td\n key={f}\n style={cellStyle}\n onDoubleClick={() => {\n if (activeProfile?.readOnly) {\n alert(\"Database connection is Read-Only. Editing is disabled.\");\n return;\n }\n setEditingCell({\n rowIndex: idx,\n field: f,\n value: row[f] === null ? \"NULL\" : String(row[f]),\n });\n }}\n className=\"db-cell\"\n title=\"Double click to edit cell\"\n >\n {isEditing ? (\n <input\n style={styles.cellInput}\n value={editingCell.value}\n autoFocus\n onChange={(e) => setEditingCell({ ...editingCell, value: e.target.value })}\n onKeyDown={async (e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n const newVal = editingCell.value;\n setEditingCell(null);\n if (newVal !== (row[f] === null ? \"NULL\" : String(row[f]))) {\n await handleCellSubmit(idx, f, newVal, row[f]);\n }\n } else if (e.key === \"Escape\") {\n setEditingCell(null);\n }\n }}\n onBlur={async () => {\n const newVal = editingCell.value;\n setEditingCell(null);\n if (newVal !== (row[f] === null ? \"NULL\" : String(row[f]))) {\n await handleCellSubmit(idx, f, newVal, row[f]);\n }\n }}\n />\n ) : (\n row[f] === null\n ? \"NULL\"\n : typeof row[f] === \"object\"\n ? JSON.stringify(row[f])\n : String(row[f])\n )}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n ) : (\n queryResult.affectedRows === undefined && (\n <div style={styles.emptyResults}>Query executed successfully, but returned 0 results.</div>\n )\n )}\n </div>\n )}\n\n {!queryError && !queryResult && !queryLoading && (\n <div style={styles.emptyResults}>Write a query script and click Execute to view table records.</div>\n )}\n\n {queryLoading && (\n <div style={styles.loadingWrapper}>\n <span style={styles.spinnerLarge}></span>\n <span style={{ color: \"var(--muted)\" }}>Running database statement...</span>\n </div>\n )}\n </div>\n </div>\n\n {/* Add Connection Profile Modal */}\n {showAddModal && typeof document !== \"undefined\" && createPortal(\n <div style={styles.modalOverlay}>\n <div style={styles.modalContent}>\n <h3 style={{ margin: \"0 0 1rem 0\", display: \"flex\", justifyContent: \"space-between\" }}>\n <span>🔌 Add Database Profile</span>\n <span style={{ cursor: \"pointer\" }} onClick={() => setShowAddModal(false)}>\n ✖\n </span>\n </h3>\n\n <form onSubmit={handleSaveConnection}>\n <div style={styles.formRow}>\n <label style={styles.label}>Profile Name</label>\n <input\n style={styles.input}\n type=\"text\"\n required\n value={newProfile.name}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, name: e.target.value }))}\n placeholder=\"e.g. Local Postgres, Dev SQLite\"\n />\n </div>\n\n <div style={styles.formRow}>\n <label style={styles.label}>Scope Level</label>\n <div style={{ display: \"flex\", gap: \"1rem\" }}>\n <label style={{ cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: \"0.25rem\" }}>\n <input\n type=\"radio\"\n checked={!isNewGlobal}\n onChange={() => setIsNewGlobal(false)}\n />\n Workspace Local\n </label>\n <label style={{ cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: \"0.25rem\" }}>\n <input\n type=\"radio\"\n checked={isNewGlobal}\n onChange={() => setIsNewGlobal(true)}\n />\n Global User Profile\n </label>\n </div>\n </div>\n\n <div style={styles.formRow}>\n <label style={styles.label}>Database Type</label>\n <select\n style={styles.select}\n value={newProfile.type}\n onChange={(e) => {\n const val = e.target.value as \"sqlite\" | \"postgres\" | \"mysql\" | \"mssql\";\n let defaultPort = 5432;\n if (val === \"mysql\") defaultPort = 3306;\n if (val === \"mssql\") defaultPort = 1433;\n setNewProfile((prev) => ({\n ...prev,\n type: val,\n filepath: val === \"sqlite\" ? \"./dev.db\" : undefined,\n port: val !== \"sqlite\" ? defaultPort : undefined,\n database: val === \"sqlite\" ? undefined : (val === \"mssql\" ? \"master\" : (val === \"postgres\" ? \"postgres\" : \"\")),\n username: val === \"sqlite\" ? undefined : (val === \"mssql\" ? \"sa\" : (val === \"postgres\" ? \"postgres\" : \"root\")),\n }));\n }}\n >\n <option value=\"sqlite\">SQLite (Local File)</option>\n <option value=\"postgres\">PostgreSQL</option>\n <option value=\"mysql\">MySQL</option>\n <option value=\"mssql\">Microsoft SQL Server</option>\n </select>\n </div>\n\n {newProfile.type === \"sqlite\" ? (\n <div style={styles.formRow}>\n <label style={styles.label}>Database File Path</label>\n <input\n style={styles.input}\n type=\"text\"\n required\n value={newProfile.filepath || \"\"}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, filepath: e.target.value }))}\n placeholder=\"Relative (e.g. ./data/dev.db) or Absolute path\"\n />\n </div>\n ) : (\n <>\n <div style={{ display: \"flex\", gap: \"1rem\" }}>\n <div style={{ ...styles.formRow, flex: 3 }}>\n <label style={styles.label}>Host IP Address</label>\n <input\n style={styles.input}\n type=\"text\"\n required\n value={newProfile.host || \"\"}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, host: e.target.value }))}\n placeholder=\"localhost or IP\"\n />\n </div>\n <div style={{ ...styles.formRow, flex: 1 }}>\n <label style={styles.label}>Port</label>\n <input\n style={styles.input}\n type=\"number\"\n required\n value={newProfile.port || 0}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, port: parseInt(e.target.value) }))}\n />\n </div>\n </div>\n\n <div style={styles.formRow}>\n <label style={styles.label}>Database Name</label>\n <input\n style={styles.input}\n type=\"text\"\n required\n value={newProfile.database || \"\"}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, database: e.target.value }))}\n />\n </div>\n\n <div style={{ display: \"flex\", gap: \"1rem\" }}>\n <div style={{ ...styles.formRow, flex: 1 }}>\n <label style={styles.label}>Username</label>\n <input\n style={styles.input}\n type=\"text\"\n required\n value={newProfile.username || \"\"}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, username: e.target.value }))}\n />\n </div>\n <div style={{ ...styles.formRow, flex: 1 }}>\n <label style={styles.label}>Password</label>\n <input\n style={styles.input}\n type=\"password\"\n value={newProfile.password || \"\"}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, password: e.target.value }))}\n />\n </div>\n </div>\n\n {(newProfile.type === \"postgres\" || newProfile.type === \"mssql\") && (\n <div style={styles.formRow}>\n <label style={{ cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: \"0.25rem\" }}>\n <input\n type=\"checkbox\"\n checked={!!newProfile.ssl}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, ssl: e.target.checked }))}\n />\n Require SSL Secure Connection\n </label>\n </div>\n )}\n </>\n )}\n\n <div style={styles.formRow}>\n <label style={{ cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: \"0.25rem\" }}>\n <input\n type=\"checkbox\"\n checked={!!newProfile.readOnly}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, readOnly: e.target.checked }))}\n />\n Enforce Read-Only Connection (Disable mutations)\n </label>\n </div>\n\n {testStatus && (\n <div\n style={{\n ...styles.testResult,\n backgroundColor: testStatus.success ? \"rgba(16, 185, 129, 0.12)\" : \"rgba(239, 68, 68, 0.12)\",\n border: testStatus.success ? \"1px solid var(--success)\" : \"1px solid var(--danger)\",\n color: testStatus.success ? \"var(--success)\" : \"var(--danger)\",\n }}\n >\n {testStatus.message}\n </div>\n )}\n\n <div style={styles.modalFooter}>\n <button type=\"button\" style={styles.testBtn} onClick={handleTestConnection}>\n 🔍 Test Connection\n </button>\n <div style={{ display: \"flex\", gap: \"0.5rem\" }}>\n <button type=\"button\" style={styles.cancelBtn} onClick={() => setShowAddModal(false)}>\n Cancel\n </button>\n <button type=\"submit\" style={styles.saveBtn} disabled={profileSaving}>\n {profileSaving ? \"Saving...\" : \"Save Profile\"}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n}\n\n// Styling Object incorporating harmonized CSS dashboard rules\nconst styles: { [key: string]: React.CSSProperties } = {\n container: {\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n backgroundColor: \"#05070a\",\n color: \"#cbd5e1\",\n fontSize: \"0.875rem\",\n minHeight: 0,\n },\n sidebar: {\n width: \"280px\",\n borderRight: \"1px solid var(--border)\",\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: 0,\n backgroundColor: \"rgba(10, 15, 24, 0.4)\",\n flexShrink: 0,\n },\n section: {\n display: \"flex\",\n flexDirection: \"column\",\n padding: \"1rem\",\n minHeight: 0,\n },\n sectionHeader: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n marginBottom: \"0.75rem\",\n },\n sectionTitle: {\n fontWeight: 700,\n letterSpacing: \"0.05em\",\n textTransform: \"uppercase\",\n fontSize: \"0.75rem\",\n color: \"var(--muted)\",\n },\n addBtn: {\n padding: \"0.2rem 0.5rem\",\n borderRadius: \"4px\",\n border: \"1px solid var(--primary)\",\n backgroundColor: \"transparent\",\n color: \"var(--primary)\",\n fontSize: \"0.7rem\",\n fontWeight: 600,\n cursor: \"pointer\",\n },\n profileList: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.4rem\",\n overflowY: \"auto\",\n maxHeight: \"220px\",\n },\n groupHeader: {\n fontSize: \"0.65rem\",\n fontWeight: 600,\n color: \"var(--muted)\",\n marginTop: \"0.5rem\",\n marginBottom: \"0.2rem\",\n letterSpacing: \"0.05em\",\n },\n profileItem: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"0.5rem 0.6rem\",\n borderRadius: \"6px\",\n backgroundColor: \"rgba(255, 255, 255, 0.02)\",\n border: \"1px solid var(--border)\",\n cursor: \"pointer\",\n transition: \"all 0.2s ease\",\n },\n profileItemActive: {\n backgroundColor: \"rgba(109, 40, 217, 0.08)\",\n border: \"1px solid var(--border-focus)\",\n boxShadow: \"0 0 10px rgba(109, 40, 217, 0.1)\",\n },\n profileMeta: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.15rem\",\n flex: 1,\n minWidth: 0,\n },\n profileName: {\n fontWeight: 600,\n fontSize: \"0.8rem\",\n color: \"#fff\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n profileType: {\n fontSize: \"0.7rem\",\n color: \"var(--muted)\",\n textTransform: \"uppercase\",\n },\n deleteProfileBtn: {\n background: \"none\",\n border: \"none\",\n color: \"rgba(239, 68, 68, 0.4)\",\n cursor: \"pointer\",\n fontSize: \"0.75rem\",\n padding: \"0.25rem\",\n },\n tableList: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.25rem\",\n overflowY: \"auto\",\n flex: 1,\n minHeight: 0,\n },\n emptyText: {\n fontSize: \"0.75rem\",\n color: \"var(--muted)\",\n textAlign: \"center\",\n padding: \"1rem 0\",\n },\n tableTreeItem: {\n display: \"flex\",\n flexDirection: \"column\",\n },\n tableRow: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"0.35rem 0.5rem\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n userSelect: \"none\",\n transition: \"background 0.2s ease\",\n },\n tableIcon: {\n marginRight: \"0.4rem\",\n fontSize: \"0.9rem\",\n },\n tableName: {\n flex: 1,\n fontSize: \"0.8rem\",\n color: \"#e2e8f0\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n tableChevron: {\n fontSize: \"0.6rem\",\n color: \"var(--muted)\",\n marginLeft: \"0.25rem\",\n },\n columnList: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.2rem\",\n paddingLeft: \"1.5rem\",\n marginTop: \"0.15rem\",\n borderLeft: \"1px dashed rgba(255,255,255,0.06)\",\n marginLeft: \"0.8rem\",\n marginBottom: \"0.25rem\",\n },\n columnItem: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"0.15rem 0.25rem\",\n fontSize: \"0.75rem\",\n },\n columnIcon: {\n marginRight: \"0.3rem\",\n fontSize: \"0.7rem\",\n },\n columnName: {\n flex: 1,\n color: \"var(--muted)\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n columnType: {\n fontSize: \"0.65rem\",\n color: \"rgba(109, 40, 217, 0.75)\",\n fontFamily: \"monospace\",\n paddingLeft: \"0.5rem\",\n },\n mainContent: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: 0,\n backgroundColor: \"#05070a\",\n },\n statusBar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"0.75rem 1rem\",\n borderBottom: \"1px solid var(--border)\",\n backgroundColor: \"rgba(15, 23, 42, 0.3)\",\n flexShrink: 0,\n },\n statusLabel: {\n fontSize: \"0.75rem\",\n color: \"var(--muted)\",\n },\n statusValue: {\n fontSize: \"0.8rem\",\n fontWeight: 600,\n color: \"#fff\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.4rem\",\n },\n readOnlyBadge: {\n padding: \"0.1rem 0.4rem\",\n borderRadius: \"4px\",\n backgroundColor: \"rgba(234, 179, 8, 0.12)\",\n color: \"#eab308\",\n fontSize: \"0.65rem\",\n fontWeight: 700,\n border: \"1px solid rgba(234, 179, 8, 0.2)\",\n },\n runBtn: {\n padding: \"0.4rem 0.9rem\",\n borderRadius: \"6px\",\n border: \"none\",\n backgroundColor: \"var(--primary)\",\n color: \"#fff\",\n fontSize: \"0.8rem\",\n fontWeight: 600,\n transition: \"all 0.2s ease\",\n },\n editorArea: {\n height: \"180px\",\n borderBottom: \"1px solid var(--border)\",\n position: \"relative\",\n flexShrink: 0,\n },\n textarea: {\n width: \"100%\",\n height: \"100%\",\n backgroundColor: \"#080c14\",\n border: \"none\",\n resize: \"none\",\n color: \"#e2e8f0\",\n fontFamily: \"monospace\",\n fontSize: \"0.85rem\",\n padding: \"1rem\",\n outline: \"none\",\n lineHeight: \"1.4\",\n },\n resultsArea: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: 0,\n padding: \"1rem\",\n },\n errorContainer: {\n padding: \"1rem\",\n borderRadius: \"8px\",\n backgroundColor: \"rgba(239, 68, 68, 0.08)\",\n border: \"1px solid rgba(239, 68, 68, 0.2)\",\n overflowY: \"auto\",\n },\n errorText: {\n margin: 0,\n fontFamily: \"monospace\",\n fontSize: \"0.8rem\",\n color: \"#f87171\",\n whiteSpace: \"pre-wrap\",\n },\n driverPrompt: {\n marginTop: \"1rem\",\n padding: \"0.75rem\",\n borderRadius: \"6px\",\n backgroundColor: \"rgba(0, 0, 0, 0.3)\",\n border: \"1px solid var(--border)\",\n },\n driverCode: {\n display: \"block\",\n padding: \"0.5rem\",\n backgroundColor: \"#090d16\",\n borderRadius: \"4px\",\n fontFamily: \"monospace\",\n fontSize: \"0.8rem\",\n color: \"var(--primary)\",\n border: \"1px solid var(--border)\",\n },\n resultsWrapper: {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n minHeight: 0,\n },\n resultsMeta: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontSize: \"0.75rem\",\n color: \"var(--muted)\",\n marginBottom: \"0.5rem\",\n },\n tableContainer: {\n flex: 1,\n overflow: \"auto\",\n border: \"1px solid var(--border)\",\n borderRadius: \"6px\",\n },\n table: {\n width: \"100%\",\n borderCollapse: \"collapse\",\n fontFamily: \"monospace\",\n fontSize: \"0.8rem\",\n },\n th: {\n padding: \"0.5rem 0.75rem\",\n textAlign: \"left\",\n backgroundColor: \"#0f172a\",\n borderBottom: \"1px solid var(--border)\",\n color: \"#94a3b8\",\n fontWeight: 600,\n position: \"sticky\",\n top: 0,\n zIndex: 1,\n },\n td: {\n padding: \"0.4rem 0.75rem\",\n borderBottom: \"1px solid rgba(255, 255, 255, 0.03)\",\n color: \"#cbd5e1\",\n whiteSpace: \"nowrap\",\n },\n exportBtn: {\n padding: \"0.2rem 0.5rem\",\n borderRadius: \"4px\",\n border: \"1px solid var(--border)\",\n backgroundColor: \"rgba(255, 255, 255, 0.02)\",\n color: \"var(--muted)\",\n fontSize: \"0.7rem\",\n fontWeight: 600,\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n },\n cellInput: {\n width: \"100%\",\n backgroundColor: \"#070a12\",\n border: \"1px solid var(--border-focus)\",\n borderRadius: \"3px\",\n color: \"#fff\",\n padding: \"0.1rem 0.3rem\",\n fontSize: \"0.8rem\",\n fontFamily: \"monospace\",\n outline: \"none\",\n },\n editableCell: {\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n },\n trEven: {\n backgroundColor: \"transparent\",\n },\n trOdd: {\n backgroundColor: \"rgba(255, 255, 255, 0.01)\",\n },\n emptyResults: {\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"var(--muted)\",\n fontSize: \"0.8rem\",\n textAlign: \"center\",\n },\n loadingWrapper: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"1rem\",\n },\n spinnerLarge: {\n width: \"24px\",\n height: \"24px\",\n border: \"3px solid rgba(109, 40, 217, 0.15)\",\n borderTop: \"3px solid var(--primary)\",\n borderRadius: \"50%\",\n animation: \"spin 1s linear infinite\",\n },\n spinnerMini: {\n width: \"12px\",\n height: \"12px\",\n border: \"2px solid rgba(255, 255, 255, 0.1)\",\n borderTop: \"2px solid var(--muted)\",\n borderRadius: \"50%\",\n animation: \"spin 1s linear infinite\",\n },\n modalOverlay: {\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(0, 0, 0, 0.7)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: 999,\n },\n modalContent: {\n width: \"480px\",\n backgroundColor: \"#0d131f\",\n borderRadius: \"12px\",\n border: \"1px solid var(--border-focus)\",\n padding: \"1.5rem\",\n boxShadow: \"0 4px 24px rgba(0, 0, 0, 0.5)\",\n },\n formRow: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.35rem\",\n marginBottom: \"1rem\",\n },\n label: {\n fontSize: \"0.75rem\",\n fontWeight: 600,\n color: \"var(--muted)\",\n },\n input: {\n padding: \"0.5rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--border)\",\n backgroundColor: \"#070a12\",\n color: \"#fff\",\n outline: \"none\",\n fontSize: \"0.8rem\",\n },\n select: {\n padding: \"0.5rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--border)\",\n backgroundColor: \"#070a12\",\n color: \"#fff\",\n outline: \"none\",\n fontSize: \"0.8rem\",\n },\n testResult: {\n padding: \"0.5rem\",\n borderRadius: \"6px\",\n fontSize: \"0.75rem\",\n marginBottom: \"1rem\",\n },\n modalFooter: {\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: \"1.5rem\",\n },\n testBtn: {\n padding: \"0.4rem 0.75rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--border)\",\n backgroundColor: \"transparent\",\n color: \"var(--muted)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n cursor: \"pointer\",\n },\n cancelBtn: {\n padding: \"0.4rem 0.75rem\",\n borderRadius: \"6px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n color: \"var(--muted)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n cursor: \"pointer\",\n },\n saveBtn: {\n padding: \"0.4rem 0.75rem\",\n borderRadius: \"6px\",\n border: \"none\",\n backgroundColor: \"var(--primary)\",\n color: \"#fff\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n cursor: \"pointer\",\n },\n};\n\n// Inject keyframe spinner directly for robustness\nif (typeof document !== \"undefined\") {\n const style = document.createElement(\"style\");\n style.innerHTML = `\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n .db-cell:hover {\n background-color: rgba(255, 255, 255, 0.03) !important;\n outline: 1px dashed rgba(255, 255, 255, 0.2);\n }\n `;\n document.head.appendChild(style);\n}\n"],"names":["BailoutToCSRError","isBailoutToCSRError","BAILOUT_TO_CSR","Error","constructor","reason","digest","err","BailoutToCSR","children","window","encodeURIPath","file","split","map","p","encodeURIComponent","join","getAssetToken","getAssetTokenQuery","getDeploymentId","getDeploymentIdQuery","deploymentId","document","documentElement","dataset","dplId","process","env","NEXT_DEPLOYMENT_ID","undefined","ampersand","id","NEXT_IMMUTABLE_ASSET_TOKEN","PreloadChunks","moduleIds","workStore","workAsyncStorage","getStore","allFiles","reactLoadableManifest","manifest","key","chunks","files","push","length","query","chunk","href","assetPrefix","isCss","endsWith","link","precedence","rel","as","nonce","preload","fetchPriority","convertModule","mod","hasDefault","default","defaultOptions","loader","Promise","resolve","loading","ssr","Loadable","options","opts","Lazy","lazy","then","Loading","LoadableComponent","props","fallbackElement","isLoading","pastDelay","error","hasSuspenseBoundary","Wrap","Suspense","Fragment","wrapProps","fallback","modules","displayName","dynamic","dynamicOptions","loadableOptions","mergedOptions","loadableGenerated","DbExplorer","workspaceRoot","profiles","setProfiles","global","workspace","activeId","setActiveId","isActiveGlobal","setIsActiveGlobal","tables","setTables","expandedTable","setExpandedTable","tableColumns","setTableColumns","schemaLoading","setSchemaLoading","sql","setSql","queryLoading","setQueryLoading","queryError","setQueryError","queryResult","setQueryResult","editingCell","setEditingCell","editStatus","setEditStatus","showAddModal","setShowAddModal","isNewGlobal","setIsNewGlobal","newProfile","setNewProfile","name","type","filepath","host","port","database","username","password","ssl","readOnly","profileSaving","setProfileSaving","testStatus","setTestStatus","fetchProfiles","res","fetch","ok","data","json","success","console","fetchSchema","fetchTableColumns","tableName","prev","columns","activeProfile","find","handleSelectActive","isGlobal","method","headers","body","JSON","stringify","action","profileId","root","handleTestConnection","profile","message","handleSaveConnection","e","preventDefault","Math","random","toString","substring","finalProfile","handleDeleteConnection","confirm","parseTableName","sqlQuery","match","tbl","trim","replace","parts","handleCellSubmit","rowIndex","field","newValue","oldValue","alert","status","cols","pkCol","c","isPrimaryKey","row","rows","pkValue","targetColSchema","isNumeric","t","toLowerCase","includes","setExpr","toUpperCase","isNaN","Number","pkExpr","String","updateSql","updatedRows","typedVal","setTimeout","handleExportCSV","fields","lines","f","val","str","csvContent","blob","Blob","url","URL","createObjectURL","createElement","setAttribute","Date","now","appendChild","click","removeChild","handleExportJSON","jsonContent","handleRunQuery","durationMs","affectedRows","isDDL","style","styles","container","sidebar","section","sectionHeader","sectionTitle","addBtn","onClick","title","profileList","emptyText","groupHeader","profileItem","profileItemActive","profileMeta","profileName","profileType","deleteProfileBtn","stopPropagation","flex","borderTop","spinnerMini","tableList","tableTreeItem","tableRow","tableIcon","tableChevron","columnList","col","columnItem","columnIcon","isForeignKey","columnName","columnType","mainContent","statusBar","display","alignItems","gap","statusLabel","statusValue","readOnlyBadge","color","runBtn","opacity","cursor","disabled","editorArea","textarea","value","onChange","target","placeholder","onKeyDown","ctrlKey","resultsArea","errorContainer","margin","errorText","driverPrompt","driverCode","resultsWrapper","resultsMeta","exportBtn","tableContainer","table","th","idx","trEven","trOdd","isEditing","isSaving","isSuccess","isError","cellStyle","td","editableCell","backgroundColor","onDoubleClick","className","cellInput","autoFocus","newVal","onBlur","emptyResults","loadingWrapper","spinnerLarge","modalOverlay","modalContent","justifyContent","onSubmit","formRow","label","input","required","checked","select","defaultPort","parseInt","testResult","border","modalFooter","testBtn","cancelBtn","saveBtn","height","width","fontSize","minHeight","borderRight","flexDirection","flexShrink","padding","marginBottom","fontWeight","letterSpacing","textTransform","borderRadius","overflowY","maxHeight","marginTop","transition","boxShadow","minWidth","whiteSpace","overflow","textOverflow","background","textAlign","userSelect","marginRight","marginLeft","paddingLeft","borderLeft","fontFamily","borderBottom","position","resize","outline","lineHeight","borderCollapse","top","zIndex","animation","left","right","bottom","innerHTML","head"],"mappings":"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","ignoreList":[0,1,2,3,4,5,6]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/next/src/shared/lib/lazy-dynamic/bailout-to-csr.ts","../../../../node_modules/next/src/shared/lib/lazy-dynamic/dynamic-bailout-to-csr.tsx","../../../../node_modules/next/src/shared/lib/encode-uri-path.ts","../../../../node_modules/next/src/shared/lib/deployment-id.ts","../../../../node_modules/next/src/shared/lib/lazy-dynamic/preload-chunks.tsx","../../../../node_modules/next/src/shared/lib/lazy-dynamic/loadable.tsx","../../../../node_modules/next/src/shared/lib/app-dynamic.tsx","turbopack:///[project]/src/app/page.module.css [app-ssr] (css module)","../../../../src/app/page.tsx","../../../../src/app/components/DbExplorer.tsx"],"sourcesContent":["// This has to be a shared module which is shared between client component error boundary and dynamic component\nconst BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING'\n\n/** An error that should be thrown when we want to bail out to client-side rendering. */\nexport class BailoutToCSRError extends Error {\n public readonly digest = BAILOUT_TO_CSR\n\n constructor(public readonly reason: string) {\n super(`Bail out to client-side rendering: ${reason}`)\n }\n}\n\n/** Checks if a passed argument is an error that is thrown if we want to bail out to client-side rendering. */\nexport function isBailoutToCSRError(err: unknown): err is BailoutToCSRError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === BAILOUT_TO_CSR\n}\n","'use client'\n\nimport type { ReactElement } from 'react'\nimport { BailoutToCSRError } from './bailout-to-csr'\n\ninterface BailoutToCSRProps {\n reason: string\n children: ReactElement\n}\n\n/**\n * If rendered on the server, this component throws an error\n * to signal Next.js that it should bail out to client-side rendering instead.\n */\nexport function BailoutToCSR({ reason, children }: BailoutToCSRProps) {\n if (typeof window === 'undefined') {\n throw new BailoutToCSRError(reason)\n }\n\n return children\n}\n","export function encodeURIPath(file: string) {\n return file\n .split('/')\n .map((p) => encodeURIComponent(p))\n .join('/')\n}\n","let deploymentId: string | undefined\n\nif (typeof window !== 'undefined') {\n deploymentId = document.documentElement.dataset.dplId\n // Immediately remove the attribute to prevent hydration errors (the dplId was inserted into the\n // HTML only), React isn't aware of it at all.\n delete document.documentElement.dataset.dplId\n} else {\n // Client side: replaced with globalThis.NEXT_DEPLOYMENT_ID\n // Server side: left as is or replaced with a string or replaced with false\n deploymentId = process.env.NEXT_DEPLOYMENT_ID || undefined\n}\n\nexport function getDeploymentId(): string | undefined {\n return deploymentId\n}\n\nexport function getDeploymentIdQuery(ampersand = false): string {\n let id = getDeploymentId()\n if (id) {\n return `${ampersand ? '&' : '?'}dpl=${id}`\n }\n return ''\n}\n\nexport function getAssetToken(): string | undefined {\n return (\n process.env.NEXT_IMMUTABLE_ASSET_TOKEN || process.env.NEXT_DEPLOYMENT_ID\n )\n}\n\nexport function getAssetTokenQuery(ampersand = false): string {\n let id = getAssetToken()\n if (id) {\n return `${ampersand ? '&' : '?'}dpl=${id}`\n }\n return ''\n}\n","'use client'\n\nimport { preload } from 'react-dom'\n\nimport { workAsyncStorage } from '../../../server/app-render/work-async-storage.external'\nimport { encodeURIPath } from '../encode-uri-path'\nimport { getAssetTokenQuery } from '../deployment-id'\n\nexport function PreloadChunks({\n moduleIds,\n}: {\n moduleIds: string[] | undefined\n}) {\n // Early return in client compilation and only load requestStore on server side\n if (typeof window !== 'undefined') {\n return null\n }\n\n const workStore = workAsyncStorage.getStore()\n if (workStore === undefined) {\n return null\n }\n\n const allFiles = []\n\n // Search the current dynamic call unique key id in react loadable manifest,\n // and find the corresponding CSS files to preload\n if (workStore.reactLoadableManifest && moduleIds) {\n const manifest = workStore.reactLoadableManifest\n for (const key of moduleIds) {\n if (!manifest[key]) continue\n const chunks = manifest[key].files\n allFiles.push(...chunks)\n }\n }\n\n if (allFiles.length === 0) {\n return null\n }\n\n const query = getAssetTokenQuery()\n\n return (\n <>\n {allFiles.map((chunk) => {\n const href = `${workStore.assetPrefix}/_next/${encodeURIPath(chunk)}${query}`\n const isCss = chunk.endsWith('.css')\n // If it's stylesheet we use `precedence` o help hoist with React Float.\n // For stylesheets we actually need to render the CSS because nothing else is going to do it so it needs to be part of the component tree.\n // The `preload` for stylesheet is not optional.\n if (isCss) {\n return (\n <link\n key={chunk}\n // @ts-ignore\n precedence=\"dynamic\"\n href={href}\n rel=\"stylesheet\"\n as=\"style\"\n nonce={workStore.nonce}\n />\n )\n } else {\n // If it's script we use ReactDOM.preload to preload the resources\n preload(href, {\n as: 'script',\n fetchPriority: 'low',\n nonce: workStore.nonce,\n })\n return null\n }\n })}\n </>\n )\n}\n","import { Suspense, Fragment, lazy } from 'react'\nimport { BailoutToCSR } from './dynamic-bailout-to-csr'\nimport type { ComponentModule } from './types'\nimport { PreloadChunks } from './preload-chunks'\n\n// Normalize loader to return the module as form { default: Component } for `React.lazy`.\n// Also for backward compatible since next/dynamic allows to resolve a component directly with loader\n// Client component reference proxy need to be converted to a module.\nfunction convertModule<P>(\n mod: React.ComponentType<P> | ComponentModule<P> | undefined\n): {\n default: React.ComponentType<P>\n} {\n // Check \"default\" prop before accessing it, as it could be client reference proxy that could break it reference.\n // Cases:\n // mod: { default: Component }\n // mod: Component\n // mod: { default: proxy(Component) }\n // mod: proxy(Component)\n const hasDefault = mod && 'default' in mod\n return {\n default: hasDefault\n ? (mod as ComponentModule<P>).default\n : (mod as React.ComponentType<P>),\n }\n}\n\nconst defaultOptions = {\n loader: () => Promise.resolve(convertModule(() => null)),\n loading: null,\n ssr: true,\n}\n\ninterface LoadableOptions {\n loader?: () => Promise<React.ComponentType<any> | ComponentModule<any>>\n loading?: React.ComponentType<any> | null\n ssr?: boolean\n modules?: string[]\n}\n\nfunction Loadable(options: LoadableOptions) {\n const opts = { ...defaultOptions, ...options }\n const Lazy = lazy(() => opts.loader().then(convertModule))\n const Loading = opts.loading\n\n function LoadableComponent(props: any) {\n const fallbackElement = Loading ? (\n <Loading isLoading={true} pastDelay={true} error={null} />\n ) : null\n\n // If it's non-SSR or provided a loading component, wrap it in a suspense boundary\n const hasSuspenseBoundary = !opts.ssr || !!opts.loading\n const Wrap = hasSuspenseBoundary ? Suspense : Fragment\n const wrapProps = hasSuspenseBoundary ? { fallback: fallbackElement } : {}\n const children = opts.ssr ? (\n <>\n {/* During SSR, we need to preload the CSS from the dynamic component to avoid flash of unstyled content */}\n {typeof window === 'undefined' ? (\n <PreloadChunks moduleIds={opts.modules} />\n ) : null}\n <Lazy {...props} />\n </>\n ) : (\n <BailoutToCSR reason=\"next/dynamic\">\n <Lazy {...props} />\n </BailoutToCSR>\n )\n\n return <Wrap {...wrapProps}>{children}</Wrap>\n }\n\n LoadableComponent.displayName = 'LoadableComponent'\n\n return LoadableComponent\n}\n\nexport default Loadable\n","import type React from 'react'\nimport type { JSX } from 'react'\nimport Loadable from './lazy-dynamic/loadable'\n\nimport type {\n LoadableGeneratedOptions,\n DynamicOptionsLoadingProps,\n Loader,\n LoaderComponent,\n} from './lazy-dynamic/types'\n\nexport {\n type LoadableGeneratedOptions,\n type DynamicOptionsLoadingProps,\n type Loader,\n type LoaderComponent,\n}\n\nexport type DynamicOptions<P = {}> = LoadableGeneratedOptions & {\n loading?: () => JSX.Element | null\n loader?: Loader<P>\n loadableGenerated?: LoadableGeneratedOptions\n modules?: string[]\n ssr?: boolean\n}\n\nexport type LoadableOptions<P = {}> = DynamicOptions<P>\n\nexport type LoadableFn<P = {}> = (\n opts: LoadableOptions<P>\n) => React.ComponentType<P>\n\nexport type LoadableComponent<P = {}> = React.ComponentType<P>\n\nexport default function dynamic<P = {}>(\n dynamicOptions: DynamicOptions<P> | Loader<P>,\n options?: DynamicOptions<P>\n): React.ComponentType<P> {\n const loadableOptions: LoadableOptions<P> = {}\n\n if (typeof dynamicOptions === 'function') {\n loadableOptions.loader = dynamicOptions\n }\n\n const mergedOptions = {\n ...loadableOptions,\n ...options,\n }\n\n return Loadable({\n ...mergedOptions,\n modules: mergedOptions.loadableGenerated?.modules,\n })\n}\n","__turbopack_context__.v({\n \"activeBorder\": \"page-module___8aEwW__activeBorder\",\n \"agentBadge\": \"page-module___8aEwW__agentBadge\",\n \"agentCard\": \"page-module___8aEwW__agentCard\",\n \"agentGrid\": \"page-module___8aEwW__agentGrid\",\n \"agentHeader\": \"page-module___8aEwW__agentHeader\",\n \"agentName\": \"page-module___8aEwW__agentName\",\n \"agentStateBadge\": \"page-module___8aEwW__agentStateBadge\",\n \"ansiCyan\": \"page-module___8aEwW__ansiCyan\",\n \"ansiGreen\": \"page-module___8aEwW__ansiGreen\",\n \"ansiMagenta\": \"page-module___8aEwW__ansiMagenta\",\n \"ansiRed\": \"page-module___8aEwW__ansiRed\",\n \"ansiYellow\": \"page-module___8aEwW__ansiYellow\",\n \"cardBody\": \"page-module___8aEwW__cardBody\",\n \"container\": \"page-module___8aEwW__container\",\n \"containerActive\": \"page-module___8aEwW__containerActive\",\n \"contextDetails\": \"page-module___8aEwW__contextDetails\",\n \"contextItem\": \"page-module___8aEwW__contextItem\",\n \"contextList\": \"page-module___8aEwW__contextList\",\n \"contextMeta\": \"page-module___8aEwW__contextMeta\",\n \"contextTitle\": \"page-module___8aEwW__contextTitle\",\n \"dashboardGrid\": \"page-module___8aEwW__dashboardGrid\",\n \"envGrid\": \"page-module___8aEwW__envGrid\",\n \"envName\": \"page-module___8aEwW__envName\",\n \"envRow\": \"page-module___8aEwW__envRow\",\n \"envStatus\": \"page-module___8aEwW__envStatus\",\n \"footer\": \"page-module___8aEwW__footer\",\n \"header\": \"page-module___8aEwW__header\",\n \"logoArea\": \"page-module___8aEwW__logoArea\",\n \"mainPanel\": \"page-module___8aEwW__mainPanel\",\n \"pulse\": \"page-module___8aEwW__pulse\",\n \"pulse-attention\": \"page-module___8aEwW__pulse-attention\",\n \"pulse-thinking\": \"page-module___8aEwW__pulse-thinking\",\n \"pulseDot\": \"page-module___8aEwW__pulseDot\",\n \"quickLaunchBtn\": \"page-module___8aEwW__quickLaunchBtn\",\n \"sectionTitle\": \"page-module___8aEwW__sectionTitle\",\n \"sidePanel\": \"page-module___8aEwW__sidePanel\",\n \"state-complete\": \"page-module___8aEwW__state-complete\",\n \"state-idle\": \"page-module___8aEwW__state-idle\",\n \"state-needs-input\": \"page-module___8aEwW__state-needs-input\",\n \"state-thinking\": \"page-module___8aEwW__state-thinking\",\n \"statusIndicator\": \"page-module___8aEwW__statusIndicator\",\n \"stoppedBadge\": \"page-module___8aEwW__stoppedBadge\",\n \"subtitle\": \"page-module___8aEwW__subtitle\",\n \"terminalContainer\": \"page-module___8aEwW__terminalContainer\",\n \"terminalInput\": \"page-module___8aEwW__terminalInput\",\n \"terminalInputArea\": \"page-module___8aEwW__terminalInputArea\",\n \"terminalLine\": \"page-module___8aEwW__terminalLine\",\n \"terminalSendBtn\": \"page-module___8aEwW__terminalSendBtn\",\n \"title\": \"page-module___8aEwW__title\",\n});\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport dynamic from \"next/dynamic\";\nimport styles from \"./page.module.css\";\nimport DbExplorer from \"./components/DbExplorer\";\n\ninterface RunnerStatus {\n id: string;\n name: string;\n type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker' | 'shell';\n status: 'idle' | 'running' | 'stopped';\n createdAt: string;\n logsCount: number;\n workspaceRoot?: string;\n scopedDirs?: string[];\n agentState?: 'idle' | 'thinking' | 'complete' | 'needs-input';\n}\n\nconst getModeIcon = (type: string) => {\n if (type === 'mock') return '🧪';\n if (type.includes('-docker')) return '🐳';\n if (type.includes('-ssh')) return '🌐';\n return '💻';\n};\n\n// Dynamically import TerminalConsole to bypass SSR errors\nconst TerminalConsole = dynamic(() => import(\"./components/TerminalConsole\"), {\n ssr: false,\n loading: () => (\n <div \n style={{ \n height: \"400px\", \n display: \"flex\", \n alignItems: \"center\", \n justifyContent: \"center\", \n backgroundColor: \"#05070a\", \n color: \"var(--muted)\", \n border: \"1px solid var(--border)\", \n borderBottomLeftRadius: \"12px\", \n borderBottomRightRadius: \"12px\" \n }}\n >\n <span>Initializing terminal emulator...</span>\n </div>\n ),\n});\n\n// Dynamically import ContextEditor to bypass SSR errors\nconst ContextEditor = dynamic(() => import(\"./components/ContextEditor\"), {\n ssr: false,\n loading: () => (\n <div \n style={{ \n height: \"280px\", \n display: \"flex\", \n alignItems: \"center\", \n justifyContent: \"center\", \n backgroundColor: \"var(--card)\", \n border: \"1px solid var(--border)\", \n borderRadius: \"12px\", \n marginTop: \"1.5rem\" \n }}\n >\n <span style={{ color: \"var(--muted)\" }}>Initializing prompt editor...</span>\n </div>\n ),\n});\n\n// Dynamically import SshWizard to bypass SSR errors\nconst SshWizard = dynamic(() => import(\"./components/SshWizard\"), {\n ssr: false,\n});\n\n// Dynamically import AiderWizard to bypass SSR errors\nconst AiderWizard = dynamic(() => import(\"./components/AiderWizard\"), {\n ssr: false,\n});\n\n// Dynamically import ClaudeWizard to bypass SSR errors\nconst ClaudeWizard = dynamic(() => import(\"./components/ClaudeWizard\"), {\n ssr: false,\n});\n\n// Dynamically import IdeLayout to bypass SSR errors\nconst IdeLayout = dynamic(() => import(\"./components/IdeLayout\"), {\n ssr: false,\n});\n\ninterface SavedConfig {\n id: string;\n name: string;\n type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker' | 'shell';\n workspaceRoot?: string;\n scopedDirs?: string[];\n extraFlags?: string;\n createdAt: string;\n}\n\nexport default function Home() {\n const [sessions, setSessions] = useState<RunnerStatus[]>([]);\n const [activeSessionId, setActiveSessionId] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isSshWizardOpen, setIsSshWizardOpen] = useState<boolean>(false);\n const [isAiderWizardOpen, setIsAiderWizardOpen] = useState<boolean>(false);\n const [isAiderDockerLaunch, setIsAiderDockerLaunch] = useState<boolean>(false);\n const [isClaudeWizardOpen, setIsClaudeWizardOpen] = useState<boolean>(false);\n const [isClaudeDockerLaunch, setIsClaudeDockerLaunch] = useState<boolean>(false);\n const [serverCwd, setServerCwd] = useState<string>(\"\");\n const [wsPort, setWsPort] = useState<number>(9601);\n const [appVersion, setAppVersion] = useState<string>(\"0.2.19\");\n const [lastSessionConfig, setLastSessionConfig] = useState<{\n type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker';\n name?: string;\n workspaceRoot?: string;\n scopedDirs?: string[];\n } | null>(null);\n const [configs, setConfigs] = useState<SavedConfig[]>([]);\n\n const activeAgents = sessions.filter(s => s.id !== \"workspace-terminal\");\n const activeSession = sessions.find(s => s.id === activeSessionId);\n const isDockerActive = activeAgents.some(s => (s.type === 'claude-docker' || s.type === 'aider-docker') && s.status === 'running');\n const isSshActive = activeAgents.some(s => s.type === 'claude-ssh' && s.status === 'running');\n\n // Fetch all sessions on mount & periodically\n const fetchSessions = async () => {\n try {\n const res = await fetch(\"/api/sessions\");\n const data = await res.json();\n if (data.sessions) {\n setSessions(data.sessions);\n }\n if (data.wsPort) {\n setWsPort(data.wsPort);\n }\n if (data.originalCwd) {\n setServerCwd(data.originalCwd);\n }\n if (data.version) {\n setAppVersion(data.version);\n }\n } catch (err) {\n console.error(\"Failed to fetch sessions:\", err);\n }\n };\n\n const fetchRecents = async () => {\n try {\n const res = await fetch(\"/api/recents\");\n if (res.ok) {\n const data = await res.json();\n if (data.success && data.recents && data.recents.lastSession) {\n setLastSessionConfig(data.recents.lastSession);\n }\n }\n } catch (err) {\n console.error(\"Failed to fetch recents:\", err);\n }\n };\n\n const fetchConfigs = async () => {\n try {\n const res = await fetch(\"/api/configs\");\n if (res.ok) {\n const data = await res.json();\n if (data.configs) {\n setConfigs(data.configs);\n }\n }\n } catch (err) {\n console.error(\"Failed to fetch configs:\", err);\n }\n };\n\n useEffect(() => {\n const initFetch = async () => {\n await fetchSessions();\n await fetchRecents();\n await fetchConfigs();\n };\n initFetch();\n \n // Register PWA Service Worker for standalone taskbar icon installation\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.register('/sw.js')\n .then((reg) => console.log('Service Worker registered:', reg.scope))\n .catch((err) => console.error('Service Worker registration failed:', err));\n }\n\n const interval = setInterval(fetchSessions, 4000);\n return () => clearInterval(interval);\n }, []);\n\n // Launch a new Session\n const handleLaunchSession = async (\n type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker',\n customName?: string,\n customWorkspaceRoot?: string,\n customScopedDirs?: string[]\n ) => {\n setIsLoading(true);\n try {\n let sessionName = customName;\n if (!sessionName) {\n if (type === 'claude') sessionName = \"Claude Local\";\n else if (type === 'claude-docker') sessionName = \"Claude Docker\";\n else if (type === 'claude-ssh') sessionName = \"Claude SSH\";\n else if (type === 'aider') sessionName = \"Aider Local\";\n else if (type === 'aider-docker') sessionName = \"Aider Docker\";\n else if (type === 'mock') sessionName = \"Mock Session\";\n }\n\n const launchBody: {\n type: string;\n name?: string;\n workspaceRoot?: string;\n scopedDirs?: string[];\n } = { \n type, \n name: sessionName, \n workspaceRoot: customWorkspaceRoot, \n scopedDirs: customScopedDirs \n };\n\n if ((type === 'aider' || type === 'aider-docker') && !customWorkspaceRoot) {\n try {\n const configRes = await fetch(\"/api/context/aider\");\n if (configRes.ok) {\n const configData = await configRes.json();\n if (configData.success && configData.config) {\n launchBody.workspaceRoot = configData.config.workspaceRoot;\n launchBody.scopedDirs = configData.config.scopedDirs;\n }\n }\n } catch (err) {\n console.error(\"Failed to load aider configuration before launch:\", err);\n }\n }\n\n const res = await fetch(\"/api/sessions/launch\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(launchBody)\n });\n const data = await res.json();\n if (data.success) {\n await fetchSessions();\n await fetchConfigs(); // Refresh configs list in case a template was saved\n setActiveSessionId(data.session.id);\n setLastSessionConfig({ type, name: sessionName, workspaceRoot: customWorkspaceRoot, scopedDirs: customScopedDirs });\n }\n } catch (err) {\n console.error(\"Failed to launch session:\", err);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleLaunchFromConfig = async (config: SavedConfig) => {\n setIsLoading(true);\n try {\n const res = await fetch(\"/api/sessions/launch\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n type: config.type,\n name: config.name,\n workspaceRoot: config.workspaceRoot,\n scopedDirs: config.scopedDirs\n })\n });\n const data = await res.json();\n if (data.success) {\n await fetchSessions();\n setActiveSessionId(data.session.id);\n } else {\n alert(data.error || \"Failed to launch configuration.\");\n }\n } catch (err) {\n console.error(err);\n alert(\"Network error: failed to launch configuration.\");\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleDeleteConfig = async (id: string) => {\n if (!window.confirm(\"Are you sure you want to delete this configuration template?\")) {\n return;\n }\n try {\n const res = await fetch(\"/api/configs\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ action: \"delete\", id })\n });\n if (res.ok) {\n await fetchConfigs();\n } else {\n alert(\"Failed to delete configuration template.\");\n }\n } catch (err) {\n console.error(err);\n alert(\"Network error: failed to delete configuration template.\");\n }\n };\n\n // Stop/Disconnect Session\n const handleStopSession = async (id: string, deletePermanently = false) => {\n try {\n const res = await fetch(\"/api/sessions/stop\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ id, delete: deletePermanently })\n });\n const data = await res.json();\n if (data.success) {\n if (deletePermanently && activeSessionId === id) {\n setActiveSessionId(null);\n }\n await fetchSessions();\n }\n } catch (err) {\n console.error(\"Failed to stop session:\", err);\n }\n };\n\n return (\n <div className={`${styles.container} ${activeSession ? styles.containerActive : \"\"}`}>\n {/* Header */}\n <header className={styles.header}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"1.5rem\" }}>\n <img src=\"/logo.png\" alt=\"NeuralLoom Logo\" style={{ width: \"160px\", height: \"160px\", borderRadius: \"16px\", objectFit: \"contain\" }} />\n <div className={styles.logoArea}>\n <h1 className={styles.title} style={{ margin: 0, lineHeight: 1.1 }}>NeuralLoom</h1>\n <span className={styles.subtitle}>Unified AI Orchestrator & Context Bridge</span>\n </div>\n </div>\n <div className={styles.statusIndicator}>\n <span className={styles.pulseDot}></span>\n <span>Orchestrator Online</span>\n </div>\n </header>\n\n {/* Main Dashboard Grid or Active Session IDE */}\n {activeSession ? (\n <div style={{ flex: 1, minHeight: 0, display: \"flex\", flexDirection: \"column\" }}>\n <IdeLayout\n sessionId={activeSession.id}\n workspaceRoot={activeSession.workspaceRoot || \"\"}\n scopedDirs={activeSession.scopedDirs || []}\n onClose={() => setActiveSessionId(null)}\n sessions={sessions}\n onSwitchSession={(id) => setActiveSessionId(id)}\n onRefreshSessions={fetchSessions}\n wsPort={wsPort}\n />\n </div>\n ) : (\n <div className={styles.dashboardGrid}>\n \n {/* Column 1: Built-in Database Explorer & Shared Context Hub */}\n <div className={styles.mainPanel}>\n {/* Database Explorer Section */}\n <section>\n <h2 className={styles.sectionTitle}>Built-in Database Explorer & SQL Client</h2>\n <div className=\"card\" style={{ padding: 0, overflow: \"hidden\", height: \"450px\", border: \"1px solid var(--border)\" }}>\n <DbExplorer workspaceRoot={serverCwd || \"\"} />\n </div>\n </section>\n\n {/* Context Hub Staging section */}\n <section style={{ marginTop: \"1.5rem\" }}>\n <h2 className={styles.sectionTitle}>Shared Context Hub & Slash Commands</h2>\n <div className={styles.contextList}>\n <div className={`${styles.contextItem} card`}>\n <div className={styles.contextMeta}>\n <span className={styles.contextTitle}>Staged Context & System Rules (/ccc)</span>\n <span className={styles.contextDetails}>Compiles AGENTS.md guidelines and files map.</span>\n </div>\n <button\n onClick={async () => {\n if (!activeSessionId) return;\n await fetch(\"/api/sessions/inject\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ id: activeSessionId, command: \"/ccc\" })\n });\n }}\n disabled={!activeSessionId}\n style={{\n padding: \"0.4rem 0.8rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--primary)\",\n backgroundColor: \"transparent\",\n color: \"var(--primary)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n opacity: activeSessionId ? 1 : 0.5,\n cursor: activeSessionId ? \"pointer\" : \"not-allowed\"\n }}\n >\n 🚀 Mount (/ccc)\n </button>\n </div>\n \n <div className={`${styles.contextItem} card`}>\n <div className={styles.contextMeta}>\n <span className={styles.contextTitle}>Staged Developer Prompt (/ccp)</span>\n <span className={styles.contextDetails}>Executes prompt in .ai/neural-loom/cprompt.md.</span>\n </div>\n <button\n onClick={async () => {\n if (!activeSessionId) return;\n await fetch(\"/api/sessions/inject\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ id: activeSessionId, command: \"/ccp\" })\n });\n }}\n disabled={!activeSessionId}\n style={{\n padding: \"0.4rem 0.8rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--success)\",\n backgroundColor: \"transparent\",\n color: \"var(--success)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n opacity: activeSessionId ? 1 : 0.5,\n cursor: activeSessionId ? \"pointer\" : \"not-allowed\"\n }}\n >\n ⚡ Run (/ccp)\n </button>\n </div>\n </div>\n <ContextEditor />\n </section>\n </div>\n\n {/* Column 2: Active Agents & Console Panel */}\n <div className={styles.mainPanel}>\n <section>\n <h2 className={styles.sectionTitle}>Active AI Agents</h2>\n \n {activeAgents.length === 0 ? (\n <div className=\"card\" style={{ padding: \"3rem 1.5rem\", textAlign: \"center\" }}>\n <p style={{ color: \"var(--muted)\", marginBottom: \"1.5rem\" }}>\n No active agent sessions. Launch a Claude or Aider agent session to begin.\n </p>\n <div style={{ display: \"flex\", gap: \"0.75rem\", flexDirection: \"column\" }}>\n {lastSessionConfig && (\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n handleLaunchSession(\n lastSessionConfig.type,\n lastSessionConfig.name,\n lastSessionConfig.workspaceRoot,\n lastSessionConfig.scopedDirs\n );\n }}\n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(38, 92%, 50%) 0%, hsl(0, 84%, 60%) 100%)\",\n border: \"none\"\n }}\n title={`Re-launch: ${lastSessionConfig.name || lastSessionConfig.type}`}\n >\n ⚡ Re-launch Last Session\n </button>\n )}\n <div style={{ display: \"flex\", gap: \"0.5rem\" }}>\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n setIsClaudeDockerLaunch(false);\n setIsClaudeWizardOpen(true);\n }}\n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(262, 83%, 60%) 0%, hsl(195, 100%, 45%) 100%)\",\n border: \"none\",\n flex: 1\n }}\n >\n Launch Claude\n </button>\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n setIsAiderDockerLaunch(false);\n setIsAiderWizardOpen(true);\n }}\n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(210, 80%, 45%) 0%, hsl(262, 80%, 55%) 100%)\",\n border: \"none\",\n flex: 1\n }}\n >\n Launch Aider\n </button>\n </div>\n </div>\n <div style={{ marginTop: \"1.5rem\", fontSize: \"0.75rem\", color: \"var(--muted)\" }}>\n Need a simulator?{\" \"}\n <span \n onClick={() => handleLaunchSession('mock')} \n style={{ color: \"var(--primary)\", cursor: \"pointer\", textDecoration: \"underline\" }}\n >\n Start mock playground\n </span>\n </div>\n </div>\n ) : (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"1rem\" }}>\n {activeAgents.map(session => (\n <div key={session.id} className={`${styles.agentCard} card ${activeSessionId === session.id ? styles.activeBorder : \"\"}`}>\n <div className={styles.agentHeader}>\n <span className={styles.agentName}>{session.name}</span>\n <div style={{ display: \"flex\", gap: \"0.35rem\", alignItems: \"center\" }}>\n {session.status === 'running' && session.agentState && (\n <span className={`${styles.agentStateBadge} ${styles['state-' + session.agentState]}`}>\n {session.agentState === 'thinking' && `${getModeIcon(session.type)} 💭`}\n {session.agentState === 'needs-input' && `${getModeIcon(session.type)} ⚠️`}\n {session.agentState === 'complete' && `${getModeIcon(session.type)} ✅`}\n {session.agentState === 'idle' && `${getModeIcon(session.type)} 💤`}\n </span>\n )}\n <span className={`${styles.agentBadge} ${session.status === 'stopped' ? styles.stoppedBadge : \"\"}`}>\n {session.status}\n </span>\n </div>\n </div>\n <div className={styles.cardBody} style={{ padding: \"1rem\" }}>\n <p style={{ fontSize: \"0.8rem\", color: \"var(--muted)\", margin: 0 }}>\n ID: <code style={{ fontSize: \"0.72rem\" }}>{session.id.substring(0, 8)}</code> | Type: {session.type}<br />\n Logs: {session.logsCount} lines\n </p>\n \n <div style={{ display: \"flex\", gap: \"0.5rem\", marginTop: \"0.75rem\" }}>\n {session.status === 'running' ? (\n <button \n onClick={() => handleStopSession(session.id, false)}\n style={{\n flex: 1,\n padding: \"0.35rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--danger)\",\n backgroundColor: \"transparent\",\n fontSize: \"0.75rem\",\n color: \"var(--danger)\",\n cursor: \"pointer\"\n }}\n >Stop</button>\n ) : (\n <button \n onClick={() => handleStopSession(session.id, true)}\n style={{\n flex: 1,\n padding: \"0.35rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--border)\",\n backgroundColor: \"transparent\",\n fontSize: \"0.75rem\",\n color: \"var(--muted)\",\n cursor: \"pointer\"\n }}\n >Delete</button>\n )}\n <button \n onClick={() => setActiveSessionId(session.id)}\n style={{\n flex: 2,\n padding: \"0.35rem\",\n borderRadius: \"6px\",\n border: \"none\",\n backgroundColor: activeSessionId === session.id ? \"var(--border-focus)\" : \"var(--primary)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n color: \"#fff\",\n cursor: \"pointer\"\n }}\n >\n {activeSessionId === session.id ? \"Connected\" : \"Open Console\"}\n </button>\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </section>\n\n {/* Interactive Session Terminal Display */}\n {activeSessionId && activeSessionId !== \"workspace-terminal\" && (\n <section className=\"card\" style={{ display: \"flex\", flexDirection: \"column\", border: \"1px solid var(--border-focus)\", marginTop: \"1rem\" }}>\n <div className={styles.agentHeader} style={{ justifyContent: \"space-between\", background: \"rgba(109, 40, 217, 0.08)\", padding: \"0.5rem 1rem\" }}>\n <span style={{ fontWeight: 600, fontSize: \"0.85rem\", display: \"flex\", alignItems: \"center\", gap: \"0.5rem\" }}>\n 🖥️ Console — {sessions.find(s => s.id === activeSessionId)?.name}\n </span>\n <div style={{ display: \"flex\", gap: \"0.5rem\", alignItems: \"center\" }}>\n {sessions.find(s => s.id === activeSessionId)?.status === \"stopped\" && (\n <button\n onClick={async () => {\n try {\n const activeSess = sessions.find(s => s.id === activeSessionId);\n const isClaude = activeSess && (activeSess.type === 'claude' || activeSess.type === 'claude-docker' || activeSess.type === 'claude-ssh');\n let resume = false;\n if (isClaude) {\n resume = window.confirm(\"Would you like to resume your previous Claude session?\");\n }\n\n const res = await fetch(\"/api/sessions/start\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ id: activeSessionId, resume }),\n });\n if (res.ok) {\n await fetchSessions();\n } else {\n const data = await res.json();\n alert(data.error || \"Failed to restart session.\");\n }\n } catch (err) {\n console.error(\"Failed to restart session:\", err);\n }\n }}\n style={{\n padding: \"0.15rem 0.4rem\",\n borderRadius: \"4px\",\n border: \"1px solid #eab308\",\n backgroundColor: \"rgba(234, 179, 8, 0.15)\",\n color: \"#eab308\",\n fontSize: \"0.65rem\",\n fontWeight: 600,\n cursor: \"pointer\",\n }}\n >\n ⚡ Restart\n </button>\n )}\n <button \n onClick={() => setActiveSessionId(null)}\n style={{\n border: \"none\",\n background: \"none\",\n color: \"var(--muted)\",\n cursor: \"pointer\",\n fontSize: \"0.75rem\"\n }}\n >✖</button>\n </div>\n </div>\n <TerminalConsole sessionId={activeSessionId} wsPort={wsPort} />\n </section>\n )}\n </div>\n\n {/* Column 3: Environments, Saved Templates, Workspace Terminal, Quick Actions */}\n <div className={styles.sidePanel}>\n {/* Execution Environments */}\n <section>\n <h2 className={styles.sectionTitle}>Execution Environments</h2>\n <div className={styles.envGrid}>\n <div className={styles.envRow} style={{ padding: \"0.5rem 0.75rem\" }}>\n <span className={styles.envName}>💻 Local Host</span>\n <span className={styles.envStatus} style={{ color: \"var(--success)\" }}>Active</span>\n </div>\n <div className={styles.envRow} style={{ opacity: isDockerActive ? 1 : 0.6, padding: \"0.5rem 0.75rem\" }}>\n <span className={styles.envName}>🐳 Docker Sandbox</span>\n <span className={styles.envStatus} style={{ color: isDockerActive ? \"var(--success)\" : \"var(--muted)\" }}>\n {isDockerActive ? \"Active\" : \"Not Mounted\"}\n </span>\n </div>\n <div className={styles.envRow} style={{ opacity: isSshActive ? 1 : 0.6, padding: \"0.5rem 0.75rem\" }}>\n <span className={styles.envName}>🌐 Remote VM (SSH)</span>\n <span className={styles.envStatus} style={{ color: isSshActive ? \"var(--success)\" : \"var(--muted)\" }}>\n {isSshActive ? \"Active\" : \"Offline\"}\n </span>\n </div>\n </div>\n </section>\n\n {/* Saved Configurations Templates */}\n <section>\n <h2 className={styles.sectionTitle}>Saved Configurations</h2>\n <div className=\"card\" style={{ padding: \"1rem\", display: \"flex\", flexDirection: \"column\", gap: \"0.75rem\" }}>\n {configs.length === 0 ? (\n <p style={{ color: \"var(--muted)\", fontSize: \"0.8rem\", textAlign: \"center\", margin: \"1rem 0\" }}>\n No configuration templates saved yet. Save a template from the Claude/Aider launch wizards.\n </p>\n ) : (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.5rem\", maxHeight: \"200px\", overflowY: \"auto\" }}>\n {configs.map((config) => (\n <div key={config.id} style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", background: \"rgba(255, 255, 255, 0.02)\", padding: \"0.5rem\", borderRadius: \"6px\", border: \"1px solid var(--border)\" }}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.15rem\", minWidth: 0 }}>\n <span style={{ fontSize: \"0.8rem\", fontWeight: 600, color: \"var(--foreground)\", whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\" }}>{config.name}</span>\n <span style={{ fontSize: \"0.65rem\", color: \"var(--muted)\", textTransform: \"uppercase\" }}>{config.type}</span>\n </div>\n <div style={{ display: \"flex\", gap: \"0.25rem\" }}>\n <button\n onClick={() => handleLaunchFromConfig(config)}\n disabled={isLoading}\n style={{\n padding: \"0.2rem 0.4rem\",\n borderRadius: \"4px\",\n backgroundColor: \"var(--primary)\",\n color: \"#fff\",\n border: \"none\",\n fontSize: \"0.7rem\",\n cursor: \"pointer\"\n }}\n >Launch</button>\n <button\n onClick={() => handleDeleteConfig(config.id)}\n style={{\n padding: \"0.2rem 0.4rem\",\n borderRadius: \"4px\",\n backgroundColor: \"transparent\",\n color: \"var(--danger)\",\n border: \"1px solid var(--danger)\",\n fontSize: \"0.7rem\",\n cursor: \"pointer\"\n }}\n >Delete</button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </section>\n\n {/* Launch wizards buttons */}\n <section style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.5rem\" }}>\n <div style={{ display: \"flex\", gap: \"0.5rem\" }}>\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n setIsClaudeDockerLaunch(false);\n setIsClaudeWizardOpen(true);\n }} \n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(262, 83%, 60%) 0%, hsl(195, 100%, 45%) 100%)\",\n border: \"none\",\n padding: \"0.6rem\",\n fontSize: \"0.8rem\",\n flex: 1\n }}\n >\n 🤖 Claude Local\n </button>\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n setIsClaudeDockerLaunch(true);\n setIsClaudeWizardOpen(true);\n }} \n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(170, 72%, 40%) 0%, hsl(195, 100%, 40%) 100%)\",\n border: \"none\",\n padding: \"0.6rem\",\n fontSize: \"0.8rem\",\n flex: 1\n }}\n >\n 🐳 Claude Docker\n </button>\n </div>\n <div style={{ display: \"flex\", gap: \"0.5rem\" }}>\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n setIsAiderDockerLaunch(false);\n setIsAiderWizardOpen(true);\n }} \n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(210, 80%, 45%) 0%, hsl(262, 80%, 55%) 100%)\",\n border: \"none\",\n padding: \"0.6rem\",\n fontSize: \"0.8rem\",\n flex: 1\n }}\n >\n 🐍 Aider Local\n </button>\n <button \n className={styles.quickLaunchBtn} \n onClick={() => {\n setIsAiderDockerLaunch(true);\n setIsAiderWizardOpen(true);\n }} \n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(195, 100%, 40%) 0%, hsl(262, 80%, 55%) 100%)\",\n border: \"none\",\n padding: \"0.6rem\",\n fontSize: \"0.8rem\",\n flex: 1\n }}\n >\n 🐳 Aider Docker\n </button>\n </div>\n <button \n className={styles.quickLaunchBtn} \n onClick={() => setIsSshWizardOpen(true)} \n disabled={isLoading}\n style={{\n background: \"linear-gradient(135deg, hsl(38, 92%, 50%) 0%, hsl(0, 84%, 60%) 100%)\",\n border: \"none\",\n padding: \"0.6rem\",\n fontSize: \"0.8rem\"\n }}\n >\n 🌐 Connect Remote SSH\n </button>\n </section>\n\n {/* Workspace Shell */}\n <section>\n <h2 className={styles.sectionTitle}>Workspace Terminal</h2>\n <div className=\"card\" style={{ display: \"flex\", flexDirection: \"column\", border: \"1px solid var(--border)\", padding: 0 }}>\n <div className={styles.agentHeader} style={{ justifyContent: \"space-between\", background: \"rgba(255, 255, 255, 0.02)\", padding: \"0.4rem 0.75rem\" }}>\n <span style={{ fontWeight: 600, fontSize: \"0.75rem\" }}>\n 💻 Local Shell (CWD: {serverCwd.split(/[/\\\\]/).pop() || \"root\"})\n </span>\n </div>\n <TerminalConsole sessionId=\"workspace-terminal\" height=\"180px\" wsPort={wsPort} />\n </div>\n </section>\n\n {/* Quick Actions */}\n <section className=\"card\" style={{ padding: \"1rem\", display: \"flex\", flexDirection: \"column\", gap: \"0.5rem\" }}>\n <h3 style={{ fontSize: \"0.9rem\", fontWeight: 700, margin: 0 }}>Quick Actions</h3>\n <ul style={{ listStyle: \"none\", fontSize: \"0.75rem\", display: \"flex\", flexDirection: \"column\", gap: \"0.35rem\", color: \"var(--muted)\", padding: 0, margin: 0 }}>\n <li style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n <span>Configure API Keys</span>\n <span style={{ color: \"var(--primary)\", cursor: \"pointer\" }}>→</span>\n </li>\n <li style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n <span>Edit rules templates</span>\n <span style={{ color: \"var(--primary)\", cursor: \"pointer\" }}>→</span>\n </li>\n <li style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n <span>Inspect process locks</span>\n <span style={{ color: \"var(--primary)\", cursor: \"pointer\" }}>→</span>\n </li>\n </ul>\n </section>\n </div>\n\n </div>\n )}\n\n {/* Footer */}\n <footer className={styles.footer}>\n <span>NeuralLoom v{appVersion} — Experimental AI Orchestrator Bridge</span>\n <span>Directory: {serverCwd || \"Loading...\"}</span>\n </footer>\n\n {isSshWizardOpen && (\n <SshWizard\n onClose={() => setIsSshWizardOpen(false)}\n onConfirmLaunch={() => {\n setIsSshWizardOpen(false);\n handleLaunchSession('claude-ssh');\n }}\n />\n )}\n\n {isAiderWizardOpen && (\n <AiderWizard\n onClose={() => setIsAiderWizardOpen(false)}\n isDocker={isAiderDockerLaunch}\n onConfirmLaunch={(name, workspaceRoot, scopedDirs) => {\n setIsAiderWizardOpen(false);\n handleLaunchSession(isAiderDockerLaunch ? 'aider-docker' : 'aider', name, workspaceRoot, scopedDirs);\n }}\n />\n )}\n\n {isClaudeWizardOpen && (\n <ClaudeWizard\n onClose={() => setIsClaudeWizardOpen(false)}\n isDocker={isClaudeDockerLaunch}\n onConfirmLaunch={(name, workspaceRoot, scopedDirs) => {\n setIsClaudeWizardOpen(false);\n handleLaunchSession(isClaudeDockerLaunch ? 'claude-docker' : 'claude', name, workspaceRoot, scopedDirs);\n }}\n />\n )}\n </div>\n );\n}\n","\"use client\";\n/* eslint-disable react-hooks/set-state-in-effect, react-hooks/exhaustive-deps, @typescript-eslint/no-explicit-any */\n\nimport React, { useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ninterface DbConnectionProfile {\n id: string;\n name: string;\n type: \"sqlite\" | \"postgres\" | \"mysql\" | \"mssql\";\n filepath?: string; // sqlite\n host?: string; // pg, mysql\n port?: number; // pg, mysql\n database?: string; // pg, mysql\n username?: string; // pg, mysql\n password?: string; // pg, mysql\n ssl?: boolean; // pg\n readOnly?: boolean;\n}\n\ninterface TableSchema {\n name: string;\n type: string;\n}\n\ninterface ColumnSchema {\n name: string;\n type: string;\n nullable: boolean;\n defaultValue?: string | null;\n isPrimaryKey: boolean;\n isForeignKey: boolean;\n referencedTable?: string | null;\n referencedColumn?: string | null;\n}\n\ninterface DbExplorerProps {\n workspaceRoot: string;\n}\n\nexport default function DbExplorer({ workspaceRoot }: DbExplorerProps) {\n // Connection state\n const [profiles, setProfiles] = useState<{ global: DbConnectionProfile[]; workspace: DbConnectionProfile[] }>({\n global: [],\n workspace: [],\n });\n const [activeId, setActiveId] = useState<string | null>(null);\n const [isActiveGlobal, setIsActiveGlobal] = useState<boolean>(true);\n\n // Schema state\n const [tables, setTables] = useState<TableSchema[]>([]);\n const [expandedTable, setExpandedTable] = useState<string | null>(null);\n const [tableColumns, setTableColumns] = useState<{ [tableName: string]: ColumnSchema[] }>({});\n const [schemaLoading, setSchemaLoading] = useState(false);\n\n // Query state\n const [sql, setSql] = useState<string>(\"SELECT * FROM sqlite_master;\");\n const [queryLoading, setQueryLoading] = useState(false);\n const [queryError, setQueryError] = useState<string | null>(null);\n const [queryResult, setQueryResult] = useState<{\n rows: any[];\n fields: string[];\n durationMs: number;\n affectedRows?: number;\n } | null>(null);\n\n const [editingCell, setEditingCell] = useState<{ rowIndex: number; field: string; value: string } | null>(null);\n const [editStatus, setEditStatus] = useState<{ rowIndex: number; field: string; status: 'saving' | 'success' | 'error'; message?: string } | null>(null);\n\n // Connection management modal state\n const [showAddModal, setShowAddModal] = useState(false);\n const [isNewGlobal, setIsNewGlobal] = useState(false);\n const [newProfile, setNewProfile] = useState<Partial<DbConnectionProfile>>({\n id: \"\",\n name: \"\",\n type: \"sqlite\",\n filepath: \"./dev.db\",\n host: \"localhost\",\n port: 5432,\n database: \"postgres\",\n username: \"postgres\",\n password: \"\",\n ssl: false,\n readOnly: true,\n });\n const [profileSaving, setProfileSaving] = useState(false);\n const [testStatus, setTestStatus] = useState<{ success?: boolean; message?: string } | null>(null);\n\n // Fetch connection profiles\n const fetchProfiles = async () => {\n try {\n const res = await fetch(`/api/sql/connections?root=${encodeURIComponent(workspaceRoot)}`);\n if (res.ok) {\n const data = await res.json();\n if (data.success) {\n setProfiles({\n global: data.global || [],\n workspace: data.workspace || [],\n });\n setActiveId(data.activeId);\n setIsActiveGlobal(data.isActiveGlobal);\n }\n }\n } catch (err) {\n console.error(\"Failed to load connection profiles:\", err);\n }\n };\n\n // Fetch schema tables\n const fetchSchema = async () => {\n if (!activeId) {\n setTables([]);\n return;\n }\n setSchemaLoading(true);\n try {\n const res = await fetch(`/api/sql/schema?action=list_tables&root=${encodeURIComponent(workspaceRoot)}`);\n if (res.ok) {\n const data = await res.json();\n if (data.success) {\n setTables(data.tables || []);\n setQueryError(null);\n } else {\n setQueryError(data.error || \"Failed to load database schema.\");\n }\n } else {\n const data = await res.json();\n setQueryError(data.error || \"Failed to load database schema.\");\n }\n } catch (err) {\n console.error(\"Failed to load schema:\", err);\n } finally {\n setSchemaLoading(false);\n }\n };\n\n // Fetch table columns\n const fetchTableColumns = async (tableName: string) => {\n if (tableColumns[tableName]) {\n setExpandedTable(expandedTable === tableName ? null : tableName);\n return;\n }\n try {\n const res = await fetch(\n `/api/sql/schema?action=describe_table&table=${encodeURIComponent(tableName)}&root=${encodeURIComponent(\n workspaceRoot\n )}`\n );\n if (res.ok) {\n const data = await res.json();\n if (data.success) {\n setTableColumns((prev) => ({ ...prev, [tableName]: data.columns }));\n setExpandedTable(tableName);\n }\n }\n } catch (err) {\n console.error(`Failed to load columns for table ${tableName}:`, err);\n }\n };\n\n useEffect(() => {\n fetchProfiles();\n }, [workspaceRoot]);\n\n useEffect(() => {\n fetchSchema();\n setQueryResult(null);\n setExpandedTable(null);\n setTableColumns({});\n \n // Set query template based on active database type\n const activeProfile = isActiveGlobal\n ? profiles.global.find((p) => p.id === activeId)\n : profiles.workspace.find((p) => p.id === activeId);\n \n if (activeProfile) {\n if (activeProfile.type === \"sqlite\") {\n setSql(\"SELECT name, type FROM sqlite_master WHERE type='table';\");\n } else if (activeProfile.type === \"mssql\") {\n setSql(\"SELECT * FROM sys.tables;\");\n } else {\n setSql(\"SELECT * FROM information_schema.tables LIMIT 10;\");\n }\n }\n }, [activeId, isActiveGlobal, profiles.global.length, profiles.workspace.length]);\n\n // Handle setting active profile\n const handleSelectActive = async (id: string, isGlobal: boolean) => {\n try {\n const res = await fetch(\"/api/sql/connections\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n action: \"set_active\",\n profileId: id,\n isGlobal,\n root: workspaceRoot,\n }),\n });\n if (res.ok) {\n setActiveId(id);\n setIsActiveGlobal(isGlobal);\n }\n } catch (err) {\n console.error(\"Failed to set active profile:\", err);\n }\n };\n\n // Test connection profile\n const handleTestConnection = async () => {\n setTestStatus(null);\n try {\n const res = await fetch(\"/api/sql/connections\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n action: \"test\",\n profile: newProfile,\n root: workspaceRoot,\n }),\n });\n const data = await res.json();\n if (data.success) {\n setTestStatus({ success: true, message: \"Connection test successful!\" });\n } else {\n setTestStatus({ success: false, message: data.error || \"Connection test failed.\" });\n }\n } catch (err) {\n const error = err as Error;\n setTestStatus({ success: false, message: error.message || \"Failed to make test query.\" });\n }\n };\n\n // Save connection profile\n const handleSaveConnection = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!newProfile.name || !newProfile.type) return;\n\n setProfileSaving(true);\n const profileId = newProfile.id || `profile_${Math.random().toString(36).substring(7)}`;\n const finalProfile: DbConnectionProfile = {\n ...newProfile,\n id: profileId,\n name: newProfile.name,\n type: newProfile.type!,\n } as DbConnectionProfile;\n\n try {\n const res = await fetch(\"/api/sql/connections\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n action: \"save\",\n profile: finalProfile,\n isGlobal: isNewGlobal,\n root: workspaceRoot,\n }),\n });\n if (res.ok) {\n await fetchProfiles();\n setShowAddModal(false);\n // Automatically make it active if it is the only one\n if (!activeId) {\n handleSelectActive(profileId, isNewGlobal);\n }\n }\n } catch (err) {\n console.error(\"Failed to save profile:\", err);\n } finally {\n setProfileSaving(false);\n }\n };\n\n // Delete connection profile\n const handleDeleteConnection = async (id: string, isGlobal: boolean) => {\n if (!confirm(\"Are you sure you want to delete this connection profile?\")) return;\n try {\n const res = await fetch(\"/api/sql/connections\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n action: \"delete\",\n profileId: id,\n isGlobal,\n root: workspaceRoot,\n }),\n });\n if (res.ok) {\n await fetchProfiles();\n if (activeId === id) {\n setActiveId(null);\n }\n }\n } catch (err) {\n console.error(\"Failed to delete connection profile:\", err);\n }\n };\n\n const parseTableName = (sqlQuery: string): string | null => {\n const match = sqlQuery.match(/from\\s+([a-zA-Z0-9_\\`\"\\[\\]\\.]+)/i);\n if (!match) return null;\n let tbl = match[1].trim();\n tbl = tbl.replace(/[\\`\"\\[\\]]/g, \"\");\n const parts = tbl.split(\".\");\n return parts[parts.length - 1];\n };\n\n const handleCellSubmit = async (rowIndex: number, field: string, newValue: string, oldValue: any) => {\n if (activeProfile?.readOnly) {\n alert(\"Database connection is Read-Only. Updates are disabled.\");\n return;\n }\n\n const tableName = parseTableName(sql);\n if (!tableName) {\n alert(\"Could not extract table name from query for inline edit. Please ensure your query includes 'FROM tableName'.\");\n return;\n }\n\n setEditStatus({ rowIndex, field, status: 'saving' });\n\n try {\n let cols = tableColumns[tableName];\n if (!cols) {\n const res = await fetch(\n `/api/sql/schema?action=describe_table&table=${encodeURIComponent(tableName)}&root=${encodeURIComponent(\n workspaceRoot\n )}`\n );\n if (res.ok) {\n const data = await res.json();\n if (data.success && data.columns) {\n cols = data.columns;\n setTableColumns((prev) => ({ ...prev, [tableName]: data.columns }));\n }\n }\n }\n\n if (!cols) {\n throw new Error(`Could not load schema columns for table \"${tableName}\".`);\n }\n\n const pkCol = cols.find((c) => c.isPrimaryKey);\n if (!pkCol) {\n throw new Error(`Table \"${tableName}\" does not have a primary key. Inline editing requires a primary key.`);\n }\n\n const row = queryResult?.rows[rowIndex];\n if (!row || !(pkCol.name in row)) {\n throw new Error(`Primary key column \"${pkCol.name}\" was not returned in the query results. Please include it in your SELECT statement.`);\n }\n\n const pkValue = row[pkCol.name];\n const targetColSchema = cols.find((c) => c.name === field);\n if (!targetColSchema) {\n throw new Error(`Column \"${field}\" was not found in schema columns.`);\n }\n\n const isNumeric = (type: string) => {\n const t = type.toLowerCase();\n return t.includes(\"int\") || t.includes(\"decimal\") || t.includes(\"numeric\") || t.includes(\"float\") || t.includes(\"double\") || t.includes(\"real\");\n };\n\n let setExpr = \"\";\n if (newValue.toUpperCase() === \"NULL\") {\n setExpr = `${field} = NULL`;\n } else if (isNumeric(targetColSchema.type)) {\n if (newValue === \"\" || isNaN(Number(newValue))) {\n throw new Error(`Value \"${newValue}\" is not a valid number for column \"${field}\".`);\n }\n setExpr = `${field} = ${newValue}`;\n } else {\n setExpr = `${field} = '${newValue.replace(/'/g, \"''\")}'`;\n }\n\n let pkExpr = \"\";\n if (isNumeric(pkCol.type)) {\n pkExpr = `${pkCol.name} = ${pkValue}`;\n } else {\n pkExpr = `${pkCol.name} = '${String(pkValue).replace(/'/g, \"''\")}'`;\n }\n\n const updateSql = `UPDATE ${tableName} SET ${setExpr} WHERE ${pkExpr};`;\n\n const res = await fetch(\"/api/sql/query\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n sql: updateSql,\n root: workspaceRoot,\n }),\n });\n\n const data = await res.json();\n if (res.ok && data.success) {\n if (queryResult) {\n const updatedRows = [...queryResult.rows];\n let typedVal: any = newValue;\n if (newValue.toUpperCase() === \"NULL\") {\n typedVal = null;\n } else if (isNumeric(targetColSchema.type)) {\n typedVal = Number(newValue);\n }\n updatedRows[rowIndex] = {\n ...updatedRows[rowIndex],\n [field]: typedVal,\n };\n setQueryResult({\n ...queryResult,\n rows: updatedRows,\n });\n }\n setEditStatus({ rowIndex, field, status: 'success' });\n setTimeout(() => setEditStatus(null), 1500);\n } else {\n throw new Error(data.error || \"Update database query failed.\");\n }\n } catch (err) {\n const error = err as Error;\n setEditStatus({ rowIndex, field, status: 'error', message: error.message });\n alert(`Inline Update Failed:\\n${error.message}`);\n }\n };\n\n const handleExportCSV = () => {\n if (!queryResult || queryResult.rows.length === 0) return;\n try {\n const headers = queryResult.fields.join(\",\");\n const lines = queryResult.rows.map((row) => {\n return queryResult.fields.map((f) => {\n const val = row[f];\n if (val === null) return \"NULL\";\n const str = String(val);\n if (str.includes(\",\") || str.includes('\"') || str.includes(\"\\n\") || str.includes(\"\\r\")) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n }).join(\",\");\n });\n\n const csvContent = [headers, ...lines].join(\"\\r\\n\");\n const blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8;\" });\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.setAttribute(\"href\", url);\n link.setAttribute(\"download\", `query-results-${Date.now()}.csv`);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } catch (err) {\n console.error(\"Export CSV failed:\", err);\n alert(\"Failed to export as CSV\");\n }\n };\n\n const handleExportJSON = () => {\n if (!queryResult || queryResult.rows.length === 0) return;\n try {\n const jsonContent = JSON.stringify(queryResult.rows, null, 2);\n const blob = new Blob([jsonContent], { type: \"application/json;charset=utf-8;\" });\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.setAttribute(\"href\", url);\n link.setAttribute(\"download\", `query-results-${Date.now()}.json`);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } catch (err) {\n console.error(\"Export JSON failed:\", err);\n alert(\"Failed to export as JSON\");\n }\n };\n\n // Run SQL Query\n const handleRunQuery = async () => {\n if (!sql.trim() || !activeId) return;\n\n setQueryLoading(true);\n setQueryError(null);\n setQueryResult(null);\n\n try {\n const res = await fetch(\"/api/sql/query\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n sql: sql.trim(),\n root: workspaceRoot,\n }),\n });\n\n const data = await res.json();\n if (res.ok && data.success) {\n setQueryResult({\n rows: data.rows || [],\n fields: data.fields || [],\n durationMs: data.durationMs || 0,\n affectedRows: data.affectedRows,\n });\n // Proactively refresh schema if a table creation or DDL was run\n const isDDL =\n sql.toLowerCase().includes(\"create table\") ||\n sql.toLowerCase().includes(\"drop table\") ||\n sql.toLowerCase().includes(\"alter table\");\n if (isDDL) {\n fetchSchema();\n }\n } else {\n setQueryError(data.error || \"Failed to execute query.\");\n }\n } catch (err) {\n const error = err as Error;\n setQueryError(error.message || \"An unexpected error occurred during execution.\");\n } finally {\n setQueryLoading(false);\n }\n };\n\n const activeProfile = isActiveGlobal\n ? profiles.global.find((p) => p.id === activeId)\n : profiles.workspace.find((p) => p.id === activeId);\n\n return (\n <div style={styles.container}>\n {/* Sidebar: Connections & Schemas */}\n <div style={styles.sidebar}>\n {/* Connection Profiles section */}\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Connections</span>\n <button\n style={styles.addBtn}\n onClick={() => {\n setTestStatus(null);\n setNewProfile({\n id: \"\",\n name: \"\",\n type: \"sqlite\",\n filepath: \"./dev.db\",\n host: \"localhost\",\n port: 5432,\n database: \"postgres\",\n username: \"postgres\",\n password: \"\",\n ssl: false,\n readOnly: true,\n });\n setIsNewGlobal(false);\n setShowAddModal(true);\n }}\n title=\"Add Database Connection Profile\"\n >\n ➕ Add\n </button>\n </div>\n\n <div style={styles.profileList}>\n {profiles.global.length === 0 && profiles.workspace.length === 0 && (\n <div style={styles.emptyText}>No connections configured. Add one to start.</div>\n )}\n\n {profiles.workspace.length > 0 && (\n <>\n <div style={styles.groupHeader}>WORKSPACE CONNECTIONS</div>\n {profiles.workspace.map((p) => (\n <div\n key={p.id}\n style={{\n ...styles.profileItem,\n ...(activeId === p.id && !isActiveGlobal ? styles.profileItemActive : {}),\n }}\n onClick={() => handleSelectActive(p.id, false)}\n >\n <div style={styles.profileMeta}>\n <span style={styles.profileName}>📁 {p.name}</span>\n <span style={styles.profileType}>{p.type}</span>\n </div>\n <button\n style={styles.deleteProfileBtn}\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteConnection(p.id, false);\n }}\n >\n ✖\n </button>\n </div>\n ))}\n </>\n )}\n\n {profiles.global.length > 0 && (\n <>\n <div style={styles.groupHeader}>GLOBAL CONNECTIONS</div>\n {profiles.global.map((p) => (\n <div\n key={p.id}\n style={{\n ...styles.profileItem,\n ...(activeId === p.id && isActiveGlobal ? styles.profileItemActive : {}),\n }}\n onClick={() => handleSelectActive(p.id, true)}\n >\n <div style={styles.profileMeta}>\n <span style={styles.profileName}>🌐 {p.name}</span>\n <span style={styles.profileType}>{p.type}</span>\n </div>\n <button\n style={styles.deleteProfileBtn}\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteConnection(p.id, true);\n }}\n >\n ✖\n </button>\n </div>\n ))}\n </>\n )}\n </div>\n </div>\n\n {/* Database Tables tree view */}\n <div style={{ ...styles.section, flex: 1, borderTop: \"1px solid var(--border)\" }}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Schema Tables</span>\n {schemaLoading && <span style={styles.spinnerMini}></span>}\n </div>\n\n <div style={styles.tableList}>\n {!activeId && <div style={styles.emptyText}>Select an active connection to view tables.</div>}\n {activeId && tables.length === 0 && !schemaLoading && (\n <div style={styles.emptyText}>No tables found in database schema.</div>\n )}\n\n {tables.map((t) => (\n <div key={t.name} style={styles.tableTreeItem}>\n <div style={styles.tableRow} onClick={() => fetchTableColumns(t.name)}>\n <span style={styles.tableIcon}>{t.type === \"view\" ? \"👁️\" : \"📊\"}</span>\n <span style={styles.tableName}>{t.name}</span>\n <span style={styles.tableChevron}>{expandedTable === t.name ? \"▼\" : \"▶\"}</span>\n </div>\n\n {expandedTable === t.name && tableColumns[t.name] && (\n <div style={styles.columnList}>\n {tableColumns[t.name].map((col) => (\n <div key={col.name} style={styles.columnItem}>\n <span style={styles.columnIcon}>\n {col.isPrimaryKey ? \"🔑\" : col.isForeignKey ? \"🔗\" : \"▫\"}\n </span>\n <span style={styles.columnName} title={col.type}>\n {col.name}\n </span>\n <span style={styles.columnType}>\n {col.type.toLowerCase().substring(0, 12)}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Main Panel: Query Editor & Data Results */}\n <div style={styles.mainContent}>\n {/* Connection status header */}\n <div style={styles.statusBar}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"0.5rem\" }}>\n <span style={styles.statusLabel}>Active Connection:</span>\n {activeProfile ? (\n <span style={styles.statusValue}>\n {isActiveGlobal ? \"🌐\" : \"📁\"} {activeProfile.name} ({activeProfile.type})\n {activeProfile.readOnly && <span style={styles.readOnlyBadge}>Read-Only</span>}\n </span>\n ) : (\n <span style={{ ...styles.statusValue, color: \"var(--danger)\" }}>No Connection Selected</span>\n )}\n </div>\n\n <button\n style={{\n ...styles.runBtn,\n opacity: !activeId || queryLoading ? 0.6 : 1,\n cursor: !activeId || queryLoading ? \"not-allowed\" : \"pointer\",\n }}\n onClick={handleRunQuery}\n disabled={!activeId || queryLoading}\n >\n {queryLoading ? \"⌛ Running...\" : \"⚡ Execute Query (F5)\"}\n </button>\n </div>\n\n {/* SQL Input Area */}\n <div style={styles.editorArea}>\n <textarea\n style={styles.textarea}\n value={sql}\n onChange={(e) => setSql(e.target.value)}\n placeholder=\"Write your SQL query script here...\"\n onKeyDown={(e) => {\n if (e.key === \"F5\" || (e.ctrlKey && e.key === \"Enter\")) {\n e.preventDefault();\n handleRunQuery();\n }\n }}\n />\n </div>\n\n {/* Results Viewer */}\n <div style={styles.resultsArea}>\n {queryError && (\n <div style={styles.errorContainer}>\n <h4 style={{ margin: \"0 0 0.5rem 0\", color: \"var(--danger)\" }}>⚠️ Execution Error</h4>\n <pre style={styles.errorText}>{queryError}</pre>\n {queryError.includes(\"not installed\") && (\n <div style={styles.driverPrompt}>\n <p style={{ margin: \"0 0 0.5rem 0\" }}>To resolve this, run this installer command in your workspace terminal:</p>\n <code style={styles.driverCode}>\n {activeProfile?.type === \"sqlite\"\n ? \"npm install better-sqlite3\"\n : activeProfile?.type === \"postgres\"\n ? \"npm install pg\"\n : activeProfile?.type === \"mysql\"\n ? \"npm install mysql2\"\n : \"npm install mssql\"}\n </code>\n </div>\n )}\n </div>\n )}\n\n {queryResult && (\n <div style={styles.resultsWrapper}>\n <div style={styles.resultsMeta}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"0.5rem\" }}>\n <span>\n Query completed.{\" \"}\n {queryResult.affectedRows !== undefined\n ? `Affected rows: ${queryResult.affectedRows}`\n : `Returned ${queryResult.rows.length} rows`}\n </span>\n <span>Duration: {queryResult.durationMs}ms</span>\n </div>\n {queryResult.rows.length > 0 && (\n <div style={{ display: \"flex\", gap: \"0.4rem\" }}>\n <button onClick={handleExportCSV} style={styles.exportBtn}>📥 Export CSV</button>\n <button onClick={handleExportJSON} style={styles.exportBtn}>📥 Export JSON</button>\n </div>\n )}\n </div>\n\n {queryResult.rows.length > 0 ? (\n <div style={styles.tableContainer}>\n <table style={styles.table}>\n <thead>\n <tr>\n {queryResult.fields.map((f) => (\n <th key={f} style={styles.th}>\n {f}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {queryResult.rows.map((row, idx) => (\n <tr key={idx} style={idx % 2 === 0 ? styles.trEven : styles.trOdd}>\n {queryResult.fields.map((f) => {\n const isEditing = editingCell && editingCell.rowIndex === idx && editingCell.field === f;\n const isSaving = editStatus && editStatus.rowIndex === idx && editStatus.field === f && editStatus.status === 'saving';\n const isSuccess = editStatus && editStatus.rowIndex === idx && editStatus.field === f && editStatus.status === 'success';\n const isError = editStatus && editStatus.rowIndex === idx && editStatus.field === f && editStatus.status === 'error';\n \n let cellStyle = { ...styles.td, ...styles.editableCell };\n if (isSaving) {\n cellStyle = { ...cellStyle, backgroundColor: \"rgba(168, 85, 247, 0.15)\" };\n } else if (isSuccess) {\n cellStyle = { ...cellStyle, backgroundColor: \"rgba(16, 185, 129, 0.25)\" };\n } else if (isError) {\n cellStyle = { ...cellStyle, backgroundColor: \"rgba(239, 68, 68, 0.25)\" };\n }\n\n return (\n <td\n key={f}\n style={cellStyle}\n onDoubleClick={() => {\n if (activeProfile?.readOnly) {\n alert(\"Database connection is Read-Only. Editing is disabled.\");\n return;\n }\n setEditingCell({\n rowIndex: idx,\n field: f,\n value: row[f] === null ? \"NULL\" : String(row[f]),\n });\n }}\n className=\"db-cell\"\n title=\"Double click to edit cell\"\n >\n {isEditing ? (\n <input\n style={styles.cellInput}\n value={editingCell.value}\n autoFocus\n onChange={(e) => setEditingCell({ ...editingCell, value: e.target.value })}\n onKeyDown={async (e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n const newVal = editingCell.value;\n setEditingCell(null);\n if (newVal !== (row[f] === null ? \"NULL\" : String(row[f]))) {\n await handleCellSubmit(idx, f, newVal, row[f]);\n }\n } else if (e.key === \"Escape\") {\n setEditingCell(null);\n }\n }}\n onBlur={async () => {\n const newVal = editingCell.value;\n setEditingCell(null);\n if (newVal !== (row[f] === null ? \"NULL\" : String(row[f]))) {\n await handleCellSubmit(idx, f, newVal, row[f]);\n }\n }}\n />\n ) : (\n row[f] === null\n ? \"NULL\"\n : typeof row[f] === \"object\"\n ? JSON.stringify(row[f])\n : String(row[f])\n )}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n ) : (\n queryResult.affectedRows === undefined && (\n <div style={styles.emptyResults}>Query executed successfully, but returned 0 results.</div>\n )\n )}\n </div>\n )}\n\n {!queryError && !queryResult && !queryLoading && (\n <div style={styles.emptyResults}>Write a query script and click Execute to view table records.</div>\n )}\n\n {queryLoading && (\n <div style={styles.loadingWrapper}>\n <span style={styles.spinnerLarge}></span>\n <span style={{ color: \"var(--muted)\" }}>Running database statement...</span>\n </div>\n )}\n </div>\n </div>\n\n {/* Add Connection Profile Modal */}\n {showAddModal && typeof document !== \"undefined\" && createPortal(\n <div style={styles.modalOverlay}>\n <div style={styles.modalContent}>\n <h3 style={{ margin: \"0 0 1rem 0\", display: \"flex\", justifyContent: \"space-between\" }}>\n <span>🔌 Add Database Profile</span>\n <span style={{ cursor: \"pointer\" }} onClick={() => setShowAddModal(false)}>\n ✖\n </span>\n </h3>\n\n <form onSubmit={handleSaveConnection}>\n <div style={styles.formRow}>\n <label style={styles.label}>Profile Name</label>\n <input\n style={styles.input}\n type=\"text\"\n required\n value={newProfile.name}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, name: e.target.value }))}\n placeholder=\"e.g. Local Postgres, Dev SQLite\"\n />\n </div>\n\n <div style={styles.formRow}>\n <label style={styles.label}>Scope Level</label>\n <div style={{ display: \"flex\", gap: \"1rem\" }}>\n <label style={{ cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: \"0.25rem\" }}>\n <input\n type=\"radio\"\n checked={!isNewGlobal}\n onChange={() => setIsNewGlobal(false)}\n />\n Workspace Local\n </label>\n <label style={{ cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: \"0.25rem\" }}>\n <input\n type=\"radio\"\n checked={isNewGlobal}\n onChange={() => setIsNewGlobal(true)}\n />\n Global User Profile\n </label>\n </div>\n </div>\n\n <div style={styles.formRow}>\n <label style={styles.label}>Database Type</label>\n <select\n style={styles.select}\n value={newProfile.type}\n onChange={(e) => {\n const val = e.target.value as \"sqlite\" | \"postgres\" | \"mysql\" | \"mssql\";\n let defaultPort = 5432;\n if (val === \"mysql\") defaultPort = 3306;\n if (val === \"mssql\") defaultPort = 1433;\n setNewProfile((prev) => ({\n ...prev,\n type: val,\n filepath: val === \"sqlite\" ? \"./dev.db\" : undefined,\n port: val !== \"sqlite\" ? defaultPort : undefined,\n database: val === \"sqlite\" ? undefined : (val === \"mssql\" ? \"master\" : (val === \"postgres\" ? \"postgres\" : \"\")),\n username: val === \"sqlite\" ? undefined : (val === \"mssql\" ? \"sa\" : (val === \"postgres\" ? \"postgres\" : \"root\")),\n }));\n }}\n >\n <option value=\"sqlite\">SQLite (Local File)</option>\n <option value=\"postgres\">PostgreSQL</option>\n <option value=\"mysql\">MySQL</option>\n <option value=\"mssql\">Microsoft SQL Server</option>\n </select>\n </div>\n\n {newProfile.type === \"sqlite\" ? (\n <div style={styles.formRow}>\n <label style={styles.label}>Database File Path</label>\n <input\n style={styles.input}\n type=\"text\"\n required\n value={newProfile.filepath || \"\"}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, filepath: e.target.value }))}\n placeholder=\"Relative (e.g. ./data/dev.db) or Absolute path\"\n />\n </div>\n ) : (\n <>\n <div style={{ display: \"flex\", gap: \"1rem\" }}>\n <div style={{ ...styles.formRow, flex: 3 }}>\n <label style={styles.label}>Host IP Address</label>\n <input\n style={styles.input}\n type=\"text\"\n required\n value={newProfile.host || \"\"}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, host: e.target.value }))}\n placeholder=\"localhost or IP\"\n />\n </div>\n <div style={{ ...styles.formRow, flex: 1 }}>\n <label style={styles.label}>Port</label>\n <input\n style={styles.input}\n type=\"number\"\n required\n value={newProfile.port || 0}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, port: parseInt(e.target.value) }))}\n />\n </div>\n </div>\n\n <div style={styles.formRow}>\n <label style={styles.label}>Database Name</label>\n <input\n style={styles.input}\n type=\"text\"\n required\n value={newProfile.database || \"\"}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, database: e.target.value }))}\n />\n </div>\n\n <div style={{ display: \"flex\", gap: \"1rem\" }}>\n <div style={{ ...styles.formRow, flex: 1 }}>\n <label style={styles.label}>Username</label>\n <input\n style={styles.input}\n type=\"text\"\n required\n value={newProfile.username || \"\"}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, username: e.target.value }))}\n />\n </div>\n <div style={{ ...styles.formRow, flex: 1 }}>\n <label style={styles.label}>Password</label>\n <input\n style={styles.input}\n type=\"password\"\n value={newProfile.password || \"\"}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, password: e.target.value }))}\n />\n </div>\n </div>\n\n {(newProfile.type === \"postgres\" || newProfile.type === \"mssql\") && (\n <div style={styles.formRow}>\n <label style={{ cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: \"0.25rem\" }}>\n <input\n type=\"checkbox\"\n checked={!!newProfile.ssl}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, ssl: e.target.checked }))}\n />\n Require SSL Secure Connection\n </label>\n </div>\n )}\n </>\n )}\n\n <div style={styles.formRow}>\n <label style={{ cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: \"0.25rem\" }}>\n <input\n type=\"checkbox\"\n checked={!!newProfile.readOnly}\n onChange={(e) => setNewProfile((prev) => ({ ...prev, readOnly: e.target.checked }))}\n />\n Enforce Read-Only Connection (Disable mutations)\n </label>\n </div>\n\n {testStatus && (\n <div\n style={{\n ...styles.testResult,\n backgroundColor: testStatus.success ? \"rgba(16, 185, 129, 0.12)\" : \"rgba(239, 68, 68, 0.12)\",\n border: testStatus.success ? \"1px solid var(--success)\" : \"1px solid var(--danger)\",\n color: testStatus.success ? \"var(--success)\" : \"var(--danger)\",\n }}\n >\n {testStatus.message}\n </div>\n )}\n\n <div style={styles.modalFooter}>\n <button type=\"button\" style={styles.testBtn} onClick={handleTestConnection}>\n 🔍 Test Connection\n </button>\n <div style={{ display: \"flex\", gap: \"0.5rem\" }}>\n <button type=\"button\" style={styles.cancelBtn} onClick={() => setShowAddModal(false)}>\n Cancel\n </button>\n <button type=\"submit\" style={styles.saveBtn} disabled={profileSaving}>\n {profileSaving ? \"Saving...\" : \"Save Profile\"}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n}\n\n// Styling Object incorporating harmonized CSS dashboard rules\nconst styles: { [key: string]: React.CSSProperties } = {\n container: {\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n backgroundColor: \"#05070a\",\n color: \"#cbd5e1\",\n fontSize: \"0.875rem\",\n minHeight: 0,\n },\n sidebar: {\n width: \"280px\",\n borderRight: \"1px solid var(--border)\",\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: 0,\n backgroundColor: \"rgba(10, 15, 24, 0.4)\",\n flexShrink: 0,\n },\n section: {\n display: \"flex\",\n flexDirection: \"column\",\n padding: \"1rem\",\n minHeight: 0,\n },\n sectionHeader: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n marginBottom: \"0.75rem\",\n },\n sectionTitle: {\n fontWeight: 700,\n letterSpacing: \"0.05em\",\n textTransform: \"uppercase\",\n fontSize: \"0.75rem\",\n color: \"var(--muted)\",\n },\n addBtn: {\n padding: \"0.2rem 0.5rem\",\n borderRadius: \"4px\",\n border: \"1px solid var(--primary)\",\n backgroundColor: \"transparent\",\n color: \"var(--primary)\",\n fontSize: \"0.7rem\",\n fontWeight: 600,\n cursor: \"pointer\",\n },\n profileList: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.4rem\",\n overflowY: \"auto\",\n maxHeight: \"220px\",\n },\n groupHeader: {\n fontSize: \"0.65rem\",\n fontWeight: 600,\n color: \"var(--muted)\",\n marginTop: \"0.5rem\",\n marginBottom: \"0.2rem\",\n letterSpacing: \"0.05em\",\n },\n profileItem: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"0.5rem 0.6rem\",\n borderRadius: \"6px\",\n backgroundColor: \"rgba(255, 255, 255, 0.02)\",\n border: \"1px solid var(--border)\",\n cursor: \"pointer\",\n transition: \"all 0.2s ease\",\n },\n profileItemActive: {\n backgroundColor: \"rgba(109, 40, 217, 0.08)\",\n border: \"1px solid var(--border-focus)\",\n boxShadow: \"0 0 10px rgba(109, 40, 217, 0.1)\",\n },\n profileMeta: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.15rem\",\n flex: 1,\n minWidth: 0,\n },\n profileName: {\n fontWeight: 600,\n fontSize: \"0.8rem\",\n color: \"#fff\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n profileType: {\n fontSize: \"0.7rem\",\n color: \"var(--muted)\",\n textTransform: \"uppercase\",\n },\n deleteProfileBtn: {\n background: \"none\",\n border: \"none\",\n color: \"rgba(239, 68, 68, 0.4)\",\n cursor: \"pointer\",\n fontSize: \"0.75rem\",\n padding: \"0.25rem\",\n },\n tableList: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.25rem\",\n overflowY: \"auto\",\n flex: 1,\n minHeight: 0,\n },\n emptyText: {\n fontSize: \"0.75rem\",\n color: \"var(--muted)\",\n textAlign: \"center\",\n padding: \"1rem 0\",\n },\n tableTreeItem: {\n display: \"flex\",\n flexDirection: \"column\",\n },\n tableRow: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"0.35rem 0.5rem\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n userSelect: \"none\",\n transition: \"background 0.2s ease\",\n },\n tableIcon: {\n marginRight: \"0.4rem\",\n fontSize: \"0.9rem\",\n },\n tableName: {\n flex: 1,\n fontSize: \"0.8rem\",\n color: \"#e2e8f0\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n tableChevron: {\n fontSize: \"0.6rem\",\n color: \"var(--muted)\",\n marginLeft: \"0.25rem\",\n },\n columnList: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.2rem\",\n paddingLeft: \"1.5rem\",\n marginTop: \"0.15rem\",\n borderLeft: \"1px dashed rgba(255,255,255,0.06)\",\n marginLeft: \"0.8rem\",\n marginBottom: \"0.25rem\",\n },\n columnItem: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"0.15rem 0.25rem\",\n fontSize: \"0.75rem\",\n },\n columnIcon: {\n marginRight: \"0.3rem\",\n fontSize: \"0.7rem\",\n },\n columnName: {\n flex: 1,\n color: \"var(--muted)\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n columnType: {\n fontSize: \"0.65rem\",\n color: \"rgba(109, 40, 217, 0.75)\",\n fontFamily: \"monospace\",\n paddingLeft: \"0.5rem\",\n },\n mainContent: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: 0,\n backgroundColor: \"#05070a\",\n },\n statusBar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"0.75rem 1rem\",\n borderBottom: \"1px solid var(--border)\",\n backgroundColor: \"rgba(15, 23, 42, 0.3)\",\n flexShrink: 0,\n },\n statusLabel: {\n fontSize: \"0.75rem\",\n color: \"var(--muted)\",\n },\n statusValue: {\n fontSize: \"0.8rem\",\n fontWeight: 600,\n color: \"#fff\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.4rem\",\n },\n readOnlyBadge: {\n padding: \"0.1rem 0.4rem\",\n borderRadius: \"4px\",\n backgroundColor: \"rgba(234, 179, 8, 0.12)\",\n color: \"#eab308\",\n fontSize: \"0.65rem\",\n fontWeight: 700,\n border: \"1px solid rgba(234, 179, 8, 0.2)\",\n },\n runBtn: {\n padding: \"0.4rem 0.9rem\",\n borderRadius: \"6px\",\n border: \"none\",\n backgroundColor: \"var(--primary)\",\n color: \"#fff\",\n fontSize: \"0.8rem\",\n fontWeight: 600,\n transition: \"all 0.2s ease\",\n },\n editorArea: {\n height: \"180px\",\n borderBottom: \"1px solid var(--border)\",\n position: \"relative\",\n flexShrink: 0,\n },\n textarea: {\n width: \"100%\",\n height: \"100%\",\n backgroundColor: \"#080c14\",\n border: \"none\",\n resize: \"none\",\n color: \"#e2e8f0\",\n fontFamily: \"monospace\",\n fontSize: \"0.85rem\",\n padding: \"1rem\",\n outline: \"none\",\n lineHeight: \"1.4\",\n },\n resultsArea: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: 0,\n padding: \"1rem\",\n },\n errorContainer: {\n padding: \"1rem\",\n borderRadius: \"8px\",\n backgroundColor: \"rgba(239, 68, 68, 0.08)\",\n border: \"1px solid rgba(239, 68, 68, 0.2)\",\n overflowY: \"auto\",\n },\n errorText: {\n margin: 0,\n fontFamily: \"monospace\",\n fontSize: \"0.8rem\",\n color: \"#f87171\",\n whiteSpace: \"pre-wrap\",\n },\n driverPrompt: {\n marginTop: \"1rem\",\n padding: \"0.75rem\",\n borderRadius: \"6px\",\n backgroundColor: \"rgba(0, 0, 0, 0.3)\",\n border: \"1px solid var(--border)\",\n },\n driverCode: {\n display: \"block\",\n padding: \"0.5rem\",\n backgroundColor: \"#090d16\",\n borderRadius: \"4px\",\n fontFamily: \"monospace\",\n fontSize: \"0.8rem\",\n color: \"var(--primary)\",\n border: \"1px solid var(--border)\",\n },\n resultsWrapper: {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n minHeight: 0,\n },\n resultsMeta: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontSize: \"0.75rem\",\n color: \"var(--muted)\",\n marginBottom: \"0.5rem\",\n },\n tableContainer: {\n flex: 1,\n overflow: \"auto\",\n border: \"1px solid var(--border)\",\n borderRadius: \"6px\",\n },\n table: {\n width: \"100%\",\n borderCollapse: \"collapse\",\n fontFamily: \"monospace\",\n fontSize: \"0.8rem\",\n },\n th: {\n padding: \"0.5rem 0.75rem\",\n textAlign: \"left\",\n backgroundColor: \"#0f172a\",\n borderBottom: \"1px solid var(--border)\",\n color: \"#94a3b8\",\n fontWeight: 600,\n position: \"sticky\",\n top: 0,\n zIndex: 1,\n },\n td: {\n padding: \"0.4rem 0.75rem\",\n borderBottom: \"1px solid rgba(255, 255, 255, 0.03)\",\n color: \"#cbd5e1\",\n whiteSpace: \"nowrap\",\n },\n exportBtn: {\n padding: \"0.2rem 0.5rem\",\n borderRadius: \"4px\",\n border: \"1px solid var(--border)\",\n backgroundColor: \"rgba(255, 255, 255, 0.02)\",\n color: \"var(--muted)\",\n fontSize: \"0.7rem\",\n fontWeight: 600,\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n },\n cellInput: {\n width: \"100%\",\n backgroundColor: \"#070a12\",\n border: \"1px solid var(--border-focus)\",\n borderRadius: \"3px\",\n color: \"#fff\",\n padding: \"0.1rem 0.3rem\",\n fontSize: \"0.8rem\",\n fontFamily: \"monospace\",\n outline: \"none\",\n },\n editableCell: {\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n },\n trEven: {\n backgroundColor: \"transparent\",\n },\n trOdd: {\n backgroundColor: \"rgba(255, 255, 255, 0.01)\",\n },\n emptyResults: {\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"var(--muted)\",\n fontSize: \"0.8rem\",\n textAlign: \"center\",\n },\n loadingWrapper: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"1rem\",\n },\n spinnerLarge: {\n width: \"24px\",\n height: \"24px\",\n border: \"3px solid rgba(109, 40, 217, 0.15)\",\n borderTop: \"3px solid var(--primary)\",\n borderRadius: \"50%\",\n animation: \"spin 1s linear infinite\",\n },\n spinnerMini: {\n width: \"12px\",\n height: \"12px\",\n border: \"2px solid rgba(255, 255, 255, 0.1)\",\n borderTop: \"2px solid var(--muted)\",\n borderRadius: \"50%\",\n animation: \"spin 1s linear infinite\",\n },\n modalOverlay: {\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(0, 0, 0, 0.7)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: 999,\n },\n modalContent: {\n width: \"480px\",\n backgroundColor: \"#0d131f\",\n borderRadius: \"12px\",\n border: \"1px solid var(--border-focus)\",\n padding: \"1.5rem\",\n boxShadow: \"0 4px 24px rgba(0, 0, 0, 0.5)\",\n },\n formRow: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.35rem\",\n marginBottom: \"1rem\",\n },\n label: {\n fontSize: \"0.75rem\",\n fontWeight: 600,\n color: \"var(--muted)\",\n },\n input: {\n padding: \"0.5rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--border)\",\n backgroundColor: \"#070a12\",\n color: \"#fff\",\n outline: \"none\",\n fontSize: \"0.8rem\",\n },\n select: {\n padding: \"0.5rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--border)\",\n backgroundColor: \"#070a12\",\n color: \"#fff\",\n outline: \"none\",\n fontSize: \"0.8rem\",\n },\n testResult: {\n padding: \"0.5rem\",\n borderRadius: \"6px\",\n fontSize: \"0.75rem\",\n marginBottom: \"1rem\",\n },\n modalFooter: {\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: \"1.5rem\",\n },\n testBtn: {\n padding: \"0.4rem 0.75rem\",\n borderRadius: \"6px\",\n border: \"1px solid var(--border)\",\n backgroundColor: \"transparent\",\n color: \"var(--muted)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n cursor: \"pointer\",\n },\n cancelBtn: {\n padding: \"0.4rem 0.75rem\",\n borderRadius: \"6px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n color: \"var(--muted)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n cursor: \"pointer\",\n },\n saveBtn: {\n padding: \"0.4rem 0.75rem\",\n borderRadius: \"6px\",\n border: \"none\",\n backgroundColor: \"var(--primary)\",\n color: \"#fff\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n cursor: \"pointer\",\n },\n};\n\n// Inject keyframe spinner directly for robustness\nif (typeof document !== \"undefined\") {\n const style = document.createElement(\"style\");\n style.innerHTML = `\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n .db-cell:hover {\n background-color: rgba(255, 255, 255, 0.03) !important;\n outline: 1px dashed rgba(255, 255, 255, 0.2);\n }\n `;\n document.head.appendChild(style);\n}\n"],"names":["BailoutToCSRError","isBailoutToCSRError","BAILOUT_TO_CSR","Error","constructor","reason","digest","err","BailoutToCSR","children","window","encodeURIPath","file","split","map","p","encodeURIComponent","join","getAssetToken","getAssetTokenQuery","getDeploymentId","getDeploymentIdQuery","deploymentId","document","documentElement","dataset","dplId","process","env","NEXT_DEPLOYMENT_ID","undefined","ampersand","id","NEXT_IMMUTABLE_ASSET_TOKEN","PreloadChunks","moduleIds","workStore","workAsyncStorage","getStore","allFiles","reactLoadableManifest","manifest","key","chunks","files","push","length","query","chunk","href","assetPrefix","isCss","endsWith","link","precedence","rel","as","nonce","preload","fetchPriority","convertModule","mod","hasDefault","default","defaultOptions","loader","Promise","resolve","loading","ssr","Loadable","options","opts","Lazy","lazy","then","Loading","LoadableComponent","props","fallbackElement","isLoading","pastDelay","error","hasSuspenseBoundary","Wrap","Suspense","Fragment","wrapProps","fallback","modules","displayName","dynamic","dynamicOptions","loadableOptions","mergedOptions","loadableGenerated","DbExplorer","workspaceRoot","profiles","setProfiles","global","workspace","activeId","setActiveId","isActiveGlobal","setIsActiveGlobal","tables","setTables","expandedTable","setExpandedTable","tableColumns","setTableColumns","schemaLoading","setSchemaLoading","sql","setSql","queryLoading","setQueryLoading","queryError","setQueryError","queryResult","setQueryResult","editingCell","setEditingCell","editStatus","setEditStatus","showAddModal","setShowAddModal","isNewGlobal","setIsNewGlobal","newProfile","setNewProfile","name","type","filepath","host","port","database","username","password","ssl","readOnly","profileSaving","setProfileSaving","testStatus","setTestStatus","fetchProfiles","res","fetch","ok","data","json","success","console","fetchSchema","fetchTableColumns","tableName","prev","columns","activeProfile","find","handleSelectActive","isGlobal","method","headers","body","JSON","stringify","action","profileId","root","handleTestConnection","profile","message","handleSaveConnection","e","preventDefault","Math","random","toString","substring","finalProfile","handleDeleteConnection","confirm","parseTableName","sqlQuery","match","tbl","trim","replace","parts","handleCellSubmit","rowIndex","field","newValue","oldValue","alert","status","cols","pkCol","c","isPrimaryKey","row","rows","pkValue","targetColSchema","isNumeric","t","toLowerCase","includes","setExpr","toUpperCase","isNaN","Number","pkExpr","String","updateSql","updatedRows","typedVal","setTimeout","handleExportCSV","fields","lines","f","val","str","csvContent","blob","Blob","url","URL","createObjectURL","createElement","setAttribute","Date","now","appendChild","click","removeChild","handleExportJSON","jsonContent","handleRunQuery","durationMs","affectedRows","isDDL","style","styles","container","sidebar","section","sectionHeader","sectionTitle","addBtn","onClick","title","profileList","emptyText","groupHeader","profileItem","profileItemActive","profileMeta","profileName","profileType","deleteProfileBtn","stopPropagation","flex","borderTop","spinnerMini","tableList","tableTreeItem","tableRow","tableIcon","tableChevron","columnList","col","columnItem","columnIcon","isForeignKey","columnName","columnType","mainContent","statusBar","display","alignItems","gap","statusLabel","statusValue","readOnlyBadge","color","runBtn","opacity","cursor","disabled","editorArea","textarea","value","onChange","target","placeholder","onKeyDown","ctrlKey","resultsArea","errorContainer","margin","errorText","driverPrompt","driverCode","resultsWrapper","resultsMeta","exportBtn","tableContainer","table","th","idx","trEven","trOdd","isEditing","isSaving","isSuccess","isError","cellStyle","td","editableCell","backgroundColor","onDoubleClick","className","cellInput","autoFocus","newVal","onBlur","emptyResults","loadingWrapper","spinnerLarge","modalOverlay","modalContent","justifyContent","onSubmit","formRow","label","input","required","checked","select","defaultPort","parseInt","testResult","border","modalFooter","testBtn","cancelBtn","saveBtn","height","width","fontSize","minHeight","borderRight","flexDirection","flexShrink","padding","marginBottom","fontWeight","letterSpacing","textTransform","borderRadius","overflowY","maxHeight","marginTop","transition","boxShadow","minWidth","whiteSpace","overflow","textOverflow","background","textAlign","userSelect","marginRight","marginLeft","paddingLeft","borderLeft","fontFamily","borderBottom","position","resize","outline","lineHeight","borderCollapse","top","zIndex","animation","left","right","bottom","innerHTML","head"],"mappings":"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","ignoreList":[0,1,2,3,4,5,6]}
|