@dimina-kit/devtools 0.3.2-dev.20260525152421 → 0.3.2-dev.20260610082053

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/README.md +43 -40
  2. package/dist/main/api.d.ts +0 -1
  3. package/dist/main/api.js +5 -1
  4. package/dist/main/app/app.d.ts +15 -5
  5. package/dist/main/app/app.js +247 -110
  6. package/dist/main/app/bootstrap.d.ts +16 -0
  7. package/dist/main/app/bootstrap.js +20 -0
  8. package/dist/main/app/launch.d.ts +8 -4
  9. package/dist/main/app/launch.js +9 -4
  10. package/dist/main/index.bundle.js +6607 -2102
  11. package/dist/main/index.js +9 -1
  12. package/dist/main/ipc/app.d.ts +1 -1
  13. package/dist/main/ipc/bridge-router.d.ts +61 -0
  14. package/dist/main/ipc/bridge-router.js +1300 -0
  15. package/dist/main/ipc/panels.d.ts +1 -1
  16. package/dist/main/ipc/panels.js +6 -2
  17. package/dist/main/ipc/popover.d.ts +1 -1
  18. package/dist/main/ipc/project-fs.d.ts +57 -0
  19. package/dist/main/ipc/project-fs.js +448 -0
  20. package/dist/main/ipc/projects.d.ts +1 -1
  21. package/dist/main/ipc/session.d.ts +1 -1
  22. package/dist/main/ipc/settings.d.ts +1 -1
  23. package/dist/main/ipc/simulator-module.d.ts +6 -0
  24. package/dist/main/ipc/simulator-module.js +11 -1
  25. package/dist/main/ipc/simulator.d.ts +2 -2
  26. package/dist/main/ipc/simulator.js +49 -5
  27. package/dist/main/ipc/toolbar.d.ts +1 -1
  28. package/dist/main/ipc/views.d.ts +19 -0
  29. package/dist/main/ipc/views.js +65 -0
  30. package/dist/main/runtime/devtools-backend.d.ts +17 -0
  31. package/dist/main/runtime/devtools-backend.js +49 -0
  32. package/dist/main/runtime/miniapp-runtime.d.ts +39 -0
  33. package/dist/main/runtime/miniapp-runtime.js +17 -0
  34. package/dist/main/services/automation/exec.d.ts +27 -2
  35. package/dist/main/services/automation/exec.js +37 -3
  36. package/dist/main/services/automation/handlers/app.js +127 -11
  37. package/dist/main/services/automation/handlers/page.js +36 -19
  38. package/dist/main/services/automation/index.js +40 -13
  39. package/dist/main/services/automation/wait-active-page.d.ts +56 -0
  40. package/dist/main/services/automation/wait-active-page.js +71 -0
  41. package/dist/main/services/console-forward/index.d.ts +36 -0
  42. package/dist/main/services/console-forward/index.js +81 -0
  43. package/dist/main/services/dimina-resource-server.d.ts +7 -0
  44. package/dist/main/services/dimina-resource-server.js +99 -0
  45. package/dist/main/services/elements-forward/index.d.ts +66 -0
  46. package/dist/main/services/elements-forward/index.js +583 -0
  47. package/dist/main/services/layout/index.d.ts +23 -1
  48. package/dist/main/services/layout/index.js +28 -3
  49. package/dist/main/services/mcp/index.d.ts +1 -0
  50. package/dist/main/services/mcp/index.js +3 -0
  51. package/dist/main/services/mcp/server.d.ts +1 -1
  52. package/dist/main/services/mcp/server.js +1 -1
  53. package/dist/main/services/mcp/target-manager.d.ts +35 -0
  54. package/dist/main/services/mcp/target-manager.js +63 -1
  55. package/dist/main/services/mcp/tools/context-tools.js +15 -1
  56. package/dist/main/services/module.d.ts +1 -1
  57. package/dist/main/services/network-forward/index.d.ts +190 -0
  58. package/dist/main/services/network-forward/index.js +765 -0
  59. package/dist/main/services/notifications/renderer-notifier.d.ts +11 -0
  60. package/dist/main/services/notifications/renderer-notifier.js +7 -1
  61. package/dist/main/services/render-inspect/index.d.ts +41 -0
  62. package/dist/main/services/render-inspect/index.js +88 -0
  63. package/dist/main/services/safe-area/index.d.ts +17 -0
  64. package/dist/main/services/safe-area/index.js +59 -0
  65. package/dist/main/services/service-host-pool/pool.d.ts +197 -0
  66. package/dist/main/services/service-host-pool/pool.js +364 -0
  67. package/dist/main/services/simulator/custom-apis.d.ts +34 -0
  68. package/dist/main/services/simulator/custom-apis.js +22 -0
  69. package/dist/main/services/simulator-appdata/index.d.ts +35 -0
  70. package/dist/main/services/simulator-appdata/index.js +71 -0
  71. package/dist/main/services/simulator-current-page/index.d.ts +24 -0
  72. package/dist/main/services/simulator-current-page/index.js +19 -0
  73. package/dist/main/services/simulator-storage/index.d.ts +37 -2
  74. package/dist/main/services/simulator-storage/index.js +209 -32
  75. package/dist/main/services/simulator-storage/service-storage-ops.d.ts +40 -0
  76. package/dist/main/services/simulator-storage/service-storage-ops.js +67 -0
  77. package/dist/main/services/simulator-temp-files/fs-channels.js +1 -1
  78. package/dist/main/services/simulator-temp-files/index.d.ts +1 -1
  79. package/dist/main/services/simulator-temp-files/index.js +1 -1
  80. package/dist/main/services/simulator-temp-files/request-handler.js +1 -1
  81. package/dist/main/services/simulator-wxml/index.d.ts +29 -0
  82. package/dist/main/services/simulator-wxml/index.js +28 -0
  83. package/dist/main/services/update/update-manager.d.ts +10 -0
  84. package/dist/main/services/update/update-manager.js +16 -3
  85. package/dist/main/services/views/devtools-tabs.d.ts +47 -0
  86. package/dist/main/services/views/devtools-tabs.js +95 -0
  87. package/dist/main/services/views/view-manager.d.ts +142 -4
  88. package/dist/main/services/views/view-manager.js +909 -17
  89. package/dist/main/services/workbench-context.d.ts +66 -1
  90. package/dist/main/services/workbench-context.js +6 -1
  91. package/dist/main/services/workspace/workspace-service.d.ts +8 -0
  92. package/dist/main/services/workspace/workspace-service.js +12 -0
  93. package/dist/main/utils/ipc-registry.d.ts +11 -2
  94. package/dist/main/utils/ipc-registry.js +63 -3
  95. package/dist/main/utils/paths.d.ts +15 -0
  96. package/dist/main/utils/paths.js +19 -0
  97. package/dist/main/utils/sender-policy.d.ts +9 -3
  98. package/dist/main/utils/sender-policy.js +18 -4
  99. package/dist/main/utils/theme.d.ts +1 -1
  100. package/dist/main/utils/theme.js +1 -1
  101. package/dist/main/windows/main-window/create.d.ts +0 -6
  102. package/dist/main/windows/main-window/create.js +11 -59
  103. package/dist/main/windows/main-window/events.d.ts +1 -1
  104. package/dist/main/windows/main-window/events.js +1 -1
  105. package/dist/main/windows/service-host-window/create.d.ts +52 -0
  106. package/dist/main/windows/service-host-window/create.js +112 -0
  107. package/dist/native-host/common/common.js +368 -0
  108. package/dist/native-host/container/pageFrame.css +1 -0
  109. package/dist/native-host/render/render.js +9334 -0
  110. package/dist/native-host/service/service.js +6 -0
  111. package/dist/preload/index.d.ts +2 -0
  112. package/dist/preload/index.js +6 -0
  113. package/dist/preload/instrumentation/app-data.d.ts +18 -20
  114. package/dist/preload/instrumentation/app-data.js +23 -160
  115. package/dist/preload/instrumentation/wxml-extract.d.ts +1 -1
  116. package/dist/preload/instrumentation/wxml-extract.js +1 -1
  117. package/dist/preload/runtime/bridge.d.ts +3 -8
  118. package/dist/preload/runtime/bridge.js +2 -32
  119. package/dist/preload/runtime/custom-apis.js +20 -17
  120. package/dist/preload/runtime/host-toolbar-advertiser.d.ts +27 -0
  121. package/dist/preload/runtime/host-toolbar-advertiser.js +55 -0
  122. package/dist/preload/runtime/main-api-runner.d.ts +9 -0
  123. package/dist/preload/runtime/main-api-runner.js +85 -0
  124. package/dist/preload/runtime/native-host.d.ts +43 -0
  125. package/dist/preload/runtime/native-host.js +83 -0
  126. package/dist/preload/shared/expose.d.ts +10 -5
  127. package/dist/preload/shared/expose.js +29 -11
  128. package/dist/preload/shared/sid-registry.d.ts +11 -0
  129. package/dist/preload/shared/sid-registry.js +38 -0
  130. package/dist/preload/windows/host-toolbar.cjs +161 -0
  131. package/dist/preload/windows/host-toolbar.cjs.map +7 -0
  132. package/dist/preload/windows/host-toolbar.d.ts +2 -0
  133. package/dist/preload/windows/host-toolbar.js +12 -0
  134. package/dist/preload/windows/main.cjs +1939 -0
  135. package/dist/preload/windows/main.cjs.map +4 -4
  136. package/dist/preload/windows/simulator.cjs +925 -0
  137. package/dist/preload/windows/simulator.cjs.map +7 -0
  138. package/dist/preload/windows/simulator.js +243 -573
  139. package/dist/render-host/pageFrame.html +29 -0
  140. package/dist/render-host/preload.cjs +154 -0
  141. package/dist/render-host/render-inspect.js +295 -0
  142. package/dist/renderer/assets/abap-DiwvWnMr.js +2 -0
  143. package/dist/renderer/assets/apex-CmtZjKlf.js +2 -0
  144. package/dist/renderer/assets/azcli-DL2My_i-.js +2 -0
  145. package/dist/renderer/assets/bat-B-nC98wG.js +2 -0
  146. package/dist/renderer/assets/bicep-Ju5MwOgh.js +3 -0
  147. package/dist/renderer/assets/cameligo-8Eu1TyBr.js +2 -0
  148. package/dist/renderer/assets/chunk-DPI0Y_ll.js +1 -0
  149. package/dist/renderer/assets/clojure-u-RpMkH3.js +2 -0
  150. package/dist/renderer/assets/codicon-ngg6Pgfi.ttf +0 -0
  151. package/dist/renderer/assets/coffee-CdA7bbTe.js +2 -0
  152. package/dist/renderer/assets/constants-CLAQX6VZ.js +2 -0
  153. package/dist/renderer/assets/cpp-CzNFP8ks.js +2 -0
  154. package/dist/renderer/assets/csharp-j1LThmcE.js +2 -0
  155. package/dist/renderer/assets/csp-CLRC61y6.js +2 -0
  156. package/dist/renderer/assets/css-r6rC_7P2.js +4 -0
  157. package/dist/renderer/assets/css.worker-DyDu5ynT.js +90 -0
  158. package/dist/renderer/assets/cssMode-BCBgxrnA.js +2 -0
  159. package/dist/renderer/assets/cypher-CW08XVUh.js +2 -0
  160. package/dist/renderer/assets/dart-Cs9aL5T_.js +2 -0
  161. package/dist/renderer/assets/dockerfile-BWM0M184.js +2 -0
  162. package/dist/renderer/assets/ecl-MJJuer5P.js +2 -0
  163. package/dist/renderer/assets/editor-CWI9TnMM.css +1 -0
  164. package/dist/renderer/assets/editor.api2-BTaYmRq7.js +873 -0
  165. package/dist/renderer/assets/editor.worker-Dpt_xPrs.js +27 -0
  166. package/dist/renderer/assets/elixir-D2AIuXqn.js +2 -0
  167. package/dist/renderer/assets/flow9-B2H24giC.js +2 -0
  168. package/dist/renderer/assets/freemarker2-DGDGzimW.js +4 -0
  169. package/dist/renderer/assets/fsharp-CMk2OIJN.js +2 -0
  170. package/dist/renderer/assets/go-BrMkuJg0.js +2 -0
  171. package/dist/renderer/assets/graphql-PSR1UKGv.js +2 -0
  172. package/dist/renderer/assets/handlebars-bOHhw3EG.js +2 -0
  173. package/dist/renderer/assets/hcl-DAQrbDOW.js +2 -0
  174. package/dist/renderer/assets/html-BMyuX0_c.js +2 -0
  175. package/dist/renderer/assets/html.worker-IWNXhnIC.js +503 -0
  176. package/dist/renderer/assets/htmlMode-DR4kXJ7l.js +2 -0
  177. package/dist/renderer/assets/index-CcJKzatF.js +50 -0
  178. package/dist/renderer/assets/ini-0TG5BxW0.js +2 -0
  179. package/dist/renderer/assets/input-QGx6FFX1.js +2 -0
  180. package/dist/renderer/assets/ipc-transport-BT4QYQqu.css +1 -0
  181. package/dist/renderer/assets/{ipc-transport-BzPzxPwf.js → ipc-transport-DvZvwK-Z.js} +5 -5
  182. package/dist/renderer/assets/java-rgorz17v.js +2 -0
  183. package/dist/renderer/assets/javascript-Bu-tl1P7.js +2 -0
  184. package/dist/renderer/assets/json.worker-c4h5s80L.js +59 -0
  185. package/dist/renderer/assets/jsonMode-MQV_ffLR.js +8 -0
  186. package/dist/renderer/assets/julia-C8VMdHm8.js +2 -0
  187. package/dist/renderer/assets/kotlin-AhhC4Qhm.js +2 -0
  188. package/dist/renderer/assets/less-Cgca25AP.js +3 -0
  189. package/dist/renderer/assets/lexon-D0GHdBaw.js +2 -0
  190. package/dist/renderer/assets/liquid-ClkfOvhB.js +2 -0
  191. package/dist/renderer/assets/lspLanguageFeatures-Bke_4Ie9.js +5 -0
  192. package/dist/renderer/assets/lua-DmRsNG-P.js +2 -0
  193. package/dist/renderer/assets/m3-BgL5dNKT.js +2 -0
  194. package/dist/renderer/assets/markdown-BuJfycGS.js +2 -0
  195. package/dist/renderer/assets/mdx-RZdUskPu.js +2 -0
  196. package/dist/renderer/assets/mips-C9m_93PR.js +2 -0
  197. package/dist/renderer/assets/monaco.contribution-B7rUMaEv.js +3 -0
  198. package/dist/renderer/assets/msdax-CpFHC9OI.js +2 -0
  199. package/dist/renderer/assets/mysql-qFvltsqN.js +2 -0
  200. package/dist/renderer/assets/objective-c-Bnmr858J.js +2 -0
  201. package/dist/renderer/assets/pascal-WP0_D5AO.js +2 -0
  202. package/dist/renderer/assets/pascaligo-Blom4Rij.js +2 -0
  203. package/dist/renderer/assets/perl-B-vk8g64.js +2 -0
  204. package/dist/renderer/assets/pgsql-Cgvz6v67.js +2 -0
  205. package/dist/renderer/assets/php-8a3Lrw9m.js +2 -0
  206. package/dist/renderer/assets/pla-DuFqEZ8V.js +2 -0
  207. package/dist/renderer/assets/popover-BOH1If1J.js +2 -0
  208. package/dist/renderer/assets/postiats-DkLtSgkp.js +2 -0
  209. package/dist/renderer/assets/powerquery-BJ1aNepW.js +2 -0
  210. package/dist/renderer/assets/powershell-rE98k687.js +2 -0
  211. package/dist/renderer/assets/protobuf-CUheFacr.js +3 -0
  212. package/dist/renderer/assets/pug-LDcAMD8w.js +2 -0
  213. package/dist/renderer/assets/python-Cobrm_-8.js +2 -0
  214. package/dist/renderer/assets/qsharp-DUKSQoR1.js +2 -0
  215. package/dist/renderer/assets/r-D-QApv87.js +2 -0
  216. package/dist/renderer/assets/razor-BEUIQFNJ.js +2 -0
  217. package/dist/renderer/assets/redis-SXdDyWR9.js +2 -0
  218. package/dist/renderer/assets/redshift-Y6lsCryn.js +2 -0
  219. package/dist/renderer/assets/restructuredtext-edObr9a8.js +2 -0
  220. package/dist/renderer/assets/ruby-CNnUfF-8.js +2 -0
  221. package/dist/renderer/assets/rust-IHUZWzBr.js +2 -0
  222. package/dist/renderer/assets/sb-DrUvY44N.js +2 -0
  223. package/dist/renderer/assets/scala-B4hbXGLM.js +2 -0
  224. package/dist/renderer/assets/scheme-BGrd12j3.js +2 -0
  225. package/dist/renderer/assets/scss-x5G1ES4U.js +4 -0
  226. package/dist/renderer/assets/select-C7JQ8G5N.js +2 -0
  227. package/dist/renderer/assets/settings-DpAbTJyF.js +2 -0
  228. package/dist/renderer/assets/{settings-api-BXCw9vOZ.js → settings-api-RD2IZF53.js} +2 -2
  229. package/dist/renderer/assets/shell-DOehe2Y8.js +2 -0
  230. package/dist/renderer/assets/solidity-BeRvcwWV.js +2 -0
  231. package/dist/renderer/assets/sophia-DZbkUNjy.js +2 -0
  232. package/dist/renderer/assets/sparql-B7_oi5-h.js +2 -0
  233. package/dist/renderer/assets/sql-CTlsFWVE.js +2 -0
  234. package/dist/renderer/assets/st-DJVEJdPE.js +2 -0
  235. package/dist/renderer/assets/swift-CwhT3fYa.js +2 -0
  236. package/dist/renderer/assets/systemverilog-BQN63pkN.js +2 -0
  237. package/dist/renderer/assets/tcl-DqwfpskA.js +2 -0
  238. package/dist/renderer/assets/ts.worker-BwM5Ha3L.js +67720 -0
  239. package/dist/renderer/assets/tsMode-BHa7dl9v.js +12 -0
  240. package/dist/renderer/assets/twig-BiyenUgc.js +2 -0
  241. package/dist/renderer/assets/typescript-15aT0Yj8.js +2 -0
  242. package/dist/renderer/assets/typespec-CWOJribt.js +2 -0
  243. package/dist/renderer/assets/vb-Cq5F87m3.js +2 -0
  244. package/dist/renderer/assets/wgsl-BAvW2lVr.js +299 -0
  245. package/dist/renderer/assets/workbenchSettings-CNJX4Qna.js +8 -0
  246. package/dist/renderer/assets/workers-CRBS0W-v.js +2 -0
  247. package/dist/renderer/assets/xml-bR2Zh-HV.js +2 -0
  248. package/dist/renderer/assets/yaml-Bdk54Qrb.js +2 -0
  249. package/dist/renderer/entries/main/index.html +29 -6
  250. package/dist/renderer/entries/popover/index.html +7 -6
  251. package/dist/renderer/entries/settings/index.html +6 -5
  252. package/dist/renderer/entries/workbench-settings/index.html +6 -5
  253. package/dist/service-host/preload.cjs +254 -0
  254. package/dist/service-host/service.html +10 -0
  255. package/dist/service-host/sourcemap-rewrite.cjs +58 -0
  256. package/dist/service-host/sync-api-patch.js +20 -0
  257. package/dist/service-host/sync-impls/menu-button.js +16 -0
  258. package/dist/service-host/sync-impls/storage.js +50 -0
  259. package/dist/service-host/sync-impls/system-info.js +54 -0
  260. package/dist/shared/appdata-accumulator.d.ts +95 -0
  261. package/dist/shared/appdata-accumulator.js +213 -0
  262. package/dist/shared/bridge-channels.d.ts +364 -0
  263. package/dist/shared/bridge-channels.js +54 -0
  264. package/dist/shared/constants.d.ts +0 -4
  265. package/dist/shared/constants.js +0 -4
  266. package/dist/shared/ipc-channels.d.ts +108 -1
  267. package/dist/shared/ipc-channels.js +127 -10
  268. package/dist/shared/ipc-schemas.d.ts +65 -2
  269. package/dist/shared/ipc-schemas.js +79 -3
  270. package/dist/shared/open-in-editor.d.ts +71 -0
  271. package/dist/shared/open-in-editor.js +138 -0
  272. package/dist/shared/simulator-api-metadata.d.ts +21 -0
  273. package/dist/shared/simulator-api-metadata.js +23 -0
  274. package/dist/shared/types.d.ts +2 -2
  275. package/dist/shared/vpath.d.ts +42 -0
  276. package/dist/shared/vpath.js +105 -0
  277. package/dist/simulator/assets/device-shell-DsdcNEkt.css +1 -0
  278. package/dist/simulator/assets/device-shell-vwYSOVrh.js +2 -0
  279. package/dist/simulator/assets/jsx-runtime-P6ZegaOf.js +2 -0
  280. package/dist/simulator/assets/simulator-DddliUL5.js +10 -0
  281. package/dist/simulator/assets/simulator-mini-app-BDNu5n26.js +2 -0
  282. package/dist/simulator/device-shell/menu-button-geometry.js +8 -0
  283. package/dist/simulator/simulator.html +2 -112
  284. package/package.json +9 -9
  285. package/dist/main/utils/disposable.d.ts +0 -18
  286. package/dist/main/utils/disposable.js +0 -67
  287. package/dist/renderer/assets/constants-DI382mTP.js +0 -2
  288. package/dist/renderer/assets/index-4lkyF644.js +0 -46
  289. package/dist/renderer/assets/input-D4byFOLS.js +0 -2
  290. package/dist/renderer/assets/ipc-transport-DqbRdZNO.css +0 -1
  291. package/dist/renderer/assets/popover-cxKrg_os.js +0 -2
  292. package/dist/renderer/assets/select-BgSkkdHW.js +0 -2
  293. package/dist/renderer/assets/settings-oD2K1jdT.js +0 -2
  294. package/dist/renderer/assets/workbenchSettings-CTNBpTft.js +0 -8
  295. package/dist/simulator/assets/simulator-CVOFTpSj.js +0 -9
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Customize the embedded Chrome DevTools front-end's panel tab bar.
3
+ *
4
+ * The right-panel DevTools (a WebContents rendering `devtools://`, attached to the
5
+ * service-host via `setDevToolsWebContents` + `openDevTools`) shows ALL its panels
6
+ * by default. For the mini-app workflow only Elements / Console / Network are
7
+ * meaningful in the default tab bar — but we do NOT want to delete the rest: they
8
+ * stay reachable on demand via the command menu (Cmd+Shift+P → "Show Sources" …).
9
+ *
10
+ * ── How (registry, not DOM) ─────────────────────────────────────────────────
11
+ * The modern ESM DevTools front-end does NOT expose `UI.ViewManager` on
12
+ * `globalThis`, so the tab bar can't be driven through the view manager. Panels
13
+ * register themselves via `registerViewExtension({id, location:'panel', persistence})`
14
+ * into a module-level registry; the official mutators are `registerViewExtension`,
15
+ * `getRegisteredViewExtensions` and `maybeRemoveViewExtension`. We:
16
+ * 1. `import('./ui/legacy/legacy.js')` to reach those functions (the real export
17
+ * path on Electron 41 / Chromium ~138, verified at runtime);
18
+ * 2. whitelist-patch `registerViewExtension` so any future non-kept panel comes
19
+ * in with `persistence:'transient'` (hidden from the default bar);
20
+ * 3. for the already-registered non-kept panels, `maybeRemoveViewExtension(id)`
21
+ * then re-register a copy with `persistence:'transient'`.
22
+ * Transient views are not shown in the default tab bar but stay in the command
23
+ * menu — and because this is DevTools' own panel path, there is NO `>>` overflow
24
+ * or `×` close-button residue (which a DOM `display:none` hack leaves behind).
25
+ *
26
+ * ── Locale infobar ──────────────────────────────────────────────────────────
27
+ * The "DevTools is now available in 中文" banner is suppressed via the official
28
+ * host preference `disable-locale-info-bar` (a GLOBAL setting that lives in host
29
+ * preferences, NOT page localStorage), set through `InspectorFrontendHost.setPreference`.
30
+ *
31
+ * ── Degradation ─────────────────────────────────────────────────────────────
32
+ * If the ESM module can't be resolved, a bounded DOM `display:none` fallback hides
33
+ * the non-kept tabs (by visible name) so the bar still looks right. Everything is
34
+ * wrapped in try/catch in the injected realm and silently no-ops on any failure.
35
+ */
36
+ /**
37
+ * Canonical DevTools panel view ids kept in the DEFAULT tab bar (stable front-end
38
+ * ids, unchanged for many Chromium releases): `elements`, `console`, `network`.
39
+ */
40
+ export const DEVTOOLS_KEPT_VIEW_IDS = ['elements', 'console', 'network'];
41
+ /**
42
+ * Build the `executeJavaScript` source injected into the DevTools front-end
43
+ * WebContents. The kept ids + display names are carried as JSON data literals
44
+ * (never interpolated as bare code), same discipline as the other injectors.
45
+ */
46
+ export function buildCustomizeTabsScript(keptIds = DEVTOOLS_KEPT_VIEW_IDS) {
47
+ // Kept panels are matched by view id (registry path) and by visible NAME (DOM
48
+ // fallback path); the DevTools UI may be EN or ZH, so include both.
49
+ const NAME_MAP = {
50
+ elements: ['Elements', '元素'], console: ['Console', '控制台'], network: ['Network', '网络'],
51
+ };
52
+ const keepNames = keptIds.flatMap((id) => NAME_MAP[id] ?? [id]);
53
+ const keepIdsJson = JSON.stringify(JSON.stringify([...keptIds]));
54
+ const keepNamesJson = JSON.stringify(JSON.stringify(keepNames));
55
+ return `(function(){try{
56
+ var KEEPID = new Set(JSON.parse(${keepIdsJson}));
57
+ var KEEPNAME = new Set(JSON.parse(${keepNamesJson}));
58
+ // (1) Locale infobar — official host-preference suppression (NOT localStorage).
59
+ try { var IFH=globalThis.InspectorFrontendHost; if(IFH&&typeof IFH.setPreference==='function'){ IFH.setPreference('disable-locale-info-bar','true'); } }catch(_){}
60
+ function deepCollect(sel,cap){ var out=[],seen=0,stack=[document]; while(stack.length&&seen<(cap||40000)){ var root=stack.pop(); try{var m=root.querySelectorAll?root.querySelectorAll(sel):[];for(var i=0;i<m.length;i++)out.push(m[i]);}catch(_){} try{var all=root.querySelectorAll?root.querySelectorAll('*'):[];for(var j=0;j<all.length;j++){seen++;if(all[j].shadowRoot)stack.push(all[j].shadowRoot);}}catch(_){} } return out; }
61
+ function txt(el){ return ((el&&el.textContent)||'').replace(/\\s+/g,' ').trim(); }
62
+ var PATHS=['./ui/legacy/legacy.js','./ui/legacy/ViewManager.js','devtools://devtools/bundled/ui/legacy/legacy.js'];
63
+ (async function(){
64
+ var VM=null,maybeRemove=null,origReg=null,reg=null,getReg=null;
65
+ for(var i=0;i<PATHS.length;i++){ try{ var m=await import(PATHS[i]); if(!m)continue; var v=m.ViewManager||m;
66
+ var mr=(v&&typeof v.maybeRemoveViewExtension==='function')?v.maybeRemoveViewExtension.bind(v):(typeof m.maybeRemoveViewExtension==='function'?m.maybeRemoveViewExtension:null);
67
+ if(mr){ VM=v;maybeRemove=mr;
68
+ origReg=(v&&typeof v.registerViewExtension==='function')?v.registerViewExtension:m.registerViewExtension; reg=origReg;
69
+ getReg=(v&&typeof v.getRegisteredViewExtensions==='function')?v.getRegisteredViewExtensions.bind(v):(typeof m.getRegisteredViewExtensions==='function'?m.getRegisteredViewExtensions:null);
70
+ break; } }catch(_){} }
71
+ if(maybeRemove){
72
+ // (2) future non-kept panels register as transient
73
+ try{ if(origReg&&VM){ VM.registerViewExtension=function(r){ try{ if(r&&String(r.location)==='panel'&&!KEEPID.has(r.id)){ r.persistence='transient'; } }catch(_){} return origReg.apply(this,arguments); }; reg=VM.registerViewExtension; } }catch(_){}
74
+ // (3) already-registered non-kept panels -> remove + re-register transient
75
+ var exts=[]; try{ if(getReg) exts=getReg()||[]; }catch(_){}
76
+ var handled=false;
77
+ for(var e=0;e<exts.length;e++){ try{ var ex=exts[e]; var eid=ex&&ex.id; if(!eid||KEEPID.has(eid)) continue; if(String(ex.location)!=='panel') continue;
78
+ maybeRemove(eid);
79
+ var nr={}; try{ nr=Object.assign({},ex); }catch(_){ for(var k in ex){ try{nr[k]=ex[k];}catch(__){} } }
80
+ nr.persistence='transient';
81
+ try{ reg(nr); }catch(_){ try{ origReg(nr); }catch(__){} }
82
+ handled=true;
83
+ }catch(_){} }
84
+ // fallback: registrations not enumerable -> at least clear the bar by id
85
+ if(!handled){ var FALL=['timeline','resources','heap-profiler','sources','security','lighthouse','chrome-recorder','coverage','linear-memory-inspector','sensors','rendering','animations','autofill-view','medias','issues-pane']; for(var fr=0;fr<FALL.length;fr++){ try{ if(!KEEPID.has(FALL[fr])) maybeRemove(FALL[fr]); }catch(_){} } }
86
+ } else { domFallback(); }
87
+ })();
88
+ // DOM fallback: only if the ESM module couldn't be resolved at all.
89
+ function domFallback(){ var cachedBar=null;
90
+ function findBar(){ if(cachedBar&&cachedBar.isConnected)return cachedBar; cachedBar=null; var tabs=deepCollect('[role="tab"]'); var a=null; for(var i=0;i<tabs.length;i++){if(KEEPNAME.has(txt(tabs[i]))){a=tabs[i];break;}} if(!a)return null; var p=a.parentElement; while(p){try{if(p.querySelectorAll('[role="tab"]').length>1){cachedBar=p;return p;}}catch(_){} p=p.parentElement;} cachedBar=a.parentElement; return cachedBar; }
91
+ function apply(){ try{ var bar=findBar(); if(bar){ var bts=bar.querySelectorAll('[role="tab"]'); for(var b=0;b<bts.length;b++){var bt=bts[b]; if(KEEPNAME.has(txt(bt)))continue; try{if(bt.style)bt.style.display='none';}catch(_){}} try{var more=bar.querySelector('[aria-label*="More tabs"],.tabbed-pane-header-tabs-drop-down-container'); if(more&&more.style)more.style.display='none';}catch(_){} } }catch(_){} }
92
+ var tr=0,t=setInterval(function(){tr++;try{apply();}catch(_){}if(tr>120)clearInterval(t);},60); try{apply();}catch(_){} }
93
+ }catch(_){}})()`;
94
+ }
95
+ //# sourceMappingURL=devtools-tabs.js.map
@@ -1,4 +1,5 @@
1
1
  import type { WebContents } from 'electron';
