@gxp-dev/tools 2.0.63 → 2.0.64

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 (182) hide show
  1. package/README.md +32 -31
  2. package/bin/gx-devtools.js +74 -54
  3. package/bin/lib/cli.js +23 -21
  4. package/bin/lib/commands/add-dependency.js +366 -325
  5. package/bin/lib/commands/assets.js +137 -139
  6. package/bin/lib/commands/build.js +169 -174
  7. package/bin/lib/commands/datastore.js +181 -183
  8. package/bin/lib/commands/dev.js +127 -131
  9. package/bin/lib/commands/extensions.js +147 -149
  10. package/bin/lib/commands/extract-config.js +73 -67
  11. package/bin/lib/commands/index.js +12 -12
  12. package/bin/lib/commands/init.js +342 -240
  13. package/bin/lib/commands/publish.js +69 -75
  14. package/bin/lib/commands/socket.js +69 -69
  15. package/bin/lib/commands/ssl.js +14 -14
  16. package/bin/lib/constants.js +10 -24
  17. package/bin/lib/tui/App.tsx +761 -705
  18. package/bin/lib/tui/components/AIPanel.tsx +191 -171
  19. package/bin/lib/tui/components/CommandInput.tsx +394 -343
  20. package/bin/lib/tui/components/GeminiPanel.tsx +175 -151
  21. package/bin/lib/tui/components/Header.tsx +23 -21
  22. package/bin/lib/tui/components/LogPanel.tsx +244 -220
  23. package/bin/lib/tui/components/TabBar.tsx +50 -48
  24. package/bin/lib/tui/components/WelcomeScreen.tsx +126 -71
  25. package/bin/lib/tui/index.tsx +37 -39
  26. package/bin/lib/tui/services/AIService.ts +518 -462
  27. package/bin/lib/tui/services/ExtensionService.ts +140 -129
  28. package/bin/lib/tui/services/GeminiService.ts +367 -337
  29. package/bin/lib/tui/services/ServiceManager.ts +344 -322
  30. package/bin/lib/tui/services/SocketService.ts +168 -168
  31. package/bin/lib/tui/services/ViteService.ts +88 -88
  32. package/bin/lib/tui/services/index.ts +47 -22
  33. package/bin/lib/utils/ai-scaffold.js +291 -280
  34. package/bin/lib/utils/extract-config.js +157 -140
  35. package/bin/lib/utils/files.js +82 -86
  36. package/bin/lib/utils/index.js +7 -7
  37. package/bin/lib/utils/paths.js +34 -34
  38. package/bin/lib/utils/prompts.js +194 -169
  39. package/bin/lib/utils/ssl.js +79 -81
  40. package/browser-extensions/README.md +0 -1
  41. package/browser-extensions/chrome/background.js +244 -237
  42. package/browser-extensions/chrome/content.js +32 -29
  43. package/browser-extensions/chrome/devtools.html +7 -7
  44. package/browser-extensions/chrome/devtools.js +19 -19
  45. package/browser-extensions/chrome/inspector.js +802 -767
  46. package/browser-extensions/chrome/manifest.json +71 -63
  47. package/browser-extensions/chrome/panel.html +674 -636
  48. package/browser-extensions/chrome/panel.js +722 -712
  49. package/browser-extensions/chrome/popup.html +586 -543
  50. package/browser-extensions/chrome/popup.js +282 -244
  51. package/browser-extensions/chrome/rules.json +1 -1
  52. package/browser-extensions/chrome/test-chrome.html +216 -136
  53. package/browser-extensions/chrome/test-mixed-content.html +284 -189
  54. package/browser-extensions/chrome/test-uri-pattern.html +221 -198
  55. package/browser-extensions/firefox/README.md +9 -6
  56. package/browser-extensions/firefox/background.js +221 -218
  57. package/browser-extensions/firefox/content.js +55 -52
  58. package/browser-extensions/firefox/debug-errors.html +386 -228
  59. package/browser-extensions/firefox/debug-https.html +153 -105
  60. package/browser-extensions/firefox/devtools.html +7 -7
  61. package/browser-extensions/firefox/devtools.js +23 -20
  62. package/browser-extensions/firefox/inspector.js +802 -767
  63. package/browser-extensions/firefox/manifest.json +68 -68
  64. package/browser-extensions/firefox/panel.html +674 -636
  65. package/browser-extensions/firefox/panel.js +722 -712
  66. package/browser-extensions/firefox/popup.html +572 -535
  67. package/browser-extensions/firefox/popup.js +281 -236
  68. package/browser-extensions/firefox/test-gramercy.html +170 -125
  69. package/browser-extensions/firefox/test-imports.html +59 -55
  70. package/browser-extensions/firefox/test-masking.html +231 -140
  71. package/browser-extensions/firefox/test-uri-pattern.html +221 -198
  72. package/dist/tui/App.d.ts +1 -1
  73. package/dist/tui/App.d.ts.map +1 -1
  74. package/dist/tui/App.js +154 -150
  75. package/dist/tui/App.js.map +1 -1
  76. package/dist/tui/components/AIPanel.d.ts.map +1 -1
  77. package/dist/tui/components/AIPanel.js +42 -35
  78. package/dist/tui/components/AIPanel.js.map +1 -1
  79. package/dist/tui/components/CommandInput.d.ts +1 -1
  80. package/dist/tui/components/CommandInput.d.ts.map +1 -1
  81. package/dist/tui/components/CommandInput.js +92 -62
  82. package/dist/tui/components/CommandInput.js.map +1 -1
  83. package/dist/tui/components/GeminiPanel.d.ts.map +1 -1
  84. package/dist/tui/components/GeminiPanel.js +37 -30
  85. package/dist/tui/components/GeminiPanel.js.map +1 -1
  86. package/dist/tui/components/Header.d.ts.map +1 -1
  87. package/dist/tui/components/Header.js +1 -1
  88. package/dist/tui/components/Header.js.map +1 -1
  89. package/dist/tui/components/LogPanel.d.ts +1 -1
  90. package/dist/tui/components/LogPanel.d.ts.map +1 -1
  91. package/dist/tui/components/LogPanel.js +26 -24
  92. package/dist/tui/components/LogPanel.js.map +1 -1
  93. package/dist/tui/components/TabBar.d.ts +2 -2
  94. package/dist/tui/components/TabBar.d.ts.map +1 -1
  95. package/dist/tui/components/TabBar.js +11 -11
  96. package/dist/tui/components/TabBar.js.map +1 -1
  97. package/dist/tui/components/WelcomeScreen.d.ts.map +1 -1
  98. package/dist/tui/components/WelcomeScreen.js +6 -6
  99. package/dist/tui/components/WelcomeScreen.js.map +1 -1
  100. package/dist/tui/index.d.ts.map +1 -1
  101. package/dist/tui/index.js +8 -8
  102. package/dist/tui/index.js.map +1 -1
  103. package/dist/tui/services/AIService.d.ts +2 -2
  104. package/dist/tui/services/AIService.d.ts.map +1 -1
  105. package/dist/tui/services/AIService.js +165 -125
  106. package/dist/tui/services/AIService.js.map +1 -1
  107. package/dist/tui/services/ExtensionService.d.ts +1 -1
  108. package/dist/tui/services/ExtensionService.d.ts.map +1 -1
  109. package/dist/tui/services/ExtensionService.js +33 -26
  110. package/dist/tui/services/ExtensionService.js.map +1 -1
  111. package/dist/tui/services/GeminiService.d.ts +1 -1
  112. package/dist/tui/services/GeminiService.d.ts.map +1 -1
  113. package/dist/tui/services/GeminiService.js +87 -76
  114. package/dist/tui/services/GeminiService.js.map +1 -1
  115. package/dist/tui/services/ServiceManager.d.ts +3 -3
  116. package/dist/tui/services/ServiceManager.d.ts.map +1 -1
  117. package/dist/tui/services/ServiceManager.js +72 -58
  118. package/dist/tui/services/ServiceManager.js.map +1 -1
  119. package/dist/tui/services/SocketService.d.ts.map +1 -1
  120. package/dist/tui/services/SocketService.js +32 -32
  121. package/dist/tui/services/SocketService.js.map +1 -1
  122. package/dist/tui/services/ViteService.d.ts.map +1 -1
  123. package/dist/tui/services/ViteService.js +26 -28
  124. package/dist/tui/services/ViteService.js.map +1 -1
  125. package/dist/tui/services/index.d.ts +6 -6
  126. package/dist/tui/services/index.d.ts.map +1 -1
  127. package/dist/tui/services/index.js +6 -6
  128. package/dist/tui/services/index.js.map +1 -1
  129. package/mcp/gxp-api-server.js +83 -81
  130. package/package.json +109 -93
  131. package/runtime/PortalContainer.vue +258 -234
  132. package/runtime/dev-tools/DevToolsModal.vue +153 -155
  133. package/runtime/dev-tools/LayoutSwitcher.vue +144 -140
  134. package/runtime/dev-tools/MockDataEditor.vue +456 -433
  135. package/runtime/dev-tools/SocketSimulator.vue +379 -371
  136. package/runtime/dev-tools/StoreInspector.vue +517 -455
  137. package/runtime/dev-tools/index.js +5 -5
  138. package/runtime/fallback-layouts/PrivateLayout.vue +2 -2
  139. package/runtime/fallback-layouts/PublicLayout.vue +2 -2
  140. package/runtime/fallback-layouts/SystemLayout.vue +2 -2
  141. package/runtime/gxpStringsPlugin.js +159 -134
  142. package/runtime/index.html +17 -19
  143. package/runtime/main.js +24 -22
  144. package/runtime/mock-api/auth-middleware.js +15 -15
  145. package/runtime/mock-api/image-generator.js +46 -46
  146. package/runtime/mock-api/index.js +55 -55
  147. package/runtime/mock-api/response-generator.js +116 -105
  148. package/runtime/mock-api/route-generator.js +107 -84
  149. package/runtime/mock-api/socket-triggers.js +94 -93
  150. package/runtime/mock-api/spec-loader.js +79 -80
  151. package/runtime/package.json +3 -0
  152. package/runtime/server.js +68 -68
  153. package/runtime/stores/gxpPortalConfigStore.js +204 -186
  154. package/runtime/stores/index.js +2 -2
  155. package/runtime/vite-inspector-plugin.js +858 -707
  156. package/runtime/vite-source-tracker-plugin.js +132 -113
  157. package/runtime/vite.config.js +191 -139
  158. package/scripts/launch-chrome.js +41 -41
  159. package/scripts/pack-chrome.js +38 -39
  160. package/socket-events/AiSessionMessageCreated.json +17 -17
  161. package/socket-events/SocialStreamPostCreated.json +23 -23
  162. package/socket-events/SocialStreamPostVariantCompleted.json +22 -22
  163. package/template/.claude/agents/gxp-developer.md +100 -99
  164. package/template/.claude/settings.json +7 -7
  165. package/template/AGENTS.md +30 -23
  166. package/template/GEMINI.md +20 -20
  167. package/template/README.md +70 -53
  168. package/template/app-manifest.json +2 -4
  169. package/template/configuration.json +10 -10
  170. package/template/default-styling.css +1 -1
  171. package/template/index.html +18 -20
  172. package/template/main.js +24 -22
  173. package/template/src/DemoPage.vue +415 -362
  174. package/template/src/Plugin.vue +76 -85
  175. package/template/src/stores/index.js +3 -3
  176. package/template/src/stores/test-data.json +164 -172
  177. package/template/theme-layouts/AdditionalStyling.css +50 -50
  178. package/template/theme-layouts/PrivateLayout.vue +8 -12
  179. package/template/theme-layouts/PublicLayout.vue +8 -12
  180. package/template/theme-layouts/SystemLayout.vue +8 -12
  181. package/template/vite.extend.js +45 -0
  182. package/template/vite.config.js +0 -409
