@gxp-dev/tools 2.0.5 → 2.0.6
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 +6 -1
- package/.github/workflows/npm-publish.yml +0 -48
- package/CLAUDE.md +0 -400
- package/REFACTOR_PLAN.md +0 -194
- package/browser-extensions/README.md +0 -1
- package/browser-extensions/chrome/background.js +0 -857
- package/browser-extensions/chrome/content.js +0 -51
- package/browser-extensions/chrome/devtools.html +0 -9
- package/browser-extensions/chrome/devtools.js +0 -23
- package/browser-extensions/chrome/icons/gx_off_128.png +0 -0
- package/browser-extensions/chrome/icons/gx_off_16.png +0 -0
- package/browser-extensions/chrome/icons/gx_off_32.png +0 -0
- package/browser-extensions/chrome/icons/gx_off_64.png +0 -0
- package/browser-extensions/chrome/icons/gx_on_128.png +0 -0
- package/browser-extensions/chrome/icons/gx_on_16.png +0 -0
- package/browser-extensions/chrome/icons/gx_on_32.png +0 -0
- package/browser-extensions/chrome/icons/gx_on_64.png +0 -0
- package/browser-extensions/chrome/inspector.js +0 -1087
- package/browser-extensions/chrome/manifest.json +0 -70
- package/browser-extensions/chrome/panel.html +0 -638
- package/browser-extensions/chrome/panel.js +0 -862
- package/browser-extensions/chrome/popup.html +0 -399
- package/browser-extensions/chrome/popup.js +0 -515
- package/browser-extensions/chrome/rules.json +0 -1
- package/browser-extensions/chrome/test-chrome.html +0 -145
- package/browser-extensions/chrome/test-mixed-content.html +0 -190
- package/browser-extensions/chrome/test-uri-pattern.html +0 -199
- package/browser-extensions/firefox/README.md +0 -134
- package/browser-extensions/firefox/background.js +0 -804
- package/browser-extensions/firefox/content.js +0 -120
- package/browser-extensions/firefox/debug-errors.html +0 -229
- package/browser-extensions/firefox/debug-https.html +0 -113
- package/browser-extensions/firefox/devtools.html +0 -9
- package/browser-extensions/firefox/devtools.js +0 -24
- package/browser-extensions/firefox/icons/gx_off_128.png +0 -0
- package/browser-extensions/firefox/icons/gx_off_16.png +0 -0
- package/browser-extensions/firefox/icons/gx_off_32.png +0 -0
- package/browser-extensions/firefox/icons/gx_off_64.png +0 -0
- package/browser-extensions/firefox/icons/gx_on_128.png +0 -0
- package/browser-extensions/firefox/icons/gx_on_16.png +0 -0
- package/browser-extensions/firefox/icons/gx_on_32.png +0 -0
- package/browser-extensions/firefox/icons/gx_on_64.png +0 -0
- package/browser-extensions/firefox/inspector.js +0 -1087
- package/browser-extensions/firefox/manifest.json +0 -67
- package/browser-extensions/firefox/panel.html +0 -638
- package/browser-extensions/firefox/panel.js +0 -862
- package/browser-extensions/firefox/popup.html +0 -525
- package/browser-extensions/firefox/popup.js +0 -536
- package/browser-extensions/firefox/test-gramercy.html +0 -126
- package/browser-extensions/firefox/test-imports.html +0 -58
- package/browser-extensions/firefox/test-masking.html +0 -147
- package/browser-extensions/firefox/test-uri-pattern.html +0 -199
- 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/runtime/PortalContainer.vue +0 -326
- package/runtime/dev-tools/DevToolsModal.vue +0 -217
- package/runtime/dev-tools/LayoutSwitcher.vue +0 -221
- package/runtime/dev-tools/MockDataEditor.vue +0 -621
- package/runtime/dev-tools/SocketSimulator.vue +0 -562
- package/runtime/dev-tools/StoreInspector.vue +0 -644
- package/runtime/dev-tools/index.js +0 -6
- package/runtime/gxpStringsPlugin.js +0 -428
- package/runtime/index.html +0 -22
- package/runtime/main.js +0 -32
- package/runtime/mock-api/auth-middleware.js +0 -97
- package/runtime/mock-api/image-generator.js +0 -221
- package/runtime/mock-api/index.js +0 -197
- package/runtime/mock-api/response-generator.js +0 -394
- package/runtime/mock-api/route-generator.js +0 -323
- package/runtime/mock-api/socket-triggers.js +0 -371
- package/runtime/mock-api/spec-loader.js +0 -300
- package/runtime/server.js +0 -180
- package/runtime/stores/gxpPortalConfigStore.js +0 -554
- package/runtime/stores/index.js +0 -6
- package/runtime/vite-inspector-plugin.js +0 -749
- package/runtime/vite-source-tracker-plugin.js +0 -232
- package/runtime/vite.config.js +0 -402
- package/scripts/launch-chrome.js +0 -90
- package/scripts/pack-chrome.js +0 -91
- package/socket-events/AiSessionMessageCreated.json +0 -18
- package/socket-events/SocialStreamPostCreated.json +0 -24
- package/socket-events/SocialStreamPostVariantCompleted.json +0 -23
- package/template/README.md +0 -332
- package/template/app-manifest.json +0 -32
- package/template/dev-assets/images/avatar-placeholder.png +0 -0
- package/template/dev-assets/images/background-placeholder.jpg +0 -0
- package/template/dev-assets/images/banner-placeholder.jpg +0 -0
- package/template/dev-assets/images/icon-placeholder.png +0 -0
- package/template/dev-assets/images/logo-placeholder.png +0 -0
- package/template/dev-assets/images/product-placeholder.jpg +0 -0
- package/template/dev-assets/images/thumbnail-placeholder.jpg +0 -0
- package/template/env.example +0 -51
- package/template/gitignore +0 -53
- package/template/index.html +0 -22
- package/template/main.js +0 -28
- package/template/src/DemoPage.vue +0 -459
- package/template/src/Plugin.vue +0 -38
- package/template/src/stores/index.js +0 -9
- package/template/src/stores/test-data.json +0 -173
- package/template/theme-layouts/AdditionalStyling.css +0 -0
- package/template/theme-layouts/PrivateLayout.vue +0 -39
- package/template/theme-layouts/PublicLayout.vue +0 -39
- package/template/theme-layouts/SystemLayout.vue +0 -39
- package/template/vite.config.js +0 -333
- package/tsconfig.tui.json +0 -21
- package/vite.config.js +0 -164
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type BrowserType = 'chrome' | 'firefox';
|
|
2
|
+
export interface ExtensionOptions {
|
|
3
|
+
browser: BrowserType;
|
|
4
|
+
cwd?: string;
|
|
5
|
+
useHttps?: boolean;
|
|
6
|
+
port?: number | string;
|
|
7
|
+
}
|
|
8
|
+
export declare function startExtension(options: ExtensionOptions): void;
|
|
9
|
+
export declare function stopExtension(browser: BrowserType): boolean;
|
|
10
|
+
export declare function isExtensionRunning(browser: BrowserType): boolean;
|
|
11
|
+
//# sourceMappingURL=ExtensionService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtensionService.d.ts","sourceRoot":"","sources":["../../../bin/lib/tui/services/ExtensionService.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AA2BD,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CA0E9D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE3D;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAEhE"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { serviceManager } from './ServiceManager.js';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
// Get the toolkit root directory
|
|
6
|
+
function getToolkitRoot() {
|
|
7
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
// Navigate from dist/tui/services to project root (3 levels up)
|
|
9
|
+
// dist/tui/services -> dist/tui -> dist -> gx-devtools
|
|
10
|
+
return path.resolve(__dirname, '..', '..', '..');
|
|
11
|
+
}
|
|
12
|
+
// Find the extension path (project-local or toolkit built-in)
|
|
13
|
+
function findExtensionPath(browser, cwd) {
|
|
14
|
+
// Check local project first
|
|
15
|
+
const localPath = path.join(cwd, 'browser-extensions', browser);
|
|
16
|
+
if (fs.existsSync(localPath)) {
|
|
17
|
+
return localPath;
|
|
18
|
+
}
|
|
19
|
+
// Fall back to toolkit's built-in extension
|
|
20
|
+
const toolkitPath = path.join(getToolkitRoot(), 'browser-extensions', browser);
|
|
21
|
+
if (fs.existsSync(toolkitPath)) {
|
|
22
|
+
return toolkitPath;
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
export function startExtension(options) {
|
|
27
|
+
const { browser, useHttps = true, port = 3060 } = options;
|
|
28
|
+
const cwd = options.cwd || process.cwd();
|
|
29
|
+
const serviceId = `ext-${browser}`;
|
|
30
|
+
// Compute the start URL based on options
|
|
31
|
+
const protocol = useHttps ? 'https' : 'http';
|
|
32
|
+
const startUrl = `${protocol}://localhost:${port}`;
|
|
33
|
+
// Check if already running
|
|
34
|
+
if (serviceManager.isRunning(serviceId)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const extensionPath = findExtensionPath(browser, cwd);
|
|
38
|
+
if (!extensionPath) {
|
|
39
|
+
// Create a dummy service to show the error
|
|
40
|
+
const errorState = serviceManager.start({
|
|
41
|
+
id: serviceId,
|
|
42
|
+
name: `${browser.charAt(0).toUpperCase() + browser.slice(1)} Extension`,
|
|
43
|
+
command: 'echo',
|
|
44
|
+
args: [`Extension not found for ${browser}`],
|
|
45
|
+
cwd,
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (browser === 'firefox') {
|
|
50
|
+
const config = {
|
|
51
|
+
id: serviceId,
|
|
52
|
+
name: 'Firefox Extension',
|
|
53
|
+
command: 'npx',
|
|
54
|
+
args: ['web-ext', 'run', '--source-dir', extensionPath, '--start-url', startUrl],
|
|
55
|
+
cwd,
|
|
56
|
+
env: {
|
|
57
|
+
FORCE_COLOR: '1',
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
serviceManager.start(config);
|
|
61
|
+
}
|
|
62
|
+
else if (browser === 'chrome') {
|
|
63
|
+
// For Chrome, we need to use the launch script
|
|
64
|
+
const toolkitRoot = getToolkitRoot();
|
|
65
|
+
let scriptPath = path.join(cwd, 'scripts', 'launch-chrome.js');
|
|
66
|
+
if (!fs.existsSync(scriptPath)) {
|
|
67
|
+
scriptPath = path.join(toolkitRoot, 'scripts', 'launch-chrome.js');
|
|
68
|
+
}
|
|
69
|
+
if (!fs.existsSync(scriptPath)) {
|
|
70
|
+
const errorState = serviceManager.start({
|
|
71
|
+
id: serviceId,
|
|
72
|
+
name: 'Chrome Extension',
|
|
73
|
+
command: 'echo',
|
|
74
|
+
args: ['Chrome launcher script not found'],
|
|
75
|
+
cwd,
|
|
76
|
+
});
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const config = {
|
|
80
|
+
id: serviceId,
|
|
81
|
+
name: 'Chrome Extension',
|
|
82
|
+
command: 'node',
|
|
83
|
+
args: [scriptPath],
|
|
84
|
+
cwd,
|
|
85
|
+
env: {
|
|
86
|
+
FORCE_COLOR: '1',
|
|
87
|
+
CHROME_EXTENSION_PATH: extensionPath,
|
|
88
|
+
USE_HTTPS: String(useHttps),
|
|
89
|
+
NODE_PORT: String(port),
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
serviceManager.start(config);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export function stopExtension(browser) {
|
|
96
|
+
return serviceManager.stop(`ext-${browser}`);
|
|
97
|
+
}
|
|
98
|
+
export function isExtensionRunning(browser) {
|
|
99
|
+
return serviceManager.isRunning(`ext-${browser}`);
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=ExtensionService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtensionService.js","sourceRoot":"","sources":["../../../bin/lib/tui/services/ExtensionService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,qBAAqB,CAAC;AACpE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAWpC,iCAAiC;AACjC,SAAS,cAAc;IACrB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,gEAAgE;IAChE,uDAAuD;IACvD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,8DAA8D;AAC9D,SAAS,iBAAiB,CAAC,OAAoB,EAAE,GAAW;IAC1D,4BAA4B;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAChE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,4CAA4C;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAC/E,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAyB;IACtD,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,OAAO,OAAO,EAAE,CAAC;IAEnC,yCAAyC;IACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,QAAQ,GAAG,GAAG,QAAQ,gBAAgB,IAAI,EAAE,CAAC;IAEnD,2BAA2B;IAC3B,IAAI,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,2CAA2C;QAC3C,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC;YACtC,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY;YACvE,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,CAAC,2BAA2B,OAAO,EAAE,CAAC;YAC5C,GAAG;SACJ,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAkB;YAC5B,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC;YAChF,GAAG;YACH,GAAG,EAAE;gBACH,WAAW,EAAE,GAAG;aACjB;SACF,CAAC;QACF,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;SAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,+CAA+C;QAC/C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAE/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC;gBACtC,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,kCAAkC,CAAC;gBAC1C,GAAG;aACJ,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAkB;YAC5B,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,CAAC,UAAU,CAAC;YAClB,GAAG;YACH,GAAG,EAAE;gBACH,WAAW,EAAE,GAAG;gBAChB,qBAAqB,EAAE,aAAa;gBACpC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC;gBAC3B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC;aACxB;SACF,CAAC;QACF,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAoB;IAChD,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAoB;IACrD,OAAO,cAAc,CAAC,SAAS,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
export interface GeminiConfig {
|
|
3
|
+
systemPrompt?: string;
|
|
4
|
+
includeDocs?: string[];
|
|
5
|
+
projectContext?: boolean;
|
|
6
|
+
maxContextTokens?: number;
|
|
7
|
+
}
|
|
8
|
+
interface AuthTokens {
|
|
9
|
+
accessToken: string;
|
|
10
|
+
refreshToken: string;
|
|
11
|
+
expiresAt: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function loadAuthTokens(): AuthTokens | null;
|
|
14
|
+
export declare function clearAuthTokens(): void;
|
|
15
|
+
export declare function loadGeminiConfig(): GeminiConfig;
|
|
16
|
+
export declare function saveGeminiConfig(config: GeminiConfig): void;
|
|
17
|
+
export declare function isAuthenticated(): boolean;
|
|
18
|
+
export declare class GeminiService extends EventEmitter {
|
|
19
|
+
private conversationHistory;
|
|
20
|
+
private projectContext;
|
|
21
|
+
constructor();
|
|
22
|
+
startOAuthFlow(): Promise<{
|
|
23
|
+
success: boolean;
|
|
24
|
+
message: string;
|
|
25
|
+
}>;
|
|
26
|
+
private exchangeCodeForTokens;
|
|
27
|
+
private refreshAccessToken;
|
|
28
|
+
private getAccessToken;
|
|
29
|
+
loadProjectContext(cwd: string): void;
|
|
30
|
+
loadCustomDocs(): string;
|
|
31
|
+
sendMessage(message: string): Promise<string>;
|
|
32
|
+
clearConversation(): void;
|
|
33
|
+
getConversationHistory(): Array<{
|
|
34
|
+
role: string;
|
|
35
|
+
content: string;
|
|
36
|
+
}>;
|
|
37
|
+
}
|
|
38
|
+
export declare const geminiService: GeminiService;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=GeminiService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiService.d.ts","sourceRoot":"","sources":["../../../bin/lib/tui/services/GeminiService.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAGD,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAgCD,wBAAgB,cAAc,IAAI,UAAU,GAAG,IAAI,CAWlD;AAUD,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAGD,wBAAgB,gBAAgB,IAAI,YAAY,CAgB/C;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAI3D;AAGD,wBAAgB,eAAe,IAAI,OAAO,CAKzC;AAGD,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,mBAAmB,CAAgD;IAC3E,OAAO,CAAC,cAAc,CAAc;;IAO9B,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;YA+ExD,qBAAqB;YA8BrB,kBAAkB;YAiClB,cAAc;IAiB5B,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAoBrC,cAAc,IAAI,MAAM;IAqBlB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2DnD,iBAAiB,IAAI,IAAI;IAKzB,sBAAsB,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAGnE;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import http from 'http';
|
|
4
|
+
import open from 'open';
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
// Get the gxdev config directory
|
|
7
|
+
function getConfigDir() {
|
|
8
|
+
const home = process.env.HOME || process.env.USERPROFILE || '';
|
|
9
|
+
return path.join(home, '.gxdev');
|
|
10
|
+
}
|
|
11
|
+
// Ensure config directory exists
|
|
12
|
+
function ensureConfigDir() {
|
|
13
|
+
const configDir = getConfigDir();
|
|
14
|
+
if (!fs.existsSync(configDir)) {
|
|
15
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
// Get auth file path
|
|
19
|
+
function getAuthFilePath() {
|
|
20
|
+
return path.join(getConfigDir(), 'gemini-auth.json');
|
|
21
|
+
}
|
|
22
|
+
// Get config file path
|
|
23
|
+
function getConfigFilePath() {
|
|
24
|
+
return path.join(getConfigDir(), 'gemini-config.json');
|
|
25
|
+
}
|
|
26
|
+
// Get docs directory path
|
|
27
|
+
function getDocsDir() {
|
|
28
|
+
return path.join(getConfigDir(), 'gemini-docs');
|
|
29
|
+
}
|
|
30
|
+
// Load saved auth tokens
|
|
31
|
+
export function loadAuthTokens() {
|
|
32
|
+
try {
|
|
33
|
+
const authPath = getAuthFilePath();
|
|
34
|
+
if (fs.existsSync(authPath)) {
|
|
35
|
+
const content = fs.readFileSync(authPath, 'utf-8');
|
|
36
|
+
return JSON.parse(content);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Invalid or missing auth file
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
// Save auth tokens
|
|
45
|
+
function saveAuthTokens(tokens) {
|
|
46
|
+
ensureConfigDir();
|
|
47
|
+
const authPath = getAuthFilePath();
|
|
48
|
+
fs.writeFileSync(authPath, JSON.stringify(tokens, null, 2));
|
|
49
|
+
}
|
|
50
|
+
// Clear auth tokens
|
|
51
|
+
export function clearAuthTokens() {
|
|
52
|
+
const authPath = getAuthFilePath();
|
|
53
|
+
if (fs.existsSync(authPath)) {
|
|
54
|
+
fs.unlinkSync(authPath);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Load Gemini config
|
|
58
|
+
export function loadGeminiConfig() {
|
|
59
|
+
try {
|
|
60
|
+
const configPath = getConfigFilePath();
|
|
61
|
+
if (fs.existsSync(configPath)) {
|
|
62
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
63
|
+
return JSON.parse(content);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Invalid or missing config file
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
systemPrompt: 'You are a helpful assistant for GxP plugin development.',
|
|
71
|
+
includeDocs: [],
|
|
72
|
+
projectContext: true,
|
|
73
|
+
maxContextTokens: 4000,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// Save Gemini config
|
|
77
|
+
export function saveGeminiConfig(config) {
|
|
78
|
+
ensureConfigDir();
|
|
79
|
+
const configPath = getConfigFilePath();
|
|
80
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
81
|
+
}
|
|
82
|
+
// Check if authenticated
|
|
83
|
+
export function isAuthenticated() {
|
|
84
|
+
const tokens = loadAuthTokens();
|
|
85
|
+
if (!tokens)
|
|
86
|
+
return false;
|
|
87
|
+
// Check if token is expired (with 5 min buffer)
|
|
88
|
+
return tokens.expiresAt > Date.now() + 5 * 60 * 1000;
|
|
89
|
+
}
|
|
90
|
+
// Gemini Service class
|
|
91
|
+
export class GeminiService extends EventEmitter {
|
|
92
|
+
constructor() {
|
|
93
|
+
super();
|
|
94
|
+
this.conversationHistory = [];
|
|
95
|
+
this.projectContext = '';
|
|
96
|
+
}
|
|
97
|
+
// Start OAuth flow
|
|
98
|
+
async startOAuthFlow() {
|
|
99
|
+
return new Promise((resolve) => {
|
|
100
|
+
// Create local server for OAuth callback
|
|
101
|
+
const PORT = 8234;
|
|
102
|
+
let server;
|
|
103
|
+
const handleCallback = (req, res) => {
|
|
104
|
+
const url = new URL(req.url || '', `http://localhost:${PORT}`);
|
|
105
|
+
if (url.pathname === '/callback') {
|
|
106
|
+
const code = url.searchParams.get('code');
|
|
107
|
+
const error = url.searchParams.get('error');
|
|
108
|
+
if (error) {
|
|
109
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
110
|
+
res.end('<html><body><h1>Authentication Failed</h1><p>You can close this window.</p></body></html>');
|
|
111
|
+
server.close();
|
|
112
|
+
resolve({ success: false, message: `OAuth error: ${error}` });
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (code) {
|
|
116
|
+
// Exchange code for tokens
|
|
117
|
+
this.exchangeCodeForTokens(code)
|
|
118
|
+
.then((tokens) => {
|
|
119
|
+
saveAuthTokens(tokens);
|
|
120
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
121
|
+
res.end('<html><body><h1>Authentication Successful!</h1><p>You can close this window and return to gxdev.</p></body></html>');
|
|
122
|
+
server.close();
|
|
123
|
+
resolve({ success: true, message: 'Successfully authenticated with Google.' });
|
|
124
|
+
})
|
|
125
|
+
.catch((err) => {
|
|
126
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
127
|
+
res.end('<html><body><h1>Authentication Failed</h1><p>Error exchanging code for tokens.</p></body></html>');
|
|
128
|
+
server.close();
|
|
129
|
+
resolve({ success: false, message: `Token exchange error: ${err.message}` });
|
|
130
|
+
});
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
res.writeHead(404);
|
|
135
|
+
res.end('Not found');
|
|
136
|
+
};
|
|
137
|
+
server = http.createServer(handleCallback);
|
|
138
|
+
server.listen(PORT, () => {
|
|
139
|
+
// Construct OAuth URL
|
|
140
|
+
// Note: These are placeholder values - you'll need to set up actual Google Cloud credentials
|
|
141
|
+
const clientId = process.env.GOOGLE_CLIENT_ID || 'YOUR_CLIENT_ID';
|
|
142
|
+
const redirectUri = `http://localhost:${PORT}/callback`;
|
|
143
|
+
const scope = 'https://www.googleapis.com/auth/generative-language';
|
|
144
|
+
const authUrl = `https://accounts.google.com/o/oauth2/v2/auth?` +
|
|
145
|
+
`client_id=${encodeURIComponent(clientId)}` +
|
|
146
|
+
`&redirect_uri=${encodeURIComponent(redirectUri)}` +
|
|
147
|
+
`&response_type=code` +
|
|
148
|
+
`&scope=${encodeURIComponent(scope)}` +
|
|
149
|
+
`&access_type=offline` +
|
|
150
|
+
`&prompt=consent`;
|
|
151
|
+
this.emit('log', `Opening browser for Google authentication...`);
|
|
152
|
+
this.emit('log', `If browser doesn't open, visit: ${authUrl}`);
|
|
153
|
+
open(authUrl).catch(() => {
|
|
154
|
+
this.emit('log', `Could not open browser automatically. Please visit the URL above.`);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
// Timeout after 5 minutes
|
|
158
|
+
setTimeout(() => {
|
|
159
|
+
server.close();
|
|
160
|
+
resolve({ success: false, message: 'Authentication timed out. Please try again.' });
|
|
161
|
+
}, 5 * 60 * 1000);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
// Exchange authorization code for tokens
|
|
165
|
+
async exchangeCodeForTokens(code) {
|
|
166
|
+
const clientId = process.env.GOOGLE_CLIENT_ID || 'YOUR_CLIENT_ID';
|
|
167
|
+
const clientSecret = process.env.GOOGLE_CLIENT_SECRET || 'YOUR_CLIENT_SECRET';
|
|
168
|
+
const redirectUri = 'http://localhost:8234/callback';
|
|
169
|
+
const response = await fetch('https://oauth2.googleapis.com/token', {
|
|
170
|
+
method: 'POST',
|
|
171
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
172
|
+
body: new URLSearchParams({
|
|
173
|
+
code,
|
|
174
|
+
client_id: clientId,
|
|
175
|
+
client_secret: clientSecret,
|
|
176
|
+
redirect_uri: redirectUri,
|
|
177
|
+
grant_type: 'authorization_code',
|
|
178
|
+
}),
|
|
179
|
+
});
|
|
180
|
+
if (!response.ok) {
|
|
181
|
+
throw new Error(`Token exchange failed: ${response.statusText}`);
|
|
182
|
+
}
|
|
183
|
+
const data = await response.json();
|
|
184
|
+
return {
|
|
185
|
+
accessToken: data.access_token,
|
|
186
|
+
refreshToken: data.refresh_token,
|
|
187
|
+
expiresAt: Date.now() + (data.expires_in * 1000),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
// Refresh access token
|
|
191
|
+
async refreshAccessToken() {
|
|
192
|
+
const tokens = loadAuthTokens();
|
|
193
|
+
if (!tokens?.refreshToken) {
|
|
194
|
+
throw new Error('No refresh token available');
|
|
195
|
+
}
|
|
196
|
+
const clientId = process.env.GOOGLE_CLIENT_ID || 'YOUR_CLIENT_ID';
|
|
197
|
+
const clientSecret = process.env.GOOGLE_CLIENT_SECRET || 'YOUR_CLIENT_SECRET';
|
|
198
|
+
const response = await fetch('https://oauth2.googleapis.com/token', {
|
|
199
|
+
method: 'POST',
|
|
200
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
201
|
+
body: new URLSearchParams({
|
|
202
|
+
refresh_token: tokens.refreshToken,
|
|
203
|
+
client_id: clientId,
|
|
204
|
+
client_secret: clientSecret,
|
|
205
|
+
grant_type: 'refresh_token',
|
|
206
|
+
}),
|
|
207
|
+
});
|
|
208
|
+
if (!response.ok) {
|
|
209
|
+
throw new Error('Failed to refresh token');
|
|
210
|
+
}
|
|
211
|
+
const data = await response.json();
|
|
212
|
+
saveAuthTokens({
|
|
213
|
+
accessToken: data.access_token,
|
|
214
|
+
refreshToken: tokens.refreshToken,
|
|
215
|
+
expiresAt: Date.now() + (data.expires_in * 1000),
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
// Get valid access token (refresh if needed)
|
|
219
|
+
async getAccessToken() {
|
|
220
|
+
const tokens = loadAuthTokens();
|
|
221
|
+
if (!tokens) {
|
|
222
|
+
throw new Error('Not authenticated. Run /gemini enable first.');
|
|
223
|
+
}
|
|
224
|
+
// Check if token needs refresh (with 5 min buffer)
|
|
225
|
+
if (tokens.expiresAt < Date.now() + 5 * 60 * 1000) {
|
|
226
|
+
await this.refreshAccessToken();
|
|
227
|
+
const newTokens = loadAuthTokens();
|
|
228
|
+
return newTokens.accessToken;
|
|
229
|
+
}
|
|
230
|
+
return tokens.accessToken;
|
|
231
|
+
}
|
|
232
|
+
// Load project context
|
|
233
|
+
loadProjectContext(cwd) {
|
|
234
|
+
const files = ['CLAUDE.md', 'README.md', 'package.json'];
|
|
235
|
+
const contextParts = [];
|
|
236
|
+
for (const file of files) {
|
|
237
|
+
const filePath = path.join(cwd, file);
|
|
238
|
+
if (fs.existsSync(filePath)) {
|
|
239
|
+
try {
|
|
240
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
241
|
+
contextParts.push(`=== ${file} ===\n${content.slice(0, 2000)}`);
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
// Skip unreadable files
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
this.projectContext = contextParts.join('\n\n');
|
|
249
|
+
}
|
|
250
|
+
// Load custom docs
|
|
251
|
+
loadCustomDocs() {
|
|
252
|
+
const docsDir = getDocsDir();
|
|
253
|
+
if (!fs.existsSync(docsDir)) {
|
|
254
|
+
return '';
|
|
255
|
+
}
|
|
256
|
+
const docParts = [];
|
|
257
|
+
try {
|
|
258
|
+
const files = fs.readdirSync(docsDir).filter(f => f.endsWith('.md'));
|
|
259
|
+
for (const file of files.slice(0, 5)) { // Limit to 5 docs
|
|
260
|
+
const content = fs.readFileSync(path.join(docsDir, file), 'utf-8');
|
|
261
|
+
docParts.push(`=== ${file} ===\n${content.slice(0, 2000)}`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
// Skip on error
|
|
266
|
+
}
|
|
267
|
+
return docParts.join('\n\n');
|
|
268
|
+
}
|
|
269
|
+
// Send message to Gemini
|
|
270
|
+
async sendMessage(message) {
|
|
271
|
+
const config = loadGeminiConfig();
|
|
272
|
+
const accessToken = await this.getAccessToken();
|
|
273
|
+
// Build context
|
|
274
|
+
let systemContext = config.systemPrompt || '';
|
|
275
|
+
if (config.projectContext && this.projectContext) {
|
|
276
|
+
systemContext += '\n\nProject Context:\n' + this.projectContext;
|
|
277
|
+
}
|
|
278
|
+
const customDocs = this.loadCustomDocs();
|
|
279
|
+
if (customDocs) {
|
|
280
|
+
systemContext += '\n\nDocumentation:\n' + customDocs;
|
|
281
|
+
}
|
|
282
|
+
// Add to conversation history
|
|
283
|
+
this.conversationHistory.push({ role: 'user', content: message });
|
|
284
|
+
// Prepare request body for Gemini API
|
|
285
|
+
const requestBody = {
|
|
286
|
+
contents: [
|
|
287
|
+
{
|
|
288
|
+
role: 'user',
|
|
289
|
+
parts: [{ text: systemContext + '\n\nUser: ' + message }]
|
|
290
|
+
}
|
|
291
|
+
],
|
|
292
|
+
generationConfig: {
|
|
293
|
+
maxOutputTokens: 2048,
|
|
294
|
+
temperature: 0.7,
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
// Call Gemini API
|
|
298
|
+
const response = await fetch('https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent', {
|
|
299
|
+
method: 'POST',
|
|
300
|
+
headers: {
|
|
301
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
302
|
+
'Content-Type': 'application/json',
|
|
303
|
+
},
|
|
304
|
+
body: JSON.stringify(requestBody),
|
|
305
|
+
});
|
|
306
|
+
if (!response.ok) {
|
|
307
|
+
const errorText = await response.text();
|
|
308
|
+
throw new Error(`Gemini API error: ${response.status} - ${errorText}`);
|
|
309
|
+
}
|
|
310
|
+
const data = await response.json();
|
|
311
|
+
const responseText = data.candidates?.[0]?.content?.parts?.[0]?.text || 'No response generated.';
|
|
312
|
+
// Add to conversation history
|
|
313
|
+
this.conversationHistory.push({ role: 'assistant', content: responseText });
|
|
314
|
+
return responseText;
|
|
315
|
+
}
|
|
316
|
+
// Clear conversation history
|
|
317
|
+
clearConversation() {
|
|
318
|
+
this.conversationHistory = [];
|
|
319
|
+
}
|
|
320
|
+
// Get conversation history
|
|
321
|
+
getConversationHistory() {
|
|
322
|
+
return [...this.conversationHistory];
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
// Singleton instance
|
|
326
|
+
export const geminiService = new GeminiService();
|
|
327
|
+
//# sourceMappingURL=GeminiService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiService.js","sourceRoot":"","sources":["../../../bin/lib/tui/services/GeminiService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ChildProcess } from 'child_process';
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
export type ServiceStatus = 'stopped' | 'starting' | 'running' | 'error';
|
|
4
|
+
export interface ServiceConfig {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
command: string;
|
|
8
|
+
args: string[];
|
|
9
|
+
cwd: string;
|
|
10
|
+
env?: Record<string, string>;
|
|
11
|
+
}
|
|
12
|
+
export interface ServiceState {
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
status: ServiceStatus;
|
|
16
|
+
logs: string[];
|
|
17
|
+
process?: ChildProcess;
|
|
18
|
+
pid?: number;
|
|
19
|
+
error?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare class ServiceManager extends EventEmitter {
|
|
22
|
+
private services;
|
|
23
|
+
private maxLogLines;
|
|
24
|
+
private cleanupRegistered;
|
|
25
|
+
constructor();
|
|
26
|
+
private registerCleanupHandlers;
|
|
27
|
+
getService(id: string): ServiceState | undefined;
|
|
28
|
+
getAllServices(): ServiceState[];
|
|
29
|
+
isRunning(id: string): boolean;
|
|
30
|
+
start(config: ServiceConfig): ServiceState;
|
|
31
|
+
stop(id: string): boolean;
|
|
32
|
+
stopAll(): void;
|
|
33
|
+
forceStopAll(): void;
|
|
34
|
+
restart(id: string): boolean;
|
|
35
|
+
getConfig(id: string): ServiceConfig | undefined;
|
|
36
|
+
clearLogs(id: string): void;
|
|
37
|
+
private addLog;
|
|
38
|
+
}
|
|
39
|
+
export declare const serviceManager: ServiceManager;
|
|
40
|
+
//# sourceMappingURL=ServiceManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceManager.d.ts","sourceRoot":"","sources":["../../../bin/lib/tui/services/ServiceManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,YAAY,EAAY,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAKD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,iBAAiB,CAAS;;IAQlC,OAAO,CAAC,uBAAuB;IAuB/B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIhD,cAAc,IAAI,YAAY,EAAE;IAIhC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAK9B,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY;IAoH1C,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IA8BzB,OAAO,IAAI,IAAI;IAOf,YAAY,IAAI,IAAI;IAkCpB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IA8C5B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIhD,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQ3B,OAAO,CAAC,MAAM;CAaf;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|