@dimina-kit/devtools 0.1.0-dev.20260422094158
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/LICENSE +21 -0
- package/README.md +562 -0
- package/dist/main/api.d.ts +21 -0
- package/dist/main/api.d.ts.map +1 -0
- package/dist/main/api.js +22 -0
- package/dist/main/api.js.map +1 -0
- package/dist/main/app/app.d.ts +15 -0
- package/dist/main/app/app.d.ts.map +1 -0
- package/dist/main/app/app.js +192 -0
- package/dist/main/app/app.js.map +1 -0
- package/dist/main/app/bootstrap.d.ts +14 -0
- package/dist/main/app/bootstrap.d.ts.map +1 -0
- package/dist/main/app/bootstrap.js +41 -0
- package/dist/main/app/bootstrap.js.map +1 -0
- package/dist/main/app/launch.d.ts +10 -0
- package/dist/main/app/launch.d.ts.map +1 -0
- package/dist/main/app/launch.js +28 -0
- package/dist/main/app/launch.js.map +1 -0
- package/dist/main/app/lifecycle.d.ts +2 -0
- package/dist/main/app/lifecycle.d.ts.map +1 -0
- package/dist/main/app/lifecycle.js +11 -0
- package/dist/main/app/lifecycle.js.map +1 -0
- package/dist/main/index.d.ts +2 -0
- package/dist/main/index.d.ts.map +1 -0
- package/dist/main/index.js +3 -0
- package/dist/main/index.js.map +1 -0
- package/dist/main/ipc/app.d.ts +3 -0
- package/dist/main/ipc/app.d.ts.map +1 -0
- package/dist/main/ipc/app.js +14 -0
- package/dist/main/ipc/app.js.map +1 -0
- package/dist/main/ipc/index.d.ts +9 -0
- package/dist/main/ipc/index.d.ts.map +1 -0
- package/dist/main/ipc/index.js +9 -0
- package/dist/main/ipc/index.js.map +1 -0
- package/dist/main/ipc/panels.d.ts +3 -0
- package/dist/main/ipc/panels.d.ts.map +1 -0
- package/dist/main/ipc/panels.js +39 -0
- package/dist/main/ipc/panels.js.map +1 -0
- package/dist/main/ipc/popover.d.ts +3 -0
- package/dist/main/ipc/popover.d.ts.map +1 -0
- package/dist/main/ipc/popover.js +13 -0
- package/dist/main/ipc/popover.js.map +1 -0
- package/dist/main/ipc/projects.d.ts +3 -0
- package/dist/main/ipc/projects.d.ts.map +1 -0
- package/dist/main/ipc/projects.js +15 -0
- package/dist/main/ipc/projects.js.map +1 -0
- package/dist/main/ipc/session.d.ts +3 -0
- package/dist/main/ipc/session.d.ts.map +1 -0
- package/dist/main/ipc/session.js +10 -0
- package/dist/main/ipc/session.js.map +1 -0
- package/dist/main/ipc/settings.d.ts +3 -0
- package/dist/main/ipc/settings.d.ts.map +1 -0
- package/dist/main/ipc/settings.js +61 -0
- package/dist/main/ipc/settings.js.map +1 -0
- package/dist/main/ipc/simulator.d.ts +3 -0
- package/dist/main/ipc/simulator.d.ts.map +1 -0
- package/dist/main/ipc/simulator.js +26 -0
- package/dist/main/ipc/simulator.js.map +1 -0
- package/dist/main/ipc/toolbar.d.ts +3 -0
- package/dist/main/ipc/toolbar.d.ts.map +1 -0
- package/dist/main/ipc/toolbar.js +10 -0
- package/dist/main/ipc/toolbar.js.map +1 -0
- package/dist/main/menu/index.d.ts +3 -0
- package/dist/main/menu/index.d.ts.map +1 -0
- package/dist/main/menu/index.js +65 -0
- package/dist/main/menu/index.js.map +1 -0
- package/dist/main/services/automation/exec.d.ts +9 -0
- package/dist/main/services/automation/exec.d.ts.map +1 -0
- package/dist/main/services/automation/exec.js +33 -0
- package/dist/main/services/automation/exec.js.map +1 -0
- package/dist/main/services/automation/handlers/app.d.ts +3 -0
- package/dist/main/services/automation/handlers/app.d.ts.map +1 -0
- package/dist/main/services/automation/handlers/app.js +132 -0
- package/dist/main/services/automation/handlers/app.js.map +1 -0
- package/dist/main/services/automation/handlers/element.d.ts +3 -0
- package/dist/main/services/automation/handlers/element.d.ts.map +1 -0
- package/dist/main/services/automation/handlers/element.js +151 -0
- package/dist/main/services/automation/handlers/element.js.map +1 -0
- package/dist/main/services/automation/handlers/page.d.ts +3 -0
- package/dist/main/services/automation/handlers/page.d.ts.map +1 -0
- package/dist/main/services/automation/handlers/page.js +66 -0
- package/dist/main/services/automation/handlers/page.js.map +1 -0
- package/dist/main/services/automation/handlers/tool.d.ts +3 -0
- package/dist/main/services/automation/handlers/tool.d.ts.map +1 -0
- package/dist/main/services/automation/handlers/tool.js +8 -0
- package/dist/main/services/automation/handlers/tool.js.map +1 -0
- package/dist/main/services/automation/index.d.ts +18 -0
- package/dist/main/services/automation/index.d.ts.map +1 -0
- package/dist/main/services/automation/index.js +95 -0
- package/dist/main/services/automation/index.js.map +1 -0
- package/dist/main/services/automation/registry.d.ts +6 -0
- package/dist/main/services/automation/registry.d.ts.map +1 -0
- package/dist/main/services/automation/registry.js +20 -0
- package/dist/main/services/automation/registry.js.map +1 -0
- package/dist/main/services/automation/shared.d.ts +24 -0
- package/dist/main/services/automation/shared.d.ts.map +1 -0
- package/dist/main/services/automation/shared.js +2 -0
- package/dist/main/services/automation/shared.js.map +1 -0
- package/dist/main/services/default-adapter.d.ts +3 -0
- package/dist/main/services/default-adapter.d.ts.map +1 -0
- package/dist/main/services/default-adapter.js +17 -0
- package/dist/main/services/default-adapter.js.map +1 -0
- package/dist/main/services/layout/index.d.ts +27 -0
- package/dist/main/services/layout/index.d.ts.map +1 -0
- package/dist/main/services/layout/index.js +49 -0
- package/dist/main/services/layout/index.js.map +1 -0
- package/dist/main/services/mcp/index.d.ts +15 -0
- package/dist/main/services/mcp/index.d.ts.map +1 -0
- package/dist/main/services/mcp/index.js +15 -0
- package/dist/main/services/mcp/index.js.map +1 -0
- package/dist/main/services/mcp/server.d.ts +10 -0
- package/dist/main/services/mcp/server.d.ts.map +1 -0
- package/dist/main/services/mcp/server.js +76 -0
- package/dist/main/services/mcp/server.js.map +1 -0
- package/dist/main/services/mcp/target-manager.d.ts +43 -0
- package/dist/main/services/mcp/target-manager.d.ts.map +1 -0
- package/dist/main/services/mcp/target-manager.js +165 -0
- package/dist/main/services/mcp/target-manager.js.map +1 -0
- package/dist/main/services/mcp/tool-registry.d.ts +14 -0
- package/dist/main/services/mcp/tool-registry.d.ts.map +1 -0
- package/dist/main/services/mcp/tool-registry.js +84 -0
- package/dist/main/services/mcp/tool-registry.js.map +1 -0
- package/dist/main/services/mcp/tools/context-tools.d.ts +15 -0
- package/dist/main/services/mcp/tools/context-tools.d.ts.map +1 -0
- package/dist/main/services/mcp/tools/context-tools.js +244 -0
- package/dist/main/services/mcp/tools/context-tools.js.map +1 -0
- package/dist/main/services/mcp/tools/simulator-tools.d.ts +14 -0
- package/dist/main/services/mcp/tools/simulator-tools.d.ts.map +1 -0
- package/dist/main/services/mcp/tools/simulator-tools.js +143 -0
- package/dist/main/services/mcp/tools/simulator-tools.js.map +1 -0
- package/dist/main/services/mcp/tools/workbench-tools.d.ts +7 -0
- package/dist/main/services/mcp/tools/workbench-tools.d.ts.map +1 -0
- package/dist/main/services/mcp/tools/workbench-tools.js +13 -0
- package/dist/main/services/mcp/tools/workbench-tools.js.map +1 -0
- package/dist/main/services/notifications/renderer-notifier.d.ts +80 -0
- package/dist/main/services/notifications/renderer-notifier.d.ts.map +1 -0
- package/dist/main/services/notifications/renderer-notifier.js +70 -0
- package/dist/main/services/notifications/renderer-notifier.js.map +1 -0
- package/dist/main/services/projects/index.d.ts +2 -0
- package/dist/main/services/projects/index.d.ts.map +1 -0
- package/dist/main/services/projects/index.js +6 -0
- package/dist/main/services/projects/index.js.map +1 -0
- package/dist/main/services/projects/project-repository.d.ts +28 -0
- package/dist/main/services/projects/project-repository.d.ts.map +1 -0
- package/dist/main/services/projects/project-repository.js +145 -0
- package/dist/main/services/projects/project-repository.js.map +1 -0
- package/dist/main/services/settings/index.d.ts +16 -0
- package/dist/main/services/settings/index.d.ts.map +1 -0
- package/dist/main/services/settings/index.js +46 -0
- package/dist/main/services/settings/index.js.map +1 -0
- package/dist/main/services/simulator/dir.d.ts +2 -0
- package/dist/main/services/simulator/dir.d.ts.map +1 -0
- package/dist/main/services/simulator/dir.js +5 -0
- package/dist/main/services/simulator/dir.js.map +1 -0
- package/dist/main/services/simulator/referer.d.ts +10 -0
- package/dist/main/services/simulator/referer.d.ts.map +1 -0
- package/dist/main/services/simulator/referer.js +20 -0
- package/dist/main/services/simulator/referer.js.map +1 -0
- package/dist/main/services/views/view-manager.d.ts +84 -0
- package/dist/main/services/views/view-manager.d.ts.map +1 -0
- package/dist/main/services/views/view-manager.js +254 -0
- package/dist/main/services/views/view-manager.js.map +1 -0
- package/dist/main/services/workbench-context.d.ts +59 -0
- package/dist/main/services/workbench-context.d.ts.map +1 -0
- package/dist/main/services/workbench-context.js +33 -0
- package/dist/main/services/workbench-context.js.map +1 -0
- package/dist/main/services/workspace/index.d.ts +2 -0
- package/dist/main/services/workspace/index.d.ts.map +1 -0
- package/dist/main/services/workspace/index.js +2 -0
- package/dist/main/services/workspace/index.js.map +1 -0
- package/dist/main/services/workspace/workspace-service.d.ts +49 -0
- package/dist/main/services/workspace/workspace-service.d.ts.map +1 -0
- package/dist/main/services/workspace/workspace-service.js +90 -0
- package/dist/main/services/workspace/workspace-service.js.map +1 -0
- package/dist/main/utils/logger.d.ts +15 -0
- package/dist/main/utils/logger.d.ts.map +1 -0
- package/dist/main/utils/logger.js +48 -0
- package/dist/main/utils/logger.js.map +1 -0
- package/dist/main/utils/paths.d.ts +6 -0
- package/dist/main/utils/paths.d.ts.map +1 -0
- package/dist/main/utils/paths.js +15 -0
- package/dist/main/utils/paths.js.map +1 -0
- package/dist/main/utils/theme.d.ts +10 -0
- package/dist/main/utils/theme.d.ts.map +1 -0
- package/dist/main/utils/theme.js +13 -0
- package/dist/main/utils/theme.js.map +1 -0
- package/dist/main/windows/main-window/create.d.ts +11 -0
- package/dist/main/windows/main-window/create.d.ts.map +1 -0
- package/dist/main/windows/main-window/create.js +67 -0
- package/dist/main/windows/main-window/create.js.map +1 -0
- package/dist/main/windows/main-window/events.d.ts +9 -0
- package/dist/main/windows/main-window/events.d.ts.map +1 -0
- package/dist/main/windows/main-window/events.js +18 -0
- package/dist/main/windows/main-window/events.js.map +1 -0
- package/dist/main/windows/main-window/index.d.ts +5 -0
- package/dist/main/windows/main-window/index.d.ts.map +1 -0
- package/dist/main/windows/main-window/index.js +3 -0
- package/dist/main/windows/main-window/index.js.map +1 -0
- package/dist/main/windows/settings-window/create.d.ts +3 -0
- package/dist/main/windows/settings-window/create.d.ts.map +1 -0
- package/dist/main/windows/settings-window/create.js +18 -0
- package/dist/main/windows/settings-window/create.js.map +1 -0
- package/dist/main/windows/settings-window/events.d.ts +3 -0
- package/dist/main/windows/settings-window/events.d.ts.map +1 -0
- package/dist/main/windows/settings-window/events.js +6 -0
- package/dist/main/windows/settings-window/events.js.map +1 -0
- package/dist/main/windows/settings-window/index.d.ts +3 -0
- package/dist/main/windows/settings-window/index.d.ts.map +1 -0
- package/dist/main/windows/settings-window/index.js +3 -0
- package/dist/main/windows/settings-window/index.js.map +1 -0
- package/dist/preload/instrumentation/app-data.d.ts +3 -0
- package/dist/preload/instrumentation/app-data.d.ts.map +1 -0
- package/dist/preload/instrumentation/app-data.js +103 -0
- package/dist/preload/instrumentation/app-data.js.map +1 -0
- package/dist/preload/instrumentation/console.d.ts +2 -0
- package/dist/preload/instrumentation/console.d.ts.map +1 -0
- package/dist/preload/instrumentation/console.js +54 -0
- package/dist/preload/instrumentation/console.js.map +1 -0
- package/dist/preload/instrumentation/disposable.d.ts +11 -0
- package/dist/preload/instrumentation/disposable.d.ts.map +1 -0
- package/dist/preload/instrumentation/disposable.js +15 -0
- package/dist/preload/instrumentation/disposable.js.map +1 -0
- package/dist/preload/instrumentation/index.d.ts +5 -0
- package/dist/preload/instrumentation/index.d.ts.map +1 -0
- package/dist/preload/instrumentation/index.js +5 -0
- package/dist/preload/instrumentation/index.js.map +1 -0
- package/dist/preload/instrumentation/storage.d.ts +2 -0
- package/dist/preload/instrumentation/storage.d.ts.map +1 -0
- package/dist/preload/instrumentation/storage.js +106 -0
- package/dist/preload/instrumentation/storage.js.map +1 -0
- package/dist/preload/instrumentation/wxml-extract.d.ts +11 -0
- package/dist/preload/instrumentation/wxml-extract.d.ts.map +1 -0
- package/dist/preload/instrumentation/wxml-extract.js +173 -0
- package/dist/preload/instrumentation/wxml-extract.js.map +1 -0
- package/dist/preload/instrumentation/wxml.d.ts +5 -0
- package/dist/preload/instrumentation/wxml.d.ts.map +1 -0
- package/dist/preload/instrumentation/wxml.js +223 -0
- package/dist/preload/instrumentation/wxml.js.map +1 -0
- package/dist/preload/runtime/bridge.d.ts +36 -0
- package/dist/preload/runtime/bridge.d.ts.map +1 -0
- package/dist/preload/runtime/bridge.js +151 -0
- package/dist/preload/runtime/bridge.js.map +1 -0
- package/dist/preload/runtime/host.d.ts +3 -0
- package/dist/preload/runtime/host.d.ts.map +1 -0
- package/dist/preload/runtime/host.js +28 -0
- package/dist/preload/runtime/host.js.map +1 -0
- package/dist/preload/shared/api-compat.d.ts +2 -0
- package/dist/preload/shared/api-compat.d.ts.map +1 -0
- package/dist/preload/shared/api-compat.js +196 -0
- package/dist/preload/shared/api-compat.js.map +1 -0
- package/dist/preload/shared/constants.d.ts +16 -0
- package/dist/preload/shared/constants.d.ts.map +1 -0
- package/dist/preload/shared/constants.js +16 -0
- package/dist/preload/shared/constants.js.map +1 -0
- package/dist/preload/shared/types.d.ts +34 -0
- package/dist/preload/shared/types.d.ts.map +1 -0
- package/dist/preload/shared/types.js +8 -0
- package/dist/preload/shared/types.js.map +1 -0
- package/dist/preload/windows/main.d.ts +7 -0
- package/dist/preload/windows/main.d.ts.map +1 -0
- package/dist/preload/windows/main.js +7 -0
- package/dist/preload/windows/main.js.map +1 -0
- package/dist/preload/windows/simulator.js +969 -0
- package/dist/preload/windows/simulator.js.map +7 -0
- package/dist/renderer/assets/index-kcmIQPCg.js +2 -0
- package/dist/renderer/assets/index-kcmIQPCg.js.map +1 -0
- package/dist/renderer/assets/input-B7sz4y1r.js +2 -0
- package/dist/renderer/assets/input-B7sz4y1r.js.map +1 -0
- package/dist/renderer/assets/ipc-transport-C9-PPTGn.css +1 -0
- package/dist/renderer/assets/ipc-transport-L_WD9x12.js +9 -0
- package/dist/renderer/assets/ipc-transport-L_WD9x12.js.map +1 -0
- package/dist/renderer/assets/popover-CzMIs2j4.js +2 -0
- package/dist/renderer/assets/popover-CzMIs2j4.js.map +1 -0
- package/dist/renderer/assets/select-BBXJVe8R.js +2 -0
- package/dist/renderer/assets/select-BBXJVe8R.js.map +1 -0
- package/dist/renderer/assets/settings-Db1pvrBJ.js +2 -0
- package/dist/renderer/assets/settings-Db1pvrBJ.js.map +1 -0
- package/dist/renderer/assets/settings-api-DJ1M-CNt.js +2 -0
- package/dist/renderer/assets/settings-api-DJ1M-CNt.js.map +1 -0
- package/dist/renderer/assets/workbenchSettings-BnQsvWkQ.js +8 -0
- package/dist/renderer/assets/workbenchSettings-BnQsvWkQ.js.map +1 -0
- package/dist/renderer/entries/main/index.html +15 -0
- package/dist/renderer/entries/popover/index.html +18 -0
- package/dist/renderer/entries/settings/index.html +15 -0
- package/dist/renderer/entries/workbench-settings/index.html +15 -0
- package/dist/shared/constants.d.ts +10 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +10 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/ipc-channels.d.ts +89 -0
- package/dist/shared/ipc-channels.d.ts.map +1 -0
- package/dist/shared/ipc-channels.js +102 -0
- package/dist/shared/ipc-channels.js.map +1 -0
- package/dist/shared/types.d.ts +89 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +2 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/simulator/assets/simulator-C1eHXnuq.js +9 -0
- package/dist/simulator/assets/simulator-C1eHXnuq.js.map +1 -0
- package/dist/simulator/simulator.html +164 -0
- package/package.json +204 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simulator-specific MCP tools beyond the shared set (screenshot, console,
|
|
3
|
+
* evaluate, DOM, network) registered via `registerCommonTargetTools`.
|
|
4
|
+
*
|
|
5
|
+
* Two tools live here:
|
|
6
|
+
* - `simulator_navigate`: navigate or reload the simulator webview
|
|
7
|
+
* - `simulator_input`: unified input dispatcher (tap/type/scroll/key)
|
|
8
|
+
*
|
|
9
|
+
* Other simulator inspection use-cases (storage get/set, page info) are
|
|
10
|
+
* handled via `simulator_evaluate` and `simulator_get_overview`.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { getClient } from '../target-manager.js';
|
|
14
|
+
export function registerSimulatorTools(server) {
|
|
15
|
+
server.tool('simulator_navigate', 'Navigate the simulator to a URL, or reload the current page', {
|
|
16
|
+
url: z.string().optional().describe('URL to navigate to'),
|
|
17
|
+
reload: z.boolean().optional().describe('If true, reload current page instead of navigating'),
|
|
18
|
+
}, async ({ url, reload }) => {
|
|
19
|
+
const c = getClient('simulator');
|
|
20
|
+
if (reload) {
|
|
21
|
+
await c.Page.reload({ ignoreCache: false });
|
|
22
|
+
const note = url ? ' (url ignored because reload=true)' : '';
|
|
23
|
+
return { content: [{ type: 'text', text: `Reloaded simulator${note}` }] };
|
|
24
|
+
}
|
|
25
|
+
if (url) {
|
|
26
|
+
const result = await c.Page.navigate({ url });
|
|
27
|
+
return { content: [{ type: 'text', text: JSON.stringify({ frameId: result.frameId, loaderId: result.loaderId }, null, 2) }] };
|
|
28
|
+
}
|
|
29
|
+
return { content: [{ type: 'text', text: 'Error: either url or reload is required' }], isError: true };
|
|
30
|
+
});
|
|
31
|
+
server.tool('simulator_input', 'Dispatch input to the simulator. `tap_coord` requires x and y. `tap_selector` requires selector and optional nth. `type` requires selector and text. `scroll` requires x, y, deltaX, and deltaY. `key` is best-effort for common keys such as Enter, Escape, Tab, Arrow* and Space.', {
|
|
32
|
+
action: z.enum(['tap_coord', 'tap_selector', 'type', 'scroll', 'key']).describe('Input action to dispatch'),
|
|
33
|
+
x: z.number().optional().describe('Viewport x coordinate for `tap_coord` or `scroll`'),
|
|
34
|
+
y: z.number().optional().describe('Viewport y coordinate for `tap_coord` or `scroll`'),
|
|
35
|
+
selector: z.string().optional().describe('CSS selector for `tap_selector` or `type`'),
|
|
36
|
+
nth: z.number().int().optional().describe('Zero-based index when selector matches multiple elements; defaults to 0'),
|
|
37
|
+
text: z.string().optional().describe('Text to insert for `type`'),
|
|
38
|
+
key: z.string().optional().describe('Best-effort keyboard key name for `key`; common keys such as Enter, Escape, Tab, Arrow* and Space work best'),
|
|
39
|
+
deltaX: z.number().optional().describe('Horizontal wheel delta for `scroll`'),
|
|
40
|
+
deltaY: z.number().optional().describe('Vertical wheel delta for `scroll`'),
|
|
41
|
+
}, async ({ action, x, y, selector, nth, text, key, deltaX, deltaY }) => {
|
|
42
|
+
const c = getClient('simulator');
|
|
43
|
+
const err = (msg) => ({ content: [{ type: 'text', text: `Error: ${msg}` }], isError: true });
|
|
44
|
+
const clickAt = async (cx, cy) => {
|
|
45
|
+
await c.Input.dispatchMouseEvent({ type: 'mousePressed', x: cx, y: cy, button: 'left', clickCount: 1 });
|
|
46
|
+
await c.Input.dispatchMouseEvent({ type: 'mouseReleased', x: cx, y: cy, button: 'left', clickCount: 1 });
|
|
47
|
+
};
|
|
48
|
+
if (action === 'tap_coord') {
|
|
49
|
+
if (typeof x !== 'number' || typeof y !== 'number')
|
|
50
|
+
return err('tap_coord requires x and y');
|
|
51
|
+
await clickAt(x, y);
|
|
52
|
+
return { content: [{ type: 'text', text: `Tapped at (${x}, ${y})` }] };
|
|
53
|
+
}
|
|
54
|
+
if (action === 'tap_selector') {
|
|
55
|
+
if (!selector)
|
|
56
|
+
return err('tap_selector requires selector');
|
|
57
|
+
const index = nth ?? 0;
|
|
58
|
+
const expression = `(() => {
|
|
59
|
+
const payload = ${JSON.stringify({ selector, index })}
|
|
60
|
+
try {
|
|
61
|
+
const matches = Array.from(document.querySelectorAll(payload.selector))
|
|
62
|
+
if (matches.length === 0) {
|
|
63
|
+
return { ok: false, reason: 'no_match', message: \`selector matched no elements: \${payload.selector}\` }
|
|
64
|
+
}
|
|
65
|
+
if (payload.index < 0 || payload.index >= matches.length) {
|
|
66
|
+
return { ok: false, reason: 'out_of_range', message: \`nth \${payload.index} out of range (matches: \${matches.length})\` }
|
|
67
|
+
}
|
|
68
|
+
const element = matches[payload.index]
|
|
69
|
+
element.scrollIntoView({ block: 'center', inline: 'center' })
|
|
70
|
+
const rect = element.getBoundingClientRect()
|
|
71
|
+
if (rect.width === 0 || rect.height === 0) {
|
|
72
|
+
return { ok: false, reason: 'not_visible', message: \`selector matched an element, but it is not visible or rendered (zero rect): \${payload.selector}[\${payload.index}]\` }
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
ok: true,
|
|
76
|
+
selector: payload.selector,
|
|
77
|
+
index: payload.index,
|
|
78
|
+
x: rect.left + rect.width / 2,
|
|
79
|
+
y: rect.top + rect.height / 2,
|
|
80
|
+
rect: { left: rect.left, top: rect.top, width: rect.width, height: rect.height },
|
|
81
|
+
}
|
|
82
|
+
} catch (error) {
|
|
83
|
+
const message = error instanceof Error ? error.message : String(error)
|
|
84
|
+
return { ok: false, reason: 'selector_error', message: \`invalid selector: \${payload.selector} (\${message})\` }
|
|
85
|
+
}
|
|
86
|
+
})()`;
|
|
87
|
+
const result = await c.Runtime.evaluate({ expression, returnByValue: true, awaitPromise: true });
|
|
88
|
+
const value = result.result?.value;
|
|
89
|
+
if (!value)
|
|
90
|
+
return err(`selector evaluation returned no result: ${selector}[${index}]`);
|
|
91
|
+
if (!value.ok)
|
|
92
|
+
return err(value.message);
|
|
93
|
+
await clickAt(value.x, value.y);
|
|
94
|
+
return {
|
|
95
|
+
content: [{
|
|
96
|
+
type: 'text',
|
|
97
|
+
text: `Tapped selector ${value.selector}[${value.index}] at (${value.x}, ${value.y}) within rect (${value.rect.left}, ${value.rect.top}, ${value.rect.width} x ${value.rect.height})`,
|
|
98
|
+
}],
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
if (action === 'type') {
|
|
102
|
+
if (!selector || typeof text !== 'string')
|
|
103
|
+
return err('type requires selector and text');
|
|
104
|
+
const { root } = await c.DOM.getDocument({ depth: 0 });
|
|
105
|
+
const { nodeIds } = await c.DOM.querySelectorAll({ nodeId: root.nodeId, selector });
|
|
106
|
+
if (!nodeIds || nodeIds.length === 0)
|
|
107
|
+
return err(`selector matched no elements: ${selector}`);
|
|
108
|
+
const index = nth ?? 0;
|
|
109
|
+
if (index < 0 || index >= nodeIds.length)
|
|
110
|
+
return err(`nth ${index} out of range (matches: ${nodeIds.length})`);
|
|
111
|
+
await c.DOM.focus({ nodeId: nodeIds[index] });
|
|
112
|
+
try {
|
|
113
|
+
await c.Input.insertText({ text });
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
for (const ch of text) {
|
|
117
|
+
await c.Input.dispatchKeyEvent({ type: 'char', text: ch });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return { content: [{ type: 'text', text: `Typed ${text.length} char(s) into ${selector}[${index}]` }] };
|
|
121
|
+
}
|
|
122
|
+
if (action === 'scroll') {
|
|
123
|
+
if (typeof x !== 'number' || typeof y !== 'number' || typeof deltaX !== 'number' || typeof deltaY !== 'number') {
|
|
124
|
+
return err('scroll requires x, y, deltaX, deltaY');
|
|
125
|
+
}
|
|
126
|
+
await c.Input.dispatchMouseEvent({ type: 'mouseWheel', x, y, deltaX, deltaY });
|
|
127
|
+
return { content: [{ type: 'text', text: `Scrolled at (${x}, ${y}) by (${deltaX}, ${deltaY})` }] };
|
|
128
|
+
}
|
|
129
|
+
if (action === 'key') {
|
|
130
|
+
if (!key)
|
|
131
|
+
return err('key requires key');
|
|
132
|
+
const isSingleChar = key.length === 1;
|
|
133
|
+
const down = { type: 'keyDown', key, code: key };
|
|
134
|
+
if (isSingleChar)
|
|
135
|
+
down.text = key;
|
|
136
|
+
await c.Input.dispatchKeyEvent(down);
|
|
137
|
+
await c.Input.dispatchKeyEvent({ type: 'keyUp', key, code: key });
|
|
138
|
+
return { content: [{ type: 'text', text: `Dispatched key ${key}` }] };
|
|
139
|
+
}
|
|
140
|
+
return err(`unknown action: ${action}`);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=simulator-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulator-tools.js","sourceRoot":"","sources":["../../../../../src/main/services/mcp/tools/simulator-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workbench-specific MCP tools. Exposes CDP target listing, which cannot be
|
|
3
|
+
* expressed as a plain evaluate against a connected target.
|
|
4
|
+
*/
|
|
5
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
6
|
+
export declare function registerWorkbenchTools(server: McpServer): void;
|
|
7
|
+
//# sourceMappingURL=workbench-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-tools.d.ts","sourceRoot":"","sources":["../../../../../src/main/services/mcp/tools/workbench-tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGxE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAM9D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workbench-specific MCP tools. Exposes CDP target listing, which cannot be
|
|
3
|
+
* expressed as a plain evaluate against a connected target.
|
|
4
|
+
*/
|
|
5
|
+
import { listTargets } from '../target-manager.js';
|
|
6
|
+
export function registerWorkbenchTools(server) {
|
|
7
|
+
server.tool('workbench_list_targets', 'List all available CDP targets (pages, webviews, etc.)', {}, async () => {
|
|
8
|
+
const allTargets = await listTargets();
|
|
9
|
+
const summary = allTargets.map((t) => ({ id: t.id, type: t.type, title: t.title, url: t.url }));
|
|
10
|
+
return { content: [{ type: 'text', text: JSON.stringify(summary, null, 2) }] };
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=workbench-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-tools.js","sourceRoot":"","sources":["../../../../../src/main/services/mcp/tools/workbench-tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,wDAAwD,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;QAC7G,MAAM,UAAU,GAAG,MAAM,WAAW,EAAE,CAAA;QACtC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QAC/F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IACzF,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { BrowserWindow, WebContents, WebContentsView } from 'electron';
|
|
2
|
+
import type { CompileConfig } from '../../../shared/types.js';
|
|
3
|
+
import type { WorkbenchSettings } from '../settings/index.js';
|
|
4
|
+
import type { ProjectSettings } from '../projects/project-repository.js';
|
|
5
|
+
/**
|
|
6
|
+
* Payload for the `project:status` event sent whenever compile status changes.
|
|
7
|
+
*/
|
|
8
|
+
export interface ProjectStatusPayload {
|
|
9
|
+
status: string;
|
|
10
|
+
message: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Payload for the `settings:init` event sent into the embedded settings overlay
|
|
14
|
+
* right after it is shown.
|
|
15
|
+
*/
|
|
16
|
+
export interface SettingsInitPayload {
|
|
17
|
+
projectPath: string;
|
|
18
|
+
config: CompileConfig;
|
|
19
|
+
projectSettings: ProjectSettings;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Payload for the `devtoolsSettings:init` event sent into the standalone
|
|
23
|
+
* workbench-settings window right after it becomes visible.
|
|
24
|
+
*/
|
|
25
|
+
export interface WorkbenchSettingsInitPayload {
|
|
26
|
+
settings: WorkbenchSettings;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Unified entry point for every main → renderer event sent by the devtools
|
|
30
|
+
* main process. Every site that previously called
|
|
31
|
+
* `someWebContents.send(channel, payload)` now goes through a typed method
|
|
32
|
+
* here so that channel names, payload shapes and `isDestroyed()` guards live
|
|
33
|
+
* in exactly one place.
|
|
34
|
+
*
|
|
35
|
+
* Methods resolve their target `WebContents` lazily from references provided
|
|
36
|
+
* at call time (or read from the owning context) and silently no-op when the
|
|
37
|
+
* target is missing or already destroyed — the previous behaviour of every
|
|
38
|
+
* scattered send site.
|
|
39
|
+
*/
|
|
40
|
+
export interface RendererNotifier {
|
|
41
|
+
/** Broadcast project compile status transitions to the main renderer. */
|
|
42
|
+
projectStatus(payload: ProjectStatusPayload): void;
|
|
43
|
+
/** Ask the main renderer to navigate back to its landing screen. */
|
|
44
|
+
windowNavigateBack(): void;
|
|
45
|
+
/** Tell the main renderer the embedded settings overlay has been closed. */
|
|
46
|
+
settingsClosed(): void;
|
|
47
|
+
/** Broadcast an updated compile config to the main renderer. */
|
|
48
|
+
settingsChanged(config: CompileConfig): void;
|
|
49
|
+
/** Tell the main renderer the compile popover has been closed. */
|
|
50
|
+
popoverClosed(): void;
|
|
51
|
+
/** Ask the main renderer to relaunch the simulator with a new config. */
|
|
52
|
+
popoverRelaunch(config: CompileConfig): void;
|
|
53
|
+
/** Ask the main renderer to re-initialise the devtools panels. */
|
|
54
|
+
workbenchReset(): void;
|
|
55
|
+
/** Tell the main renderer the toolbar actions list has changed. */
|
|
56
|
+
toolbarActionsChanged(): void;
|
|
57
|
+
/** Initialise the currently shown compile popover overlay. */
|
|
58
|
+
popoverInit(popoverView: WebContentsView, payload: unknown): void;
|
|
59
|
+
/** Initialise the currently shown settings overlay (no-op if hidden). */
|
|
60
|
+
settingsInit(payload: SettingsInitPayload): void;
|
|
61
|
+
/** Initialise the standalone workbench-settings window. */
|
|
62
|
+
workbenchSettingsInit(window: BrowserWindow, payload: WorkbenchSettingsInitPayload): void;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Context surface used by the notifier. We only need a small slice of the
|
|
66
|
+
* full WorkbenchContext here; typing it this way avoids an import cycle
|
|
67
|
+
* between the notifier module and workbench-context.
|
|
68
|
+
*/
|
|
69
|
+
export interface NotifierContext {
|
|
70
|
+
mainWindow: BrowserWindow;
|
|
71
|
+
views: {
|
|
72
|
+
getSettingsWebContents(): WebContents | null;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Build a RendererNotifier bound to the given context. This is the only
|
|
77
|
+
* module allowed to call `webContents.send(...)` in the devtools main process.
|
|
78
|
+
*/
|
|
79
|
+
export declare function createRendererNotifier(ctx: NotifierContext): RendererNotifier;
|
|
80
|
+
//# sourceMappingURL=renderer-notifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-notifier.d.ts","sourceRoot":"","sources":["../../../../src/main/services/notifications/renderer-notifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAU7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AAExE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;IACrB,eAAe,EAAE,eAAe,CAAA;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,iBAAiB,CAAA;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,gBAAgB;IAE/B,yEAAyE;IACzE,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAA;IAClD,oEAAoE;IACpE,kBAAkB,IAAI,IAAI,CAAA;IAC1B,4EAA4E;IAC5E,cAAc,IAAI,IAAI,CAAA;IACtB,gEAAgE;IAChE,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5C,kEAAkE;IAClE,aAAa,IAAI,IAAI,CAAA;IACrB,yEAAyE;IACzE,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5C,kEAAkE;IAClE,cAAc,IAAI,IAAI,CAAA;IACtB,mEAAmE;IACnE,qBAAqB,IAAI,IAAI,CAAA;IAG7B,8DAA8D;IAC9D,WAAW,CAAC,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACjE,yEAAyE;IACzE,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAA;IAGhD,2DAA2D;IAC3D,qBAAqB,CACnB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,4BAA4B,GACpC,IAAI,CAAA;CACR;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,aAAa,CAAA;IACzB,KAAK,EAAE;QAAE,sBAAsB,IAAI,WAAW,GAAG,IAAI,CAAA;KAAE,CAAA;CACxD;AASD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB,CAoD7E"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ProjectChannel, WindowChannel, SettingsChannel, PopoverChannel, WorkbenchChannel, ToolbarChannel, WorkbenchSettingsChannel, } from '../../../shared/ipc-channels.js';
|
|
2
|
+
/** Safely resolve a WebContents, skipping destroyed / missing targets. */
|
|
3
|
+
function liveWebContents(wc) {
|
|
4
|
+
if (!wc)
|
|
5
|
+
return null;
|
|
6
|
+
if (wc.isDestroyed())
|
|
7
|
+
return null;
|
|
8
|
+
return wc;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Build a RendererNotifier bound to the given context. This is the only
|
|
12
|
+
* module allowed to call `webContents.send(...)` in the devtools main process.
|
|
13
|
+
*/
|
|
14
|
+
export function createRendererNotifier(ctx) {
|
|
15
|
+
function sendToMain(channel, ...args) {
|
|
16
|
+
if (ctx.mainWindow.isDestroyed())
|
|
17
|
+
return;
|
|
18
|
+
const wc = liveWebContents(ctx.mainWindow.webContents);
|
|
19
|
+
if (!wc)
|
|
20
|
+
return;
|
|
21
|
+
wc.send(channel, ...args);
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
projectStatus(payload) {
|
|
25
|
+
sendToMain(ProjectChannel.Status, payload);
|
|
26
|
+
},
|
|
27
|
+
windowNavigateBack() {
|
|
28
|
+
sendToMain(WindowChannel.NavigateBack);
|
|
29
|
+
},
|
|
30
|
+
settingsClosed() {
|
|
31
|
+
sendToMain(SettingsChannel.Closed);
|
|
32
|
+
},
|
|
33
|
+
settingsChanged(config) {
|
|
34
|
+
sendToMain(SettingsChannel.Changed, config);
|
|
35
|
+
},
|
|
36
|
+
popoverClosed() {
|
|
37
|
+
sendToMain(PopoverChannel.Closed);
|
|
38
|
+
},
|
|
39
|
+
popoverRelaunch(config) {
|
|
40
|
+
sendToMain(PopoverChannel.Relaunch, config);
|
|
41
|
+
},
|
|
42
|
+
workbenchReset() {
|
|
43
|
+
sendToMain(WorkbenchChannel.Reset);
|
|
44
|
+
},
|
|
45
|
+
toolbarActionsChanged() {
|
|
46
|
+
sendToMain(ToolbarChannel.ActionsChanged);
|
|
47
|
+
},
|
|
48
|
+
popoverInit(popoverView, payload) {
|
|
49
|
+
const wc = liveWebContents(popoverView.webContents);
|
|
50
|
+
if (!wc)
|
|
51
|
+
return;
|
|
52
|
+
wc.send(PopoverChannel.Init, payload);
|
|
53
|
+
},
|
|
54
|
+
settingsInit(payload) {
|
|
55
|
+
const wc = liveWebContents(ctx.views.getSettingsWebContents());
|
|
56
|
+
if (!wc)
|
|
57
|
+
return;
|
|
58
|
+
wc.send(SettingsChannel.Init, payload);
|
|
59
|
+
},
|
|
60
|
+
workbenchSettingsInit(window, payload) {
|
|
61
|
+
if (window.isDestroyed())
|
|
62
|
+
return;
|
|
63
|
+
const wc = liveWebContents(window.webContents);
|
|
64
|
+
if (!wc)
|
|
65
|
+
return;
|
|
66
|
+
wc.send(WorkbenchSettingsChannel.Init, payload);
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=renderer-notifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-notifier.js","sourceRoot":"","sources":["../../../../src/main/services/notifications/renderer-notifier.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,wBAAwB,GACzB,MAAM,iCAAiC,CAAA;AAqFxC,0EAA0E;AAC1E,SAAS,eAAe,CAAC,EAAkC;IACzD,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAA;IACpB,IAAI,EAAE,CAAC,WAAW,EAAE;QAAE,OAAO,IAAI,CAAA;IACjC,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAoB;IACzD,SAAS,UAAU,CAAC,OAAe,EAAE,GAAG,IAAe;QACrD,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE;YAAE,OAAM;QACxC,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;QACtD,IAAI,CAAC,EAAE;YAAE,OAAM;QACf,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO;QACL,aAAa,CAAC,OAAO;YACnB,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC5C,CAAC;QACD,kBAAkB;YAChB,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QACxC,CAAC;QACD,cAAc;YACZ,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;QACpC,CAAC;QACD,eAAe,CAAC,MAAM;YACpB,UAAU,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC7C,CAAC;QACD,aAAa;YACX,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC;QACD,eAAe,CAAC,MAAM;YACpB,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC7C,CAAC;QACD,cAAc;YACZ,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;QACD,qBAAqB;YACnB,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;QAC3C,CAAC;QAED,WAAW,CAAC,WAAW,EAAE,OAAO;YAC9B,MAAM,EAAE,GAAG,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;YACnD,IAAI,CAAC,EAAE;gBAAE,OAAM;YACf,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC;QACD,YAAY,CAAC,OAAO;YAClB,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAA;YAC9D,IAAI,CAAC,EAAE;gBAAE,OAAM;YACf,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACxC,CAAC;QAED,qBAAqB,CAAC,MAAM,EAAE,OAAO;YACnC,IAAI,MAAM,CAAC,WAAW,EAAE;gBAAE,OAAM;YAChC,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;YAC9C,IAAI,CAAC,EAAE;gBAAE,OAAM;YACf,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACjD,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/main/services/projects/index.ts"],"names":[],"mappings":"AAIA,cAAc,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Thin re-export over project-repository so the `./projects` package export
|
|
2
|
+
// keeps working. The filesystem-level helpers live in project-repository.ts;
|
|
3
|
+
// higher-level coordination (session + renderer notifications) lives in
|
|
4
|
+
// ../workspace/workspace-service.ts.
|
|
5
|
+
export * from './project-repository.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/main/services/projects/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,6EAA6E;AAC7E,wEAAwE;AACxE,qCAAqC;AACrC,cAAc,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { CompileConfig } from '../../../shared/types.js';
|
|
2
|
+
export interface Project {
|
|
3
|
+
name: string;
|
|
4
|
+
path: string;
|
|
5
|
+
lastOpened?: string | null;
|
|
6
|
+
compileConfig?: CompileConfig;
|
|
7
|
+
}
|
|
8
|
+
export interface ProjectPages {
|
|
9
|
+
pages: string[];
|
|
10
|
+
entryPagePath: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ProjectSettings {
|
|
13
|
+
uploadWithSourceMap: boolean;
|
|
14
|
+
}
|
|
15
|
+
export type { CompileConfig } from '../../../shared/types.js';
|
|
16
|
+
export declare function listProjects(): Project[];
|
|
17
|
+
export declare function validateProjectDir(dirPath: string): string | null;
|
|
18
|
+
export declare function addProject(dirPath: string): Project;
|
|
19
|
+
export declare function removeProject(dirPath: string): void;
|
|
20
|
+
export declare function updateLastOpened(dirPath: string): void;
|
|
21
|
+
export declare function getCompileConfig(dirPath: string): CompileConfig;
|
|
22
|
+
export declare function getProjectPages(dirPath: string): ProjectPages;
|
|
23
|
+
export declare function saveCompileConfig(dirPath: string, config: CompileConfig): void;
|
|
24
|
+
/** Read a subset of `project.config.json` exposed to the settings panel. */
|
|
25
|
+
export declare function getProjectSettings(projectPath: string): ProjectSettings;
|
|
26
|
+
/** Persist a partial patch into the `setting` block of `project.config.json`. */
|
|
27
|
+
export declare function updateProjectSettings(projectPath: string, patch: Partial<ProjectSettings>): void;
|
|
28
|
+
//# sourceMappingURL=project-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-repository.d.ts","sourceRoot":"","sources":["../../../../src/main/services/projects/project-repository.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAM7D,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,mBAAmB,EAAE,OAAO,CAAA;CAC7B;AAGD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAkB7D,wBAAgB,YAAY,IAAI,OAAO,EAAE,CAExC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBjE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAsBnD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAOtD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAU/D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAa7D;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,aAAa,GACpB,IAAI,CAON;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAevE;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAC9B,IAAI,CAuBN"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { app } from 'electron';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import { DEFAULT_SCENE } from '../../../shared/constants.js';
|
|
5
|
+
import { createLogger } from '../../utils/logger.js';
|
|
6
|
+
const log = createLogger('projects');
|
|
7
|
+
function getProjectsFile() {
|
|
8
|
+
return path.join(app.getPath('userData'), 'dimina-projects.json');
|
|
9
|
+
}
|
|
10
|
+
function load() {
|
|
11
|
+
try {
|
|
12
|
+
return JSON.parse(fs.readFileSync(getProjectsFile(), 'utf-8'));
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function save(projects) {
|
|
19
|
+
fs.writeFileSync(getProjectsFile(), JSON.stringify(projects, null, 2));
|
|
20
|
+
}
|
|
21
|
+
export function listProjects() {
|
|
22
|
+
return load();
|
|
23
|
+
}
|
|
24
|
+
export function validateProjectDir(dirPath) {
|
|
25
|
+
if (!fs.existsSync(path.join(dirPath, 'app.json'))) {
|
|
26
|
+
const configPath = path.join(dirPath, 'project.config.json');
|
|
27
|
+
if (fs.existsSync(configPath)) {
|
|
28
|
+
try {
|
|
29
|
+
const cfg = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
30
|
+
if (cfg.miniprogramRoot) {
|
|
31
|
+
const resolvedRoot = path.resolve(dirPath, cfg.miniprogramRoot);
|
|
32
|
+
return `该目录缺少 app.json,project.config.json 中指定了 miniprogramRoot: "${cfg.miniprogramRoot}",请导入 ${resolvedRoot}`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
log.warn('Failed to parse project.config.json', err);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return '该目录缺少 app.json,请选择包含小程序源码的目录';
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
export function addProject(dirPath) {
|
|
44
|
+
const projects = load();
|
|
45
|
+
let name = path.basename(dirPath);
|
|
46
|
+
try {
|
|
47
|
+
const configPath = path.join(dirPath, 'project.config.json');
|
|
48
|
+
if (fs.existsSync(configPath)) {
|
|
49
|
+
const cfg = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
50
|
+
if (cfg.projectname)
|
|
51
|
+
name = cfg.projectname;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
log.warn('Failed to read project name from config', err);
|
|
56
|
+
}
|
|
57
|
+
const project = { name, path: dirPath, lastOpened: null };
|
|
58
|
+
const idx = projects.findIndex((p) => p.path === dirPath);
|
|
59
|
+
if (idx >= 0) {
|
|
60
|
+
projects[idx] = { ...projects[idx], name };
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
projects.unshift(project);
|
|
64
|
+
}
|
|
65
|
+
save(projects);
|
|
66
|
+
return project;
|
|
67
|
+
}
|
|
68
|
+
export function removeProject(dirPath) {
|
|
69
|
+
save(load().filter((p) => p.path !== dirPath));
|
|
70
|
+
}
|
|
71
|
+
export function updateLastOpened(dirPath) {
|
|
72
|
+
const projects = load();
|
|
73
|
+
const idx = projects.findIndex((p) => p.path === dirPath);
|
|
74
|
+
if (idx >= 0) {
|
|
75
|
+
projects[idx] = { ...projects[idx], lastOpened: new Date().toISOString() };
|
|
76
|
+
save(projects);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export function getCompileConfig(dirPath) {
|
|
80
|
+
const projects = load();
|
|
81
|
+
const project = projects.find((p) => p.path === dirPath);
|
|
82
|
+
return (project?.compileConfig ?? {
|
|
83
|
+
startPage: '',
|
|
84
|
+
scene: DEFAULT_SCENE,
|
|
85
|
+
queryParams: [],
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
export function getProjectPages(dirPath) {
|
|
89
|
+
const appJsonPath = path.join(dirPath, 'app.json');
|
|
90
|
+
try {
|
|
91
|
+
const appJson = JSON.parse(fs.readFileSync(appJsonPath, 'utf-8'));
|
|
92
|
+
return {
|
|
93
|
+
pages: appJson.pages || [],
|
|
94
|
+
entryPagePath: appJson.entryPagePath || appJson.pages?.[0] || '',
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return { pages: [], entryPagePath: '' };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export function saveCompileConfig(dirPath, config) {
|
|
102
|
+
const projects = load();
|
|
103
|
+
const idx = projects.findIndex((p) => p.path === dirPath);
|
|
104
|
+
if (idx >= 0) {
|
|
105
|
+
projects[idx] = { ...projects[idx], compileConfig: config };
|
|
106
|
+
save(projects);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** Read a subset of `project.config.json` exposed to the settings panel. */
|
|
110
|
+
export function getProjectSettings(projectPath) {
|
|
111
|
+
if (!projectPath) {
|
|
112
|
+
return { uploadWithSourceMap: false };
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
const configPath = path.join(projectPath, 'project.config.json');
|
|
116
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
117
|
+
return {
|
|
118
|
+
uploadWithSourceMap: !!config.setting?.uploadWithSourceMap,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return { uploadWithSourceMap: false };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/** Persist a partial patch into the `setting` block of `project.config.json`. */
|
|
126
|
+
export function updateProjectSettings(projectPath, patch) {
|
|
127
|
+
if (!projectPath)
|
|
128
|
+
return;
|
|
129
|
+
const configPath = path.join(projectPath, 'project.config.json');
|
|
130
|
+
let config = {};
|
|
131
|
+
try {
|
|
132
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// ignore and create a minimal config below
|
|
136
|
+
}
|
|
137
|
+
const nextSetting = {
|
|
138
|
+
...(config.setting ?? {}),
|
|
139
|
+
...(patch.uploadWithSourceMap === undefined
|
|
140
|
+
? {}
|
|
141
|
+
: { uploadWithSourceMap: patch.uploadWithSourceMap }),
|
|
142
|
+
};
|
|
143
|
+
fs.writeFileSync(configPath, JSON.stringify({ ...config, setting: nextSetting }, null, 2));
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=project-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-repository.js","sourceRoot":"","sources":["../../../../src/main/services/projects/project-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type ThemeSource = 'system' | 'dark' | 'light';
|
|
2
|
+
export interface WorkbenchSettings {
|
|
3
|
+
cdp: {
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
port: number;
|
|
6
|
+
};
|
|
7
|
+
mcp: {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
port: number;
|
|
10
|
+
};
|
|
11
|
+
theme: ThemeSource;
|
|
12
|
+
}
|
|
13
|
+
export declare function loadWorkbenchSettings(): WorkbenchSettings;
|
|
14
|
+
export declare function saveWorkbenchSettings(settings: WorkbenchSettings): void;
|
|
15
|
+
export declare function applyTheme(theme: ThemeSource): void;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/main/services/settings/index.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAErD,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE;QACH,OAAO,EAAE,OAAO,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IACD,GAAG,EAAE;QACH,OAAO,EAAE,OAAO,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IACD,KAAK,EAAE,WAAW,CAAA;CACnB;AAkBD,wBAAgB,qBAAqB,IAAI,iBAAiB,CAoBzD;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAEvE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAEnD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { app, nativeTheme } from 'electron';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
const DEFAULTS = {
|
|
5
|
+
cdp: {
|
|
6
|
+
enabled: false,
|
|
7
|
+
port: 9222,
|
|
8
|
+
},
|
|
9
|
+
mcp: {
|
|
10
|
+
enabled: false,
|
|
11
|
+
port: 7789,
|
|
12
|
+
},
|
|
13
|
+
theme: 'system',
|
|
14
|
+
};
|
|
15
|
+
function getSettingsFile() {
|
|
16
|
+
return path.join(app.getPath('userData'), 'dimina-workbench-settings.json');
|
|
17
|
+
}
|
|
18
|
+
export function loadWorkbenchSettings() {
|
|
19
|
+
try {
|
|
20
|
+
const data = JSON.parse(fs.readFileSync(getSettingsFile(), 'utf-8'));
|
|
21
|
+
const theme = ['system', 'dark', 'light'].includes(data.theme)
|
|
22
|
+
? data.theme
|
|
23
|
+
: DEFAULTS.theme;
|
|
24
|
+
return {
|
|
25
|
+
cdp: {
|
|
26
|
+
enabled: data.cdp?.enabled ?? DEFAULTS.cdp.enabled,
|
|
27
|
+
port: data.cdp?.port ?? DEFAULTS.cdp.port,
|
|
28
|
+
},
|
|
29
|
+
mcp: {
|
|
30
|
+
enabled: data.mcp?.enabled ?? DEFAULTS.mcp.enabled,
|
|
31
|
+
port: data.mcp?.port ?? DEFAULTS.mcp.port,
|
|
32
|
+
},
|
|
33
|
+
theme,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return { ...DEFAULTS, cdp: { ...DEFAULTS.cdp }, mcp: { ...DEFAULTS.mcp } };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function saveWorkbenchSettings(settings) {
|
|
41
|
+
fs.writeFileSync(getSettingsFile(), JSON.stringify(settings, null, 2));
|
|
42
|
+
}
|
|
43
|
+
export function applyTheme(theme) {
|
|
44
|
+
nativeTheme.themeSource = theme;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/main/services/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AAgBvB,MAAM,QAAQ,GAAsB;IAClC,GAAG,EAAE;QACH,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,IAAI;KACX;IACD,GAAG,EAAE;QACH,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,IAAI;KACX;IACD,KAAK,EAAE,QAAQ;CAChB,CAAA;AAED,SAAS,eAAe;IACtB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,gCAAgC,CAAC,CAAA;AAC7E,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;QACpE,MAAM,KAAK,GAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAC/E,CAAC,CAAE,IAAI,CAAC,KAAqB;YAC7B,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAA;QAClB,OAAO;YACL,GAAG,EAAE;gBACH,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO;gBAClD,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI;aAC1C;YACD,GAAG,EAAE;gBACH,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO;gBAClD,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI;aAC1C;YACD,KAAK;SACN,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAA;IAC5E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAA2B;IAC/D,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAkB;IAC3C,WAAW,CAAC,WAAW,GAAG,KAAK,CAAA;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dir.d.ts","sourceRoot":"","sources":["../../../../src/main/services/simulator/dir.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,QAA6C,CAAA"}
|