@@ -1,156 +1,167 @@
1
- import { serviceManager, ServiceConfig } from './ServiceManager.js';
2
- import path from 'path';
3
- import fs from 'fs';
4
- import { fileURLToPath } from 'url';
1
+ import { serviceManager, ServiceConfig } from "./ServiceManager.js"
2
+ import path from "path"
3
+ import fs from "fs"
4
+ import { fileURLToPath } from "url"
5
5
 
6
- export type BrowserType = 'chrome' | 'firefox';
6
+ export type BrowserType = "chrome" | "firefox"
7
7
 
8
8
  export interface ExtensionOptions {
9
- browser: BrowserType;
10
- cwd?: string;
11
- useHttps?: boolean;
12
- port?: number | string;
9
+ browser: BrowserType
10
+ cwd?: string
11
+ useHttps?: boolean
12
+ port?: number | string
13
13
  }
14
14
 
15
15
  // Get the toolkit root directory
16
16
  function getToolkitRoot(): string {
17
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
18
- // Navigate from dist/tui/services to project root (3 levels up)
19
- // dist/tui/services -> dist/tui -> dist -> gx-devtools
20
- return path.resolve(__dirname, '..', '..', '..');
17
+ const __dirname = path.dirname(fileURLToPath(import.meta.url))
18
+ // Navigate from dist/tui/services to project root (3 levels up)
19
+ // dist/tui/services -> dist/tui -> dist -> gx-devtools
20
+ return path.resolve(__dirname, "..", "..", "..")
21
21
  }
