neural-loom 0.2.47 → 0.2.49

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 (126) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +4 -0
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/cache/.previewinfo +1 -1
  5. package/.next/cache/.rscinfo +1 -1
  6. package/.next/cache/.tsbuildinfo +1 -1
  7. package/.next/diagnostics/route-bundle-stats.json +1 -1
  8. package/.next/fallback-build-manifest.json +3 -3
  9. package/.next/prerender-manifest.json +3 -3
  10. package/.next/routes-manifest.json +24 -0
  11. package/.next/server/app/_global-error.html +1 -1
  12. package/.next/server/app/_global-error.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.html +1 -1
  19. package/.next/server/app/_not-found.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  21. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  25. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  26. package/.next/server/app/api/context/aider/route.js.nft.json +1 -1
  27. package/.next/server/app/api/context/claude/route.js.nft.json +1 -1
  28. package/.next/server/app/api/context/route.js.nft.json +1 -1
  29. package/.next/server/app/api/context/ssh/route.js.nft.json +1 -1
  30. package/.next/server/app/api/recents/route.js.nft.json +1 -1
  31. package/.next/server/app/api/sessions/inject/route.js.nft.json +1 -1
  32. package/.next/server/app/api/sessions/input/route.js.nft.json +1 -1
  33. package/.next/server/app/api/sessions/launch/route.js.nft.json +1 -1
  34. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  35. package/.next/server/app/api/sessions/scope/route.js.nft.json +1 -1
  36. package/.next/server/app/api/sessions/start/route.js.nft.json +1 -1
  37. package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -1
  38. package/.next/server/app/api/sessions/stop/route.js.nft.json +1 -1
  39. package/.next/server/app/api/sql/connections/route/app-paths-manifest.json +3 -0
  40. package/.next/server/app/api/sql/connections/route/build-manifest.json +9 -0
  41. package/.next/server/app/api/sql/connections/route/server-reference-manifest.json +4 -0
  42. package/.next/server/app/api/sql/connections/route.js +6 -0
  43. package/.next/server/app/api/sql/connections/route.js.map +5 -0
  44. package/.next/server/app/api/sql/connections/route.js.nft.json +1 -0
  45. package/.next/server/app/api/sql/connections/route_client-reference-manifest.js +3 -0
  46. package/.next/server/app/api/sql/mcp/route/app-paths-manifest.json +3 -0
  47. package/.next/server/app/api/sql/mcp/route/build-manifest.json +9 -0
  48. package/.next/server/app/api/sql/mcp/route/server-reference-manifest.json +4 -0
  49. package/.next/server/app/api/sql/mcp/route.js +6 -0
  50. package/.next/server/app/api/sql/mcp/route.js.map +5 -0
  51. package/.next/server/app/api/sql/mcp/route.js.nft.json +1 -0
  52. package/.next/server/app/api/sql/mcp/route_client-reference-manifest.js +3 -0
  53. package/.next/server/app/api/sql/query/route/app-paths-manifest.json +3 -0
  54. package/.next/server/app/api/sql/query/route/build-manifest.json +9 -0
  55. package/.next/server/app/api/sql/query/route/server-reference-manifest.json +4 -0
  56. package/.next/server/app/api/sql/query/route.js +6 -0
  57. package/.next/server/app/api/sql/query/route.js.map +5 -0
  58. package/.next/server/app/api/sql/query/route.js.nft.json +1 -0
  59. package/.next/server/app/api/sql/query/route_client-reference-manifest.js +3 -0
  60. package/.next/server/app/api/sql/schema/route/app-paths-manifest.json +3 -0
  61. package/.next/server/app/api/sql/schema/route/build-manifest.json +9 -0
  62. package/.next/server/app/api/sql/schema/route/server-reference-manifest.json +4 -0
  63. package/.next/server/app/api/sql/schema/route.js +6 -0
  64. package/.next/server/app/api/sql/schema/route.js.map +5 -0
  65. package/.next/server/app/api/sql/schema/route.js.nft.json +1 -0
  66. package/.next/server/app/api/sql/schema/route_client-reference-manifest.js +3 -0
  67. package/.next/server/app/index.html +1 -1
  68. package/.next/server/app/index.rsc +3 -3
  69. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  70. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  71. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  72. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  73. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  74. package/.next/server/app/page/react-loadable-manifest.json +1 -1
  75. package/.next/server/app/page_client-reference-manifest.js +1 -1
  76. package/.next/server/app-paths-manifest.json +4 -0
  77. package/.next/server/chunks/[root-of-the-server]__0.ptwor._.js +86 -0
  78. package/.next/server/chunks/[root-of-the-server]__0.ptwor._.js.map +1 -0
  79. package/.next/server/chunks/[root-of-the-server]__00l5btc._.js +74 -0
  80. package/.next/server/chunks/[root-of-the-server]__00l5btc._.js.map +1 -0
  81. package/.next/server/chunks/[root-of-the-server]__06men8g._.js +74 -0
  82. package/.next/server/chunks/[root-of-the-server]__06men8g._.js.map +1 -0
  83. package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js +1 -1
  84. package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js.map +1 -1
  85. package/.next/server/chunks/[root-of-the-server]__0co.g5k._.js +74 -0
  86. package/.next/server/chunks/[root-of-the-server]__0co.g5k._.js.map +1 -0
  87. package/.next/server/chunks/_next-internal_server_app_api_sql_connections_route_actions_11cib8~.js +3 -0
  88. package/.next/server/chunks/_next-internal_server_app_api_sql_connections_route_actions_11cib8~.js.map +1 -0
  89. package/.next/server/chunks/_next-internal_server_app_api_sql_mcp_route_actions_0wihfps.js +3 -0
  90. package/.next/server/chunks/_next-internal_server_app_api_sql_mcp_route_actions_0wihfps.js.map +1 -0
  91. package/.next/server/chunks/_next-internal_server_app_api_sql_query_route_actions_11x3q3c.js +3 -0
  92. package/.next/server/chunks/_next-internal_server_app_api_sql_query_route_actions_11x3q3c.js.map +1 -0
  93. package/.next/server/chunks/_next-internal_server_app_api_sql_schema_route_actions_015okwb.js +3 -0
  94. package/.next/server/chunks/_next-internal_server_app_api_sql_schema_route_actions_015okwb.js.map +1 -0
  95. package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js +1 -1
  96. package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js.map +1 -1
  97. package/.next/server/middleware-build-manifest.js +3 -3
  98. package/.next/server/pages/404.html +1 -1
  99. package/.next/server/pages/500.html +1 -1
  100. package/.next/server/server-reference-manifest.js +1 -1
  101. package/.next/server/server-reference-manifest.json +1 -1
  102. package/.next/static/chunks/03f4bqk_d65hs.js +6 -0
  103. package/.next/static/chunks/{15zf~gqr_i8s1.js → 0~6gm~u8rgtpd.js} +1 -1
  104. package/.next/trace +1 -1
  105. package/.next/trace-build +1 -1
  106. package/.next/types/routes.d.ts +5 -1
  107. package/.next/types/validator.ts +36 -0
  108. package/bin/cli.js +76 -0
  109. package/package.json +2 -2
  110. package/src/app/api/sql/connections/route.ts +60 -0
  111. package/src/app/api/sql/mcp/route.ts +27 -0
  112. package/src/app/api/sql/query/route.ts +56 -0
  113. package/src/app/api/sql/schema/route.ts +42 -0
  114. package/src/app/components/DbExplorer.tsx +1279 -0
  115. package/src/app/components/IdeLayout.tsx +27 -1
  116. package/src/app/layout.tsx +1 -0
  117. package/src/lib/sql/ConnectionManager.ts +207 -0
  118. package/src/lib/sql/DbAdapter.ts +62 -0
  119. package/src/lib/sql/McpServer.ts +278 -0
  120. package/src/lib/sql/adapters/MysqlAdapter.ts +120 -0
  121. package/src/lib/sql/adapters/PostgresAdapter.ts +139 -0
  122. package/src/lib/sql/adapters/SqliteAdapter.ts +111 -0
  123. package/.next/static/chunks/0bclk7hf35ac4.js +0 -1
  124. /package/.next/static/{kPeXDg1G9iPLf0aCjKTXh → BoncS4SNz6CDpSdR8oY-K}/_buildManifest.js +0 -0
  125. /package/.next/static/{kPeXDg1G9iPLf0aCjKTXh → BoncS4SNz6CDpSdR8oY-K}/_clientMiddlewareManifest.js +0 -0
  126. /package/.next/static/{kPeXDg1G9iPLf0aCjKTXh → BoncS4SNz6CDpSdR8oY-K}/_ssgManifest.js +0 -0
