@comecaramelos/dsh-chrome-mcp 0.0.1 → 1.0.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.
Files changed (171) hide show
  1. package/README.md +22 -78
  2. package/assets/dsh-chrome-mcp-social.png +0 -0
  3. package/assets/icon.svg +71 -0
  4. package/assets/prelaunch-windows-chrome.html +277 -0
  5. package/lib/client.js +1433 -568
  6. package/lib/client.js.map +7 -0
  7. package/lib/host/apply.d.ts +3 -0
  8. package/lib/host/apply.d.ts.map +1 -0
  9. package/lib/host/apply.js +31 -0
  10. package/lib/host/apply.js.map +1 -0
  11. package/lib/host/bridge.d.ts +65 -0
  12. package/lib/host/bridge.d.ts.map +1 -0
  13. package/lib/host/bridge.js +176 -0
  14. package/lib/host/bridge.js.map +1 -0
  15. package/lib/host/catalog.d.ts +31 -0
  16. package/lib/host/catalog.d.ts.map +1 -0
  17. package/lib/host/catalog.js +92 -0
  18. package/lib/host/catalog.js.map +1 -0
  19. package/lib/host/constants.d.ts +229 -0
  20. package/lib/host/constants.d.ts.map +1 -0
  21. package/lib/host/constants.js +242 -0
  22. package/lib/host/constants.js.map +1 -0
  23. package/lib/host/controller/bridge-run.d.ts +38 -0
  24. package/lib/host/controller/bridge-run.d.ts.map +1 -0
  25. package/lib/host/controller/bridge-run.js +69 -0
  26. package/lib/host/controller/bridge-run.js.map +1 -0
  27. package/lib/host/controller/captures.d.ts +22 -0
  28. package/lib/host/controller/captures.d.ts.map +1 -0
  29. package/lib/host/controller/captures.js +60 -0
  30. package/lib/host/controller/captures.js.map +1 -0
  31. package/lib/host/controller/commits.d.ts +4 -0
  32. package/lib/host/controller/commits.d.ts.map +1 -0
  33. package/lib/host/controller/commits.js +75 -0
  34. package/lib/host/controller/commits.js.map +1 -0
  35. package/lib/host/controller/controller.d.ts +40 -0
  36. package/lib/host/controller/controller.d.ts.map +1 -0
  37. package/lib/host/controller/controller.js +167 -0
  38. package/lib/host/controller/controller.js.map +1 -0
  39. package/lib/host/controller/index.d.ts +26 -0
  40. package/lib/host/controller/index.d.ts.map +1 -0
  41. package/lib/host/controller/index.js +25 -0
  42. package/lib/host/controller/index.js.map +1 -0
  43. package/lib/host/controller/notes.d.ts +26 -0
  44. package/lib/host/controller/notes.d.ts.map +1 -0
  45. package/lib/host/controller/notes.js +49 -0
  46. package/lib/host/controller/notes.js.map +1 -0
  47. package/lib/host/controller/persist.d.ts +9 -0
  48. package/lib/host/controller/persist.d.ts.map +1 -0
  49. package/lib/host/controller/persist.js +51 -0
  50. package/lib/host/controller/persist.js.map +1 -0
  51. package/lib/host/controller/runs.d.ts +56 -0
  52. package/lib/host/controller/runs.d.ts.map +1 -0
  53. package/lib/host/controller/runs.js +211 -0
  54. package/lib/host/controller/runs.js.map +1 -0
  55. package/lib/host/controller/state.d.ts +70 -0
  56. package/lib/host/controller/state.d.ts.map +1 -0
  57. package/lib/host/controller/state.js +2 -0
  58. package/lib/host/controller/state.js.map +1 -0
  59. package/lib/host/controller/windows-run.d.ts +9 -0
  60. package/lib/host/controller/windows-run.d.ts.map +1 -0
  61. package/lib/host/controller/windows-run.js +78 -0
  62. package/lib/host/controller/windows-run.js.map +1 -0
  63. package/lib/host/discovery/candidates.d.ts +37 -0
  64. package/lib/host/discovery/candidates.d.ts.map +1 -0
  65. package/lib/host/discovery/candidates.js +56 -0
  66. package/lib/host/discovery/candidates.js.map +1 -0
  67. package/lib/host/discovery/index.d.ts +18 -0
  68. package/lib/host/discovery/index.d.ts.map +1 -0
  69. package/lib/host/discovery/index.js +18 -0
  70. package/lib/host/discovery/index.js.map +1 -0
  71. package/lib/host/discovery/probe.d.ts +18 -0
  72. package/lib/host/discovery/probe.d.ts.map +1 -0
  73. package/lib/host/discovery/probe.js +97 -0
  74. package/lib/host/discovery/probe.js.map +1 -0
  75. package/lib/host/discovery/scan.d.ts +67 -0
  76. package/lib/host/discovery/scan.d.ts.map +1 -0
  77. package/lib/host/discovery/scan.js +169 -0
  78. package/lib/host/discovery/scan.js.map +1 -0
  79. package/lib/host/flags.d.ts +42 -0
  80. package/lib/host/flags.d.ts.map +1 -0
  81. package/lib/host/flags.js +118 -0
  82. package/lib/host/flags.js.map +1 -0
  83. package/lib/host/platform.d.ts +38 -0
  84. package/lib/host/platform.d.ts.map +1 -0
  85. package/lib/host/platform.js +64 -0
  86. package/lib/host/platform.js.map +1 -0
  87. package/lib/host/plugin-meta.d.ts +12 -0
  88. package/lib/host/plugin-meta.d.ts.map +1 -0
  89. package/lib/host/plugin-meta.js +12 -0
  90. package/lib/host/plugin-meta.js.map +1 -0
  91. package/lib/host/schema.d.ts +307 -0
  92. package/lib/host/schema.d.ts.map +1 -0
  93. package/lib/host/schema.js +171 -0
  94. package/lib/host/schema.js.map +1 -0
  95. package/lib/host/settings.d.ts +9 -0
  96. package/lib/host/settings.d.ts.map +1 -0
  97. package/lib/host/settings.js +70 -0
  98. package/lib/host/settings.js.map +1 -0
  99. package/lib/host/status.d.ts +28 -0
  100. package/lib/host/status.d.ts.map +1 -0
  101. package/lib/host/status.js +60 -0
  102. package/lib/host/status.js.map +1 -0
  103. package/lib/host/tool.d.ts +59 -0
  104. package/lib/host/tool.d.ts.map +1 -0
  105. package/lib/host/tool.js +51 -0
  106. package/lib/host/tool.js.map +1 -0
  107. package/lib/host/types/config.d.ts +47 -0
  108. package/lib/host/types/config.d.ts.map +1 -0
  109. package/lib/host/types/config.js +2 -0
  110. package/lib/host/types/config.js.map +1 -0
  111. package/lib/host/types/executable.d.ts +30 -0
  112. package/lib/host/types/executable.d.ts.map +1 -0
  113. package/lib/host/types/executable.js +9 -0
  114. package/lib/host/types/executable.js.map +1 -0
  115. package/lib/host/types/index.d.ts +23 -0
  116. package/lib/host/types/index.d.ts.map +1 -0
  117. package/lib/host/types/index.js +2 -0
  118. package/lib/host/types/index.js.map +1 -0
  119. package/lib/host/types/plugin.d.ts +38 -0
  120. package/lib/host/types/plugin.d.ts.map +1 -0
  121. package/lib/host/types/plugin.js +10 -0
  122. package/lib/host/types/plugin.js.map +1 -0
  123. package/lib/host/types/settings.d.ts +127 -0
  124. package/lib/host/types/settings.d.ts.map +1 -0
  125. package/lib/host/types/settings.js +2 -0
  126. package/lib/host/types/settings.js.map +1 -0
  127. package/lib/host/types/stderr.d.ts +53 -0
  128. package/lib/host/types/stderr.d.ts.map +1 -0
  129. package/lib/host/types/stderr.js +9 -0
  130. package/lib/host/types/stderr.js.map +1 -0
  131. package/lib/host/types/windows.d.ts +39 -0
  132. package/lib/host/types/windows.d.ts.map +1 -0
  133. package/lib/host/types/windows.js +9 -0
  134. package/lib/host/types/windows.js.map +1 -0
  135. package/lib/host/values.d.ts +89 -0
  136. package/lib/host/values.d.ts.map +1 -0
  137. package/lib/host/values.js +212 -0
  138. package/lib/host/values.js.map +1 -0
  139. package/lib/host/windows/connect-flags.d.ts +16 -0
  140. package/lib/host/windows/connect-flags.d.ts.map +1 -0
  141. package/lib/host/windows/connect-flags.js +67 -0
  142. package/lib/host/windows/connect-flags.js.map +1 -0
  143. package/lib/host/windows/index.d.ts +31 -0
  144. package/lib/host/windows/index.d.ts.map +1 -0
  145. package/lib/host/windows/index.js +30 -0
  146. package/lib/host/windows/index.js.map +1 -0
  147. package/lib/host/windows/landing.d.ts +47 -0
  148. package/lib/host/windows/landing.d.ts.map +1 -0
  149. package/lib/host/windows/landing.js +174 -0
  150. package/lib/host/windows/landing.js.map +1 -0
  151. package/lib/host/windows/link.d.ts +11 -0
  152. package/lib/host/windows/link.d.ts.map +1 -0
  153. package/lib/host/windows/link.js +52 -0
  154. package/lib/host/windows/link.js.map +1 -0
  155. package/lib/host/windows/paths.d.ts +43 -0
  156. package/lib/host/windows/paths.d.ts.map +1 -0
  157. package/lib/host/windows/paths.js +121 -0
  158. package/lib/host/windows/paths.js.map +1 -0
  159. package/lib/host/windows/run.d.ts +74 -0
  160. package/lib/host/windows/run.d.ts.map +1 -0
  161. package/lib/host/windows/run.js +210 -0
  162. package/lib/host/windows/run.js.map +1 -0
  163. package/lib/host/windows/spawn.d.ts +22 -0
  164. package/lib/host/windows/spawn.d.ts.map +1 -0
  165. package/lib/host/windows/spawn.js +73 -0
  166. package/lib/host/windows/spawn.js.map +1 -0
  167. package/lib/index.d.ts +86 -0
  168. package/lib/index.d.ts.map +1 -0
  169. package/lib/index.js +72 -625
  170. package/lib/index.js.map +1 -0
  171. package/package.json +26 -4
