agentstudio 0.1.30 → 0.1.31

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 (120) hide show
  1. package/index.d.ts.map +1 -1
  2. package/index.js +20 -0
  3. package/index.js.map +1 -1
  4. package/package.json +2 -1
  5. package/public/assets/{AgentsPage-VVVyzMq0.js → AgentsPage-DKZWFW8X.js} +2 -2
  6. package/public/assets/{Button-B9AQtJ7x.js → Button-cN1WPLWN.js} +1 -1
  7. package/public/assets/{ChatPage-p1JCfA2A.js → ChatPage-D0FGsyAT.js} +4 -4
  8. package/public/assets/{CommandForm-B_beYCv3.js → CommandForm-CZRscRtm.js} +2 -2
  9. package/public/assets/{CommandsPage-Blc1Kt4Z.js → CommandsPage-BejQhsY5.js} +1 -1
  10. package/public/assets/{DashboardPage-Dokn4y-N.js → DashboardPage-09thi3Rh.js} +1 -1
  11. package/public/assets/{FileBrowser-Dg9PfXOo.js → FileBrowser-Z9hLFPpv.js} +4 -4
  12. package/public/assets/FileExplorer-BB3suHzW.js +1 -0
  13. package/public/assets/GeneralSettingsPage-Brmz_AtE.js +1 -0
  14. package/public/assets/LandingPage-BpoDlnDx.js +1 -0
  15. package/public/assets/{LoginPage-D2Ykhr7D.js → LoginPage-CX-yRlVd.js} +5 -5
  16. package/public/assets/McpAdminSettingsPage-CmOXQouL.js +7 -0
  17. package/public/assets/{McpPage-DkD9BOrP.js → McpPage-DoAEv0XV.js} +1 -1
  18. package/public/assets/MemorySettingsPage-CFS6ZcJr.js +1 -0
  19. package/public/assets/PluginsPage-BCdGy7Rw.js +1 -0
  20. package/public/assets/{ProjectSelector-B1_umywl.js → ProjectSelector-CION-PmR.js} +1 -1
  21. package/public/assets/{ProjectsPage-CQ8zwJ5D.js → ProjectsPage-Wb6pN9Hv.js} +5 -5
  22. package/public/assets/ScheduledTasksPage-DLgaIyjh.js +1 -0
  23. package/public/assets/{SettingsLayout-CccK5RVj.js → SettingsLayout-BIsie6AV.js} +1 -1
  24. package/public/assets/{SkillsPage-D_LECy2S.js → SkillsPage-B0UobEC_.js} +1 -1
  25. package/public/assets/{SubagentForm-D9EFQxlZ.js → SubagentForm-Cq06CQqr.js} +3 -3
  26. package/public/assets/SubagentsPage-BSaDf99n.js +1 -0
  27. package/public/assets/SystemInfoPage-BMlzVgxc.js +1 -0
  28. package/public/assets/{TelemetrySettingsPage-DMngnKDW.js → TelemetrySettingsPage-DvOSMEwR.js} +1 -1
  29. package/public/assets/{ToastTestPage-CafmBcnU.js → ToastTestPage-Du-SgUz6.js} +1 -1
  30. package/public/assets/{ToolsList-CnepUgI-.js → ToolsList-C9LELdNX.js} +1 -1
  31. package/public/assets/UnifiedToolSelector-Bw-E7HW4.js +1 -0
  32. package/public/assets/{VersionSettingsPage-D9hYO4VL.js → VersionSettingsPage-CU4oEyqT.js} +2 -2
  33. package/public/assets/WebSocketTunnelPage-CSTkG4E2.js +1 -0
  34. package/public/assets/{_basePickBy-lvDxpUoY.js → _basePickBy-DxKqIWB6.js} +1 -1
  35. package/public/assets/{_baseUniq-DyqfOLmW.js → _baseUniq-CKJzhTgF.js} +1 -1
  36. package/public/assets/{agents-DmLFhp96.js → agents-D9dWnZr0.js} +1 -1
  37. package/public/assets/{arc-DuR7lLva.js → arc-C2iholw8.js} +1 -1
  38. package/public/assets/{architectureDiagram-VXUJARFQ-CkKlTxxx.js → architectureDiagram-VXUJARFQ-xG63KrIQ.js} +1 -1
  39. package/public/assets/{blockDiagram-VD42YOAC-DdR02awp.js → blockDiagram-VD42YOAC-C4NFx0nk.js} +1 -1
  40. package/public/assets/{c4Diagram-YG6GDRKO-MlkMVL2r.js → c4Diagram-YG6GDRKO-BadvTLDv.js} +1 -1
  41. package/public/assets/channel-Cgo35bJG.js +1 -0
  42. package/public/assets/{chunk-4BX2VUAB-BI02zXQl.js → chunk-4BX2VUAB-Id5_IQHH.js} +1 -1
  43. package/public/assets/{chunk-55IACEB6-DtWZPbH-.js → chunk-55IACEB6-Cr7Dy_eo.js} +1 -1
  44. package/public/assets/{chunk-B4BG7PRW-yLeRKRZl.js → chunk-B4BG7PRW-BpvaZEv8.js} +1 -1
  45. package/public/assets/{chunk-DI55MBZ5-DF-5ELa5.js → chunk-DI55MBZ5-Bt4gChdE.js} +1 -1
  46. package/public/assets/{chunk-FMBD7UC4-BjJNxbrL.js → chunk-FMBD7UC4-C4oK_fXh.js} +1 -1
  47. package/public/assets/{chunk-QN33PNHL-rs7Z3IPT.js → chunk-QN33PNHL-DoNppdc6.js} +1 -1
  48. package/public/assets/{chunk-QZHKN3VN-DoIXOkrg.js → chunk-QZHKN3VN-B3mVCo-F.js} +1 -1
  49. package/public/assets/{chunk-TZMSLE5B-xkKgCGO2.js → chunk-TZMSLE5B-BzQraEZC.js} +1 -1
  50. package/public/assets/classDiagram-2ON5EDUG-hE-J96yq.js +1 -0
  51. package/public/assets/classDiagram-v2-WZHVMYZB-hE-J96yq.js +1 -0
  52. package/public/assets/clone-BR2LkGvn.js +1 -0
  53. package/public/assets/{cose-bilkent-S5V4N54A-BIz6tY7t.js → cose-bilkent-S5V4N54A-OR_HeMV9.js} +1 -1
  54. package/public/assets/{dagre-6UL2VRFP-CponDeYZ.js → dagre-6UL2VRFP-qr8I_vKq.js} +1 -1
  55. package/public/assets/{diagram-PSM6KHXK-D31S6iiK.js → diagram-PSM6KHXK-vB_CZuML.js} +1 -1
  56. package/public/assets/{diagram-QEK2KX5R-C6RWP-cs.js → diagram-QEK2KX5R-C0MTx_Nc.js} +1 -1
  57. package/public/assets/{diagram-S2PKOQOG-BKs_7af1.js → diagram-S2PKOQOG-Ci-hYM5v.js} +1 -1
  58. package/public/assets/{erDiagram-Q2GNP2WA-Ro9hB6-s.js → erDiagram-Q2GNP2WA-Cw6hHxHG.js} +1 -1
  59. package/public/assets/{flowDiagram-NV44I4VS-IKSFEVlB.js → flowDiagram-NV44I4VS-D8O-Xk2x.js} +1 -1
  60. package/public/assets/{ganttDiagram-LVOFAZNH-CPDNSzAq.js → ganttDiagram-LVOFAZNH-UxNErvuA.js} +1 -1
  61. package/public/assets/{gitGraphDiagram-NY62KEGX-c_yb5ztL.js → gitGraphDiagram-NY62KEGX-BeX3IBYd.js} +1 -1
  62. package/public/assets/{graph-BoMdSZEp.js → graph-Cf8oiq5L.js} +1 -1
  63. package/public/assets/{index-BUj-AMWq.js → index-1qMWEcRb.js} +27 -27
  64. package/public/assets/index-isG0t1ZM.css +1 -0
  65. package/public/assets/infoDiagram-F6ZHWCRC-Cj8LA9DD.js +2 -0
  66. package/public/assets/{journeyDiagram-XKPGCS4Q-D4izttrO.js → journeyDiagram-XKPGCS4Q-COucIUOw.js} +1 -1
  67. package/public/assets/{kanban-definition-3W4ZIXB7-DE7WCrea.js → kanban-definition-3W4ZIXB7-Dg9YHEya.js} +1 -1
  68. package/public/assets/{layout-BezNHWMi.js → layout-CJdedPgP.js} +1 -1
  69. package/public/assets/{linear-KRX5ckNK.js → linear-B7eUYSHc.js} +1 -1
  70. package/public/assets/{mindmap-definition-VGOIOE7T-Dlr09KqO.js → mindmap-definition-VGOIOE7T-DfYDh2Gl.js} +1 -1
  71. package/public/assets/{pieDiagram-ADFJNKIX-Bbzzfu-z.js → pieDiagram-ADFJNKIX-s6DjRKNr.js} +1 -1
  72. package/public/assets/{quadrantDiagram-AYHSOK5B-DubsKDPG.js → quadrantDiagram-AYHSOK5B-N1Ychsgt.js} +1 -1
  73. package/public/assets/{requirementDiagram-UZGBJVZJ-B-rG6Gty.js → requirementDiagram-UZGBJVZJ-Dy_oYJbC.js} +1 -1
  74. package/public/assets/{sankeyDiagram-TZEHDZUN-DU7Rgr_5.js → sankeyDiagram-TZEHDZUN-BrnrcBF3.js} +1 -1
  75. package/public/assets/{sequenceDiagram-WL72ISMW-BRlH6dPX.js → sequenceDiagram-WL72ISMW-zi7w-y8F.js} +1 -1
  76. package/public/assets/{stateDiagram-FKZM4ZOC-BeAzs0_-.js → stateDiagram-FKZM4ZOC-B33B5gSZ.js} +1 -1
  77. package/public/assets/stateDiagram-v2-4FDKWEC3-Bx-g7opY.js +1 -0
  78. package/public/assets/{table-aqcpYX4Z.js → table-aiCRrLk5.js} +1 -1
  79. package/public/assets/{timeline-definition-IT6M3QCI-BU_B1RmT.js → timeline-definition-IT6M3QCI-Bby9ruvD.js} +1 -1
  80. package/public/assets/{tools-XV29tg8x.js → tools-zTM46-tZ.js} +1 -1
  81. package/public/assets/{treemap-KMMF4GRG-CP2M7QfX.js → treemap-KMMF4GRG-CxPzxrDC.js} +1 -1
  82. package/public/assets/{ui-components-ND8WdSiV.js → ui-components-BsYwJvCF.js} +138 -123
  83. package/public/assets/{useAgents-COcSvqDE.js → useAgents-BlQGwXjx.js} +1 -1
  84. package/public/assets/{useClaudeVersions-C8b4adpW.js → useClaudeVersions-DJ6VKG1y.js} +1 -1
  85. package/public/assets/{useCommands-D79pjz3C.js → useCommands-DOxDeFSx.js} +1 -1
  86. package/public/assets/{useProjects-CP0Q5-jg.js → useProjects-cgsJNlsy.js} +1 -1
  87. package/public/assets/{useSessions-C2gXprHI.js → useSessions-BAxZ6l2n.js} +1 -1
  88. package/public/assets/{xychartDiagram-PRI3JC2R-OdQKUqyr.js → xychartDiagram-PRI3JC2R-C-X05eqT.js} +1 -1
  89. package/public/index.html +5 -5
  90. package/routes/projects.d.ts.map +1 -1
  91. package/routes/projects.js +80 -1
  92. package/routes/projects.js.map +1 -1
  93. package/routes/tunnel.d.ts +10 -0
  94. package/routes/tunnel.d.ts.map +1 -0
  95. package/routes/tunnel.js +296 -0
  96. package/routes/tunnel.js.map +1 -0
  97. package/services/a2a/a2aQueryService.d.ts.map +1 -1
  98. package/services/a2a/a2aQueryService.js +95 -52
  99. package/services/a2a/a2aQueryService.js.map +1 -1
  100. package/services/tunnelService.d.ts +148 -0
  101. package/services/tunnelService.d.ts.map +1 -0
  102. package/services/tunnelService.js +406 -0
  103. package/services/tunnelService.js.map +1 -0
  104. package/public/assets/FileExplorer-B7BFy0Tu.js +0 -1
  105. package/public/assets/GeneralSettingsPage-DLSSSadp.js +0 -1
  106. package/public/assets/LandingPage-Ck2WpTto.js +0 -1
  107. package/public/assets/McpAdminSettingsPage-BAKOckWx.js +0 -7
  108. package/public/assets/MemorySettingsPage-CiUs5u2g.js +0 -1
  109. package/public/assets/PluginsPage-CkXNjZMq.js +0 -1
  110. package/public/assets/ScheduledTasksPage-BjSzD4T2.js +0 -1
  111. package/public/assets/SubagentsPage-D_sdehiT.js +0 -1
  112. package/public/assets/SystemInfoPage-vz5Ey9DK.js +0 -1
  113. package/public/assets/UnifiedToolSelector-CnFTY88B.js +0 -1
  114. package/public/assets/channel-DHM1jRJ0.js +0 -1
  115. package/public/assets/classDiagram-2ON5EDUG-BJtIba9N.js +0 -1
  116. package/public/assets/classDiagram-v2-WZHVMYZB-BJtIba9N.js +0 -1
  117. package/public/assets/clone-Bbn_OKGL.js +0 -1
  118. package/public/assets/index-CEBbr0XW.css +0 -1
  119. package/public/assets/infoDiagram-F6ZHWCRC-904Ek2Zh.js +0 -2
  120. package/public/assets/stateDiagram-v2-4FDKWEC3-C0c8d9Xs.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnelService.d.ts","sourceRoot":"","sources":["../../src/services/tunnelService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,406 @@