22
22
 
23
23
  /**
24
24
  * Generate extension defaults based on environment variables
25
25
  * This creates a defaults.json file that the popup.js reads on load
26
26
  */
27
- function generateExtensionDefaults(extensionPath: string, useHttps: boolean, port: number | string): void {
28
- const protocol = useHttps ? 'https' : 'http';
29
- const baseUrl = `${protocol}://localhost:${port}`;
30
-
31
- const defaults = {
32
- // Extension should be enabled by default when launched from CLI
33
- enabled: true,
34
- // JS redirect URL based on env
35
- jsRedirectUrl: `${baseUrl}/src/Plugin.vue`,
36
- // CSS redirect URL (empty by default, uses blank CSS)
37
- cssRedirectUrl: '',
38
- // CSS override should be enabled by default
39
- cssRuleEnabled: true,
40
- // Return blank CSS by default
41
- cssReturnBlank: true,
42
- // Use custom URL pattern by default
43
- jsUseCustomPattern: true,
44
- cssUseCustomPattern: true,
45
- // Cache settings
46
- clearCacheOnEnable: true,
47
- disableCacheForRedirects: true,
48
- };
49
-
50
- const defaultsPath = path.join(extensionPath, 'defaults.json');
51
- fs.writeFileSync(defaultsPath, JSON.stringify(defaults, null, 2));
27
+ function generateExtensionDefaults(
28
+ extensionPath: string,
29
+ useHttps: boolean,
30
+ port: number | string,
31
+ ): void {
32
+ const protocol = useHttps ? "https" : "http"
33
+ const baseUrl = `${protocol}://localhost:${port}`
34
+
35
+ const defaults = {
36
+ // Extension should be enabled by default when launched from CLI
37
+ enabled: true,
38
+ // JS redirect URL based on env
39
+ jsRedirectUrl: `${baseUrl}/src/Plugin.vue`,
40
+ // CSS redirect URL (empty by default, uses blank CSS)
41
+ cssRedirectUrl: "",
42
+ // CSS override should be enabled by default
43
+ cssRuleEnabled: true,
44
+ // Return blank CSS by default
45
+ cssReturnBlank: true,
46
+ // Use custom URL pattern by default
47
+ jsUseCustomPattern: true,
48
+ cssUseCustomPattern: true,
49
+ // Cache settings
50
+ clearCacheOnEnable: true,
51
+ disableCacheForRedirects: true,
52
+ }
53
+
54
+ const defaultsPath = path.join(extensionPath, "defaults.json")
55
+ fs.writeFileSync(defaultsPath, JSON.stringify(defaults, null, 2))
52
56
  }
53
57
 
54
58
  // Find the extension path (project-local or toolkit built-in)
55
59
  function findExtensionPath(browser: BrowserType, cwd: string): string | null {
56
- // Check local project first
57
- const localPath = path.join(cwd, 'browser-extensions', browser);
58
- if (fs.existsSync(localPath)) {
59
- return localPath;
60
- }
61
-
62
- // Fall back to toolkit's built-in extension
63
- const toolkitPath = path.join(getToolkitRoot(), 'browser-extensions', browser);
64
- if (fs.existsSync(toolkitPath)) {
65
- return toolkitPath;
66
- }
67
-
68
- return null;
60
+ // Check local project first
61
+ const localPath = path.join(cwd, "browser-extensions", browser)
62
+ if (fs.existsSync(localPath)) {
63
+ return localPath
64
+ }
65
+
66
+ // Fall back to toolkit's built-in extension
67
+ const toolkitPath = path.join(getToolkitRoot(), "browser-extensions", browser)
68
+ if (fs.existsSync(toolkitPath)) {
69
+ return toolkitPath
70
+ }
71
+
72
+ return null
69
73
  }
70
74
 
71
75
  export function startExtension(options: ExtensionOptions): void {
72
- const { browser, useHttps = true, port = 3060 } = options;
73
- const cwd = options.cwd || process.cwd();
74
- const serviceId = `ext-${browser}`;
75
-
76
- // Compute the start URL based on options
77
- const protocol = useHttps ? 'https' : 'http';
78
- const startUrl = `${protocol}://localhost:${port}`;
79
-
80
- // Check if already running
81
- if (serviceManager.isRunning(serviceId)) {
82
- return;
83
- }
84
-
85
- const extensionPath = findExtensionPath(browser, cwd);
86
- if (!extensionPath) {
87
- // Create a dummy service to show the error
88
- const errorState = serviceManager.start({
89
- id: serviceId,
90
- name: `${browser.charAt(0).toUpperCase() + browser.slice(1)} Extension`,
91
- command: 'echo',
92
- args: [`Extension not found for ${browser}`],
93
- cwd,
94
- });
95
- return;
96
- }
97
-
98
- // Generate defaults.json for the extension based on environment
99
- generateExtensionDefaults(extensionPath, useHttps, port);
100
-
101
- if (browser === 'firefox') {
102
- const config: ServiceConfig = {
103
- id: serviceId,
104
- name: 'Firefox Extension',
105
- command: 'npx',
106
- args: ['web-ext', 'run', '--source-dir', extensionPath, '--start-url', startUrl],
107
- cwd,
108
- env: {
109
- FORCE_COLOR: '1',
110
- },
111
- };
112
- serviceManager.start(config);
113
- } else if (browser === 'chrome') {
114
- // For Chrome, we need to use the launch script
115
- const toolkitRoot = getToolkitRoot();
116
- let scriptPath = path.join(cwd, 'scripts', 'launch-chrome.js');
117
-
118
- if (!fs.existsSync(scriptPath)) {
119
- scriptPath = path.join(toolkitRoot, 'scripts', 'launch-chrome.js');
120
- }
121
-
122
- if (!fs.existsSync(scriptPath)) {
123
- const errorState = serviceManager.start({
124
- id: serviceId,
125
- name: 'Chrome Extension',
126
- command: 'echo',
127
- args: ['Chrome launcher script not found'],
128
- cwd,
129
- });
130
- return;
131
- }
132
-
133
- const config: ServiceConfig = {
134
- id: serviceId,
135
- name: 'Chrome Extension',
136
- command: 'node',
137
- args: [scriptPath],
138
- cwd,
139
- env: {
140
- FORCE_COLOR: '1',
141
- CHROME_EXTENSION_PATH: extensionPath,
142
- USE_HTTPS: String(useHttps),
143
- NODE_PORT: String(port),
144
- },
145
- };
146
- serviceManager.start(config);
147
- }
76
+ const { browser, useHttps = true, port = 3060 } = options
77
+ const cwd = options.cwd || process.cwd()
78
+ const serviceId = `ext-${browser}`
79
+
80
+ // Compute the start URL based on options
81
+ const protocol = useHttps ? "https" : "http"
82
+ const startUrl = `${protocol}://localhost:${port}`
83
+
84
+ // Check if already running
85
+ if (serviceManager.isRunning(serviceId)) {
86
+ return
87
+ }
88
+
89
+ const extensionPath = findExtensionPath(browser, cwd)
90
+ if (!extensionPath) {
91
+ // Create a dummy service to show the error
92
+ const errorState = serviceManager.start({
93
+ id: serviceId,
94
+ name: `${browser.charAt(0).toUpperCase() + browser.slice(1)} Extension`,
95
+ command: "echo",
96
+ args: [`Extension not found for ${browser}`],
97
+ cwd,
98
+ })
99
+ return
100
+ }
101
+
102
+ // Generate defaults.json for the extension based on environment
103
+ generateExtensionDefaults(extensionPath, useHttps, port)
104
+
105
+ if (browser === "firefox") {
106
+ const config: ServiceConfig = {
107
+ id: serviceId,
108
+ name: "Firefox Extension",
109
+ command: "npx",
110
+ args: [
111
+ "web-ext",
112
+ "run",
113
+ "--source-dir",
114
+ extensionPath,
115
+ "--start-url",
116
+ startUrl,
117
+ ],
118
+ cwd,
119
+ env: {
120
+ FORCE_COLOR: "1",
121
+ },
122
+ }
123
+ serviceManager.start(config)
124
+ } else if (browser === "chrome") {
125
+ // For Chrome, we need to use the launch script
126
+ const toolkitRoot = getToolkitRoot()
127
+ let scriptPath = path.join(cwd, "scripts", "launch-chrome.js")
128
+
129
+ if (!fs.existsSync(scriptPath)) {
130
+ scriptPath = path.join(toolkitRoot, "scripts", "launch-chrome.js")
131
+ }
132
+
133
+ if (!fs.existsSync(scriptPath)) {
134
+ const errorState = serviceManager.start({
135
+ id: serviceId,
136
+ name: "Chrome Extension",
137
+ command: "echo",
138
+ args: ["Chrome launcher script not found"],
139
+ cwd,
140
+ })
141
+ return
142
+ }
143
+
144
+ const config: ServiceConfig = {
145
+ id: serviceId,
146
+ name: "Chrome Extension",
147
+ command: "node",
148
+ args: [scriptPath],
149
+ cwd,
150
+ env: {
151
+ FORCE_COLOR: "1",
152
+ CHROME_EXTENSION_PATH: extensionPath,
153
+ USE_HTTPS: String(useHttps),
154
+ NODE_PORT: String(port),
155
+ },
156
+ }
157
+ serviceManager.start(config)
158
+ }
148
159
  }
149
160
 
150
161
  export function stopExtension(browser: BrowserType): boolean {
151
- return serviceManager.stop(`ext-${browser}`);
162
+ return serviceManager.stop(`ext-${browser}`)
152
163
  }
153
164
 
154
165
  export function isExtensionRunning(browser: BrowserType): boolean {
155
- return serviceManager.isRunning(`ext-${browser}`);
166
+ return serviceManager.isRunning(`ext-${browser}`)
156
167
  }