neural-loom 0.2.49 → 0.2.51

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.
Files changed (80) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/cache/.previewinfo +1 -1
  4. package/.next/cache/.rscinfo +1 -1
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/diagnostics/route-bundle-stats.json +2 -2
  7. package/.next/fallback-build-manifest.json +3 -3
  8. package/.next/prerender-manifest.json +3 -3
  9. package/.next/server/app/_global-error.html +1 -1
  10. package/.next/server/app/_global-error.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.html +1 -1
  17. package/.next/server/app/_not-found.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  24. package/.next/server/app/api/context/aider/route.js.nft.json +1 -1
  25. package/.next/server/app/api/context/claude/route.js.nft.json +1 -1
  26. package/.next/server/app/api/context/route.js.nft.json +1 -1
  27. package/.next/server/app/api/context/ssh/route.js.nft.json +1 -1
  28. package/.next/server/app/api/recents/route.js.nft.json +1 -1
  29. package/.next/server/app/api/sessions/inject/route.js.nft.json +1 -1
  30. package/.next/server/app/api/sessions/input/route.js.nft.json +1 -1
  31. package/.next/server/app/api/sessions/launch/route.js.nft.json +1 -1
  32. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  33. package/.next/server/app/api/sessions/scope/route.js.nft.json +1 -1
  34. package/.next/server/app/api/sessions/start/route.js.nft.json +1 -1
  35. package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -1
  36. package/.next/server/app/api/sessions/stop/route.js.nft.json +1 -1
  37. package/.next/server/app/api/sql/connections/route.js.nft.json +1 -1
  38. package/.next/server/app/api/sql/mcp/route.js.nft.json +1 -1
  39. package/.next/server/app/api/sql/query/route.js.nft.json +1 -1
  40. package/.next/server/app/api/sql/schema/route.js.nft.json +1 -1
  41. package/.next/server/app/index.html +1 -1
  42. package/.next/server/app/index.rsc +2 -2
  43. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  44. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  45. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  46. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  47. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  48. package/.next/server/app/page/react-loadable-manifest.json +1 -1
  49. package/.next/server/app/page_client-reference-manifest.js +1 -1
  50. package/.next/server/chunks/[root-of-the-server]__0.ptwor._.js +49 -9
  51. package/.next/server/chunks/[root-of-the-server]__0.ptwor._.js.map +1 -1
  52. package/.next/server/chunks/[root-of-the-server]__00l5btc._.js +49 -9
  53. package/.next/server/chunks/[root-of-the-server]__00l5btc._.js.map +1 -1
  54. package/.next/server/chunks/[root-of-the-server]__06men8g._.js +41 -1
  55. package/.next/server/chunks/[root-of-the-server]__06men8g._.js.map +1 -1
  56. package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js +1 -1
  57. package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js.map +1 -1
  58. package/.next/server/chunks/[root-of-the-server]__0co.g5k._.js +41 -1
  59. package/.next/server/chunks/[root-of-the-server]__0co.g5k._.js.map +1 -1
  60. package/.next/server/chunks/ssr/_0t7oqy6._.js +6 -1
  61. package/.next/server/chunks/ssr/_0t7oqy6._.js.map +1 -1
  62. package/.next/server/middleware-build-manifest.js +3 -3
  63. package/.next/server/pages/404.html +1 -1
  64. package/.next/server/pages/500.html +1 -1
  65. package/.next/server/server-reference-manifest.js +1 -1
  66. package/.next/server/server-reference-manifest.json +1 -1
  67. package/.next/static/chunks/0bb9anc7wd3_e.js +6 -0
  68. package/.next/static/chunks/0p28yw2f2duy-.js +1 -0
  69. package/.next/trace +1 -1
  70. package/.next/trace-build +1 -1
  71. package/package.json +1 -1
  72. package/src/app/components/DbExplorer.tsx +28 -13
  73. package/src/app/page.tsx +9 -0
  74. package/src/lib/sql/ConnectionManager.ts +4 -1
  75. package/src/lib/sql/adapters/MssqlAdapter.ts +151 -0
  76. package/.next/static/chunks/03f4bqk_d65hs.js +0 -6
  77. package/.next/static/chunks/0~6gm~u8rgtpd.js +0 -1
  78. /package/.next/static/{BoncS4SNz6CDpSdR8oY-K → iopRcvtUwbEGa5VOyZAQh}/_buildManifest.js +0 -0
  79. /package/.next/static/{BoncS4SNz6CDpSdR8oY-K → iopRcvtUwbEGa5VOyZAQh}/_clientMiddlewareManifest.js +0 -0
  80. /package/.next/static/{BoncS4SNz6CDpSdR8oY-K → iopRcvtUwbEGa5VOyZAQh}/_ssgManifest.js +0 -0
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":2708649,"timestamp":101660333048,"id":14,"parentId":1,"tags":{},"startTime":1781581043126,"traceId":"b5d2378e0f84a25f"},{"name":"turbopack-build-events","duration":72,"timestamp":101660716387,"id":15,"parentId":1,"tags":{},"startTime":1781581043510,"traceId":"b5d2378e0f84a25f"},{"name":"run-typescript","duration":4272171,"timestamp":101663053353,"id":16,"parentId":1,"tags":{},"startTime":1781581045847,"traceId":"b5d2378e0f84a25f"},{"name":"static-check","duration":800781,"timestamp":101667476861,"id":19,"parentId":1,"tags":{},"startTime":1781581050270,"traceId":"b5d2378e0f84a25f"},{"name":"static-generation","duration":661424,"timestamp":101668285427,"id":67,"parentId":1,"tags":{},"startTime":1781581051079,"traceId":"b5d2378e0f84a25f"},{"name":"telemetry-flush","duration":196909,"timestamp":101668979352,"id":76,"parentId":1,"tags":{},"startTime":1781581051773,"traceId":"b5d2378e0f84a25f"},{"name":"next-build","duration":8952303,"timestamp":101660223981,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781581043017,"traceId":"b5d2378e0f84a25f"}]
1
+ [{"name":"run-turbopack","duration":2417154,"timestamp":104103805109,"id":14,"parentId":1,"tags":{},"startTime":1781583486598,"traceId":"53f46fdd3fc2ef98"},{"name":"turbopack-build-events","duration":63,"timestamp":104104086800,"id":15,"parentId":1,"tags":{},"startTime":1781583486880,"traceId":"53f46fdd3fc2ef98"},{"name":"run-typescript","duration":4258559,"timestamp":104106235211,"id":16,"parentId":1,"tags":{},"startTime":1781583489028,"traceId":"53f46fdd3fc2ef98"},{"name":"static-check","duration":845929,"timestamp":104110646726,"id":19,"parentId":1,"tags":{},"startTime":1781583493440,"traceId":"53f46fdd3fc2ef98"},{"name":"static-generation","duration":709690,"timestamp":104111500184,"id":67,"parentId":1,"tags":{},"startTime":1781583494293,"traceId":"53f46fdd3fc2ef98"},{"name":"telemetry-flush","duration":173007,"timestamp":104112247527,"id":76,"parentId":1,"tags":{},"startTime":1781583495040,"traceId":"53f46fdd3fc2ef98"},{"name":"next-build","duration":8728181,"timestamp":104103692377,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781583486485,"traceId":"53f46fdd3fc2ef98"}]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neural-loom",
3
- "version": "0.2.49",
3
+ "version": "0.2.51",
4
4
  "bin": {
5
5
  "neural-loom": "./bin/cli.js"
6
6
  },
@@ -1,11 +1,12 @@
1
1
  "use client";
2
+ /* eslint-disable react-hooks/set-state-in-effect, react-hooks/exhaustive-deps, @typescript-eslint/no-explicit-any */
2
3
 
3
4
  import React, { useEffect, useState } from "react";
4
5
 
5
6
  interface DbConnectionProfile {
6
7
  id: string;
7
8
  name: string;
8
- type: "sqlite" | "postgres" | "mysql";
9
+ type: "sqlite" | "postgres" | "mysql" | "mssql";
9
10
  filepath?: string; // sqlite
10
11
  host?: string; // pg, mysql
11
12
  port?: number; // pg, mysql
@@ -171,6 +172,8 @@ export default function DbExplorer({ workspaceRoot }: DbExplorerProps) {
171
172
  if (activeProfile) {
172
173
  if (activeProfile.type === "sqlite") {
173
174
  setSql("SELECT name, type FROM sqlite_master WHERE type='table';");
175
+ } else if (activeProfile.type === "mssql") {
176
+ setSql("SELECT * FROM sys.tables;");
174
177
  } else {
175
178
  setSql("SELECT * FROM information_schema.tables LIMIT 10;");
176
179
  }
@@ -218,8 +221,9 @@ export default function DbExplorer({ workspaceRoot }: DbExplorerProps) {
218
221
  } else {
219
222
  setTestStatus({ success: false, message: data.error || "Connection test failed." });
220
223
  }
221
- } catch (err: any) {
222
- setTestStatus({ success: false, message: err.message || "Failed to make test query." });
224
+ } catch (err) {
225
+ const error = err as Error;
226
+ setTestStatus({ success: false, message: error.message || "Failed to make test query." });
223
227
  }
224
228
  };
225
229
 
@@ -234,7 +238,7 @@ export default function DbExplorer({ workspaceRoot }: DbExplorerProps) {
234
238
  ...newProfile,
235
239
  id: profileId,
236
240
  name: newProfile.name,
237
- type: newProfile.type as any,
241
+ type: newProfile.type!,
238
242
  } as DbConnectionProfile;
239
243
 
240
244
  try {
@@ -325,8 +329,9 @@ export default function DbExplorer({ workspaceRoot }: DbExplorerProps) {
325
329
  } else {
326
330
  setQueryError(data.error || "Failed to execute query.");
327
331
  }
328
- } catch (err: any) {
329
- setQueryError(err.message || "An unexpected error occurred during execution.");
332
+ } catch (err) {
333
+ const error = err as Error;
334
+ setQueryError(error.message || "An unexpected error occurred during execution.");
330
335
  } finally {
331
336
  setQueryLoading(false);
332
337
  }
@@ -540,7 +545,9 @@ export default function DbExplorer({ workspaceRoot }: DbExplorerProps) {
540
545
  ? "npm install better-sqlite3"
541
546
  : activeProfile?.type === "postgres"
542
547
  ? "npm install pg"
543
- : "npm install mysql2"}
548
+ : activeProfile?.type === "mysql"
549
+ ? "npm install mysql2"
550
+ : "npm install mssql"}
544
551
  </code>
545
552
  </div>
546
553
  )}
@@ -660,17 +667,25 @@ export default function DbExplorer({ workspaceRoot }: DbExplorerProps) {
660
667
  <select
661
668
  style={styles.select}
662
669
  value={newProfile.type}
663
- onChange={(e) =>
670
+ onChange={(e) => {
671
+ const val = e.target.value as "sqlite" | "postgres" | "mysql" | "mssql";
672
+ let defaultPort = 5432;
673
+ if (val === "mysql") defaultPort = 3306;
674
+ if (val === "mssql") defaultPort = 1433;
664
675
  setNewProfile((prev) => ({
665
676
  ...prev,
666
- type: e.target.value as any,
667
- filepath: e.target.value === "sqlite" ? "./dev.db" : undefined,
668
- }))
669
- }
677
+ type: val,
678
+ filepath: val === "sqlite" ? "./dev.db" : undefined,
679
+ port: val !== "sqlite" ? defaultPort : undefined,
680
+ database: val === "sqlite" ? undefined : (val === "mssql" ? "master" : (val === "postgres" ? "postgres" : "")),
681
+ username: val === "sqlite" ? undefined : (val === "mssql" ? "sa" : (val === "postgres" ? "postgres" : "root")),
682
+ }));
683
+ }}
670
684
  >
671
685
  <option value="sqlite">SQLite (Local File)</option>
672
686
  <option value="postgres">PostgreSQL</option>
673
687
  <option value="mysql">MySQL</option>
688
+ <option value="mssql">Microsoft SQL Server</option>
674
689
  </select>
675
690
  </div>
676
691
 