2
+ import type { NativeDeviceInfo } from '../../../shared/ipc-channels.js';
2
3
  import { type WorkbenchContext } from '../workbench-context.js';
3
4
  /**
4
5
  * Context surface used by the ViewManager. We only need a small slice of the
@@ -7,8 +8,41 @@ import { type WorkbenchContext } from '../workbench-context.js';
7
8
  export interface ViewManagerContext {
8
9
  windows: WorkbenchContext['windows'];
9
10
  rendererDir: string;
11
+ /**
12
+ * Per-webContents connection registry (foundation.md §4). The native-host
13
+ * simulator WebContentsView is acquired here so the registry tracks that
14
+ * trusted webContents and tears its per-wc resources (the custom-api bridge
15
+ * `ipcMain.on`) down deterministically on destroy — see P1 DoD #3. Required:
16
+ * `createWorkbenchContext` always supplies it.
17
+ */
18
+ connections: WorkbenchContext['connections'];
19
+ /**
20
+ * Absolute path to the simulator preload bundle. Only consumed by the
21
+ * native-host simulator WebContentsView (`attachNativeSimulator`); the
22
+ * default `<webview>` path gets its preload from the session-registered
23
+ * frame preload instead. Optional so partial test contexts compile.
24
+ */
25
+ preloadPath?: string;
10
26
  panels: string[];