@@ -0,0 +1,120 @@
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 MysqlAdapter extends DbAdapter {
5
+ private connection: any = null;
6
+ private dbName: string = "";
7
+
8
+ constructor(config: any) {
9
+ super(config);
10
+ this.dbName = config.database || "";
11
+ }
12
+
13
+ async connect(): Promise<void> {
14
+ if (this.connection) return;
15
+
16
+ try {
17
+ let mysql;
18
+ try {
19
+ mysql = require("mysql2/promise");
20
+ } catch (err) {
21
+ throw new Error(
22
+ "MySQL driver 'mysql2' is not installed. Please run `npm install mysql2` in the neural-loom environment."
23
+ );
24
+ }
25
+
26
+ this.connection = await mysql.createConnection({
27
+ host: this.config.host || "localhost",
28
+ port: this.config.port || 3306,
29
+ database: this.dbName,
30
+ user: this.config.username || "root",
31
+ password: this.config.password || "",
32
+ ssl: this.config.ssl ? this.config.ssl : undefined
33
+ });
34
+ } catch (err: any) {
35
+ console.error("[MysqlAdapter] Connect failed:", err);
36
+ this.connection = null;
37
+ throw err;
38
+ }
39
+ }
40
+
41
+ async query(sql: string, params: any[] = []): Promise<QueryResult> {
42
+ await this.connect();
43
+ try {
44
+ const [rows, fields] = await this.connection.execute(sql, params);
45
+
46
+ const isArray = Array.isArray(rows);
47
+ return {
48
+ rows: isArray ? rows : [],
49
+ fields: fields ? fields.map((f: any) => f.name) : [],
50
+ affectedRows: !isArray && (rows as any).affectedRows !== undefined ? (rows as any).affectedRows : undefined
51
+ };
52
+ } catch (err: any) {
53
+ console.error("[MysqlAdapter] Query failed:", err);
54
+ throw err;
55
+ }
56
+ }
57
+
58
+ async listTables(): Promise<TableSchema[]> {
59
+ const sql = `
60
+ SELECT table_name as name, table_type as type
61
+ FROM information_schema.tables
62
+ WHERE table_schema = ? AND table_type IN ('BASE TABLE', 'VIEW')
63
+ ORDER BY table_name
64
+ `;
65
+ const res = await this.query(sql, [this.dbName]);
66
+ return res.rows.map(row => ({
67
+ name: row.name,
68
+ type: row.type === "BASE TABLE" ? "table" : "view"
69
+ }));
70
+ }
71
+
72
+ async describeTable(tableName: string): Promise<ColumnSchema[]> {
73
+ const columnsSql = `
74
+ SELECT
75
+ column_name as name,
76
+ column_type as type,
77
+ is_nullable as nullable,
78
+ column_default as default_value,
79
+ column_key as col_key
80
+ FROM information_schema.columns
81
+ WHERE table_schema = ? AND table_name = ?
82
+ ORDER BY ordinal_position
83
+ `;
84
+
85
+ const fksSql = `
86
+ SELECT
87
+ column_name AS local_column,
88
+ referenced_table_name AS foreign_table,
89
+ referenced_column_name AS foreign_column
90
+ FROM information_schema.key_column_usage
91
+ WHERE table_schema = ?
92
+ AND table_name = ?
93
+ AND referenced_table_name IS NOT NULL
94
+ `;
95
+
96
+ const colsRes = await this.query(columnsSql, [this.dbName, tableName]);
97
+ const fksRes = await this.query(fksSql, [this.dbName, tableName]);
98
+
99
+ return colsRes.rows.map((row: any) => {
100
+ const fk = fksRes.rows.find((f: any) => f.local_column === row.name);
101
+ return {
102
+ name: row.name,
103
+ type: row.type || "VARCHAR",
104
+ nullable: row.nullable === "YES",
105
+ defaultValue: row.default_value,
106
+ isPrimaryKey: row.col_key === "PRI",
107
+ isForeignKey: !!fk,
108
+ referencedTable: fk ? fk.foreign_table : null,
109
+ referencedColumn: fk ? fk.foreign_column : null
110
+ };
111
+ });
112
+ }
113
+
114
+ async disconnect(): Promise<void> {
115
+ if (this.connection) {
116
+ await this.connection.end();
117
+ this.connection = null;
118
+ }
119
+ }
120
+ }
@@ -0,0 +1,139 @@
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 PostgresAdapter extends DbAdapter {
5
+ private client: any = null;
6
+ private schema: string = "public";
7
+
8
+ constructor(config: any) {
9
+ super(config);
10
+ this.schema = config.schema || "public";
11
+ }
12
+
13
+ async connect(): Promise<void> {
14
+ if (this.client) return;
15
+
16
+ try {
17
+ let ClientClass;
18
+ try {
19
+ const pg = require("pg");
20
+ ClientClass = pg.Client;
21
+ } catch (err) {
22
+ throw new Error(
23
+ "PostgreSQL driver 'pg' is not installed. Please run `npm install pg` in the neural-loom environment."
24
+ );
25
+ }
26
+
27
+ this.client = new ClientClass({
28
+ host: this.config.host || "localhost",
29
+ port: this.config.port || 5432,
30
+ database: this.config.database || "postgres",
31
+ user: this.config.username || "postgres",
32
+ password: this.config.password || "",
33
+ ssl: this.config.ssl ? this.config.ssl : undefined
34
+ });
35
+
36
+ await this.client.connect();
37
+ } catch (err: any) {
38
+ console.error("[PostgresAdapter] Connect failed:", err);
39
+ this.client = null;
40
+ throw err;
41
+ }
42
+ }
43
+
44
+ async query(sql: string, params: any[] = []): Promise<QueryResult> {
45
+ await this.connect();
46
+ try {
47
+ const res = await this.client.query(sql, params);
48
+ const rows = res.rows || [];
49
+ const fields = res.fields ? res.fields.map((f: any) => f.name) : [];
50
+ return {
51
+ rows,
52
+ fields,
53
+ affectedRows: res.rowCount !== null ? res.rowCount : undefined
54
+ };
55
+ } catch (err: any) {
56
+ console.error("[PostgresAdapter] Query failed:", err);
57
+ throw err;
58
+ }
59
+ }
60
+
61
+ async listTables(): Promise<TableSchema[]> {
62
+ const sql = `
63
+ SELECT table_name as name, table_type as type
64
+ FROM information_schema.tables
65
+ WHERE table_schema = $1 AND table_type IN ('BASE TABLE', 'VIEW')
66
+ ORDER BY table_name
67
+ `;
68
+ const res = await this.query(sql, [this.schema]);
69
+ return res.rows.map(row => ({
70
+ name: row.name,
71
+ type: row.type === "BASE TABLE" ? "table" : "view"
72
+ }));
73
+ }
74
+
75
+ async describeTable(tableName: string): Promise<ColumnSchema[]> {
76
+ const columnsSql = `
77
+ SELECT
78
+ c.column_name as name,
79
+ c.data_type as type,
80
+ c.is_nullable as nullable,
81
+ c.column_default as default_value,
82
+ (
83
+ SELECT COUNT(*)
84
+ FROM information_schema.table_constraints tc
85
+ JOIN information_schema.key_column_usage kcu
86
+ ON tc.constraint_name = kcu.constraint_name
87
+ AND tc.table_schema = kcu.table_schema
88
+ WHERE tc.constraint_type = 'PRIMARY KEY'
89
+ AND tc.table_name = c.table_name
90
+ AND kcu.column_name = c.column_name
91
+ AND tc.table_schema = c.table_schema
92
+ ) > 0 as is_pk
93
+ FROM information_schema.columns c
94
+ WHERE c.table_schema = $1 AND c.table_name = $2
95
+ ORDER BY c.ordinal_position
96
+ `;
97
+
98
+ const fksSql = `
99
+ SELECT
100
+ kcu.column_name AS local_column,
101
+ ccu.table_name AS foreign_table,
102
+ ccu.column_name AS foreign_column
103
+ FROM information_schema.table_constraints AS tc
104
+ JOIN information_schema.key_column_usage AS kcu
105
+ ON tc.constraint_name = kcu.constraint_name
106
+ AND tc.table_schema = kcu.table_schema
107
+ JOIN information_schema.constraint_column_usage AS ccu
108
+ ON ccu.constraint_name = tc.constraint_name
109
+ AND ccu.table_schema = tc.table_schema
110
+ WHERE tc.constraint_type = 'FOREIGN KEY'
111
+ AND tc.table_schema = $1
112
+ AND tc.table_name = $2
113
+ `;
114
+
115
+ const colsRes = await this.query(columnsSql, [this.schema, tableName]);
116
+ const fksRes = await this.query(fksSql, [this.schema, tableName]);
117
+
118
+ return colsRes.rows.map((row: any) => {
119
+ const fk = fksRes.rows.find((f: any) => f.local_column === row.name);
120
+ return {
121
+ name: row.name,
122
+ type: row.type,
123
+ nullable: row.nullable === "YES",
124
+ defaultValue: row.default_value,
125
+ isPrimaryKey: row.is_pk,
126
+ isForeignKey: !!fk,
127
+ referencedTable: fk ? fk.foreign_table : null,
128
+ referencedColumn: fk ? fk.foreign_column : null
129
+ };
130
+ });
131
+ }
132
+
133
+ async disconnect(): Promise<void> {
134
+ if (this.client) {
135
+ await this.client.end();
136
+ this.client = null;
137
+ }
138
+ }
139
+ }
@@ -0,0 +1,111 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-require-imports, @typescript-eslint/no-unused-vars */
2
+ import path from "path";
3
+ import fs from "fs";
4
+ import { DbAdapter, TableSchema, ColumnSchema, QueryResult } from "../DbAdapter";
5
+
6
+ export class SqliteAdapter extends DbAdapter {
7
+ private db: any = null;
8
+ private resolvedPath: string = "";
9
+
10
+ constructor(config: any, workspaceRoot?: string) {
11
+ super(config);
12
+ const rawPath = config.filepath || "dev.db";
13
+ // Resolve relative path against workspaceRoot or process CWD
14
+ if (path.isAbsolute(rawPath)) {
15
+ this.resolvedPath = rawPath.replace(/\\/g, "/");
16
+ } else {
17
+ const root = workspaceRoot || process.cwd();
18
+ this.resolvedPath = path.resolve(root, rawPath).replace(/\\/g, "/");
19
+ }
20
+ }
21
+
22
+ async connect(): Promise<void> {
23
+ if (this.db) return;
24
+
25
+ // Ensure parent directory exists
26
+ const dir = path.dirname(this.resolvedPath);
27
+ if (!fs.existsSync(dir)) {
28
+ fs.mkdirSync(dir, { recursive: true });
29
+ }
30
+
31
+ try {
32
+ // Lazy load better-sqlite3
33
+ let Database;
34
+ try {
35
+ Database = require("better-sqlite3");
36
+ } catch (err) {
37
+ throw new Error(
38
+ "SQLite driver 'better-sqlite3' is not installed. Please run `npm install better-sqlite3` in the neural-loom environment."
39
+ );
40
+ }
41
+
42
+ this.db = new Database(this.resolvedPath);
43
+ } catch (err: any) {
44
+ console.error("[SqliteAdapter] Connect failed:", err);
45
+ throw err;
46
+ }
47
+ }
48
+
49
+ async query(sql: string, params: any[] = []): Promise<QueryResult> {
50
+ await this.connect();
51
+ try {
52
+ const isSelect = sql.trim().toLowerCase().startsWith("select") ||
53
+ sql.trim().toLowerCase().startsWith("pragma") ||
54
+ sql.trim().toLowerCase().startsWith("explain");
55
+
56
+ if (isSelect) {
57
+ const rows = this.db.prepare(sql).all(params);
58
+ const fields = rows.length > 0 ? Object.keys(rows[0]) : [];
59
+ return { rows, fields };
60
+ } else {
61
+ const info = this.db.prepare(sql).run(params);
62
+ return {
63
+ rows: [],
64
+ affectedRows: info.changes
65
+ };
66
+ }
67
+ } catch (err: any) {
68
+ console.error("[SqliteAdapter] Query execution failed:", err);
69
+ throw err;
70
+ }
71
+ }
72
+
73
+ async listTables(): Promise<TableSchema[]> {
74
+ const sql = `SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view') AND name NOT LIKE 'sqlite_%'`;
75
+ const res = await this.query(sql);
76
+ return res.rows.map(row => ({
77
+ name: row.name,
78
+ type: row.type === "table" ? "table" : "view"
79
+ }));
80
+ }
81
+
82
+ async describeTable(tableName: string): Promise<ColumnSchema[]> {
83
+ await this.connect();
84
+
85
+ // Get table columns
86
+ const columnsInfo = this.db.prepare(`PRAGMA table_info(\`${tableName}\`)`).all();
87
+ // Get foreign keys
88
+ const foreignKeys = this.db.prepare(`PRAGMA foreign_key_list(\`${tableName}\`)`).all();
89
+
90
+ return columnsInfo.map((col: any) => {
91
+ const fk = foreignKeys.find((f: any) => f.from === col.name);
92
+ return {
93
+ name: col.name,
94
+ type: col.type || "TEXT",
95
+ nullable: col.notnull === 0,
96
+ defaultValue: col.dflt_value,
97
+ isPrimaryKey: col.pk > 0,
98
+ isForeignKey: !!fk,
99
+ referencedTable: fk ? fk.table : null,
100
+ referencedColumn: fk ? fk.to : null
101
+ };
102
+ });
103
+ }
104
+
105
+ async disconnect(): Promise<void> {
106
+ if (this.db) {
107
+ this.db.close();
108
+ this.db = null;
109
+ }
110
+ }
111
+ }
@@ -1 +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 z(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=z(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:z(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:g,children:[(0,t.jsx)("span",{style:{marginRight:"0.5rem",color:"var(--accent)"},children:"•"}),(0,t.jsx)("div",{style:{flex:1},children:z(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:g,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:z(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:z(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:z(e)},r))},r))})]})},r)}(e.content,o);case"hr":return(0,t.jsx)("hr",{style:f},o);case"p":return(0,t.jsx)("p",{style:s,children:z(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:z,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:P,children:n?"Copied! ✓":"Copy"})]}),(0,t.jsx)("pre",{style:R,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"},g={display:"flex",alignItems:"flex-start",fontSize:"0.875rem",marginBottom:"0.375rem",color:"var(--foreground-muted, #94a3b8)"},f={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)"},z={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"},R={margin:0,padding:"1rem",overflowX:"auto",fontSize:"0.8rem",fontFamily:"var(--font-mono), monospace",lineHeight:1.5,color:"#e2e8f0"},P={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"},W={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)"},I={width:"50px",backgroundColor:"#030406",borderRight:"1px solid var(--border)",display:"flex",flexDirection:"column",justifyContent:"space-between",alignItems:"center",padding:"0.75rem 0"},L={display:"flex",flexDirection:"column",width:"100%",gap:"0.5rem"},F={width:"100%",height:"45px",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",fontSize:"1.25rem",transition:"all 0.15s ease"},O={width:"300px",backgroundColor:"#080c14",borderRight:"1px solid var(--border)",display:"flex",flexDirection:"column",overflow:"hidden"},B={padding:"0.75rem 1rem",borderBottom:"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"space-between",background:"rgba(255,255,255,0.02)"},D={flex:1,overflowY:"auto",padding:"0.75rem 0"},E={padding:"0.25rem 1rem",fontSize:"0.75rem",fontWeight:700,color:"var(--muted)",display:"flex",alignItems:"center",justifyContent:"space-between",textTransform:"uppercase",letterSpacing:"0.05em"},M={fontSize:"0.6rem",backgroundColor:"rgba(59, 130, 246, 0.1)",color:"#3b82f6",padding:"0.1rem 0.3rem",borderRadius:"3px",textTransform:"none",letterSpacing:"normal"},N={fontSize:"0.75rem",fontWeight:600,color:"var(--foreground)"},A={flex:1,display:"flex",flexDirection:"column",overflow:"hidden",backgroundColor:"#0b101b"},$={flex:1,display:"flex",flexDirection:"column",borderBottom:"1px solid var(--border)",overflow:"hidden"},U={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"},H={fontSize:"0.65rem",color:"var(--muted)",cursor:"pointer",padding:"2px"},G={color:"var(--primary)",fontSize:"0.65rem",marginLeft:"2px"},K={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},_={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"},q={flex:1.4,backgroundColor:"#05070a",display:"flex",flexDirection:"column",overflow:"hidden"},Q={padding:"0.5rem 1rem",borderBottom:"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"space-between",backgroundColor:"rgba(255,255,255,0.01)"},Z={padding:"0.3rem 0.6rem",borderRadius:"4px",border:"1px solid var(--primary)",backgroundColor:"transparent",color:"var(--primary)",fontSize:"0.7rem",fontWeight:600,cursor:"pointer"},ee={padding:"0.3rem 0.6rem",borderRadius:"4px",border:"1px solid var(--success)",backgroundColor:"transparent",color:"var(--success)",fontSize:"0.7rem",fontWeight:600,cursor:"pointer"},et={flex:1,overflow:"hidden"};function er({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"},g={display:c?"flex":"none",alignItems:"center",gap:"0.25rem",paddingLeft:"0.5rem",flexShrink:0},f={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:g,children:[(0,t.jsx)("button",{onClick:t=>x(t,()=>n(e.path,"file")),style:f,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:f,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:f,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:f,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)(er,{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:g,children:[(0,t.jsx)("button",{onClick:t=>x(t,()=>i(e.path)),style:f,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:f,title:"Delete File",onMouseEnter:e=>e.currentTarget.style.color="var(--danger)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted)",children:"🗑️"})]})]})}let eo={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)"},en={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)"},ei={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"},el={display:"flex",justifyContent:"flex-end",gap:"0.75rem"},ea={backgroundColor:"transparent",border:"1px solid var(--border)",color:"var(--foreground)",padding:"0.5rem 1rem",borderRadius:"6px",fontSize:"0.8rem",fontWeight:600,cursor:"pointer"},es={backgroundColor:"var(--primary)",border:"none",color:"#ffffff",padding:"0.5rem 1rem",borderRadius:"6px",fontSize:"0.8rem",fontWeight:600,cursor:"pointer"},ed={background:"none",border:"none",color:"var(--muted)",cursor:"pointer",fontSize:"0.8rem",padding:"4px",borderRadius:"3px",transition:"all 0.1s ease"},ec={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)"},ep={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"},eu={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"},em={maxHeight:"300px",overflowY:"auto",padding:"0.25rem 0"},eh={display:"flex",alignItems:"center",padding:"0.5rem 1rem",cursor:"pointer",transition:"all 0.1s ease",justifyContent:"space-between"},eg={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"},ef={fontSize:"0.6rem",color:"var(--muted)",textTransform:"uppercase"},ex={fontSize:"1.1rem",fontWeight:700,fontFamily:"var(--font-mono)"},ey={width:"100%",height:"6px",backgroundColor:"rgba(255,255,255,0.05)",borderRadius:"3px",overflow:"hidden"},eb={height:"100%",borderRadius:"3px",transition:"width 0.5s ease-out"},ev={padding:"0.35rem 1rem",borderBottom:"1px solid var(--border)",backgroundColor:"#030406",display:"flex",alignItems:"center",gap:"0.75rem",flexWrap:"nowrap",overflowX:"auto"},ej={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"},eC={backgroundColor:"#05070a",borderBottom:"1px solid var(--border)",padding:"0.25rem 0.75rem 0 0.75rem",display:"flex",alignItems:"center",justifyContent:"space-between"},ew={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"},eS={display:"flex",alignItems:"center",backgroundColor:"rgba(0, 0, 0, 0.3)",border:"1px solid var(--border)",borderRadius:"6px",padding:"2px",marginRight:"0.5rem"},ek={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 eT({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 eR({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 eP={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"},eW={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"},eI={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)"},eL={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),[g,f]=(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,z]=(0,r.useState)({}),T=w[e]||[],R=k[e]||null,P=(0,r.useCallback)(t=>{S(r=>{let o=r[e]||[],n="function"==typeof t?t(o):t;return{...r,[e]:n}})},[e]),eF=(0,r.useCallback)(t=>{z(r=>({...r,[e]:t}))},[e]),[eO,eB]=(0,r.useState)("edit"),[eD,eE]=(0,r.useState)(!0),[eM,eN]=(0,r.useState)("explorer"),[eA,e$]=(0,r.useState)("http://localhost:3000"),[eU,eJ]=(0,r.useState)(!1),[eV,eH]=(0,r.useState)(300),[eG,eK]=(0,r.useState)(!1),[e_,eY]=(0,r.useState)(380),[eX,eq]=(0,r.useState)(!1),eQ=(0,r.useCallback)(e=>{e.preventDefault(),eK(!0)},[]),eZ=(0,r.useCallback)(e=>{e.preventDefault(),eq(!0)},[]);(0,r.useEffect)(()=>{let e=e=>{if(eG){let t=document.getElementById("loom-ide-container");if(t){let r=t.getBoundingClientRect(),o=e.clientX-r.left-50;o>150&&o<600&&eH(o)}}if(eX){let t=document.getElementById("loom-ide-container");if(t){let r=t.getBoundingClientRect(),o=r.bottom-e.clientY;o>100&&o<r.height-150&&eY(o)}}},t=()=>{eK(!1),eq(!1)};return(eG||eX)&&(window.addEventListener("mousemove",e),window.addEventListener("mouseup",t),document.body.style.cursor=eG?"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=""}},[eG,eX]);let[e0,e5]=(0,r.useState)([]),[e1,e2]=(0,r.useState)(!1),[e7,e8]=(0,r.useState)(!1),[e3,e4]=(0,r.useState)(""),[e6,e9]=(0,r.useState)({ahead:0,behind:0}),[te,tt]=(0,r.useState)(""),[tr,to]=(0,r.useState)(null),[tn,ti]=(0,r.useState)(null),[tl,ta]=(0,r.useState)(""),[ts,td]=(0,r.useState)([]),[tc,tp]=(0,r.useState)(""),[tu,tm]=(0,r.useState)(""),[th,tg]=(0,r.useState)(null),tf=(0,r.useCallback)(async()=>{await new Promise(e=>setTimeout(e,0)),e8(!0);try{let e=await fetch(`/api/git?action=status&root=${encodeURIComponent(l)}`);if(e.ok){let t=await e.json();t.success&&(e2(t.isGit),e5(t.files||[]),e4(t.branch||""),e9({ahead:t.ahead||0,behind:t.behind||0}))}}catch(e){console.error("Failed to load git status:",e)}finally{e8(!1)}},[l]);(0,r.useEffect)(()=>{setTimeout(()=>{tf()},0);let e=setInterval(tf,5e3);return()=>clearInterval(e)},[tf]);let tx=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 tf()}catch(e){console.error(e)}},ty=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 tf()}catch(e){console.error(e)}},tb=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 tf()}catch(e){console.error(e)}},tv=async()=>{try{(await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"stage",rootPath:l})})).ok&&await tf()}catch(e){console.error(e)}},tj=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 tf()}catch(e){console.error(e)}},tC=async()=>{try{(await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"unstage",rootPath:l})})).ok&&await tf()}catch(e){console.error(e)}},tw=async()=>{if(te.trim())try{let e=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"commit",message:te,rootPath:l})});if(e.ok)tt(""),await tf();else{let t=await e.json();alert(t.error||"Git commit failed")}}catch(e){console.error(e)}},tS=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 tf()}else{let t=await e.json();alert(t.error||"Git pull 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:"push",rootPath:l})});if(e.ok){let t=await e.json();alert(t.output||"Git push completed successfully."),await tf()}else{let t=await e.json();alert(t.error||"Git push failed")}}catch(e){console.error(e)}},tz=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)||P(o=>[...o,{name:`Diff: ${e.name}`,path:t,content:r.diff,isModified:!1}]),eF(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();to(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();ti(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(()=>{td(t)},0)}catch{}},[]);let tT=e=>{td(e),localStorage.setItem("neural_loom_custom_commands",JSON.stringify(e))},tR=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=tr?.type?.includes("aider"),[tW,tI]=(0,r.useState)({type:null,targetPath:null,inputValue:"",error:null}),[tL,tF]=(0,r.useState)(!1),[tO,tB]=(0,r.useState)(""),[tD,tE]=(0,r.useState)([]),[tM,tN]=(0,r.useState)(0),tA=(0,r.useCallback)(async()=>{await new Promise(e=>setTimeout(e,0)),eJ(!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&&(f(e.workspace),y(e.scoped||[]))}}catch(e){console.error("Failed to load file explorer:",e)}finally{eJ(!1)}},[l,m]);(0,r.useEffect)(()=>{tA();let e=setInterval(()=>{tA()},3e3);return()=>clearInterval(e)},[tA]);let t$=(e,t)=>{tI({type:"file"===t?"create-file":"create-folder",targetPath:e,inputValue:"",error:null})},tU=e=>{let t=e.split(/[/\\]/).pop()||"";tI({type:"rename",targetPath:e,inputValue:t,error:null})},tJ=e=>{tI({type:"delete",targetPath:e,inputValue:"",error:null})},tV=async e=>{if(e&&e.preventDefault(),tW.type&&tW.targetPath){tI(e=>({...e,error:null}));try{if("create-file"===tW.type||"create-folder"===tW.type){if(!tW.inputValue.trim())return void tI(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?(tI({type:null,targetPath:null,inputValue:"",error:null}),await tA(),"file"===t&&await tG(e)):tI(e=>({...e,error:o.error||"Failed to create item"}))}else{let e=await r.json();tI(t=>({...t,error:e.error||"Failed to create item"}))}}if("rename"===tW.type){if(!tW.inputValue.trim())return void tI(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?(P(e=>e.map(e=>e.path===tW.targetPath?{...e,path:r,name:tW.inputValue.trim()}:e)),R===tW.targetPath&&eF(r),tI({type:null,targetPath:null,inputValue:"",error:null}),await tA()):tI(t=>({...t,error:e.error||"Failed to rename item"}))}else{let e=await o.json();tI(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?(tK(tW.targetPath),tI({type:null,targetPath:null,inputValue:"",error:null}),await tA()):tI(e=>({...e,error:t.error||"Failed to delete item"}))}else{let t=await e.json();tI(e=>({...e,error:t.error||"Failed to delete item"}))}}}catch(e){console.error("File operation failed:",e),tI(e=>({...e,error:"An unexpected error occurred"}))}}},tH=(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&&tE(e.files)}}catch(e){console.error("Failed to load flat files list:",e)}},[l,m]);(0,r.useEffect)(()=>{tL&&setTimeout(()=>{tB(""),tN(0),tH()},0)},[tL,tH]);let tG=async e=>{if(T.find(t=>t.path===e))return void eF(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};P([...T,t]),eF(e)}}}catch(t){console.error(`Failed to read file ${e}:`,t)}},tK=e=>{let t=T.filter(t=>t.path!==e);P(t),R===e&&eF(t.length>0?t[t.length-1].path:null)},t_=e=>{let t=e.trim();if(!t)return;let r=`browser:${t}`;T.find(e=>e.path===r)||P(e=>[...e,{name:`Browser: ${t.replace(/^https?:\/\//,"")}`,path:r,content:t,isModified:!1}]),eF(r)},tY=T.find(e=>e.path===R),tX=!!tY&&tY.path.toLowerCase().endsWith(".md"),tq=tX?eO:"edit",tQ=e0.filter(e=>e.indexStatus&&" "!==e.indexStatus&&"?"!==e.indexStatus),tZ=e0.filter(e=>e.worktreeStatus&&" "!==e.worktreeStatus||"??"===e.status),t0=e=>{R&&P(T.map(t=>t.path===R?{...t,content:e,isModified:!0}:t))},t5=(0,r.useCallback)(async()=>{if(!(!tY||tY.path.startsWith("diff:")||tY.path.startsWith("browser:")))try{(await fetch("/api/files",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"write",path:tY.path,content:tY.content})})).ok&&P(e=>e.map(e=>e.path===R?{...e,isModified:!1}:e))}catch(e){console.error(`Failed to save file ${tY.path}:`,e)}},[tY,R,P]);(0,r.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&"s"===e.key&&(e.preventDefault(),t5()),(e.ctrlKey||e.metaKey)&&"p"===e.key&&(e.preventDefault(),tF(e=>!e))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[t5]);let t1=tD.filter(e=>e.name.toLowerCase().includes(tO.toLowerCase())||e.relativePath.toLowerCase().includes(tO.toLowerCase())).slice(0,10);return(0,t.jsxs)("div",{id:"loom-ide-container",style:W,children:[(0,t.jsxs)("div",{style:I,children:[(0,t.jsxs)("div",{style:L,children:[(0,t.jsx)("div",{onClick:()=>{"explorer"===eM?eE(!eD):(eN("explorer"),eE(!0))},style:{...F,backgroundColor:"explorer"===eM&&eD?"rgba(255,255,255,0.08)":"transparent",borderLeft:"explorer"===eM&&eD?"2px solid var(--primary)":"2px solid transparent"},title:"File Explorer (Ctrl+P to search files)",children:"📁"}),(0,t.jsx)("div",{onClick:()=>{"git"===eM?eE(!eD):(eN("git"),eE(!0))},style:{...F,backgroundColor:"git"===eM&&eD?"rgba(255,255,255,0.08)":"transparent",borderLeft:"git"===eM&&eD?"2px solid var(--primary)":"2px solid transparent"},title:"Source Control (Git Changes)",children:"🌿"}),(0,t.jsx)("div",{onClick:()=>{"analytics"===eM?eE(!eD):(eN("analytics"),eE(!0))},style:{...F,backgroundColor:"analytics"===eM&&eD?"rgba(255,255,255,0.08)":"transparent",borderLeft:"analytics"===eM&&eD?"2px solid var(--primary)":"2px solid transparent"},title:"Token Usage & Cost Analytics",children:"📊"}),(0,t.jsx)("div",{onClick:()=>{"auditor"===eM?eE(!eD):(eN("auditor"),eE(!0))},style:{...F,backgroundColor:"auditor"===eM&&eD?"rgba(255,255,255,0.08)":"transparent",borderLeft:"auditor"===eM&&eD?"2px solid var(--primary)":"2px solid transparent"},title:"Session Log Auditor & Search",children:"🔍"}),(0,t.jsx)("div",{onClick:()=>{"browser"===eM?eE(!eD):(eN("browser"),eE(!0))},style:{...F,backgroundColor:"browser"===eM&&eD?"rgba(255,255,255,0.08)":"transparent",borderLeft:"browser"===eM&&eD?"2px solid var(--primary)":"2px solid transparent"},title:"Local Web Browser Test Preview",children:"🌐"})]}),(0,t.jsx)("div",{onClick:s,style:{...F,color:"var(--danger)",fontSize:"1rem"},title:"Exit Session Layout",children:"✖"})]}),eD&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{...O,width:`${eV}px`,borderRight:"none"},children:[(0,t.jsxs)("div",{style:B,children:[(0,t.jsxs)("span",{style:{fontWeight:700,fontSize:"0.75rem",textTransform:"uppercase",letterSpacing:"0.05em"},children:["explorer"===eM&&"Workspace Explorer","git"===eM&&"Source Control","analytics"===eM&&"Telemetry & Cost","auditor"===eM&&"Session Auditor","browser"===eM&&"Browser Preview"]}),"explorer"===eM&&(0,t.jsxs)("div",{style:{display:"flex",gap:"0.25rem"},children:[g&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{onClick:()=>t$(g.path,"file"),style:ed,title:"New File at Root...",children:"📄+"}),(0,t.jsx)("button",{onClick:()=>t$(g.path,"directory"),style:ed,title:"New Folder at Root...",children:"📁+"})]}),(0,t.jsx)("button",{onClick:tA,disabled:eU,style:ed,title:"Refresh tree",children:"🔄"})]}),"git"===eM&&(0,t.jsx)("button",{onClick:tf,disabled:e7,style:ed,title:"Refresh git status",children:"🔄"})]}),(0,t.jsxs)("div",{style:D,children:["explorer"===eM&&(0,t.jsxs)(t.Fragment,{children:[g?(0,t.jsxs)("div",{style:{marginBottom:"1.5rem"},children:[(0,t.jsxs)("div",{style:E,children:["💼 ",g.name," ",(0,t.jsx)("span",{style:M,title:g.path,children:"root"})]}),(0,t.jsx)("div",{style:{padding:"0.25rem 0.5rem"},children:g.tree.map(e=>(0,t.jsx)(er,{node:e,onSelect:tG,onCreate:t$,onRename:tU,onDelete:tJ,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:{...E,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:ed,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:{...N,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)(er,{node:e,onSelect:tG,onCreate:t$,onRename:tU,onDelete:tJ,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"===eM&&(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:e3,children:e1?e3||"HEAD detached":"No Repository"})]}),e1&&(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.35rem",flexShrink:0},children:[e6.ahead>0&&(0,t.jsxs)("span",{style:{fontSize:"0.65rem",color:"#10b981",fontWeight:700},title:"Commits ahead of remote",children:["↑",e6.ahead]}),e6.behind>0&&(0,t.jsxs)("span",{style:{fontSize:"0.65rem",color:"#ef4444",fontWeight:700},title:"Commits behind remote",children:["↓",e6.behind]}),(0,t.jsx)("button",{onClick:tS,title:"Pull changes",style:eI,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:tk,title:"Push commits",style:eI,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:"📤"})]})]}),e1?(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:te,onChange:e=>tt(e.target.value),placeholder:"Commit message (Ctrl+Enter to commit)...",style:eP,onKeyDown:e=>{"Enter"===e.key&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),tw())}}),(0,t.jsx)("button",{onClick:tw,disabled:0===e0.length,style:{...eW,opacity:e0.length>0?1:.5,cursor:e0.length>0?"pointer":"not-allowed"},children:"✓ Commit"})]}),tQ.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 (",tQ.length,")"]}),(0,t.jsx)("button",{onClick:()=>tC(),title:"Unstage All",style:eL,children:"➖"})]}),(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"},children:tQ.map(e=>(0,t.jsx)(ez,{file:e,isStaged:!0,onAction:tj,onSelect:tz},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 (",tZ.length,")"]}),tZ.length>0&&(0,t.jsx)("button",{onClick:()=>tv(),title:"Stage All",style:eL,children:"➕"})]}),0===tZ.length&&0===tQ.length?(0,t.jsx)("div",{style:{color:"var(--success)",fontSize:"0.75rem",padding:"0.5rem 0"},children:"✔ Workspace clean."}):0===tZ.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:tZ.map(e=>(0,t.jsx)(ez,{file:e,isStaged:!1,onAction:tx,onSelect:tz,onIgnore:ty,onDiscard:tb},e.relativePath))})]})]}):(0,t.jsx)("div",{style:{padding:"1rem",color:"var(--muted)",fontSize:"0.75rem",fontStyle:"italic"},children:"Not a git repository."})]}),"browser"===eM&&(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:eA,onChange:e=>e$(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&&t_(eA)}}),(0,t.jsx)("button",{onClick:()=>t_(eA),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:()=>{e$(e.url),t_(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"===eM&&(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:eg,children:[(0,t.jsx)("div",{style:ef,children:"Input"}),(0,t.jsx)("div",{style:ex,children:(tr?.tokenUsage?.input??0).toLocaleString()})]}),(0,t.jsxs)("div",{style:eg,children:[(0,t.jsx)("div",{style:ef,children:"Output"}),(0,t.jsx)("div",{style:ex,children:(tr?.tokenUsage?.output??0).toLocaleString()})]}),(0,t.jsxs)("div",{style:{...eg,gridColumn:"span 2"},children:[(0,t.jsx)("div",{style:ef,children:"Cost"}),(0,t.jsxs)("div",{style:{...ex,color:"#10b981",fontSize:"1.25rem"},children:["$",(tr?.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:tn?.cpu??"0.0%"})]}),(0,t.jsx)("div",{style:ey,children:(0,t.jsx)("div",{style:{...eb,width:tn?.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:tn?.memory??"0.0MiB"})]}),(0,t.jsx)("div",{style:ey,children:(0,t.jsx)("div",{style:{...eb,width:tn?.memoryPercent||"0%",backgroundColor:"#eab308"}})})]}),(0,t.jsx)("div",{style:{fontSize:"0.6rem",color:"var(--muted)",marginTop:"0.25rem",fontStyle:"italic"},children:tn?.type?.includes("docker")?"🐳 Docker container statistics":"💻 Local process statistics"})]})]})]}),"auditor"===eM&&(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:tl,onChange:e=>ta(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(!tr?.logs)return;let t=new Blob([tr.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(!tr?.logs||0===tr.logs.length)return(0,t.jsx)("div",{style:{color:"var(--muted)",fontStyle:"italic",textAlign:"center"},children:"No logs captured."});let e=tr.logs.join("").replace(/\x1b\[[0-9;]*m/g,"").split(/\r?\n/),r=tl.trim()?e.filter(e=>e.toLowerCase().includes(tl.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(!tl.trim())return(0,t.jsx)("div",{children:e},r);let o=e.split(RegExp(`(${tl})`,"gi"));return(0,t.jsx)("div",{children:o.map((e,r)=>e.toLowerCase()===tl.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:tc,onChange:e=>tp(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:tu,onChange:e=>tm(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:()=>{tc.trim()&&tu.trim()&&(tT([...ts,{name:tc.trim(),command:tu.trim()}]),tp(""),tm(""))},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"}),ts.length>0&&(0,t.jsx)("div",{style:{marginTop:"0.25rem",maxHeight:"60px",overflowY:"auto"},children:ts.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:()=>{tT(ts.filter((e,t)=>t!==r))},style:{color:"var(--danger)",cursor:"pointer"},children:"✖"})]},r))})]})]})]})]})]}),(0,t.jsx)("div",{onMouseDown:eQ,style:{width:"4px",cursor:"col-resize",backgroundColor:eG?"var(--primary)":"var(--border)",transition:"background-color 0.15s ease",zIndex:10,alignSelf:"stretch"},onMouseEnter:e=>{eG||(e.currentTarget.style.backgroundColor="var(--border-focus)")},onMouseLeave:e=>{eG||(e.currentTarget.style.backgroundColor="var(--border)")},title:"Drag to resize sidebar"})]}),(0,t.jsxs)("div",{style:A,children:[(0,t.jsx)("div",{style:eC,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:()=>{th===r.id&&tg(null),c(r.id)},style:{...ew,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:{...$,borderBottom:"none"},children:[(0,t.jsxs)("div",{style:U,children:[(0,t.jsx)("div",{style:J,children:T.map(e=>(0,t.jsxs)("div",{style:{...V,backgroundColor:R===e.path?"#0b101b":"rgba(8,12,20,0.4)",borderColor:R===e.path?"var(--border-focus)":"transparent",color:R===e.path?"var(--foreground)":"var(--muted)"},onClick:()=>eF(e.path),children:[(0,t.jsxs)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[e.name," ",e.isModified&&(0,t.jsx)("span",{style:G,children:"●"})]}),(0,t.jsx)("span",{onClick:t=>{t.stopPropagation(),tK(e.path)},style:H,children:"✖"})]},e.path))}),tY&&!tY.path.startsWith("diff:")&&!tY.path.startsWith("browser:")&&(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[tX&&(0,t.jsxs)("div",{style:eS,children:[(0,t.jsx)("button",{onClick:()=>eB("edit"),style:{...ek,backgroundColor:"edit"===tq?"rgba(255,255,255,0.08)":"transparent",color:"edit"===tq?"var(--foreground)":"var(--muted)",borderColor:"edit"===tq?"var(--border-focus)":"transparent"},title:"Edit file",children:"✏️ Edit"}),(0,t.jsx)("button",{onClick:()=>eB("split"),style:{...ek,backgroundColor:"split"===tq?"rgba(255,255,255,0.08)":"transparent",color:"split"===tq?"var(--foreground)":"var(--muted)",borderColor:"split"===tq?"var(--border-focus)":"transparent"},title:"Split editor & preview",children:"🥞 Split"}),(0,t.jsx)("button",{onClick:()=>eB("preview"),style:{...ek,backgroundColor:"preview"===tq?"rgba(255,255,255,0.08)":"transparent",color:"preview"===tq?"var(--foreground)":"var(--muted)",borderColor:"preview"===tq?"var(--border-focus)":"transparent"},title:"Preview rendered document",children:"👁️ Preview"})]}),(0,t.jsx)("button",{onClick:t5,disabled:!tY.isModified,style:{...K,opacity:tY.isModified?1:.5,cursor:tY.isModified?"pointer":"not-allowed"},children:"💾 Save (Ctrl+S)"})]})]}),(0,t.jsx)("div",{style:_,children:tY?tY.path.startsWith("browser:")?(0,t.jsx)(eT,{url:tY.content}):tY.path.startsWith("diff:")?(0,t.jsx)(eR,{content:tY.content,filePath:tY.path.substring(5)}):tX?"preview"===tq?(0,t.jsx)("div",{style:{height:"100%",overflow:"hidden"},children:(0,t.jsx)(i,{content:tY.content})}):"split"===tq?(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:tY.content,onChange:e=>t0(e.target.value),style:Y,spellCheck:!1})}),(0,t.jsx)("div",{style:{flex:1,height:"100%",overflow:"hidden"},children:(0,t.jsx)(i,{content:tY.content})})]}):(0,t.jsx)("textarea",{value:tY.content,onChange:e=>t0(e.target.value),style:Y,spellCheck:!1}):(0,t.jsx)("textarea",{value:tY.content,onChange:e=>t0(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:eZ,style:{height:"4px",cursor:"row-resize",backgroundColor:eX?"var(--primary)":"var(--border)",transition:"background-color 0.15s ease",zIndex:10,width:"100%"},onMouseEnter:e=>{eX||(e.currentTarget.style.backgroundColor="var(--border-focus)")},onMouseLeave:e=>{eX||(e.currentTarget.style.backgroundColor="var(--border)")},title:"Drag to resize console"}),(0,t.jsxs)("div",{style:{...q,flex:"none",height:`${e_}px`},children:[(0,t.jsxs)("div",{style:Q,children:[(0,t.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:"0.5rem",fontWeight:600,fontSize:"0.8rem"},children:["🖥️ Session Console Bridge ",th&&"(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:th||"",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:Z,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:ee,children:"⚡ Trigger Prompt (/ccp)"})]})]}),(0,t.jsxs)("div",{style:ev,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:()=>tR("/undo"),style:ej,title:"Aider: undo last commit",children:"/undo"}),(0,t.jsx)("button",{onClick:()=>tR("/diff"),style:ej,title:"Aider: show git diff",children:"/diff"}),(0,t.jsx)("button",{onClick:()=>tR("/commit"),style:ej,title:"Aider: commit edits",children:"/commit"}),(0,t.jsx)("button",{onClick:()=>tR("/test"),style:ej,title:"Aider: run tests",children:"/test"}),(0,t.jsx)("button",{onClick:()=>tR("/clear"),style:ej,title:"Clear terminal screen",children:"/clear"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{onClick:()=>tR("/compact"),style:ej,title:"Claude Code: compact history",children:"/compact"}),(0,t.jsx)("button",{onClick:()=>tR("/history"),style:ej,title:"Claude Code: view history",children:"/history"}),(0,t.jsx)("button",{onClick:()=>tR("/reset"),style:ej,title:"Claude Code: reset conversation",children:"/reset"}),(0,t.jsx)("button",{onClick:()=>tR("/help"),style:ej,title:"Claude Code: show help",children:"/help"})]}),ts.map((e,r)=>(0,t.jsx)("button",{onClick:()=>tR(e.command),style:{...ej,borderColor:"rgba(168, 85, 247, 0.4)",color:"#c084fc"},title:`Inject command: ${e.command}`,children:e.name},r))]})]}),(0,t.jsxs)("div",{style:{...et,display:"flex",width:"100%"},children:[(0,t.jsx)("div",{style:{flex:1,height:"100%",borderRight:th?"1px solid var(--border)":"none",overflow:"hidden"},children:(0,t.jsx)(o.default,{sessionId:e,height:"100%",wsPort:u})}),th&&(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===th)?.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:th,height:"100%",wsPort:u})})]})]})]})]}),tW.type&&(0,t.jsx)("div",{style:eo,children:(0,t.jsxs)("div",{style:en,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:tV,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=>tI({...tW,inputValue:e.target.value}),style:ei,autoFocus:!0,placeholder:"rename"===tW.type?"Enter new name":"Enter name"}),(0,t.jsxs)("div",{style:el,children:[(0,t.jsx)("button",{type:"button",onClick:()=>tI({type:null,targetPath:null,inputValue:"",error:null}),style:ea,children:"Cancel"}),(0,t.jsx)("button",{type:"submit",style:es,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:el,children:[(0,t.jsx)("button",{type:"button",onClick:()=>tI({type:null,targetPath:null,inputValue:"",error:null}),style:ea,children:"Cancel"}),(0,t.jsx)("button",{onClick:()=>tV(),style:{...es,backgroundColor:"var(--danger)"},children:"Delete Permanently"})]})]})]})}),tL&&(0,t.jsx)("div",{style:ec,onClick:()=>tF(!1),children:(0,t.jsxs)("div",{style:ep,onClick:e=>e.stopPropagation(),children:[(0,t.jsx)("input",{type:"text",value:tO,onChange:e=>{tB(e.target.value),tN(0)},onKeyDown:e=>{"ArrowDown"===e.key?(e.preventDefault(),tN(e=>(e+1)%Math.max(1,t1.length))):"ArrowUp"===e.key?(e.preventDefault(),tN(e=>(e-1+t1.length)%Math.max(1,t1.length))):"Enter"===e.key?(e.preventDefault(),t1[tM]&&(tG(t1[tM].path),tF(!1))):"Escape"===e.key&&(e.preventDefault(),tF(!1))},placeholder:"Search files by name or path...",style:eu,autoFocus:!0}),(0,t.jsx)("div",{style:em,children:t1.length>0?t1.map((e,r)=>(0,t.jsxs)("div",{onClick:()=>{tG(e.path),tF(!1)},style:{...eh,backgroundColor:r===tM?"rgba(168, 85, 247, 0.15)":"transparent",borderLeft:r===tM?"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))}]);