@@ -745,7 +760,7 @@ export default function DbExplorer({ workspaceRoot }: DbExplorerProps) {
745
760
  </div>
746
761
  </div>
747
762
 
748
- {newProfile.type === "postgres" && (
763
+ {(newProfile.type === "postgres" || newProfile.type === "mssql") && (
749
764
  <div style={styles.formRow}>
750
765
  <label style={{ cursor: "pointer", display: "flex", alignItems: "center", gap: "0.25rem" }}>
751
766
  <input
package/src/app/page.tsx CHANGED
@@ -3,6 +3,7 @@
3
3
  import { useEffect, useState } from "react";
4
4
  import dynamic from "next/dynamic";
5
5
  import styles from "./page.module.css";
6
+ import DbExplorer from "./components/DbExplorer";
6
7
 
7
8
  interface RunnerStatus {
8
9
  id: string;
@@ -567,6 +568,14 @@ export default function Home() {
567
568
  </div>
568
569
  <ContextEditor />
569
570
  </section>
571
+
572
+ {/* Database Explorer Section */}
573
+ <section style={{ marginTop: "2rem" }}>
574
+ <h2 className={styles.sectionTitle}>Built-in Database Explorer & SQL Client</h2>
575
+ <div className="card" style={{ padding: 0, overflow: "hidden", height: "480px", border: "1px solid var(--border)" }}>
576
+ <DbExplorer workspaceRoot={serverCwd || ""} />
577
+ </div>
578
+ </section>
570
579
  </main>
571
580
 
572
581
  {/* Right Panel: Environments & Actions */}
@@ -6,11 +6,12 @@ import { DbAdapter } from "./DbAdapter";
6
6
  import { SqliteAdapter } from "./adapters/SqliteAdapter";
7
7
  import { PostgresAdapter } from "./adapters/PostgresAdapter";
8
8
  import { MysqlAdapter } from "./adapters/MysqlAdapter";
9
+ import { MssqlAdapter } from "./adapters/MssqlAdapter";
9
10
 
10
11
  export interface DbConnectionProfile {
11
12
  id: string;
12
13
  name: string;
13
- type: "sqlite" | "postgres" | "mysql";
14
+ type: "sqlite" | "postgres" | "mysql" | "mssql";
14
15
  filepath?: string; // sqlite
15
16
  host?: string; // pg, mysql
16
17
  port?: number; // pg, mysql
@@ -170,6 +171,8 @@ export class ConnectionManager {
170
171
  return new PostgresAdapter(profile);
171
172
  case "mysql":
172
173
  return new MysqlAdapter(profile);
174
+ case "mssql":
175
+ return new MssqlAdapter(profile);
173
176
  default:
174
177
  throw new Error(`Unsupported database type: ${(profile as any).type}`);
175
178
  }
@@ -0,0 +1,151 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-require-imports, @typescript-eslint/no-unused-vars */
2
+ import { DbAdapter, TableSchema, ColumnSchema, QueryResult } from "../DbAdapter";
3
+
4
+ export class MssqlAdapter extends DbAdapter {
5
+ private pool: any = null;
6
+ private schema: string = "dbo";
7
+
8
+ constructor(config: any) {
9
+ super(config);
10
+ this.schema = config.schema || "dbo";
11
+ }
12
+
13
+ async connect(): Promise<void> {
14
+ if (this.pool) return;
15
+
16
+ try {
17
+ let mssql;
18
+ try {
19
+ mssql = require("mssql");
20
+ } catch (err) {
21
+ throw new Error(
22
+ "Microsoft SQL Server driver 'mssql' is not installed. Please run `npm install mssql` in the neural-loom environment."
23
+ );
24
+ }
25
+
26
+ this.pool = await mssql.connect({
27
+ server: this.config.host || "localhost",
28
+ port: this.config.port || 1433,
29
+ database: this.config.database,
30
+ user: this.config.username,
31
+ password: this.config.password,
32
+ options: {
33
+ encrypt: this.config.ssl || false,
34
+ trustServerCertificate: true
35
+ }
36
+ });
37
+ } catch (err: any) {
38
+ console.error("[MssqlAdapter] Connect failed:", err);
39
+ this.pool = null;
40
+ throw err;
41
+ }
42
+ }
43
+
44
+ async query(sql: string, params: any[] = []): Promise<QueryResult> {
45
+ await this.connect();
46
+ try {
47
+ const request = this.pool.request();
48
+
49
+ if (params.length > 0) {
50
+ request.input("schema", params[0]);
51
+ if (params.length > 1) {
52
+ request.input("table", params[1]);
53
+ }
54
+ }
55
+
56
+ const res = await request.query(sql);
57
+ const rows = res.recordset || [];
58
+ const fields = res.recordset && res.recordset.columns
59
+ ? Object.keys(res.recordset.columns)
60
+ : (rows.length > 0 ? Object.keys(rows[0]) : []);
61
+
62
+ return {
63
+ rows,
64
+ fields,
65
+ affectedRows: res.rowsAffected ? res.rowsAffected[0] : undefined
66
+ };
67
+ } catch (err: any) {
68
+ console.error("[MssqlAdapter] Query failed:", err);
69
+ throw err;
70
+ }
71
+ }
72
+
73
+ async listTables(): Promise<TableSchema[]> {
74
+ const sql = `
75
+ SELECT table_name as name, table_type as type
76
+ FROM information_schema.tables
77
+ WHERE table_schema = @schema AND table_type IN ('BASE TABLE', 'VIEW')
78
+ ORDER BY table_name
79
+ `;
80
+ const res = await this.query(sql, [this.schema]);
81
+ return res.rows.map(row => ({
82
+ name: row.name,
83
+ type: row.type === "BASE TABLE" ? "table" : "view"
84
+ }));
85
+ }
86
+
87
+ async describeTable(tableName: string): Promise<ColumnSchema[]> {
88
+ const columnsSql = `
89
+ SELECT
90
+ c.column_name as name,
91
+ c.data_type as type,
92
+ c.is_nullable as nullable,
93
+ c.column_default as default_value,
94
+ (
95
+ SELECT COUNT(*)
96
+ FROM information_schema.table_constraints tc
97
+ JOIN information_schema.key_column_usage kcu
98
+ ON tc.constraint_name = kcu.constraint_name
99
+ AND tc.table_schema = kcu.table_schema
100
+ WHERE tc.constraint_type = 'PRIMARY KEY'
101
+ AND tc.table_name = c.table_name
102
+ AND kcu.column_name = c.column_name
103
+ AND tc.table_schema = c.table_schema
104
+ ) > 0 as is_pk
105
+ FROM information_schema.columns c
106
+ WHERE c.table_schema = @schema AND c.table_name = @table
107
+ ORDER BY c.ordinal_position
108
+ `;
109
+
110
+ const fksSql = `
111
+ SELECT
112
+ kcu.column_name AS local_column,
113
+ ccu.table_name AS foreign_table,
114
+ ccu.column_name AS foreign_column
115
+ FROM information_schema.table_constraints AS tc
116
+ JOIN information_schema.key_column_usage AS kcu
117
+ ON tc.constraint_name = kcu.constraint_name
118
+ AND tc.table_schema = kcu.table_schema
119
+ JOIN information_schema.constraint_column_usage AS ccu
120
+ ON ccu.constraint_name = tc.constraint_name
121
+ AND ccu.table_schema = tc.table_schema
122
+ WHERE tc.constraint_type = 'FOREIGN KEY'
123
+ AND tc.table_schema = @schema
124
+ AND tc.table_name = @table
125
+ `;
126
+
127
+ const colsRes = await this.query(columnsSql, [this.schema, tableName]);
128
+ const fksRes = await this.query(fksSql, [this.schema, tableName]);
129
+
130
+ return colsRes.rows.map((row: any) => {
131
+ const fk = fksRes.rows.find((f: any) => f.local_column === row.name);
132
+ return {
133
+ name: row.name,
134
+ type: row.type,
135
+ nullable: row.nullable === "YES",
136
+ defaultValue: row.default_value,
137
+ isPrimaryKey: row.is_pk,
138
+ isForeignKey: !!fk,
139
+ referencedTable: fk ? fk.foreign_table : null,
140
+ referencedColumn: fk ? fk.foreign_column : null
141
+ };
142
+ });
143
+ }
144
+
145
+ async disconnect(): Promise<void> {
146
+ if (this.pool) {
147
+ await this.pool.close();
148
+ this.pool = null;
149
+ }
150
+ }
151
+ }
@@ -1,6 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,3839,e=>{"use strict";var t=e.i(43476),r=e.i(71645),o=e.i(5991),n=e.i(54370);function i({content:e}){let o=(0,r.useMemo)(()=>{if(!e)return[];let t=e.split("\n"),r=[],o=null;for(let e=0;e<t.length;e++){let n=t[e];if(o&&"code"===o.type){n.trim().startsWith("```")?(r.push(o),o=null):o.content.push(n);continue}if(o&&"table"===o.type)if(n.trim().startsWith("|")){o.content.push(n);continue}else r.push(o),o=null;let i=n.trim();if(i.startsWith("```")){o&&r.push(o),o={type:"code",language:i.substring(3).trim(),content:[]};continue}if(/^(\s*[-*_]\s*){3,}$/.test(i)){o&&r.push(o),r.push({type:"hr"}),o=null;continue}let l=n.match(/^(#{1,6})\s+(.*)$/);if(l){o&&r.push(o),r.push({type:"h",level:l[1].length,content:l[2]}),o=null;continue}let a=n.match(/^>\s*(.*)$/);if(a){if(o)if("blockquote"===o.type){o.content.push(a[1]);continue}else r.push(o);o={type:"blockquote",content:[a[1]]};continue}let s=n.match(/^([-*+])\s+(.*)$/);if(s){if(o)if("ul"===o.type){o.content.push(s[2]);continue}else r.push(o);o={type:"ul",content:[s[2]]};continue}let d=n.match(/^(\d+)\.\s+(.*)$/);if(d){if(o)if("ol"===o.type){o.content.push(d[2]);continue}else r.push(o);o={type:"ol",content:[d[2]]};continue}if(i.startsWith("|")){o&&r.push(o),o={type:"table",content:[n]};continue}if(""===i){o&&(r.push(o),o=null);continue}o?"p"===o.type?o.content=o.content+" "+i:(r.push(o),o={type:"p",content:i}):o={type:"p",content:i}}return o&&r.push(o),r},[e]),n=0;function R(e){return function e(r){if(!r)return[];let o=r.match(/`(.*?)`/),i=r.match(/\*\*(.*?)\*\*/),l=r.match(/\*(.*?)\*/),a=r.match(/\[(.*?)\]\((.*?)\)/),s=[o?{index:o.index,type:"code",match:o}:null,i?{index:i.index,type:"bold",match:i}:null,l?{index:l.index,type:"italic",match:l}:null,a?{index:a.index,type:"link",match:a}:null].filter(Boolean);if(0===s.length)return[r];s.sort((e,t)=>e.index-t.index);let d=s[0],c=r.substring(0,d.index),p=d.match[0],u=r.substring(d.index+p.length),m=[];c&&m.push(c);let h=`inline-${d.type}-${n++}`;return"code"===d.type?m.push((0,t.jsx)("code",{style:x,children:d.match[1]},h)):"bold"===d.type?m.push((0,t.jsx)("strong",{style:{fontWeight:700,color:"var(--foreground)"},children:e(d.match[1])},h)):"italic"===d.type?m.push((0,t.jsx)("em",{style:{fontStyle:"italic"},children:e(d.match[1])},h)):"link"===d.type&&m.push((0,t.jsx)("a",{href:d.match[2],target:"_blank",rel:"noopener noreferrer",style:y,children:e(d.match[1])},h)),[...m,...e(u)]}(e)}return(0,t.jsx)("div",{style:a,children:o.map((e,r)=>{let o=`block-${e.type}-${r}`;switch(e.type){case"h":{let r=R(e.content);switch(e.level){case 1:return(0,t.jsx)("h1",{style:d,children:r},o);case 2:return(0,t.jsx)("h2",{style:c,children:r},o);case 3:return(0,t.jsx)("h3",{style:p,children:r},o);default:return(0,t.jsx)("h4",{style:u,children:r},o)}}case"code":{let r=e.content.join("\n");return(0,t.jsx)(l,{code:r,language:e.language||""},o)}case"blockquote":return(0,t.jsx)("blockquote",{style:k,children:e.content&&e.content.map((e,r)=>(0,t.jsx)("p",{style:{margin:"0.25rem 0"},children:R(e)},r))},o);case"ul":return(0,t.jsx)("ul",{style:m,children:e.content&&e.content.map((e,r)=>(0,t.jsxs)("li",{style:f,children:[(0,t.jsx)("span",{style:{marginRight:"0.5rem",color:"var(--accent)"},children:"•"}),(0,t.jsx)("div",{style:{flex:1},children:R(e)})]},r))},o);case"ol":return(0,t.jsx)("ol",{style:h,children:e.content&&e.content.map((e,r)=>(0,t.jsxs)("li",{style:f,children:[(0,t.jsxs)("span",{style:{marginRight:"0.5rem",color:"var(--accent)",fontWeight:600},children:[r+1,"."]}),(0,t.jsx)("div",{style:{flex:1},children:R(e)})]},r))},o);case"table":return function(e,r){let o=e.map(e=>e.split("|").map(e=>e.trim()).filter((e,t,r)=>t>0&&t<r.length-1));if(0===o.length)return null;let n=o[0],i=o.slice(1).filter(e=>!e.every(e=>e.startsWith("-")||""===e));return(0,t.jsx)("div",{style:b,children:(0,t.jsxs)("table",{style:v,children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:n.map((e,r)=>(0,t.jsx)("th",{style:j,children:R(e)},r))})}),(0,t.jsx)("tbody",{children:i.map((e,r)=>(0,t.jsx)("tr",{style:r%2==0?w:S,children:e.map((e,r)=>(0,t.jsx)("td",{style:C,children:R(e)},r))},r))})]})},r)}(e.content,o);case"hr":return(0,t.jsx)("hr",{style:g},o);case"p":return(0,t.jsx)("p",{style:s,children:R(e.content)},o);default:return null}})})}function l({code:e,language:o}){let[n,i]=(0,r.useState)(!1);return(0,t.jsxs)("div",{style:R,children:[(0,t.jsxs)("div",{style:T,children:[(0,t.jsx)("span",{children:o||"code"}),(0,t.jsx)("button",{onClick:()=>{navigator.clipboard.writeText(e),i(!0),setTimeout(()=>i(!1),2e3)},style:I,children:n?"Copied! ✓":"Copy"})]}),(0,t.jsx)("pre",{style:z,children:(0,t.jsx)("code",{children:e})})]})}let a={fontFamily:"var(--font-sans), sans-serif",color:"var(--foreground)",lineHeight:1.6,padding:"1.5rem",overflowY:"auto",height:"100%",backgroundColor:"#080c14",borderLeft:"1px solid var(--border)"},s={fontSize:"0.875rem",marginBottom:"1rem",color:"var(--foreground-muted, #94a3b8)"},d={fontSize:"1.5rem",fontWeight:700,margin:"1.5rem 0 1rem 0",paddingBottom:"0.3rem",borderBottom:"1px solid var(--border)",color:"var(--foreground)",background:"linear-gradient(135deg, #fff 0%, #a855f7 100%)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},c={fontSize:"1.25rem",fontWeight:650,margin:"1.25rem 0 0.85rem 0",paddingBottom:"0.25rem",borderBottom:"1px solid var(--border)",color:"var(--foreground)"},p={fontSize:"1.05rem",fontWeight:600,margin:"1rem 0 0.75rem 0",color:"var(--foreground)"},u={fontSize:"0.925rem",fontWeight:600,margin:"0.85rem 0 0.5rem 0",color:"var(--foreground)"},m={listStyleType:"none",padding:0,margin:"0 0 1rem 0"},h={listStyleType:"none",padding:0,margin:"0 0 1rem 0"},f={display:"flex",alignItems:"flex-start",fontSize:"0.875rem",marginBottom:"0.375rem",color:"var(--foreground-muted, #94a3b8)"},g={border:"none",height:"1px",background:"linear-gradient(90deg, var(--border) 0%, rgba(255,255,255,0.05) 100%)",margin:"1.5rem 0"},x={fontFamily:"var(--font-mono), monospace",fontSize:"0.85em",backgroundColor:"rgba(255, 255, 255, 0.06)",border:"1px solid rgba(255, 255, 255, 0.08)",borderRadius:"4px",padding:"0.1rem 0.3rem",color:"#f87171"},y={color:"#60a5fa",textDecoration:"underline",fontWeight:500},b={width:"100%",overflowX:"auto",margin:"1rem 0",borderRadius:"8px",border:"1px solid var(--border)",backgroundColor:"rgba(255, 255, 255, 0.01)"},v={width:"100%",borderCollapse:"collapse",fontSize:"0.85rem"},j={backgroundColor:"rgba(255, 255, 255, 0.03)",borderBottom:"2px solid var(--border)",padding:"0.5rem 0.75rem",fontWeight:700,textAlign:"left",color:"var(--foreground)"},C={borderBottom:"1px solid var(--border)",padding:"0.5rem 0.75rem",color:"var(--foreground-muted, #94a3b8)"},w={backgroundColor:"rgba(255, 255, 255, 0.01)"},S={backgroundColor:"transparent"},k={borderLeft:"4px solid #a855f7",backgroundColor:"rgba(168, 85, 247, 0.03)",padding:"0.5rem 1rem",margin:"1rem 0",borderRadius:"4px",fontStyle:"italic",color:"var(--muted)"},R={margin:"1rem 0",borderRadius:"8px",border:"1px solid var(--border)",backgroundColor:"#05070a",overflow:"hidden"},T={display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0.35rem 0.75rem",backgroundColor:"rgba(255, 255, 255, 0.02)",borderBottom:"1px solid var(--border)",fontSize:"0.7rem",color:"var(--muted)",textTransform:"uppercase",fontFamily:"var(--font-mono), monospace"},z={margin:0,padding:"1rem",overflowX:"auto",fontSize:"0.8rem",fontFamily:"var(--font-mono), monospace",lineHeight:1.5,color:"#e2e8f0"},I={background:"none",border:"1px solid var(--border)",borderRadius:"4px",padding:"2px 6px",color:"var(--muted)",cursor:"pointer",fontSize:"0.65rem",transition:"all 0.1s ease"};function P({workspaceRoot:e}){let[o,n]=(0,r.useState)({global:[],workspace:[]}),[i,l]=(0,r.useState)(null),[a,s]=(0,r.useState)(!0),[d,c]=(0,r.useState)([]),[p,u]=(0,r.useState)(null),[m,h]=(0,r.useState)({}),[f,g]=(0,r.useState)(!1),[x,y]=(0,r.useState)("SELECT * FROM sqlite_master;"),[b,v]=(0,r.useState)(!1),[j,C]=(0,r.useState)(null),[w,S]=(0,r.useState)(null),[k,R]=(0,r.useState)(!1),[T,z]=(0,r.useState)(!1),[I,L]=(0,r.useState)({id:"",name:"",type:"sqlite",filepath:"./dev.db",host:"localhost",port:5432,database:"postgres",username:"postgres",password:"",ssl:!1,readOnly:!0}),[O,F]=(0,r.useState)(!1),[B,D]=(0,r.useState)(null),E=async()=>{try{let t=await fetch(`/api/sql/connections?root=${encodeURIComponent(e)}`);if(t.ok){let e=await t.json();e.success&&(n({global:e.global||[],workspace:e.workspace||[]}),l(e.activeId),s(e.isActiveGlobal))}}catch(e){console.error("Failed to load connection profiles:",e)}},M=async()=>{if(!i)return void c([]);g(!0);try{let t=await fetch(`/api/sql/schema?action=list_tables&root=${encodeURIComponent(e)}`);if(t.ok){let e=await t.json();e.success?(c(e.tables||[]),C(null)):C(e.error||"Failed to load database schema.")}else{let e=await t.json();C(e.error||"Failed to load database schema.")}}catch(e){console.error("Failed to load schema:",e)}finally{g(!1)}},N=async t=>{if(m[t])return void u(p===t?null:t);try{let r=await fetch(`/api/sql/schema?action=describe_table&table=${encodeURIComponent(t)}&root=${encodeURIComponent(e)}`);if(r.ok){let e=await r.json();e.success&&(h(r=>({...r,[t]:e.columns})),u(t))}}catch(e){console.error(`Failed to load columns for table ${t}:`,e)}};(0,r.useEffect)(()=>{E()},[e]),(0,r.useEffect)(()=>{M(),S(null),u(null),h({});let e=a?o.global.find(e=>e.id===i):o.workspace.find(e=>e.id===i);e&&("sqlite"===e.type?y("SELECT name, type FROM sqlite_master WHERE type='table';"):y("SELECT * FROM information_schema.tables LIMIT 10;"))},[i,a,o.global.length,o.workspace.length]);let A=async(t,r)=>{try{(await fetch("/api/sql/connections",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"set_active",profileId:t,isGlobal:r,root:e})})).ok&&(l(t),s(r))}catch(e){console.error("Failed to set active profile:",e)}},$=async()=>{D(null);try{let t=await fetch("/api/sql/connections",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"test",profile:I,root:e})}),r=await t.json();r.success?D({success:!0,message:"Connection test successful!"}):D({success:!1,message:r.error||"Connection test failed."})}catch(e){D({success:!1,message:e.message||"Failed to make test query."})}},U=async t=>{if(t.preventDefault(),!I.name||!I.type)return;F(!0);let r=I.id||`profile_${Math.random().toString(36).substring(7)}`,o={...I,id:r,name:I.name,type:I.type};try{(await fetch("/api/sql/connections",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"save",profile:o,isGlobal:T,root:e})})).ok&&(await E(),R(!1),i||A(r,T))}catch(e){console.error("Failed to save profile:",e)}finally{F(!1)}},q=async(t,r)=>{if(confirm("Are you sure you want to delete this connection profile?"))try{(await fetch("/api/sql/connections",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"delete",profileId:t,isGlobal:r,root:e})})).ok&&(await E(),i===t&&l(null))}catch(e){console.error("Failed to delete connection profile:",e)}},H=async()=>{if(x.trim()&&i){v(!0),C(null),S(null);try{let t=await fetch("/api/sql/query",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sql:x.trim(),root:e})}),r=await t.json();t.ok&&r.success?(S({rows:r.rows||[],fields:r.fields||[],durationMs:r.durationMs||0,affectedRows:r.affectedRows}),(x.toLowerCase().includes("create table")||x.toLowerCase().includes("drop table")||x.toLowerCase().includes("alter table"))&&M()):C(r.error||"Failed to execute query.")}catch(e){C(e.message||"An unexpected error occurred during execution.")}finally{v(!1)}}},J=a?o.global.find(e=>e.id===i):o.workspace.find(e=>e.id===i);return(0,t.jsxs)("div",{style:W.container,children:[(0,t.jsxs)("div",{style:W.sidebar,children:[(0,t.jsxs)("div",{style:W.section,children:[(0,t.jsxs)("div",{style:W.sectionHeader,children:[(0,t.jsx)("span",{style:W.sectionTitle,children:"Connections"}),(0,t.jsx)("button",{style:W.addBtn,onClick:()=>{D(null),L({id:"",name:"",type:"sqlite",filepath:"./dev.db",host:"localhost",port:5432,database:"postgres",username:"postgres",password:"",ssl:!1,readOnly:!0}),z(!1),R(!0)},title:"Add Database Connection Profile",children:"➕ Add"})]}),(0,t.jsxs)("div",{style:W.profileList,children:[0===o.global.length&&0===o.workspace.length&&(0,t.jsx)("div",{style:W.emptyText,children:"No connections configured. Add one to start."}),o.workspace.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{style:W.groupHeader,children:"WORKSPACE CONNECTIONS"}),o.workspace.map(e=>(0,t.jsxs)("div",{style:{...W.profileItem,...i===e.id&&!a?W.profileItemActive:{}},onClick:()=>A(e.id,!1),children:[(0,t.jsxs)("div",{style:W.profileMeta,children:[(0,t.jsxs)("span",{style:W.profileName,children:["📁 ",e.name]}),(0,t.jsx)("span",{style:W.profileType,children:e.type})]}),(0,t.jsx)("button",{style:W.deleteProfileBtn,onClick:t=>{t.stopPropagation(),q(e.id,!1)},children:"✖"})]},e.id))]}),o.global.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{style:W.groupHeader,children:"GLOBAL CONNECTIONS"}),o.global.map(e=>(0,t.jsxs)("div",{style:{...W.profileItem,...i===e.id&&a?W.profileItemActive:{}},onClick:()=>A(e.id,!0),children:[(0,t.jsxs)("div",{style:W.profileMeta,children:[(0,t.jsxs)("span",{style:W.profileName,children:["🌐 ",e.name]}),(0,t.jsx)("span",{style:W.profileType,children:e.type})]}),(0,t.jsx)("button",{style:W.deleteProfileBtn,onClick:t=>{t.stopPropagation(),q(e.id,!0)},children:"✖"})]},e.id))]})]})]}),(0,t.jsxs)("div",{style:{...W.section,flex:1,borderTop:"1px solid var(--border)"},children:[(0,t.jsxs)("div",{style:W.sectionHeader,children:[(0,t.jsx)("span",{style:W.sectionTitle,children:"Schema Tables"}),f&&(0,t.jsx)("span",{style:W.spinnerMini})]}),(0,t.jsxs)("div",{style:W.tableList,children:[!i&&(0,t.jsx)("div",{style:W.emptyText,children:"Select an active connection to view tables."}),i&&0===d.length&&!f&&(0,t.jsx)("div",{style:W.emptyText,children:"No tables found in database schema."}),d.map(e=>(0,t.jsxs)("div",{style:W.tableTreeItem,children:[(0,t.jsxs)("div",{style:W.tableRow,onClick:()=>N(e.name),children:[(0,t.jsx)("span",{style:W.tableIcon,children:"view"===e.type?"👁️":"📊"}),(0,t.jsx)("span",{style:W.tableName,children:e.name}),(0,t.jsx)("span",{style:W.tableChevron,children:p===e.name?"▼":"▶"})]}),p===e.name&&m[e.name]&&(0,t.jsx)("div",{style:W.columnList,children:m[e.name].map(e=>(0,t.jsxs)("div",{style:W.columnItem,children:[(0,t.jsx)("span",{style:W.columnIcon,children:e.isPrimaryKey?"🔑":e.isForeignKey?"🔗":"▫"}),(0,t.jsx)("span",{style:W.columnName,title:e.type,children:e.name}),(0,t.jsx)("span",{style:W.columnType,children:e.type.toLowerCase().substring(0,12)})]},e.name))})]},e.name))]})]})]}),(0,t.jsxs)("div",{style:W.mainContent,children:[(0,t.jsxs)("div",{style:W.statusBar,children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[(0,t.jsx)("span",{style:W.statusLabel,children:"Active Connection:"}),J?(0,t.jsxs)("span",{style:W.statusValue,children:[a?"🌐":"📁"," ",J.name," (",J.type,")",J.readOnly&&(0,t.jsx)("span",{style:W.readOnlyBadge,children:"Read-Only"})]}):(0,t.jsx)("span",{style:{...W.statusValue,color:"var(--danger)"},children:"No Connection Selected"})]}),(0,t.jsx)("button",{style:{...W.runBtn,opacity:!i||b?.6:1,cursor:!i||b?"not-allowed":"pointer"},onClick:H,disabled:!i||b,children:b?"⌛ Running...":"⚡ Execute Query (F5)"})]}),(0,t.jsx)("div",{style:W.editorArea,children:(0,t.jsx)("textarea",{style:W.textarea,value:x,onChange:e=>y(e.target.value),placeholder:"Write your SQL query script here...",onKeyDown:e=>{("F5"===e.key||e.ctrlKey&&"Enter"===e.key)&&(e.preventDefault(),H())}})}),(0,t.jsxs)("div",{style:W.resultsArea,children:[j&&(0,t.jsxs)("div",{style:W.errorContainer,children:[(0,t.jsx)("h4",{style:{margin:"0 0 0.5rem 0",color:"var(--danger)"},children:"⚠️ Execution Error"}),(0,t.jsx)("pre",{style:W.errorText,children:j}),j.includes("not installed")&&(0,t.jsxs)("div",{style:W.driverPrompt,children:[(0,t.jsx)("p",{style:{margin:"0 0 0.5rem 0"},children:"To resolve this, run this installer command in your workspace terminal:"}),(0,t.jsx)("code",{style:W.driverCode,children:J?.type==="sqlite"?"npm install better-sqlite3":J?.type==="postgres"?"npm install pg":"npm install mysql2"})]})]}),w&&(0,t.jsxs)("div",{style:W.resultsWrapper,children:[(0,t.jsxs)("div",{style:W.resultsMeta,children:[(0,t.jsxs)("span",{children:["Query completed."," ",void 0!==w.affectedRows?`Affected rows: ${w.affectedRows}`:`Returned ${w.rows.length} rows`]}),(0,t.jsxs)("span",{children:["Duration: ",w.durationMs,"ms"]})]}),w.rows.length>0?(0,t.jsx)("div",{style:W.tableContainer,children:(0,t.jsxs)("table",{style:W.table,children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:w.fields.map(e=>(0,t.jsx)("th",{style:W.th,children:e},e))})}),(0,t.jsx)("tbody",{children:w.rows.map((e,r)=>(0,t.jsx)("tr",{style:r%2==0?W.trEven:W.trOdd,children:w.fields.map(r=>(0,t.jsx)("td",{style:W.td,children:null===e[r]?"NULL":"object"==typeof e[r]?JSON.stringify(e[r]):String(e[r])},r))},r))})]})}):void 0===w.affectedRows&&(0,t.jsx)("div",{style:W.emptyResults,children:"Query executed successfully, but returned 0 results."})]}),!j&&!w&&!b&&(0,t.jsx)("div",{style:W.emptyResults,children:"Write a query script and click Execute to view table records."}),b&&(0,t.jsxs)("div",{style:W.loadingWrapper,children:[(0,t.jsx)("span",{style:W.spinnerLarge}),(0,t.jsx)("span",{style:{color:"var(--muted)"},children:"Running database statement..."})]})]})]}),k&&(0,t.jsx)("div",{style:W.modalOverlay,children:(0,t.jsxs)("div",{style:W.modalContent,children:[(0,t.jsxs)("h3",{style:{margin:"0 0 1rem 0",display:"flex",justifyContent:"space-between"},children:[(0,t.jsx)("span",{children:"🔌 Add Database Profile"}),(0,t.jsx)("span",{style:{cursor:"pointer"},onClick:()=>R(!1),children:"✖"})]}),(0,t.jsxs)("form",{onSubmit:U,children:[(0,t.jsxs)("div",{style:W.formRow,children:[(0,t.jsx)("label",{style:W.label,children:"Profile Name"}),(0,t.jsx)("input",{style:W.input,type:"text",required:!0,value:I.name,onChange:e=>L(t=>({...t,name:e.target.value})),placeholder:"e.g. Local Postgres, Dev SQLite"})]}),(0,t.jsxs)("div",{style:W.formRow,children:[(0,t.jsx)("label",{style:W.label,children:"Scope Level"}),(0,t.jsxs)("div",{style:{display:"flex",gap:"1rem"},children:[(0,t.jsxs)("label",{style:{cursor:"pointer",display:"flex",alignItems:"center",gap:"0.25rem"},children:[(0,t.jsx)("input",{type:"radio",checked:!T,onChange:()=>z(!1)}),"Workspace Local"]}),(0,t.jsxs)("label",{style:{cursor:"pointer",display:"flex",alignItems:"center",gap:"0.25rem"},children:[(0,t.jsx)("input",{type:"radio",checked:T,onChange:()=>z(!0)}),"Global User Profile"]})]})]}),(0,t.jsxs)("div",{style:W.formRow,children:[(0,t.jsx)("label",{style:W.label,children:"Database Type"}),(0,t.jsxs)("select",{style:W.select,value:I.type,onChange:e=>L(t=>({...t,type:e.target.value,filepath:"sqlite"===e.target.value?"./dev.db":void 0})),children:[(0,t.jsx)("option",{value:"sqlite",children:"SQLite (Local File)"}),(0,t.jsx)("option",{value:"postgres",children:"PostgreSQL"}),(0,t.jsx)("option",{value:"mysql",children:"MySQL"})]})]}),"sqlite"===I.type?(0,t.jsxs)("div",{style:W.formRow,children:[(0,t.jsx)("label",{style:W.label,children:"Database File Path"}),(0,t.jsx)("input",{style:W.input,type:"text",required:!0,value:I.filepath||"",onChange:e=>L(t=>({...t,filepath:e.target.value})),placeholder:"Relative (e.g. ./data/dev.db) or Absolute path"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:"1rem"},children:[(0,t.jsxs)("div",{style:{...W.formRow,flex:3},children:[(0,t.jsx)("label",{style:W.label,children:"Host IP Address"}),(0,t.jsx)("input",{style:W.input,type:"text",required:!0,value:I.host||"",onChange:e=>L(t=>({...t,host:e.target.value})),placeholder:"localhost or IP"})]}),(0,t.jsxs)("div",{style:{...W.formRow,flex:1},children:[(0,t.jsx)("label",{style:W.label,children:"Port"}),(0,t.jsx)("input",{style:W.input,type:"number",required:!0,value:I.port||0,onChange:e=>L(t=>({...t,port:parseInt(e.target.value)}))})]})]}),(0,t.jsxs)("div",{style:W.formRow,children:[(0,t.jsx)("label",{style:W.label,children:"Database Name"}),(0,t.jsx)("input",{style:W.input,type:"text",required:!0,value:I.database||"",onChange:e=>L(t=>({...t,database:e.target.value}))})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:"1rem"},children:[(0,t.jsxs)("div",{style:{...W.formRow,flex:1},children:[(0,t.jsx)("label",{style:W.label,children:"Username"}),(0,t.jsx)("input",{style:W.input,type:"text",required:!0,value:I.username||"",onChange:e=>L(t=>({...t,username:e.target.value}))})]}),(0,t.jsxs)("div",{style:{...W.formRow,flex:1},children:[(0,t.jsx)("label",{style:W.label,children:"Password"}),(0,t.jsx)("input",{style:W.input,type:"password",value:I.password||"",onChange:e=>L(t=>({...t,password:e.target.value}))})]})]}),"postgres"===I.type&&(0,t.jsx)("div",{style:W.formRow,children:(0,t.jsxs)("label",{style:{cursor:"pointer",display:"flex",alignItems:"center",gap:"0.25rem"},children:[(0,t.jsx)("input",{type:"checkbox",checked:!!I.ssl,onChange:e=>L(t=>({...t,ssl:e.target.checked}))}),"Require SSL Secure Connection"]})})]}),(0,t.jsx)("div",{style:W.formRow,children:(0,t.jsxs)("label",{style:{cursor:"pointer",display:"flex",alignItems:"center",gap:"0.25rem"},children:[(0,t.jsx)("input",{type:"checkbox",checked:!!I.readOnly,onChange:e=>L(t=>({...t,readOnly:e.target.checked}))}),"Enforce Read-Only Connection (Disable mutations)"]})}),B&&(0,t.jsx)("div",{style:{...W.testResult,backgroundColor:B.success?"rgba(16, 185, 129, 0.12)":"rgba(239, 68, 68, 0.12)",border:B.success?"1px solid var(--success)":"1px solid var(--danger)",color:B.success?"var(--success)":"var(--danger)"},children:B.message}),(0,t.jsxs)("div",{style:W.modalFooter,children:[(0,t.jsx)("button",{type:"button",style:W.testBtn,onClick:$,children:"🔍 Test Connection"}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.5rem"},children:[(0,t.jsx)("button",{type:"button",style:W.cancelBtn,onClick:()=>R(!1),children:"Cancel"}),(0,t.jsx)("button",{type:"submit",style:W.saveBtn,disabled:O,children:O?"Saving...":"Save Profile"})]})]})]})]})})]})}let W={container:{display:"flex",height:"100%",width:"100%",backgroundColor:"#05070a",color:"#cbd5e1",fontSize:"0.875rem",minHeight:0},sidebar:{width:"280px",borderRight:"1px solid var(--border)",display:"flex",flexDirection:"column",minHeight:0,backgroundColor:"rgba(10, 15, 24, 0.4)",flexShrink:0},section:{display:"flex",flexDirection:"column",padding:"1rem",minHeight:0},sectionHeader:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.75rem"},sectionTitle:{fontWeight:700,letterSpacing:"0.05em",textTransform:"uppercase",fontSize:"0.75rem",color:"var(--muted)"},addBtn:{padding:"0.2rem 0.5rem",borderRadius:"4px",border:"1px solid var(--primary)",backgroundColor:"transparent",color:"var(--primary)",fontSize:"0.7rem",fontWeight:600,cursor:"pointer"},profileList:{display:"flex",flexDirection:"column",gap:"0.4rem",overflowY:"auto",maxHeight:"220px"},groupHeader:{fontSize:"0.65rem",fontWeight:600,color:"var(--muted)",marginTop:"0.5rem",marginBottom:"0.2rem",letterSpacing:"0.05em"},profileItem:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0.5rem 0.6rem",borderRadius:"6px",backgroundColor:"rgba(255, 255, 255, 0.02)",border:"1px solid var(--border)",cursor:"pointer",transition:"all 0.2s ease"},profileItemActive:{backgroundColor:"rgba(109, 40, 217, 0.08)",border:"1px solid var(--border-focus)",boxShadow:"0 0 10px rgba(109, 40, 217, 0.1)"},profileMeta:{display:"flex",flexDirection:"column",gap:"0.15rem",flex:1,minWidth:0},profileName:{fontWeight:600,fontSize:"0.8rem",color:"#fff",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},profileType:{fontSize:"0.7rem",color:"var(--muted)",textTransform:"uppercase"},deleteProfileBtn:{background:"none",border:"none",color:"rgba(239, 68, 68, 0.4)",cursor:"pointer",fontSize:"0.75rem",padding:"0.25rem"},tableList:{display:"flex",flexDirection:"column",gap:"0.25rem",overflowY:"auto",flex:1,minHeight:0},emptyText:{fontSize:"0.75rem",color:"var(--muted)",textAlign:"center",padding:"1rem 0"},tableTreeItem:{display:"flex",flexDirection:"column"},tableRow:{display:"flex",alignItems:"center",padding:"0.35rem 0.5rem",borderRadius:"4px",cursor:"pointer",userSelect:"none",transition:"background 0.2s ease"},tableIcon:{marginRight:"0.4rem",fontSize:"0.9rem"},tableName:{flex:1,fontSize:"0.8rem",color:"#e2e8f0",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},tableChevron:{fontSize:"0.6rem",color:"var(--muted)",marginLeft:"0.25rem"},columnList:{display:"flex",flexDirection:"column",gap:"0.2rem",paddingLeft:"1.5rem",marginTop:"0.15rem",borderLeft:"1px dashed rgba(255,255,255,0.06)",marginLeft:"0.8rem",marginBottom:"0.25rem"},columnItem:{display:"flex",alignItems:"center",padding:"0.15rem 0.25rem",fontSize:"0.75rem"},columnIcon:{marginRight:"0.3rem",fontSize:"0.7rem"},columnName:{flex:1,color:"var(--muted)",overflow:"hidden",textOverflow:"ellipsis"},columnType:{fontSize:"0.65rem",color:"rgba(109, 40, 217, 0.75)",fontFamily:"monospace",paddingLeft:"0.5rem"},mainContent:{flex:1,display:"flex",flexDirection:"column",minHeight:0,backgroundColor:"#05070a"},statusBar:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0.75rem 1rem",borderBottom:"1px solid var(--border)",backgroundColor:"rgba(15, 23, 42, 0.3)",flexShrink:0},statusLabel:{fontSize:"0.75rem",color:"var(--muted)"},statusValue:{fontSize:"0.8rem",fontWeight:600,color:"#fff",display:"flex",alignItems:"center",gap:"0.4rem"},readOnlyBadge:{padding:"0.1rem 0.4rem",borderRadius:"4px",backgroundColor:"rgba(234, 179, 8, 0.12)",color:"#eab308",fontSize:"0.65rem",fontWeight:700,border:"1px solid rgba(234, 179, 8, 0.2)"},runBtn:{padding:"0.4rem 0.9rem",borderRadius:"6px",border:"none",backgroundColor:"var(--primary)",color:"#fff",fontSize:"0.8rem",fontWeight:600,transition:"all 0.2s ease"},editorArea:{height:"180px",borderBottom:"1px solid var(--border)",position:"relative",flexShrink:0},textarea:{width:"100%",height:"100%",backgroundColor:"#080c14",border:"none",resize:"none",color:"#e2e8f0",fontFamily:"monospace",fontSize:"0.85rem",padding:"1rem",outline:"none",lineHeight:"1.4"},resultsArea:{flex:1,display:"flex",flexDirection:"column",minHeight:0,padding:"1rem"},errorContainer:{padding:"1rem",borderRadius:"8px",backgroundColor:"rgba(239, 68, 68, 0.08)",border:"1px solid rgba(239, 68, 68, 0.2)",overflowY:"auto"},errorText:{margin:0,fontFamily:"monospace",fontSize:"0.8rem",color:"#f87171",whiteSpace:"pre-wrap"},driverPrompt:{marginTop:"1rem",padding:"0.75rem",borderRadius:"6px",backgroundColor:"rgba(0, 0, 0, 0.3)",border:"1px solid var(--border)"},driverCode:{display:"block",padding:"0.5rem",backgroundColor:"#090d16",borderRadius:"4px",fontFamily:"monospace",fontSize:"0.8rem",color:"var(--primary)",border:"1px solid var(--border)"},resultsWrapper:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},resultsMeta:{display:"flex",justifyContent:"space-between",fontSize:"0.75rem",color:"var(--muted)",marginBottom:"0.5rem"},tableContainer:{flex:1,overflow:"auto",border:"1px solid var(--border)",borderRadius:"6px"},table:{width:"100%",borderCollapse:"collapse",fontFamily:"monospace",fontSize:"0.8rem"},th:{padding:"0.5rem 0.75rem",textAlign:"left",backgroundColor:"#0f172a",borderBottom:"1px solid var(--border)",color:"#94a3b8",fontWeight:600,position:"sticky",top:0,zIndex:1},td:{padding:"0.4rem 0.75rem",borderBottom:"1px solid rgba(255, 255, 255, 0.03)",color:"#cbd5e1",whiteSpace:"nowrap"},trEven:{backgroundColor:"transparent"},trOdd:{backgroundColor:"rgba(255, 255, 255, 0.01)"},emptyResults:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--muted)",fontSize:"0.8rem",textAlign:"center"},loadingWrapper:{flex:1,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"1rem"},spinnerLarge:{width:"24px",height:"24px",border:"3px solid rgba(109, 40, 217, 0.15)",borderTop:"3px solid var(--primary)",borderRadius:"50%",animation:"spin 1s linear infinite"},spinnerMini:{width:"12px",height:"12px",border:"2px solid rgba(255, 255, 255, 0.1)",borderTop:"2px solid var(--muted)",borderRadius:"50%",animation:"spin 1s linear infinite"},modalOverlay:{position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0, 0, 0, 0.7)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:999},modalContent:{width:"480px",backgroundColor:"#0d131f",borderRadius:"12px",border:"1px solid var(--border-focus)",padding:"1.5rem",boxShadow:"0 4px 24px rgba(0, 0, 0, 0.5)"},formRow:{display:"flex",flexDirection:"column",gap:"0.35rem",marginBottom:"1rem"},label:{fontSize:"0.75rem",fontWeight:600,color:"var(--muted)"},input:{padding:"0.5rem",borderRadius:"6px",border:"1px solid var(--border)",backgroundColor:"#070a12",color:"#fff",outline:"none",fontSize:"0.8rem"},select:{padding:"0.5rem",borderRadius:"6px",border:"1px solid var(--border)",backgroundColor:"#070a12",color:"#fff",outline:"none",fontSize:"0.8rem"},testResult:{padding:"0.5rem",borderRadius:"6px",fontSize:"0.75rem",marginBottom:"1rem"},modalFooter:{display:"flex",justifyContent:"space-between",marginTop:"1.5rem"},testBtn:{padding:"0.4rem 0.75rem",borderRadius:"6px",border:"1px solid var(--border)",backgroundColor:"transparent",color:"var(--muted)",fontSize:"0.75rem",fontWeight:600,cursor:"pointer"},cancelBtn:{padding:"0.4rem 0.75rem",borderRadius:"6px",border:"none",backgroundColor:"transparent",color:"var(--muted)",fontSize:"0.75rem",fontWeight:600,cursor:"pointer"},saveBtn:{padding:"0.4rem 0.75rem",borderRadius:"6px",border:"none",backgroundColor:"var(--primary)",color:"#fff",fontSize:"0.75rem",fontWeight:600,cursor:"pointer"}};if("u">typeof document){let e=document.createElement("style");e.innerHTML=`
2
- @keyframes spin {
3
- 0% { transform: rotate(0deg); }
4
- 100% { transform: rotate(360deg); }
5
- }
6
- `,document.head.appendChild(e)}let L={display:"flex",width:"100%",height:"100%",flex:1,minHeight:0,backgroundColor:"#05070a",border:"1px solid var(--border)",borderRadius:"12px",overflow:"hidden",boxShadow:"0 20px 25px -5px rgba(0, 0, 0, 0.6)"},O={width:"50px",backgroundColor:"#030406",borderRight:"1px solid var(--border)",display:"flex",flexDirection:"column",justifyContent:"space-between",alignItems:"center",padding:"0.75rem 0"},F={display:"flex",flexDirection:"column",width:"100%",gap:"0.5rem"},B={width:"100%",height:"45px",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",fontSize:"1.25rem",transition:"all 0.15s ease"},D={width:"300px",backgroundColor:"#080c14",borderRight:"1px solid var(--border)",display:"flex",flexDirection:"column",overflow:"hidden"},E={padding:"0.75rem 1rem",borderBottom:"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"space-between",background:"rgba(255,255,255,0.02)"},M={flex:1,overflowY:"auto",padding:"0.75rem 0"},N={padding:"0.25rem 1rem",fontSize:"0.75rem",fontWeight:700,color:"var(--muted)",display:"flex",alignItems:"center",justifyContent:"space-between",textTransform:"uppercase",letterSpacing:"0.05em"},A={fontSize:"0.6rem",backgroundColor:"rgba(59, 130, 246, 0.1)",color:"#3b82f6",padding:"0.1rem 0.3rem",borderRadius:"3px",textTransform:"none",letterSpacing:"normal"},$={fontSize:"0.75rem",fontWeight:600,color:"var(--foreground)"},U={flex:1,display:"flex",flexDirection:"column",overflow:"hidden",backgroundColor:"#0b101b"},q={flex:1,display:"flex",flexDirection:"column",borderBottom:"1px solid var(--border)",overflow:"hidden"},H={height:"35px",backgroundColor:"#05070a",borderBottom:"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"space-between",paddingRight:"0.75rem"},J={display:"flex",height:"100%",overflowX:"auto"},V={padding:"0 1rem",height:"100%",display:"flex",alignItems:"center",gap:"0.75rem",fontSize:"0.75rem",borderRight:"1px solid var(--border)",borderBottom:"2px solid transparent",cursor:"pointer",transition:"all 0.15s ease",maxWidth:"150px"},K={fontSize:"0.65rem",color:"var(--muted)",cursor:"pointer",padding:"2px"},_={color:"var(--primary)",fontSize:"0.65rem",marginLeft:"2px"},G={padding:"0.25rem 0.5rem",borderRadius:"4px",border:"1px solid var(--border-focus)",backgroundColor:"rgba(16, 185, 129, 0.15)",color:"var(--success)",fontSize:"0.7rem",fontWeight:600},Q={flex:1,position:"relative",overflow:"hidden"},Y={width:"100%",height:"100%",backgroundColor:"#0b101b",border:"none",outline:"none",color:"#e2e8f0",fontFamily:"var(--font-mono), monospace",fontSize:"0.85rem",padding:"1rem",resize:"none",lineHeight:1.5},X={display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",color:"var(--muted)",textAlign:"center",padding:"2rem"},Z={flex:1.4,backgroundColor:"#05070a",display:"flex",flexDirection:"column",overflow:"hidden"},ee={padding:"0.5rem 1rem",borderBottom:"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"space-between",backgroundColor:"rgba(255,255,255,0.01)"},et={padding:"0.3rem 0.6rem",borderRadius:"4px",border:"1px solid var(--primary)",backgroundColor:"transparent",color:"var(--primary)",fontSize:"0.7rem",fontWeight:600,cursor:"pointer"},er={padding:"0.3rem 0.6rem",borderRadius:"4px",border:"1px solid var(--success)",backgroundColor:"transparent",color:"var(--success)",fontSize:"0.7rem",fontWeight:600,cursor:"pointer"},eo={flex:1,overflow:"hidden"};function en({node:e,onSelect:o,onCreate:n,onRename:i,onDelete:l,isReadOnly:a=!1}){let[s,d]=(0,r.useState)(!1),[c,p]=(0,r.useState)(!1),u="directory"===e.type,m={padding:"0.25rem 0.5rem",display:"flex",alignItems:"center",justifyContent:"space-between",fontSize:"0.8rem",fontFamily:"var(--font-mono), monospace",cursor:"pointer",color:"var(--foreground)",borderRadius:"4px",transition:"background 0.1s ease",userSelect:"none",backgroundColor:c?"rgba(255, 255, 255, 0.05)":"transparent",minWidth:0,width:"100%"},h={display:"flex",alignItems:"center",gap:"0.375rem",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},f={display:c?"flex":"none",alignItems:"center",gap:"0.25rem",paddingLeft:"0.5rem",flexShrink:0},g={background:"none",border:"none",padding:"2px 4px",cursor:"pointer",fontSize:"0.75rem",color:"var(--muted)",borderRadius:"3px",transition:"all 0.1s ease"},x=(e,t)=>{e.stopPropagation(),t()};return u?(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{onClick:()=>d(!s),style:m,onMouseEnter:()=>p(!0),onMouseLeave:()=>p(!1),children:[(0,t.jsxs)("div",{style:h,children:[(0,t.jsx)("span",{style:{color:"#eab308"},children:s?"📂":"📁"}),(0,t.jsx)("span",{style:{fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name})]}),!a&&(0,t.jsxs)("div",{style:f,children:[(0,t.jsx)("button",{onClick:t=>x(t,()=>n(e.path,"file")),style:g,title:"New File inside...",onMouseEnter:e=>e.currentTarget.style.color="var(--success)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted)",children:"📄+"}),(0,t.jsx)("button",{onClick:t=>x(t,()=>n(e.path,"directory")),style:g,title:"New Folder inside...",onMouseEnter:e=>e.currentTarget.style.color="var(--success)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted)",children:"📁+"}),(0,t.jsx)("button",{onClick:t=>x(t,()=>i(e.path)),style:g,title:"Rename...",onMouseEnter:e=>e.currentTarget.style.color="var(--primary)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted)",children:"✏️"}),(0,t.jsx)("button",{onClick:t=>x(t,()=>l(e.path)),style:g,title:"Delete Folder",onMouseEnter:e=>e.currentTarget.style.color="var(--danger)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted)",children:"🗑️"})]})]}),s&&e.children&&(0,t.jsx)("div",{style:{paddingLeft:"10px",borderLeft:"1px solid rgba(255, 255, 255, 0.05)",marginLeft:"8px"},children:e.children.map(e=>(0,t.jsx)(en,{node:e,onSelect:o,onCreate:n,onRename:i,onDelete:l,isReadOnly:a},e.path))})]}):(0,t.jsxs)("div",{onClick:()=>o(e.path),style:m,onMouseEnter:()=>p(!0),onMouseLeave:()=>p(!1),children:[(0,t.jsxs)("div",{style:h,children:[(0,t.jsx)("span",{style:{color:"#3b82f6"},children:"📄"}),(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name})]}),!a&&(0,t.jsxs)("div",{style:f,children:[(0,t.jsx)("button",{onClick:t=>x(t,()=>i(e.path)),style:g,title:"Rename...",onMouseEnter:e=>e.currentTarget.style.color="var(--primary)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted)",children:"✏️"}),(0,t.jsx)("button",{onClick:t=>x(t,()=>l(e.path)),style:g,title:"Delete File",onMouseEnter:e=>e.currentTarget.style.color="var(--danger)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted)",children:"🗑️"})]})]})}let ei={position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0,0,0,0.7)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3,backdropFilter:"blur(4px)"},el={width:"420px",backgroundColor:"#080c14",border:"1px solid var(--border)",borderRadius:"12px",padding:"1.5rem",boxShadow:"0 20px 25px -5px rgba(0, 0, 0, 0.8)"},ea={width:"100%",backgroundColor:"#05070a",border:"1px solid var(--border)",borderRadius:"6px",padding:"0.5rem 0.75rem",color:"#e2e8f0",fontSize:"0.85rem",outline:"none",marginBottom:"1.5rem",fontFamily:"var(--font-mono), monospace"},es={display:"flex",justifyContent:"flex-end",gap:"0.75rem"},ed={backgroundColor:"transparent",border:"1px solid var(--border)",color:"var(--foreground)",padding:"0.5rem 1rem",borderRadius:"6px",fontSize:"0.8rem",fontWeight:600,cursor:"pointer"},ec={backgroundColor:"var(--primary)",border:"none",color:"#ffffff",padding:"0.5rem 1rem",borderRadius:"6px",fontSize:"0.8rem",fontWeight:600,cursor:"pointer"},ep={background:"none",border:"none",color:"var(--muted)",cursor:"pointer",fontSize:"0.8rem",padding:"4px",borderRadius:"3px",transition:"all 0.1s ease"},eu={position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0,0,0,0.5)",display:"flex",alignItems:"flex-start",justifyContent:"center",zIndex:1100,paddingTop:"5vh",backdropFilter:"blur(2px)"},em={width:"600px",backgroundColor:"#080c14",border:"1px solid var(--border)",borderRadius:"8px",boxShadow:"0 10px 25px -5px rgba(0, 0, 0, 0.8)",display:"flex",flexDirection:"column",overflow:"hidden"},eh={width:"100%",backgroundColor:"#05070a",border:"none",borderBottom:"1px solid var(--border)",padding:"0.75rem 1rem",color:"#e2e8f0",fontSize:"0.9rem",outline:"none",fontFamily:"var(--font-mono), monospace"},ef={maxHeight:"300px",overflowY:"auto",padding:"0.25rem 0"},eg={display:"flex",alignItems:"center",padding:"0.5rem 1rem",cursor:"pointer",transition:"all 0.1s ease",justifyContent:"space-between"},ex={backgroundColor:"rgba(255,255,255,0.02)",border:"1px solid var(--border)",borderRadius:"6px",padding:"0.5rem 0.75rem",display:"flex",flexDirection:"column",gap:"0.25rem"},ey={fontSize:"0.6rem",color:"var(--muted)",textTransform:"uppercase"},eb={fontSize:"1.1rem",fontWeight:700,fontFamily:"var(--font-mono)"},ev={width:"100%",height:"6px",backgroundColor:"rgba(255,255,255,0.05)",borderRadius:"3px",overflow:"hidden"},ej={height:"100%",borderRadius:"3px",transition:"width 0.5s ease-out"},eC={padding:"0.35rem 1rem",borderBottom:"1px solid var(--border)",backgroundColor:"#030406",display:"flex",alignItems:"center",gap:"0.75rem",flexWrap:"nowrap",overflowX:"auto"},ew={padding:"0.15rem 0.45rem",borderRadius:"4px",border:"1px solid var(--border)",backgroundColor:"rgba(255,255,255,0.02)",color:"var(--muted)",fontSize:"0.7rem",fontFamily:"var(--font-mono)",fontWeight:600,cursor:"pointer",transition:"all 0.1s ease"},eS={backgroundColor:"#05070a",borderBottom:"1px solid var(--border)",padding:"0.25rem 0.75rem 0 0.75rem",display:"flex",alignItems:"center",justifyContent:"space-between"},ek={padding:"0.35rem 0.75rem",borderRadius:"6px 6px 0 0",border:"1px solid var(--border)",borderBottom:"none",display:"flex",alignItems:"center",gap:"0.5rem",cursor:"pointer",transition:"all 0.15s ease"},eR={display:"flex",alignItems:"center",backgroundColor:"rgba(0, 0, 0, 0.3)",border:"1px solid var(--border)",borderRadius:"6px",padding:"2px",marginRight:"0.5rem"},eT={padding:"0.2rem 0.5rem",borderRadius:"4px",border:"1px solid transparent",fontSize:"0.65rem",fontWeight:600,cursor:"pointer",transition:"all 0.15s ease",display:"flex",alignItems:"center",gap:"3px"};function ez({file:e,isStaged:o,onAction:n,onSelect:i,onIgnore:l,onDiscard:a}){let[s,d]=(0,r.useState)(!1),c="#eab308",p=o?e.indexStatus||"M":e.worktreeStatus||"M";return("??"===p||"?"===p)&&(c="#10b981"),"A"===p&&(c="#10b981"),"D"===p&&(c="#ef4444"),(0,t.jsxs)("div",{onClick:()=>i(e),onMouseEnter:()=>d(!0),onMouseLeave:()=>d(!1),style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0.35rem 0.5rem",borderRadius:"4px",backgroundColor:"rgba(255,255,255,0.02)",cursor:"pointer",fontSize:"0.75rem",fontFamily:"var(--font-mono)",position:"relative"},children:[(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",flex:1,marginRight:"0.5rem"},title:e.relativePath,children:e.name}),(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.35rem"},children:[s&&(0,t.jsxs)("div",{style:{display:"flex",gap:"0.25rem"},children:[!o&&l&&(0,t.jsx)("button",{onClick:t=>{t.stopPropagation(),l(e.relativePath)},title:"Add to .gitignore",style:{background:"none",border:"none",cursor:"pointer",fontSize:"0.65rem",color:"var(--muted)",padding:"1px 4px",borderRadius:"3px",backgroundColor:"rgba(255,255,255,0.05)"},onMouseEnter:e=>e.currentTarget.style.color="var(--danger)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted)",children:"🚫"}),!o&&a&&(0,t.jsx)("button",{onClick:t=>{t.stopPropagation(),a(e.relativePath)},title:"Discard changes",style:{background:"none",border:"none",cursor:"pointer",fontSize:"0.65rem",color:"var(--muted)",padding:"1px 4px",borderRadius:"3px",backgroundColor:"rgba(255,255,255,0.05)"},onMouseEnter:e=>e.currentTarget.style.color="var(--danger)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted)",children:"🗑️"}),(0,t.jsx)("button",{onClick:t=>{t.stopPropagation(),n(e.relativePath)},title:o?"Unstage Change":"Stage Change",style:{background:"none",border:"none",cursor:"pointer",fontSize:"0.65rem",color:"var(--muted)",padding:"1px 4px",borderRadius:"3px",backgroundColor:"rgba(255,255,255,0.05)"},onMouseEnter:e=>e.currentTarget.style.color="var(--foreground)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted)",children:o?"➖":"➕"})]}),(0,t.jsx)("span",{style:{fontSize:"0.6rem",padding:"0.1rem 0.3rem",borderRadius:"3px",backgroundColor:c+"22",color:c,fontWeight:700,width:"1.2rem",display:"inline-block",textAlign:"center"},children:p.substring(0,1)})]})]})}function eI({url:e}){let[o,n]=(0,r.useState)(e),[i,l]=(0,r.useState)(e),[a,s]=(0,r.useState)(0);(0,r.useEffect)(()=>{n(e),l(e)},[e]);let d=()=>{let e=o.trim();e&&!/^https?:\/\//i.test(e)&&(e="http://"+e),n(e),l(e)};return(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",width:"100%",height:"100%",backgroundColor:"#0b101b"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",padding:"0.5rem",backgroundColor:"#05070a",borderBottom:"1px solid var(--border)"},children:[(0,t.jsx)("button",{onClick:()=>{s(e=>e+1)},title:"Hard Reload Frame",style:{background:"none",border:"1px solid var(--border)",borderRadius:"4px",color:"var(--muted)",cursor:"pointer",fontSize:"0.85rem",padding:"0.25rem 0.5rem",display:"flex",alignItems:"center",backgroundColor:"rgba(255,255,255,0.02)"},onMouseEnter:e=>e.currentTarget.style.color="var(--foreground)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted)",children:"🔄"}),(0,t.jsx)("input",{type:"text",value:o,onChange:e=>n(e.target.value),onKeyDown:e=>{"Enter"===e.key&&d()},style:{flex:1,backgroundColor:"#080c14",border:"1px solid var(--border)",borderRadius:"4px",padding:"0.25rem 0.75rem",color:"#ffffff",fontSize:"0.8rem",outline:"none",fontFamily:"var(--font-mono), monospace"}}),(0,t.jsx)("button",{onClick:d,title:"Go to URL",style:{background:"none",border:"1px solid var(--border)",borderRadius:"4px",color:"var(--primary)",cursor:"pointer",fontSize:"0.8rem",padding:"0.25rem 0.5rem",display:"flex",alignItems:"center",backgroundColor:"rgba(255,255,255,0.02)"},children:"➔"}),(0,t.jsx)("button",{onClick:()=>{window.open(i,"_blank")},title:"Open in External Browser",style:{background:"none",border:"1px solid var(--border)",borderRadius:"4px",color:"var(--muted)",cursor:"pointer",fontSize:"0.85rem",padding:"0.25rem 0.5rem",display:"flex",alignItems:"center",backgroundColor:"rgba(255,255,255,0.02)"},onMouseEnter:e=>e.currentTarget.style.color="var(--foreground)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted)",children:"🌐"})]}),(0,t.jsx)("div",{style:{flex:1,position:"relative",width:"100%",height:"100%",backgroundColor:"#ffffff"},children:(0,t.jsx)("iframe",{src:i,style:{width:"100%",height:"100%",border:"none",backgroundColor:"#ffffff"},sandbox:"allow-scripts allow-same-origin allow-popups allow-forms"},a)})]})}function eP({content:e,filePath:r}){let o=e.split(/\r?\n/),n=0,i=0,l=0,a=0,s=o.map(e=>{let t="normal",r=e,o=null,s=null;if(e.startsWith("diff --git")||e.startsWith("index ")||e.startsWith("--- ")||e.startsWith("+++ "))t="header";else if(e.startsWith("@@")){t="hunk";let r=e.match(/^@@\s+-(\d+)(?:,\d+)?\s+\+(\d+)(?:,\d+)?\s+@@/);r&&(n=parseInt(r[1],10),i=parseInt(r[2],10))}else e.startsWith("+")?(t="addition",r=e.substring(1),s=i++,l++):e.startsWith("-")?(t="deletion",r=e.substring(1),o=n++,a++):(t="normal",e.startsWith(" ")&&(r=e.substring(1)),n>0&&(o=n++),i>0&&(s=i++));return{type:t,content:r,oldNum:o,newNum:s,raw:e}});return(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",backgroundColor:"#0b101b"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0.5rem 1rem",backgroundColor:"#05070a",borderBottom:"1px solid var(--border)"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[(0,t.jsx)("span",{style:{fontSize:"1rem"},children:"📄"}),(0,t.jsx)("span",{style:{fontWeight:600,fontSize:"0.85rem",color:"var(--foreground)",fontFamily:"var(--font-mono)"},children:r})]}),(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",fontSize:"0.75rem"},children:[l>0&&(0,t.jsxs)("span",{style:{color:"#4ade80",backgroundColor:"rgba(74, 222, 128, 0.1)",padding:"0.15rem 0.4rem",borderRadius:"4px",fontWeight:600},children:["+",l," lines"]}),a>0&&(0,t.jsxs)("span",{style:{color:"#f87171",backgroundColor:"rgba(248, 113, 113, 0.1)",padding:"0.15rem 0.4rem",borderRadius:"4px",fontWeight:600},children:["-",a," lines"]}),(0,t.jsxs)("span",{style:{color:"var(--muted)"},children:[s.length," lines in diff"]})]})]}),(0,t.jsx)("div",{style:{flex:1,overflow:"auto",padding:"0.5rem 0"},children:(0,t.jsx)("table",{style:{width:"100%",borderCollapse:"collapse",fontFamily:"var(--font-mono), monospace",fontSize:"0.8rem",lineHeight:1.5},children:(0,t.jsx)("tbody",{children:s.map((e,r)=>{if("header"===e.type)return(0,t.jsx)("tr",{style:{backgroundColor:"rgba(255,255,255,0.02)"},children:(0,t.jsx)("td",{colSpan:4,style:{color:"var(--muted)",padding:"0.25rem 1rem",fontSize:"0.75rem",borderBottom:"1px solid rgba(255,255,255,0.03)"},children:e.raw})},r);if("hunk"===e.type)return(0,t.jsxs)("tr",{style:{backgroundColor:"rgba(96, 165, 250, 0.05)"},children:[(0,t.jsx)("td",{colSpan:2,style:{width:"80px",textAlign:"center",color:"rgba(96, 165, 250, 0.6)",borderRight:"1px solid rgba(96, 165, 250, 0.15)",userSelect:"none",padding:"0.25rem 0",fontSize:"0.7rem"},children:"@@"}),(0,t.jsx)("td",{style:{width:"25px",borderRight:"1px solid rgba(255, 255, 255, 0.05)"}}),(0,t.jsx)("td",{style:{color:"#60a5fa",padding:"0.25rem 1rem",fontStyle:"italic",fontSize:"0.75rem"},children:e.raw})]},r);let o="transparent",n="var(--foreground)",i=" ",l="transparent";return"addition"===e.type?(o="rgba(74, 222, 128, 0.08)",n="#4ade80",i="+",l="rgba(74, 222, 128, 0.4)"):"deletion"===e.type&&(o="rgba(248, 113, 113, 0.08)",n="#f87171",i="-",l="rgba(248, 113, 113, 0.4)"),(0,t.jsxs)("tr",{style:{backgroundColor:o},children:[(0,t.jsx)("td",{style:{width:"40px",textAlign:"right",paddingRight:"0.75rem",color:"var(--muted)",opacity:e.oldNum?.6:.2,userSelect:"none",borderRight:"1px solid rgba(255, 255, 255, 0.05)",fontSize:"0.75rem"},children:e.oldNum||""}),(0,t.jsx)("td",{style:{width:"40px",textAlign:"right",paddingRight:"0.75rem",color:"var(--muted)",opacity:e.newNum?.6:.2,userSelect:"none",borderRight:"1px solid rgba(255, 255, 255, 0.05)",fontSize:"0.75rem"},children:e.newNum||""}),(0,t.jsx)("td",{style:{width:"25px",textAlign:"center",color:l,userSelect:"none",fontWeight:"bold",fontSize:"0.85rem",borderRight:"1px solid rgba(255, 255, 255, 0.05)"},children:i}),(0,t.jsx)("td",{style:{paddingLeft:"0.75rem",color:n,whiteSpace:"pre-wrap",wordBreak:"break-all"},children:e.content})]},r)})})})})]})}let eW={width:"100%",minHeight:"60px",backgroundColor:"#05070a",border:"1px solid var(--border)",borderRadius:"6px",padding:"0.5rem",color:"#e2e8f0",fontSize:"0.75rem",resize:"vertical",outline:"none",fontFamily:"var(--font-sans), sans-serif"},eL={width:"100%",padding:"0.35rem",backgroundColor:"var(--primary)",border:"none",color:"#ffffff",borderRadius:"6px",fontSize:"0.75rem",fontWeight:600,cursor:"pointer",transition:"opacity 0.1s ease"},eO={background:"none",border:"1px solid var(--border)",borderRadius:"4px",padding:"2px 5px",cursor:"pointer",fontSize:"0.7rem",display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(255,255,255,0.02)"},eF={background:"none",border:"none",cursor:"pointer",fontSize:"0.65rem",color:"var(--muted)",padding:"2px 4px",borderRadius:"3px",display:"flex",alignItems:"center",justifyContent:"center"};e.s(["default",0,function({sessionId:e,workspaceRoot:l,scopedDirs:a,onClose:s,sessions:d,onSwitchSession:c,onRefreshSessions:p,wsPort:u=3001}){let m=JSON.stringify(a),h=d.find(t=>t.id===e),[f,g]=(0,r.useState)(null),[x,y]=(0,r.useState)([]),[b,v]=(0,r.useState)(!1),j=async t=>{try{let r=await fetch("/api/sessions/scope",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:e,path:t,action:"add"})});if(r.ok)p&&p();else{let e=await r.json();alert(e.error||"Failed to add scoped folder.")}}catch(e){console.error(e),alert("Network error: failed to add scoped folder.")}},C=async t=>{try{let r=await fetch("/api/sessions/scope",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:e,path:t,action:"remove"})});if(r.ok)p&&p();else{let e=await r.json();alert(e.error||"Failed to remove scoped folder.")}}catch(e){console.error(e),alert("Network error: failed to remove scoped folder.")}},[w,S]=(0,r.useState)({}),[k,R]=(0,r.useState)({}),T=w[e]||[],z=k[e]||null,I=(0,r.useCallback)(t=>{S(r=>{let o=r[e]||[],n="function"==typeof t?t(o):t;return{...r,[e]:n}})},[e]),W=(0,r.useCallback)(t=>{R(r=>({...r,[e]:t}))},[e]),[eB,eD]=(0,r.useState)("edit"),[eE,eM]=(0,r.useState)(!0),[eN,eA]=(0,r.useState)("explorer"),[e$,eU]=(0,r.useState)("http://localhost:3000"),[eq,eH]=(0,r.useState)(!1),[eJ,eV]=(0,r.useState)(300),[eK,e_]=(0,r.useState)(!1),[eG,eQ]=(0,r.useState)(380),[eY,eX]=(0,r.useState)(!1),eZ=(0,r.useCallback)(e=>{e.preventDefault(),e_(!0)},[]),e0=(0,r.useCallback)(e=>{e.preventDefault(),eX(!0)},[]);(0,r.useEffect)(()=>{let e=e=>{if(eK){let t=document.getElementById("loom-ide-container");if(t){let r=t.getBoundingClientRect(),o=e.clientX-r.left-50;o>150&&o<600&&eV(o)}}if(eY){let t=document.getElementById("loom-ide-container");if(t){let r=t.getBoundingClientRect(),o=r.bottom-e.clientY;o>100&&o<r.height-150&&eQ(o)}}},t=()=>{e_(!1),eX(!1)};return(eK||eY)&&(window.addEventListener("mousemove",e),window.addEventListener("mouseup",t),document.body.style.cursor=eK?"col-resize":"row-resize",document.body.style.userSelect="none"),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",t),document.body.style.cursor="",document.body.style.userSelect=""}},[eK,eY]);let[e5,e1]=(0,r.useState)([]),[e2,e7]=(0,r.useState)(!1),[e8,e6]=(0,r.useState)(!1),[e4,e3]=(0,r.useState)(""),[e9,te]=(0,r.useState)({ahead:0,behind:0}),[tt,tr]=(0,r.useState)(""),[to,tn]=(0,r.useState)(null),[ti,tl]=(0,r.useState)(null),[ta,ts]=(0,r.useState)(""),[td,tc]=(0,r.useState)([]),[tp,tu]=(0,r.useState)(""),[tm,th]=(0,r.useState)(""),[tf,tg]=(0,r.useState)(null),tx=(0,r.useCallback)(async()=>{await new Promise(e=>setTimeout(e,0)),e6(!0);try{let e=await fetch(`/api/git?action=status&root=${encodeURIComponent(l)}`);if(e.ok){let t=await e.json();t.success&&(e7(t.isGit),e1(t.files||[]),e3(t.branch||""),te({ahead:t.ahead||0,behind:t.behind||0}))}}catch(e){console.error("Failed to load git status:",e)}finally{e6(!1)}},[l]);(0,r.useEffect)(()=>{setTimeout(()=>{tx()},0);let e=setInterval(tx,5e3);return()=>clearInterval(e)},[tx]);let ty=async e=>{try{(await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"stage",file:e,rootPath:l})})).ok&&await tx()}catch(e){console.error(e)}},tb=async e=>{try{(await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"ignore",file:e,rootPath:l})})).ok&&await tx()}catch(e){console.error(e)}},tv=async e=>{if(confirm(`Are you sure you want to discard changes in "${e}"? This action cannot be undone.`))try{(await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"discard",file:e,rootPath:l})})).ok&&await tx()}catch(e){console.error(e)}},tj=async()=>{try{(await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"stage",rootPath:l})})).ok&&await tx()}catch(e){console.error(e)}},tC=async e=>{try{(await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"unstage",file:e,rootPath:l})})).ok&&await tx()}catch(e){console.error(e)}},tw=async()=>{try{(await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"unstage",rootPath:l})})).ok&&await tx()}catch(e){console.error(e)}},tS=async()=>{if(tt.trim())try{let e=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"commit",message:tt,rootPath:l})});if(e.ok)tr(""),await tx();else{let t=await e.json();alert(t.error||"Git commit failed")}}catch(e){console.error(e)}},tk=async()=>{try{let e=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"pull",rootPath:l})});if(e.ok){let t=await e.json();alert(t.output||"Git pull completed successfully."),await tx()}else{let t=await e.json();alert(t.error||"Git pull failed")}}catch(e){console.error(e)}},tR=async()=>{try{let e=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"push",rootPath:l})});if(e.ok){let t=await e.json();alert(t.output||"Git push completed successfully."),await tx()}else{let t=await e.json();alert(t.error||"Git push failed")}}catch(e){console.error(e)}},tT=async e=>{try{let t=await fetch(`/api/git?action=diff&file=${encodeURIComponent(e.relativePath)}&root=${encodeURIComponent(l)}`);if(t.ok){let r=await t.json();if(r.success){let t=`diff:${e.relativePath}`;T.some(e=>e.path===t)||I(o=>[...o,{name:`Diff: ${e.name}`,path:t,content:r.diff,isModified:!1}]),W(t)}}}catch(e){console.error(e)}};(0,r.useEffect)(()=>{let t=async()=>{try{let t=await fetch(`/api/sessions?id=${e}`);if(t.ok){let e=await t.json();tn(e)}}catch(e){console.error("Failed to fetch session status:",e)}};t();let r=setInterval(t,3e3);return()=>clearInterval(r)},[e]),(0,r.useEffect)(()=>{let t=async()=>{try{let t=await fetch(`/api/sessions/stats?id=${e}`);if(t.ok){let e=await t.json();tl(e)}}catch(e){console.error("Failed to fetch container/process stats:",e)}};t();let r=setInterval(t,3e3);return()=>clearInterval(r)},[e]),(0,r.useEffect)(()=>{let e=localStorage.getItem("neural_loom_custom_commands");if(e)try{let t=JSON.parse(e);setTimeout(()=>{tc(t)},0)}catch{}},[]);let tz=e=>{tc(e),localStorage.setItem("neural_loom_custom_commands",JSON.stringify(e))},tI=async t=>{try{await fetch("/api/sessions/inject",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e,command:t})})}catch(e){console.error("Failed to inject command:",e)}},tP=to?.type?.includes("aider"),[tW,tL]=(0,r.useState)({type:null,targetPath:null,inputValue:"",error:null}),[tO,tF]=(0,r.useState)(!1),[tB,tD]=(0,r.useState)(""),[tE,tM]=(0,r.useState)([]),[tN,tA]=(0,r.useState)(0),t$=(0,r.useCallback)(async()=>{await new Promise(e=>setTimeout(e,0)),eH(!0);try{let e=a&&a.length>0?`&scoped=${encodeURIComponent(a.join(","))}`:"",t=await fetch(`/api/files?action=list&root=${encodeURIComponent(l)}${e}`);if(t.ok){let e=await t.json();e.success&&(g(e.workspace),y(e.scoped||[]))}}catch(e){console.error("Failed to load file explorer:",e)}finally{eH(!1)}},[l,m]);(0,r.useEffect)(()=>{t$();let e=setInterval(()=>{t$()},3e3);return()=>clearInterval(e)},[t$]);let tU=(e,t)=>{tL({type:"file"===t?"create-file":"create-folder",targetPath:e,inputValue:"",error:null})},tq=e=>{let t=e.split(/[/\\]/).pop()||"";tL({type:"rename",targetPath:e,inputValue:t,error:null})},tH=e=>{tL({type:"delete",targetPath:e,inputValue:"",error:null})},tJ=async e=>{if(e&&e.preventDefault(),tW.type&&tW.targetPath){tL(e=>({...e,error:null}));try{if("create-file"===tW.type||"create-folder"===tW.type){if(!tW.inputValue.trim())return void tL(e=>({...e,error:"Name cannot be empty"}));let e=`${tW.targetPath}/${tW.inputValue.trim()}`,t="create-file"===tW.type?"file":"directory",r=await fetch("/api/files",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"create",path:e,type:t})});if(r.ok){let o=await r.json();o.success?(tL({type:null,targetPath:null,inputValue:"",error:null}),await t$(),"file"===t&&await tK(e)):tL(e=>({...e,error:o.error||"Failed to create item"}))}else{let e=await r.json();tL(t=>({...t,error:e.error||"Failed to create item"}))}}if("rename"===tW.type){if(!tW.inputValue.trim())return void tL(e=>({...e,error:"Name cannot be empty"}));let e=tW.targetPath.replace(/\\/g,"/"),t=e.substring(0,e.lastIndexOf("/")),r=t?`${t}/${tW.inputValue.trim()}`:tW.inputValue.trim(),o=await fetch("/api/files",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"rename",oldPath:tW.targetPath,newPath:r})});if(o.ok){let e=await o.json();e.success?(I(e=>e.map(e=>e.path===tW.targetPath?{...e,path:r,name:tW.inputValue.trim()}:e)),z===tW.targetPath&&W(r),tL({type:null,targetPath:null,inputValue:"",error:null}),await t$()):tL(t=>({...t,error:e.error||"Failed to rename item"}))}else{let e=await o.json();tL(t=>({...t,error:e.error||"Failed to rename item"}))}}if("delete"===tW.type){let e=await fetch("/api/files",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"delete",path:tW.targetPath})});if(e.ok){let t=await e.json();t.success?(t_(tW.targetPath),tL({type:null,targetPath:null,inputValue:"",error:null}),await t$()):tL(e=>({...e,error:t.error||"Failed to delete item"}))}else{let t=await e.json();tL(e=>({...e,error:t.error||"Failed to delete item"}))}}}catch(e){console.error("File operation failed:",e),tL(e=>({...e,error:"An unexpected error occurred"}))}}},tV=(0,r.useCallback)(async()=>{try{let e=a&&a.length>0?`&scoped=${encodeURIComponent(a.join(","))}`:"",t=await fetch(`/api/files?action=flat_list&root=${encodeURIComponent(l)}${e}`);if(t.ok){let e=await t.json();e.success&&e.files&&tM(e.files)}}catch(e){console.error("Failed to load flat files list:",e)}},[l,m]);(0,r.useEffect)(()=>{tO&&setTimeout(()=>{tD(""),tA(0),tV()},0)},[tO,tV]);let tK=async e=>{if(T.find(t=>t.path===e))return void W(e);try{let t=await fetch(`/api/files?action=read&path=${encodeURIComponent(e)}`);if(t.ok){let r=await t.json();if(r.success){let t={name:e.split(/[/\\]/).pop()||"Untitled",path:e,content:r.content,isModified:!1};I([...T,t]),W(e)}}}catch(t){console.error(`Failed to read file ${e}:`,t)}},t_=e=>{let t=T.filter(t=>t.path!==e);I(t),z===e&&W(t.length>0?t[t.length-1].path:null)},tG=e=>{let t=e.trim();if(!t)return;let r=`browser:${t}`;T.find(e=>e.path===r)||I(e=>[...e,{name:`Browser: ${t.replace(/^https?:\/\//,"")}`,path:r,content:t,isModified:!1}]),W(r)},tQ=T.find(e=>e.path===z),tY=!!tQ&&tQ.path.toLowerCase().endsWith(".md"),tX=tY?eB:"edit",tZ=e5.filter(e=>e.indexStatus&&" "!==e.indexStatus&&"?"!==e.indexStatus),t0=e5.filter(e=>e.worktreeStatus&&" "!==e.worktreeStatus||"??"===e.status),t5=e=>{z&&I(T.map(t=>t.path===z?{...t,content:e,isModified:!0}:t))},t1=(0,r.useCallback)(async()=>{if(!(!tQ||tQ.path.startsWith("diff:")||tQ.path.startsWith("browser:")))try{(await fetch("/api/files",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"write",path:tQ.path,content:tQ.content})})).ok&&I(e=>e.map(e=>e.path===z?{...e,isModified:!1}:e))}catch(e){console.error(`Failed to save file ${tQ.path}:`,e)}},[tQ,z,I]);(0,r.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&"s"===e.key&&(e.preventDefault(),t1()),(e.ctrlKey||e.metaKey)&&"p"===e.key&&(e.preventDefault(),tF(e=>!e))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[t1]);let t2=tE.filter(e=>e.name.toLowerCase().includes(tB.toLowerCase())||e.relativePath.toLowerCase().includes(tB.toLowerCase())).slice(0,10);return(0,t.jsxs)("div",{id:"loom-ide-container",style:L,children:[(0,t.jsxs)("div",{style:O,children:[(0,t.jsxs)("div",{style:F,children:[(0,t.jsx)("div",{onClick:()=>{"explorer"===eN?eM(!eE):(eA("explorer"),eM(!0))},style:{...B,backgroundColor:"explorer"===eN&&eE?"rgba(255,255,255,0.08)":"transparent",borderLeft:"explorer"===eN&&eE?"2px solid var(--primary)":"2px solid transparent"},title:"File Explorer (Ctrl+P to search files)",children:"📁"}),(0,t.jsx)("div",{onClick:()=>{"git"===eN?eM(!eE):(eA("git"),eM(!0))},style:{...B,backgroundColor:"git"===eN&&eE?"rgba(255,255,255,0.08)":"transparent",borderLeft:"git"===eN&&eE?"2px solid var(--primary)":"2px solid transparent"},title:"Source Control (Git Changes)",children:"🌿"}),(0,t.jsx)("div",{onClick:()=>{"analytics"===eN?eM(!eE):(eA("analytics"),eM(!0))},style:{...B,backgroundColor:"analytics"===eN&&eE?"rgba(255,255,255,0.08)":"transparent",borderLeft:"analytics"===eN&&eE?"2px solid var(--primary)":"2px solid transparent"},title:"Token Usage & Cost Analytics",children:"📊"}),(0,t.jsx)("div",{onClick:()=>{"auditor"===eN?eM(!eE):(eA("auditor"),eM(!0))},style:{...B,backgroundColor:"auditor"===eN&&eE?"rgba(255,255,255,0.08)":"transparent",borderLeft:"auditor"===eN&&eE?"2px solid var(--primary)":"2px solid transparent"},title:"Session Log Auditor & Search",children:"🔍"}),(0,t.jsx)("div",{onClick:()=>{"browser"===eN?eM(!eE):(eA("browser"),eM(!0))},style:{...B,backgroundColor:"browser"===eN&&eE?"rgba(255,255,255,0.08)":"transparent",borderLeft:"browser"===eN&&eE?"2px solid var(--primary)":"2px solid transparent"},title:"Local Web Browser Test Preview",children:"🌐"}),(0,t.jsx)("div",{onClick:()=>{"database"===eN?eM(!eE):(eA("database"),eM(!0))},style:{...B,backgroundColor:"database"===eN&&eE?"rgba(255,255,255,0.08)":"transparent",borderLeft:"database"===eN&&eE?"2px solid var(--primary)":"2px solid transparent"},title:"Database Explorer & SQL Client",children:"🗄️"})]}),(0,t.jsx)("div",{onClick:s,style:{...B,color:"var(--danger)",fontSize:"1rem"},title:"Exit Session Layout",children:"✖"})]}),eE&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{...D,width:`${eJ}px`,borderRight:"none"},children:[(0,t.jsxs)("div",{style:E,children:[(0,t.jsxs)("span",{style:{fontWeight:700,fontSize:"0.75rem",textTransform:"uppercase",letterSpacing:"0.05em"},children:["explorer"===eN&&"Workspace Explorer","git"===eN&&"Source Control","analytics"===eN&&"Telemetry & Cost","auditor"===eN&&"Session Auditor","browser"===eN&&"Browser Preview","database"===eN&&"Database Explorer"]}),"explorer"===eN&&(0,t.jsxs)("div",{style:{display:"flex",gap:"0.25rem"},children:[f&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{onClick:()=>tU(f.path,"file"),style:ep,title:"New File at Root...",children:"📄+"}),(0,t.jsx)("button",{onClick:()=>tU(f.path,"directory"),style:ep,title:"New Folder at Root...",children:"📁+"})]}),(0,t.jsx)("button",{onClick:t$,disabled:eq,style:ep,title:"Refresh tree",children:"🔄"})]}),"git"===eN&&(0,t.jsx)("button",{onClick:tx,disabled:e8,style:ep,title:"Refresh git status",children:"🔄"})]}),(0,t.jsxs)("div",{style:M,children:["explorer"===eN&&(0,t.jsxs)(t.Fragment,{children:[f?(0,t.jsxs)("div",{style:{marginBottom:"1.5rem"},children:[(0,t.jsxs)("div",{style:N,children:["💼 ",f.name," ",(0,t.jsx)("span",{style:A,title:f.path,children:"root"})]}),(0,t.jsx)("div",{style:{padding:"0.25rem 0.5rem"},children:f.tree.map(e=>(0,t.jsx)(en,{node:e,onSelect:tK,onCreate:tU,onRename:tq,onDelete:tH,isReadOnly:!1},e.path))})]}):(0,t.jsx)("div",{style:{padding:"1rem",color:"var(--muted)",fontSize:"0.8rem"},children:"Scanning Workspace directory..."}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{...N,borderTop:"1px solid var(--border)",paddingTop:"1rem"},children:[(0,t.jsxs)("span",{children:["🔍 Scoped Folders (",x.length,")"]}),(0,t.jsx)("button",{onClick:()=>v(!0),style:ep,title:"Add Scoped Folder...",children:"➕"})]}),x.length>0?x.map(e=>(0,t.jsxs)("div",{style:{marginTop:"0.75rem",padding:"0 0.5rem"},children:[(0,t.jsxs)("div",{style:{...$,display:"flex",gap:"0.25rem",color:"#a855f7",fontSize:"0.75rem",fontWeight:700,padding:"0.25rem",justifyContent:"space-between",alignItems:"center"},title:e.path,children:[(0,t.jsxs)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",flex:1},children:["🔗 ",e.name,"/"]}),(0,t.jsx)("button",{onClick:()=>C(e.path),style:{background:"none",border:"none",color:"var(--danger)",cursor:"pointer",fontSize:"0.75rem",padding:"0 0.25rem"},title:"Remove Scoped Folder",children:"✖"})]}),(0,t.jsx)("div",{style:{paddingLeft:"0.25rem"},children:e.tree.map(e=>(0,t.jsx)(en,{node:e,onSelect:tK,onCreate:tU,onRename:tq,onDelete:tH,isReadOnly:!0},e.path))})]},e.path)):(0,t.jsx)("div",{style:{padding:"0.5rem 1rem",color:"var(--muted)",fontSize:"0.75rem",fontStyle:"italic"},children:"No extra scoped folders. Click [+] to mount a folder."})]})]}),"git"===eN&&(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",overflow:"hidden"},children:[(0,t.jsxs)("div",{style:{padding:"0.5rem 1rem",borderBottom:"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"space-between",backgroundColor:"rgba(255,255,255,0.01)",flexShrink:0},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.4rem",fontSize:"0.75rem",fontWeight:600,overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis",flex:1},children:[(0,t.jsx)("span",{style:{color:"var(--primary)",flexShrink:0},children:"🌿"}),(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:e4,children:e2?e4||"HEAD detached":"No Repository"})]}),e2&&(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.35rem",flexShrink:0},children:[e9.ahead>0&&(0,t.jsxs)("span",{style:{fontSize:"0.65rem",color:"#10b981",fontWeight:700},title:"Commits ahead of remote",children:["↑",e9.ahead]}),e9.behind>0&&(0,t.jsxs)("span",{style:{fontSize:"0.65rem",color:"#ef4444",fontWeight:700},title:"Commits behind remote",children:["↓",e9.behind]}),(0,t.jsx)("button",{onClick:tk,title:"Pull changes",style:eO,onMouseEnter:e=>e.currentTarget.style.backgroundColor="rgba(255,255,255,0.08)",onMouseLeave:e=>e.currentTarget.style.backgroundColor="rgba(255,255,255,0.02)",children:"📥"}),(0,t.jsx)("button",{onClick:tR,title:"Push commits",style:eO,onMouseEnter:e=>e.currentTarget.style.backgroundColor="rgba(255,255,255,0.08)",onMouseLeave:e=>e.currentTarget.style.backgroundColor="rgba(255,255,255,0.02)",children:"📤"})]})]}),e2?(0,t.jsxs)("div",{style:{flex:1,overflowY:"auto",padding:"0.5rem 1rem",display:"flex",flexDirection:"column",gap:"1rem"},children:[(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.4rem"},children:[(0,t.jsx)("textarea",{value:tt,onChange:e=>tr(e.target.value),placeholder:"Commit message (Ctrl+Enter to commit)...",style:eW,onKeyDown:e=>{"Enter"===e.key&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),tS())}}),(0,t.jsx)("button",{onClick:tS,disabled:0===e5.length,style:{...eL,opacity:e5.length>0?1:.5,cursor:e5.length>0?"pointer":"not-allowed"},children:"✓ Commit"})]}),tZ.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.35rem"},children:[(0,t.jsxs)("span",{style:{fontSize:"0.7rem",fontWeight:700,textTransform:"uppercase",color:"var(--muted)"},children:["Staged Changes (",tZ.length,")"]}),(0,t.jsx)("button",{onClick:()=>tw(),title:"Unstage All",style:eF,children:"➖"})]}),(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"},children:tZ.map(e=>(0,t.jsx)(ez,{file:e,isStaged:!0,onAction:tC,onSelect:tT},e.relativePath))})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.35rem"},children:[(0,t.jsxs)("span",{style:{fontSize:"0.7rem",fontWeight:700,textTransform:"uppercase",color:"var(--muted)"},children:["Changes (",t0.length,")"]}),t0.length>0&&(0,t.jsx)("button",{onClick:()=>tj(),title:"Stage All",style:eF,children:"➕"})]}),0===t0.length&&0===tZ.length?(0,t.jsx)("div",{style:{color:"var(--success)",fontSize:"0.75rem",padding:"0.5rem 0"},children:"✔ Workspace clean."}):0===t0.length?(0,t.jsx)("div",{style:{color:"var(--muted)",fontSize:"0.7rem",fontStyle:"italic",padding:"0.25rem 0"},children:"No unstaged changes."}):(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"},children:t0.map(e=>(0,t.jsx)(ez,{file:e,isStaged:!1,onAction:ty,onSelect:tT,onIgnore:tb,onDiscard:tv},e.relativePath))})]})]}):(0,t.jsx)("div",{style:{padding:"1rem",color:"var(--muted)",fontSize:"0.75rem",fontStyle:"italic"},children:"Not a git repository."})]}),"browser"===eN&&(0,t.jsxs)("div",{style:{padding:"1rem",display:"flex",flexDirection:"column",gap:"1rem"},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{style:{fontSize:"0.7rem",fontWeight:700,textTransform:"uppercase",color:"var(--muted)",display:"block",marginBottom:"0.4rem"},children:"Url Address"}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.25rem"},children:[(0,t.jsx)("input",{type:"text",value:e$,onChange:e=>eU(e.target.value),placeholder:"http://localhost:3000",style:{flex:1,backgroundColor:"#05070a",border:"1px solid var(--border)",borderRadius:"4px",padding:"0.35rem 0.5rem",color:"#ffffff",fontSize:"0.75rem",outline:"none"},onKeyDown:e=>{"Enter"===e.key&&tG(e$)}}),(0,t.jsx)("button",{onClick:()=>tG(e$),style:{backgroundColor:"var(--primary)",border:"none",color:"#ffffff",padding:"0.35rem 0.75rem",borderRadius:"4px",fontSize:"0.75rem",fontWeight:600,cursor:"pointer"},children:"Go"})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{style:{fontSize:"0.7rem",fontWeight:700,textTransform:"uppercase",color:"var(--muted)",display:"block",marginBottom:"0.5rem"},children:"Quick Launch Ports"}),(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:"0.35rem"},children:[{label:"Next.js App (3000)",url:"http://localhost:3000"},{label:"WebSocket Gateway (3001)",url:"http://localhost:3001"},{label:"Vite Server (5173)",url:"http://localhost:5173"}].map((e,r)=>(0,t.jsxs)("div",{onClick:()=>{eU(e.url),tG(e.url)},style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0.5rem 0.75rem",borderRadius:"4px",backgroundColor:"rgba(255,255,255,0.02)",border:"1px solid var(--border)",cursor:"pointer",fontSize:"0.75rem",transition:"all 0.15s ease"},onMouseEnter:e=>e.currentTarget.style.backgroundColor="rgba(255,255,255,0.06)",onMouseLeave:e=>e.currentTarget.style.backgroundColor="rgba(255,255,255,0.02)",children:[(0,t.jsx)("span",{style:{color:"var(--foreground)"},children:e.label}),(0,t.jsx)("span",{style:{color:"var(--primary)",fontSize:"0.8rem"},children:"🌐➔"})]},r))})]}),(0,t.jsxs)("div",{style:{marginTop:"auto",padding:"0.5rem",borderRadius:"6px",backgroundColor:"rgba(234, 179, 8, 0.05)",border:"1px solid rgba(234, 179, 8, 0.15)",fontSize:"0.65rem",color:"var(--muted)",lineHeight:"1.4"},children:[(0,t.jsx)("span",{style:{color:"#eab308",fontWeight:700},children:"⚠️ Iframe CSP Note"}),": Some public websites (e.g. Google, GitHub) block loading inside frames via security headers. Use this tab primarily to preview and debug local development webservers."]})]}),"analytics"===eN&&(0,t.jsxs)("div",{style:{padding:"0.5rem 1rem",display:"flex",flexDirection:"column",gap:"1.25rem"},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:"0.75rem",fontWeight:700,textTransform:"uppercase",color:"var(--muted)",marginBottom:"0.5rem"},children:"Token Usage"}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.5rem"},children:[(0,t.jsxs)("div",{style:ex,children:[(0,t.jsx)("div",{style:ey,children:"Input"}),(0,t.jsx)("div",{style:eb,children:(to?.tokenUsage?.input??0).toLocaleString()})]}),(0,t.jsxs)("div",{style:ex,children:[(0,t.jsx)("div",{style:ey,children:"Output"}),(0,t.jsx)("div",{style:eb,children:(to?.tokenUsage?.output??0).toLocaleString()})]}),(0,t.jsxs)("div",{style:{...ex,gridColumn:"span 2"},children:[(0,t.jsx)("div",{style:ey,children:"Cost"}),(0,t.jsxs)("div",{style:{...eb,color:"#10b981",fontSize:"1.25rem"},children:["$",(to?.tokenUsage?.cost??0).toFixed(4)]})]})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:"0.75rem",fontWeight:700,textTransform:"uppercase",color:"var(--muted)",marginBottom:"0.5rem"},children:"Resource Telemetry"}),(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"},children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",fontSize:"0.7rem",marginBottom:"0.25rem"},children:[(0,t.jsx)("span",{children:"CPU Usage"}),(0,t.jsx)("span",{style:{fontWeight:600,color:"var(--primary)"},children:ti?.cpu??"0.0%"})]}),(0,t.jsx)("div",{style:ev,children:(0,t.jsx)("div",{style:{...ej,width:ti?.cpu||"0%",backgroundColor:"var(--primary)"}})})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",fontSize:"0.7rem",marginBottom:"0.25rem"},children:[(0,t.jsx)("span",{children:"Memory Usage"}),(0,t.jsx)("span",{style:{fontWeight:600,color:"#eab308"},children:ti?.memory??"0.0MiB"})]}),(0,t.jsx)("div",{style:ev,children:(0,t.jsx)("div",{style:{...ej,width:ti?.memoryPercent||"0%",backgroundColor:"#eab308"}})})]}),(0,t.jsx)("div",{style:{fontSize:"0.6rem",color:"var(--muted)",marginTop:"0.25rem",fontStyle:"italic"},children:ti?.type?.includes("docker")?"🐳 Docker container statistics":"💻 Local process statistics"})]})]})]}),"auditor"===eN&&(0,t.jsxs)("div",{style:{padding:"0.5rem 1rem",display:"flex",flexDirection:"column",gap:"1rem",height:"100%"},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:"0.25rem"},children:[(0,t.jsx)("input",{type:"text",placeholder:"Search logs...",value:ta,onChange:e=>ts(e.target.value),style:{flex:1,backgroundColor:"#05070a",border:"1px solid var(--border)",borderRadius:"4px",padding:"0.25rem 0.5rem",color:"#ffffff",fontSize:"0.75rem",outline:"none"}}),(0,t.jsx)("button",{onClick:()=>{if(!to?.logs)return;let t=new Blob([to.logs.join("").replace(/\x1b\[[0-9;]*m/g,"")],{type:"text/plain;charset=utf-8"}),r=URL.createObjectURL(t),o=document.createElement("a");o.href=r,o.download=`session-${e}-logs.txt`,o.click(),URL.revokeObjectURL(r)},style:{backgroundColor:"rgba(59, 130, 246, 0.15)",border:"1px solid #3b82f6",color:"#3b82f6",padding:"0.25rem 0.5rem",borderRadius:"4px",fontSize:"0.7rem",fontWeight:600,cursor:"pointer"},children:"Export"})]}),(0,t.jsx)("div",{style:{height:"220px",overflowY:"auto",backgroundColor:"#05070a",border:"1px solid var(--border)",borderRadius:"6px",padding:"0.5rem",fontFamily:"var(--font-mono)",fontSize:"0.7rem",lineHeight:"1.4",whiteSpace:"pre-wrap",color:"#cbd5e1"},children:(()=>{if(!to?.logs||0===to.logs.length)return(0,t.jsx)("div",{style:{color:"var(--muted)",fontStyle:"italic",textAlign:"center"},children:"No logs captured."});let e=to.logs.join("").replace(/\x1b\[[0-9;]*m/g,"").split(/\r?\n/),r=ta.trim()?e.filter(e=>e.toLowerCase().includes(ta.toLowerCase())):e;return 0===r.length?(0,t.jsx)("div",{style:{color:"var(--muted)",fontStyle:"italic",textAlign:"center"},children:"No matches."}):r.map((e,r)=>{if(!ta.trim())return(0,t.jsx)("div",{children:e},r);let o=e.split(RegExp(`(${ta})`,"gi"));return(0,t.jsx)("div",{children:o.map((e,r)=>e.toLowerCase()===ta.toLowerCase()?(0,t.jsx)("span",{style:{backgroundColor:"#eab308",color:"#000000",fontWeight:600},children:e},r):e)},r)})})()}),(0,t.jsxs)("div",{style:{borderTop:"1px solid var(--border)",paddingTop:"0.75rem"},children:[(0,t.jsx)("div",{style:{fontSize:"0.75rem",fontWeight:700,color:"var(--muted)",marginBottom:"0.5rem"},children:"Custom Buttons"}),(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.35rem"},children:[(0,t.jsx)("input",{type:"text",placeholder:"Button Name (e.g. /undo)",value:tp,onChange:e=>tu(e.target.value),style:{backgroundColor:"#05070a",border:"1px solid var(--border)",borderRadius:"4px",padding:"0.25rem 0.5rem",color:"#ffffff",fontSize:"0.7rem",outline:"none"}}),(0,t.jsx)("input",{type:"text",placeholder:"Injection Command",value:tm,onChange:e=>th(e.target.value),style:{backgroundColor:"#05070a",border:"1px solid var(--border)",borderRadius:"4px",padding:"0.25rem 0.5rem",color:"#ffffff",fontSize:"0.7rem",outline:"none"}}),(0,t.jsx)("button",{onClick:()=>{tp.trim()&&tm.trim()&&(tz([...td,{name:tp.trim(),command:tm.trim()}]),tu(""),th(""))},style:{backgroundColor:"rgba(168, 85, 247, 0.15)",border:"1px solid #a855f7",color:"#c084fc",padding:"0.3rem",borderRadius:"4px",fontSize:"0.7rem",fontWeight:600,cursor:"pointer"},children:"+ Add Button"}),td.length>0&&(0,t.jsx)("div",{style:{marginTop:"0.25rem",maxHeight:"60px",overflowY:"auto"},children:td.map((e,r)=>(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",fontSize:"0.65rem",backgroundColor:"rgba(255,255,255,0.02)",padding:"0.1rem 0.25rem",borderRadius:"3px",marginTop:"0.15rem"},children:[(0,t.jsx)("span",{style:{color:"#c084fc"},children:e.name}),(0,t.jsx)("span",{onClick:()=>{tz(td.filter((e,t)=>t!==r))},style:{color:"var(--danger)",cursor:"pointer"},children:"✖"})]},r))})]})]})]}),"database"===eN&&(0,t.jsx)(P,{workspaceRoot:l})]})]}),(0,t.jsx)("div",{onMouseDown:eZ,style:{width:"4px",cursor:"col-resize",backgroundColor:eK?"var(--primary)":"var(--border)",transition:"background-color 0.15s ease",zIndex:10,alignSelf:"stretch"},onMouseEnter:e=>{eK||(e.currentTarget.style.backgroundColor="var(--border-focus)")},onMouseLeave:e=>{eK||(e.currentTarget.style.backgroundColor="var(--border)")},title:"Drag to resize sidebar"})]}),(0,t.jsxs)("div",{style:U,children:[(0,t.jsx)("div",{style:eS,children:(0,t.jsx)("div",{style:{display:"flex",gap:"0.25rem",overflowX:"auto"},children:d.map(r=>{let o=r.id===e,n="running"===r.status?"#10b981":"rgba(255,255,255,0.2)";return(0,t.jsxs)("div",{onClick:()=>{tf===r.id&&tg(null),c(r.id)},style:{...ek,backgroundColor:o?"#0b101b":"rgba(8,12,20,0.6)",borderColor:o?"var(--border-focus)":"var(--border)",color:o?"var(--foreground)":"var(--muted)"},children:[(0,t.jsx)("span",{style:{width:"6px",height:"6px",borderRadius:"50%",backgroundColor:n,display:"inline-block"}}),(0,t.jsx)("span",{style:{fontSize:"0.75rem",fontWeight:o?600:500},children:r.name}),(0,t.jsx)("span",{style:{fontSize:"0.6rem",color:"var(--muted)",backgroundColor:"rgba(255,255,255,0.05)",padding:"1px 4px",borderRadius:"3px"},children:r.type.replace("claude-","").replace("aider-","")})]},r.id)})})}),(0,t.jsxs)("div",{style:{...q,borderBottom:"none"},children:[(0,t.jsxs)("div",{style:H,children:[(0,t.jsx)("div",{style:J,children:T.map(e=>(0,t.jsxs)("div",{style:{...V,backgroundColor:z===e.path?"#0b101b":"rgba(8,12,20,0.4)",borderColor:z===e.path?"var(--border-focus)":"transparent",color:z===e.path?"var(--foreground)":"var(--muted)"},onClick:()=>W(e.path),children:[(0,t.jsxs)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[e.name," ",e.isModified&&(0,t.jsx)("span",{style:_,children:"●"})]}),(0,t.jsx)("span",{onClick:t=>{t.stopPropagation(),t_(e.path)},style:K,children:"✖"})]},e.path))}),tQ&&!tQ.path.startsWith("diff:")&&!tQ.path.startsWith("browser:")&&(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[tY&&(0,t.jsxs)("div",{style:eR,children:[(0,t.jsx)("button",{onClick:()=>eD("edit"),style:{...eT,backgroundColor:"edit"===tX?"rgba(255,255,255,0.08)":"transparent",color:"edit"===tX?"var(--foreground)":"var(--muted)",borderColor:"edit"===tX?"var(--border-focus)":"transparent"},title:"Edit file",children:"✏️ Edit"}),(0,t.jsx)("button",{onClick:()=>eD("split"),style:{...eT,backgroundColor:"split"===tX?"rgba(255,255,255,0.08)":"transparent",color:"split"===tX?"var(--foreground)":"var(--muted)",borderColor:"split"===tX?"var(--border-focus)":"transparent"},title:"Split editor & preview",children:"🥞 Split"}),(0,t.jsx)("button",{onClick:()=>eD("preview"),style:{...eT,backgroundColor:"preview"===tX?"rgba(255,255,255,0.08)":"transparent",color:"preview"===tX?"var(--foreground)":"var(--muted)",borderColor:"preview"===tX?"var(--border-focus)":"transparent"},title:"Preview rendered document",children:"👁️ Preview"})]}),(0,t.jsx)("button",{onClick:t1,disabled:!tQ.isModified,style:{...G,opacity:tQ.isModified?1:.5,cursor:tQ.isModified?"pointer":"not-allowed"},children:"💾 Save (Ctrl+S)"})]})]}),(0,t.jsx)("div",{style:Q,children:tQ?tQ.path.startsWith("browser:")?(0,t.jsx)(eI,{url:tQ.content}):tQ.path.startsWith("diff:")?(0,t.jsx)(eP,{content:tQ.content,filePath:tQ.path.substring(5)}):tY?"preview"===tX?(0,t.jsx)("div",{style:{height:"100%",overflow:"hidden"},children:(0,t.jsx)(i,{content:tQ.content})}):"split"===tX?(0,t.jsxs)("div",{style:{display:"flex",width:"100%",height:"100%",overflow:"hidden"},children:[(0,t.jsx)("div",{style:{flex:1,height:"100%"},children:(0,t.jsx)("textarea",{value:tQ.content,onChange:e=>t5(e.target.value),style:Y,spellCheck:!1})}),(0,t.jsx)("div",{style:{flex:1,height:"100%",overflow:"hidden"},children:(0,t.jsx)(i,{content:tQ.content})})]}):(0,t.jsx)("textarea",{value:tQ.content,onChange:e=>t5(e.target.value),style:Y,spellCheck:!1}):(0,t.jsx)("textarea",{value:tQ.content,onChange:e=>t5(e.target.value),style:Y,spellCheck:!1}):(0,t.jsxs)("div",{style:X,children:[(0,t.jsx)("div",{style:{fontSize:"2rem",marginBottom:"1rem"},children:"💻"}),(0,t.jsx)("h4",{style:{margin:0,fontWeight:600},children:"NeuralLoom Workspace Editor"}),(0,t.jsx)("p",{style:{margin:"0.5rem 0 0 0",color:"var(--muted)",fontSize:"0.8rem"},children:"Select files from the left explorer panel to view and edit. Use Ctrl+S to save changes."}),(0,t.jsxs)("p",{style:{margin:"0.5rem 0 0 0",color:"var(--muted)",fontSize:"0.75rem",fontStyle:"italic"},children:["Press ",(0,t.jsx)("kbd",{style:{background:"rgba(255,255,255,0.1)",padding:"2px 4px",borderRadius:"3px"},children:"Ctrl+P"})," to search files."]})]})})]}),(0,t.jsx)("div",{onMouseDown:e0,style:{height:"4px",cursor:"row-resize",backgroundColor:eY?"var(--primary)":"var(--border)",transition:"background-color 0.15s ease",zIndex:10,width:"100%"},onMouseEnter:e=>{eY||(e.currentTarget.style.backgroundColor="var(--border-focus)")},onMouseLeave:e=>{eY||(e.currentTarget.style.backgroundColor="var(--border)")},title:"Drag to resize console"}),(0,t.jsxs)("div",{style:{...Z,flex:"none",height:`${eG}px`},children:[(0,t.jsxs)("div",{style:ee,children:[(0,t.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:"0.5rem",fontWeight:600,fontSize:"0.8rem"},children:["🖥️ Session Console Bridge ",tf&&"(Split View Active)"]}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center"},children:[h?.status==="stopped"&&(0,t.jsx)("button",{onClick:async()=>{try{let t=await fetch("/api/sessions/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e})});if(t.ok)p&&p();else{let e=await t.json();alert(e.error||"Failed to restart session.")}}catch(e){console.error("Failed to restart session:",e),alert("Network error: failed to restart session.")}},style:{padding:"0.3rem 0.6rem",borderRadius:"4px",border:"1px solid #eab308",backgroundColor:"rgba(234, 179, 8, 0.15)",color:"#eab308",fontSize:"0.7rem",fontWeight:600,cursor:"pointer",boxShadow:"0 0 8px rgba(234, 179, 8, 0.2)"},title:"Restart the stopped session process runner",children:"⚡ Restart Session"}),(0,t.jsxs)("select",{onChange:e=>{tg(e.target.value||null)},value:tf||"",style:{backgroundColor:"#080c14",border:"1px solid var(--border)",borderRadius:"4px",padding:"0.2rem 0.5rem",color:"var(--foreground)",fontSize:"0.7rem",outline:"none",cursor:"pointer"},children:[(0,t.jsx)("option",{value:"",children:"🖥️ Single Terminal"}),d.filter(t=>t.id!==e&&"running"===t.status).map(e=>(0,t.jsxs)("option",{value:e.id,children:["🖥️|🖥️ Split: ",e.name]},e.id))]}),(0,t.jsx)("button",{onClick:async()=>{await fetch("/api/sessions/inject",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e,command:"/ccc"})})},style:et,children:"🚀 Mount Context (/ccc)"}),(0,t.jsx)("button",{onClick:async()=>{await fetch("/api/sessions/inject",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e,command:"/ccp"})})},style:er,children:"⚡ Trigger Prompt (/ccp)"})]})]}),(0,t.jsxs)("div",{style:eC,children:[(0,t.jsx)("span",{style:{fontSize:"0.7rem",color:"var(--muted)",textTransform:"uppercase",letterSpacing:"0.05em",fontWeight:700},children:"Quick Commands:"}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.35rem",flexWrap:"wrap",alignItems:"center"},children:[tP?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{onClick:()=>tI("/undo"),style:ew,title:"Aider: undo last commit",children:"/undo"}),(0,t.jsx)("button",{onClick:()=>tI("/diff"),style:ew,title:"Aider: show git diff",children:"/diff"}),(0,t.jsx)("button",{onClick:()=>tI("/commit"),style:ew,title:"Aider: commit edits",children:"/commit"}),(0,t.jsx)("button",{onClick:()=>tI("/test"),style:ew,title:"Aider: run tests",children:"/test"}),(0,t.jsx)("button",{onClick:()=>tI("/clear"),style:ew,title:"Clear terminal screen",children:"/clear"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{onClick:()=>tI("/compact"),style:ew,title:"Claude Code: compact history",children:"/compact"}),(0,t.jsx)("button",{onClick:()=>tI("/history"),style:ew,title:"Claude Code: view history",children:"/history"}),(0,t.jsx)("button",{onClick:()=>tI("/reset"),style:ew,title:"Claude Code: reset conversation",children:"/reset"}),(0,t.jsx)("button",{onClick:()=>tI("/help"),style:ew,title:"Claude Code: show help",children:"/help"})]}),td.map((e,r)=>(0,t.jsx)("button",{onClick:()=>tI(e.command),style:{...ew,borderColor:"rgba(168, 85, 247, 0.4)",color:"#c084fc"},title:`Inject command: ${e.command}`,children:e.name},r))]})]}),(0,t.jsxs)("div",{style:{...eo,display:"flex",width:"100%"},children:[(0,t.jsx)("div",{style:{flex:1,height:"100%",borderRight:tf?"1px solid var(--border)":"none",overflow:"hidden"},children:(0,t.jsx)(o.default,{sessionId:e,height:"100%",wsPort:u})}),tf&&(0,t.jsxs)("div",{style:{flex:1,height:"100%",overflow:"hidden",display:"flex",flexDirection:"column"},children:[(0,t.jsxs)("div",{style:{padding:"0.25rem 0.5rem",backgroundColor:"#030406",fontSize:"0.7rem",borderBottom:"1px solid var(--border)",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsxs)("span",{style:{color:"#a855f7",fontWeight:600},children:["🔗 Focused PTY Connection: ",d.find(e=>e.id===tf)?.name]}),(0,t.jsx)("button",{onClick:()=>tg(null),style:{background:"none",border:"none",color:"var(--danger)",cursor:"pointer",fontSize:"0.7rem"},children:"Close Split ✖"})]}),(0,t.jsx)("div",{style:{flex:1,overflow:"hidden"},children:(0,t.jsx)(o.default,{sessionId:tf,height:"100%",wsPort:u})})]})]})]})]}),tW.type&&(0,t.jsx)("div",{style:ei,children:(0,t.jsxs)("div",{style:el,children:[(0,t.jsxs)("h3",{style:{margin:"0 0 1rem 0",fontSize:"1rem",fontWeight:600},children:["create-file"===tW.type&&"Create New File","create-folder"===tW.type&&"Create New Folder","rename"===tW.type&&"Rename Item","delete"===tW.type&&"Confirm Deletion"]}),tW.error&&(0,t.jsxs)("div",{style:{color:"var(--danger)",fontSize:"0.8rem",marginBottom:"1rem"},children:["⚠️ ",tW.error]}),"delete"!==tW.type?(0,t.jsxs)("form",{onSubmit:tJ,children:[(0,t.jsxs)("div",{style:{marginBottom:"0.5rem",fontSize:"0.75rem",color:"var(--muted)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:tW.targetPath||"",children:["Target: ",tW.targetPath]}),(0,t.jsx)("input",{type:"text",value:tW.inputValue,onChange:e=>tL({...tW,inputValue:e.target.value}),style:ea,autoFocus:!0,placeholder:"rename"===tW.type?"Enter new name":"Enter name"}),(0,t.jsxs)("div",{style:es,children:[(0,t.jsx)("button",{type:"button",onClick:()=>tL({type:null,targetPath:null,inputValue:"",error:null}),style:ed,children:"Cancel"}),(0,t.jsx)("button",{type:"submit",style:ec,children:"Submit"})]})]}):(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{fontSize:"0.85rem",marginBottom:"1.5rem",color:"var(--muted)",overflowWrap:"break-word"},children:["Are you sure you want to delete this item? This action is permanent.",(0,t.jsx)("div",{style:{marginTop:"0.5rem",color:"#e2e8f0",fontFamily:"var(--font-mono)",fontSize:"0.75rem",background:"rgba(255,255,255,0.05)",padding:"0.5rem",borderRadius:"4px"},children:tW.targetPath})]}),(0,t.jsxs)("div",{style:es,children:[(0,t.jsx)("button",{type:"button",onClick:()=>tL({type:null,targetPath:null,inputValue:"",error:null}),style:ed,children:"Cancel"}),(0,t.jsx)("button",{onClick:()=>tJ(),style:{...ec,backgroundColor:"var(--danger)"},children:"Delete Permanently"})]})]})]})}),tO&&(0,t.jsx)("div",{style:eu,onClick:()=>tF(!1),children:(0,t.jsxs)("div",{style:em,onClick:e=>e.stopPropagation(),children:[(0,t.jsx)("input",{type:"text",value:tB,onChange:e=>{tD(e.target.value),tA(0)},onKeyDown:e=>{"ArrowDown"===e.key?(e.preventDefault(),tA(e=>(e+1)%Math.max(1,t2.length))):"ArrowUp"===e.key?(e.preventDefault(),tA(e=>(e-1+t2.length)%Math.max(1,t2.length))):"Enter"===e.key?(e.preventDefault(),t2[tN]&&(tK(t2[tN].path),tF(!1))):"Escape"===e.key&&(e.preventDefault(),tF(!1))},placeholder:"Search files by name or path...",style:eh,autoFocus:!0}),(0,t.jsx)("div",{style:ef,children:t2.length>0?t2.map((e,r)=>(0,t.jsxs)("div",{onClick:()=>{tK(e.path),tF(!1)},style:{...eg,backgroundColor:r===tN?"rgba(168, 85, 247, 0.15)":"transparent",borderLeft:r===tN?"3px solid var(--primary)":"3px solid transparent"},children:[(0,t.jsx)("span",{style:{fontSize:"0.85rem",fontWeight:600},children:e.name}),(0,t.jsx)("span",{style:{fontSize:"0.7rem",color:"var(--muted)",marginLeft:"0.5rem",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.relativePath})]},e.path)):(0,t.jsx)("div",{style:{padding:"0.75rem 1rem",color:"var(--muted)",fontSize:"0.8rem",textAlign:"center"},children:"No matching files found"})}),(0,t.jsx)("div",{style:{padding:"0.5rem 1rem",borderTop:"1px solid var(--border)",fontSize:"0.65rem",color:"var(--muted)",textAlign:"right"},children:"Use ↑↓ to navigate, Enter to select, Esc to close"})]})}),b&&(0,t.jsx)(n.default,{title:"Add Scoped Directory",initialPath:l,onClose:()=>v(!1),onSelect:e=>{j(e),v(!1)}})]})}],3839)},97722,e=>{e.n(e.i(3839))}]);