11
27
  notify: WorkbenchContext['notify'];
28
+ bridge?: WorkbenchContext['bridge'];
29
+ /**
30
+ * Native-host network forwarder. `attachNativeSimulator` hands it the freshly
31
+ * created simulator WebContentsView (`attachSimulator`) so it can attach the
32
+ * CDP debugger, and the DevTools front-end host wc (`setDevtoolsHost`) so it can
33
+ * inject that WCV's Network.* events into the native Network tab (service-host
34
+ * console line is the fallback). Optional so partial test contexts compile.
35
+ */
36
+ networkForward?: WorkbenchContext['networkForward'];
37
+ /**
38
+ * Per-context registry of host-registered simulator custom APIs. The
39
+ * native-host simulator is a top-level WebContentsView with no embedder
40
+ * renderer, so `attachNativeSimulator` dispatches the simulator-side
41
+ * `__diminaCustomApis` bridge straight to this registry (the default
42
+ * `<webview>` path proxies through the trusted main renderer instead).
43
+ * Optional so partial test contexts compile.
44
+ */
45
+ simulatorApis?: WorkbenchContext['simulatorApis'];
12
46
  /**
13
47
  * Header bar height in px, used to position overlay views below the header.
14
48
  * Optional here so partial test contexts compile; `createWorkbenchContext`
@@ -20,13 +54,14 @@ export interface ViewManagerContext {
20
54
  * Unified lifecycle manager for Electron WebContentsView overlays.
21
55
  *
22
56
  * Owns creation / attachment / detachment / positioning / destruction of
23
- * every overlay view hung off the main window's contentView (simulator,
24
- * settings, popover). All `new WebContentsView`, `addChildView`,
57
+ * every overlay view hung off the main window's contentView (simulator
58
+ * DevTools, settings, popover). All `new WebContentsView`, `addChildView`,
25
59
  * `removeChildView`, `webContents.destroy()` and overlay `setBounds` calls
26
60
  * should live here — IPC handlers just call into the manager.
27
61
  *
28
- * The main window's own renderer (added in `windows/main-window/create.ts`)
29
- * is the main content root and is not an overlay, so it is not managed here.
62
+ * The code editor is NOT an overlay: it renders as an in-renderer
63
+ * `<MonacoEditor/>` React component inside the main window. The main
64
+ * window's own renderer is the content root and is not managed here.
30
65
  */