1
+ "use strict";
2
+ /**
3
+ * Tunnel Service
4
+ *
5
+ * Manages WebSocket tunnel connection to allow external access to local Agent Studio.
6
+ * Uses tunely library for tunnel client functionality.
7
+ *
8
+ * Features:
9
+ * - Auto-connect on startup if configured
10
+ * - Automatic reconnection on disconnect
11
+ * - Connection status tracking
12
+ * - Configuration persistence
13
+ */
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.tunnelService = void 0;
19
+ const tunely_1 = require("tunely");
20
+ const promises_1 = __importDefault(require("fs/promises"));
21
+ const path_1 = __importDefault(require("path"));
22
+ const paths_js_1 = require("../config/paths.js");
23
+ // Configuration file paths
24
+ // Port-specific config takes priority, then falls back to default config
25
+ const getPortConfigFile = (port) => path_1.default.join(paths_js_1.CLAUDE_AGENT_DIR, `tunnel-config-${port}.json`);
26
+ const DEFAULT_CONFIG_FILE = path_1.default.join(paths_js_1.CLAUDE_AGENT_DIR, 'tunnel-config.json');
27
+ /**
28
+ * Default tunnel configuration
29
+ */
30
+ const DEFAULT_CONFIG = {
31
+ enabled: false,
32
+ serverUrl: 'https://hitl.woa.com',
33
+ token: '',
34
+ tunnelName: '',
35
+ protocol: 'https',
36
+ reconnectInterval: 5000,
37
+ maxReconnectAttempts: 0, // Infinite
38
+ };
39
+ /**
40
+ * Get WebSocket URL from base URL
41
+ * e.g., https://hitl.woa.com -> wss://hitl.woa.com/ws/tunnel
42
+ */
43
+ function getWebSocketUrl(serverUrl) {
44
+ const apiBaseUrl = getApiBaseUrl(serverUrl);
45
+ const url = new URL(apiBaseUrl);
46
+ const wsProtocol = url.protocol === 'https:' ? 'wss:' : 'ws:';
47
+ return `${wsProtocol}//${url.host}/ws/tunnel`;
48
+ }
49
+ /**
50
+ * Get API base URL for tunnel management
51
+ * User configures the base URL (e.g., https://hitl.woa.com)
52
+ * API endpoints are under /api/tunnels/
53
+ */
54
+ function getApiBaseUrl(serverUrl) {
55
+ // If it's a WebSocket URL, convert to HTTP
56
+ if (serverUrl.startsWith('wss://') || serverUrl.startsWith('ws://')) {
57
+ const url = new URL(serverUrl);
58
+ const protocol = url.protocol === 'wss:' ? 'https:' : 'http:';
59
+ return `${protocol}//${url.host}`;
60
+ }
61
+ // Otherwise use as-is
62
+ return serverUrl.replace(/\/+$/, ''); // Remove trailing slashes
63
+ }
64
+ /**
65
+ * Tunnel Service singleton
66
+ */
67
+ class TunnelService {
68
+ client = null;
69
+ config = { ...DEFAULT_CONFIG };
70
+ status = {
71
+ enabled: false,
72
+ connected: false,
73
+ domain: null,
74
+ lastError: null,
75
+ connectedAt: null,
76
+ reconnectCount: 0,
77
+ configSource: 'none',
78
+ localPort: 4936,
79
+ };
80
+ localPort = 4936; // Default Agent Studio port
81
+ initialized = false;
82
+ configSource = 'none';
83
+ /**
84
+ * Initialize the tunnel service
85
+ * Loads config and auto-connects if enabled
86
+ */
87
+ async initialize(localPort) {
88
+ if (this.initialized) {
89
+ return;
90
+ }
91
+ if (localPort) {
92
+ this.localPort = localPort;
93
+ }
94
+ // Load saved configuration
95
+ await this.loadConfig();
96
+ this.initialized = true;
97
+ // Auto-connect if enabled
98
+ if (this.config.enabled && this.config.token) {
99
+ console.log('[Tunnel] Auto-connecting (enabled in config)...');
100
+ await this.connect();
101
+ }
102
+ else {
103
+ console.log('[Tunnel] Not auto-connecting (disabled or no token)');
104
+ }
105
+ }
106
+ /**
107
+ * Load tunnel configuration from disk
108
+ * Priority: port-specific config > default config
109
+ */
110
+ async loadConfig() {
111
+ const portConfigFile = getPortConfigFile(this.localPort);
112
+ // Try port-specific config first
113
+ try {
114
+ const data = await promises_1.default.readFile(portConfigFile, 'utf-8');
115
+ const savedConfig = JSON.parse(data);
116
+ this.config = { ...DEFAULT_CONFIG, ...savedConfig };
117
+ this.configSource = 'port-specific';
118
+ console.log(`[Tunnel] Loaded port-specific config from: ${portConfigFile}`);
119
+ }
120
+ catch (error) {
121
+ if (error.code === 'ENOENT') {
122
+ // Port-specific config not found, try default config
123
+ try {
124
+ const data = await promises_1.default.readFile(DEFAULT_CONFIG_FILE, 'utf-8');
125
+ const savedConfig = JSON.parse(data);
126
+ this.config = { ...DEFAULT_CONFIG, ...savedConfig };
127
+ this.configSource = 'default';
128
+ console.log(`[Tunnel] Loaded default config from: ${DEFAULT_CONFIG_FILE}`);
129
+ }
130
+ catch (defaultError) {
131
+ if (defaultError.code !== 'ENOENT') {
132
+ console.error('[Tunnel] Error loading default config:', defaultError);
133
+ }
134
+ this.configSource = 'none';
135
+ }
136
+ }
137
+ else {
138
+ console.error('[Tunnel] Error loading port-specific config:', error);
139
+ this.configSource = 'none';
140
+ }
141
+ }
142
+ this.status.enabled = this.config.enabled;
143
+ this.status.configSource = this.configSource;
144
+ this.status.localPort = this.localPort;
145
+ return this.config;
146
+ }
147
+ /**
148
+ * Save tunnel configuration to disk
149
+ * Always saves to port-specific config file
150
+ */
151
+ async saveConfig(config) {
152
+ // Merge with existing config
153
+ this.config = { ...this.config, ...config };
154
+ this.status.enabled = this.config.enabled;
155
+ // Always save to port-specific config file
156
+ const portConfigFile = getPortConfigFile(this.localPort);
157
+ // Ensure directory exists
158
+ await promises_1.default.mkdir(path_1.default.dirname(portConfigFile), { recursive: true });
159
+ // Save to disk
160
+ await promises_1.default.writeFile(portConfigFile, JSON.stringify(this.config, null, 2), 'utf-8');
161
+ // Update config source
162
+ this.configSource = 'port-specific';
163
+ this.status.configSource = 'port-specific';
164
+ console.log(`[Tunnel] Configuration saved to: ${portConfigFile}`);
165
+ }
166
+ /**
167
+ * Get current tunnel configuration
168
+ */
169
+ getConfig() {
170
+ // Return config without exposing the full token
171
+ return {
172
+ ...this.config,
173
+ token: this.config.token ? `${this.config.token.slice(0, 8)}...` : '',
174
+ };
175
+ }
176
+ /**
177
+ * Get current tunnel status
178
+ */
179
+ getStatus() {
180
+ return { ...this.status };
181
+ }
182
+ /**
183
+ * Connect to the tunnel server
184
+ */
185
+ async connect() {
186
+ if (!this.config.token) {
187
+ throw new Error('Tunnel token is not configured');
188
+ }
189
+ // Disconnect existing connection if any
190
+ if (this.client) {
191
+ this.disconnect();
192
+ }
193
+ const targetUrl = `http://localhost:${this.localPort}`;
194
+ // Use websocketUrl from config if available, otherwise generate from serverUrl
195
+ const wsUrl = this.config.websocketUrl || getWebSocketUrl(this.config.serverUrl);
196
+ console.log(`[Tunnel] Connecting to ${wsUrl}...`);
197
+ console.log(`[Tunnel] Token: ${this.config.token.slice(0, 10)}...`);
198
+ console.log(`[Tunnel] Target: ${targetUrl}`);
199
+ const clientConfig = {
200
+ serverUrl: wsUrl,
201
+ token: this.config.token,
202
+ targetUrl,
203
+ reconnectInterval: this.config.reconnectInterval || 5000,
204
+ maxReconnectAttempts: this.config.maxReconnectAttempts || 0,
205
+ };
206
+ this.client = new tunely_1.TunnelClient(clientConfig);
207
+ // Set up event handlers
208
+ this.client.on('onConnect', (domain) => {
209
+ console.log(`[Tunnel] Connected! Domain: ${domain}`);
210
+ this.status.connected = true;
211
+ this.status.domain = domain;
212
+ this.status.lastError = null;
213
+ this.status.connectedAt = new Date().toISOString();
214
+ this.status.reconnectCount = 0;
215
+ });
216
+ this.client.on('onDisconnect', () => {
217
+ console.log('[Tunnel] Disconnected');
218
+ this.status.connected = false;
219
+ this.status.reconnectCount++;
220
+ });
221
+ this.client.on('onError', (error) => {
222
+ console.error('[Tunnel] Error:', error.message);
223
+ this.status.lastError = error.message;
224
+ });
225
+ this.client.on('onRequest', (request) => {
226
+ // Log incoming requests (optional, for debugging)
227
+ console.log(`[Tunnel] Request: ${request.method} ${request.path}`);
228
+ });
229
+ // Start the client (runs in background, doesn't block)
230
+ this.client.run().catch((error) => {
231
+ console.error('[Tunnel] Client run error:', error);
232
+ this.status.lastError = error.message;
233
+ });
234
+ // Wait a bit for initial connection
235
+ await new Promise((resolve) => setTimeout(resolve, 1000));
236
+ if (!this.status.connected) {
237
+ console.log('[Tunnel] Initial connection pending...');
238
+ }
239
+ }
240
+ /**
241
+ * Disconnect from the tunnel server
242
+ */
243
+ disconnect() {
244
+ if (this.client) {
245
+ console.log('[Tunnel] Disconnecting...');
246
+ this.client.stop();
247
+ this.client = null;
248
+ }
249
+ this.status.connected = false;
250
+ this.status.domain = null;
251
+ this.status.connectedAt = null;
252
+ }
253
+ /**
254
+ * Update configuration and optionally reconnect
255
+ */
256
+ async updateConfig(newConfig, reconnect = true) {
257
+ await this.saveConfig(newConfig);
258
+ if (reconnect && this.config.enabled && this.config.token) {
259
+ await this.connect();
260
+ }
261
+ else if (!this.config.enabled) {
262
+ this.disconnect();
263
+ }
264
+ }
265
+ /**
266
+ * Test tunnel connection with current config
267
+ */
268
+ async testConnection() {
269
+ if (!this.config.token) {
270
+ return { success: false, error: 'Token is not configured' };
271
+ }
272
+ try {
273
+ // Try to connect
274
+ await this.connect();
275
+ // Wait for connection
276
+ await new Promise((resolve) => setTimeout(resolve, 3000));
277
+ if (this.status.connected) {
278
+ return { success: true, domain: this.status.domain || undefined };
279
+ }
280
+ else {
281
+ return {
282
+ success: false,
283
+ error: this.status.lastError || 'Connection timeout',
284
+ };
285
+ }
286
+ }
287
+ catch (error) {
288
+ return {
289
+ success: false,
290
+ error: error instanceof Error ? error.message : String(error),
291
+ };
292
+ }
293
+ }
294
+ /**
295
+ * Check if a tunnel name is available
296
+ * @param name The tunnel name to check (e.g., "my-dev")
297
+ */
298
+ async checkTunnelName(name) {
299
+ if (!name || name.trim() === '') {
300
+ return { available: false, reason: '隧道名称不能为空' };
301
+ }
302
+ const apiBaseUrl = getApiBaseUrl(this.config.serverUrl);
303
+ try {
304
+ const response = await fetch(`${apiBaseUrl}/api/tunnels/check-availability?name=${encodeURIComponent(name)}`);
305
+ if (!response.ok) {
306
+ const errorData = await response.json().catch(() => ({}));
307
+ return {
308
+ available: false,
309
+ reason: errorData.reason || errorData.message || errorData.error || `检查失败: HTTP ${response.status}`
310
+ };
311
+ }
312
+ const data = await response.json();
313
+ return {
314
+ available: data.available !== false,
315
+ reason: data.reason || data.message,
316
+ };
317
+ }
318
+ catch (error) {
319
+ console.error('[Tunnel] Error checking name availability:', error);
320
+ return {
321
+ available: false,
322
+ reason: error instanceof Error ? error.message : '网络请求失败',
323
+ };
324
+ }
325
+ }
326
+ /**
327
+ * Create a tunnel and get the token
328
+ * @param name The tunnel name to create (e.g., "my-dev")
329
+ */
330
+ async createTunnel(name) {
331
+ if (!name || name.trim() === '') {
332
+ return { success: false, error: '隧道名称不能为空' };
333
+ }
334
+ const apiBaseUrl = getApiBaseUrl(this.config.serverUrl);
335
+ try {
336
+ const response = await fetch(`${apiBaseUrl}/api/tunnels`, {
337
+ method: 'POST',
338
+ headers: {
339
+ 'Content-Type': 'application/json',
340
+ },
341
+ body: JSON.stringify({
342
+ domain: name.trim(),
343
+ name: name.trim(),
344
+ }),
345
+ });
346
+ if (!response.ok) {
347
+ const errorData = await response.json().catch(() => ({}));
348
+ return {
349
+ success: false,
350
+ error: errorData.reason || errorData.message || errorData.error || `创建失败: HTTP ${response.status}`
351
+ };
352
+ }
353
+ const data = await response.json();
354
+ if (data.token) {
355
+ return {
356
+ success: true,
357
+ token: data.token,
358
+ domain: data.domain || `${name}.tunnel`,
359
+ };
360
+ }
361
+ else {
362
+ return {
363
+ success: false,
364
+ error: data.error || data.message || '未返回 Token',
365
+ };
366
+ }
367
+ }
368
+ catch (error) {
369
+ console.error('[Tunnel] Error creating tunnel:', error);
370
+ return {
371
+ success: false,
372
+ error: error instanceof Error ? error.message : '网络请求失败',
373
+ };
374
+ }
375
+ }
376
+ /**
377
+ * Create tunnel and save config in one step
378
+ * @param name The tunnel name to create
379
+ * @param autoConnect Whether to enable auto-connect
380
+ * @param protocol The protocol to use (https or http)
381
+ * @param websocketUrl The WebSocket URL from server info
382
+ * @param domainSuffix The domain suffix (e.g., ".hitl.woa.com")
383
+ */
384
+ async createAndSave(name, autoConnect = false, protocol = 'https', websocketUrl, domainSuffix) {
385
+ const result = await this.createTunnel(name);
386
+ if (result.success && result.token) {
387
+ // Save the config with the new token
388
+ await this.saveConfig({
389
+ enabled: autoConnect,
390
+ tunnelName: name,
391
+ token: result.token,
392
+ protocol,
393
+ websocketUrl,
394
+ domainSuffix,
395
+ });
396
+ // Try to connect
397
+ if (autoConnect) {
398
+ await this.connect();
399
+ }
400
+ }
401
+ return result;
402
+ }
403
+ }
404
+ // Export singleton instance
405
+ exports.tunnelService = new TunnelService();
406
+ //# sourceMappingURL=tunnelService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnelService.js","sourceRoot":"","sources":["../../src/services/tunnelService.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- import{c as Se}from"./syntax-highlighting-CnREyncB.js";import{j as e,T as He}from"./data-structures-C0h9Oap1.js";import{r as c,W as Fe}from"./monaco-editor-DHKm5-VF.js";import{aA as u,E as Te,$ as Me,V as De,aB as Ae,L as T,aC as Re,X as ne,aD as Ve,k as $e,l as Ie}from"./ui-components-ND8WdSiV.js";import{b as me,a as _,A as M}from"./agents-DmLFhp96.js";import{u as ue}from"./tools-XV29tg8x.js";function Oe(r){return u({attr:{viewBox:"0 0 384 512"},child:[{tag:"path",attr:{d:"M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z"},child:[]}]})(r)}function ie(r){return u({attr:{viewBox:"0 0 384 512"},child:[{tag:"path",attr:{d:"M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z"},child:[]}]})(r)}function Be(r){return u({attr:{viewBox:"0 0 384 512"},child:[{tag:"path",attr:{d:"M277.74 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8C296 53.2 242.84 0 242.84 0c21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zm114.6-176.2c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3zm-6.1 270.5a12.19 12.19 0 0 1-2 2.6c128.3-33.7 81.1-118.9 19.8-97.3a17.33 17.33 0 0 0-8.2 6.3 70.45 70.45 0 0 1 11-3c31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2C232.84 509.4 401 461.3 348 437.4zM124.44 396c-78.7 22 47.9 67.4 148.1 24.5a185.89 185.89 0 0 1-28.2-13.8c-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.64 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9a60.37 60.37 0 0 1-21.1-12.8z"},child:[]}]})(r)}function Pe(r){return u({attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"},child:[]}]})(r)}function _e(r){return u({attr:{viewBox:"0 0 640 512"},child:[{tag:"path",attr:{d:"M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z"},child:[]}]})(r)}function qe(r){return u({attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"},child:[]}]})(r)}function We(r){return u({attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zm-30.3-120.3c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zm-149.7-15c25.3 0 45.8-20.5 45.8-45.8s-20.5-45.8-45.8-45.8c-25.3 0-45.8 20.5-45.8 45.8s20.5 45.8 45.8 45.8z"},child:[]}]})(r)}function Ue(r){return u({attr:{viewBox:"0 0 384 512"},child:[{tag:"path",attr:{d:"M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z"},child:[]}]})(r)}function le(r){return u({attr:{viewBox:"0 0 384 512"},child:[{tag:"path",attr:{d:"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"},child:[]}]})(r)}function q(r){return u({attr:{viewBox:"0 0 384 512"},child:[{tag:"path",attr:{d:"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"},child:[]}]})(r)}function Je(r){return u({attr:{viewBox:"0 0 576 512"},child:[{tag:"path",attr:{d:"M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z"},child:[]}]})(r)}function Ke(r){return u({attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z"},child:[]}]})(r)}function j(r){return u({attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z"},child:[]}]})(r)}function Ge(r){return u({attr:{viewBox:"0 0 16 16",fill:"currentColor"},child:[{tag:"path",attr:{d:"M4.708 5.578L2.061 8.224l2.647 2.646-.708.708-3-3V7.87l3-3 .708.708zm7-.708L11 5.578l2.647 2.646L11 10.87l.708.708 3-3V7.87l-3-3zM4.908 13l.894.448 5-10L9.908 3l-5 10z"},child:[]}]})(r)}function oe(r){return u({attr:{viewBox:"0 0 16 16",fill:"currentColor"},child:[{tag:"path",attr:{fillRule:"evenodd",clipRule:"evenodd",d:"M6 2.984V2h-.09c-.313 0-.616.062-.909.185a2.33 2.33 0 0 0-.775.53 2.23 2.23 0 0 0-.493.753v.001a3.542 3.542 0 0 0-.198.83v.002a6.08 6.08 0 0 0-.024.863c.012.29.018.58.018.869 0 .203-.04.393-.117.572v.001a1.504 1.504 0 0 1-.765.787 1.376 1.376 0 0 1-.558.115H2v.984h.09c.195 0 .38.04.556.121l.001.001c.178.078.329.184.455.318l.002.002c.13.13.233.285.307.465l.001.002c.078.18.117.368.117.566 0 .29-.006.58-.018.869-.012.296-.004.585.024.87v.001c.033.283.099.558.197.824v.001c.106.273.271.524.494.753.223.23.482.407.775.53.293.123.596.185.91.185H6v-.984h-.09c-.2 0-.387-.038-.563-.115a1.613 1.613 0 0 1-.457-.32 1.659 1.659 0 0 1-.309-.467c-.074-.18-.11-.37-.11-.573 0-.228.003-.453.011-.672.008-.228.008-.45 0-.665a4.639 4.639 0 0 0-.055-.64 2.682 2.682 0 0 0-.168-.609A2.284 2.284 0 0 0 3.522 8a2.284 2.284 0 0 0 .738-.955c.08-.192.135-.393.168-.602.033-.21.051-.423.055-.64.008-.22.008-.442 0-.666-.008-.224-.012-.45-.012-.678a1.47 1.47 0 0 1 .877-1.354 1.33 1.33 0 0 1 .563-.121H6zm4 10.032V14h.09c.313 0 .616-.062.909-.185.293-.123.552-.3.775-.53.223-.23.388-.48.493-.753v-.001c.1-.266.165-.543.198-.83v-.002c.028-.28.036-.567.024-.863-.012-.29-.018-.58-.018-.869 0-.203.04-.393.117-.572v-.001a1.502 1.502 0 0 1 .765-.787 1.38 1.38 0 0 1 .558-.115H14v-.984h-.09c-.196 0-.381-.04-.557-.121l-.001-.001a1.376 1.376 0 0 1-.455-.318l-.002-.002a1.415 1.415 0 0 1-.307-.465v-.002a1.405 1.405 0 0 1-.118-.566c0-.29.006-.58.018-.869a6.174 6.174 0 0 0-.024-.87v-.001a3.537 3.537 0 0 0-.197-.824v-.001a2.23 2.23 0 0 0-.494-.753 2.331 2.331 0 0 0-.775-.53 2.325 2.325 0 0 0-.91-.185H10v.984h.09c.2 0 .387.038.562.115.174.082.326.188.457.32.127.134.23.29.309.467.074.18.11.37.11.573 0 .228-.003.452-.011.672-.008.228-.008.45 0 .665.004.222.022.435.055.64.033.214.089.416.168.609a2.285 2.285 0 0 0 .738.955 2.285 2.285 0 0 0-.738.955 2.689 2.689 0 0 0-.168.602c-.033.21-.051.423-.055.64a9.15 9.15 0 0 0 0 .666c.008.224.012.45.012.678a1.471 1.471 0 0 1-.877 1.354 1.33 1.33 0 0 1-.563.121H10z"},child:[]}]})(r)}function de(r){return u({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M1.125 0C.502 0 0 .502 0 1.125v21.75C0 23.498.502 24 1.125 24h21.75c.623 0 1.125-.502 1.125-1.125V1.125C24 .502 23.498 0 22.875 0zm17.363 9.75c.612 0 1.154.037 1.627.111a6.38 6.38 0 0 1 1.306.34v2.458a3.95 3.95 0 0 0-.643-.361 5.093 5.093 0 0 0-.717-.26 5.453 5.453 0 0 0-1.426-.2c-.3 0-.573.028-.819.086a2.1 2.1 0 0 0-.623.242c-.17.104-.3.229-.393.374a.888.888 0 0 0-.14.49c0 .196.053.373.156.529.104.156.252.304.443.444s.423.276.696.41c.273.135.582.274.926.416.47.197.892.407 1.266.628.374.222.695.473.963.753.268.279.472.598.614.957.142.359.214.776.214 1.253 0 .657-.125 1.21-.373 1.656a3.033 3.033 0 0 1-1.012 1.085 4.38 4.38 0 0 1-1.487.596c-.566.12-1.163.18-1.79.18a9.916 9.916 0 0 1-1.84-.164 5.544 5.544 0 0 1-1.512-.493v-2.63a5.033 5.033 0 0 0 3.237 1.2c.333 0 .624-.03.872-.09.249-.06.456-.144.623-.25.166-.108.29-.234.373-.38a1.023 1.023 0 0 0-.074-1.089 2.12 2.12 0 0 0-.537-.5 5.597 5.597 0 0 0-.807-.444 27.72 27.72 0 0 0-1.007-.436c-.918-.383-1.602-.852-2.053-1.405-.45-.553-.676-1.222-.676-2.005 0-.614.123-1.141.369-1.582.246-.441.58-.804 1.004-1.089a4.494 4.494 0 0 1 1.47-.629 7.536 7.536 0 0 1 1.77-.201zm-15.113.188h9.563v2.166H9.506v9.646H6.789v-9.646H3.375z"},child:[]}]})(r)}const Xe=(r,l)=>me({queryKey:["file-content",r,l],queryFn:async()=>{if(!r)throw new Error("File path is required");const d=new URLSearchParams;d.append("path",r),l&&d.append("projectPath",l);const h=await _(`${M}/files/read?${d.toString()}`);if(!h.ok)throw h.status===403?new Error("访问被拒绝:文件在项目目录之外"):h.status===404?new Error("文件不存在"):new Error(`读取文件失败 (${h.status})`);return h.json()},enabled:!!r,staleTime:6e4,retry:!1}),Qe=(r,l)=>me({queryKey:["file-tree-lazy",r,l],queryFn:async()=>{if(!r)throw new Error("Project path is required");const d=new URLSearchParams;d.append("path",r),l&&d.append("showHiddenFiles","true");const h=await _(`${M}/files/browse?${d.toString()}`);if(!h.ok)throw new Error("Failed to browse directory");const i=await h.json(),x=[];for(const f of i.items)f.isDirectory?x.push({...f,children:[]}):x.push(f);return x},enabled:!!r,staleTime:3e4});class Ye{events=new Map;on(l,d){this.events.has(l)||this.events.set(l,[]),this.events.get(l).push(d)}off(l,d){const h=this.events.get(l);if(h){const i=h.indexOf(d);i>-1&&h.splice(i,1)}}emit(l,...d){const h=this.events.get(l);h&&h.forEach(i=>{try{i(...d)}catch(x){console.error(`Error in event handler for ${l}:`,x)}})}clear(){this.events.clear()}}const he=new Ye,xe={AI_RESPONSE_COMPLETE:"ai_response_complete",REFRESH_AGENT_CONTENT:"refresh_agent_content"},Ze=c.lazy(()=>Se(()=>import("./monaco-editor-DHKm5-VF.js").then(r=>r.i),[])),et=new Map([["js",e.jsx(Pe,{color:"#f7df1e"},"js")],["jsx",e.jsx(We,{color:"#61dafb"},"jsx")],["ts",e.jsx(de,{color:"#3178c6"},"ts")],["tsx",e.jsx(de,{color:"#3178c6"},"tsx")],["css",e.jsx(Oe,{color:"#1572b6"},"css")],["html",e.jsx(ie,{color:"#e34f26"},"html")],["htm",e.jsx(ie,{color:"#e34f26"},"htm")],["json",e.jsx(oe,{color:"#f9d71c"},"json")],["jsonl",e.jsx(oe,{color:"#e6a23c"},"jsonl")],["md",e.jsx(_e,{color:"#083fa1"},"md")],["csv",e.jsx(q,{color:"#00a86b"},"csv")],["pdf",e.jsx(Ue,{color:"#d63031"},"pdf")],["ppt",e.jsx(le,{color:"#d63031"},"ppt")],["pptx",e.jsx(le,{color:"#d63031"},"pptx")],["ico",e.jsx(j,{color:"#a9a9a9"},"ico")],["png",e.jsx(j,{color:"#a9a9a9"},"png")],["jpg",e.jsx(j,{color:"#a9a9a9"},"jpg")],["jpeg",e.jsx(j,{color:"#a9a9a9"},"jpeg")],["gif",e.jsx(j,{color:"#a9a9a9"},"gif")],["svg",e.jsx(j,{color:"#a9a9a9"},"svg")],["webp",e.jsx(j,{color:"#a9a9a9"},"webp")],["py",e.jsx(qe,{color:"#3776ab"},"py")],["java",e.jsx(Be,{color:"#007396"},"java")]]),P=({node:r})=>{const l=r.data.isHidden;if(r.data.isDirectory){const x=l?"#9ca3af":"#87b3d6";return r.isOpen?e.jsx(Je,{color:x}):e.jsx(Ke,{color:x})}const d=r.data.name.split(".").pop()?.toLowerCase()||"",h=l?"#9ca3af":"#6d8a9f",i=l?{opacity:.6}:{};return e.jsx("span",{style:i,children:et.get(d)||e.jsx(q,{color:h})})},tt=(r="")=>{const l=r.toLowerCase();if(l==="dockerfile"||l.startsWith("dockerfile."))return"dockerfile";switch(r.split(".").pop()?.toLowerCase()||""){case"js":case"jsx":return"javascript";case"ts":case"tsx":return"typescript";case"css":case"scss":case"sass":case"less":return"css";case"json":case"jsonl":return"json";case"html":case"htm":return"html";case"md":case"markdown":return"markdown";case"csv":return"csv";case"py":return"python";case"java":return"java";case"xml":return"xml";case"yaml":case"yml":return"yaml";case"sh":case"bash":return"shell";case"conf":case"config":case"ini":return"ini";case"nginx":return"nginx";case"sql":return"sql";case"go":return"go";case"rs":return"rust";case"c":case"cpp":case"cc":case"cxx":return"cpp";case"h":case"hpp":return"cpp";case"cs":return"csharp";case"php":return"php";case"rb":return"ruby";case"swift":return"swift";case"kt":return"kotlin";case"dockerfile":return"dockerfile";default:return"plaintext"}},rt=({imageUrl:r,fileName:l})=>{const{t:d}=ue("components"),[h,i]=c.useState(!0),[x,f]=c.useState(!1);return e.jsx("div",{className:"flex items-center justify-center h-full p-4",children:x?e.jsxs("div",{className:"text-center text-gray-500",children:[e.jsx(j,{className:"w-12 h-12 mx-auto mb-4 text-gray-300"}),e.jsx("p",{children:d("fileExplorer.imageLoadFailed")}),e.jsx("p",{className:"text-sm mt-2",children:l})]}):e.jsxs("div",{className:"relative max-w-full max-h-full",children:[h&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsx(T,{className:"w-8 h-8 animate-spin text-gray-400"})}),e.jsx("img",{src:r,alt:l,className:"max-w-full max-h-full object-contain bg-white dark:bg-gray-900 rounded shadow-lg",onLoad:()=>i(!1),onError:()=>{i(!1),f(!0)},style:{display:x?"none":"block"}})]})})},st=r=>{const l=r.toLowerCase();if(l==="dockerfile"||l.startsWith("dockerfile."))return"text";const d=r.split(".").pop()?.toLowerCase()||"",h=["js","jsx","ts","tsx","css","scss","sass","less","html","htm","json","jsonl","md","markdown","txt","py","java","xml","yaml","yml","sh","bash","bat","cmd","php","rb","go","rs","cpp","c","h","hpp","cc","cxx","cs","swift","kt","scala","clj","sql","dockerfile","gitignore","env","csv","tsv","conf","config","ini","toml","nginx","apache","properties","cfg"],i=["png","jpg","jpeg","gif","svg","webp","ico","bmp","tiff"];return h.includes(d)?"text":i.includes(d)?"image":"binary"},at=({node:r,style:l,dragHandle:d,isLoading:h=!1,onDirectoryToggle:i,onFileSelect:x})=>{const f=c.useCallback(y=>{y.preventDefault(),y.stopPropagation(),r.data.isDirectory?i?.(r):x?.(r)},[r,i,x]);return e.jsxs("div",{style:l,ref:d,className:`flex items-center cursor-pointer px-3 py-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 ${r.isSelected?"bg-blue-100 dark:bg-blue-900/30 text-blue-900 dark:text-blue-300":"text-gray-700 dark:text-gray-300"}`,onClick:f,children:[r.data.isDirectory&&e.jsx("span",{className:"mr-1 flex items-center",children:h?e.jsx(T,{className:"w-3 h-3 animate-spin text-gray-400"}):e.jsx(Ie,{className:`w-3 h-3 transition-transform text-gray-400 ${r.isOpen?"rotate-90":""}`})}),e.jsx("span",{className:"mr-2 flex items-center",children:e.jsx(P,{node:r})}),e.jsx("span",{className:`text-sm truncate flex-1 ${r.data.isHidden?"text-gray-400 dark:text-gray-500 italic":"text-gray-700 dark:text-gray-300"}`,children:r.data.name}),!r.data.isDirectory&&r.data.size&&e.jsxs("span",{className:"text-xs text-gray-400 dark:text-gray-500 ml-2",children:[(r.data.size/1024).toFixed(1),"KB"]})]})},F=5,mt=({projectPath:r,onFileSelect:l,className:d="",height:h="100vh"})=>{const{t:i}=ue("components"),[x,f]=c.useState([]),[y,D]=c.useState(null),[fe,W]=c.useState(600),[z,A]=c.useState(!1),k=c.useRef(null),R=c.useRef(null),V=c.useRef(null),[U,ge]=c.useState(0),[J,pe]=c.useState(""),[ye,ve]=c.useState(document.documentElement.classList.contains("dark")),[L,S]=c.useState(new Set),[N,K]=c.useState([]),[$,H]=c.useState(new Set),[g,je]=c.useState(!1),[G,X]=c.useState(!1),{data:E,isLoading:I,error:Q,refetch:C}=Qe(r,g),p=c.useMemo(()=>x.find(t=>t.isActive)||null,[x]),{data:Y,isLoading:be,error:Z}=Xe(p?p.path:void 0,r);c.useEffect(()=>{const t=new MutationObserver(s=>{s.forEach(o=>{o.attributeName==="class"&&ve(document.documentElement.classList.contains("dark"))})});return t.observe(document.documentElement,{attributes:!0,attributeFilter:["class"]}),()=>t.disconnect()},[]),c.useEffect(()=>{if(E){const t=m=>m.filter(a=>g||!a.isHidden).map(a=>({id:a.path,name:a.name,path:a.path,isDirectory:a.isDirectory,size:a.size,modified:a.modified,isHidden:a.isHidden,children:a.children?t(a.children):void 0})),s=(m,a=new Set)=>(m.forEach(n=>{n.isDirectory&&n.children&&n.children.length>0&&(a.add(n.path),s(n.children,a))}),a),o=s(E);S(o),K(t(E))}},[E,g]);const ee=c.useCallback(async t=>{if(!(L.has(t)||$.has(t))){H(s=>new Set(s).add(t));try{const s=new URLSearchParams;s.append("path",t),g&&s.append("showHiddenFiles","true");const o=await _(`${M}/files/browse?${s.toString()}`);if(!o.ok)throw new Error("Failed to browse directory");const m=await o.json(),a=[];for(const n of m.items)n.isDirectory?a.push({...n,children:[]}):a.push(n);K(n=>{const b=Le=>Le.map(w=>w.path===t?{...w,children:a.map(v=>({id:v.path,name:v.name,path:v.path,isDirectory:v.isDirectory,size:v.size,modified:v.modified,isHidden:v.isHidden,children:v.isDirectory?[]:void 0}))}:w.children?{...w,children:b(w.children)}:w);return b(n)}),S(n=>new Set(n).add(t)),V.current&&a.length>0&&a.forEach(n=>{n.isDirectory&&V.current?.close(n.path)})}catch(s){throw console.error("Failed to load directory children:",s),s}finally{H(s=>{const o=new Set(s);return o.delete(t),o})}}},[L,$,g]),O=c.useCallback(()=>{S(new Set),H(new Set),C()},[C]),we=c.useCallback(()=>{je(t=>!t)},[]);c.useEffect(()=>{S(new Set),H(new Set),C()},[g,C]),c.useEffect(()=>{const t=()=>{if(k.current){const m=k.current.getBoundingClientRect(),a=m.height>0?m.height:600;W(a)}};let s=null;k.current&&(s=new ResizeObserver(m=>{for(const a of m){const{height:n}=a.contentRect;n>0&&W(n)}}),s.observe(k.current));const o=setTimeout(t,100);return window.addEventListener("resize",t),()=>{clearTimeout(o),window.removeEventListener("resize",t),s&&s.disconnect()}},[E]),c.useEffect(()=>{const t=s=>{R.current&&!R.current.contains(s.target)&&A(!1)};if(z)return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[z]),c.useEffect(()=>{const t=s=>{console.log("🔄 Received AI_RESPONSE_COMPLETE event in FileExplorer:",s),s.projectPath===r&&(console.log("🔄 Auto-refreshing file tree after AI response completion"),O())};return he.on(xe.AI_RESPONSE_COMPLETE,t),()=>{he.off(xe.AI_RESPONSE_COMPLETE,t)}},[r,O]);const te=N,ke=c.useMemo(()=>{const t={},s=o=>{o.forEach(m=>{m.isDirectory&&(t[m.id]=!1,m.children&&s(m.children))})};return N&&N.length>0&&s(N),t},[N]),re=c.useCallback((t,s=!1)=>({id:`tab-${t.path}`,name:t.name,path:t.path,isPinned:s,isActive:!1}),[]),B=c.useCallback((t,s=!1)=>{f(o=>{const m=o.findIndex(a=>a.path===t.path);if(m!==-1)return o.map((a,n)=>({...a,isActive:n===m,isPinned:s||a.isPinned}));{const a=re(t,s);return!s&&y?(D(a.id),o.map(n=>n.id===y?{...a,isActive:!0}:{...n,isActive:!1})):(s||D(a.id),[...o.map(n=>({...n,isActive:!1})),{...a,isActive:!0}])}}),l?.(t.path)},[re,y,l]),se=c.useCallback(t=>{f(s=>{const o=s.findIndex(n=>n.id===t);if(o===-1)return s;const m=s[o],a=s.filter(n=>n.id!==t);if(m.isActive&&a.length>0){const n=Math.min(o,a.length-1);a[n]={...a[n],isActive:!0}}return y===t&&D(null),a})},[y]),ae=c.useCallback(t=>{f(s=>s.map(o=>({...o,isActive:o.id===t})))},[]),[ce,Ne]=c.useState({}),Ee=c.useCallback(t=>{const s=Date.now(),o=ce[t.data.path]||0;if(s-o<300)return;Ne(b=>({...b,[t.data.path]:s}));const m=t.isOpen,a=t.data.children&&t.data.children.length>0,n=L.has(t.data.path);m?t.close():!a&&!n?(t.open(),ee(t.data.path).catch(b=>{console.error("Failed to load directory children:",b),t.close()})):t.open()},[ce,L,ee]),Ce=c.useCallback(t=>{t.select();const s=Date.now(),o=s-U<300&&J===t.data.path;ge(s),pe(t.data.path),o?B(t.data,!0):setTimeout(()=>{Date.now()-s>=300&&B(t.data,!1)},300)},[B,U,J]),ze=()=>{if(!p)return e.jsx("div",{className:"flex items-center justify-center h-full text-gray-500 dark:text-gray-400",children:e.jsxs("div",{className:"text-center",children:[e.jsx(q,{className:"w-12 h-12 mx-auto mb-4 text-gray-300 dark:text-gray-600"}),e.jsx("p",{children:i("fileExplorer.selectFile")})]})});if(be)return e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsxs("div",{className:"flex items-center space-x-2 text-gray-500 dark:text-gray-400",children:[e.jsx(T,{className:"w-5 h-5 animate-spin"}),e.jsx("span",{children:i("fileExplorer.loading")})]})});if(Z)return e.jsx("div",{className:"flex items-center justify-center h-full text-red-500 dark:text-red-400",children:e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"font-medium",children:i("fileExplorer.loadFailed")}),e.jsx("p",{className:"text-sm mt-2 bg-red-50 dark:bg-red-900/30 px-3 py-2 rounded border border-red-200 dark:border-red-800",children:Z.message}),e.jsx("p",{className:"text-xs mt-2 text-gray-500 dark:text-gray-400",children:p.path})]})});switch(st(p.name)){case"image":const s=new URLSearchParams;s.append("path",p.path),r&&s.append("projectPath",r),s.append("binary","true");const o=`${M}/files/read?${s.toString()}`;return e.jsx(rt,{imageUrl:o,fileName:p.name});case"text":return Y?e.jsx(Fe.Suspense,{fallback:e.jsx("div",{className:"flex items-center justify-center h-full text-gray-500 dark:text-gray-400",children:e.jsx("div",{className:"animate-spin rounded-full h-6 w-6 border-b-2 border-gray-900"})}),children:e.jsx(Ze,{height:"100%",theme:ye?"vs-dark":"vs-light",language:tt(p.name),value:Y.content,options:{readOnly:!0,minimap:{enabled:!1},fontSize:14,wordWrap:"on",scrollBeyondLastLine:!1}})}):e.jsx("div",{className:"flex items-center justify-center h-full text-gray-500 dark:text-gray-400",children:e.jsx("p",{children:i("fileExplorer.cannotReadFile")})});default:return e.jsx("div",{className:"flex items-center justify-center h-full text-gray-500 dark:text-gray-400",children:e.jsxs("div",{className:"text-center",children:[e.jsx(Ge,{className:"w-12 h-12 mx-auto mb-4 text-gray-300 dark:text-gray-600"}),e.jsx("p",{children:i("fileExplorer.previewNotSupported")}),e.jsxs("p",{className:"text-sm mt-2",children:[i("fileExplorer.fileLabel"),": ",p.name]})]})})}};return Q?e.jsx("div",{className:`flex items-center justify-center h-full text-red-500 dark:text-red-400 ${d}`,style:{height:h},children:e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"font-medium",children:i("fileExplorer.loadFailed")}),e.jsx("p",{className:"text-sm mt-2 bg-red-50 dark:bg-red-900/30 px-3 py-2 rounded border border-red-200 dark:border-red-800",children:Q.message}),e.jsxs("p",{className:"text-xs mt-2 text-gray-500 dark:text-gray-400",children:[i("fileExplorer.projectPath"),": ",r]}),e.jsx("button",{onClick:()=>C(),className:"mt-4 px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors",children:i("fileExplorer.retry")})]})}):e.jsxs("div",{className:`flex h-full bg-gray-50 dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden ${d}`,children:[!G&&e.jsxs("div",{className:"w-80 border-r border-gray-200 dark:border-gray-700 flex flex-col h-full",children:[e.jsx("div",{className:"h-12 px-3 border-b border-gray-200 dark:border-gray-700 bg-gray-100 dark:bg-gray-800 flex items-center flex-shrink-0",children:e.jsxs("div",{className:"flex items-center justify-between w-full",children:[e.jsx("h3",{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:i("fileExplorer.title")}),e.jsxs("div",{className:"flex items-center space-x-1",children:[e.jsx("button",{onClick:we,className:`p-1.5 hover:bg-gray-200 dark:hover:bg-gray-700 rounded transition-colors ${g?"text-blue-600 dark:text-blue-400":"text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300"}`,title:g?"隐藏文件和文件夹":"显示隐藏文件和文件夹",children:g?e.jsx(Te,{className:"w-4 h-4"}):e.jsx(Me,{className:"w-4 h-4"})}),e.jsx("button",{onClick:O,className:"p-1.5 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded transition-colors",title:i("common:actions.refresh"),disabled:I,children:e.jsx(De,{className:`w-4 h-4 ${I?"animate-spin":""}`})}),e.jsx("button",{onClick:()=>X(!0),className:"p-1.5 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded transition-colors",title:i("fileExplorer.collapsePanel"),children:e.jsx(Ae,{className:"w-4 h-4"})})]})]})}),e.jsx("div",{ref:k,className:"flex-1 min-h-0 pl-2",children:I?e.jsx("div",{className:"flex items-center justify-center h-32",children:e.jsxs("div",{className:"flex items-center space-x-2 text-gray-500 dark:text-gray-400",children:[e.jsx(T,{className:"w-4 h-4 animate-spin"}),e.jsx("span",{className:"text-sm",children:i("fileExplorer.loading")})]})}):te.length===0?e.jsx("div",{className:"flex items-center justify-center h-32 text-gray-500 dark:text-gray-400",children:e.jsx("p",{className:"text-sm",children:i("fileExplorer.emptyDirectory")})}):e.jsx(He,{data:te,width:320,height:fe,indent:20,rowHeight:36,initialOpenState:ke,ref:V,children:t=>e.jsx(at,{...t,isLoading:$.has(t.node.data.path),onDirectoryToggle:Ee,onFileSelect:Ce})})})]}),e.jsxs("div",{className:"flex-1 flex flex-col h-full",children:[e.jsxs("div",{className:"h-12 border-b border-gray-200 dark:border-gray-700 bg-gray-100 dark:bg-gray-800 flex items-center flex-shrink-0",children:[G&&e.jsx("button",{onClick:()=>X(!1),className:"p-1.5 mx-2 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded transition-colors",title:i("fileExplorer.expandPanel"),children:e.jsx(Re,{className:"w-4 h-4"})}),x.length>0?e.jsxs("div",{className:"flex items-center h-full w-full",children:[e.jsx("div",{className:"flex items-center h-full flex-1",children:x.slice(0,Math.min(F,x.length)).map(t=>e.jsxs("div",{className:`group relative flex items-center h-full px-3 border-r border-gray-200 dark:border-gray-700 cursor-pointer transition-colors ${t.isActive?"bg-gray-50 dark:bg-gray-900 text-gray-900 dark:text-white":"bg-gray-100 dark:bg-gray-800 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700"} ${t.isPinned?"":"italic"}`,onClick:()=>ae(t.id),title:`${t.path} ${t.isPinned?"(固定)":"(临时)"}`,style:{minWidth:"120px",maxWidth:"180px"},children:[e.jsx(P,{node:{data:{name:t.name,isDirectory:!1},isOpen:!1}}),e.jsx("span",{className:"ml-2 text-sm truncate flex-1",children:t.name}),!t.isPinned&&e.jsx("span",{className:"ml-1 text-xs text-gray-400 dark:text-gray-500 flex-shrink-0",children:"•"}),e.jsx("button",{className:"ml-2 p-0.5 rounded opacity-0 group-hover:opacity-100 hover:bg-gray-200 dark:hover:bg-gray-600 transition-opacity flex-shrink-0",onClick:s=>{s.stopPropagation(),se(t.id)},title:i("common:actions.close"),children:e.jsx(ne,{className:"w-3 h-3"})})]},t.id))}),x.length>F&&e.jsxs("div",{className:"relative",ref:R,children:[e.jsxs("button",{className:"flex items-center h-full px-3 text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 hover:text-gray-900 dark:hover:text-white transition-colors border-l border-gray-200 dark:border-gray-700",onClick:()=>A(!z),title:`${x.length-F} more tabs`,children:[e.jsx(Ve,{className:"w-4 h-4"}),e.jsx($e,{className:"w-3 h-3 ml-1"})]}),z&&e.jsx("div",{className:"absolute top-full right-0 mt-1 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg z-50 min-w-48 max-h-64 overflow-y-auto",children:x.slice(F).map(t=>e.jsxs("div",{className:`flex items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700 ${t.isActive?"bg-blue-50 dark:bg-blue-900/30 text-blue-900 dark:text-blue-300":"text-gray-700 dark:text-gray-300"} ${t.isPinned?"":"italic"}`,onClick:()=>{ae(t.id),A(!1)},title:`${t.path} ${t.isPinned?"(固定)":"(临时)"}`,children:[e.jsx(P,{node:{data:{name:t.name,isDirectory:!1},isOpen:!1}}),e.jsx("span",{className:"ml-2 truncate flex-1",children:t.name}),!t.isPinned&&e.jsx("span",{className:"ml-1 text-xs text-gray-400 dark:text-gray-500 flex-shrink-0",children:"•"}),e.jsx("button",{className:"ml-2 p-1 rounded opacity-0 group-hover:opacity-100 hover:bg-gray-200 dark:hover:bg-gray-600 transition-opacity flex-shrink-0",onClick:s=>{s.stopPropagation(),se(t.id)},title:i("common:actions.close"),children:e.jsx(ne,{className:"w-3 h-3"})})]},t.id))})]})]}):e.jsx("div",{className:"flex items-center justify-center w-full h-full text-gray-500 dark:text-gray-400",children:e.jsx("span",{className:"text-sm",children:i("fileExplorer.noFiles")})})]}),e.jsx("div",{className:"flex-1 bg-gray-50 dark:bg-gray-900 min-h-0",children:ze()})]})]})};export{xe as E,mt as F,he as e};
@@ -1 +0,0 @@
1
- import{j as e}from"./data-structures-C0h9Oap1.js";import{r as d}from"./monaco-editor-DHKm5-VF.js";import{b as m}from"./index-BUj-AMWq.js";import{u as o}from"./tools-XV29tg8x.js";import{M as x,K as b,N as h,G as u}from"./ui-components-ND8WdSiV.js";import"./syntax-highlighting-CnREyncB.js";import"./agents-DmLFhp96.js";const $=()=>{const{t:r,i18n:l}=o("pages"),{isMobile:t}=m(),[s,g]=d.useState(()=>localStorage.getItem("theme")||"auto"),[i,n]=d.useState(l.language);d.useEffect(()=>{n(l.language)},[l.language]),d.useEffect(()=>{(()=>{s==="dark"?document.documentElement.classList.add("dark"):s==="light"?document.documentElement.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")})(),localStorage.setItem("theme",s),window.dispatchEvent(new Event("themechange"))},[s]);const c=a=>{n(a),l.changeLanguage(a)};return e.jsxs("div",{className:`${t?"space-y-4":"space-y-6"}`,children:[e.jsxs("div",{children:[e.jsx("h2",{className:`${t?"text-xl":"text-2xl"} font-bold text-gray-900 dark:text-white mb-2`,children:r("settings.general.title")}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:r("settings.general.description")})]}),e.jsxs("div",{className:`bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 ${t?"p-4":"p-6"}`,children:[e.jsx("h3",{className:`${t?"text-base":"text-lg"} font-semibold text-gray-900 dark:text-white mb-4`,children:r("settings.general.interfaceSettings")}),e.jsxs("div",{className:`${t?"space-y-4":"space-y-6"}`,children:[e.jsxs("div",{children:[e.jsx("label",{className:"block font-medium text-gray-900 dark:text-white mb-3",children:r("settings.general.theme.label")}),e.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400 mb-4",children:r("settings.general.theme.description")}),e.jsx("div",{className:`${t?"grid grid-cols-1 gap-3":"grid grid-cols-3 gap-3"}`,children:[{value:"auto",label:r("settings.general.theme.auto"),icon:x},{value:"light",label:r("settings.general.theme.light"),icon:b},{value:"dark",label:r("settings.general.theme.dark"),icon:h}].map(a=>e.jsxs("button",{onClick:()=>g(a.value),className:`${t?"p-3":"p-4"} border-2 rounded-lg flex items-center ${t?"flex-row space-x-3":"flex-col space-y-2"} transition-all ${s===a.value?"border-blue-500 bg-blue-50 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300":"border-gray-200 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-600 dark:text-gray-300 hover:border-gray-300 dark:hover:border-gray-500"}`,children:[e.jsx(a.icon,{className:`${t?"w-5 h-5":"w-6 h-6"}`}),e.jsx("span",{className:"text-sm font-medium",children:a.label})]},a.value))})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"block font-medium text-gray-900 dark:text-white mb-3 flex items-center space-x-2",children:[e.jsx(u,{className:`${t?"w-4 h-4":"w-5 h-5"}`}),e.jsx("span",{children:r("settings.general.language.label")})]}),e.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400 mb-4",children:r("settings.general.language.description")}),e.jsx("div",{className:`${t?"grid grid-cols-1 gap-3":"grid grid-cols-2 gap-3"}`,children:[{value:"zh-CN",label:"中文简体",flag:"🇨🇳"},{value:"en-US",label:"English",flag:"🇺🇸"}].map(a=>e.jsxs("button",{onClick:()=>c(a.value),className:`${t?"p-3":"p-4"} border-2 rounded-lg flex items-center space-x-3 transition-all ${i===a.value?"border-blue-500 bg-blue-50 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300":"border-gray-200 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-600 dark:text-gray-300 hover:border-gray-300 dark:hover:border-gray-500"}`,children:[e.jsx("span",{className:`${t?"text-xl":"text-2xl"}`,children:a.flag}),e.jsx("span",{className:"text-sm font-medium",children:a.label})]},a.value))})]})]})]})]})};export{$ as GeneralSettingsPage};
@@ -1 +0,0 @@
1
- import{j as e}from"./data-structures-C0h9Oap1.js";import{r as d}from"./monaco-editor-DHKm5-VF.js";import{u}from"./tools-XV29tg8x.js";import{ad as N,e as k,ab as f,G as g,ae as w,Z as o,aa as t,I as h,M as v,a3 as i,af as C,f as A,o as p,m as S,ag as F,t as E,X as s}from"./ui-components-ND8WdSiV.js";import{L as y}from"./index-BUj-AMWq.js";import"./syntax-highlighting-CnREyncB.js";import"./agents-DmLFhp96.js";const G=()=>{const{t:a,i18n:r}=u("pages"),[x,c]=d.useState(!1),[j,n]=d.useState(!1),b=()=>{const l=r.language==="zh-CN"?"en-US":"zh-CN";r.changeLanguage(l)},m=()=>{navigator.clipboard.writeText("npm install -g agentstudio && agentstudio start"),c(!0),setTimeout(()=>c(!1),2e3)};return d.useEffect(()=>{document.title=a("landing.pageTitle");const l=document.querySelector('meta[name="description"]');l&&l.setAttribute("content",a("landing.metaDescription"))},[a]),e.jsxs("div",{className:"min-h-screen bg-white dark:bg-gray-950",children:[e.jsx("nav",{className:"bg-white/90 dark:bg-gray-950/90 backdrop-blur-sm border-b border-gray-100 dark:border-gray-800 sticky top-0 z-50",children:e.jsx("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"flex justify-between items-center h-16",children:[e.jsxs("div",{className:"flex items-center space-x-3",children:[e.jsx("img",{src:"/cc-studio.png",alt:"AgentStudio",className:"w-8 h-8"}),e.jsx("span",{className:"text-xl font-semibold text-gray-900 dark:text-white",children:"AgentStudio"})]}),e.jsxs("div",{className:"flex items-center space-x-4",children:[e.jsxs("button",{onClick:()=>n(!0),className:"inline-flex items-center text-gray-600 dark:text-gray-400 hover:text-green-600 dark:hover:text-green-400 transition-colors",children:[e.jsx(N,{className:"w-5 h-5 mr-1"}),e.jsx("span",{className:"hidden sm:inline",children:a("landing.nav.wechat")||"微信群"})]}),e.jsxs("a",{href:"https://github.com/okguitar/agentstudio/blob/main/docs/USER_MANUAL.md",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors",children:[e.jsx(k,{className:"w-5 h-5 mr-1"}),e.jsx("span",{className:"hidden sm:inline",children:a("landing.nav.docs")})]}),e.jsxs("a",{href:"https://github.com/okguitar/agentstudio",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors",children:[e.jsx(f,{className:"w-5 h-5 mr-1"}),e.jsx("span",{className:"hidden sm:inline",children:"GitHub"})]}),e.jsxs("button",{onClick:b,className:"inline-flex items-center text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors",title:r.language==="zh-CN"?"Switch to English":"切换到中文",children:[e.jsx(g,{className:"w-5 h-5 mr-1"}),e.jsx("span",{className:"hidden sm:inline",children:r.language==="zh-CN"?"EN":"中文"})]}),e.jsxs(y,{to:"/dashboard",className:"inline-flex items-center px-4 py-2 bg-gray-900 dark:bg-white hover:bg-gray-800 dark:hover:bg-gray-100 text-white dark:text-gray-900 font-medium rounded-lg transition-colors duration-200",children:[a("landing.nav.enterWorkspace"),e.jsx(w,{className:"ml-2 w-4 h-4"})]})]})]})})}),e.jsx("section",{className:"pt-20 pb-16 px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"max-w-4xl mx-auto text-center",children:[e.jsxs("div",{className:"inline-flex items-center px-3 py-1 rounded-full bg-gray-100 dark:bg-gray-800 text-sm text-gray-600 dark:text-gray-400 mb-6",children:[e.jsx(o,{className:"w-4 h-4 mr-2 text-amber-500"}),a("landing.hero.badge")]}),e.jsx("h1",{className:"text-4xl sm:text-5xl lg:text-6xl font-bold text-gray-900 dark:text-white mb-6 leading-tight",children:a("landing.hero.title")}),e.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-400 mb-4 max-w-2xl mx-auto",children:a("landing.hero.subtitle")}),e.jsx("p",{className:"text-lg text-gray-500 dark:text-gray-500 mb-8 max-w-2xl mx-auto",children:a("landing.hero.description")}),e.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400 mb-3",children:a("landing.hero.installHint")}),e.jsx("div",{className:"bg-gray-900 dark:bg-gray-800 rounded-xl p-4 max-w-xl mx-auto",children:e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsx("code",{className:"text-green-400 text-sm sm:text-base font-mono flex-1",children:"npm install -g agentstudio && agentstudio start"}),e.jsx("button",{onClick:m,className:"px-3 py-1.5 bg-gray-700 hover:bg-gray-600 text-gray-200 rounded-lg transition-colors flex items-center gap-1.5 text-sm flex-shrink-0 min-w-[72px] justify-center",title:a("landing.hero.copyCommand"),children:x?e.jsx(t,{className:"w-4 h-4 text-green-400"}):e.jsxs(e.Fragment,{children:[e.jsx(h,{className:"w-4 h-4"}),e.jsx("span",{children:a("landing.hero.copy")})]})})]})})]})}),e.jsx("section",{className:"py-16 px-4 sm:px-6 lg:px-8 bg-gray-50 dark:bg-gray-900",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-10",children:[e.jsx("h2",{className:"text-2xl font-bold text-gray-900 dark:text-white mb-3",children:a("landing.preview.title")}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:a("landing.preview.subtitle")})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-8",children:[e.jsxs("div",{className:"group",children:[e.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-2xl border border-gray-200 dark:border-gray-700 overflow-hidden shadow-lg hover:shadow-xl transition-shadow",children:e.jsx("img",{src:"/screenshot-chat.png",alt:a("landing.preview.chatAlt"),className:"w-full h-auto"})}),e.jsx("p",{className:"text-center mt-4 text-sm text-gray-600 dark:text-gray-400",children:a("landing.preview.chatCaption")})]}),e.jsxs("div",{className:"group",children:[e.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-2xl border border-gray-200 dark:border-gray-700 overflow-hidden shadow-lg hover:shadow-xl transition-shadow",children:e.jsx("img",{src:"/screenshot-mcp.png",alt:a("landing.preview.mcpAlt"),className:"w-full h-auto"})}),e.jsx("p",{className:"text-center mt-4 text-sm text-gray-600 dark:text-gray-400",children:a("landing.preview.mcpCaption")})]})]})]})}),e.jsx("section",{className:"py-20 px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-16",children:[e.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-4",children:a("landing.features.title")}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-400 max-w-2xl mx-auto",children:a("landing.features.subtitle")})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:[e.jsxs("div",{className:"bg-white dark:bg-gray-800 p-8 rounded-2xl border border-gray-100 dark:border-gray-700",children:[e.jsx("div",{className:"w-12 h-12 bg-gray-100 dark:bg-gray-700 rounded-xl flex items-center justify-center mb-6",children:e.jsx(v,{className:"w-6 h-6 text-gray-700 dark:text-gray-300"})}),e.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-3",children:a("landing.features.localWorkspace.title")}),e.jsxs("ul",{className:"space-y-2 text-gray-600 dark:text-gray-400",children:[e.jsxs("li",{className:"flex items-start",children:[e.jsx(i,{className:"w-5 h-5 mr-2 mt-0.5 text-green-500 flex-shrink-0"}),e.jsx("span",{children:a("landing.features.localWorkspace.point1")})]}),e.jsxs("li",{className:"flex items-start",children:[e.jsx(i,{className:"w-5 h-5 mr-2 mt-0.5 text-green-500 flex-shrink-0"}),e.jsx("span",{children:a("landing.features.localWorkspace.point2")})]}),e.jsxs("li",{className:"flex items-start",children:[e.jsx(i,{className:"w-5 h-5 mr-2 mt-0.5 text-green-500 flex-shrink-0"}),e.jsx("span",{children:a("landing.features.localWorkspace.point3")})]})]})]}),e.jsxs("div",{className:"bg-white dark:bg-gray-800 p-8 rounded-2xl border border-gray-100 dark:border-gray-700",children:[e.jsx("div",{className:"w-12 h-12 bg-gray-100 dark:bg-gray-700 rounded-xl flex items-center justify-center mb-6",children:e.jsx(g,{className:"w-6 h-6 text-gray-700 dark:text-gray-300"})}),e.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-3",children:a("landing.features.webExperience.title")}),e.jsxs("ul",{className:"space-y-2 text-gray-600 dark:text-gray-400",children:[e.jsxs("li",{className:"flex items-start",children:[e.jsx(o,{className:"w-5 h-5 mr-2 mt-0.5 text-amber-500 flex-shrink-0"}),e.jsx("span",{children:a("landing.features.webExperience.point1")})]}),e.jsxs("li",{className:"flex items-start",children:[e.jsx(C,{className:"w-5 h-5 mr-2 mt-0.5 text-purple-500 flex-shrink-0"}),e.jsx("span",{children:a("landing.features.webExperience.point2")})]}),e.jsxs("li",{className:"flex items-start",children:[e.jsx(A,{className:"w-5 h-5 mr-2 mt-0.5 text-blue-500 flex-shrink-0"}),e.jsx("span",{children:a("landing.features.webExperience.point3")})]})]})]}),e.jsxs("div",{className:"bg-white dark:bg-gray-800 p-8 rounded-2xl border border-gray-100 dark:border-gray-700",children:[e.jsx("div",{className:"w-12 h-12 bg-gray-100 dark:bg-gray-700 rounded-xl flex items-center justify-center mb-6",children:e.jsx(p,{className:"w-6 h-6 text-gray-700 dark:text-gray-300"})}),e.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-3",children:a("landing.features.sdkFeatures.title")}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx("span",{className:"px-3 py-1 bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 rounded-full text-sm",children:"MCP"}),e.jsx("span",{className:"px-3 py-1 bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 rounded-full text-sm",children:a("landing.features.sdkFeatures.skills")}),e.jsx("span",{className:"px-3 py-1 bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 rounded-full text-sm",children:a("landing.features.sdkFeatures.commands")}),e.jsx("span",{className:"px-3 py-1 bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 rounded-full text-sm",children:a("landing.features.sdkFeatures.plugins")}),e.jsx("span",{className:"px-3 py-1 bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 rounded-full text-sm",children:a("landing.features.sdkFeatures.memory")}),e.jsx("span",{className:"px-3 py-1 bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 rounded-full text-sm",children:a("landing.features.sdkFeatures.subagent")}),e.jsx("span",{className:"px-3 py-1 bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 rounded-full text-sm",children:a("landing.features.sdkFeatures.multiModel")})]}),e.jsx("p",{className:"mt-4 text-sm text-gray-500 dark:text-gray-500",children:a("landing.features.sdkFeatures.anthropicCompat")})]})]})]})}),e.jsx("section",{className:"py-20 px-4 sm:px-6 lg:px-8",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"inline-flex items-center px-3 py-1 rounded-full bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-400 text-sm mb-4",children:[e.jsx(S,{className:"w-4 h-4 mr-2"}),a("landing.scheduler.badge")]}),e.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-4",children:a("landing.scheduler.title")}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-400 mb-8",children:a("landing.scheduler.description")})]}),e.jsxs("div",{className:"bg-gray-50 dark:bg-gray-900 rounded-2xl p-6 border border-gray-100 dark:border-gray-800",children:[e.jsx("h4",{className:"text-sm font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider mb-4",children:a("landing.scheduler.scenariosTitle")}),e.jsxs("ul",{className:"space-y-4",children:[e.jsxs("li",{className:"flex items-start",children:[e.jsx("span",{className:"text-2xl mr-3",children:"📊"}),e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-gray-900 dark:text-white",children:a("landing.scheduler.scenario1.title")}),e.jsx("p",{className:"text-gray-500 dark:text-gray-500 text-sm",children:a("landing.scheduler.scenario1.desc")})]})]}),e.jsxs("li",{className:"flex items-start",children:[e.jsx("span",{className:"text-2xl mr-3",children:"🔍"}),e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-gray-900 dark:text-white",children:a("landing.scheduler.scenario2.title")}),e.jsx("p",{className:"text-gray-500 dark:text-gray-500 text-sm",children:a("landing.scheduler.scenario2.desc")})]})]}),e.jsxs("li",{className:"flex items-start",children:[e.jsx("span",{className:"text-2xl mr-3",children:"📝"}),e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-gray-900 dark:text-white",children:a("landing.scheduler.scenario3.title")}),e.jsx("p",{className:"text-gray-500 dark:text-gray-500 text-sm",children:a("landing.scheduler.scenario3.desc")})]})]}),e.jsxs("li",{className:"flex items-start",children:[e.jsx("span",{className:"text-2xl mr-3",children:"📈"}),e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-gray-900 dark:text-white",children:a("landing.scheduler.scenario4.title")}),e.jsx("p",{className:"text-gray-500 dark:text-gray-500 text-sm",children:a("landing.scheduler.scenario4.desc")})]})]})]})]})]})})}),e.jsx("section",{className:"py-20 px-4 sm:px-6 lg:px-8 bg-gray-50 dark:bg-gray-900",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{className:"order-2 lg:order-1 bg-white dark:bg-gray-800 rounded-2xl p-6 border border-gray-100 dark:border-gray-700",children:[e.jsx("h4",{className:"text-sm font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider mb-4",children:a("landing.a2a.scenariosTitle")}),e.jsxs("ul",{className:"space-y-4",children:[e.jsxs("li",{className:"flex items-start",children:[e.jsx("span",{className:"text-2xl mr-3",children:"🤵"}),e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-gray-900 dark:text-white",children:a("landing.a2a.scenario1.title")}),e.jsx("p",{className:"text-gray-500 dark:text-gray-500 text-sm",children:a("landing.a2a.scenario1.desc")})]})]}),e.jsxs("li",{className:"flex items-start",children:[e.jsx("span",{className:"text-2xl mr-3",children:"💻"}),e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-gray-900 dark:text-white",children:a("landing.a2a.scenario2.title")}),e.jsx("p",{className:"text-gray-500 dark:text-gray-500 text-sm",children:a("landing.a2a.scenario2.desc")})]})]}),e.jsxs("li",{className:"flex items-start",children:[e.jsx("span",{className:"text-2xl mr-3",children:"📱"}),e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-gray-900 dark:text-white",children:a("landing.a2a.scenario3.title")}),e.jsx("p",{className:"text-gray-500 dark:text-gray-500 text-sm",children:a("landing.a2a.scenario3.desc")})]})]})]})]}),e.jsxs("div",{className:"order-1 lg:order-2",children:[e.jsxs("div",{className:"inline-flex items-center px-3 py-1 rounded-full bg-purple-100 dark:bg-purple-900/30 text-purple-700 dark:text-purple-400 text-sm mb-4",children:[e.jsx(F,{className:"w-4 h-4 mr-2"}),a("landing.a2a.badge")]}),e.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-4",children:a("landing.a2a.title")}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-400",children:a("landing.a2a.description")})]})]})})}),e.jsx("section",{className:"py-20 px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsxs("div",{className:"inline-flex items-center px-3 py-1 rounded-full bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-400 text-sm mb-4",children:[e.jsx(E,{className:"w-4 h-4 mr-2"}),a("landing.customAgent.badge")]}),e.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-4",children:a("landing.customAgent.title")}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-400 max-w-2xl mx-auto",children:a("landing.customAgent.description")})]}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-6",children:[e.jsxs("div",{className:"bg-white dark:bg-gray-800 p-6 rounded-xl border border-gray-100 dark:border-gray-700 text-center",children:[e.jsx("span",{className:"text-4xl mb-3 block",children:"📊"}),e.jsx("span",{className:"font-medium text-gray-900 dark:text-white",children:a("landing.customAgent.example1")})]}),e.jsxs("div",{className:"bg-white dark:bg-gray-800 p-6 rounded-xl border border-gray-100 dark:border-gray-700 text-center",children:[e.jsx("span",{className:"text-4xl mb-3 block",children:"🤵"}),e.jsx("span",{className:"font-medium text-gray-900 dark:text-white",children:a("landing.customAgent.example2")})]}),e.jsxs("div",{className:"bg-white dark:bg-gray-800 p-6 rounded-xl border border-gray-100 dark:border-gray-700 text-center",children:[e.jsx("span",{className:"text-4xl mb-3 block",children:"📝"}),e.jsx("span",{className:"font-medium text-gray-900 dark:text-white",children:a("landing.customAgent.example3")})]}),e.jsxs("div",{className:"bg-white dark:bg-gray-800 p-6 rounded-xl border border-gray-100 dark:border-gray-700 text-center",children:[e.jsx("span",{className:"text-4xl mb-3 block",children:"🔍"}),e.jsx("span",{className:"font-medium text-gray-900 dark:text-white",children:a("landing.customAgent.example4")})]})]})]})}),e.jsx("section",{className:"py-20 px-4 sm:px-6 lg:px-8 bg-gray-50 dark:bg-gray-900",children:e.jsxs("div",{className:"max-w-4xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-4",children:a("landing.comparison.title")}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-400",children:a("landing.comparison.subtitle")})]}),e.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-2xl border border-gray-100 dark:border-gray-700 overflow-hidden",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-gray-100 dark:border-gray-700",children:[e.jsx("th",{className:"px-6 py-4 text-left text-sm font-medium text-gray-500 dark:text-gray-400",children:a("landing.comparison.dimension")}),e.jsx("th",{className:"px-6 py-4 text-center text-sm font-semibold text-gray-900 dark:text-white",children:"AgentStudio"}),e.jsx("th",{className:"px-6 py-4 text-center text-sm font-medium text-gray-500 dark:text-gray-400",children:"Claude Code"})]})}),e.jsxs("tbody",{className:"divide-y divide-gray-100 dark:divide-gray-700",children:[e.jsxs("tr",{children:[e.jsx("td",{className:"px-6 py-4 text-sm text-gray-600 dark:text-gray-400",children:a("landing.comparison.interface")}),e.jsxs("td",{className:"px-6 py-4 text-center text-sm text-gray-900 dark:text-white",children:["Web ",a("landing.comparison.webInterface")]}),e.jsx("td",{className:"px-6 py-4 text-center text-sm text-gray-500 dark:text-gray-500",children:a("landing.comparison.cli")})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-6 py-4 text-sm text-gray-600 dark:text-gray-400",children:a("landing.comparison.targetUsers")}),e.jsx("td",{className:"px-6 py-4 text-center text-sm text-gray-900 dark:text-white",children:a("landing.comparison.everyone")}),e.jsx("td",{className:"px-6 py-4 text-center text-sm text-gray-500 dark:text-gray-500",children:a("landing.comparison.developers")})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-6 py-4 text-sm text-gray-600 dark:text-gray-400",children:a("landing.comparison.toolDisplay")}),e.jsx("td",{className:"px-6 py-4 text-center text-sm text-gray-900 dark:text-white",children:a("landing.comparison.visual")}),e.jsx("td",{className:"px-6 py-4 text-center text-sm text-gray-500 dark:text-gray-500",children:a("landing.comparison.textOnly")})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-6 py-4 text-sm text-gray-600 dark:text-gray-400",children:a("landing.comparison.fileBrowser")}),e.jsx("td",{className:"px-6 py-4 text-center",children:e.jsx(t,{className:"w-5 h-5 text-green-500 mx-auto"})}),e.jsx("td",{className:"px-6 py-4 text-center",children:e.jsx(s,{className:"w-5 h-5 text-gray-300 dark:text-gray-600 mx-auto"})})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-6 py-4 text-sm text-gray-600 dark:text-gray-400",children:a("landing.comparison.agentCustom")}),e.jsx("td",{className:"px-6 py-4 text-center",children:e.jsx(t,{className:"w-5 h-5 text-green-500 mx-auto"})}),e.jsx("td",{className:"px-6 py-4 text-center",children:e.jsx(s,{className:"w-5 h-5 text-gray-300 dark:text-gray-600 mx-auto"})})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-6 py-4 text-sm text-gray-600 dark:text-gray-400",children:a("landing.comparison.scheduler")}),e.jsx("td",{className:"px-6 py-4 text-center",children:e.jsx(t,{className:"w-5 h-5 text-green-500 mx-auto"})}),e.jsx("td",{className:"px-6 py-4 text-center",children:e.jsx(s,{className:"w-5 h-5 text-gray-300 dark:text-gray-600 mx-auto"})})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-6 py-4 text-sm text-gray-600 dark:text-gray-400",children:a("landing.comparison.a2a")}),e.jsx("td",{className:"px-6 py-4 text-center",children:e.jsx(t,{className:"w-5 h-5 text-green-500 mx-auto"})}),e.jsx("td",{className:"px-6 py-4 text-center",children:e.jsx(s,{className:"w-5 h-5 text-gray-300 dark:text-gray-600 mx-auto"})})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"px-6 py-4 text-sm text-gray-600 dark:text-gray-400",children:a("landing.comparison.mobileAccess")}),e.jsx("td",{className:"px-6 py-4 text-center text-sm text-amber-600 dark:text-amber-400",children:a("landing.comparison.beta")}),e.jsx("td",{className:"px-6 py-4 text-center",children:e.jsx(s,{className:"w-5 h-5 text-gray-300 dark:text-gray-600 mx-auto"})})]})]})]})})]})}),e.jsx("section",{className:"py-20 px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"max-w-4xl mx-auto text-center",children:[e.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-6",children:a("landing.cta.title")}),e.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-400 mb-8",children:a("landing.cta.subtitle")}),e.jsx("div",{className:"bg-gray-900 dark:bg-gray-800 rounded-xl p-4 max-w-xl mx-auto mb-8",children:e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsx("code",{className:"text-green-400 text-sm sm:text-base font-mono flex-1",children:"npm install -g agentstudio && agentstudio start"}),e.jsx("button",{onClick:m,className:"px-3 py-1.5 bg-gray-700 hover:bg-gray-600 text-gray-200 rounded-lg transition-colors flex items-center gap-1.5 text-sm flex-shrink-0 min-w-[72px] justify-center",title:a("landing.hero.copyCommand"),children:x?e.jsx(t,{className:"w-4 h-4 text-green-400"}):e.jsxs(e.Fragment,{children:[e.jsx(h,{className:"w-4 h-4"}),e.jsx("span",{children:a("landing.hero.copy")})]})})]})}),e.jsxs("a",{href:"https://github.com/okguitar/agentstudio",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center justify-center px-8 py-4 bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-300 font-semibold rounded-xl border border-gray-200 dark:border-gray-700 transition-all duration-200",children:[e.jsx(p,{className:"mr-2 w-5 h-5"}),"GitHub"]})]})}),e.jsx("footer",{className:"bg-gray-900 text-gray-300 py-12 px-4 sm:px-6 lg:px-8",children:e.jsx("div",{className:"max-w-6xl mx-auto",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-8",children:[e.jsxs("div",{className:"col-span-1 md:col-span-2",children:[e.jsxs("div",{className:"flex items-center space-x-3 mb-4",children:[e.jsx("img",{src:"/cc-studio.png",alt:"AgentStudio",className:"w-8 h-8"}),e.jsx("span",{className:"text-xl font-semibold text-white",children:"AgentStudio"})]}),e.jsx("p",{className:"text-gray-400 mb-4 max-w-md",children:a("landing.footer.description")}),e.jsx("div",{className:"text-sm text-gray-500",children:a("landing.footer.copyright")})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-white font-semibold mb-4",children:a("landing.footer.product")}),e.jsxs("ul",{className:"space-y-2 text-sm",children:[e.jsx("li",{children:e.jsx(y,{to:"/dashboard",className:"hover:text-white transition-colors",children:a("landing.footer.workspace")})}),e.jsx("li",{children:e.jsx("a",{href:"https://github.com/okguitar/agentstudio",target:"_blank",rel:"noopener noreferrer",className:"hover:text-white transition-colors",children:a("landing.footer.sourceCode")})}),e.jsx("li",{children:e.jsx("a",{href:"https://github.com/okguitar/agentstudio/releases",target:"_blank",rel:"noopener noreferrer",className:"hover:text-white transition-colors",children:a("landing.footer.releases")})})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-white font-semibold mb-4",children:a("landing.footer.support")}),e.jsxs("ul",{className:"space-y-2 text-sm",children:[e.jsx("li",{children:e.jsx("a",{href:"https://github.com/okguitar/agentstudio/blob/main/docs/USER_MANUAL.md",target:"_blank",rel:"noopener noreferrer",className:"hover:text-white transition-colors",children:a("landing.footer.documentation")})}),e.jsx("li",{children:e.jsx("a",{href:"https://github.com/okguitar/agentstudio/issues",target:"_blank",rel:"noopener noreferrer",className:"hover:text-white transition-colors",children:a("landing.footer.issues")})}),e.jsx("li",{children:e.jsx("button",{onClick:()=>n(!0),className:"hover:text-white transition-colors text-left w-full",children:a("landing.footer.wechat")||"微信群"})})]})]})]})})}),j&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-lg shadow-xl max-w-md w-full p-6 relative",children:[e.jsx("button",{onClick:()=>n(!1),className:"absolute top-4 right-4 text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 transition-colors",children:e.jsx(s,{className:"w-5 h-5"})}),e.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:a("landing.wechat.title")||"加入微信群"}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"flex justify-center",children:e.jsx("img",{src:"/wechat-qr-code.png",alt:"WeChat QR Code",className:"w-64 h-64 object-contain border border-gray-200 dark:border-gray-700 rounded-lg"})}),e.jsx("div",{className:"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4",children:e.jsxs("p",{className:"text-sm text-yellow-800 dark:text-yellow-200 text-center",children:[a("landing.wechat.fallback")||"二维码失效?请添加微信号:",e.jsx("span",{className:"font-mono font-semibold ml-1",children:a("landing.wechat.wechatId")||"your-wechat-id"})]})}),e.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400 text-center",children:a("landing.wechat.tip")||"扫码或添加微信号,即可加入交流群"})]})]})})]})};export{G as default};