package/README.md CHANGED
@@ -1,78 +1,47 @@
1
1
  # @comecaramelos/dsh-chrome-mcp
2
2
 
3
- DSH plugin that connects the **Chrome DevTools MCP server**
4
- ([`chrome-devtools-mcp`](https://github.com/ChromeDevTools/chrome-devtools-mcp),
5
- launched as `npx -y chrome-devtools-mcp@latest [extraFlags]`) as an MCP
6
- server, with an **extra-flags editor in the Web GUI** — instead of hardcoding
7
- `extraFlags` in the config row.
8
-
9
- Architecture notes, hard constraints and internals: see `AGENTS.md`.
10
-
11
- ## Prerequisite: Google Chrome must be installed
12
-
13
- The upstream server does **not** download Chrome — it drives the Google Chrome
14
- already installed on the machine (<https://www.google.com/chrome/?platform=linux>).
15
- The standard system locations are auto-discovered; pin a non-standard install
16
- with `chromePath` (one executable) or `chromePaths` (candidate list). When
17
- nothing is found, the card's status dot turns red with "Chrome executable not
18
- found".
19
-
20
- **WSL users:** install the Chrome for **Linux inside the distro** — the
21
- Windows-side `chrome.exe` cannot be driven across the WSL boundary (see
22
- "Running under WSL").
3
+ Connects DSH to [Chrome DevTools MCP](https://github.com/ChromeDevTools/chrome-devtools-mcp), including Windows Chrome from WSL.
23
4
 
24
5
  ## Install
25
6
 
26
- From npm:
7
+ [Google Chrome](https://www.google.com/chrome/) must be installed: the MCP server does not download it.
27
8
 
28
9
  ```sh
29
10
  dsh plugin --profile web add @comecaramelos/dsh-chrome-mcp
30
11
  ```
31
12
 
32
- That installs the package and activates its bundle patch layer, which inserts
33
- the bridge row for you (bundle layers apply before the profile's own
34
- `cordis.patch.yml`, and a later row with the same `id` wins):
13
+ The plugin includes `--no-usage-statistics` and `--no-performance-crux` by default. Use the executable picker to select a browser found on your host.
35
14
 
36
- ```yaml
37
- - insert:
38
- - id: mcp-chrome
39
- name: '@comecaramelos/dsh-chrome-mcp'
40
- config:
41
- serverName: chrome
42
- ```
15
+ ## Windows Chrome from WSL
16
+
17
+ Requirements:
43
18
 
44
- The row ships with the defaults (`serverName: chrome`, `extraFlags` =
45
- `--no-usage-statistics`, `--no-performance-crux`). Set `chromePath` /
46
- `chromePaths` on the row only if the automatic discovery is not enough — the
47
- Settings card edits `extraFlags` live.
48
-
49
- Overriding the bundle row: keep your own row in
50
- `$DSH_HOME/profiles/web/cordis.patch.yml` with `id: mcp-chrome`. It replaces
51
- the bundle row completely (full-config replacement, no deep merge) — e.g.
52
- switching a machine-wide bridge to connect mode:
53
-
54
- ```yaml
55
- - id: mcp-chrome
56
- name: '@comecaramelos/dsh-chrome-mcp'
57
- config:
58
- serverName: chrome
59
- extraFlags: ['--browserUrl=http://127.0.0.1:9222']
19
+ The user only needs to add the following line to `.wslconfig`:
60
20
  ```
21
+ networkingMode=mirrored
22
+ ```
23
+ The required Chrome flags are managed by the **Flags WSL** button.
24
+
25
+ A windows executable activates the connect-mode bridge. The executable selector displays `connect mode` instead of probing a local executable.
26
+
27
+ The bridge uses the first available port and gets a dedicated profile (`.chrome-<port>`).
61
28
 
62
- Fallback (WSL + Windows pnpm, where `dsh plugin add` fails to symlink the
63
- package into the profile's `node_modules`):
29
+ ## Manual installation
30
+
31
+ Replace `/path/to/dsh-chrome-mcp` with your local checkout:
64
32
 
65
33
  ```sh
66
34
  mkdir -p ~/.dsh/profiles/web/node_modules/@comecaramelos
67
35
  ln -s /path/to/dsh-chrome-mcp ~/.dsh/profiles/web/node_modules/@comecaramelos/dsh-chrome-mcp
68
36
  ```
69
37
 
70
- Then list the package in the profile manifest
71
- (`~/.dsh/profiles/web/package.json`) alongside the other bundles — this is
72
- exactly what `dsh plugin add` records:
38
+ Add the dependency and bundle to `~/.dsh/profiles/web/package.json`, preserving existing entries:
73
39
 
74
40
  ```json
75
41
  {
42
+ "dependencies": {
43
+ "@comecaramelos/dsh-chrome-mcp": "link:/path/to/dsh-chrome-mcp"
44
+ },
76
45
  "dsh": {
77
46
  "profile": {
78
47
  "bundles": [
@@ -85,31 +54,6 @@ exactly what `dsh plugin add` records:
85
54
  }
86
55
  ```
87
56
 
88
- Do **not** add a `dependencies` entry for the checkout here: a `file:` spec
89
- makes the Windows-side pnpm re-link the package and fail with `
90
- ERR_PNPM_PACKAGE_MANAGER_SYMLINK_FAILED`. With only the bundle entry, the
91
- `mcp-chrome` row above applies unchanged.
92
-
93
- ## Why this over the default config
94
-
95
- - **Extra-flags editor in Settings** — one flag per line, saved per user;
96
- invalid entries are rejected by the host and shown on the card. Defaults:
97
- `--no-usage-statistics`, `--no-performance-crux`.
98
- - **Hot reconnect** — saving flags re-launches the bridge in place; no
99
- restart needed.
100
- - **Status dot** — the card's single error surface: a red dot whose tooltip
101
- holds the full last error (missing executable, bridge connection failure,
102
- failed browser tool call). It clears itself once the bridge is healthy
103
- again, and lights up on a Chrome-less machine at startup without any user
104
- action.
105
- - **Chrome version + Re-check** — the last discovered version line, plus a
106
- button to re-run the executable probe / discovery.
107
- - **Configuration guide** — the upstream docs message with its link:
108
- [configuration](https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/configuration.md).
109
- - **Flags precedence**: UI selection > `DSH_CHROME_MCP_FLAGS` env var >
110
- row config `extraFlags` > defaults. Seed a machine default via env,
111
- switch per-run from the UI.
112
-
113
57
  ---
114
58
 
115
- [`CONTRIBUTING`](CONTRIBUTING.md) | [`LICENSE`](LICENSE.md)
59
+ [Contributing](CONTRIBUTING.md) · [License](LICENSE.md)
Binary file
@@ -0,0 +1,71 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg"
2
+ viewBox="0 0 410 393"
3
+ fill="none"
4
+ role="img"
5
+ aria-labelledby="title">
6
+ <title id="title">DeepSeek Chromium</title>
7
+
8
+ <style>
9
+ .head { fill: #1D5CCC; }
10
+ .body, .core { fill: #3B8EF8; }
11
+ .belly { fill: #86C7FA; }
12
+
13
+ @media (prefers-color-scheme: dark) {
14
+ .head { fill: #427CE0; }
15
+ .body, .core { fill: #579FFF; }
16
+ .belly { fill: #9DD4FF; }
17
+ }
18
+ </style>
19
+
20
+ <defs>
21
+ <mask id="eye-cutout"
22
+ maskUnits="userSpaceOnUse"
23
+ x="0" y="0" width="410" height="393">
24
+ <rect width="410" height="393" fill="white"/>
25
+ <circle cx="62" cy="224" r="10.7" fill="black"/>
26
+ </mask>
27
+ </defs>
28
+
29
+ <!-- Cabeza y segmento superior -->
30
+ <path class="head"
31
+ mask="url(#eye-cutout)"
32
+ d="M16 231
33
+ C12 219 28 187 53 163
34
+ C82 135 116 115 147 109
35
+ C189 101 219 115 259 152
36
+ C229 154 189 158 162 168
37
+ C135 178 118 195 112 217
38
+ C106 238 112 260 125 276
39
+ C88 272 48 258 20 238
40
+ C17 236 16 234 16 231Z"/>
41
+
42
+ <!-- Cuerpo y cola -->
43
+ <path class="body"
44
+ d="M184 174
45
+ C211 165 239 166 260 161
46
+ C294 154 315 137 321 115
47
+ C323 108 321 107 314 105
48
+ C282 96 263 68 260 38
49
+ C259 34 260 33 264 36
50
+ C282 48 303 39 320 54
51
+ C325 57 329 61 332 65
52
+ C343 36 374 45 391 24
53
+ C393 21 395 21 395 27
54
+ C402 63 387 89 359 104
55
+ C353 107 351 109 353 117
56
+ C364 202 317 305 239 337
57
+ C222 344 204 348 188 351
58
+ C213 320 231 282 233 246
59
+ C236 211 217 184 184 174Z"/>
60
+
61
+ <!-- Segmento inferior -->
62
+ <path class="belly"
63
+ d="M19 248
64
+ C54 269 92 281 127 284
65
+ C154 302 186 300 213 277
66
+ C204 305 189 333 171 353
67
+ C104 355 41 318 19 248Z"/>
68
+
69
+ <!-- Núcleo circular -->
70
+ <circle class="core" cx="171" cy="235" r="49"/>
71
+ </svg>
@@ -0,0 +1,277 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20410%20393%22%20fill=%22none%22%20role=%22img%22%20aria-labelledby=%22title%22%3E%3Ctitle%20id=%22title%22%3EDeepSeek%20Chromium%3C/title%3E%3Cstyle%3E.head%20%7B%20fill:%20%231D5CCC;%20%7D%20.body,%20.core%20%7B%20fill:%20%233B8EF8;%20%7D%20.belly%20%7B%20fill:%20%2386C7FA;%20%7D%20%40media%20%28prefers-color-scheme:%20dark%29%20%7B%20.head%20%7B%20fill:%20%23427CE0;%20%7D%20.body,%20.core%20%7B%20fill:%20%23579FFF;%20%7D%20.belly%20%7B%20fill:%20%239DD4FF;%20%7D%20%7D%3C/style%3E%3Cdefs%3E%3Cmask%20id=%22eye-cutout%22%20maskUnits=%22userSpaceOnUse%22%20x=%220%22%20y=%220%22%20width=%22410%22%20height=%22393%22%3E%3Crect%20width=%22410%22%20height=%22393%22%20fill=%22white%22/%3E%3Ccircle%20cx=%2262%22%20cy=%22224%22%20r=%2210.7%22%20fill=%22black%22/%3E%3C/mask%3E%3C/defs%3E%3C%21--%20Cabeza%20y%20segmento%20superior%20--%3E%3Cpath%20class=%22head%22%20mask=%22url%28%23eye-cutout%29%22%20d=%22M16%20231%20C12%20219%2028%20187%2053%20163%20C82%20135%20116%20115%20147%20109%20C189%20101%20219%20115%20259%20152%20C229%20154%20189%20158%20162%20168%20C135%20178%20118%20195%20112%20217%20C106%20238%20112%20260%20125%20276%20C88%20272%2048%20258%2020%20238%20C17%20236%2016%20234%2016%20231Z%22/%3E%3C%21--%20Cuerpo%20y%20cola%20--%3E%3Cpath%20class=%22body%22%20d=%22M184%20174%20C211%20165%20239%20166%20260%20161%20C294%20154%20315%20137%20321%20115%20C323%20108%20321%20107%20314%20105%20C282%2096%20263%2068%20260%2038%20C259%2034%20260%2033%20264%2036%20C282%2048%20303%2039%20320%2054%20C325%2057%20329%2061%20332%2065%20C343%2036%20374%2045%20391%2024%20C393%2021%20395%2021%20395%2027%20C402%2063%20387%2089%20359%20104%20C353%20107%20351%20109%20353%20117%20C364%20202%20317%20305%20239%20337%20C222%20344%20204%20348%20188%20351%20C213%20320%20231%20282%20233%20246%20C236%20211%20217%20184%20184%20174Z%22/%3E%3C%21--%20Segmento%20inferior%20--%3E%3Cpath%20class=%22belly%22%20d=%22M19%20248%20C54%20269%2092%20281%20127%20284%20C154%20302%20186%20300%20213%20277%20C204%20305%20189%20333%20171%20353%20C104%20355%2041%20318%2019%20248Z%22/%3E%3C%21--%20N%C3%BAcleo%20circular%20--%3E%3Ccircle%20class=%22core%22%20cx=%22171%22%20cy=%22235%22%20r=%2249%22/%3E%3C/svg%3E" />
7
+ <title>DSH Chrome MCP bridge</title>
8
+ <style>
9
+ :root {
10
+ color-scheme: light dark;
11
+ --bg: #f5f6f8;
12
+ --card: #ffffff;
13
+ --ink: #1f2328;
14
+ --muted: #5b6572;
15
+ --line: #d7dbe1;
16
+ --accent: #2f6f4f;
17
+ --code: #f2f4f6;
18
+ }
19
+
20
+ @media (prefers-color-scheme: dark) {
21
+ :root {
22
+ --bg: #16191d;
23
+ --card: #1f2328;
24
+ --ink: #e8eaed;
25
+ --muted: #a8b1bd;
26
+ --line: #343a41;
27
+ --accent: #6fd39a;
28
+ --code: #272c32;
29
+ }
30
+ }
31
+
32
+ * {
33
+ box-sizing: border-box;
34
+ }
35
+
36
+ body {
37
+ margin: 0;
38
+ padding: 2rem 1rem;
39
+ background: var(--bg);
40
+ color: var(--ink);
41
+ font-family: system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, sans-serif;
42
+ font-size: 15px;
43
+ line-height: 1.55;
44
+ }
45
+
46
+ main {
47
+ max-width: 46rem;
48
+ margin: 0 auto;
49
+ padding: 2rem;
50
+ background: var(--card);
51
+ border: 1px solid var(--line);
52
+ border-radius: 12px;
53
+ }
54
+
55
+ header {
56
+ display: flex;
57
+ align-items: flex-start;
58
+ gap: 1rem;
59
+ margin-bottom: 1.5rem;
60
+ }
61
+
62
+ .mark {
63
+ flex: none;
64
+ display: grid;
65
+ place-items: center;
66
+ width: 3rem;
67
+ height: 3rem;
68
+ }
69
+
70
+ .mark svg {
71
+ display: block;
72
+ width: 100%;
73
+ height: 100%;
74
+ }
75
+
76
+ h1 {
77
+ margin: 0 0 0.35rem;
78
+ font-size: 1.4rem;
79
+ line-height: 1.25;
80
+ }
81
+
82
+ h2 {
83
+ margin: 1.75rem 0 0.5rem;
84
+ font-size: 1rem;
85
+ letter-spacing: 0.01em;
86
+ text-transform: uppercase;
87
+ color: var(--muted);
88
+ }
89
+
90
+ p {
91
+ margin: 0 0 0.9rem;
92
+ }
93
+
94
+ p.lede {
95
+ margin: 0;
96
+ }
97
+
98
+ .notice {
99
+ margin: 1.5rem 0;
100
+ padding: 0.75rem 1rem;
101
+ border-left: 3px solid var(--accent);
102
+ border-radius: 0 8px 8px 0;
103
+ background: var(--code);
104
+ }
105
+
106
+ .notice:last-child {
107
+ margin-bottom: 0;
108
+ }
109
+
110
+ ul {
111
+ margin: 0 0 1rem;
112
+ padding-left: 1.15rem;
113
+ }
114
+
115
+ li {
116
+ margin-bottom: 0.4rem;
117
+ }
118
+
119
+ dl {
120
+ display: grid;
121
+ gap: 1rem;
122
+ margin: 0 0 1.5rem;
123
+ padding: 1rem 1.15rem;
124
+ background: var(--code);
125
+ border-radius: 8px;
126
+ }
127
+
128
+ dt {
129
+ color: var(--muted);
130
+ font-size: 0.85rem;
131
+ margin-bottom: 0.15rem;
132
+ }
133
+
134
+ dd {
135
+ margin: 0;
136
+ overflow-wrap: anywhere;
137
+ }
138
+
139
+ code {
140
+ padding: 0.1rem 0.3rem;
141
+ background: var(--code);
142
+ border-radius: 4px;
143
+ font-family: ui-monospace, SFMono-Regular, "Cascadia Mono", Consolas, monospace;
144
+ font-size: 0.88em;
145
+ overflow-wrap: anywhere;
146
+ }
147
+
148
+ dd code {
149
+ background: transparent;
150
+ padding: 0;
151
+ }
152
+
153
+ a {
154
+ color: var(--accent);
155
+ }
156
+
157
+ footer {
158
+ margin-top: 1.75rem;
159
+ padding-top: 1rem;
160
+ border-top: 1px solid var(--line);
161
+ color: var(--muted);
162
+ font-size: 0.85rem;
163
+ }
164
+ </style>
165
+ </head>
166
+ <body>
167
+ <main>
168
+ <header>
169
+ <span class="mark" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 410 393" fill="none">
170
+ <style>
171
+ .head { fill: #1d5ccc; }
172
+ .body, .core { fill: #3b8ef8; }
173
+ .belly { fill: #86c7fa; }
174
+
175
+ @media (prefers-color-scheme: dark) {
176
+ .head { fill: #427ce0; }
177
+ .body, .core { fill: #579fff; }
178
+ .belly { fill: #9dd4ff; }
179
+ }
180
+ </style>
181
+ <defs>
182
+ <mask id="eye-cutout" maskUnits="userSpaceOnUse" x="0" y="0" width="410" height="393">
183
+ <rect width="410" height="393" fill="white" />
184
+ <circle cx="62" cy="224" r="10.7" fill="black" />
185
+ </mask>
186
+ </defs>
187
+ <!-- Cabeza y segmento superior -->
188
+ <path class="head" mask="url(#eye-cutout)" d="M16 231
189
+ C12 219 28 187 53 163
190
+ C82 135 116 115 147 109
191
+ C189 101 219 115 259 152
192
+ C229 154 189 158 162 168
193
+ C135 178 118 195 112 217
194
+ C106 238 112 260 125 276
195
+ C88 272 48 258 20 238
196
+ C17 236 16 234 16 231Z" />
197
+ <!-- Cuerpo y cola -->
198
+ <path class="body" d="M184 174
199
+ C211 165 239 166 260 161
200
+ C294 154 315 137 321 115
201
+ C323 108 321 107 314 105
202
+ C282 96 263 68 260 38
203
+ C259 34 260 33 264 36
204
+ C282 48 303 39 320 54
205
+ C325 57 329 61 332 65
206
+ C343 36 374 45 391 24
207
+ C393 21 395 21 395 27
208
+ C402 63 387 89 359 104
209
+ C353 107 351 109 353 117
210
+ C364 202 317 305 239 337
211
+ C222 344 204 348 188 351
212
+ C213 320 231 282 233 246
213
+ C236 211 217 184 184 174Z" />
214
+ <!-- Segmento inferior -->
215
+ <path class="belly" d="M19 248
216
+ C54 269 92 281 127 284
217
+ C154 302 186 300 213 277
218
+ C204 305 189 333 171 353
219
+ C104 355 41 318 19 248Z" />
220
+ <!-- Núcleo circular -->
221
+ <circle class="core" cx="171" cy="235" r="49" />
222
+ </svg></span>
223
+ <div>
224
+ <h1>This Chrome window is driven by DSH</h1>
225
+ <p class="lede">
226
+ This Chrome window was opened by the
227
+ <a href="https://github.com/ComeCaramelos/dsh-chrome-mcp"><code>@comecaramelos/dsh-chrome-mcp</code></a>
228
+ plugin from DSH, to allow the connection from WSL.
229
+ </p>
230
+ </div>
231
+ </header>
232
+
233
+ <p class="notice" role="note">
234
+ <strong>Keep this window open.</strong> It is not a browsing session you started — closing it drops the debugging
235
+ session, and the agent has to open a new one. The plugin never closes it: closing it is yours to do.
236
+ </p>
237
+
238
+ <h2>Why this window exists</h2>
239
+ <p>
240
+ A plugin running inside DSH on WSL started this browser on the Windows side so an agent can drive it over the
241
+ DevTools debugging protocol. The bridge cannot launch the browser itself: a Windows <code>chrome.exe</code> started
242
+ across the WSL interop boundary cannot carry its debugging pipes, so the only working Windows path is to open the
243
+ window here and have the bridge connect to it.
244
+ </p>
245
+ <p>
246
+ Nothing is browsed, submitted or uploaded on its own — every action comes from a tool call.
247
+ </p>
248
+
249
+ <h2>Session details</h2>
250
+ <dl>
251
+ <div>
252
+ <dt>Connect address</dt>
253
+ <dd><code>{{URL}}</code></dd>
254
+ </div>
255
+ <div>
256
+ <dt>Profile directory</dt>
257
+ <dd><code>{{PROFILE}}</code></dd>
258
+ </div>
259
+ <div>
260
+ <dt>Plugin</dt>
261
+ <dd>
262
+ <a href="https://github.com/ComeCaramelos/dsh-chrome-mcp"><code>@comecaramelos/dsh-chrome-mcp</code></a>
263
+ </dd>
264
+ </div>
265
+ </dl>
266
+ <p>
267
+ The profile directory is a dedicated one created for this run, not your own browser profile: no bookmarks, cookies,
268
+ extensions or history of yours are read by it, and nothing is written to your own profile by this run.
269
+ </p>
270
+
271
+ <footer>
272
+ Opened by <code>@comecaramelos/dsh-chrome-mcp</code> on port {{PORT}} — the plugin never closes this window, so
273
+ closing it is yours to do.
274
+ </footer>
275
+ </main>
276
+ </body>
277
+ </html>