31
66
  export interface ViewManager {
32
67
  /**
@@ -35,6 +70,19 @@ export interface ViewManager {
35
70
  * tab; otherwise the view is created but not added yet).
36
71
  */
37
72
  attachSimulator(simWcId: number, simWidth: number): void;
73
+ /**
74
+ * NATIVE-HOST ONLY. Create the simulator itself as a top-level
75
+ * WebContentsView (not a renderer `<webview>` guest) loading `simulatorUrl`,
76
+ * position it in the simulator panel region, and treat its webContents as
77
+ * THE simulator webContents (so `getSimulatorWebContents` resolves it and the
78
+ * spawn/SIMULATOR_EVENTS pipeline flows through it). This is required because
79
+ * Electron force-disables the `<webview>` tag inside a webview guest, so the
80
+ * default `<webview>`-in-`<webview>` topology can never host DeviceShell's
81
+ * per-page render-host `<webview>`s. A top-level WebContentsView's webContents
82
+ * is NOT a guest and CAN host them. Then wires the DevTools/console view on
83
+ * top of it via `attachSimulator`. No-op (logs) when `preloadPath` is unset.
84
+ */
85
+ attachNativeSimulator(simulatorUrl: string, simWidth: number): void;
38
86
  /**
39
87
  * Destroy and null out the simulator view (e.g. on simulator detach).
40
88
  * Also destroys the cached settings view and hides the popover —
@@ -74,10 +122,100 @@ export interface ViewManager {
74
122
  getSettingsWebContentsId(): number | null;
75
123
  /** Return the webContents ID of the popover overlay if alive, else null. */
76
124
  getPopoverWebContentsId(): number | null;
125
+ /**
126
+ * Return the webContents ID of the host-toolbar overlay if alive, else null.
127
+ * The host-toolbar WCV is the one overlay whose OWN renderer drives an IPC
128
+ * channel back to main (the reverse size-advertiser), so the sender policy
129
+ * must trust its id — see `createWorkbenchSenderPolicy`.
130
+ */
131
+ getHostToolbarWebContentsId(): number | null;
132
+ /**
133
+ * NATIVE-HOST ONLY. Position the simulator content WebContentsView over the
134
+ * renderer-measured simulator panel REGION rect (the flex:1 placeholder slot,
135
+ * CSS px from the main window content top-left, which maps 1:1 to overlay
136
+ * setBounds DIP) and apply the device zoom. The WCV fills the region as a
137
+ * plain rectangle; DeviceShell draws + scrolls the phone inside. No-op in the
138
+ * default `<webview>` path (`nativeSimulatorView` is null). See
139
+ * `computeNativeSimulatorViewParams`.
140
+ */
141
+ setNativeSimulatorViewBounds(params: {
142
+ x: number;
143
+ y: number;
144
+ width: number;
145
+ height: number;
146
+ zoom: number;
147
+ }): void;
148
+ /**
149
+ * NATIVE-HOST ONLY. Re-push the selected device's CSS `env(safe-area-inset-*)`
150
+ * override to every attached render-host guest (on device change). New guests
151
+ * pick it up automatically when they attach (`did-attach-webview`).
152
+ */
153
+ reapplySafeArea(device: NativeDeviceInfo | null): void;
77
154
  /** Update lastSimWidth; reposition simulator + settings if they are added. */
78
155
  resize(simWidth: number): void;
79
156
  /** Show or hide the simulator overlay based on visibility flag. */
80
157
  setVisible(visible: boolean, simWidth: number): void;
158
+ /**
159
+ * Apply a renderer-measured rectangle to the simulator's Chromium
160
+ * DevTools overlay view. `{ width: 0, height: 0 }` is treated as "hide" —
161
+ * the view is removed from the contentView but its WebContents is kept
162
+ * alive so re-showing it doesn't re-pay the DevTools bootstrap.
163
+ */
164
+ setSimulatorDevtoolsBounds(bounds: {
165
+ x: number;
166
+ y: number;
167
+ width: number;
168
+ height: number;
169
+ }): void;
170
+ /**
171
+ * Apply a renderer-measured rectangle to the host-controllable toolbar
172
+ * WebContentsView (the strip above the devtools header). Forward anchor,
173
+ * mirroring `setSimulatorDevtoolsBounds`. `{ width: 0, height: 0 }` is
174
+ * treated as "hide" — the view is removed from the contentView but its
175
+ * WebContents (and the host's loaded content) stays alive. Lazily creates
176
+ * the view on the first non-empty rect.
177
+ */
178
+ setHostToolbarBounds(bounds: {
179
+ x: number;
180
+ y: number;
181
+ width: number;
182
+ height: number;
183
+ }): void;
184
+ /**
185
+ * Reverse size-advertiser sink: the toolbar WCV's own renderer advertises
186
+ * its intrinsic content height (block-axis extent); we store it and push it
187
+ * to the main-window renderer so the placeholder div resizes (closing the
188
+ * dynamic-height loop).
189
+ */
190
+ setHostToolbarHeight(extent: number): void;
191
+ /**
192
+ * Host-facing control surface for the toolbar WebContentsView. The downstream
193
+ * host loads its own content into it (`loadURL` / `loadFile`) and fully drives
194
+ * it. Lazily creates the underlying view on the first load call.
195
+ */
196
+ readonly hostToolbar: HostToolbarControl;
197
+ }
198
+ /**
199
+ * The control object the downstream host uses to own the toolbar
200
+ * WebContentsView. Lazily backed by the view-manager's `hostToolbarView`.
201
+ */
202
+ export interface HostToolbarControl {
203
+ /** Load a URL into the toolbar view (lazy-creates the view). */
204
+ loadURL(url: string): Promise<void>;
205
+ /** Load a local file into the toolbar view (lazy-creates the view). */
206
+ loadFile(path: string): Promise<void>;
207
+ /** The toolbar view's live WebContents, or null if not yet created/destroyed. */
208
+ readonly webContents: WebContents | null;
209
+ /** Remove the toolbar view from the contentView and reset it (kept alive). */
210
+ hide(): void;
211
+ /**
212
+ * Override the preload used when the toolbar view is first created. The
213
+ * host-shell (`launch(config)`) passes the host-controlled
214
+ * `toolbar.preloadPath` here; the host owns the bridge (it calls
215
+ * `exposeWorkbenchBridge()` itself). Must be set before the first
216
+ * `loadURL`/`loadFile`; `null` restores the built-in size-advertiser preload.
217
+ */
218
+ setPreloadPath(path: string | null): void;
81
219
  }
82
220
  /**
83
221
  * Build a ViewManager bound to the given context. The returned object is the