@gxp-dev/tools 2.0.5 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tui/App.d.ts +13 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +480 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/components/CommandInput.d.ts +13 -0
- package/dist/tui/components/CommandInput.d.ts.map +1 -0
- package/dist/tui/components/CommandInput.js +180 -0
- package/dist/tui/components/CommandInput.js.map +1 -0
- package/dist/tui/components/GeminiPanel.d.ts +7 -0
- package/dist/tui/components/GeminiPanel.d.ts.map +1 -0
- package/dist/tui/components/GeminiPanel.js +99 -0
- package/dist/tui/components/GeminiPanel.js.map +1 -0
- package/dist/tui/components/Header.d.ts +6 -0
- package/dist/tui/components/Header.d.ts.map +1 -0
- package/dist/tui/components/Header.js +6 -0
- package/dist/tui/components/Header.js.map +1 -0
- package/dist/tui/components/LogPanel.d.ts +8 -0
- package/dist/tui/components/LogPanel.d.ts.map +1 -0
- package/dist/tui/components/LogPanel.js +89 -0
- package/dist/tui/components/LogPanel.js.map +1 -0
- package/dist/tui/components/TabBar.d.ts +9 -0
- package/dist/tui/components/TabBar.d.ts.map +1 -0
- package/dist/tui/components/TabBar.js +23 -0
- package/dist/tui/components/TabBar.js.map +1 -0
- package/dist/tui/components/WelcomeScreen.d.ts +2 -0
- package/dist/tui/components/WelcomeScreen.d.ts.map +1 -0
- package/dist/tui/components/WelcomeScreen.js +14 -0
- package/dist/tui/components/WelcomeScreen.js.map +1 -0
- package/dist/tui/index.d.ts +8 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +47 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/package.json +1 -0
- package/dist/tui/services/ExtensionService.d.ts +11 -0
- package/dist/tui/services/ExtensionService.d.ts.map +1 -0
- package/dist/tui/services/ExtensionService.js +101 -0
- package/dist/tui/services/ExtensionService.js.map +1 -0
- package/dist/tui/services/GeminiService.d.ts +40 -0
- package/dist/tui/services/GeminiService.d.ts.map +1 -0
- package/dist/tui/services/GeminiService.js +327 -0
- package/dist/tui/services/GeminiService.js.map +1 -0
- package/dist/tui/services/ServiceManager.d.ts +40 -0
- package/dist/tui/services/ServiceManager.d.ts.map +1 -0
- package/dist/tui/services/ServiceManager.js +283 -0
- package/dist/tui/services/ServiceManager.js.map +1 -0
- package/dist/tui/services/SocketService.d.ts +19 -0
- package/dist/tui/services/SocketService.d.ts.map +1 -0
- package/dist/tui/services/SocketService.js +163 -0
- package/dist/tui/services/SocketService.js.map +1 -0
- package/dist/tui/services/ViteService.d.ts +8 -0
- package/dist/tui/services/ViteService.d.ts.map +1 -0
- package/dist/tui/services/ViteService.js +89 -0
- package/dist/tui/services/ViteService.js.map +1 -0
- package/dist/tui/services/index.d.ts +6 -0
- package/dist/tui/services/index.d.ts.map +1 -0
- package/dist/tui/services/index.js +6 -0
- package/dist/tui/services/index.js.map +1 -0
- package/package.json +11 -1
- package/.github/workflows/npm-publish.yml +0 -48
- package/CLAUDE.md +0 -400
- package/REFACTOR_PLAN.md +0 -194
- package/docs/DOCUSAURUS_IMPORT.md +0 -378
- package/docs/_category_.json +0 -8
- package/docs/app-manifest.md +0 -272
- package/docs/building-for-platform.md +0 -315
- package/docs/dev-tools.md +0 -291
- package/docs/getting-started.md +0 -180
- package/docs/gxp-store.md +0 -305
- package/docs/index.md +0 -44
- package/tsconfig.tui.json +0 -21
- package/vite.config.js +0 -164
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ServiceStatus } from './services/index.js';
|
|
2
|
+
export interface Service {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
status: ServiceStatus;
|
|
6
|
+
logs: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface AppProps {
|
|
9
|
+
autoStart?: string[];
|
|
10
|
+
args?: Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
export default function App({ autoStart, args }: AppProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=App.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../bin/lib/tui/App.tsx"],"names":[],"mappings":"AAQA,OAAO,EAUL,aAAa,EAKd,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,QAAQ,2CAkjBxD"}
|
package/dist/tui/App.js
ADDED
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
3
|
+
import { Box, useApp, useInput, useStdout } from 'ink';
|
|
4
|
+
import WelcomeScreen from './components/WelcomeScreen.js';
|
|
5
|
+
import Header from './components/Header.js';
|
|
6
|
+
import TabBar from './components/TabBar.js';
|
|
7
|
+
import LogPanel from './components/LogPanel.js';
|
|
8
|
+
import CommandInput from './components/CommandInput.js';
|
|
9
|
+
import GeminiPanel from './components/GeminiPanel.js';
|
|
10
|
+
import { serviceManager, startVite, stopVite, startSocket, stopSocket, startExtension, stopExtension, listSocketEvents, sendSocketEvent, geminiService, isAuthenticated, clearAuthTokens, } from './services/index.js';
|
|
11
|
+
export default function App({ autoStart, args }) {
|
|
12
|
+
const { exit } = useApp();
|
|
13
|
+
const { stdout } = useStdout();
|
|
14
|
+
const [showGemini, setShowGemini] = useState(false);
|
|
15
|
+
const [services, setServices] = useState([]);
|
|
16
|
+
const [activeTab, setActiveTab] = useState(0);
|
|
17
|
+
const [suggestionRows, setSuggestionRows] = useState(0);
|
|
18
|
+
// Get terminal height for full screen
|
|
19
|
+
const terminalHeight = stdout?.rows || 24;
|
|
20
|
+
// Sync services from ServiceManager
|
|
21
|
+
const syncServices = useCallback(() => {
|
|
22
|
+
const managerServices = serviceManager.getAllServices();
|
|
23
|
+
setServices(managerServices.map(s => ({
|
|
24
|
+
id: s.id,
|
|
25
|
+
name: s.name,
|
|
26
|
+
status: s.status,
|
|
27
|
+
logs: s.logs,
|
|
28
|
+
})));
|
|
29
|
+
}, []);
|
|
30
|
+
// Set up ServiceManager event listeners
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
const onLog = (id, message) => {
|
|
33
|
+
setServices(prev => prev.map(s => s.id === id ? { ...s, logs: [...s.logs, message] } : s));
|
|
34
|
+
};
|
|
35
|
+
const onStatusChange = (id, status) => {
|
|
36
|
+
setServices(prev => prev.map(s => s.id === id ? { ...s, status } : s));
|
|
37
|
+
};
|
|
38
|
+
const onLogsCleared = (id) => {
|
|
39
|
+
setServices(prev => prev.map(s => s.id === id ? { ...s, logs: [] } : s));
|
|
40
|
+
};
|
|
41
|
+
serviceManager.on('log', onLog);
|
|
42
|
+
serviceManager.on('statusChange', onStatusChange);
|
|
43
|
+
serviceManager.on('logsCleared', onLogsCleared);
|
|
44
|
+
return () => {
|
|
45
|
+
serviceManager.off('log', onLog);
|
|
46
|
+
serviceManager.off('statusChange', onStatusChange);
|
|
47
|
+
serviceManager.off('logsCleared', onLogsCleared);
|
|
48
|
+
};
|
|
49
|
+
}, []);
|
|
50
|
+
// Cleanup on exit
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
const cleanup = () => {
|
|
53
|
+
serviceManager.forceStopAll();
|
|
54
|
+
};
|
|
55
|
+
process.on('SIGINT', cleanup);
|
|
56
|
+
process.on('SIGTERM', cleanup);
|
|
57
|
+
return () => {
|
|
58
|
+
cleanup();
|
|
59
|
+
process.off('SIGINT', cleanup);
|
|
60
|
+
process.off('SIGTERM', cleanup);
|
|
61
|
+
};
|
|
62
|
+
}, []);
|
|
63
|
+
// Handle keyboard shortcuts
|
|
64
|
+
useInput((input, key) => {
|
|
65
|
+
// Ctrl+C to exit
|
|
66
|
+
if (key.ctrl && input === 'c') {
|
|
67
|
+
serviceManager.forceStopAll();
|
|
68
|
+
exit();
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
// Ctrl+L to clear current log
|
|
72
|
+
if (key.ctrl && input === 'l') {
|
|
73
|
+
if (services[activeTab]) {
|
|
74
|
+
serviceManager.clearLogs(services[activeTab].id);
|
|
75
|
+
}
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
// Ctrl+K to stop current service
|
|
79
|
+
if (key.ctrl && input === 'k') {
|
|
80
|
+
if (services[activeTab] && services[activeTab].id !== 'system') {
|
|
81
|
+
stopService(services[activeTab].id);
|
|
82
|
+
}
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// Tab to cycle through tabs (when not in input)
|
|
86
|
+
if (key.tab && services.length > 0) {
|
|
87
|
+
const nextTab = key.shift
|
|
88
|
+
? (activeTab - 1 + services.length) % services.length
|
|
89
|
+
: (activeTab + 1) % services.length;
|
|
90
|
+
setActiveTab(nextTab);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
// Left/Right arrow to switch tabs
|
|
94
|
+
if (key.leftArrow && services.length > 0) {
|
|
95
|
+
setActiveTab((activeTab - 1 + services.length) % services.length);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (key.rightArrow && services.length > 0) {
|
|
99
|
+
setActiveTab((activeTab + 1) % services.length);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
// Ctrl+1-9 or Cmd+1-9 to switch tabs (for compatibility)
|
|
103
|
+
if ((key.ctrl || key.meta) && /^[1-9]$/.test(input)) {
|
|
104
|
+
const tabIndex = parseInt(input) - 1;
|
|
105
|
+
if (tabIndex < services.length) {
|
|
106
|
+
setActiveTab(tabIndex);
|
|
107
|
+
}
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
// Handle auto-start commands
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
if (autoStart?.length) {
|
|
114
|
+
setTimeout(() => {
|
|
115
|
+
autoStart.forEach(cmd => {
|
|
116
|
+
handleCommand(`/${cmd}`);
|
|
117
|
+
});
|
|
118
|
+
}, 100);
|
|
119
|
+
}
|
|
120
|
+
}, []);
|
|
121
|
+
const handleCommand = (input) => {
|
|
122
|
+
const trimmed = input.trim();
|
|
123
|
+
if (!trimmed.startsWith('/'))
|
|
124
|
+
return;
|
|
125
|
+
const parts = trimmed.slice(1).split(' ');
|
|
126
|
+
const command = parts[0];
|
|
127
|
+
const cmdArgs = parts.slice(1);
|
|
128
|
+
switch (command) {
|
|
129
|
+
case 'help':
|
|
130
|
+
addSystemLog(getHelpText());
|
|
131
|
+
break;
|
|
132
|
+
case 'dev':
|
|
133
|
+
startDevServer(cmdArgs);
|
|
134
|
+
break;
|
|
135
|
+
case 'socket':
|
|
136
|
+
if (cmdArgs[0] === 'send') {
|
|
137
|
+
handleSocketSend(cmdArgs.slice(1));
|
|
138
|
+
}
|
|
139
|
+
else if (cmdArgs[0] === 'list') {
|
|
140
|
+
handleSocketList();
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
const socketWithMock = cmdArgs.includes('--with-mock') || args?.withMock === true;
|
|
144
|
+
startSocketServer(socketWithMock);
|
|
145
|
+
}
|
|
146
|
+
break;
|
|
147
|
+
case 'mock':
|
|
148
|
+
// Shorthand for /socket --with-mock
|
|
149
|
+
startSocketServer(true);
|
|
150
|
+
break;
|
|
151
|
+
case 'ext':
|
|
152
|
+
const browser = cmdArgs[0] || 'chrome';
|
|
153
|
+
launchExtension(browser);
|
|
154
|
+
break;
|
|
155
|
+
case 'stop':
|
|
156
|
+
stopService(cmdArgs[0]);
|
|
157
|
+
break;
|
|
158
|
+
case 'restart':
|
|
159
|
+
restartService(cmdArgs[0]);
|
|
160
|
+
break;
|
|
161
|
+
case 'clear':
|
|
162
|
+
if (services[activeTab]) {
|
|
163
|
+
serviceManager.clearLogs(services[activeTab].id);
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
case 'quit':
|
|
167
|
+
case 'exit':
|
|
168
|
+
serviceManager.forceStopAll();
|
|
169
|
+
exit();
|
|
170
|
+
break;
|
|
171
|
+
case 'gemini':
|
|
172
|
+
case 'ai':
|
|
173
|
+
handleGeminiCommand(cmdArgs);
|
|
174
|
+
break;
|
|
175
|
+
default:
|
|
176
|
+
addSystemLog(`Unknown command: ${command}. Type /help for available commands.`);
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
const startDevServer = (cmdArgs) => {
|
|
180
|
+
const noHttps = cmdArgs.includes('--no-https') || args?.noHttps === true;
|
|
181
|
+
const noSocket = cmdArgs.includes('--no-socket') || args?.noSocket === true;
|
|
182
|
+
const withSocket = cmdArgs.includes('--with-socket') || args?.withSocket === true;
|
|
183
|
+
const withMock = cmdArgs.includes('--with-mock') || args?.withMock === true;
|
|
184
|
+
const withFirefox = cmdArgs.includes('--firefox') || args?.firefox === true;
|
|
185
|
+
const withChrome = cmdArgs.includes('--chrome') || args?.chrome === true;
|
|
186
|
+
// Determine port from env or default
|
|
187
|
+
const port = process.env.NODE_PORT || 3060;
|
|
188
|
+
const useHttps = !noHttps;
|
|
189
|
+
// Check SOCKET_IO_ENABLED env var (default to socket if enabled, unless --no-socket)
|
|
190
|
+
const socketEnabled = process.env.SOCKET_IO_ENABLED === 'true';
|
|
191
|
+
// Mock API requires socket server
|
|
192
|
+
const shouldStartSocket = !noSocket && (withSocket || socketEnabled || withMock);
|
|
193
|
+
// Check if already running
|
|
194
|
+
if (serviceManager.isRunning('vite')) {
|
|
195
|
+
addSystemLog('Vite dev server is already running.');
|
|
196
|
+
// Switch to vite tab
|
|
197
|
+
const viteIdx = services.findIndex(s => s.id === 'vite');
|
|
198
|
+
if (viteIdx >= 0)
|
|
199
|
+
setActiveTab(viteIdx);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
startVite({ noHttps });
|
|
203
|
+
// Also start socket server based on flags/env (with mock if requested)
|
|
204
|
+
if (shouldStartSocket && !serviceManager.isRunning('socket')) {
|
|
205
|
+
startSocket({ withMock });
|
|
206
|
+
}
|
|
207
|
+
// Launch browser extensions if requested (pass URL options)
|
|
208
|
+
if (withFirefox && !serviceManager.isRunning('ext-firefox')) {
|
|
209
|
+
startExtension({ browser: 'firefox', useHttps, port });
|
|
210
|
+
}
|
|
211
|
+
if (withChrome && !serviceManager.isRunning('ext-chrome')) {
|
|
212
|
+
startExtension({ browser: 'chrome', useHttps, port });
|
|
213
|
+
}
|
|
214
|
+
// Sync and switch to the new vite tab
|
|
215
|
+
const updatedServices = serviceManager.getAllServices();
|
|
216
|
+
const viteIdx = updatedServices.findIndex(s => s.id === 'vite');
|
|
217
|
+
setServices(updatedServices.map(s => ({
|
|
218
|
+
id: s.id,
|
|
219
|
+
name: s.name,
|
|
220
|
+
status: s.status,
|
|
221
|
+
logs: s.logs,
|
|
222
|
+
})));
|
|
223
|
+
setActiveTab(viteIdx >= 0 ? viteIdx : Math.max(0, updatedServices.length - 1));
|
|
224
|
+
};
|
|
225
|
+
const startSocketServer = (withMock = false) => {
|
|
226
|
+
if (serviceManager.isRunning('socket')) {
|
|
227
|
+
addSystemLog('Socket.IO server is already running.');
|
|
228
|
+
const socketIdx = services.findIndex(s => s.id === 'socket');
|
|
229
|
+
if (socketIdx >= 0)
|
|
230
|
+
setActiveTab(socketIdx);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
startSocket({ withMock });
|
|
234
|
+
// Sync and switch to the new socket tab
|
|
235
|
+
const updatedServices = serviceManager.getAllServices();
|
|
236
|
+
const socketIdx = updatedServices.findIndex(s => s.id === 'socket');
|
|
237
|
+
setServices(updatedServices.map(s => ({
|
|
238
|
+
id: s.id,
|
|
239
|
+
name: s.name,
|
|
240
|
+
status: s.status,
|
|
241
|
+
logs: s.logs,
|
|
242
|
+
})));
|
|
243
|
+
setActiveTab(socketIdx >= 0 ? socketIdx : Math.max(0, updatedServices.length - 1));
|
|
244
|
+
};
|
|
245
|
+
const launchExtension = (browser) => {
|
|
246
|
+
const browserType = browser.toLowerCase();
|
|
247
|
+
if (browserType !== 'chrome' && browserType !== 'firefox') {
|
|
248
|
+
addSystemLog(`Invalid browser: ${browser}. Use 'chrome' or 'firefox'.`);
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
const serviceId = `ext-${browserType}`;
|
|
252
|
+
if (serviceManager.isRunning(serviceId)) {
|
|
253
|
+
addSystemLog(`${browser} extension is already running.`);
|
|
254
|
+
const extIdx = services.findIndex(s => s.id === serviceId);
|
|
255
|
+
if (extIdx >= 0)
|
|
256
|
+
setActiveTab(extIdx);
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
startExtension({ browser: browserType });
|
|
260
|
+
// Sync and switch to the new extension tab
|
|
261
|
+
const updatedServices = serviceManager.getAllServices();
|
|
262
|
+
const extIdx = updatedServices.findIndex(s => s.id === serviceId);
|
|
263
|
+
setServices(updatedServices.map(s => ({
|
|
264
|
+
id: s.id,
|
|
265
|
+
name: s.name,
|
|
266
|
+
status: s.status,
|
|
267
|
+
logs: s.logs,
|
|
268
|
+
})));
|
|
269
|
+
setActiveTab(extIdx >= 0 ? extIdx : Math.max(0, updatedServices.length - 1));
|
|
270
|
+
};
|
|
271
|
+
const stopService = (serviceId) => {
|
|
272
|
+
const targetId = serviceId || services[activeTab]?.id;
|
|
273
|
+
if (!targetId) {
|
|
274
|
+
addSystemLog('No service specified. Usage: /stop <service-id>');
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
if (targetId === 'vite') {
|
|
278
|
+
stopVite();
|
|
279
|
+
}
|
|
280
|
+
else if (targetId === 'socket') {
|
|
281
|
+
stopSocket();
|
|
282
|
+
}
|
|
283
|
+
else if (targetId.startsWith('ext-')) {
|
|
284
|
+
const browser = targetId.replace('ext-', '');
|
|
285
|
+
stopExtension(browser);
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
serviceManager.stop(targetId);
|
|
289
|
+
}
|
|
290
|
+
syncServices();
|
|
291
|
+
};
|
|
292
|
+
const restartService = (serviceId) => {
|
|
293
|
+
const targetId = serviceId || services[activeTab]?.id;
|
|
294
|
+
if (!targetId) {
|
|
295
|
+
addSystemLog('No service to restart. Usage: /restart [service-id]');
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
if (targetId === 'system') {
|
|
299
|
+
addSystemLog('Cannot restart the system service.');
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
const success = serviceManager.restart(targetId);
|
|
303
|
+
if (!success) {
|
|
304
|
+
addSystemLog(`Cannot restart "${targetId}". Service config not found.`);
|
|
305
|
+
}
|
|
306
|
+
syncServices();
|
|
307
|
+
};
|
|
308
|
+
const handleGeminiCommand = async (cmdArgs) => {
|
|
309
|
+
const subCommand = cmdArgs[0];
|
|
310
|
+
switch (subCommand) {
|
|
311
|
+
case 'enable':
|
|
312
|
+
addSystemLog('Starting Google OAuth flow...');
|
|
313
|
+
addSystemLog('A browser window will open for authentication.');
|
|
314
|
+
const result = await geminiService.startOAuthFlow();
|
|
315
|
+
if (result.success) {
|
|
316
|
+
addSystemLog(`✅ ${result.message}`);
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
addSystemLog(`❌ ${result.message}`);
|
|
320
|
+
}
|
|
321
|
+
break;
|
|
322
|
+
case 'logout':
|
|
323
|
+
case 'disable':
|
|
324
|
+
clearAuthTokens();
|
|
325
|
+
addSystemLog('Logged out from Gemini AI.');
|
|
326
|
+
break;
|
|
327
|
+
case 'status':
|
|
328
|
+
if (isAuthenticated()) {
|
|
329
|
+
addSystemLog('✅ Gemini AI is authenticated and ready.');
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
addSystemLog('❌ Not authenticated. Run /gemini enable to set up.');
|
|
333
|
+
}
|
|
334
|
+
break;
|
|
335
|
+
case 'ask':
|
|
336
|
+
// Quick question without opening panel
|
|
337
|
+
const question = cmdArgs.slice(1).join(' ');
|
|
338
|
+
if (!question) {
|
|
339
|
+
addSystemLog('Usage: /gemini ask <your question>');
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
if (!isAuthenticated()) {
|
|
343
|
+
addSystemLog('Not authenticated. Run /gemini enable first.');
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
addSystemLog(`Asking Gemini: ${question}`);
|
|
347
|
+
try {
|
|
348
|
+
geminiService.loadProjectContext(process.cwd());
|
|
349
|
+
const response = await geminiService.sendMessage(question);
|
|
350
|
+
addSystemLog(`Gemini: ${response}`);
|
|
351
|
+
}
|
|
352
|
+
catch (err) {
|
|
353
|
+
addSystemLog(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);
|
|
354
|
+
}
|
|
355
|
+
break;
|
|
356
|
+
case 'clear':
|
|
357
|
+
geminiService.clearConversation();
|
|
358
|
+
addSystemLog('Conversation history cleared.');
|
|
359
|
+
break;
|
|
360
|
+
default:
|
|
361
|
+
// No subcommand = open chat panel
|
|
362
|
+
if (!isAuthenticated()) {
|
|
363
|
+
addSystemLog('Not authenticated. Run /gemini enable to set up Google authentication.');
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
setShowGemini(true);
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
const addSystemLog = (message) => {
|
|
370
|
+
// Find or create system service for general messages
|
|
371
|
+
let systemService = services.find(s => s.id === 'system');
|
|
372
|
+
if (!systemService) {
|
|
373
|
+
const newService = {
|
|
374
|
+
id: 'system',
|
|
375
|
+
name: 'System',
|
|
376
|
+
status: 'running',
|
|
377
|
+
logs: [message],
|
|
378
|
+
};
|
|
379
|
+
setServices(prev => {
|
|
380
|
+
const updated = [...prev, newService];
|
|
381
|
+
return updated;
|
|
382
|
+
});
|
|
383
|
+
if (services.length === 0)
|
|
384
|
+
setActiveTab(0);
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
setServices(prev => prev.map(s => s.id === 'system' ? { ...s, logs: [...s.logs, message] } : s));
|
|
388
|
+
}
|
|
389
|
+
// Switch to system tab
|
|
390
|
+
setTimeout(() => {
|
|
391
|
+
const sysIdx = services.findIndex(s => s.id === 'system');
|
|
392
|
+
if (sysIdx >= 0)
|
|
393
|
+
setActiveTab(sysIdx);
|
|
394
|
+
}, 50);
|
|
395
|
+
};
|
|
396
|
+
const handleSocketSend = async (eventArgs) => {
|
|
397
|
+
if (!eventArgs.length) {
|
|
398
|
+
addSystemLog('Usage: /socket send <event-name> [identifier]');
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
const eventName = eventArgs[0];
|
|
402
|
+
const identifier = eventArgs[1];
|
|
403
|
+
addSystemLog(`Sending socket event: ${eventName}...`);
|
|
404
|
+
const result = await sendSocketEvent(eventName, identifier);
|
|
405
|
+
if (result.success) {
|
|
406
|
+
addSystemLog(`✅ ${result.message}`);
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
addSystemLog(`❌ ${result.message}`);
|
|
410
|
+
}
|
|
411
|
+
};
|
|
412
|
+
const handleSocketList = () => {
|
|
413
|
+
const events = listSocketEvents();
|
|
414
|
+
if (events.length === 0) {
|
|
415
|
+
addSystemLog('No socket events found. Check your socket-events directory.');
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
let message = 'Available socket events:\n';
|
|
419
|
+
for (const event of events) {
|
|
420
|
+
message += `\n ${event.name}\n`;
|
|
421
|
+
message += ` Event: ${event.event}\n`;
|
|
422
|
+
message += ` Channel: ${event.channel}`;
|
|
423
|
+
}
|
|
424
|
+
message += '\n\nUsage: /socket send <event-name> [identifier]';
|
|
425
|
+
addSystemLog(message);
|
|
426
|
+
};
|
|
427
|
+
const getHelpText = () => `
|
|
428
|
+
Available commands:
|
|
429
|
+
/dev Start Vite (+ Socket if SOCKET_IO_ENABLED=true)
|
|
430
|
+
/dev --with-socket Start Vite + Socket.IO together
|
|
431
|
+
/dev --with-mock Start Vite + Socket.IO + Mock API server
|
|
432
|
+
/dev --no-socket Start Vite only (skip Socket.IO)
|
|
433
|
+
/dev --no-https Start Vite without SSL
|
|
434
|
+
/dev --firefox Start Vite + Firefox extension
|
|
435
|
+
/dev --chrome Start Vite + Chrome extension
|
|
436
|
+
/socket Start Socket.IO server
|
|
437
|
+
/socket --with-mock Start Socket.IO with Mock API enabled
|
|
438
|
+
/socket send <event> Send socket event
|
|
439
|
+
/socket list List available events
|
|
440
|
+
/mock Start Socket.IO + Mock API (shorthand)
|
|
441
|
+
/ext chrome Launch Chrome extension
|
|
442
|
+
/ext firefox Launch Firefox extension
|
|
443
|
+
/stop [service] Stop a running service
|
|
444
|
+
/restart [service] Restart a service
|
|
445
|
+
/clear Clear current log panel
|
|
446
|
+
/gemini Open Gemini AI chat panel
|
|
447
|
+
/gemini enable Set up Google authentication
|
|
448
|
+
/gemini ask <query> Quick question to Gemini
|
|
449
|
+
/gemini status Check authentication status
|
|
450
|
+
/gemini logout Log out from Gemini
|
|
451
|
+
/help Show this help message
|
|
452
|
+
/quit Exit the application
|
|
453
|
+
|
|
454
|
+
Keyboard shortcuts:
|
|
455
|
+
Tab / Shift+Tab Cycle through tabs
|
|
456
|
+
Left/Right Switch tabs
|
|
457
|
+
Cmd+1/2/3... Jump to tab (Mac)
|
|
458
|
+
Shift+Up/Down Scroll logs
|
|
459
|
+
Cmd+Up/Down Jump to top/bottom of logs
|
|
460
|
+
Ctrl+L Clear current log
|
|
461
|
+
Ctrl+C Exit application
|
|
462
|
+
Up/Down Command history (in input)
|
|
463
|
+
`;
|
|
464
|
+
// Show Gemini panel
|
|
465
|
+
if (showGemini) {
|
|
466
|
+
return (_jsx(GeminiPanel, { onClose: () => setShowGemini(false), onLog: addSystemLog }));
|
|
467
|
+
}
|
|
468
|
+
const currentService = services[activeTab];
|
|
469
|
+
// Calculate log panel height to make room for suggestions
|
|
470
|
+
// Fixed elements: Header (3), TabBar (1), Log border (2), Input (3), Hints (1) = 10 rows minimum
|
|
471
|
+
const fixedRows = 10;
|
|
472
|
+
const availableForLog = terminalHeight - fixedRows - suggestionRows;
|
|
473
|
+
const logPanelHeight = Math.max(3, availableForLog); // Minimum 3 rows for log panel
|
|
474
|
+
return (_jsxs(Box, { flexDirection: "column", height: terminalHeight, children: [_jsx(Header, { projectName: process.cwd().split('/').pop() || 'gxdev' }), services.length > 0 && (_jsx(TabBar, { services: services, activeTab: activeTab, onTabChange: setActiveTab })), _jsx(Box, { height: logPanelHeight, flexDirection: "column", borderStyle: "single", borderColor: "gray", overflow: "hidden", children: currentService ? (_jsx(LogPanel, { logs: currentService.logs, maxHeight: logPanelHeight })) : (_jsx(WelcomeScreen, {})) }), _jsx(CommandInput, { onSubmit: handleCommand, activeService: currentService ? {
|
|
475
|
+
id: currentService.id,
|
|
476
|
+
name: currentService.name,
|
|
477
|
+
status: currentService.status
|
|
478
|
+
} : null, onSuggestionsChange: setSuggestionRows })] }));
|
|
479
|
+
}
|
|
480
|
+
//# sourceMappingURL=App.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../bin/lib/tui/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface ActiveService {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
status: string;
|
|
5
|
+
}
|
|
6
|
+
interface CommandInputProps {
|
|
7
|
+
onSubmit: (command: string) => void;
|
|
8
|
+
activeService?: ActiveService | null;
|
|
9
|
+
onSuggestionsChange?: (count: number) => void;
|
|
10
|
+
}
|
|
11
|
+
export default function CommandInput({ onSubmit, activeService, onSuggestionsChange }: CommandInputProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=CommandInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandInput.d.ts","sourceRoot":"","sources":["../../../bin/lib/tui/components/CommandInput.tsx"],"names":[],"mappings":"AA4BA,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,iBAAiB;IACzB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,mBAAmB,EAAE,EAAE,iBAAiB,2CA6OvG"}
|