@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 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../../../src/main/services/automation/handlers/tool.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAA4B,EAAE,CAAA;AAEvD,oBAAoB;AAEpB,YAAY,CAAC,cAAc,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAA;AAEpE,YAAY,CAAC,YAAY,CAAC,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;IACzC,MAAM,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,CAAA;IAClC,OAAO,EAAE,CAAA;AACX,CAAC,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket automation server compatible with miniprogram-automator protocol.
|
|
3
|
+
*
|
|
4
|
+
* miniprogram-automator sends JSON-RPC messages over WebSocket:
|
|
5
|
+
* Request: { id: "uuid", method: "App.getCurrentPage", params: {} }
|
|
6
|
+
* Response: { id: "uuid", result: {...} } or { id: "uuid", error: { message: "..." } }
|
|
7
|
+
* Event: { method: "App.logAdded", params: {...} }
|
|
8
|
+
*
|
|
9
|
+
* This server handles these messages by delegating to the workbench context
|
|
10
|
+
* (simulator webContents, IPC handlers, etc.) without modifying dimina upstream.
|
|
11
|
+
*/
|
|
12
|
+
import type { WorkbenchContext } from '../workbench-context.js';
|
|
13
|
+
export interface AutomationServer {
|
|
14
|
+
close: () => void;
|
|
15
|
+
port: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function startAutomationServer(ctx: WorkbenchContext, port: number): AutomationServer;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/main/services/automation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAmB/D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,MAAM,GACX,gBAAgB,CAuElB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket automation server compatible with miniprogram-automator protocol.
|
|
3
|
+
*
|
|
4
|
+
* miniprogram-automator sends JSON-RPC messages over WebSocket:
|
|
5
|
+
* Request: { id: "uuid", method: "App.getCurrentPage", params: {} }
|
|
6
|
+
* Response: { id: "uuid", result: {...} } or { id: "uuid", error: { message: "..." } }
|
|
7
|
+
* Event: { method: "App.logAdded", params: {...} }
|
|
8
|
+
*
|
|
9
|
+
* This server handles these messages by delegating to the workbench context
|
|
10
|
+
* (simulator webContents, IPC handlers, etc.) without modifying dimina upstream.
|
|
11
|
+
*/
|
|
12
|
+
/// <reference types="electron" />
|
|
13
|
+
import { WebSocketServer } from 'ws';
|
|
14
|
+
import { SimulatorChannel } from '../../../shared/ipc-channels.js';
|
|
15
|
+
import { getSimulator } from './exec.js';
|
|
16
|
+
import { toolHandlers } from './handlers/tool.js';
|
|
17
|
+
import { appHandlers } from './handlers/app.js';
|
|
18
|
+
import { pageHandlers } from './handlers/page.js';
|
|
19
|
+
import { elementHandlers } from './handlers/element.js';
|
|
20
|
+
// ── Protocol Handlers ─────────────────────────────────────────────────
|
|
21
|
+
const handlers = {
|
|
22
|
+
...toolHandlers,
|
|
23
|
+
...appHandlers,
|
|
24
|
+
...pageHandlers,
|
|
25
|
+
...elementHandlers,
|
|
26
|
+
};
|
|
27
|
+
export function startAutomationServer(ctx, port) {
|
|
28
|
+
const wss = new WebSocketServer({ port });
|
|
29
|
+
const clients = new Set();
|
|
30
|
+
function broadcast(event) {
|
|
31
|
+
const msg = JSON.stringify(event);
|
|
32
|
+
for (const ws of clients) {
|
|
33
|
+
if (ws.readyState === ws.OPEN)
|
|
34
|
+
ws.send(msg);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Forward simulator console logs as App.logAdded events
|
|
38
|
+
let consoleForwardingSetup = false;
|
|
39
|
+
function setupConsoleForwarding() {
|
|
40
|
+
if (consoleForwardingSetup)
|
|
41
|
+
return;
|
|
42
|
+
consoleForwardingSetup = true;
|
|
43
|
+
// Poll for simulator and set up listener
|
|
44
|
+
const check = setInterval(() => {
|
|
45
|
+
const sim = getSimulator(ctx);
|
|
46
|
+
if (!sim)
|
|
47
|
+
return;
|
|
48
|
+
clearInterval(check);
|
|
49
|
+
sim.on('ipc-message-host', (_event, channel, data) => {
|
|
50
|
+
if (channel === SimulatorChannel.Console) {
|
|
51
|
+
const logData = data;
|
|
52
|
+
broadcast({
|
|
53
|
+
method: 'App.logAdded',
|
|
54
|
+
params: { type: logData.level || 'log', args: logData.args || [] },
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}, 1000);
|
|
59
|
+
// Stop polling after 30s
|
|
60
|
+
setTimeout(() => clearInterval(check), 30000);
|
|
61
|
+
}
|
|
62
|
+
wss.on('connection', (ws) => {
|
|
63
|
+
clients.add(ws);
|
|
64
|
+
setupConsoleForwarding();
|
|
65
|
+
ws.on('message', async (raw) => {
|
|
66
|
+
let req;
|
|
67
|
+
try {
|
|
68
|
+
req = JSON.parse(String(raw));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const { id, method, params = {} } = req;
|
|
74
|
+
const handler = handlers[method];
|
|
75
|
+
let response;
|
|
76
|
+
if (!handler) {
|
|
77
|
+
response = { id, error: { message: `Unknown method: ${method}` } };
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
try {
|
|
81
|
+
const result = await handler(ctx, params);
|
|
82
|
+
response = { id, result };
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
response = { id, error: { message: err.message || String(err) } };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (ws.readyState === ws.OPEN)
|
|
89
|
+
ws.send(JSON.stringify(response));
|
|
90
|
+
});
|
|
91
|
+
ws.on('close', () => clients.delete(ws));
|
|
92
|
+
});
|
|
93
|
+
return { close: () => wss.close(), port };
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/main/services/automation/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ElementRef } from './shared.js';
|
|
2
|
+
export declare const elementRegistry: Map<string, ElementRef>;
|
|
3
|
+
export declare let nextElementId: number;
|
|
4
|
+
export declare function registerElement(selector: string, index: number, pageId: number): string;
|
|
5
|
+
export declare function getElementRef(params: Record<string, unknown>): ElementRef;
|
|
6
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/main/services/automation/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAQ7C,eAAO,MAAM,eAAe,yBAAgC,CAAA;AAC5D,eAAO,IAAI,aAAa,QAAI,CAAA;AAE5B,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIvF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAKzE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// ── Element Registry ──────────────────────────────────────────────────
|
|
2
|
+
// miniprogram-automator references elements by elementId. Since we execute
|
|
3
|
+
// JS in the simulator via executeJavaScript (no persistent references),
|
|
4
|
+
// we store the CSS selector path for each elementId so subsequent calls
|
|
5
|
+
// can re-locate the element.
|
|
6
|
+
export const elementRegistry = new Map();
|
|
7
|
+
export let nextElementId = 1;
|
|
8
|
+
export function registerElement(selector, index, pageId) {
|
|
9
|
+
const id = `el_${nextElementId++}`;
|
|
10
|
+
elementRegistry.set(id, { selector, index, pageId });
|
|
11
|
+
return id;
|
|
12
|
+
}
|
|
13
|
+
export function getElementRef(params) {
|
|
14
|
+
const id = params.elementId;
|
|
15
|
+
const ref = elementRegistry.get(id);
|
|
16
|
+
if (!ref)
|
|
17
|
+
throw new Error(`Element not found: ${id} (stale reference)`);
|
|
18
|
+
return ref;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/main/services/automation/registry.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,2EAA2E;AAC3E,wEAAwE;AACxE,wEAAwE;AACxE,6BAA6B;AAE7B,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAsB,CAAA;AAC5D,MAAM,CAAC,IAAI,aAAa,GAAG,CAAC,CAAA;AAE5B,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,KAAa,EAAE,MAAc;IAC7E,MAAM,EAAE,GAAG,MAAM,aAAa,EAAE,EAAE,CAAA;IAClC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IACpD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA+B;IAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,SAAmB,CAAA;IACrC,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACnC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,CAAA;IACvE,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { WorkbenchContext } from '../workbench-context.js';
|
|
2
|
+
export interface RpcRequest {
|
|
3
|
+
id: string;
|
|
4
|
+
method: string;
|
|
5
|
+
params: Record<string, unknown>;
|
|
6
|
+
}
|
|
7
|
+
export interface RpcResponse {
|
|
8
|
+
id: string;
|
|
9
|
+
result?: unknown;
|
|
10
|
+
error?: {
|
|
11
|
+
message: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface RpcEvent {
|
|
15
|
+
method: string;
|
|
16
|
+
params: unknown;
|
|
17
|
+
}
|
|
18
|
+
export interface ElementRef {
|
|
19
|
+
selector: string;
|
|
20
|
+
index: number;
|
|
21
|
+
pageId: number;
|
|
22
|
+
}
|
|
23
|
+
export type Handler = (ctx: WorkbenchContext, params: Record<string, unknown>) => Promise<unknown>;
|
|
24
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/main/services/automation/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAI/D,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/main/services/automation/shared.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-adapter.d.ts","sourceRoot":"","sources":["../../../src/main/services/default-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAkB/D,eAAO,MAAM,cAAc,EAAE,kBAU5B,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
import { app } from 'electron';
|
|
4
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
const simulatorDir = path.resolve(__dirname, '../../simulator');
|
|
6
|
+
export const defaultAdapter = {
|
|
7
|
+
async openProject(opts) {
|
|
8
|
+
const diminaKit = await import('@dimina-kit/devkit');
|
|
9
|
+
const openProject = diminaKit.openProject;
|
|
10
|
+
return openProject({
|
|
11
|
+
outputDir: path.join(app.getPath('userData'), 'dimina-fe-output'),
|
|
12
|
+
...opts,
|
|
13
|
+
simulatorDir,
|
|
14
|
+
});
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=default-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-adapter.js","sourceRoot":"","sources":["../../../src/main/services/default-adapter.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAA;AAY/D,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD,KAAK,CAAC,WAAW,CAAC,IAAI;QACpB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;QACpD,MAAM,WAAW,GAAG,SAAS,CAAC,WAAkF,CAAA;QAChH,OAAO,WAAW,CAAC;YACjB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;YACjE,GAAG,IAAI;YACP,YAAY;SACb,CAAC,CAAA;IACJ,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Layout constants (px) */
|
|
2
|
+
export declare let HEADER_H: number;
|
|
3
|
+
export declare const SPLITTER_W = 4;
|
|
4
|
+
/**
|
|
5
|
+
* Override the header height used for layout calculations.
|
|
6
|
+
* Call this before any views are positioned (e.g. in onSetup).
|
|
7
|
+
*/
|
|
8
|
+
export declare function setHeaderHeight(h: number): void;
|
|
9
|
+
/**
|
|
10
|
+
* X coordinate where the right panel starts (simulator width + splitter).
|
|
11
|
+
*/
|
|
12
|
+
export declare function getRightX(simWidth: number): number;
|
|
13
|
+
export interface Bounds {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
width: number;
|
|
17
|
+
height: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function computeRightPanelBounds(contentWidth: number, contentHeight: number, simWidth: number): Bounds;
|
|
20
|
+
/**
|
|
21
|
+
* Compute bounds for DevTools view (same as right panel, overlays it).
|
|
22
|
+
*/
|
|
23
|
+
export declare function computeSimulatorBounds(contentWidth: number, contentHeight: number, simWidth: number): Bounds;
|
|
24
|
+
export declare const SETTINGS_W = 320;
|
|
25
|
+
export declare function computeSettingsBounds(contentWidth: number, contentHeight: number): Bounds;
|
|
26
|
+
export declare function computePopoverBounds(contentWidth: number, contentHeight: number): Bounds;
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/main/services/layout/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,eAAO,IAAI,QAAQ,QAAK,CAAA;AACxB,eAAO,MAAM,UAAU,IAAI,CAAA;AAE3B;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,eAAO,MAAM,UAAU,MAAM,CAAA;AAE7B,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,MAAM,CAOR;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,MAAM,CAOR"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** Layout constants (px) */
|
|
2
|
+
export let HEADER_H = 40;
|
|
3
|
+
export const SPLITTER_W = 4;
|
|
4
|
+
/**
|
|
5
|
+
* Override the header height used for layout calculations.
|
|
6
|
+
* Call this before any views are positioned (e.g. in onSetup).
|
|
7
|
+
*/
|
|
8
|
+
export function setHeaderHeight(h) {
|
|
9
|
+
HEADER_H = h;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* X coordinate where the right panel starts (simulator width + splitter).
|
|
13
|
+
*/
|
|
14
|
+
export function getRightX(simWidth) {
|
|
15
|
+
return simWidth + SPLITTER_W;
|
|
16
|
+
}
|
|
17
|
+
export function computeRightPanelBounds(contentWidth, contentHeight, simWidth) {
|
|
18
|
+
const x = getRightX(simWidth);
|
|
19
|
+
return {
|
|
20
|
+
x,
|
|
21
|
+
y: HEADER_H,
|
|
22
|
+
width: Math.max(1, contentWidth - x),
|
|
23
|
+
height: Math.max(1, contentHeight - HEADER_H),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Compute bounds for DevTools view (same as right panel, overlays it).
|
|
28
|
+
*/
|
|
29
|
+
export function computeSimulatorBounds(contentWidth, contentHeight, simWidth) {
|
|
30
|
+
return computeRightPanelBounds(contentWidth, contentHeight, simWidth);
|
|
31
|
+
}
|
|
32
|
+
export const SETTINGS_W = 320;
|
|
33
|
+
export function computeSettingsBounds(contentWidth, contentHeight) {
|
|
34
|
+
return {
|
|
35
|
+
x: Math.max(0, contentWidth - SETTINGS_W),
|
|
36
|
+
y: HEADER_H,
|
|
37
|
+
width: SETTINGS_W,
|
|
38
|
+
height: Math.max(1, contentHeight - HEADER_H),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function computePopoverBounds(contentWidth, contentHeight) {
|
|
42
|
+
return {
|
|
43
|
+
x: 0,
|
|
44
|
+
y: HEADER_H,
|
|
45
|
+
width: contentWidth,
|
|
46
|
+
height: contentHeight - HEADER_H,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/main/services/layout/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,MAAM,CAAC,IAAI,QAAQ,GAAG,EAAE,CAAA;AACxB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAA;AAE3B;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,CAAS;IACvC,QAAQ,GAAG,CAAC,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,OAAO,QAAQ,GAAG,UAAU,CAAA;AAC9B,CAAC;AASD,MAAM,UAAU,uBAAuB,CACrC,YAAoB,EACpB,aAAqB,EACrB,QAAgB;IAEhB,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC7B,OAAO;QACL,CAAC;QACD,CAAC,EAAE,QAAQ;QACX,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC;QACpC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,QAAQ,CAAC;KAC9C,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,YAAoB,EACpB,aAAqB,EACrB,QAAgB;IAEhB,OAAO,uBAAuB,CAAC,YAAY,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAA;AACvE,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAA;AAE7B,MAAM,UAAU,qBAAqB,CACnC,YAAoB,EACpB,aAAqB;IAErB,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;QACzC,CAAC,EAAE,QAAQ;QACX,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,QAAQ,CAAC;KAC9C,CAAA;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,YAAoB,EACpB,aAAqB;IAErB,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,QAAQ;QACX,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,aAAa,GAAG,QAAQ;KACjC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP (Model Context Protocol) server entry point.
|
|
3
|
+
*
|
|
4
|
+
* The server speaks SSE over HTTP and exposes two sets of tools:
|
|
5
|
+
* - simulator_* — reach into the in-app simulator webview via CDP
|
|
6
|
+
* - workbench_* — reach into the workbench main renderer window via CDP
|
|
7
|
+
*
|
|
8
|
+
* See also:
|
|
9
|
+
* - `./server.ts` HTTP/SSE transport + tool wiring
|
|
10
|
+
* - `./tool-registry.ts` shared tool shapes (screenshot/console/eval/...)
|
|
11
|
+
* - `./tools/*-tools.ts` kind-specific tools
|
|
12
|
+
* - `./target-manager.ts` dual-target CDP connection + reconnect
|
|
13
|
+
*/
|
|
14
|
+
export { startMcpServer } from './server.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/main/services/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP (Model Context Protocol) server entry point.
|
|
3
|
+
*
|
|
4
|
+
* The server speaks SSE over HTTP and exposes two sets of tools:
|
|
5
|
+
* - simulator_* — reach into the in-app simulator webview via CDP
|
|
6
|
+
* - workbench_* — reach into the workbench main renderer window via CDP
|
|
7
|
+
*
|
|
8
|
+
* See also:
|
|
9
|
+
* - `./server.ts` HTTP/SSE transport + tool wiring
|
|
10
|
+
* - `./tool-registry.ts` shared tool shapes (screenshot/console/eval/...)
|
|
11
|
+
* - `./tools/*-tools.ts` kind-specific tools
|
|
12
|
+
* - `./target-manager.ts` dual-target CDP connection + reconnect
|
|
13
|
+
*/
|
|
14
|
+
export { startMcpServer } from './server.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/main/services/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP + SSE server entry for the MCP transport.
|
|
3
|
+
*
|
|
4
|
+
* Exposes an HTTP/SSE endpoint (`/sse` for the stream, `/message` for
|
|
5
|
+
* outbound JSON-RPC messages) that the Model Context Protocol SDK drives.
|
|
6
|
+
* Tool registration lives in `./tool-registry` and `./tools/*`; this file
|
|
7
|
+
* only wires up transports and lifecycle.
|
|
8
|
+
*/
|
|
9
|
+
export declare function startMcpServer(resolvedCdpPort: number, mcpPort: number): void;
|
|
10
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/main/services/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmCH,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA0C7E"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP + SSE server entry for the MCP transport.
|
|
3
|
+
*
|
|
4
|
+
* Exposes an HTTP/SSE endpoint (`/sse` for the stream, `/message` for
|
|
5
|
+
* outbound JSON-RPC messages) that the Model Context Protocol SDK drives.
|
|
6
|
+
* Tool registration lives in `./tool-registry` and `./tools/*`; this file
|
|
7
|
+
* only wires up transports and lifecycle.
|
|
8
|
+
*/
|
|
9
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
10
|
+
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
|
|
11
|
+
import { createServer } from 'http';
|
|
12
|
+
import { createRequire } from 'node:module';
|
|
13
|
+
import { connectTarget, setCdpPort } from './target-manager.js';
|
|
14
|
+
import { registerCommonTargetTools } from './tool-registry.js';
|
|
15
|
+
import { registerContextTools } from './tools/context-tools.js';
|
|
16
|
+
import { registerSimulatorTools } from './tools/simulator-tools.js';
|
|
17
|
+
import { registerWorkbenchTools } from './tools/workbench-tools.js';
|
|
18
|
+
const require = createRequire(import.meta.url);
|
|
19
|
+
const pkg = require('../../../../package.json');
|
|
20
|
+
function buildServer() {
|
|
21
|
+
const server = new McpServer({
|
|
22
|
+
name: '@dimina-kit/devtools',
|
|
23
|
+
version: pkg.version,
|
|
24
|
+
});
|
|
25
|
+
// Simulator tools: shared target ops + simulator-specific
|
|
26
|
+
registerCommonTargetTools(server, 'simulator');
|
|
27
|
+
registerSimulatorTools(server);
|
|
28
|
+
// Workbench main-window tools: shared target ops + workbench-specific
|
|
29
|
+
registerCommonTargetTools(server, 'workbench');
|
|
30
|
+
registerWorkbenchTools(server);
|
|
31
|
+
// Cross-target: AI orientation overview
|
|
32
|
+
registerContextTools(server);
|
|
33
|
+
return server;
|
|
34
|
+
}
|
|
35
|
+
export function startMcpServer(resolvedCdpPort, mcpPort) {
|
|
36
|
+
setCdpPort(resolvedCdpPort);
|
|
37
|
+
// Connect to both targets (non-blocking)
|
|
38
|
+
connectTarget('simulator').catch(() => { });
|
|
39
|
+
connectTarget('workbench').catch(() => { });
|
|
40
|
+
const server = buildServer();
|
|
41
|
+
const transports = new Map();
|
|
42
|
+
const httpServer = createServer(async (req, res) => {
|
|
43
|
+
const url = new URL(req.url ?? '/', `http://localhost`);
|
|
44
|
+
if (req.method === 'GET' && url.pathname === '/sse') {
|
|
45
|
+
const transport = new SSEServerTransport('/message', res);
|
|
46
|
+
transports.set(transport.sessionId, transport);
|
|
47
|
+
res.on('close', () => transports.delete(transport.sessionId));
|
|
48
|
+
await server.connect(transport);
|
|
49
|
+
}
|
|
50
|
+
else if (req.method === 'POST' && url.pathname === '/message') {
|
|
51
|
+
const sessionId = url.searchParams.get('sessionId') ?? '';
|
|
52
|
+
const transport = transports.get(sessionId);
|
|
53
|
+
if (transport) {
|
|
54
|
+
await transport.handlePostMessage(req, res);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
res.writeHead(404).end();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
res.writeHead(404).end();
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
httpServer.on('error', (err) => {
|
|
65
|
+
if (err.code === 'EADDRINUSE') {
|
|
66
|
+
console.warn(`[MCP] Port ${mcpPort} already in use — MCP server not started`);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.error('[MCP] Server error:', err);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
httpServer.listen(mcpPort, '127.0.0.1', () => {
|
|
73
|
+
console.log(`[MCP] SSE server listening on http://127.0.0.1:${mcpPort}/sse`);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/main/services/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dual-target CDP connection manager.
|
|
3
|
+
*
|
|
4
|
+
* The MCP server connects to two Chrome DevTools Protocol targets in parallel:
|
|
5
|
+
* - `simulator`: the in-app simulator `<webview>` (identified by its URL)
|
|
6
|
+
* - `workbench`: the workbench main renderer window
|
|
7
|
+
*
|
|
8
|
+
* Each target keeps:
|
|
9
|
+
* - a CDP client (reconnected automatically when the target disappears)
|
|
10
|
+
* - rolling buffers of console log and network request events
|
|
11
|
+
*/
|
|
12
|
+
import CDP from 'chrome-remote-interface';
|
|
13
|
+
export type TargetKind = 'simulator' | 'workbench';
|
|
14
|
+
export interface ConsoleLogEntry {
|
|
15
|
+
level: string;
|
|
16
|
+
text: string;
|
|
17
|
+
timestamp: string;
|
|
18
|
+
}
|
|
19
|
+
export interface NetworkRequestEntry {
|
|
20
|
+
url: string;
|
|
21
|
+
method: string;
|
|
22
|
+
status: number;
|
|
23
|
+
mimeType: string;
|
|
24
|
+
responseSize: number;
|
|
25
|
+
timing: {
|
|
26
|
+
requestTime: number;
|
|
27
|
+
receiveHeadersEnd: number;
|
|
28
|
+
} | null;
|
|
29
|
+
}
|
|
30
|
+
interface TargetState {
|
|
31
|
+
client: any;
|
|
32
|
+
connected: boolean;
|
|
33
|
+
timer: any;
|
|
34
|
+
consoleLogs: ConsoleLogEntry[];
|
|
35
|
+
networkRequests: NetworkRequestEntry[];
|
|
36
|
+
}
|
|
37
|
+
export declare function setCdpPort(port: number): void;
|
|
38
|
+
export declare function getTargetState(kind: TargetKind): TargetState;
|
|
39
|
+
declare function listCdpTargets(): Promise<CDP.Target[]>;
|
|
40
|
+
export { listCdpTargets as listTargets };
|
|
41
|
+
export declare function connectTarget(kind: TargetKind): Promise<void>;
|
|
42
|
+
export declare function getClient(kind: TargetKind): any;
|
|
43
|
+
//# sourceMappingURL=target-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target-manager.d.ts","sourceRoot":"","sources":["../../../../src/main/services/mcp/target-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,GAAG,MAAM,yBAAyB,CAAA;AAMzC,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,WAAW,CAAA;AAElD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAClE;AAED,UAAU,WAAW;IAEnB,MAAM,EAAE,GAAG,CAAA;IACX,SAAS,EAAE,OAAO,CAAA;IAElB,KAAK,EAAE,GAAG,CAAA;IACV,WAAW,EAAE,eAAe,EAAE,CAAA;IAC9B,eAAe,EAAE,mBAAmB,EAAE,CAAA;CACvC;AASD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAE5D;AAED,iBAAe,cAAc,0BAM5B;AAED,OAAO,EAAE,cAAc,IAAI,WAAW,EAAE,CAAA;AAYxC,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAoGnE;AAWD,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,OAOzC"}
|