@dimina-kit/devtools 0.4.0 → 0.5.0
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/README.md +51 -660
- package/dist/main/api.d.ts +2 -1
- package/dist/main/app/app.d.ts +41 -12
- package/dist/main/app/app.js +299 -514
- package/dist/main/app/bootstrap.d.ts +8 -5
- package/dist/main/app/bootstrap.js +15 -15
- package/dist/main/app/editor-view.d.ts +21 -0
- package/dist/main/app/editor-view.js +71 -0
- package/dist/main/app/global-mirrors.d.ts +23 -0
- package/dist/main/app/global-mirrors.js +37 -0
- package/dist/main/app/host-sidebar-default.d.ts +19 -0
- package/dist/main/app/host-sidebar-default.js +44 -0
- package/dist/main/app/lifecycle.d.ts +12 -1
- package/dist/main/app/lifecycle.js +27 -1
- package/dist/main/app/menu-setup.d.ts +13 -0
- package/dist/main/app/menu-setup.js +49 -0
- package/dist/main/app/native-overview.d.ts +1 -1
- package/dist/main/app/open-project-ipc.d.ts +13 -0
- package/dist/main/app/open-project-ipc.js +21 -0
- package/dist/main/app/project-list-surface.d.ts +31 -0
- package/dist/main/app/project-list-surface.js +20 -0
- package/dist/main/app/project-window.d.ts +36 -0
- package/dist/main/app/project-window.js +93 -0
- package/dist/main/app/servers.d.ts +17 -0
- package/dist/main/app/servers.js +60 -0
- package/dist/main/app/ui-extension-targets.d.ts +42 -0
- package/dist/main/app/ui-extension-targets.js +101 -0
- package/dist/main/app/window-close-reveal.harness.d.ts +34 -0
- package/dist/main/app/window-close-reveal.harness.js +65 -0
- package/dist/main/app/window-events.d.ts +15 -0
- package/dist/main/app/window-events.js +45 -0
- package/dist/main/app/window-runtime-services.d.ts +41 -0
- package/dist/main/app/window-runtime-services.js +197 -0
- package/dist/main/app/workbench-modules.d.ts +24 -0
- package/dist/main/app/workbench-modules.js +51 -0
- package/dist/main/app/workbench-window.d.ts +85 -0
- package/dist/main/app/workbench-window.js +310 -0
- package/dist/main/index.bundle.js +11712 -9986
- package/dist/main/index.js +49 -1
- package/dist/main/ipc/app-lifecycle.d.ts +1 -31
- package/dist/main/ipc/app-lifecycle.js +1 -53
- package/dist/main/ipc/app.d.ts +4 -1
- package/dist/main/ipc/app.js +4 -3
- package/dist/main/ipc/bridge-router.d.ts +19 -116
- package/dist/main/ipc/bridge-router.js +28 -2128
- package/dist/main/ipc/device-picker.d.ts +16 -0
- package/dist/main/ipc/device-picker.js +27 -0
- package/dist/main/ipc/index.d.ts +5 -0
- package/dist/main/ipc/index.js +5 -0
- package/dist/main/ipc/internal-devtools.d.ts +16 -0
- package/dist/main/ipc/internal-devtools.js +10 -0
- package/dist/main/ipc/page-scroll.d.ts +1 -13
- package/dist/main/ipc/page-scroll.js +1 -16
- package/dist/main/ipc/popover.d.ts +4 -1
- package/dist/main/ipc/popover.js +26 -19
- package/dist/main/ipc/project-create.d.ts +16 -0
- package/dist/main/ipc/project-create.js +27 -0
- package/dist/main/ipc/project-fs.d.ts +38 -3
- package/dist/main/ipc/project-fs.js +53 -22
- package/dist/main/ipc/projects.d.ts +3 -3
- package/dist/main/ipc/projects.js +47 -11
- package/dist/main/ipc/session-listener-bag.d.ts +1 -40
- package/dist/main/ipc/session-listener-bag.js +1 -39
- package/dist/main/ipc/session.d.ts +4 -1
- package/dist/main/ipc/session.js +26 -26
- package/dist/main/ipc/settings.d.ts +4 -1
- package/dist/main/ipc/settings.js +17 -19
- package/dist/main/ipc/simulator-module.d.ts +9 -3
- package/dist/main/ipc/simulator-module.js +13 -10
- package/dist/main/ipc/simulator.d.ts +4 -1
- package/dist/main/ipc/simulator.js +12 -18
- package/dist/main/ipc/tooltip.d.ts +14 -0
- package/dist/main/ipc/tooltip.js +29 -0
- package/dist/main/ipc/views.d.ts +19 -2
- package/dist/main/ipc/views.js +76 -8
- package/dist/main/runtime/devtools-backend-before-quit.harness.d.ts +43 -0
- package/dist/main/runtime/devtools-backend-before-quit.harness.js +87 -0
- package/dist/main/runtime/devtools-backend.js +60 -4
- package/dist/main/runtime/devtools-runtime-mock.harness.d.ts +21 -0
- package/dist/main/runtime/devtools-runtime-mock.harness.js +313 -0
- package/dist/main/runtime/miniapp-runtime.d.ts +91 -22
- package/dist/main/services/app-services.d.ts +62 -0
- package/dist/main/services/app-services.js +64 -0
- package/dist/main/services/automation/connection-target.d.ts +36 -0
- package/dist/main/services/automation/connection-target.js +29 -0
- package/dist/main/services/automation/console-bridge.d.ts +28 -0
- package/dist/main/services/automation/console-bridge.js +91 -0
- package/dist/main/services/automation/handlers/app.js +4 -4
- package/dist/main/services/automation/handlers/element.js +55 -21
- package/dist/main/services/automation/index.d.ts +12 -1
- package/dist/main/services/automation/index.js +54 -133
- package/dist/main/services/cdp-session/index.d.ts +87 -0
- package/dist/main/services/cdp-session/index.js +173 -0
- package/dist/main/services/compile-standby.js +4 -0
- package/dist/main/services/console-forward/cdp-inject.d.ts +18 -0
- package/dist/main/services/console-forward/cdp-inject.js +30 -0
- package/dist/main/services/console-forward/global-console-mirror.d.ts +33 -0
- package/dist/main/services/console-forward/global-console-mirror.js +71 -0
- package/dist/main/services/console-forward/global-diagnostics-mirror.d.ts +33 -0
- package/dist/main/services/console-forward/global-diagnostics-mirror.js +73 -0
- package/dist/main/services/console-forward/index.d.ts +1 -46
- package/dist/main/services/console-forward/index.js +1 -185
- package/dist/main/services/console-forward/internal-log.d.ts +2 -0
- package/dist/main/services/console-forward/internal-log.js +2 -0
- package/dist/main/services/console-forward/open-gated-relay.d.ts +67 -0
- package/dist/main/services/console-forward/open-gated-relay.js +55 -0
- package/dist/main/services/default-adapter.js +1 -1
- package/dist/main/services/diagnostics/index.d.ts +1 -48
- package/dist/main/services/diagnostics/index.js +1 -60
- package/dist/main/services/dimina-resource-server.d.ts +1 -6
- package/dist/main/services/dimina-resource-server.js +1 -98
- package/dist/main/services/elements-forward/index.d.ts +132 -15
- package/dist/main/services/elements-forward/index.js +155 -304
- package/dist/main/services/fs-bridge-protocol.d.ts +61 -0
- package/dist/main/services/fs-bridge-protocol.js +34 -0
- package/dist/main/services/fs-watch-sse.d.ts +40 -0
- package/dist/main/services/fs-watch-sse.js +113 -0
- package/dist/main/services/http-json.d.ts +9 -0
- package/dist/main/services/http-json.js +6 -0
- package/dist/main/services/layout/index.d.ts +11 -0
- package/dist/main/services/layout/index.js +23 -0
- package/dist/main/services/mcp/connection-owner.d.ts +38 -0
- package/dist/main/services/mcp/connection-owner.js +79 -0
- package/dist/main/services/mcp/index.d.ts +3 -1
- package/dist/main/services/mcp/index.js +4 -3
- package/dist/main/services/mcp/opened-project.d.ts +88 -0
- package/dist/main/services/mcp/opened-project.js +60 -0
- package/dist/main/services/mcp/server.d.ts +2 -1
- package/dist/main/services/mcp/server.js +29 -4
- package/dist/main/services/mcp/target-manager.d.ts +71 -23
- package/dist/main/services/mcp/target-manager.js +269 -138
- package/dist/main/services/mcp/target-selection.d.ts +47 -0
- package/dist/main/services/mcp/target-selection.js +71 -0
- package/dist/main/services/mcp/tools/context-tools.js +20 -5
- package/dist/main/services/mcp/tools/project-tools.d.ts +72 -0
- package/dist/main/services/mcp/tools/project-tools.js +133 -0
- package/dist/main/services/module.d.ts +13 -5
- package/dist/main/services/network-forward/body-cache.d.ts +72 -0
- package/dist/main/services/network-forward/body-cache.js +179 -0
- package/dist/main/services/network-forward/frontend-dispatch.d.ts +91 -0
- package/dist/main/services/network-forward/frontend-dispatch.js +148 -0
- package/dist/main/services/network-forward/global-body-gate.d.ts +46 -0
- package/dist/main/services/network-forward/global-body-gate.js +93 -0
- package/dist/main/services/network-forward/global-mirror-test-fixtures.d.ts +48 -0
- package/dist/main/services/network-forward/global-mirror-test-fixtures.js +96 -0
- package/dist/main/services/network-forward/http.d.ts +47 -0
- package/dist/main/services/network-forward/http.js +162 -0
- package/dist/main/services/network-forward/index.d.ts +135 -15
- package/dist/main/services/network-forward/index.js +854 -224
- package/dist/main/services/network-forward/request-ids.d.ts +5 -0
- package/dist/main/services/network-forward/request-ids.js +5 -0
- package/dist/main/services/network-forward/user-facing.d.ts +21 -0
- package/dist/main/services/network-forward/user-facing.js +50 -0
- package/dist/main/services/network-forward/websocket.d.ts +36 -0
- package/dist/main/services/network-forward/websocket.js +120 -0
- package/dist/main/services/notifications/renderer-notifier.d.ts +71 -9
- package/dist/main/services/notifications/renderer-notifier.js +45 -8
- package/dist/main/services/projects/create-project-service.js +19 -5
- package/dist/main/services/projects/local-provider.js +8 -4
- package/dist/main/services/projects/project-repository.d.ts +59 -7
- package/dist/main/services/projects/project-repository.js +285 -51
- package/dist/main/services/projects/types.d.ts +44 -34
- package/dist/main/services/render-inspect/index.d.ts +12 -2
- package/dist/main/services/render-inspect/index.js +21 -102
- package/dist/main/services/safe-area/index.d.ts +21 -6
- package/dist/main/services/safe-area/index.js +92 -46
- package/dist/main/services/service-host-pool/pool.d.ts +1 -196
- package/dist/main/services/service-host-pool/pool.js +1 -363
- package/dist/main/services/settings/index.d.ts +7 -1
- package/dist/main/services/settings/index.js +22 -2
- package/dist/main/services/simulator/custom-apis.d.ts +1 -42
- package/dist/main/services/simulator/custom-apis.js +1 -46
- package/dist/main/services/simulator/referer.d.ts +1 -9
- package/dist/main/services/simulator/referer.js +1 -19
- package/dist/main/services/simulator/ui-extensions.d.ts +21 -0
- package/dist/main/services/simulator/ui-extensions.js +176 -0
- package/dist/main/services/simulator-appdata/index.d.ts +6 -0
- package/dist/main/services/simulator-appdata/index.js +21 -2
- package/dist/main/services/simulator-current-page/index.d.ts +5 -3
- package/dist/main/services/simulator-current-page/index.js +8 -1
- package/dist/main/services/simulator-storage/index.d.ts +34 -5
- package/dist/main/services/simulator-storage/index.js +73 -71
- package/dist/main/services/simulator-storage/service-storage-ops.d.ts +1 -39
- package/dist/main/services/simulator-storage/service-storage-ops.js +1 -66
- package/dist/main/services/simulator-storage/window-scope.d.ts +20 -0
- package/dist/main/services/simulator-storage/window-scope.js +20 -0
- package/dist/main/services/simulator-temp-files/disk.d.ts +1 -54
- package/dist/main/services/simulator-temp-files/disk.js +1 -237
- package/dist/main/services/simulator-temp-files/fs-channels.d.ts +1 -68
- package/dist/main/services/simulator-temp-files/fs-channels.js +1 -107
- package/dist/main/services/simulator-temp-files/index.d.ts +1 -32
- package/dist/main/services/simulator-temp-files/index.js +1 -181
- package/dist/main/services/simulator-temp-files/request-handler.d.ts +1 -29
- package/dist/main/services/simulator-temp-files/request-handler.js +1 -177
- package/dist/main/services/simulator-temp-files/resolver.d.ts +1 -21
- package/dist/main/services/simulator-temp-files/resolver.js +1 -21
- package/dist/main/services/simulator-temp-files/store.d.ts +1 -13
- package/dist/main/services/simulator-temp-files/store.js +1 -23
- package/dist/main/services/update/github-release-checker.js +22 -3
- package/dist/main/services/update/update-manager.d.ts +21 -4
- package/dist/main/services/update/update-manager.js +55 -11
- package/dist/main/services/views/clear-console-filter.d.ts +44 -0
- package/dist/main/services/views/clear-console-filter.js +86 -0
- package/dist/main/services/views/console-filter-test-fixtures.d.ts +94 -0
- package/dist/main/services/views/console-filter-test-fixtures.js +82 -0
- package/dist/main/services/views/console-filter.d.ts +94 -0
- package/dist/main/services/views/console-filter.js +190 -0
- package/dist/main/services/views/devtools-tabs.d.ts +24 -4
- package/dist/main/services/views/devtools-tabs.js +40 -21
- package/dist/main/services/views/frontend-bootstrap-gate.d.ts +59 -0
- package/dist/main/services/views/frontend-bootstrap-gate.js +117 -0
- package/dist/main/services/views/host-dialog-port-channel.d.ts +18 -0
- package/dist/main/services/views/host-dialog-port-channel.js +15 -0
- package/dist/main/services/views/host-dialog-session-runtime.d.ts +10 -0
- package/dist/main/services/views/host-dialog-session-runtime.js +17 -0
- package/dist/main/services/views/host-dialog-view.d.ts +95 -0
- package/dist/main/services/views/host-dialog-view.js +147 -0
- package/dist/main/services/views/host-sidebar-port-channel.d.ts +18 -0
- package/dist/main/services/views/host-sidebar-port-channel.js +15 -0
- package/dist/main/services/views/host-sidebar-session-runtime.d.ts +10 -0
- package/dist/main/services/views/host-sidebar-session-runtime.js +17 -0
- package/dist/main/services/views/host-sidebar-view.d.ts +59 -0
- package/dist/main/services/views/host-sidebar-view.js +44 -0
- package/dist/main/services/views/host-slot-port-channel.d.ts +124 -0
- package/dist/main/services/views/host-slot-port-channel.js +289 -0
- package/dist/main/services/views/host-slot-session-runtime.d.ts +40 -0
- package/dist/main/services/views/host-slot-session-runtime.js +50 -0
- package/dist/main/services/views/host-slot-view.d.ts +109 -0
- package/dist/main/services/views/host-slot-view.js +147 -0
- package/dist/main/services/views/host-toolbar-port-channel.d.ts +6 -91
- package/dist/main/services/views/host-toolbar-port-channel.js +10 -243
- package/dist/main/services/views/host-toolbar-session-runtime.d.ts +5 -30
- package/dist/main/services/views/host-toolbar-session-runtime.js +9 -47
- package/dist/main/services/views/host-toolbar-view.d.ts +34 -7
- package/dist/main/services/views/host-toolbar-view.js +30 -237
- package/dist/main/services/views/managed-web-contents-view.d.ts +48 -0
- package/dist/main/services/views/managed-web-contents-view.js +143 -0
- package/dist/main/services/views/miniapp-partition.d.ts +1 -89
- package/dist/main/services/views/miniapp-partition.js +1 -158
- package/dist/main/services/views/native-simulator-devtools-host.js +206 -68
- package/dist/main/services/views/native-simulator-view.d.ts +6 -0
- package/dist/main/services/views/native-simulator-view.js +47 -40
- package/dist/main/services/views/native-view-tree.d.ts +25 -0
- package/dist/main/services/views/native-view-tree.js +69 -0
- package/dist/main/services/views/overlay-panels-view.d.ts +63 -4
- package/dist/main/services/views/overlay-panels-view.js +257 -108
- package/dist/main/services/views/placement-reconciler.d.ts +18 -18
- package/dist/main/services/views/placement-reconciler.js +91 -29
- package/dist/main/services/views/placement-test-driver.d.ts +27 -0
- package/dist/main/services/views/placement-test-driver.js +29 -0
- package/dist/main/services/views/refresh-styles.d.ts +10 -0
- package/dist/main/services/views/refresh-styles.js +57 -0
- package/dist/main/services/views/simulator-session-policy.d.ts +1 -27
- package/dist/main/services/views/simulator-session-policy.js +1 -98
- package/dist/main/services/views/view-manager-devtools-host-test-fixtures.d.ts +76 -0
- package/dist/main/services/views/view-manager-devtools-host-test-fixtures.js +184 -0
- package/dist/main/services/views/view-manager.d.ts +69 -88
- package/dist/main/services/views/view-manager.js +62 -7
- package/dist/main/services/views/workbench-view.d.ts +2 -0
- package/dist/main/services/views/workbench-view.js +104 -17
- package/dist/main/services/window-contexts/context-router.d.ts +36 -0
- package/dist/main/services/window-contexts/context-router.js +55 -0
- package/dist/main/services/workbench-coi-host.d.ts +52 -0
- package/dist/main/services/workbench-coi-host.js +227 -0
- package/dist/main/services/workbench-coi-server.d.ts +11 -0
- package/dist/main/services/workbench-coi-server.js +126 -126
- package/dist/main/services/workbench-coi-shutdown.d.ts +40 -0
- package/dist/main/services/workbench-coi-shutdown.js +69 -0
- package/dist/main/services/workbench-coi-static.d.ts +23 -0
- package/dist/main/services/workbench-coi-static.js +87 -0
- package/dist/main/services/workbench-context.d.ts +88 -8
- package/dist/main/services/workbench-context.js +54 -6
- package/dist/main/services/workspace/compile-log-buffer.d.ts +40 -0
- package/dist/main/services/workspace/compile-log-buffer.js +41 -0
- package/dist/main/services/workspace/compile-mode-adapter.d.ts +18 -0
- package/dist/main/services/workspace/compile-mode-adapter.js +57 -0
- package/dist/main/services/workspace/compile-mode-store.d.ts +25 -0
- package/dist/main/services/workspace/compile-mode-store.js +71 -0
- package/dist/main/services/workspace/open-project-guards.d.ts +16 -0
- package/dist/main/services/workspace/open-project-guards.js +42 -0
- package/dist/main/services/workspace/rebuild-status.d.ts +37 -0
- package/dist/main/services/workspace/rebuild-status.js +36 -0
- package/dist/main/services/workspace/session-status-store.d.ts +47 -0
- package/dist/main/services/workspace/session-status-store.js +73 -0
- package/dist/main/services/workspace/status-tap.d.ts +20 -0
- package/dist/main/services/workspace/status-tap.js +32 -0
- package/dist/main/services/workspace/workspace-compile-modes.d.ts +59 -0
- package/dist/main/services/workspace/workspace-compile-modes.js +93 -0
- package/dist/main/services/workspace/workspace-lifecycle-race.testutil.d.ts +22 -0
- package/dist/main/services/workspace/workspace-lifecycle-race.testutil.js +62 -0
- package/dist/main/services/workspace/workspace-referer.d.ts +17 -0
- package/dist/main/services/workspace/workspace-referer.js +26 -0
- package/dist/main/services/workspace/workspace-service.d.ts +7 -5
- package/dist/main/services/workspace/workspace-service.js +96 -135
- package/dist/main/services/workspace/workspace-thumbnails.d.ts +22 -0
- package/dist/main/services/workspace/workspace-thumbnails.js +67 -0
- package/dist/main/utils/ipc-context-source.d.ts +40 -0
- package/dist/main/utils/ipc-context-source.js +23 -0
- package/dist/main/utils/ipc-registry.d.ts +46 -21
- package/dist/main/utils/ipc-registry.js +166 -76
- package/dist/main/utils/paths.d.ts +18 -0
- package/dist/main/utils/paths.js +18 -0
- package/dist/main/utils/sender-policy.d.ts +10 -1
- package/dist/main/utils/sender-policy.js +42 -4
- package/dist/main/utils/theme.d.ts +18 -8
- package/dist/main/utils/theme.js +19 -9
- package/dist/main/windows/internal-devtools-window/index.d.ts +66 -0
- package/dist/main/windows/internal-devtools-window/index.js +160 -0
- package/dist/main/windows/main-window/create.d.ts +16 -0
- package/dist/main/windows/main-window/create.js +19 -11
- package/dist/main/windows/main-window/events.d.ts +1 -1
- package/dist/main/windows/main-window/events.js +26 -13
- package/dist/main/windows/main-window/index.d.ts +1 -1
- package/dist/main/windows/main-window/index.js +1 -1
- package/dist/main/windows/service-host-window/create.d.ts +1 -92
- package/dist/main/windows/service-host-window/create.js +1 -154
- package/dist/native-host/common/common.js +173 -53
- package/dist/native-host/container/pageFrame.css +1 -1
- package/dist/native-host/render/render.js +8278 -3659
- package/dist/native-host/service/service.js +2 -2
- package/dist/preload/index.d.ts +2 -0
- package/dist/preload/index.js +1 -0
- package/dist/preload/instrumentation/app-data.d.ts +2 -2
- package/dist/preload/instrumentation/app-data.js +1 -1
- package/dist/preload/instrumentation/wxml.js +1 -1
- package/dist/preload/runtime/bridge.d.ts +3 -3
- package/dist/preload/runtime/bridge.js +2 -2
- package/dist/preload/runtime/clipboard.d.ts +6 -0
- package/dist/preload/runtime/clipboard.js +12 -0
- package/dist/preload/runtime/host-dialog-advertiser.d.ts +22 -0
- package/dist/preload/runtime/host-dialog-advertiser.js +37 -0
- package/dist/preload/runtime/host-dialog-port.d.ts +44 -0
- package/dist/preload/runtime/host-dialog-port.js +53 -0
- package/dist/preload/runtime/host-dialog-runtime.d.ts +28 -0
- package/dist/preload/runtime/host-dialog-runtime.js +36 -0
- package/dist/preload/runtime/host-sidebar-advertiser.d.ts +19 -0
- package/dist/preload/runtime/host-sidebar-advertiser.js +35 -0
- package/dist/preload/runtime/host-sidebar-port.d.ts +44 -0
- package/dist/preload/runtime/host-sidebar-port.js +53 -0
- package/dist/preload/runtime/host-sidebar-runtime.d.ts +28 -0
- package/dist/preload/runtime/host-sidebar-runtime.js +36 -0
- package/dist/preload/runtime/host-slot-port-bridge.d.ts +18 -0
- package/dist/preload/runtime/host-slot-port-bridge.js +112 -0
- package/dist/preload/runtime/host-toolbar-advertiser.d.ts +5 -13
- package/dist/preload/runtime/host-toolbar-advertiser.js +18 -38
- package/dist/preload/runtime/host-toolbar-port.d.ts +9 -0
- package/dist/preload/runtime/host-toolbar-port.js +11 -95
- package/dist/preload/runtime/native-host.d.ts +14 -0
- package/dist/preload/runtime/native-host.js +5 -8
- package/dist/preload/runtime/node-bindings.d.ts +18 -0
- package/dist/preload/runtime/node-bindings.js +44 -0
- package/dist/preload/runtime/temp-files.js +9 -2
- package/dist/preload/runtime/wait-for-slot-root.d.ts +23 -0
- package/dist/preload/runtime/wait-for-slot-root.js +80 -0
- package/dist/preload/shared/api-compat.js +63 -41
- package/dist/preload/windows/host-dialog-runtime.cjs +360 -0
- package/dist/preload/windows/host-dialog-runtime.cjs.map +7 -0
- package/dist/preload/windows/host-dialog-runtime.d.ts +2 -0
- package/dist/preload/windows/host-dialog-runtime.js +13 -0
- package/dist/preload/windows/host-sidebar-runtime.cjs +361 -0
- package/dist/preload/windows/host-sidebar-runtime.cjs.map +7 -0
- package/dist/preload/windows/host-sidebar-runtime.d.ts +2 -0
- package/dist/preload/windows/host-sidebar-runtime.js +13 -0
- package/dist/preload/windows/host-toolbar-runtime.cjs +142 -52
- package/dist/preload/windows/host-toolbar-runtime.cjs.map +3 -3
- package/dist/preload/windows/main.cjs +4922 -1246
- package/dist/preload/windows/main.cjs.map +4 -4
- package/dist/preload/windows/main.css +428 -0
- package/dist/preload/windows/main.css.map +7 -0
- package/dist/preload/windows/simulator.cjs +376 -322
- package/dist/preload/windows/simulator.cjs.map +4 -4
- package/dist/preload/windows/simulator.js +376 -322
- package/dist/render-host/pageFrame.html +4 -4
- package/dist/render-host/preload.cjs +30 -0
- package/dist/render-host/render-inspect.js +184 -115
- package/dist/renderer/assets/button-CB2MWjHY.js +2 -0
- package/dist/renderer/assets/constants-CkoGPQTS.js +2 -0
- package/dist/renderer/assets/constants-zQZ2-y21.js +2 -0
- package/dist/renderer/assets/createLucideIcon-cZ9FlZZw.js +2 -0
- package/dist/renderer/assets/devicePicker-H2eIO4e1.js +2 -0
- package/dist/renderer/assets/dialog-pHzEA8Vx.js +46 -0
- package/dist/renderer/assets/dist-B5HADirS.js +2 -0
- package/dist/renderer/assets/dist-DIFlRMKe.js +2 -0
- package/dist/renderer/assets/hostSidebarDefault-DRWh6OCt.js +2 -0
- package/dist/renderer/assets/index-CEL_XFge.js +2 -0
- package/dist/renderer/assets/input-CAObw95L.js +2 -0
- package/dist/renderer/assets/ipc-channels-overlays-gIPUFnqc.js +2 -0
- package/dist/renderer/assets/jsx-runtime-DICEQH_0.css +1 -0
- package/dist/renderer/assets/jsx-runtime-DIw5wnYl.js +9 -0
- package/dist/renderer/assets/plus-BQ9u5EbL.js +2 -0
- package/dist/renderer/assets/popover-Cw7G2Ctp.js +2 -0
- package/dist/renderer/assets/presets-DMZOb9ay.js +2 -0
- package/dist/renderer/assets/project-api-YTOr_Yvo.js +2 -0
- package/dist/renderer/assets/projectCreateDialog-BmLqiYxn.js +2 -0
- package/dist/renderer/assets/search-BMvuYF48.js +2 -0
- package/dist/renderer/assets/select-nFP95TxM.js +2 -0
- package/dist/renderer/assets/settings-CnpVfSWt.js +2 -0
- package/dist/renderer/assets/settings-api-Ccsf-Nsj.js +2 -0
- package/dist/renderer/assets/settings-tab-bar-CAzrv32m.js +2 -0
- package/dist/renderer/assets/smartphone-Bb2GdIKy.js +2 -0
- package/dist/renderer/assets/tabs-CPKN3Mmq.js +2 -0
- package/dist/renderer/assets/tooltip-D6AxXRk5.js +2 -0
- package/dist/renderer/assets/types-Bh0hA7El.js +2 -0
- package/dist/renderer/assets/updateDialog-CwndJ0Bl.js +2 -0
- package/dist/renderer/assets/utils-sEB5OZEQ.js +2 -0
- package/dist/renderer/assets/view-api-B-2zPBR5.js +2 -0
- package/dist/renderer/assets/view-ids-BfaDVV5P.js +2 -0
- package/dist/renderer/assets/workbench-C0Jkdlps.js +5 -0
- package/dist/renderer/assets/workbenchSettings-YD0Ctbm_.js +8 -0
- package/dist/renderer/entries/device-picker/index.html +28 -0
- package/dist/renderer/entries/host-sidebar-default/index.html +22 -0
- package/dist/renderer/entries/main/index.html +16 -7
- package/dist/renderer/entries/popover/index.html +16 -6
- package/dist/renderer/entries/project-create-dialog/index.html +27 -0
- package/dist/renderer/entries/settings/index.html +10 -5
- package/dist/renderer/entries/tooltip/index.html +21 -0
- package/dist/renderer/entries/update-dialog/index.html +25 -0
- package/dist/renderer/entries/workbench/index.html +49 -0
- package/dist/renderer/entries/workbench-settings/index.html +12 -5
- package/dist/service-host/appdata-set-data.cjs +39 -0
- package/dist/service-host/host-env-update.cjs +23 -0
- package/dist/service-host/preload.cjs +54 -48
- package/dist/service-host/service-message-queue.cjs +71 -0
- package/dist/service-host/sync-impls/menu-button-geometry.js +16 -5
- package/dist/service-host/sync-impls/menu-button.js +5 -3
- package/dist/service-host/sync-impls/system-info.js +31 -9
- package/dist/shared/bridge-channels.d.ts +1 -416
- package/dist/shared/bridge-channels.js +1 -89
- package/dist/shared/compile-mode-state.d.ts +73 -0
- package/dist/shared/compile-mode-state.js +100 -0
- package/dist/shared/compile-modes.d.ts +152 -0
- package/dist/shared/compile-modes.js +237 -0
- package/dist/shared/constants.d.ts +22 -0
- package/dist/shared/constants.js +22 -0
- package/dist/shared/dmb-resource-url.d.ts +2 -0
- package/dist/shared/dmb-resource-url.js +2 -0
- package/dist/shared/ipc-channels-overlays.d.ts +162 -0
- package/dist/shared/ipc-channels-overlays.js +203 -0
- package/dist/shared/ipc-channels.d.ts +24 -154
- package/dist/shared/ipc-channels.js +48 -96
- package/dist/shared/ipc-schemas.d.ts +143 -54
- package/dist/shared/ipc-schemas.js +137 -45
- package/dist/shared/node-bindings.d.ts +2 -0
- package/dist/shared/node-bindings.js +2 -0
- package/dist/shared/project-window-types.d.ts +42 -0
- package/dist/shared/project-window-types.js +2 -0
- package/dist/shared/simulator-route.d.ts +8 -0
- package/dist/shared/simulator-route.js +15 -0
- package/dist/shared/simulator-ui.d.ts +61 -0
- package/dist/shared/simulator-ui.js +12 -0
- package/dist/shared/types.d.ts +126 -41
- package/dist/shared/view-ids.d.ts +10 -0
- package/dist/shared/view-ids.js +23 -0
- package/dist/simulator/assets/bridge-channels-B3JAmRfl.js +2 -0
- package/dist/simulator/assets/device-shell-ATEhHV2_.css +1 -0
- package/dist/simulator/assets/device-shell-DucLepkm.js +431 -0
- package/dist/simulator/assets/simulator-B4rbcOVt.js +10 -0
- package/dist/simulator/assets/simulator-mini-app-DFo7fhi5.js +2 -0
- package/dist/simulator/assets/simulator-ui-BupATgKo.css +1 -0
- package/dist/simulator/assets/simulator-ui-i3GCc7YJ.js +2 -0
- package/dist/simulator/simulator.html +4 -3
- package/dist/simulator/temp-files.d.ts +35 -0
- package/dist/simulator/temp-files.js +121 -0
- package/dist/simulator/types.d.ts +50 -0
- package/dist/simulator/types.js +2 -0
- package/dist/vscode-workbench/assets/__vite-browser-external-JIkWewFf.js +1 -0
- package/dist/vscode-workbench/assets/{dist-TpGpmMGi.js → dist-CXG-u1VB.js} +3 -3
- package/dist/vscode-workbench/assets/fs-core-worker-urls-DZ1nod84.js +1 -0
- package/dist/vscode-workbench/assets/fs-core.worker-Bnmpp6fo.js +1 -0
- package/dist/vscode-workbench/assets/fs-query.worker-cZ-7Fjch.js +2 -0
- package/dist/vscode-workbench/assets/{iconv-lite-umd-C9tiCAJa.js → iconv-lite-umd-Dxx9Qyb4.js} +1 -1
- package/dist/vscode-workbench/assets/{index-DJ1HyMZ7.js → index-6VJMsaWj.js} +475 -475
- package/dist/vscode-workbench/assets/{jschardet-DE1jV513.js → jschardet-Ba3D16vt.js} +1 -1
- package/dist/vscode-workbench/index.html +21 -1
- package/package.json +23 -13
- package/dist/main/services/views/destroy-child-view.d.ts +0 -9
- package/dist/main/services/views/destroy-child-view.js +0 -23
- package/dist/preload/instrumentation/wxml-extract.d.ts +0 -11
- package/dist/preload/instrumentation/wxml-extract.js +0 -382
- package/dist/preload/shared/sid-registry.d.ts +0 -11
- package/dist/preload/shared/sid-registry.js +0 -38
- package/dist/renderer/assets/constants-EAMiwL9_.js +0 -2
- package/dist/renderer/assets/index-BMqyDx71.js +0 -49
- package/dist/renderer/assets/input-CDAEwpBO.js +0 -2
- package/dist/renderer/assets/ipc-transport-B7eFOR68.css +0 -1
- package/dist/renderer/assets/ipc-transport-_G1k5V1p.js +0 -9
- package/dist/renderer/assets/popover-DEdjK14m.js +0 -2
- package/dist/renderer/assets/select-DpKPCh3y.js +0 -2
- package/dist/renderer/assets/settings-M5q2elUr.js +0 -2
- package/dist/renderer/assets/settings-api-CDlZoHiO.js +0 -2
- package/dist/renderer/assets/workbenchSettings-CT_H1WhV.js +0 -8
- package/dist/shared/appdata-accumulator.d.ts +0 -95
- package/dist/shared/appdata-accumulator.js +0 -218
- package/dist/shared/request-core.d.ts +0 -84
- package/dist/shared/request-core.js +0 -168
- package/dist/shared/simulator-api-metadata.d.ts +0 -26
- package/dist/shared/simulator-api-metadata.js +0 -59
- package/dist/shared/vpath.d.ts +0 -42
- package/dist/shared/vpath.js +0 -105
- package/dist/simulator/assets/bridge-channels-zhsumfky.js +0 -2
- package/dist/simulator/assets/device-shell-C-wcFq3Z.js +0 -2
- package/dist/simulator/assets/device-shell-CS1rqAQz.css +0 -1
- package/dist/simulator/assets/jsx-runtime-BDTY6fEq.js +0 -2
- package/dist/simulator/assets/simulator-DU3-fS3v.js +0 -10
- package/dist/simulator/assets/simulator-mini-app-DzfMfnVM.js +0 -2
- package/dist/simulator/device-shell/menu-button-geometry.js +0 -8
- package/dist/vscode-workbench/assets/__vite-browser-external-CXi6Kz9W.js +0 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `/__fs` bridge's wire shapes, declared once for the producing side.
|
|
3
|
+
*
|
|
4
|
+
* Every shape here is consumed by browser code in `packages/workbench`
|
|
5
|
+
* (`fs-bridge.ts`'s `FsEntry`, `wal-audit-transport.ts`'s SSE message parse,
|
|
6
|
+
* and through them `@dimina-kit/fs-core/sync/watch-expander`'s stat-diffing).
|
|
7
|
+
* That side cannot import from here — devtools is the application, the
|
|
8
|
+
* workbench is a library it embeds, and the dependency runs one way only. So
|
|
9
|
+
* this module does not give the two ends a shared declaration; it gives the
|
|
10
|
+
* PRODUCING end exactly one, instead of hand-building untyped payloads at each
|
|
11
|
+
* call site. The two ends stay pinned to each other by the round-trip
|
|
12
|
+
* assertions in workbench-coi-server.test.ts and by disk-sync.spec.ts.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* The `type` field of every readdir/stat payload. These are wire values, not
|
|
16
|
+
* an internal enum: the browser side compares the raw numbers (watch-expander
|
|
17
|
+
* treats `2` as "recurse into it"), so renumbering them breaks the editor's
|
|
18
|
+
* disk mirror.
|
|
19
|
+
*/
|
|
20
|
+
export declare const FS_TYPE_FILE = 1;
|
|
21
|
+
export declare const FS_TYPE_DIR = 2;
|
|
22
|
+
/**
|
|
23
|
+
* One `/__fs/readdir` entry: `[name, type]` for a directory, `[name, type,
|
|
24
|
+
* size, mtimeMs]` for a file. The trailing stats let the sync engine tell a
|
|
25
|
+
* stat-unchanged survivor from an actually-modified file without re-reading
|
|
26
|
+
* its content. A file entry that raced a concurrent delete between readdir and
|
|
27
|
+
* stat has no stats to send and is TRUNCATED to `[name, 1]` rather than padded
|
|
28
|
+
* with the two values: a JSON array cannot hold a hole, so passing them
|
|
29
|
+
* through as `undefined` would put `null` on the wire, which neither the
|
|
30
|
+
* client's `size?: number` type nor any of the comments describing this format
|
|
31
|
+
* admit. Either way the client's `?? NaN` fallback treats the entry as
|
|
32
|
+
* "always changed"; truncating is what keeps the wire and the types honest.
|
|
33
|
+
*/
|
|
34
|
+
export type FsBridgeEntry = [name: string, type: number, size?: number, mtimeMs?: number];
|
|
35
|
+
/** The `/__fs/stat` payload. Its `mtime` carries the same value readdir sends
|
|
36
|
+
* as `mtimeMs` — the two endpoints named it differently and no client reads
|
|
37
|
+
* this one, so the names are left as shipped rather than changed blind. */
|
|
38
|
+
export interface FsBridgeStat {
|
|
39
|
+
type: number;
|
|
40
|
+
size: number;
|
|
41
|
+
ctime: number;
|
|
42
|
+
mtime: number;
|
|
43
|
+
}
|
|
44
|
+
/** One `/__fs/watch` SSE message: a batch of changed project-relative paths,
|
|
45
|
+
* or the terminal notice that the watcher is gone and the client must fall
|
|
46
|
+
* back to a full rescan. */
|
|
47
|
+
export type FsWatchMessage = {
|
|
48
|
+
paths: string[];
|
|
49
|
+
} | {
|
|
50
|
+
watcherDead: true;
|
|
51
|
+
};
|
|
52
|
+
/** Serialize one SSE message into an `event-stream` frame. */
|
|
53
|
+
export declare function fsWatchFrame(message: FsWatchMessage): string;
|
|
54
|
+
/** Project one `readdirWithin` entry onto the readdir wire shape. */
|
|
55
|
+
export declare function toFsBridgeEntry(entry: {
|
|
56
|
+
name: string;
|
|
57
|
+
isDirectory: boolean;
|
|
58
|
+
size?: number;
|
|
59
|
+
mtimeMs?: number;
|
|
60
|
+
}): FsBridgeEntry;
|
|
61
|
+
//# sourceMappingURL=fs-bridge-protocol.d.ts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `/__fs` bridge's wire shapes, declared once for the producing side.
|
|
3
|
+
*
|
|
4
|
+
* Every shape here is consumed by browser code in `packages/workbench`
|
|
5
|
+
* (`fs-bridge.ts`'s `FsEntry`, `wal-audit-transport.ts`'s SSE message parse,
|
|
6
|
+
* and through them `@dimina-kit/fs-core/sync/watch-expander`'s stat-diffing).
|
|
7
|
+
* That side cannot import from here — devtools is the application, the
|
|
8
|
+
* workbench is a library it embeds, and the dependency runs one way only. So
|
|
9
|
+
* this module does not give the two ends a shared declaration; it gives the
|
|
10
|
+
* PRODUCING end exactly one, instead of hand-building untyped payloads at each
|
|
11
|
+
* call site. The two ends stay pinned to each other by the round-trip
|
|
12
|
+
* assertions in workbench-coi-server.test.ts and by disk-sync.spec.ts.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* The `type` field of every readdir/stat payload. These are wire values, not
|
|
16
|
+
* an internal enum: the browser side compares the raw numbers (watch-expander
|
|
17
|
+
* treats `2` as "recurse into it"), so renumbering them breaks the editor's
|
|
18
|
+
* disk mirror.
|
|
19
|
+
*/
|
|
20
|
+
export const FS_TYPE_FILE = 1;
|
|
21
|
+
export const FS_TYPE_DIR = 2;
|
|
22
|
+
/** Serialize one SSE message into an `event-stream` frame. */
|
|
23
|
+
export function fsWatchFrame(message) {
|
|
24
|
+
return `data: ${JSON.stringify(message)}\n\n`;
|
|
25
|
+
}
|
|
26
|
+
/** Project one `readdirWithin` entry onto the readdir wire shape. */
|
|
27
|
+
export function toFsBridgeEntry(entry) {
|
|
28
|
+
if (entry.isDirectory)
|
|
29
|
+
return [entry.name, FS_TYPE_DIR];
|
|
30
|
+
if (entry.size === undefined || entry.mtimeMs === undefined)
|
|
31
|
+
return [entry.name, FS_TYPE_FILE];
|
|
32
|
+
return [entry.name, FS_TYPE_FILE, entry.size, entry.mtimeMs];
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=fs-bridge-protocol.js.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `GET /__fs/watch`: SSE stream of the active project root's disk changes, for
|
|
3
|
+
* the editor's memfs↔disk sync engine (devtools-fs-core-feasibility.md §7).
|
|
4
|
+
* Read-only — it adds no write surface, which is why workbench-coi-server.ts
|
|
5
|
+
* dispatches it before (and outside) the mutating-action guard of the generic
|
|
6
|
+
* `/__fs/*` handler. Split into its own module purely to keep each file within
|
|
7
|
+
* the repo size gate; the COI server is its only consumer.
|
|
8
|
+
*
|
|
9
|
+
* One `fs.watch(root, {recursive:true})` per connection (darwin supports
|
|
10
|
+
* `recursive`), changes batched over an 80ms window and pushed as
|
|
11
|
+
* `data: {"paths":["rel", ...]}` with POSIX-separated root-relative paths.
|
|
12
|
+
* `getProjectRoot` (not a resolved string) is threaded through so a project
|
|
13
|
+
* close/switch mid-stream is detected by re-polling the SAME source
|
|
14
|
+
* `handleFsRequest` uses — no separate close event is invented. Watcher errors
|
|
15
|
+
* (e.g. EMFILE) push `data: {"watcherDead":true}` then end the stream; no
|
|
16
|
+
* active project at connect time is a 409, matching the ENOACTIVE semantics of
|
|
17
|
+
* every other `/__fs` action.
|
|
18
|
+
*/
|
|
19
|
+
import type http from 'node:http';
|
|
20
|
+
/** `false` for build/vcs/dependency churn, the empty string, and any path that
|
|
21
|
+
* (defensively — `fs.watch`'s filename is always root-relative) escapes the root.
|
|
22
|
+
* Matches SKIP_DIRS as a path SEGMENT at any depth — the same set `/__fs/readdir`
|
|
23
|
+
* omits, so the watcher never reports paths the editor mirror cannot see (a
|
|
24
|
+
* prefix match would let `packages/x/node_modules/...` through). The one
|
|
25
|
+
* accepted edge: a plain FILE named exactly like a skip dir (e.g. `dist`)
|
|
26
|
+
* is also unreported, though readdir would list it. */
|
|
27
|
+
declare function shouldReportWatchPath(rel: string): boolean;
|
|
28
|
+
export declare const __testing: {
|
|
29
|
+
shouldReportWatchPath: typeof shouldReportWatchPath;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Returns the call that ends this stream from the server side, or `null` when
|
|
33
|
+
* the request was answered with an error instead of a stream. Nothing else can
|
|
34
|
+
* end it: the client is the only party that ever disconnects, so the server
|
|
35
|
+
* that outlives the request needs a handle to close the channel when IT is the
|
|
36
|
+
* one going away.
|
|
37
|
+
*/
|
|
38
|
+
export declare function handleFsWatchRequest(req: http.IncomingMessage, res: http.ServerResponse, getProjectRoot: () => string): (() => void) | null;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=fs-watch-sse.d.ts.map
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import nodeFs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { SKIP_DIRS } from '../ipc/project-fs.js';
|
|
4
|
+
import { fsWatchFrame } from './fs-bridge-protocol.js';
|
|
5
|
+
import { jsonRes } from './http-json.js';
|
|
6
|
+
/** Debounce window for batching change notifications (ms). */
|
|
7
|
+
const WATCH_DEBOUNCE_MS = 80;
|
|
8
|
+
/** `false` for build/vcs/dependency churn, the empty string, and any path that
|
|
9
|
+
* (defensively — `fs.watch`'s filename is always root-relative) escapes the root.
|
|
10
|
+
* Matches SKIP_DIRS as a path SEGMENT at any depth — the same set `/__fs/readdir`
|
|
11
|
+
* omits, so the watcher never reports paths the editor mirror cannot see (a
|
|
12
|
+
* prefix match would let `packages/x/node_modules/...` through). The one
|
|
13
|
+
* accepted edge: a plain FILE named exactly like a skip dir (e.g. `dist`)
|
|
14
|
+
* is also unreported, though readdir would list it. */
|
|
15
|
+
function shouldReportWatchPath(rel) {
|
|
16
|
+
if (rel === '' || rel.startsWith('..') || path.isAbsolute(rel))
|
|
17
|
+
return false;
|
|
18
|
+
return !rel.split('/').some((segment) => SKIP_DIRS.has(segment));
|
|
19
|
+
}
|
|
20
|
+
export const __testing = { shouldReportWatchPath };
|
|
21
|
+
/**
|
|
22
|
+
* Returns the call that ends this stream from the server side, or `null` when
|
|
23
|
+
* the request was answered with an error instead of a stream. Nothing else can
|
|
24
|
+
* end it: the client is the only party that ever disconnects, so the server
|
|
25
|
+
* that outlives the request needs a handle to close the channel when IT is the
|
|
26
|
+
* one going away.
|
|
27
|
+
*/
|
|
28
|
+
export function handleFsWatchRequest(req, res, getProjectRoot) {
|
|
29
|
+
const watchedRoot = getProjectRoot();
|
|
30
|
+
if (!watchedRoot) {
|
|
31
|
+
jsonRes(res, 409, { error: 'No active project', code: 'ENOACTIVE' });
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
let watcher;
|
|
35
|
+
try {
|
|
36
|
+
watcher = nodeFs.watch(watchedRoot, { recursive: true }, onChange);
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
jsonRes(res, 500, { error: String(e) });
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
res.writeHead(200, {
|
|
43
|
+
'Content-Type': 'text/event-stream; charset=utf-8',
|
|
44
|
+
'Cache-Control': 'no-store',
|
|
45
|
+
Connection: 'keep-alive',
|
|
46
|
+
});
|
|
47
|
+
let pending = new Set();
|
|
48
|
+
let debounceTimer = null;
|
|
49
|
+
let liveCheck = null;
|
|
50
|
+
let closed = false;
|
|
51
|
+
function cleanup() {
|
|
52
|
+
if (closed)
|
|
53
|
+
return;
|
|
54
|
+
closed = true;
|
|
55
|
+
if (debounceTimer)
|
|
56
|
+
clearTimeout(debounceTimer);
|
|
57
|
+
if (liveCheck)
|
|
58
|
+
clearInterval(liveCheck);
|
|
59
|
+
watcher.close();
|
|
60
|
+
}
|
|
61
|
+
function flush() {
|
|
62
|
+
if (closed || pending.size === 0)
|
|
63
|
+
return;
|
|
64
|
+
const paths = [...pending];
|
|
65
|
+
pending = new Set();
|
|
66
|
+
res.write(fsWatchFrame({ paths }));
|
|
67
|
+
}
|
|
68
|
+
function onChange(_event, filename) {
|
|
69
|
+
// FSEvents overflow delivers a null filename ("something changed,
|
|
70
|
+
// rescan"). Dropping it loses data; report '.' and let the client's
|
|
71
|
+
// watch-batch expansion (wal-audit.ts) reconcile the whole tree.
|
|
72
|
+
const rel = filename ? filename.toString().split(path.sep).join('/') : '.';
|
|
73
|
+
if (rel !== '.' && !shouldReportWatchPath(rel))
|
|
74
|
+
return;
|
|
75
|
+
pending.add(rel);
|
|
76
|
+
if (!debounceTimer) {
|
|
77
|
+
debounceTimer = setTimeout(() => {
|
|
78
|
+
debounceTimer = null;
|
|
79
|
+
flush();
|
|
80
|
+
}, WATCH_DEBOUNCE_MS);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
watcher.on('error', () => {
|
|
84
|
+
if (closed)
|
|
85
|
+
return;
|
|
86
|
+
res.write(fsWatchFrame({ watcherDead: true }));
|
|
87
|
+
cleanup();
|
|
88
|
+
res.end();
|
|
89
|
+
});
|
|
90
|
+
// The active project root has no dedicated close/switch event to subscribe
|
|
91
|
+
// to; poll the same getter `handleFsRequest` uses, on the debounce cadence,
|
|
92
|
+
// so a closed or switched project tears this stream down promptly. Push
|
|
93
|
+
// `watcherDead` BEFORE ending so the client gets a deterministic
|
|
94
|
+
// end-of-channel signal instead of depending on how its EventSource
|
|
95
|
+
// classifies the reconnect-then-409 that would follow a bare close.
|
|
96
|
+
liveCheck = setInterval(() => {
|
|
97
|
+
if (closed)
|
|
98
|
+
return;
|
|
99
|
+
if (getProjectRoot() !== watchedRoot) {
|
|
100
|
+
res.write(fsWatchFrame({ watcherDead: true }));
|
|
101
|
+
cleanup();
|
|
102
|
+
res.end();
|
|
103
|
+
}
|
|
104
|
+
}, WATCH_DEBOUNCE_MS);
|
|
105
|
+
req.on('close', cleanup);
|
|
106
|
+
return function endStream() {
|
|
107
|
+
if (closed)
|
|
108
|
+
return;
|
|
109
|
+
cleanup();
|
|
110
|
+
res.end();
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=fs-watch-sse.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal JSON responder shared by the workbench COI server and its
|
|
3
|
+
* `/__fs/watch` SSE module (fs-watch-sse.ts). Lives in its own module because
|
|
4
|
+
* workbench-coi-server.ts imports fs-watch-sse.ts — either file owning it
|
|
5
|
+
* would force an import cycle for the other.
|
|
6
|
+
*/
|
|
7
|
+
import type http from 'node:http';
|
|
8
|
+
export declare function jsonRes(res: http.ServerResponse, code: number, obj: unknown): void;
|
|
9
|
+
//# sourceMappingURL=http-json.d.ts.map
|
|
@@ -41,4 +41,15 @@ export declare const SETTINGS_W = 320;
|
|
|
41
41
|
*/
|
|
42
42
|
export declare function computeSettingsBounds(contentWidth: number, contentHeight: number, headerHeight: number): Bounds;
|
|
43
43
|
export declare function computePopoverBounds(contentWidth: number, contentHeight: number, headerHeight: number): Bounds;
|
|
44
|
+
export declare function computeTooltipMaxWidth(contentWidth: number): number;
|
|
45
|
+
/**
|
|
46
|
+
* Position the tooltip overlay relative to its trigger's own bounding rect
|
|
47
|
+
* (both in main-window content coordinates). Prefers directly below the
|
|
48
|
+
* anchor, flips above when there isn't room; always clamped horizontally
|
|
49
|
+
* inside the content area.
|
|
50
|
+
*/
|
|
51
|
+
export declare function computeTooltipBounds(anchor: Bounds, contentWidth: number, contentHeight: number, measured: {
|
|
52
|
+
width: number;
|
|
53
|
+
height: number;
|
|
54
|
+
}): Bounds;
|
|
44
55
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -52,4 +52,27 @@ export function computePopoverBounds(contentWidth, contentHeight, headerHeight)
|
|
|
52
52
|
height: contentHeight - headerHeight,
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
|
+
const TOOLTIP_GAP = 6;
|
|
56
|
+
const TOOLTIP_EDGE_MARGIN = 4;
|
|
57
|
+
export function computeTooltipMaxWidth(contentWidth) {
|
|
58
|
+
return Math.max(1, contentWidth - TOOLTIP_EDGE_MARGIN * 2);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Position the tooltip overlay relative to its trigger's own bounding rect
|
|
62
|
+
* (both in main-window content coordinates). Prefers directly below the
|
|
63
|
+
* anchor, flips above when there isn't room; always clamped horizontally
|
|
64
|
+
* inside the content area.
|
|
65
|
+
*/
|
|
66
|
+
export function computeTooltipBounds(anchor, contentWidth, contentHeight, measured) {
|
|
67
|
+
const availableWidth = computeTooltipMaxWidth(contentWidth);
|
|
68
|
+
const width = Math.min(availableWidth, Math.max(1, Math.ceil(measured.width)));
|
|
69
|
+
const height = Math.max(1, Math.ceil(measured.height));
|
|
70
|
+
const below = anchor.y + anchor.height + TOOLTIP_GAP;
|
|
71
|
+
const fitsBelow = below + height <= contentHeight;
|
|
72
|
+
const y = fitsBelow ? below : Math.max(0, anchor.y - TOOLTIP_GAP - height);
|
|
73
|
+
const centeredX = anchor.x + anchor.width / 2 - width / 2;
|
|
74
|
+
const maxX = Math.max(TOOLTIP_EDGE_MARGIN, contentWidth - width - TOOLTIP_EDGE_MARGIN);
|
|
75
|
+
const x = Math.min(maxX, Math.max(TOOLTIP_EDGE_MARGIN, centeredX));
|
|
76
|
+
return { x, y, width, height };
|
|
77
|
+
}
|
|
55
78
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which project window a CDP target belongs to.
|
|
3
|
+
*
|
|
4
|
+
* MCP keeps one `simulator` and one `workbench` connection for the whole app,
|
|
5
|
+
* so every connection has to record the window it ACTUALLY reached: one
|
|
6
|
+
* recorded as arrived is left alone, one recorded elsewhere keeps retrying
|
|
7
|
+
* until it lands on the window the user is in.
|
|
8
|
+
*/
|
|
9
|
+
/** The per-window facts that decide which window a target belongs to. */
|
|
10
|
+
export interface TargetIdentityFacts {
|
|
11
|
+
activeBridgeId: string | null;
|
|
12
|
+
/**
|
|
13
|
+
* The resolved project path this window opened with. Fixed for the life of
|
|
14
|
+
* the window: a window names its project from the moment it exists, so
|
|
15
|
+
* attribution never has to wait for a compile to record anything.
|
|
16
|
+
*/
|
|
17
|
+
projectPath: string;
|
|
18
|
+
getAppId: () => string | null;
|
|
19
|
+
}
|
|
20
|
+
export interface TargetBinding {
|
|
21
|
+
owner: object | null;
|
|
22
|
+
onTarget: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** The value of query `key` in a target URL, or null when it carries none. */
|
|
25
|
+
export declare function targetQuery(url: string | undefined, key: string): string | null;
|
|
26
|
+
/**
|
|
27
|
+
* The window a chosen target belongs to, and whether that is the window MCP
|
|
28
|
+
* means to drive right now.
|
|
29
|
+
*
|
|
30
|
+
* A simulator target that names no window it can be attributed to is treated as
|
|
31
|
+
* the wrong window on purpose: it may well be another project's, and keeping the
|
|
32
|
+
* retries running is what moves the connection onto the active window's render
|
|
33
|
+
* guest as soon as that guest exists. The one target that legitimately names no
|
|
34
|
+
* window is the project list, which is the right workbench surface exactly
|
|
35
|
+
* while no project window is open.
|
|
36
|
+
*/
|
|
37
|
+
export declare function connectionOwner(kind: 'simulator' | 'workbench', url: string | undefined, intended: object | null, windows: ReadonlyMap<object, TargetIdentityFacts>): TargetBinding;
|
|
38
|
+
//# sourceMappingURL=connection-owner.d.ts.map
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which project window a CDP target belongs to.
|
|
3
|
+
*
|
|
4
|
+
* MCP keeps one `simulator` and one `workbench` connection for the whole app,
|
|
5
|
+
* so every connection has to record the window it ACTUALLY reached: one
|
|
6
|
+
* recorded as arrived is left alone, one recorded elsewhere keeps retrying
|
|
7
|
+
* until it lands on the window the user is in.
|
|
8
|
+
*/
|
|
9
|
+
/** The value of query `key` in a target URL, or null when it carries none. */
|
|
10
|
+
export function targetQuery(url, key) {
|
|
11
|
+
if (!url)
|
|
12
|
+
return null;
|
|
13
|
+
try {
|
|
14
|
+
return new URL(url).searchParams.get(key);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function bind(owner, intended) {
|
|
21
|
+
return { owner, onTarget: owner === intended };
|
|
22
|
+
}
|
|
23
|
+
/** The window whose workbench renderer has this target's project open. */
|
|
24
|
+
function workbenchOwner(url, windows) {
|
|
25
|
+
const path = targetQuery(url, 'path');
|
|
26
|
+
if (!path)
|
|
27
|
+
return null;
|
|
28
|
+
for (const [candidate, facts] of windows) {
|
|
29
|
+
if (facts.projectPath === path)
|
|
30
|
+
return candidate;
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The window this simulator surface belongs to: a render guest names it through
|
|
36
|
+
* its `bridgeId`, the localhost:7788 shell through the `appId` its route
|
|
37
|
+
* carries. Two windows answering to one appId — what two projects declaring the
|
|
38
|
+
* same appId produce — name no single window, so neither is returned.
|
|
39
|
+
*/
|
|
40
|
+
function simulatorOwner(url, windows) {
|
|
41
|
+
const bridgeId = targetQuery(url, 'bridgeId');
|
|
42
|
+
if (bridgeId !== null) {
|
|
43
|
+
for (const [candidate, facts] of windows) {
|
|
44
|
+
if (facts.activeBridgeId === bridgeId)
|
|
45
|
+
return candidate;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const appId = targetQuery(url, 'appId');
|
|
50
|
+
if (appId === null)
|
|
51
|
+
return null;
|
|
52
|
+
let shell = null;
|
|
53
|
+
for (const [candidate, facts] of windows) {
|
|
54
|
+
if (facts.getAppId() !== appId)
|
|
55
|
+
continue;
|
|
56
|
+
if (shell)
|
|
57
|
+
return null;
|
|
58
|
+
shell = candidate;
|
|
59
|
+
}
|
|
60
|
+
return shell;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The window a chosen target belongs to, and whether that is the window MCP
|
|
64
|
+
* means to drive right now.
|
|
65
|
+
*
|
|
66
|
+
* A simulator target that names no window it can be attributed to is treated as
|
|
67
|
+
* the wrong window on purpose: it may well be another project's, and keeping the
|
|
68
|
+
* retries running is what moves the connection onto the active window's render
|
|
69
|
+
* guest as soon as that guest exists. The one target that legitimately names no
|
|
70
|
+
* window is the project list, which is the right workbench surface exactly
|
|
71
|
+
* while no project window is open.
|
|
72
|
+
*/
|
|
73
|
+
export function connectionOwner(kind, url, intended, windows) {
|
|
74
|
+
const owner = kind === 'workbench' ? workbenchOwner(url, windows) : simulatorOwner(url, windows);
|
|
75
|
+
if (owner)
|
|
76
|
+
return bind(owner, intended);
|
|
77
|
+
return { owner: null, onTarget: kind === 'workbench' && intended === null };
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=connection-owner.js.map
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
* - `./target-manager.ts` dual-target CDP connection + reconnect
|
|
13
13
|
*/
|
|
14
14
|
export { startMcpServer } from './server.js';
|
|
15
|
+
export type { McpProjectHost, McpProjectTarget } from './tools/project-tools.js';
|
|
15
16
|
export { getMcpStatus, type McpRuntimeStatus } from './status.js';
|
|
16
|
-
export {
|
|
17
|
+
export { registerMcpWindow, setActiveMcpWindowResolver, noteActiveBridgeId, noteActiveMcpWindowChanged, activeMcpWindow, getNativeOverviewProvider, type McpWindowFacts, } from './target-manager.js';
|
|
18
|
+
export { createOpenForMcp, createTargetForMcp, type McpOpenedProject } from './opened-project.js';
|
|
17
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
*/
|
|
14
14
|
export { startMcpServer } from './server.js';
|
|
15
15
|
export { getMcpStatus } from './status.js';
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
export {
|
|
16
|
+
// Every project window owns its own native-host state and its own renderer, so
|
|
17
|
+
// each registers its facts and MCP resolves the active window on every use.
|
|
18
|
+
export { registerMcpWindow, setActiveMcpWindowResolver, noteActiveBridgeId, noteActiveMcpWindowChanged, activeMcpWindow, getNativeOverviewProvider, } from './target-manager.js';
|
|
19
|
+
export { createOpenForMcp, createTargetForMcp } from './opened-project.js';
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolving the project window an MCP call is aimed at.
|
|
3
|
+
*
|
|
4
|
+
* A project lives in its own window and every window keeps its own
|
|
5
|
+
* session-status store, so `project_open` can only report the truth if it
|
|
6
|
+
* awaits the store of the window it just opened. Reading the app-active
|
|
7
|
+
* window's store instead times out on a first open (that window never compiles
|
|
8
|
+
* this project) and can return another project's rebuild as this one's result.
|
|
9
|
+
* The other tools have no window of their own to point at, so they take the
|
|
10
|
+
* active one — once per call, as a whole.
|
|
11
|
+
*/
|
|
12
|
+
import type { SessionStatusStore } from '../workspace/session-status-store.js';
|
|
13
|
+
import type { McpProjectTarget } from './tools/project-tools.js';
|
|
14
|
+
/** The status surface `project_open` reports from: one window's own state. */
|
|
15
|
+
export interface McpProjectStatusSource {
|
|
16
|
+
workspace: {
|
|
17
|
+
getProjectPath(): string;
|
|
18
|
+
hasActiveSession(): boolean;
|
|
19
|
+
};
|
|
20
|
+
sessionStatus: SessionStatusStore;
|
|
21
|
+
}
|
|
22
|
+
export interface McpOpenedProject extends McpProjectStatusSource {
|
|
23
|
+
/**
|
|
24
|
+
* Generation guard for awaiting this open's compile. A window built by the
|
|
25
|
+
* open reports 0, so its empty store's initial 'idle' is not mistaken for a
|
|
26
|
+
* finished compile. A window that was already showing the project reports
|
|
27
|
+
* `undefined`: focusing it triggers no compile, so its current settled state
|
|
28
|
+
* IS the answer, and waiting for a newer one would hang.
|
|
29
|
+
*/
|
|
30
|
+
afterGeneration?: number;
|
|
31
|
+
}
|
|
32
|
+
interface OpenedWindow<W> {
|
|
33
|
+
window: W;
|
|
34
|
+
context: McpProjectStatusSource;
|
|
35
|
+
}
|
|
36
|
+
export interface OpenForMcpDeps<W> {
|
|
37
|
+
/** Open the project in its own window (or focus the one already showing it). */
|
|
38
|
+
open: (project: {
|
|
39
|
+
name?: string;
|
|
40
|
+
path: string;
|
|
41
|
+
}) => Promise<W>;
|
|
42
|
+
/** Every live project window, so the opened one can be matched by identity. */
|
|
43
|
+
list: () => OpenedWindow<W>[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build the `requestOpenInUi` the MCP project tools drive: open the project
|
|
47
|
+
* and hand back the window it landed in, together with the generation guard
|
|
48
|
+
* for awaiting that window's compile.
|
|
49
|
+
*/
|
|
50
|
+
export declare function createOpenForMcp<W>(deps: OpenForMcpDeps<W>): (project: {
|
|
51
|
+
name: string;
|
|
52
|
+
path: string;
|
|
53
|
+
}) => Promise<McpOpenedProject>;
|
|
54
|
+
/**
|
|
55
|
+
* The window-context fields an MCP project call reads. Structural, so this
|
|
56
|
+
* module stays independent of the workbench context that satisfies it.
|
|
57
|
+
*/
|
|
58
|
+
export interface McpTargetContext {
|
|
59
|
+
workspace: McpProjectTarget['workspace'];
|
|
60
|
+
sessionStatus: McpProjectTarget['sessionStatus'];
|
|
61
|
+
compileLogBuffer: McpProjectTarget['compileLogs'];
|
|
62
|
+
}
|
|
63
|
+
export interface TargetForMcpDeps<W, C extends McpTargetContext> {
|
|
64
|
+
/** Every live project window, so the active one can be matched by context. */
|
|
65
|
+
list: () => {
|
|
66
|
+
window: W;
|
|
67
|
+
context: C;
|
|
68
|
+
}[];
|
|
69
|
+
/** The context of the project window the user is working in. */
|
|
70
|
+
activeContext: () => C;
|
|
71
|
+
/** Take one window down the way a user-driven close does. */
|
|
72
|
+
close: (window: W) => void;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Build the `currentProject` the MCP project tools drive: resolve the project
|
|
76
|
+
* window the user is working in NOW and hand back every surface a tool call
|
|
77
|
+
* needs, all bound to that one window.
|
|
78
|
+
*
|
|
79
|
+
* Tool calls yield — `closeProject()` awaits a teardown, `waitForSettled()`
|
|
80
|
+
* awaits a compile — and the user can focus another project meanwhile.
|
|
81
|
+
* Re-resolving afterwards reports one project's compile as another's, or
|
|
82
|
+
* closes the window they just moved to while the window whose session was torn
|
|
83
|
+
* down stays on screen, empty. The active context can also be the project
|
|
84
|
+
* list, which owns no project window: closing then does nothing.
|
|
85
|
+
*/
|
|
86
|
+
export declare function createTargetForMcp<W, C extends McpTargetContext>(deps: TargetForMcpDeps<W, C>): () => McpProjectTarget;
|
|
87
|
+
export {};
|
|
88
|
+
//# sourceMappingURL=opened-project.d.ts.map
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolving the project window an MCP call is aimed at.
|
|
3
|
+
*
|
|
4
|
+
* A project lives in its own window and every window keeps its own
|
|
5
|
+
* session-status store, so `project_open` can only report the truth if it
|
|
6
|
+
* awaits the store of the window it just opened. Reading the app-active
|
|
7
|
+
* window's store instead times out on a first open (that window never compiles
|
|
8
|
+
* this project) and can return another project's rebuild as this one's result.
|
|
9
|
+
* The other tools have no window of their own to point at, so they take the
|
|
10
|
+
* active one — once per call, as a whole.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Build the `requestOpenInUi` the MCP project tools drive: open the project
|
|
14
|
+
* and hand back the window it landed in, together with the generation guard
|
|
15
|
+
* for awaiting that window's compile.
|
|
16
|
+
*/
|
|
17
|
+
export function createOpenForMcp(deps) {
|
|
18
|
+
return async (project) => {
|
|
19
|
+
// Sampled BEFORE the open: a window that already exists carries a previous
|
|
20
|
+
// compile's history, and only a state recorded after this point can be
|
|
21
|
+
// this open's result. Keyed by context identity, so a window rebuilt
|
|
22
|
+
// during the open is correctly seen as new.
|
|
23
|
+
const before = new Map(deps.list().map((w) => [w.context, w.context.sessionStatus.get().generation]));
|
|
24
|
+
const window = await deps.open(project);
|
|
25
|
+
const opened = deps.list().find((w) => w.window === window);
|
|
26
|
+
if (!opened)
|
|
27
|
+
throw new Error(`the window opened for ${project.path} is already gone`);
|
|
28
|
+
return {
|
|
29
|
+
workspace: opened.context.workspace,
|
|
30
|
+
sessionStatus: opened.context.sessionStatus,
|
|
31
|
+
afterGeneration: before.has(opened.context) ? undefined : 0,
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build the `currentProject` the MCP project tools drive: resolve the project
|
|
37
|
+
* window the user is working in NOW and hand back every surface a tool call
|
|
38
|
+
* needs, all bound to that one window.
|
|
39
|
+
*
|
|
40
|
+
* Tool calls yield — `closeProject()` awaits a teardown, `waitForSettled()`
|
|
41
|
+
* awaits a compile — and the user can focus another project meanwhile.
|
|
42
|
+
* Re-resolving afterwards reports one project's compile as another's, or
|
|
43
|
+
* closes the window they just moved to while the window whose session was torn
|
|
44
|
+
* down stays on screen, empty. The active context can also be the project
|
|
45
|
+
* list, which owns no project window: closing then does nothing.
|
|
46
|
+
*/
|
|
47
|
+
export function createTargetForMcp(deps) {
|
|
48
|
+
return () => {
|
|
49
|
+
const context = deps.activeContext();
|
|
50
|
+
const owner = deps.list().find((w) => w.context === context);
|
|
51
|
+
return {
|
|
52
|
+
workspace: context.workspace,
|
|
53
|
+
sessionStatus: context.sessionStatus,
|
|
54
|
+
compileLogs: context.compileLogBuffer,
|
|
55
|
+
closeWindow: () => { if (owner)
|
|
56
|
+
deps.close(owner.window); },
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=opened-project.js.map
|
|
@@ -7,5 +7,6 @@
|
|
|
7
7
|
* only wires up transports and lifecycle.
|
|
8
8
|
*/
|
|
9
9
|
import { type Disposable } from '@dimina-kit/electron-deck/main';
|
|
10
|
-
|
|
10
|
+
import { type McpProjectHost } from './tools/project-tools.js';
|
|
11
|
+
export declare function startMcpServer(resolvedCdpPort: number, mcpPort: number, projectHost: McpProjectHost): Disposable;
|
|
11
12
|
//# sourceMappingURL=server.d.ts.map
|