@comecaramelos/dsh-chrome-mcp 0.0.1 → 2.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 (214) hide show
  1. package/README.md +44 -95
  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 +3005 -568
  6. package/lib/client.js.map +7 -0
  7. package/lib/host/apply.d.ts +40 -0
  8. package/lib/host/apply.d.ts.map +1 -0
  9. package/lib/host/apply.js +57 -0
  10. package/lib/host/apply.js.map +1 -0
  11. package/lib/host/bridge.d.ts +74 -0
  12. package/lib/host/bridge.d.ts.map +1 -0
  13. package/lib/host/bridge.js +168 -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/commands/chrome-path.d.ts +4 -0
  20. package/lib/host/commands/chrome-path.d.ts.map +1 -0
  21. package/lib/host/commands/chrome-path.js +65 -0
  22. package/lib/host/commands/chrome-path.js.map +1 -0
  23. package/lib/host/commands/chrome-refresh.d.ts +17 -0
  24. package/lib/host/commands/chrome-refresh.d.ts.map +1 -0
  25. package/lib/host/commands/chrome-refresh.js +37 -0
  26. package/lib/host/commands/chrome-refresh.js.map +1 -0
  27. package/lib/host/commands/index.d.ts +26 -0
  28. package/lib/host/commands/index.d.ts.map +1 -0
  29. package/lib/host/commands/index.js +41 -0
  30. package/lib/host/commands/index.js.map +1 -0
  31. package/lib/host/constants.d.ts +306 -0
  32. package/lib/host/constants.d.ts.map +1 -0
  33. package/lib/host/constants.js +319 -0
  34. package/lib/host/constants.js.map +1 -0
  35. package/lib/host/controller/_trace.d.ts +3 -0
  36. package/lib/host/controller/_trace.d.ts.map +1 -0
  37. package/lib/host/controller/_trace.js +14 -0
  38. package/lib/host/controller/_trace.js.map +1 -0
  39. package/lib/host/controller/bridge-run.d.ts +40 -0
  40. package/lib/host/controller/bridge-run.d.ts.map +1 -0
  41. package/lib/host/controller/bridge-run.js +85 -0
  42. package/lib/host/controller/bridge-run.js.map +1 -0
  43. package/lib/host/controller/captures.d.ts +15 -0
  44. package/lib/host/controller/captures.d.ts.map +1 -0
  45. package/lib/host/controller/captures.js +85 -0
  46. package/lib/host/controller/captures.js.map +1 -0
  47. package/lib/host/controller/commits.d.ts +4 -0
  48. package/lib/host/controller/commits.d.ts.map +1 -0
  49. package/lib/host/controller/commits.js +131 -0
  50. package/lib/host/controller/commits.js.map +1 -0
  51. package/lib/host/controller/connections.d.ts +38 -0
  52. package/lib/host/controller/connections.d.ts.map +1 -0
  53. package/lib/host/controller/connections.js +71 -0
  54. package/lib/host/controller/connections.js.map +1 -0
  55. package/lib/host/controller/controller.d.ts +35 -0
  56. package/lib/host/controller/controller.d.ts.map +1 -0
  57. package/lib/host/controller/controller.js +234 -0
  58. package/lib/host/controller/controller.js.map +1 -0
  59. package/lib/host/controller/index.d.ts +30 -0
  60. package/lib/host/controller/index.d.ts.map +1 -0
  61. package/lib/host/controller/index.js +27 -0
  62. package/lib/host/controller/index.js.map +1 -0
  63. package/lib/host/controller/notes.d.ts +26 -0
  64. package/lib/host/controller/notes.d.ts.map +1 -0
  65. package/lib/host/controller/notes.js +44 -0
  66. package/lib/host/controller/notes.js.map +1 -0
  67. package/lib/host/controller/persist.d.ts +16 -0
  68. package/lib/host/controller/persist.d.ts.map +1 -0
  69. package/lib/host/controller/persist.js +98 -0
  70. package/lib/host/controller/persist.js.map +1 -0
  71. package/lib/host/controller/publish.d.ts +4 -0
  72. package/lib/host/controller/publish.d.ts.map +1 -0
  73. package/lib/host/controller/publish.js +56 -0
  74. package/lib/host/controller/publish.js.map +1 -0
  75. package/lib/host/controller/runs.d.ts +80 -0
  76. package/lib/host/controller/runs.d.ts.map +1 -0
  77. package/lib/host/controller/runs.js +394 -0
  78. package/lib/host/controller/runs.js.map +1 -0
  79. package/lib/host/controller/state.d.ts +172 -0
  80. package/lib/host/controller/state.d.ts.map +1 -0
  81. package/lib/host/controller/state.js +2 -0
  82. package/lib/host/controller/state.js.map +1 -0
  83. package/lib/host/controller/windows-run.d.ts +17 -0
  84. package/lib/host/controller/windows-run.d.ts.map +1 -0
  85. package/lib/host/controller/windows-run.js +109 -0
  86. package/lib/host/controller/windows-run.js.map +1 -0
  87. package/lib/host/discovery/candidates.d.ts +47 -0
  88. package/lib/host/discovery/candidates.d.ts.map +1 -0
  89. package/lib/host/discovery/candidates.js +68 -0
  90. package/lib/host/discovery/candidates.js.map +1 -0
  91. package/lib/host/discovery/index.d.ts +19 -0
  92. package/lib/host/discovery/index.d.ts.map +1 -0
  93. package/lib/host/discovery/index.js +19 -0
  94. package/lib/host/discovery/index.js.map +1 -0
  95. package/lib/host/discovery/probe.d.ts +29 -0
  96. package/lib/host/discovery/probe.d.ts.map +1 -0
  97. package/lib/host/discovery/probe.js +155 -0
  98. package/lib/host/discovery/probe.js.map +1 -0
  99. package/lib/host/discovery/scan.d.ts +72 -0
  100. package/lib/host/discovery/scan.d.ts.map +1 -0
  101. package/lib/host/discovery/scan.js +195 -0
  102. package/lib/host/discovery/scan.js.map +1 -0
  103. package/lib/host/flags.d.ts +65 -0
  104. package/lib/host/flags.d.ts.map +1 -0
  105. package/lib/host/flags.js +186 -0
  106. package/lib/host/flags.js.map +1 -0
  107. package/lib/host/kind.d.ts +45 -0
  108. package/lib/host/kind.d.ts.map +1 -0
  109. package/lib/host/kind.js +251 -0
  110. package/lib/host/kind.js.map +1 -0
  111. package/lib/host/manager.d.ts +21 -0
  112. package/lib/host/manager.d.ts.map +1 -0
  113. package/lib/host/manager.js +113 -0
  114. package/lib/host/manager.js.map +1 -0
  115. package/lib/host/migration.d.ts +26 -0
  116. package/lib/host/migration.d.ts.map +1 -0
  117. package/lib/host/migration.js +127 -0
  118. package/lib/host/migration.js.map +1 -0
  119. package/lib/host/platform.d.ts +38 -0
  120. package/lib/host/platform.d.ts.map +1 -0
  121. package/lib/host/platform.js +64 -0
  122. package/lib/host/platform.js.map +1 -0
  123. package/lib/host/plugin-meta.d.ts +21 -0
  124. package/lib/host/plugin-meta.d.ts.map +1 -0
  125. package/lib/host/plugin-meta.js +21 -0
  126. package/lib/host/plugin-meta.js.map +1 -0
  127. package/lib/host/schema.d.ts +361 -0
  128. package/lib/host/schema.d.ts.map +1 -0
  129. package/lib/host/schema.js +196 -0
  130. package/lib/host/schema.js.map +1 -0
  131. package/lib/host/settings.d.ts +28 -0
  132. package/lib/host/settings.d.ts.map +1 -0
  133. package/lib/host/settings.js +91 -0
  134. package/lib/host/settings.js.map +1 -0
  135. package/lib/host/status.d.ts +25 -0
  136. package/lib/host/status.d.ts.map +1 -0
  137. package/lib/host/status.js +45 -0
  138. package/lib/host/status.js.map +1 -0
  139. package/lib/host/tool.d.ts +65 -0
  140. package/lib/host/tool.d.ts.map +1 -0
  141. package/lib/host/tool.js +52 -0
  142. package/lib/host/tool.js.map +1 -0
  143. package/lib/host/types/config.d.ts +101 -0
  144. package/lib/host/types/config.d.ts.map +1 -0
  145. package/lib/host/types/config.js +2 -0
  146. package/lib/host/types/config.js.map +1 -0
  147. package/lib/host/types/executable.d.ts +35 -0
  148. package/lib/host/types/executable.d.ts.map +1 -0
  149. package/lib/host/types/executable.js +9 -0
  150. package/lib/host/types/executable.js.map +1 -0
  151. package/lib/host/types/index.d.ts +24 -0
  152. package/lib/host/types/index.d.ts.map +1 -0
  153. package/lib/host/types/index.js +2 -0
  154. package/lib/host/types/index.js.map +1 -0
  155. package/lib/host/types/plugin.d.ts +38 -0
  156. package/lib/host/types/plugin.d.ts.map +1 -0
  157. package/lib/host/types/plugin.js +10 -0
  158. package/lib/host/types/plugin.js.map +1 -0
  159. package/lib/host/types/services.d.ts +26 -0
  160. package/lib/host/types/services.d.ts.map +1 -0
  161. package/lib/host/types/services.js +9 -0
  162. package/lib/host/types/services.js.map +1 -0
  163. package/lib/host/types/settings.d.ts +180 -0
  164. package/lib/host/types/settings.d.ts.map +1 -0
  165. package/lib/host/types/settings.js +2 -0
  166. package/lib/host/types/settings.js.map +1 -0
  167. package/lib/host/types/stderr.d.ts +51 -0
  168. package/lib/host/types/stderr.d.ts.map +1 -0
  169. package/lib/host/types/stderr.js +9 -0
  170. package/lib/host/types/stderr.js.map +1 -0
  171. package/lib/host/types/windows.d.ts +39 -0
  172. package/lib/host/types/windows.d.ts.map +1 -0
  173. package/lib/host/types/windows.js +9 -0
  174. package/lib/host/types/windows.js.map +1 -0
  175. package/lib/host/values.d.ts +204 -0
  176. package/lib/host/values.d.ts.map +1 -0
  177. package/lib/host/values.js +404 -0
  178. package/lib/host/values.js.map +1 -0
  179. package/lib/host/windows/connect-flags.d.ts +27 -0
  180. package/lib/host/windows/connect-flags.d.ts.map +1 -0
  181. package/lib/host/windows/connect-flags.js +97 -0
  182. package/lib/host/windows/connect-flags.js.map +1 -0
  183. package/lib/host/windows/index.d.ts +31 -0
  184. package/lib/host/windows/index.d.ts.map +1 -0
  185. package/lib/host/windows/index.js +30 -0
  186. package/lib/host/windows/index.js.map +1 -0
  187. package/lib/host/windows/landing.d.ts +47 -0
  188. package/lib/host/windows/landing.d.ts.map +1 -0
  189. package/lib/host/windows/landing.js +174 -0
  190. package/lib/host/windows/landing.js.map +1 -0
  191. package/lib/host/windows/link.d.ts +11 -0
  192. package/lib/host/windows/link.d.ts.map +1 -0
  193. package/lib/host/windows/link.js +52 -0
  194. package/lib/host/windows/link.js.map +1 -0
  195. package/lib/host/windows/paths.d.ts +64 -0
  196. package/lib/host/windows/paths.d.ts.map +1 -0
  197. package/lib/host/windows/paths.js +148 -0
  198. package/lib/host/windows/paths.js.map +1 -0
  199. package/lib/host/windows/run.d.ts +74 -0
  200. package/lib/host/windows/run.d.ts.map +1 -0
  201. package/lib/host/windows/run.js +211 -0
  202. package/lib/host/windows/run.js.map +1 -0
  203. package/lib/host/windows/spawn.d.ts +22 -0
  204. package/lib/host/windows/spawn.d.ts.map +1 -0
  205. package/lib/host/windows/spawn.js +73 -0
  206. package/lib/host/windows/spawn.js.map +1 -0
  207. package/lib/index.d.ts +102 -0
  208. package/lib/index.d.ts.map +1 -0
  209. package/lib/index.js +102 -636
  210. package/lib/index.js.map +1 -0
  211. package/locale/en.json +6 -0
  212. package/locale/zh.json +6 -0
  213. package/package.json +57 -14
  214. package/cordis.patch.yml +0 -5
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/client/index.ts", "../node_modules/@comecaramelos/dsh-ancesters/lib/client.esm.js", "../src/client/catalog.ts", "../src/client/card/index.ts", "dsh-css:/home/roberto/dev/dsh/dsh-chrome-mcp/src/client/styles/ChromeMcpCard.module.css", "../src/client/card/flags.ts", "../src/client/plugin-meta.ts", "../src/client/card/icons.ts", "../src/client/card/rows.ts", "../src/client/card/picker.ts", "../src/client/card/dialog.ts", "../src/client/card/run-actions.ts", "../src/client/card/toggle.ts", "../src/client/card/view.ts", "../src/client/read.ts", "../src/client/project.ts", "../src/client/block.ts", "../src/client/locales/en-US.ts", "../src/client/locales/index.ts", "../src/client/styles/index.ts"],
4
+ "sourcesContent": ["/**\n * @comecaramelos/dsh-chrome-mcp \u2014 browser half, public surface.\n *\n * The card is built from `@comecaramelos/dsh-ancesters`' `mountSettingsCard`:\n * the dictionaries, the controller over this row's configuration form (staged,\n * immediate and trigger writes, the fenced write door, the settle), the\n * page-wide failure toasts and the `plugins.row.config` registration keyed by\n * `<bundle>#<row id>` all come from the shared half. What is declared here is\n * the descriptor and the one block this row owns (./block.ts).\n *\n * The one module the bundler walks, so the emitted `client.js` exports exactly\n * what the shell consumes \u2014 `apply` and `inject` \u2014 plus the settle deadline and\n * the live keys, on the surface for the tests (the loader ignores them).\n */\nimport { mountSettingsCard } from \"@comecaramelos/dsh-ancesters/client\";\n\nimport { ChromeCardBlock } from \"./block.js\";\nimport { DICTIONARIES } from \"./locales/index.js\";\nimport { BUNDLE_ID, ENTRY_ID, LIVE_KEYS, LOCALE_NAMESPACE, PLUGIN_ID, RUN_SETTLE_TIMEOUT_MS } from \"./plugin-meta.js\";\nimport { injectCardStyles } from \"./styles/index.js\";\n\n/** The descriptor that makes this component's card. */\nexport const card = mountSettingsCard({\n entryId: ENTRY_ID,\n pluginId: PLUGIN_ID,\n bundleId: BUNDLE_ID,\n localeNamespace: LOCALE_NAMESPACE,\n locale: DICTIONARIES,\n fields: {\n // The flags and the \"Reduce log output\" mode are edited as a draft:\n // nothing reaches the Host until Apply.\n staged: [\"extraFlags\", \"stderrMode\"],\n // The saved rows and the selection drive a Host run, so they land on\n // the click that asked for them.\n immediate: [\"executables\", \"chromePath\"],\n triggers: [\"refreshExecutablesNonce\", \"openWindowsChromeNonce\"],\n liveKeys: [...LIVE_KEYS]\n },\n blocks: [{ block: ChromeCardBlock as never, bind: (_snapshot: unknown, controller: unknown) => ({ controller }) }],\n // The body states the error itself (the dot and the line under the\n // toggle), so the shared second line stays off.\n errorLine: false,\n // A failure that lands while the person is elsewhere in the app is still\n // announced: the row page is closed most of the time a run is happening.\n // An error carries the Host's own line; a stall has no text of its own and\n // reads from the mirror \u2014 the known missing-executable answer when it\n // stands, the \"the host did not answer\" line otherwise.\n toasts: {\n text: (notice: { kind: \"error\" | \"stall\"; text: string }, snapshot: { values?: Record<string, unknown> }, t: (key: string) => string) =>\n notice.kind === \"error\"\n ? (notice.text !== \"\" ? notice.text : t(\"toastError\"))\n : (snapshot.values?.chromeMissing === true ? t(\"chromeMissing\") : t(\"toastStall\"))\n },\n settleField: \"executableDiscoveryRevision\",\n settleDeadlineMs: RUN_SETTLE_TIMEOUT_MS\n});\n\n/** Services the shell must resolve before `apply` runs. */\nexport const inject = card.inject;\n\n/** The loader entry: the card's own stylesheet first (the shared machinery\n * injects only its own sheet), then the mounted card. */\nexport function apply(ctx: Parameters<typeof card.apply>[0]): void {\n injectCardStyles();\n card.apply(ctx);\n}\n\nexport { LIVE_KEYS, RUN_SETTLE_TIMEOUT_MS };\n/** The seam between the shared controller and the card (test surface). */\nexport { cardActions, cardState } from \"./block.js\";\n", "// src/client/apply.ts\nimport * as react4 from \"react\";\nimport { jsx as jsx9 } from \"react/jsx-runtime\";\n\n// src/host/identity.ts\nfunction rowConfigKey(pkgName, entryId) {\n if (typeof pkgName !== \"string\" || pkgName === \"\") {\n throw new Error(\"dsh-ancesters: rowConfigKey(pkg, entryId) requires a non-empty package name\");\n }\n if (typeof entryId !== \"string\" || entryId === \"\") {\n throw new Error(\"dsh-ancesters: rowConfigKey(pkg, entryId) requires a non-empty entry id\");\n }\n return `${pkgName}#${entryId}`;\n}\n\n// src/client/blocks/rows.ts\nimport * as react from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\n\n// dsh-css:/home/roberto/dev/dsh/dsh-ancesters/src/client/styles/shared.module.css\nvar cssText = '.qox3mn_body{flex-direction:column;gap:10px;display:flex}.qox3mn_field{align-items:flex-start;gap:4px;display:flex;flex-direction:column;width:100%}.qox3mn_fieldRow{align-items:center;gap:8px;display:flex;width:100%}.qox3mn_fieldTitle{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px;flex:1;min-width:0}.qox3mn_fieldDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px;width:100%}.qox3mn_selector{background:var(--dsw-alias-bg-module-platform);height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.qox3mn_selector:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.qox3mn_selector:disabled{cursor:default}.qox3mn_selectorWrap{display:flex}.qox3mn_pillChevron{flex:none}.qox3mn_row{display:flex;gap:10px;align-items:center}.qox3mn_button{display:inline-flex;align-items:center;justify-content:center;gap:4px;border:.5px solid var(--dsw-alias-border-l3);border-radius:14px;cursor:pointer;font-size:12px;line-height:18px;color:var(--dsw-alias-label-primary);background:transparent;padding:0 10px;height:28px}.qox3mn_button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.qox3mn_button:disabled{cursor:not-allowed;opacity:.4}.qox3mn_button:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.qox3mn_readOnly{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px}.qox3mn_error{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px;line-height:1.5}.qox3mn_dot{box-sizing:border-box;corner-shape:round;border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.qox3mn_dotError{background:var(--dsw-alias-state-error-primary)}.qox3mn_badge{color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-1);border-radius:10px;padding:1px 8px;font-size:11px;line-height:16px;display:inline-flex;align-items:center;flex:none}.qox3mn_empty{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px}.qox3mn_catalog{flex-direction:column;align-items:stretch;gap:10px;display:flex}.qox3mn_catalog+.qox3mn_catalog{border-top:.5px solid var(--dsw-alias-border-l2);padding-top:12px}.qox3mn_catalog>.qox3mn_linkButton{align-self:flex-start}.qox3mn_catalog>.qox3mn_linkButtonRow{align-self:flex-start;display:flex;gap:8px;align-items:center}.qox3mn_linkButton{box-sizing:border-box;border:none;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer;border-radius:14px;align-items:center;height:28px;padding:0 10px;font:inherit;font-size:12px;line-height:18px;display:inline-flex}.qox3mn_linkButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.qox3mn_linkButton:disabled{opacity:.4;cursor:default}.qox3mn_linkButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.qox3mn_rowList{flex-direction:column;align-items:stretch;gap:6px;display:flex}.qox3mn_rowList>button{align-self:flex-start}.qox3mn_catalogEntry{border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-module-platform);border-radius:10px;padding:6px}.qox3mn_catalogRow{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) auto;align-items:center;gap:6px;display:grid}.qox3mn_catalogInput{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);border-radius:8px;height:28px;padding:0 10px;font:inherit;font-size:14px;line-height:22px;min-width:0;width:100%}.qox3mn_catalogInput::placeholder{color:var(--dsw-alias-label-dimmed)}.qox3mn_catalogInput:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-1px}.qox3mn_catalogInput:disabled{opacity:.6;cursor:default}.qox3mn_iconButton{box-sizing:border-box;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.qox3mn_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.qox3mn_iconButton:disabled{opacity:.4;cursor:default}.qox3mn_iconButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.qox3mn_iconButtonDanger:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary)}.qox3mn_addButton{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:14px;align-self:flex-start;align-items:center;gap:4px;height:28px;padding:0 10px;font:inherit;font-size:12px;line-height:18px;display:inline-flex}.qox3mn_addButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.qox3mn_addButton:disabled{opacity:.4;cursor:default}.qox3mn_disclosure{flex-direction:column;gap:10px;display:flex}.qox3mn_disclosureSummary{color:var(--dsw-alias-label-secondary);cursor:pointer;list-style:none;align-items:center;gap:6px;font-size:12px;line-height:18px;user-select:none;display:flex}.qox3mn_disclosureSummary::-webkit-details-marker{display:none}.qox3mn_disclosureSummary:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px;border-radius:6px}.qox3mn_disclosureLabel:before{content:\"\\\\25b8\";display:inline-block;margin-right:6px;transition:transform .16s}.qox3mn_disclosure[open] .qox3mn_disclosureLabel:before{transform:rotate(90deg)}.qox3mn_disclosureCount{color:var(--dsw-alias-label-tertiary)}.qox3mn_disclosureBody{flex-direction:column;gap:10px;display:flex}.qox3mn_disclosureBody>.qox3mn_linkButton{align-self:flex-start}.qox3mn_disclosureBody>.qox3mn_linkButtonRow{align-self:flex-start;display:flex;gap:8px;align-items:center}.qox3mn_toggleLabel{align-items:center;display:inline-flex;flex:none}.qox3mn_fetchDialog{background:color-mix(in srgb,var(--dsw-alias-label-primary) 28%,transparent);align-items:center;justify-content:center;display:flex;position:fixed;inset:0;z-index:90}.qox3mn_dialogContent{background:var(--dsw-alias-bg-layer-3);border:.5px solid var(--dsw-alias-border-l3);border-radius:16px;flex-direction:column;gap:10px;width:min(520px,calc(100vw - 32px));max-height:min(620px,calc(100vh - 48px));display:flex;overflow:hidden}.qox3mn_dialogHeader{align-items:center;gap:8px;padding:14px 16px 0;display:flex}.qox3mn_dialogTitle{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:22px;flex:1;min-width:0;margin:0}.qox3mn_dialogClose{box-sizing:border-box;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;flex:none;width:28px;height:28px;display:inline-flex}.qox3mn_dialogClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.qox3mn_dialogClose:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.qox3mn_dialogDescription{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;margin:0;padding:0 16px}.qox3mn_dialogBody{flex-direction:column;flex:1;gap:8px;min-height:0;padding:0 16px;display:flex}.qox3mn_candidateToolbar{align-items:center;gap:8px;display:flex}.qox3mn_candidateSearch{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);border-radius:8px;height:32px;padding:0 10px;font:inherit;font-size:12px;line-height:20px;flex:1;min-width:0}.qox3mn_candidateSearch::placeholder{color:var(--dsw-alias-label-dimmed)}.qox3mn_candidateSearch:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-1px}.qox3mn_candidateList{flex-direction:column;gap:2px;margin:0;padding:0 0 10px;list-style:none;overflow-y:auto;display:flex}.qox3mn_candidate{border-radius:8px;padding:4px 6px}.qox3mn_candidate:hover{background:var(--dsw-alias-interactive-bg-hover)}.qox3mn_candidateLabel{align-items:center;gap:8px;min-width:0;display:flex}.qox3mn_candidateLabel input[type=checkbox]{accent-color:var(--dsw-alias-brand-primary);flex:none;margin:0}.qox3mn_candidateId{color:var(--dsw-alias-label-primary);font-size:12px;line-height:18px;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.qox3mn_candidateNote{color:var(--dsw-alias-label-tertiary);flex:0 1 auto;min-width:0;overflow-wrap:anywhere;font-size:11px;line-height:16px}.qox3mn_dialogFooter{border-top:.5px solid var(--dsw-alias-border-l2);align-items:center;justify-content:flex-end;gap:8px;padding:12px 16px;display:flex}.qox3mn_dialogButton{display:inline-flex;align-items:center;justify-content:center;gap:4px;border:.5px solid var(--dsw-alias-border-l3);border-radius:16px;cursor:pointer;font-size:13px;line-height:20px;color:var(--dsw-alias-label-primary);background:transparent;padding:0 12px;height:32px}.qox3mn_dialogButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.qox3mn_dialogButton:disabled{cursor:not-allowed;opacity:.4}.qox3mn_dialogButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.qox3mn_dialogButtonPrimary{color:var(--dsw-alias-label-primary);font-weight:600}.qox3mn_selectorLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.qox3mn_result{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:18px}.qox3mn_resultValue{color:var(--dsw-alias-label-secondary);margin-left:4px}.qox3mn_resultAge{color:var(--dsw-alias-label-dimmed);margin-left:4px}.qox3mn_notice{flex-direction:column;gap:4px;display:flex;border:.5px solid var(--dsw-alias-border-l3);border-radius:10px;background:var(--dsw-alias-bg-layer-1);padding:8px 10px}.qox3mn_noticeTitle{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:600;line-height:18px}.qox3mn_noticeBody{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.qox3mn_docsLink{color:var(--dsw-alias-label-tertiary);align-items:center;gap:4px;display:inline-flex;text-decoration:none;font-size:12px;line-height:1.5}.qox3mn_docsLinkLabel{text-decoration:none}.qox3mn_docsLink:hover{color:var(--dsw-alias-brand-primary)}.qox3mn_docsLink:hover .qox3mn_docsLinkLabel{text-decoration:underline}.qox3mn_docsLink:hover .qox3mn_docsIcon{color:var(--dsw-alias-brand-primary)}.qox3mn_docsIcon{color:var(--dsw-alias-label-tertiary);flex:none}.qox3mn_docsLink:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px;border-radius:4px}.qox3mn_catalogRowSingle{grid-template-columns:minmax(0,1fr) auto}.qox3mn_catalogInputMono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.qox3mn_footer{border-top:.5px solid var(--dsw-alias-border-l2);align-items:center;justify-content:flex-end;gap:8px;padding:12px 0 0;display:flex}.qox3mn_footerError{color:var(--dsw-alias-label-error);text-align:right;min-width:0;flex:1;margin:0;font-size:12px;line-height:1.5}.qox3mn_footerButton{border:.5px solid var(--dsw-alias-border-l3);border-radius:8px;cursor:pointer;color:var(--dsw-alias-label-secondary);background:transparent;padding:5px 14px;font-size:13px;line-height:1.5}.qox3mn_footerButton:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.qox3mn_footerButton:disabled{cursor:default;opacity:.4}.qox3mn_footerButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.qox3mn_footerButtonPrimary{color:var(--dsw-alias-bg-layer-3);font-weight:600;background:var(--dsw-alias-label-primary);border-color:transparent}.qox3mn_footerButtonPrimary:hover:not(:disabled){color:var(--dsw-alias-bg-layer-3);background:var(--dsw-alias-label-secondary);border-color:transparent}.qox3mn_liveLine{align-items:center;gap:8px;display:flex;padding:6px 10px;border:.5px solid var(--dsw-alias-border-l3);border-radius:8px;background:var(--dsw-alias-bg-layer-1)}.qox3mn_liveLine:hover{border-color:var(--dsw-alias-border-l4)}.qox3mn_liveText{flex:1;min-width:0;display:flex;align-items:center;gap:8px}.qox3mn_liveName{color:var(--dsw-alias-label-primary);font-size:14px;line-height:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.qox3mn_liveState{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.qox3mn_tools{flex:1 1 auto;min-width:0;display:flex;flex-wrap:wrap;gap:4px;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.qox3mn_tools span{padding:0 6px;border:.5px solid var(--dsw-alias-border-l3);border-radius:6px;background:var(--dsw-alias-bg-module-platform)}.qox3mn_control{box-sizing:border-box;width:100%;min-width:0;height:28px;padding:0 10px;border:.5px solid var(--dsw-alias-border-l4);border-radius:8px;background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:inherit;font-size:14px;line-height:22px}.qox3mn_control::placeholder{color:var(--dsw-alias-label-dimmed)}.qox3mn_control:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-1px}.qox3mn_control:disabled{opacity:.6;cursor:default}.qox3mn_textarea{box-sizing:border-box;width:100%;min-width:0;min-height:64px;padding:6px 10px;border:.5px solid var(--dsw-alias-border-l4);border-radius:8px;background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:18px;resize:vertical}.qox3mn_textarea:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-1px}.qox3mn_textarea:disabled{opacity:.6;cursor:default}.qox3mn_select{box-sizing:border-box;height:28px;min-width:0;padding:0 8px;border:.5px solid var(--dsw-alias-border-l4);border-radius:8px;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;line-height:22px}.qox3mn_select:disabled{opacity:.6;cursor:default}.qox3mn_checkbox{margin:0;accent-color:var(--dsw-alias-brand-primary)}.qox3mn_controlField{align-items:flex-start;gap:4px;display:flex;flex-direction:column;width:100%}.qox3mn_controlTitle{color:var(--dsw-alias-label-primary);font-size:12px;line-height:18px}.qox3mn_controlField .qox3mn_control,.qox3mn_controlField .qox3mn_textarea{margin-top:2px}.qox3mn_grid{display:grid;grid-template-columns:minmax(96px,20%) minmax(0,1fr);gap:6px 10px;align-items:center;width:100%}.qox3mn_grid>label{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.qox3mn_editor{gap:10px;display:flex;flex-direction:column;padding:10px;border:.5px solid var(--dsw-alias-border-l3);border-radius:10px;background:var(--dsw-alias-bg-layer-1)}.qox3mn_editorTitle{color:var(--dsw-alias-label-primary);font-size:14px;line-height:20px}.qox3mn_editorHint{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.qox3mn_editorActions{align-items:center;gap:8px;display:flex;justify-content:flex-end}.qox3mn_transport{color:var(--dsw-alias-label-tertiary);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:18px;word-break:break-all}.qox3mn_summary{color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px;display:flex;align-items:center;gap:6px}.qox3mn_summaryItem{color:var(--dsw-alias-label-primary);font-size:13px;line-height:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.qox3mn_summaryNone{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:20px}.qox3mn_summaryBroken{color:var(--dsw-alias-state-error-primary);font-size:13px;line-height:20px}.qox3mn_toastRoot{z-index:2147483000;flex-direction:column;gap:8px;display:flex;position:fixed;right:16px;bottom:16px;max-width:min(360px,50vw)}.qox3mn_toast{border:.5px solid var(--dsw-alias-border-l3);border-radius:10px;background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);padding:8px 10px;font-size:12px;line-height:18px;box-shadow:0 4px 12px #0000001f;overflow-wrap:anywhere}.qox3mn_toast[data-notice-kind=error]{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-label-primary)}.qox3mn_toast[data-notice-kind=stall]{border-color:var(--dsw-alias-border-l4);color:var(--dsw-alias-label-tertiary)}.qox3mn_composerPills{display:inline-flex;gap:4px}.qox3mn_composerPillRoot{display:flex}.qox3mn_composerPill{min-width:0;max-width:220px;height:28px;font:inherit;font-size:13px;font-weight:500;line-height:20px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:transparent;border:none;border-radius:24px;outline:none;align-items:center;gap:4px;padding:0 4px 0 8px;display:inline-flex}.qox3mn_composerPill:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.qox3mn_composerPill:disabled{cursor:default}.qox3mn_composerPillIcon{flex:none;display:inline-flex;color:var(--dsw-alias-label-secondary)}.qox3mn_composerPillLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.qox3mn_composerPillChevron{color:var(--dsw-alias-label-caption);flex:none;transition:transform .12s;display:inline-flex}.qox3mn_composerPillChevronOpen{transform:rotate(180deg)}\\n';\nvar shared_default = { \"body\": \"qox3mn_body\", \"field\": \"qox3mn_field\", \"fieldRow\": \"qox3mn_fieldRow\", \"fieldTitle\": \"qox3mn_fieldTitle\", \"fieldDesc\": \"qox3mn_fieldDesc\", \"selector\": \"qox3mn_selector\", \"selectorWrap\": \"qox3mn_selectorWrap\", \"pillChevron\": \"qox3mn_pillChevron\", \"row\": \"qox3mn_row\", \"button\": \"qox3mn_button\", \"readOnly\": \"qox3mn_readOnly\", \"error\": \"qox3mn_error\", \"dot\": \"qox3mn_dot\", \"dotError\": \"qox3mn_dotError\", \"badge\": \"qox3mn_badge\", \"empty\": \"qox3mn_empty\", \"catalog\": \"qox3mn_catalog\", \"linkButton\": \"qox3mn_linkButton\", \"linkButtonRow\": \"qox3mn_linkButtonRow\", \"rowList\": \"qox3mn_rowList\", \"catalogEntry\": \"qox3mn_catalogEntry\", \"catalogRow\": \"qox3mn_catalogRow\", \"catalogInput\": \"qox3mn_catalogInput\", \"iconButton\": \"qox3mn_iconButton\", \"iconButtonDanger\": \"qox3mn_iconButtonDanger\", \"addButton\": \"qox3mn_addButton\", \"disclosure\": \"qox3mn_disclosure\", \"disclosureSummary\": \"qox3mn_disclosureSummary\", \"disclosureLabel\": \"qox3mn_disclosureLabel\", \"disclosureCount\": \"qox3mn_disclosureCount\", \"disclosureBody\": \"qox3mn_disclosureBody\", \"toggleLabel\": \"qox3mn_toggleLabel\", \"fetchDialog\": \"qox3mn_fetchDialog\", \"dialogContent\": \"qox3mn_dialogContent\", \"dialogHeader\": \"qox3mn_dialogHeader\", \"dialogTitle\": \"qox3mn_dialogTitle\", \"dialogClose\": \"qox3mn_dialogClose\", \"dialogDescription\": \"qox3mn_dialogDescription\", \"dialogBody\": \"qox3mn_dialogBody\", \"candidateToolbar\": \"qox3mn_candidateToolbar\", \"candidateSearch\": \"qox3mn_candidateSearch\", \"candidateList\": \"qox3mn_candidateList\", \"candidate\": \"qox3mn_candidate\", \"candidateLabel\": \"qox3mn_candidateLabel\", \"candidateId\": \"qox3mn_candidateId\", \"candidateNote\": \"qox3mn_candidateNote\", \"dialogFooter\": \"qox3mn_dialogFooter\", \"dialogButton\": \"qox3mn_dialogButton\", \"dialogButtonPrimary\": \"qox3mn_dialogButtonPrimary\", \"selectorLabel\": \"qox3mn_selectorLabel\", \"result\": \"qox3mn_result\", \"resultValue\": \"qox3mn_resultValue\", \"resultAge\": \"qox3mn_resultAge\", \"notice\": \"qox3mn_notice\", \"noticeTitle\": \"qox3mn_noticeTitle\", \"noticeBody\": \"qox3mn_noticeBody\", \"docsLink\": \"qox3mn_docsLink\", \"docsLinkLabel\": \"qox3mn_docsLinkLabel\", \"docsIcon\": \"qox3mn_docsIcon\", \"catalogRowSingle\": \"qox3mn_catalogRowSingle\", \"catalogInputMono\": \"qox3mn_catalogInputMono\", \"footer\": \"qox3mn_footer\", \"footerError\": \"qox3mn_footerError\", \"footerButton\": \"qox3mn_footerButton\", \"footerButtonPrimary\": \"qox3mn_footerButtonPrimary\", \"liveLine\": \"qox3mn_liveLine\", \"liveText\": \"qox3mn_liveText\", \"liveName\": \"qox3mn_liveName\", \"liveState\": \"qox3mn_liveState\", \"tools\": \"qox3mn_tools\", \"control\": \"qox3mn_control\", \"textarea\": \"qox3mn_textarea\", \"select\": \"qox3mn_select\", \"checkbox\": \"qox3mn_checkbox\", \"controlField\": \"qox3mn_controlField\", \"controlTitle\": \"qox3mn_controlTitle\", \"grid\": \"qox3mn_grid\", \"editor\": \"qox3mn_editor\", \"editorTitle\": \"qox3mn_editorTitle\", \"editorHint\": \"qox3mn_editorHint\", \"editorActions\": \"qox3mn_editorActions\", \"transport\": \"qox3mn_transport\", \"summary\": \"qox3mn_summary\", \"summaryItem\": \"qox3mn_summaryItem\", \"summaryNone\": \"qox3mn_summaryNone\", \"summaryBroken\": \"qox3mn_summaryBroken\", \"toastRoot\": \"qox3mn_toastRoot\", \"toast\": \"qox3mn_toast\", \"composerPills\": \"qox3mn_composerPills\", \"composerPillRoot\": \"qox3mn_composerPillRoot\", \"composerPill\": \"qox3mn_composerPill\", \"composerPillIcon\": \"qox3mn_composerPillIcon\", \"composerPillLabel\": \"qox3mn_composerPillLabel\", \"composerPillChevron\": \"qox3mn_composerPillChevron\", \"composerPillChevronOpen\": \"qox3mn_composerPillChevronOpen\" };\n\n// src/client/blocks/icons.ts\nvar CHEVRON_PATH = \"M11.8486 5.5L11.4238 5.92383L8.69727 8.65137C8.44157 8.90706 8.21562 9.13382 8.01172 9.29785C7.79912 9.46883 7.55595 9.61756 7.25 9.66602C7.08435 9.69222 6.91565 9.69222 6.75 9.66602C6.44405 9.61756 6.20088 9.46883 5.98828 9.29785C5.78438 9.13382 5.55843 8.90706 5.30273 8.65137L2.57617 5.92383L2.15137 5.5L3 4.65137L3.42383 5.07617L6.15137 7.80273C6.42595 8.07732 6.59876 8.24849 6.74023 8.3623C6.87291 8.46904 6.92272 8.47813 6.9375 8.48047C6.97895 8.48703 7.02105 8.48703 7.0625 8.48047C7.07728 8.47813 7.12709 8.46904 7.25977 8.3623C7.40124 8.24849 7.57405 8.07732 7.84863 7.80273L10.5762 5.07617L11 4.65137L11.8486 5.5Z\";\nvar TRASH_PATH = \"M2.5 4h11M6.5 4V2.5h3V4M4 4l.7 9a1 1 0 001 .9h4.6a1 1 0 001-.9L12 4M6.5 6.8v4.4M9.5 6.8v4.4\";\nvar CLOSE_PATHS = [\n \"M14.1168 13.197L13.197 14.1167L1.8833 2.80303L2.80309 1.88324L14.1168 13.197Z\",\n \"M13.197 1.88326L14.1168 2.80305L2.80309 14.1168L1.8833 13.197L13.197 1.88326Z\"\n];\nvar DOCS_PATHS = [\n \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\",\n \"M15 3h6v6\",\n \"M10 14 21 3\"\n];\n\n// src/client/blocks/rows.ts\nfunction RowsBlock(props) {\n const served = Array.isArray(props.values) ? props.values : [];\n const writable = props.writable === true;\n const busy = props.busy === true;\n const labels = Array.isArray(props.labels) ? props.labels : [];\n const placeholders = Array.isArray(props.placeholders) ? props.placeholders : [];\n const columns = Math.max(1, labels.length);\n const blankRow = [];\n for (let blank = 0; blank < columns; blank++) blankRow.push(\"\");\n const servedKey = JSON.stringify(served);\n const draftState = react.useState({ key: \"\", rows: [] });\n const draft = draftState[0];\n const setDraft = draftState[1];\n const rows = draft.key === servedKey ? draft.rows : served.map((row) => Array.from(row));\n const write = (next) => {\n const saved = props.save === void 0 ? void 0 : props.save(next);\n return Promise.resolve(saved === void 0 ? void 0 : saved).then(\n () => {\n setDraft({ key: \"\", rows: [] });\n },\n (failure) => {\n throw failure;\n }\n );\n };\n const setCell = (at, column, value) => {\n const next = rows.map((row, index) => index === at ? row.map((cell, cellIndex) => cellIndex === column ? value : cell) : row.slice());\n setDraft({ key: servedKey, rows: next });\n };\n const commit = () => {\n const cleaned = [];\n for (const row of rows) {\n const cells = row.map((cell) => String(cell ?? \"\").trim());\n if (cells.some((cell) => cell !== \"\")) cleaned.push(cells);\n }\n return write(cleaned);\n };\n const remove = (at) => {\n return write(rows.filter((_row, index) => index !== at));\n };\n const add = () => {\n setDraft({ key: servedKey, rows: rows.concat([blankRow.slice()]) });\n };\n const rowClass = props.rowClassName === void 0 || props.rowClassName === shared_default.catalogRow ? shared_default.catalogRow : shared_default.catalogRow + \" \" + props.rowClassName;\n const inputClass = props.inputClassName === void 0 ? shared_default.catalogInput : props.inputClassName;\n const list = jsxs(\"div\", {\n className: shared_default.rowList,\n children: [\n served.length === 0 && props.emptyLabel !== void 0 ? jsx(\"div\", { className: shared_default.empty, children: props.emptyLabel }, \"empty\") : null,\n rows.map(\n (row, at) => jsx(\"div\", {\n className: shared_default.catalogEntry,\n children: jsxs(\"div\", {\n className: rowClass,\n children: [\n row.map(\n (cell, column) => jsx(\"input\", {\n className: inputClass,\n type: \"text\",\n value: cell === void 0 ? \"\" : cell,\n placeholder: placeholders[column] === void 0 ? \"\" : placeholders[column],\n disabled: !writable || busy,\n onChange: (event) => {\n setCell(at, column, typeof event?.target?.value === \"string\" ? event.target.value : \"\");\n },\n onBlur: () => {\n if (writable && !busy) void commit();\n },\n onKeyDown: (event) => {\n if (event.key === \"Enter\") {\n if (typeof event.preventDefault === \"function\") event.preventDefault();\n if (writable && !busy) void commit();\n }\n }\n }, column)\n ),\n jsx(\"button\", {\n type: \"button\",\n className: shared_default.iconButton + \" \" + shared_default.iconButtonDanger,\n disabled: !writable || busy,\n title: props.removeLabel === void 0 ? \"\" : props.removeLabel,\n onClick: () => {\n if (writable && !busy) void remove(at);\n },\n children: jsx(\"svg\", {\n width: 14,\n height: 14,\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n stroke: \"currentColor\",\n children: jsx(\"path\", { d: TRASH_PATH })\n })\n }, \"remove\")\n ]\n })\n }, at)\n ),\n jsx(\"button\", {\n type: \"button\",\n className: shared_default.linkButton,\n disabled: !writable || busy,\n title: props.addTitle === void 0 ? \"\" : props.addTitle,\n onClick: () => {\n if (!writable || busy) return;\n add();\n },\n children: props.addLabel === void 0 ? \"\" : props.addLabel\n }, \"add\"),\n props.renderAction === void 0 ? null : props.renderAction(rows)\n ]\n });\n if (props.disclosure !== true) return list;\n return jsxs(\"details\", {\n className: shared_default.disclosure,\n children: [\n jsxs(\"summary\", {\n className: shared_default.disclosureSummary,\n children: [\n jsx(\"span\", { className: shared_default.disclosureLabel, children: props.disclosureLabel === void 0 ? \"\" : props.disclosureLabel }),\n jsx(\"span\", {\n className: shared_default.disclosureCount,\n children: (props.disclosureCountLabel === void 0 ? String(rows.length) : props.disclosureCountLabel).replace(\"{count}\", String(rows.length))\n })\n ]\n }),\n jsx(\"div\", { className: shared_default.disclosureBody, children: list })\n ]\n });\n}\nvar RowList = RowsBlock;\n\n// src/client/blocks/dialog.ts\nimport * as react2 from \"react\";\nimport { jsx as jsx2, jsxs as jsxs2 } from \"react/jsx-runtime\";\nfunction DialogBlock(props) {\n var t = props.t;\n var candidates = Array.from(props.candidates);\n var savedIds = Array.from(props.savedIds);\n var savedSet = new Set(savedIds);\n var initialChecked = candidates.filter((candidate) => savedSet.has(candidate.id)).map((candidate) => candidate.id);\n var servedKey = JSON.stringify(candidates) + \"|\" + JSON.stringify(savedIds);\n var draftState = react2.useState({ key: \"\", query: \"\", checked: [] });\n var draft = draftState[0];\n var setDraft = draftState[1];\n var dirty = draft.key !== servedKey;\n var query = dirty ? \"\" : draft.query;\n var checked = dirty ? initialChecked : draft.checked;\n var checkedSet = new Set(checked);\n var setQuery = (value) => {\n setDraft({ key: servedKey, query: value, checked: Array.from(checkedSet) });\n };\n var setChecked = (make) => {\n setDraft({ key: servedKey, query, checked: make(checked) });\n };\n var needle = query.trim().toLowerCase();\n var shown = needle === \"\" ? candidates : candidates.filter((candidate) => candidate.id.toLowerCase().indexOf(needle) !== -1);\n var addable = shown.filter((candidate) => !savedSet.has(candidate.id)).map((candidate) => candidate.id);\n var allChecked = addable.length > 0 && addable.every((id) => checkedSet.has(id));\n var toggle = (id, value) => {\n setChecked((current) => value ? current.concat([id]) : current.filter((entry) => entry !== id));\n };\n return jsxs2(\"div\", {\n className: shared_default.fetchDialog,\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-label\": props.title,\n children: [\n jsxs2(\"div\", {\n className: shared_default.dialogContent,\n children: [\n jsxs2(\"div\", {\n className: shared_default.dialogHeader,\n children: [\n jsx2(\"h2\", { className: shared_default.dialogTitle, children: props.title }),\n jsx2(\"button\", {\n type: \"button\",\n className: shared_default.dialogClose,\n \"aria-label\": t(\"close\"),\n onClick: () => props.onClose(),\n children: jsx2(\"svg\", {\n width: 14,\n height: 14,\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-hidden\": \"true\",\n children: CLOSE_PATHS.map((d, at) => jsx2(\"path\", { d, fill: \"currentColor\" }, at))\n })\n })\n ]\n }),\n jsx2(\"p\", { className: shared_default.dialogDescription, children: props.description }),\n jsxs2(\"div\", {\n className: shared_default.dialogBody,\n children: [\n jsxs2(\"div\", {\n className: shared_default.candidateToolbar,\n children: [\n jsx2(\"input\", {\n className: shared_default.candidateSearch,\n type: \"search\",\n placeholder: props.searchPlaceholder,\n \"aria-label\": props.searchPlaceholder,\n value: query,\n onChange: (event) => {\n setQuery(event && event.target ? String(event.target.value ?? \"\") : \"\");\n }\n }),\n jsx2(\"button\", {\n type: \"button\",\n className: shared_default.linkButton,\n onClick: () => {\n if (allChecked) setChecked(() => []);\n else setChecked((current) => Array.from(new Set(current.concat(addable))));\n },\n children: t(\"selectAll\")\n })\n ]\n }),\n shown.length === 0 ? jsx2(\"p\", { className: shared_default.empty, children: t(\"dialogEmpty\") }) : jsx2(\"ul\", {\n className: shared_default.candidateList,\n children: shown.map((candidate) => {\n var isSaved = savedSet.has(candidate.id);\n var note = candidate.note !== \"\" ? candidate.note : isSaved ? t(\"candidateSaved\") : \"\";\n return jsx2(\"li\", {\n className: shared_default.candidate,\n children: jsxs2(\"label\", {\n className: shared_default.candidateLabel,\n children: [\n jsx2(\"input\", {\n type: \"checkbox\",\n checked: isSaved ? true : checkedSet.has(candidate.id),\n disabled: isSaved,\n onChange: (event) => {\n toggle(candidate.id, !!(event && event.target && event.target.checked));\n }\n }),\n jsx2(\"span\", { className: shared_default.candidateId, children: candidate.id }),\n note === \"\" ? null : jsx2(\"span\", { className: shared_default.candidateNote, children: note })\n ]\n })\n }, candidate.id);\n })\n })\n ]\n }),\n jsxs2(\"div\", {\n className: shared_default.dialogFooter,\n children: [\n jsx2(\"button\", {\n type: \"button\",\n className: shared_default.dialogButton,\n onClick: () => props.onClose(),\n children: t(\"cancel\")\n }),\n jsx2(\"button\", {\n type: \"button\",\n className: shared_default.dialogButton + \" \" + shared_default.dialogButtonPrimary,\n onClick: () => props.onAdd(Array.from(checkedSet)),\n children: t(\"addSelected\")\n })\n ]\n })\n ]\n })\n ]\n });\n}\n\n// src/client/blocks/picker.ts\nimport { jsx as jsx3, jsxs as jsxs3 } from \"react/jsx-runtime\";\nimport { Menu } from \"@deepseek-ai/dsh-client-ui-primitives\";\nfunction PickerBlock(props) {\n const entries = Array.isArray(props.entries) ? props.entries : [];\n const options = Array.isArray(props.options) ? props.options : [];\n const selectedId = props.selectedId === void 0 ? \"\" : props.selectedId;\n const writable = props.writable === true;\n const busy = props.busy === true;\n const rows = entries.map((entry) => [entry.id, entry.name]);\n const saveEntries = (next) => {\n if (props.save === void 0) return Promise.resolve();\n return Promise.resolve(props.save(next.map((row) => ({ id: row[0] ?? \"\", name: row[1] ?? \"\" }))));\n };\n const refreshAction = () => jsx3(\"button\", {\n type: \"button\",\n className: shared_default.linkButton,\n disabled: !writable || busy,\n onClick: () => {\n props.refresh();\n },\n children: busy && props.busyLabel !== void 0 ? props.busyLabel : props.refreshLabel\n });\n const extras = props.actions === void 0 ? [] : props.actions;\n const renderActions = () => jsxs3(\"div\", {\n className: shared_default.linkButtonRow,\n children: [\n refreshAction(),\n ...extras.map(\n (action, index) => jsx3(\"button\", {\n type: \"button\",\n className: shared_default.linkButton,\n disabled: !writable || busy || action.disabled === true,\n title: action.title === void 0 ? \"\" : action.title,\n onClick: () => {\n action.onClick();\n },\n children: action.label\n }, index)\n )\n ]\n });\n return jsxs3(\"div\", {\n className: shared_default.catalog,\n children: [\n jsxs3(\"div\", {\n className: shared_default.field,\n children: [\n jsxs3(\"div\", {\n className: shared_default.fieldRow,\n children: [\n props.selectorLabel === void 0 || props.selectorLabel === \"\" ? null : jsx3(\"span\", { className: shared_default.fieldTitle, children: props.selectorLabel }),\n jsx3(\"span\", {\n className: shared_default.selectorWrap,\n children: jsx3(Menu, {\n open: props.menuOpen === true,\n onClose: () => {\n props.setMenuOpen(false);\n },\n items: options.map((option) => ({ id: option.id, label: option.label })),\n selectedId: options.some((option) => option.id === selectedId) ? selectedId : \"\",\n onSelect: (id) => {\n props.setMenuOpen(false);\n props.select(id);\n },\n align: \"end\",\n portal: true,\n anchor: jsxs3(\"button\", {\n type: \"button\",\n className: shared_default.selector,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": props.menuOpen === true,\n disabled: !writable || busy,\n title: props.selectedTitle === void 0 ? \"\" : props.selectedTitle,\n onClick: () => {\n props.setMenuOpen(!(props.menuOpen === true));\n },\n children: [\n // A bare label; a path needs its own\n // truncating span.\n jsx3(\"span\", { className: shared_default.selectorLabel, children: props.selectedLabel }),\n jsx3(\"svg\", {\n width: 14,\n height: 14,\n className: shared_default.pillChevron,\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n \"aria-hidden\": \"true\",\n children: jsx3(\"path\", { d: CHEVRON_PATH, fill: \"currentColor\" })\n })\n ]\n })\n })\n })\n ]\n }),\n props.hint === void 0 ? null : jsx3(\"div\", { className: shared_default.fieldDesc, children: props.hint })\n ]\n }),\n RowsBlock({\n values: rows,\n save: saveEntries,\n labels: [props.idLabel === void 0 ? \"\" : props.idLabel, props.nameLabel === void 0 ? \"\" : props.nameLabel],\n placeholders: [props.idPlaceholder === void 0 ? \"\" : props.idPlaceholder, props.namePlaceholder === void 0 ? \"\" : props.namePlaceholder],\n writable: props.writable,\n busy,\n emptyLabel: props.emptyText,\n addLabel: props.addLabel,\n removeLabel: props.removeLabel,\n disclosureLabel: props.rowsLabel,\n disclosure: true,\n rowClassName: shared_default.catalogRow,\n renderAction: renderActions\n }),\n props.statusLine === void 0 || props.statusLine === null ? null : props.statusLine\n ]\n });\n}\n\n// src/client/blocks/flags.ts\nimport { jsx as jsx4, jsxs as jsxs4 } from \"react/jsx-runtime\";\nfunction FlagsBlock(props) {\n const writable = props.writable === true;\n const busy = props.busy === true;\n const flags = Array.isArray(props.flags) ? props.flags : [];\n const saveValues = (next) => {\n const cleaned = next.map((row) => String(row === void 0 || row === null ? \"\" : row[0] ?? \"\").trim()).filter((flag) => flag !== \"\").filter((flag, index, all) => all.indexOf(flag) === index);\n if (typeof props.save !== \"function\") return Promise.resolve();\n return Promise.resolve(props.save(cleaned));\n };\n const actions = props.actions === void 0 ? [] : props.actions;\n const renderAction = (visible) => jsxs4(\"div\", {\n className: shared_default.linkButtonRow,\n children: actions.map(\n (action, index) => jsx4(\n \"button\",\n {\n type: \"button\",\n className: shared_default.linkButton,\n disabled: !writable || busy || action.disabled === true,\n title: action.title === void 0 ? action.label : action.title,\n onClick: () => {\n if (!writable || busy) return;\n const current = visible.map((row) => String(row[0] ?? \"\").trim()).filter((flag) => flag !== \"\");\n const merged = Array.from(/* @__PURE__ */ new Set([...current, ...action.merged(current)]));\n void saveValues(merged.map((flag) => [flag]));\n },\n children: action.label\n },\n index\n )\n )\n }, \"actions\");\n return jsxs4(\"div\", {\n className: shared_default.catalog,\n children: [\n jsxs4(\"div\", {\n className: shared_default.field,\n children: [\n jsxs4(\"div\", {\n className: shared_default.fieldRow,\n children: [\n jsx4(\"span\", { className: shared_default.fieldTitle, children: props.title }),\n props.link === void 0 || props.link.href === \"\" ? null : jsxs4(\"a\", {\n className: shared_default.docsLink,\n href: props.link.href,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: props.link.title === void 0 ? props.link.label : props.link.title,\n children: [\n jsx4(\"svg\", {\n className: shared_default.docsIcon,\n width: 14,\n height: 14,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n \"aria-hidden\": \"true\",\n children: DOCS_PATHS.map((d, at) => jsx4(\"path\", { d }, at))\n }),\n jsx4(\"span\", { className: shared_default.docsLinkLabel, children: props.link.label })\n ]\n })\n ]\n }),\n props.hint === void 0 ? null : jsx4(\"div\", { className: shared_default.fieldDesc, children: props.hint })\n ]\n }),\n RowsBlock({\n values: flags.map((flag) => [flag]),\n save: saveValues,\n labels: [props.rowLabel === void 0 ? \"\" : props.rowLabel],\n placeholders: [props.rowPlaceholder === void 0 ? \"\" : props.rowPlaceholder],\n writable: props.writable,\n busy,\n emptyLabel: props.emptyText,\n addLabel: props.addLabel,\n removeLabel: props.removeLabel,\n disclosureLabel: props.disclosureLabel,\n disclosure: props.disclosure === true,\n rowClassName: shared_default.catalogRowSingle,\n inputClassName: shared_default.catalogInput,\n renderAction\n })\n ]\n });\n}\n\n// src/client/blocks/toggle.ts\nimport { jsx as jsx5, jsxs as jsxs5 } from \"react/jsx-runtime\";\nimport { Switch } from \"@deepseek-ai/dsh-client-ui-primitives\";\nfunction SwitchField(props) {\n const control = jsx5(Switch, {\n checked: props.checked === true,\n label: props.label,\n disabled: props.disabled === true || props.busy === true,\n onChange: () => {\n if (typeof props.onToggle === \"function\") props.onToggle();\n }\n });\n if (props.variant === \"row\") {\n return jsx5(\"span\", {\n className: shared_default.toggleLabel,\n title: props.title === void 0 ? props.label : props.title,\n \"aria-label\": props.label,\n children: control\n });\n }\n return jsxs5(\"div\", {\n className: shared_default.catalog,\n children: [\n jsxs5(\"div\", {\n className: shared_default.field,\n children: [\n jsxs5(\"div\", {\n className: shared_default.fieldRow,\n children: [\n jsx5(\"span\", { className: shared_default.fieldTitle, children: props.label }),\n jsx5(\"span\", {\n className: shared_default.toggleLabel,\n title: props.title === void 0 ? props.label : props.title,\n children: control\n })\n ]\n }),\n props.hint === void 0 ? null : jsx5(\"div\", { className: shared_default.fieldDesc, children: props.hint })\n ]\n })\n ]\n });\n}\n\n// src/client/blocks/status-line.ts\nimport { jsx as jsx6, jsxs as jsxs6 } from \"react/jsx-runtime\";\nfunction LinkButtonRow(props) {\n return jsxs6(\"div\", { className: shared_default.linkButtonRow, children: props.children === void 0 ? [] : [props.children] });\n}\nfunction ErrorLine(props) {\n const text2 = String(props.text ?? \"\");\n if (text2 === \"\") return null;\n return jsxs6(\"p\", {\n className: shared_default.error,\n role: \"status\",\n children: [\n jsx6(\"span\", { className: shared_default.dot + \" \" + shared_default.dotError, \"aria-hidden\": \"true\" }),\n jsx6(\"span\", { children: text2 })\n ]\n });\n}\n\n// src/client/blocks/controls.ts\nimport * as react3 from \"react\";\nimport { jsx as jsx7, jsxs as jsxs7 } from \"react/jsx-runtime\";\nimport { Menu as Menu2 } from \"@deepseek-ai/dsh-client-ui-primitives\";\nfunction TextField(props) {\n return field(props, jsx7(\"input\", {\n type: \"text\",\n className: shared_default.control,\n value: text(props.value),\n placeholder: props.placeholder ?? \"\",\n disabled: props.disabled === true,\n \"aria-label\": props.label,\n onChange: (event) => props.onChange(event.target.value)\n }));\n}\nfunction LinesField(props) {\n const box = useTypedBox(linesOf(props.value).join(\"\\n\"));\n return field(props, jsx7(\"textarea\", {\n className: shared_default.textarea,\n value: box.text,\n placeholder: props.placeholder ?? \"\",\n disabled: props.disabled === true,\n \"aria-label\": props.label,\n onChange: (event) => {\n const typed = event.target.value;\n box.stage(typed);\n props.onChange(parseLines(typed));\n }\n }));\n}\nfunction MapField(props) {\n const box = useTypedBox(serializeMap(props.value));\n return field(props, jsx7(\"textarea\", {\n className: shared_default.textarea,\n value: box.text,\n placeholder: props.placeholder ?? \"\",\n disabled: props.disabled === true,\n \"aria-label\": props.label,\n onChange: (event) => {\n const typed = event.target.value;\n box.stage(typed);\n props.onChange(parseMap(typed));\n }\n }));\n}\nfunction SelectField(props) {\n const options = selectOptions(props.value, props.options ?? [], props.placeholder);\n return field(\n props,\n jsx7(\"select\", {\n className: shared_default.select,\n value: text(props.value),\n disabled: props.disabled === true,\n \"aria-label\": props.label,\n onChange: (event) => {\n const picked = options.find((option) => text(option.value) === event.target.value);\n props.onChange(picked === void 0 ? event.target.value : picked.value);\n },\n children: options.map(\n (option) => jsx7(\"option\", { value: text(option.value), children: option.label }, text(option.value))\n )\n })\n );\n}\nfunction DropdownField(props) {\n const openState = react3.useState(false);\n const open = openState[0];\n const setOpen = openState[1];\n const disabled = props.disabled === true;\n const options = selectOptions(props.value, props.options ?? [], props.placeholder);\n const held = text(props.value);\n const current = options.find((option) => text(option.value) === held);\n return field(\n props,\n jsx7(\"span\", {\n className: shared_default.selectorWrap,\n children: jsx7(Menu2, {\n open: open && !disabled,\n onClose: () => setOpen(false),\n items: options.map((option) => ({ id: text(option.value), label: option.label })),\n selectedId: current === void 0 ? \"\" : held,\n onSelect: (id) => {\n setOpen(false);\n if (id === held) return;\n const picked = options.find((option) => text(option.value) === id);\n props.onChange(picked === void 0 ? id : picked.value);\n },\n align: \"start\",\n portal: true,\n anchor: jsxs7(\"button\", {\n type: \"button\",\n className: shared_default.selector,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": open && !disabled,\n \"aria-label\": props.label,\n disabled,\n onClick: () => setOpen(!open),\n children: [\n jsx7(\"span\", { className: shared_default.selectorLabel, children: current === void 0 ? props.placeholder ?? \"\" : current.label }),\n jsx7(\"svg\", {\n width: 14,\n height: 14,\n className: shared_default.pillChevron,\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n \"aria-hidden\": \"true\",\n children: jsx7(\"path\", { d: CHEVRON_PATH, fill: \"currentColor\" })\n })\n ]\n })\n })\n })\n );\n}\nfunction ExtraField(props) {\n const type = props.type === void 0 ? \"string\" : props.type;\n if (type === \"boolean\") {\n return field(\n props,\n jsx7(\"input\", {\n type: \"checkbox\",\n className: shared_default.checkbox,\n checked: props.value === true,\n disabled: props.disabled === true,\n \"aria-label\": props.label,\n onChange: (event) => props.onChange(event.target.checked)\n })\n );\n }\n if (type === \"lines\") return jsx7(LinesField, props);\n if (type === \"select\") return SelectField(props);\n if (type === \"secret\") {\n return field(\n props,\n jsx7(\"input\", {\n type: \"password\",\n className: shared_default.control,\n value: text(props.value),\n placeholder: props.placeholder ?? \"\",\n disabled: props.disabled === true,\n \"aria-label\": props.label,\n onChange: (event) => props.onChange(event.target.value)\n })\n );\n }\n if ((props.options ?? []).length > 0) return SelectField(props);\n return TextField(props);\n}\nfunction selectOptions(value, served, placeholder) {\n const out = [];\n const seen = /* @__PURE__ */ new Set();\n const held = text(value);\n if (held === \"\" && placeholder !== void 0 && placeholder !== \"\" && !served.some((option) => text(option.value) === \"\")) {\n out.push({ value: \"\", label: placeholder });\n seen.add(\"\");\n }\n for (const option of served) {\n const key = text(option.value);\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(option);\n }\n if (held !== \"\" && !seen.has(held)) out.push({ value, label: held });\n return out;\n}\nfunction linesOf(value) {\n if (Array.isArray(value)) return value.map((item) => text(item)).filter((item) => item.trim() !== \"\");\n if (typeof value === \"string\") return parseLines(value);\n return [];\n}\nfunction useTypedBox(served) {\n const typedState = react3.useState({ key: \"\", text: \"\" });\n const typed = typedState[0];\n const setTyped = typedState[1];\n return {\n text: typed.key === served ? typed.text : served,\n stage: (text2) => setTyped({ key: served, text: text2 })\n };\n}\nfunction text(value) {\n if (value === void 0 || value === null) return \"\";\n return typeof value === \"string\" ? value : String(value);\n}\nfunction parseLines(text2) {\n return String(text2).split(\"\\n\").filter((line) => line.trim() !== \"\");\n}\nfunction parseMap(text2) {\n const out = {};\n for (const line of String(text2).split(\"\\n\")) {\n if (line.trim() === \"\") continue;\n const split = line.indexOf(\"=\");\n if (split <= 0) continue;\n const key = line.slice(0, split);\n if (key.trim() === \"\") continue;\n out[key] = line.slice(split + 1);\n }\n return out;\n}\nfunction mapText(value) {\n if (value === void 0 || value === null) return \"\";\n if (typeof value === \"string\") return value;\n if (Array.isArray(value)) return value.map((item) => text(item)).join(\",\");\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\nfunction serializeMap(value) {\n if (typeof value === \"string\") return value;\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return \"\";\n return Object.entries(value).map(([key, item]) => `${key}=${mapText(item)}`).join(\"\\n\");\n}\nfunction field(props, control) {\n return jsxs7(\"div\", {\n className: shared_default.controlField,\n children: [\n jsx7(\"div\", { className: shared_default.controlTitle, children: props.label }),\n control,\n props.help === void 0 || props.help === \"\" ? null : jsx7(\"div\", { className: shared_default.fieldDesc, children: props.help })\n ]\n });\n}\n\n// src/client/blocks/pill.ts\nimport { jsx as jsx8, jsxs as jsxs8 } from \"react/jsx-runtime\";\nimport { Menu as Menu3 } from \"@deepseek-ai/dsh-client-ui-primitives\";\nfunction ComposerPill(props) {\n const disabled = props.disabled === true;\n return jsx8(\"span\", {\n className: shared_default.composerPillRoot,\n \"data-pill\": props.key,\n children: jsx8(Menu3, {\n open: props.open && !disabled,\n onClose: () => props.setOpen(false),\n items: props.options,\n selectedId: props.selectedId,\n onSelect: (id) => {\n props.setOpen(false);\n if (id === props.selectedId) return;\n Promise.resolve(props.onSelect(id)).catch(() => void 0);\n },\n align: \"start\",\n side: \"top\",\n portal: true,\n anchor: jsxs8(\"button\", {\n type: \"button\",\n className: shared_default.composerPill,\n \"aria-label\": props.ariaLabel ?? (props.title === void 0 ? props.label : `${props.title}: ${props.label}`),\n title: props.title ?? props.label,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": props.open && !disabled,\n disabled,\n onClick: () => props.setOpen(!props.open),\n children: [\n props.icon === void 0 || props.icon.length === 0 ? null : jsx8(\"span\", {\n className: shared_default.composerPillIcon,\n \"aria-hidden\": true,\n children: jsx8(\"svg\", {\n width: 14,\n height: 14,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: props.icon.map(\n (d, at) => jsx8(\"path\", { d, stroke: \"currentColor\", strokeWidth: 2, strokeLinecap: \"round\", strokeLinejoin: \"round\" }, at)\n )\n })\n }),\n jsx8(\"span\", { className: shared_default.composerPillLabel, children: props.label }),\n jsx8(\"span\", {\n className: shared_default.composerPillChevron + (props.open && !disabled ? \" \" + shared_default.composerPillChevronOpen : \"\"),\n \"aria-hidden\": true,\n children: jsx8(\"svg\", {\n width: 14,\n height: 14,\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: jsx8(\"path\", { d: CHEVRON_PATH, fill: \"currentColor\" })\n })\n })\n ]\n })\n })\n });\n}\n\n// src/client/blocks/index.ts\nvar Blocks = {\n RowsBlock,\n DialogBlock,\n PickerBlock,\n FlagsBlock,\n SwitchField,\n LinkButtonRow,\n ErrorLine,\n TextField,\n LinesField,\n MapField,\n SelectField,\n DropdownField,\n ExtraField,\n ComposerPill\n};\n\n// src/client/controller/controller.ts\nimport { createSnapshotStore } from \"@deepseek-ai/dsh-client-store\";\n\n// src/host/values.ts\nfunction tag(value) {\n return Object.prototype.toString.call(value).slice(8, -1);\n}\nfunction isPlainObject(value) {\n const prototype = Object.getPrototypeOf(value);\n if (prototype === null) return true;\n if (prototype === Object.prototype) return true;\n return Object.getPrototypeOf(prototype) === null && tag(value) === \"Object\";\n}\nfunction canonicalCollection(value, kind) {\n if (kind === \"Set\") {\n return [...value].map(canonical).sort((left, right) => stableKey(left) < stableKey(right) ? -1 : 1);\n }\n return [...value].map(([key, item]) => [canonical(key), canonical(item)]).sort((left, right) => stableKey(left[0]) < stableKey(right[0]) ? -1 : 1);\n}\nfunction answersNothing(value) {\n return value === void 0 || value === null;\n}\nfunction meaningfulKeys(value) {\n return Object.keys(value).filter((key) => !answersNothing(value[key]));\n}\nfunction canonical(value) {\n const kind = tag(value);\n if (kind === \"Set\" || kind === \"Map\") return canonicalCollection(value, kind);\n return value;\n}\nfunction stableKey(value) {\n const text2 = JSON.stringify(value, (_key, item) => {\n if (item !== null && typeof item === \"object\") {\n const kind = tag(item);\n if (kind === \"Set\" || kind === \"Map\") return canonicalCollection(item, kind);\n }\n if (item !== null && typeof item === \"object\" && !Array.isArray(item)) {\n const sorted = {};\n for (const name of Object.keys(item).sort()) {\n const child = item[name];\n if (!answersNothing(child)) sorted[name] = child;\n }\n return sorted;\n }\n return item === void 0 ? null : item;\n });\n return text2 === void 0 ? \"null\" : text2;\n}\nfunction sameValue(a, b) {\n if (a === b) return true;\n if (typeof a === \"number\" && typeof b === \"number\") return Number.isNaN(a) && Number.isNaN(b);\n const leftMissing = answersNothing(a);\n const rightMissing = answersNothing(b);\n if (leftMissing || rightMissing) return leftMissing && rightMissing;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, index) => sameValue(item, b[index]));\n }\n if (!isPlainObject(a) || !isPlainObject(b)) return sameOpaqueValue(a, b);\n const left = meaningfulKeys(a);\n const right = meaningfulKeys(b);\n if (left.length !== right.length) return false;\n return left.every(\n (key) => Object.prototype.hasOwnProperty.call(b, key) && sameValue(a[key], b[key])\n );\n}\nfunction sameOpaqueValue(a, b) {\n const kind = tag(a);\n if (kind !== tag(b)) return false;\n if (kind === \"Date\") return sameValue(a.getTime(), b.getTime());\n if (kind === \"RegExp\") {\n return sameValue(a.source, b.source) && sameValue(a.flags, b.flags);\n }\n if (kind === \"Map\" || kind === \"Set\") {\n return sameValue(canonical(a), canonical(b));\n }\n if (kind === \"String\" || kind === \"Number\" || kind === \"Boolean\") {\n return sameValue(a.valueOf(), b.valueOf());\n }\n return false;\n}\n\n// src/client/controller/snapshot.ts\nfunction nothingCardSnapshot() {\n return {\n available: false,\n writable: false,\n values: {},\n overridden: [],\n lastError: \"\",\n dirty: false,\n saving: false,\n failed: false,\n actionError: \"\",\n notice: null\n };\n}\n\n// src/client/controller/wait.ts\nvar RUN_SETTLE_TIMEOUT_MS = 9e4;\nfunction settleOnRevision(host, settled, write, deadline = RUN_SETTLE_TIMEOUT_MS) {\n if (host.disposed) return Promise.resolve();\n let satisfied = false;\n const armed = host.settleOn((snapshot) => {\n if (settled(snapshot) !== true) return false;\n satisfied = true;\n return true;\n });\n return new Promise((resolve) => {\n let done = false;\n const timer = setTimeout(() => finish(), deadline);\n host.settleTimer = timer;\n const finish = (refused = false) => {\n if (done) return;\n done = true;\n clearTimeout(timer);\n if (host.settleTimer === timer) host.settleTimer = null;\n armed.cancel();\n resolve();\n if (refused || satisfied || host.disposed) return;\n const state = host.getSnapshot();\n if (state.lastError !== \"\") host.noteNotice(\"error\", state.lastError);\n else host.noteNotice(\"stall\", \"\");\n };\n void armed.settle.then(() => finish());\n void Promise.resolve(write()).then(\n (accepted) => {\n if (accepted === false) {\n host.noteError(\"configuration write refused\");\n finish(true);\n }\n },\n (error) => {\n host.noteError(error);\n finish(true);\n }\n );\n });\n}\n\n// src/client/controller/controller.ts\nvar MAX_WRITE_PASSES = 4;\nvar CardController = class {\n /** Disposed \u2014 every late answer and timer bails on this flag first. */\n disposed = false;\n /** The armed stall-deadline timer (owned by ./wait.ts). */\n settleTimer = null;\n store;\n fields;\n errorField;\n settleDeadlineMs;\n settleField;\n /** The last pass of the write door, when the mount can issue it unfenced. */\n unfencedMutate;\n /** The form the entry's row page handed (`view: \"page\"`), if any. */\n pageForm;\n formRef;\n unsubscribe;\n /** Staged drafts: only fields that differ from what is served. */\n draft = {};\n /** The last served (undrafted) answers, recomputed on every push. */\n served = {};\n saving = false;\n failed = false;\n actionError = \"\";\n noticeQueue = null;\n noticeSeq = 0;\n /** Every armed settle; keyed against a published snapshot. */\n waits = [];\n constructor(form, spec = {}) {\n this.fields = spec.fields ?? {};\n this.errorField = spec.errorField ?? \"lastError\";\n this.settleDeadlineMs = spec.settleDeadlineMs;\n this.settleField = spec.settleField === void 0 || spec.settleField === \"\" ? void 0 : spec.settleField;\n this.unfencedMutate = spec.unfencedMutate;\n this.formRef = form;\n this.store = createSnapshotStore(nothingCardSnapshot());\n this.unsubscribe = form === void 0 ? void 0 : form.subscribe(() => {\n this.actionError = \"\";\n this.publish();\n });\n this.publish();\n }\n /** Adopt the form the row page hands with `view: \"page\"` (identity guarded:\n * an unchanged adopt is a no-op, keeping its publish out of the render). */\n adoptForm(form) {\n if (this.disposed) return;\n const next = form === void 0 ? void 0 : form;\n if (this.pageForm === next) return;\n this.pageForm = next;\n this.publish();\n }\n /** The card's store is what the card body renders. */\n getSnapshot() {\n return this.store.getSnapshot();\n }\n /** Whether anything serves this entry. */\n available() {\n return this.store.getSnapshot().available === true;\n }\n /** Read one field off the current snapshot (drafts overlaid). */\n value(field2) {\n return this.store.getSnapshot().values[field2];\n }\n /** One field as the Host serves it, drafts left out \u2014 what a staged edit\n * that lands back on it is compared against. */\n servedValue(field2) {\n return this.documentValue(field2);\n }\n /** One field as the served document answers it (what a wait arms against). */\n documentValue(field2) {\n const snapshot = this.readSnapshot();\n if (snapshot === void 0 || snapshot.status !== \"ready\" || snapshot.value === void 0) return void 0;\n return snapshot.value[field2];\n }\n /**\n * Staged edit: save one value as a draft. A draft equal to what is served\n * is not dirty \u2014 it stages nothing and dirties nothing.\n */\n stage(field2, value) {\n if (this.disposed) return;\n const servedValue = this.served[field2];\n if (valuesEqual(servedValue, value)) {\n delete this.draft[field2];\n } else {\n this.draft[field2] = value;\n }\n this.publish();\n }\n /** Drop every staged draft: the card answers with what is served. */\n discard() {\n if (this.disposed) return;\n for (const key of Object.keys(this.draft)) delete this.draft[key];\n this.failed = false;\n this.publish();\n }\n /** Apply exactly the staged fields. Accepted: the drafts clear with the\n * Host's answers. Refused: the drafts stand, `failed` says so. */\n async applyStaged() {\n if (this.disposed) return false;\n const staged = Object.entries(this.draft);\n if (staged.length === 0) return true;\n this.saving = true;\n this.publish();\n const ops = staged.map(([field2, value]) => ({ op: \"set\", path: [field2], value }));\n const accepted = await this.writeDoor(() => ops);\n if (accepted) {\n for (const field2 of Object.keys(this.draft)) delete this.draft[field2];\n this.failed = false;\n } else {\n this.failed = true;\n this.actionError = \"configuration write refused\";\n }\n this.saving = false;\n this.publish();\n return accepted;\n }\n /** Immediate write of one field \u2014 rows, selections: written on the spot. */\n async writeField(field2, value) {\n if (this.disposed) return false;\n const accepted = await this.writeDoor(() => [{ op: \"set\", path: [field2], value }]);\n this.publish();\n return accepted;\n }\n /** Return one field to what the row's own configuration answers: the field\n * leaves the user layer (an `unset`), and any draft standing over it goes. */\n async resetField(field2) {\n if (this.disposed) return false;\n const accepted = await this.writeDoor(() => [{ op: \"unset\", path: [field2] }]);\n if (accepted) delete this.draft[field2];\n this.publish();\n return accepted;\n }\n /**\n * Trigger write \u2014 a nonce: the value is always a stamp that moved off what\n * stood before it (`nextStamp`), so a later commit always reads as a diff.\n * Returns as soon as the write lands; waiting for the Host *run* is the job\n * of `settle` \u2014 armed before this crosses the wire, so nothing can slip\n * between. A stamp that stands where it stood answers no run at all: two\n * actions inside one millisecond must not read as nothing happened.\n */\n async writeTrigger(field2) {\n return this.writeDoor((document2) => [{ op: \"set\", path: [field2], value: nextStamp(document2[field2]) }]);\n }\n /** Write a trigger and wait for the mirror to satisfy `settled`. */\n settleAndTrigger(settled, field2) {\n return settleOnRevision(this, settled, () => this.writeTrigger(field2), this.settleDeadlineMs);\n }\n /** The immediate-write shape of `settleAndTrigger`: write one field on the\n * spot (a selection, a saved list) and wait for the Host run behind it to\n * satisfy `settled` \u2014 the wait armed before the write crosses the wire. */\n settleAndWrite(settled, field2, value) {\n return settleOnRevision(this, settled, () => this.writeField(field2, value), this.settleDeadlineMs);\n }\n /**\n * Entry trigger \u2014 the keyed nonce (`entryActions` hole): stamps a moved\n * value **under `key`** inside the field's map, keeping every other row's\n * stamp, and writes the whole map through the door. The Host's trigger diff\n * answers per key (`host/adapter/form.ts`), so exactly the row that stamped\n * fires its run. The merge is composed inside the door (what the document\n * stands on now), never from what this half last rendered.\n */\n async writeEntryTrigger(field2, key) {\n const wanted = String(key);\n return this.writeDoor((document2) => {\n const current = document2[field2];\n const stamps = current !== null && typeof current === \"object\" && !Array.isArray(current) ? { ...current } : {};\n stamps[wanted] = nextStamp(stamps[wanted]);\n return [{ op: \"set\", path: [field2], value: stamps }];\n });\n }\n /** The keyed shape of `settleAndTrigger`: arm the wait, write the entry\n * nonce, settle when `settled` stands. */\n settleAndTriggerEntry(settled, field2, key) {\n return settleOnRevision(this, settled, () => this.writeEntryTrigger(field2, key), this.settleDeadlineMs);\n }\n /** Host-run settle on the `settleField` hole: write the trigger for\n * `triggerField`, settle once what `watchField` answers moves off the value\n * it stood at when the wait was armed \u2014 the diff is the answer, the wall\n * clock only the backstop. With no `watchField` declared anywhere, the\n * trigger field itself is what must move.\n *\n * Both sides read the **served document**: the store is what the body\n * renders, and at arm time it may not have answered the field at all (nothing\n * published yet) \u2014 armed against that, every answer reads as a move. */\n settleTrigger(triggerField, watchField) {\n const watched = watchField ?? this.settleField ?? triggerField;\n const armed = this.documentValue(watched);\n return settleOnRevision(\n this,\n () => !sameValue(this.documentValue(watched), armed),\n () => this.writeTrigger(triggerField),\n this.settleDeadlineMs\n );\n }\n /** The keyed shape of `settleTrigger`: the wait answers **per entry** \u2014 what\n * `watchField` answers for `key` moves off what it answered when armed. A\n * mirror shaped as a list of lines answers it by the line's own `id`/`key`,\n * which is the shape a live mirror really carries. */\n settleEntryTrigger(triggerField, key, watchField) {\n const watched = watchField ?? this.settleField ?? triggerField;\n const wanted = String(key);\n const armed = keyedAnswer(this.documentValue(watched), wanted);\n return settleOnRevision(\n this,\n () => !sameValue(keyedAnswer(this.documentValue(watched), wanted), armed),\n () => this.writeEntryTrigger(triggerField, key),\n this.settleDeadlineMs\n );\n }\n /** Arm one predicate against the next publish (the wait surface). */\n settleOn(settled) {\n let resolve = () => void 0;\n const settle = new Promise((done) => {\n resolve = done;\n });\n const wait = { settled, resolve };\n this.waits.push(wait);\n return {\n settle,\n cancel: () => {\n const index = this.waits.indexOf(wait);\n if (index >= 0) this.waits.splice(index, 1);\n resolve();\n }\n };\n }\n /** Stage one failure notice for the body's toast host. */\n noteNotice(kind, text2) {\n this.noticeSeq += 1;\n this.noticeQueue = { seq: this.noticeSeq, kind, text: String(text2 ?? \"\") };\n this.publish();\n }\n /** Drop one announced notice (by `seq`). */\n clearNotice(seq) {\n if (this.noticeQueue !== null && this.noticeQueue.seq === seq) this.noticeQueue = null;\n this.publish();\n }\n /** Surface a refused or failed write as the card's own error line. */\n noteError(error) {\n this.actionError = String(error instanceof Error ? error.message : error);\n this.publish();\n }\n /** Release everything: subscriptions, settle, timers. */\n dispose() {\n this.disposed = true;\n this.unsubscribe?.();\n this.unsubscribe = void 0;\n this.pageForm = void 0;\n for (const wait of [...this.waits]) wait.resolve();\n this.waits.length = 0;\n if (this.settleTimer !== null && this.settleTimer !== void 0) {\n clearTimeout(this.settleTimer);\n this.settleTimer = null;\n }\n }\n /** Everything a registered card body receives \u2014 the same object for every\n * render (identity stable), so a re-render cannot disturb the store. */\n inject() {\n return {\n store: this.store,\n controller: this,\n fields: this.fields\n };\n }\n /** Push the served answers, overlaid by drafts, into the store. */\n publish() {\n if (this.disposed) return;\n const previous = this.store.getSnapshot();\n const snapshot = this.readSnapshot();\n let values = {};\n let overridden = [];\n let available = false;\n let writable = false;\n if (snapshot !== void 0 && snapshot.status === \"ready\" && snapshot.value !== void 0) {\n available = true;\n writable = snapshot.writable !== false;\n values = { ...snapshot.value };\n const user = snapshot.user;\n if (user !== null && typeof user === \"object\") overridden = Object.keys(user);\n for (const [field2, value] of Object.entries(this.draft)) values[field2] = value;\n } else {\n for (const key of Object.keys(this.draft)) delete this.draft[key];\n this.releaseWaits();\n }\n this.served = snapshot !== void 0 && snapshot.status === \"ready\" && snapshot.value !== void 0 ? { ...snapshot.value } : {};\n this.store.set({\n available,\n writable,\n values,\n overridden,\n lastError: typeof values[this.errorField] === \"string\" ? String(values[this.errorField]) : \"\",\n dirty: Object.keys(this.draft).length > 0,\n saving: this.saving,\n failed: this.failed,\n actionError: this.actionError,\n notice: this.noticeQueue\n });\n const state = this.store.getSnapshot();\n for (const wait of [...this.waits]) {\n if (wait.settled(state) === true) {\n this.waits.splice(this.waits.indexOf(wait), 1);\n wait.resolve();\n }\n }\n }\n /** What every read stands on: the shared form's mirror, which subscribes\n * and so moves with every Host answer. The page's handed `state` is a\n * snapshot taken when the page rendered \u2014 only the fallback when no shared\n * form stands; the page form is adopted as the write **door**, not as the\n * source. */\n readSnapshot() {\n if (this.formRef !== void 0) {\n try {\n return this.formRef.getSnapshot();\n } catch {\n }\n }\n return this.pageForm?.state;\n }\n /**\n * The write door \u2014 a refused pass is re-issued against the re-read document\n * until the budget runs out, then the refusal is *reported*.\n *\n * The door takes what the ops are **made of**, not the ops themselves, for\n * one reason: anything that has to carry what the document already says (a\n * keyed trigger's stamp map, a stamp that must move) is composed against\n * what the document says *now*, on every pass. Composing it once from what\n * this half last rendered would re-issue a merge made against a document\n * that already moved \u2014 and drop the other row's stamp on the floor.\n */\n async writeDoor(compose) {\n for (let pass = 0; pass < MAX_WRITE_PASSES; pass++) {\n const snapshot = this.readSnapshot();\n if (snapshot === void 0 || snapshot.status !== \"ready\") return false;\n const document2 = snapshot.value ?? {};\n const ops = withLiveCleared(compose(document2), this.fields.liveKeys);\n const pageForm = this.pageForm;\n const formRef = this.formRef;\n const door = pageForm !== void 0 ? (next) => pageForm.mutate(next) : formRef !== void 0 ? (next) => formRef.mutate(next) : void 0;\n if (door === void 0) return false;\n const last = pass === MAX_WRITE_PASSES - 1 && this.unfencedMutate !== void 0;\n try {\n const accepted = last ? await this.unfencedMutate(ops) : await door(ops);\n if (accepted === true) return true;\n } catch {\n }\n }\n return false;\n }\n /** Nothing serves: no wait can settle. */\n releaseWaits() {\n for (const wait of [...this.waits]) {\n this.waits.splice(this.waits.indexOf(wait), 1);\n wait.resolve();\n }\n }\n};\nfunction withLiveCleared(ops, liveKeys) {\n if (liveKeys === void 0 || liveKeys.length === 0) return ops;\n const written = new Set(ops.map((op) => op.path[0]));\n const clears = liveKeys.filter((key) => !written.has(key)).map((key) => ({ op: \"unset\", path: [key] }));\n return clears.length === 0 ? ops : [...ops, ...clears];\n}\nfunction valuesEqual(a, b) {\n return sameValue(a, b);\n}\nfunction keyedAnswer(value, key) {\n if (value === null || typeof value !== \"object\") return value;\n if (Array.isArray(value)) {\n const rows = value;\n const row = rows.find((item) => identityOf(item) === key);\n if (rows.some((item) => identityOf(item) !== void 0)) return row;\n return value;\n }\n if (Object.prototype.hasOwnProperty.call(value, key)) return value[key];\n return value;\n}\nfunction identityOf(row) {\n if (row === null || typeof row !== \"object\") return void 0;\n const claimed = row.id ?? row.key;\n if (typeof claimed === \"string\") return claimed;\n if (typeof claimed === \"number\") return String(claimed);\n return void 0;\n}\nfunction nextStamp(previous) {\n const standing = typeof previous === \"number\" && Number.isFinite(previous) ? previous : 0;\n return Math.max(Date.now(), standing + 1);\n}\n\n// src/client/locales/index.ts\nvar LOCALE_NAMESPACE = \"dshAncesters\";\nvar DICTIONARIES = {\n en: {\n apply: \"Apply\",\n discard: \"Discard\",\n saving: \"Saving\\u2026\",\n unsaved: \"Unsaved changes\",\n saveFailed: \"Save failed\",\n cancel: \"Cancel\",\n close: \"Close\",\n search: \"Search\",\n searchNoResults: \"No matches\",\n searchPlaceholder: \"Search\\u2026\",\n addSelected: \"Add selected\",\n // The page-wide notices (`toasts`): a wait that ended with nothing\n // answered, and a failure the Host answered without a line of its own.\n toastStall: \"The host did not answer the action \\u2014 try it again.\",\n toastError: \"The host reported a failure.\"\n }\n};\nfunction mergeDictionaries(base = DICTIONARIES, override = {}) {\n const merged = {};\n for (const locale of [...Object.keys(base), ...Object.keys(override)]) {\n merged[locale] = { ...base[locale] === void 0 ? {} : base[locale], ...override[locale] === void 0 ? {} : override[locale] };\n }\n return merged;\n}\n\n// src/client/toasts.ts\nvar TOAST_ROOT_SELECTOR = \"div[data-dsh-ancesters-toasts]\";\nvar TOAST_DISMISS_MS = 8e3;\nfunction noticeText(notice, t) {\n if (notice.kind === \"stall\") return t(\"toastStall\");\n return notice.text !== \"\" ? notice.text : t(\"toastError\");\n}\nfunction mountToastMirror(source, host, options = {}) {\n const doc = documentOf(host);\n if (doc === void 0) return () => void 0;\n const root = host === void 0 || host === null ? toastRoot(doc) : host;\n if (root === void 0 || typeof root.appendChild !== \"function\") return () => void 0;\n const t = typeof options.t === \"function\" ? options.t : (key) => key;\n const dismissMs = typeof options.dismissMs === \"number\" && options.dismissMs >= 0 ? options.dismissMs : TOAST_DISMISS_MS;\n let node = void 0;\n let shownSeq = -1;\n let timer = void 0;\n const dismiss = (seq) => {\n if (typeof source.clearNotice === \"function\") source.clearNotice(seq);\n };\n const stopTimer = () => {\n if (timer !== void 0) clearTimeout(timer);\n timer = void 0;\n };\n const paint = () => {\n const snapshot = source.store.getSnapshot();\n const notice = snapshot.notice ?? null;\n if (notice === null) {\n stopTimer();\n shownSeq = -1;\n if (node !== void 0) {\n root.removeChild(node);\n node = void 0;\n }\n return;\n }\n if (node === void 0) {\n node = doc.createElement(\"div\");\n node.className = shared_default.toast;\n root.appendChild(node);\n }\n node.dataset.dshAncestersToast = String(notice.seq);\n node.dataset.noticeKind = notice.kind;\n node.textContent = typeof options.text === \"function\" ? options.text(notice, snapshot, t) : noticeText(notice, t);\n const seq = notice.seq;\n node.onclick = () => dismiss(seq);\n if (seq !== shownSeq) {\n shownSeq = seq;\n stopTimer();\n if (dismissMs > 0 && typeof setTimeout === \"function\") timer = setTimeout(() => dismiss(seq), dismissMs);\n }\n };\n const unsubscribe = source.store.subscribe(() => paint());\n paint();\n return () => {\n unsubscribe();\n stopTimer();\n if (node !== void 0) {\n root.removeChild(node);\n node = void 0;\n }\n };\n}\nfunction documentOf(host) {\n const own = host !== void 0 && host !== null ? host.ownerDocument : void 0;\n if (own !== void 0 && own !== null) return own;\n return typeof document === \"undefined\" ? void 0 : document;\n}\nfunction toastRoot(doc) {\n const standing = doc.querySelectorAll(TOAST_ROOT_SELECTOR);\n if (standing.length > 0) return standing[0];\n const root = doc.createElement(\"div\");\n root.className = shared_default.toastRoot;\n root.dataset.dshAncestersToasts = \"1\";\n const container = doc.body ?? doc.head;\n if (container === void 0) return void 0;\n container.appendChild(root);\n return root;\n}\n\n// src/client/styles/index.ts\nvar SHEET_ID = \"dsh-ancesters-\" + hash(cssText);\nfunction sheetId(css) {\n return \"dsh-ancesters-\" + hash(css);\n}\nfunction injected(id) {\n return document.querySelectorAll('style[data-dsh-ancesters-css=\"' + id + '\"]').length > 0;\n}\nfunction injectCardStyles(sheets) {\n if (typeof document === \"undefined\") return;\n const wanted = [cssText, ...sheets ?? []].filter((sheet) => typeof sheet === \"string\" && sheet !== \"\");\n for (const sheet of wanted) {\n const id = sheetId(sheet);\n if (injected(id)) continue;\n const styleTag = document.createElement(\"style\");\n styleTag.dataset.dshAncestersCss = id;\n styleTag.textContent = sheet;\n document.head.appendChild(styleTag);\n }\n}\nfunction hash(text2) {\n let value = 2166136261 >>> 0;\n for (let index = 0; index < text2.length; index++) {\n value ^= text2.charCodeAt(index);\n value = Math.imul(value, 16777619) >>> 0;\n }\n return value.toString(36).padStart(6, \"0\").slice(0, 6) + \"-\" + text2.length.toString(36);\n}\n\n// src/client/apply.ts\nfunction unfencedSettingsWrite(ctx, ns) {\n const settings = ctx.remote?.settings;\n const mutate = settings?.mutate;\n if (settings === void 0 || typeof mutate !== \"function\") return void 0;\n return async (ops) => {\n try {\n const response = await mutate.call(settings, ns, ops, void 0);\n return response?.ok === true;\n } catch {\n return false;\n }\n };\n}\nfunction mountSettingsCard(spec) {\n if (spec === void 0 || typeof spec !== \"object\" || Array.isArray(spec)) {\n throw new TypeError(\"mountSettingsCard: requires a descriptor object ({ entryId, fields, blocks \\u2026 })\");\n }\n if (typeof spec.entryId !== \"string\" || spec.entryId === \"\") {\n throw new TypeError(\"mountSettingsCard: the descriptor requires a non-empty `entryId`\");\n }\n if (spec.pluginId !== void 0 && (typeof spec.pluginId !== \"string\" || spec.pluginId === \"\")) {\n throw new TypeError(\"mountSettingsCard: the descriptor's `pluginId` must be a non-empty string (the row key needs the package identity)\");\n }\n if (spec.bundleId !== void 0 && (typeof spec.bundleId !== \"string\" || spec.bundleId === \"\")) {\n throw new TypeError(\"mountSettingsCard: the descriptor's `bundleId` must be a non-empty string (it is the bundle package the row key is built from)\");\n }\n if (spec.placement !== void 0 && spec.placement !== \"row\" && spec.placement !== \"bundle\") {\n throw new TypeError('mountSettingsCard: the descriptor\\'s `placement` is \"row\" or \"bundle\"');\n }\n const namespace = spec.localeNamespace === void 0 || spec.localeNamespace === \"\" ? LOCALE_NAMESPACE : spec.localeNamespace;\n const bundle = spec.placement === \"bundle\";\n const slotName = bundle ? \"plugins.bundle.config\" : \"plugins.row.config\";\n return {\n inject: [\"configForms\", \"slots\", \"locale\", \"remote\", \"remote.settings\"],\n apply(ctx) {\n if (ctx === void 0 || typeof ctx !== \"object\" || ctx.slots === void 0 || typeof ctx.slots.inject !== \"function\") {\n throw new TypeError(\"mountSettingsCard.apply: needs the browser plugin context (the shell's `slots` service)\");\n }\n injectCardStyles();\n const dicts = mergeDictionaries(DICTIONARIES, spec.locale ?? {});\n if (ctx.locale !== void 0 && typeof ctx.locale.register === \"function\") {\n ctx.effect(() => ctx.locale.register(namespace, dicts), `${spec.entryId}: dictionaries`);\n }\n const form = ctx.configForms === void 0 ? void 0 : ctx.configForms.get(spec.entryId);\n const controller = new CardController(form, {\n fields: spec.fields,\n errorField: spec.errorField,\n settleDeadlineMs: spec.settleDeadlineMs,\n settleField: spec.settleField,\n unfencedMutate: unfencedSettingsWrite(ctx, spec.entryId)\n });\n ctx.effect(() => () => controller.dispose(), `${spec.entryId}: card controller`);\n const translate = ctx.locale !== void 0 && typeof ctx.locale.bind === \"function\" ? ctx.locale.bind(namespace) : (key) => key;\n if (spec.toasts === true || spec.toasts !== void 0 && typeof spec.toasts === \"object\") {\n const toastHost = typeof spec.toasts === \"object\" ? spec.toasts.host : void 0;\n const dismissMs = typeof spec.toasts === \"object\" ? spec.toasts.dismissMs : void 0;\n const text2 = typeof spec.toasts === \"object\" ? spec.toasts.text : void 0;\n ctx.effect(\n () => mountToastMirror(controller, toastHost, { t: translate, dismissMs, text: text2 }),\n `${spec.entryId}: toast host`\n );\n }\n const body = (props) => {\n const view = String(props?.view) === \"page\" ? \"page\" : \"summary\";\n controller.adoptForm(props?.form === void 0 ? void 0 : props.form);\n const snapshot = controller.getSnapshot();\n if (view === \"summary\") {\n if (typeof spec.renderSummary !== \"function\") return null;\n return spec.renderSummary(snapshot, translate);\n }\n if (!snapshot.available && (spec.blocks ?? []).length === 0) return null;\n const renders = (spec.blocks ?? []).map(\n (block, index) => renderBlock(block, { snapshot, controller, view, t: translate })\n );\n const composed = renders.filter((rendered) => rendered !== null && rendered !== void 0);\n if (spec.errorLine === false) return composed;\n const error = snapshot.actionError !== \"\" ? snapshot.actionError : snapshot.lastError;\n const line = ErrorLine({ text: error === \"\" ? \"\" : error });\n return line === null ? composed : [...composed, line];\n };\n const pageKey = bundle ? bundleConfigKey(spec.bundleId ?? spec.pluginId) : rowConfigKey(spec.bundleId ?? spec.pluginId ?? \"\", spec.entryId);\n ctx.slots.inject(slotName, () => {\n ctx.slots.register(\n {\n name: slotName,\n key: pageKey,\n locale: namespace,\n inject: () => controller.inject()\n },\n body\n );\n });\n const composer = spec.composer;\n if (composer !== void 0) {\n if (typeof composer.id !== \"string\" || composer.id === \"\" || typeof composer.bind !== \"function\") {\n throw new TypeError(\"mountSettingsCard: `composer` needs a non-empty `id` and a `bind` function\");\n }\n const pills = (props) => {\n const subscribe = props?.useAncestersComposer;\n const snapshot = typeof subscribe === \"function\" ? subscribe((state) => state) : controller.getSnapshot();\n const openState = react4.useState(\"\");\n const open = openState[0];\n const setOpen = openState[1];\n if (snapshot?.available !== true) return null;\n const t = typeof props?.t === \"function\" ? props.t : translate;\n const declared = composer.bind(snapshot, controller, t) ?? [];\n if (declared.length === 0) return null;\n return jsx9(\"span\", {\n className: shared_default.composerPills,\n children: declared.map(\n (pill) => jsx9(\n ComposerPill,\n { ...pill, open: open === pill.key, setOpen: (next) => setOpen(next ? pill.key : \"\") },\n pill.key\n )\n )\n });\n };\n ctx.slots.inject(\"conversation.input.left\", () => {\n ctx.slots.register(\n {\n name: \"conversation.input.left\",\n // The slot is kind `list`: entries are deduped and\n // placed by a stable `id`, not a keyed `key`.\n id: composer.id,\n locale: namespace,\n inject: () => ({ hooks: { ancestersComposer: controller.store }, controller })\n },\n pills\n );\n });\n }\n }\n };\n}\nfunction bundleConfigKey(pkgName) {\n if (typeof pkgName !== \"string\" || pkgName === \"\") {\n throw new TypeError('mountSettingsCard: `placement: \"bundle\"` needs `pluginId` or `bundleId` (the bundle page is keyed by its package name)');\n }\n return pkgName;\n}\nfunction renderBlock(block, props) {\n if (block.hideWhenUnavailable === true && props.snapshot.available !== true) return null;\n const compose = { ...block.props ?? {} };\n if (block.field !== void 0) {\n compose.value = props.snapshot.values[block.field];\n compose.field = block.field;\n }\n if (block.liveKeys !== void 0) {\n for (const liveKey of block.liveKeys) compose[liveKey] = props.snapshot.values[liveKey];\n }\n if (typeof block.bind === \"function\") Object.assign(compose, block.bind(props.snapshot, props.controller, props.t));\n if (block.action !== void 0) compose.action = composeAction(block.action, props.controller, block.field);\n const component = typeof block.block === \"string\" ? BlocksByName[block.block] : block.block;\n if (typeof component !== \"function\") return null;\n return component({ ...compose, t: props.t });\n}\nfunction composeAction(action, controller, field2) {\n if (typeof action === \"function\") return action(controller);\n if (action === \"stage\") return (value) => controller.stage(String(field2 ?? \"\"), value);\n if (action === \"apply\") return () => controller.applyStaged();\n if (action === \"discard\") return () => controller.discard();\n if (action === \"write\") return (value) => controller.writeField(String(field2 ?? \"\"), value);\n return (value) => value === void 0 ? controller.writeTrigger(String(field2 ?? \"\")) : controller.writeEntryTrigger(String(field2 ?? \"\"), value);\n}\nvar BlocksByName = Blocks;\n\n// src/host/catalog.ts\nvar NAME_MAX_LENGTH = 200;\nvar ENTRY_CAP = 50;\nvar DEFAULT_ID_PATTERN = /^[^\\x00-\\x1f\\x7f]{1,1024}$/u;\nfunction isValidEntryId(id, rules = {}) {\n if (typeof id !== \"string\") return false;\n const trimmed = id.trim();\n if (trimmed === \"\") return false;\n return rules.idRule === void 0 ? DEFAULT_ID_PATTERN.test(trimmed) : rules.idRule(trimmed);\n}\nfunction entryLabel(entry) {\n const name = String(entry?.name ?? \"\").trim();\n return name === \"\" ? entry.id : name;\n}\nfunction normalizeEntries(value, rules = {}) {\n if (!Array.isArray(value)) return [];\n const cap = rules.cap === void 0 ? ENTRY_CAP : rules.cap;\n const nameMax = rules.nameMax === void 0 ? NAME_MAX_LENGTH : rules.nameMax;\n const rows = [];\n const sources = [];\n const seen = /* @__PURE__ */ new Set();\n for (const item of value) {\n if (rows.length === cap) break;\n if (item === null || typeof item !== \"object\" || Array.isArray(item)) continue;\n const raw = item;\n const id = typeof raw.id === \"string\" ? raw.id.trim() : \"\";\n if (!isValidEntryId(id, rules) || seen.has(id)) continue;\n seen.add(id);\n const name = typeof raw.name === \"string\" ? raw.name.trim() : \"\";\n rows.push({ id, name: name.slice(0, nameMax) });\n sources.push(item);\n }\n if (rules.fields === void 0) return rows;\n return rows.map((row, index) => {\n const extra = rules.fields?.(sources[index]);\n return extra === void 0 || typeof extra !== \"object\" ? row : { ...row, ...extra };\n });\n}\nfunction mergeEntries(stored, ids, rules = {}) {\n const entries = normalizeEntries(stored, rules);\n const present = new Set(entries.map((entry) => entry.id));\n const cap = rules.cap === void 0 ? ENTRY_CAP : rules.cap;\n const merged = entries.slice();\n for (const id of ids) {\n if (merged.length >= cap) break;\n const trimmed = typeof id === \"string\" ? id.trim() : \"\";\n if (!isValidEntryId(trimmed, rules) || present.has(trimmed)) continue;\n present.add(trimmed);\n merged.push({ id: trimmed, name: \"\" });\n }\n return { entries: merged, changed: JSON.stringify(merged) !== JSON.stringify(entries) };\n}\nfunction entryIds(entries) {\n return (entries === void 0 ? [] : entries).map((entry) => entry.id);\n}\nfunction findEntry(entries, id) {\n return entries.find((entry) => entry.id === id);\n}\n\n// src/client/index.ts\nfunction mountSettingsCard2(spec) {\n return mountSettingsCard(spec);\n}\nvar dshAncestersClientPhase = 1;\nvar inject = [\"configForms\", \"slots\", \"locale\"];\nfunction apply(ctx) {\n throw new Error(\n \"dsh-ancesters/client: apply(ctx) answers through the card a plugin mounted \\u2014 call mountSettingsCard(spec).apply(ctx) from the plugin body\"\n );\n}\nexport {\n Blocks,\n CardController,\n ComposerPill,\n DICTIONARIES,\n DialogBlock,\n DropdownField,\n ErrorLine,\n ExtraField,\n FlagsBlock,\n LOCALE_NAMESPACE,\n LinesField,\n LinkButtonRow,\n MAX_WRITE_PASSES,\n MapField,\n PickerBlock,\n RUN_SETTLE_TIMEOUT_MS,\n RowList,\n RowsBlock,\n SHEET_ID,\n SelectField,\n SwitchField,\n TextField,\n apply,\n dshAncestersClientPhase,\n entryIds,\n entryLabel,\n findEntry,\n inject,\n injectCardStyles,\n isValidEntryId,\n mergeDictionaries,\n mergeEntries,\n mountSettingsCard2 as mountSettingsCard,\n normalizeEntries,\n nothingCardSnapshot,\n sheetId\n};\n", "/**\n * Browser half \u2014 the saved-executable rows the picker lists.\n *\n * This is the client-side mirror of `src/host/catalog.ts` (the two halves\n * compile into separate bundles and cannot share a module). Both halves follow\n * the same rules \u2014 trim the id, ignore ids that cannot go on the wire, keep the\n * first row per id, label a row by its custom name when it has one \u2014 and\n * `test/client.test.mjs` pins the mirror against the same fixtures the host\n * tests use, so a drift between the halves fails loudly.\n */\n/** One saved row: the path on the wire (`--executablePath=<id>`) + the label. */\nexport type CatalogEntry = { id: string; name: string };\n\n/** A saved row's id is a path: no control character may reach it (the same rule\n * the host's `CHROME_PATH_PATTERN` enforces), capped like the reference's\n * `COMMAND_MAX_LENGTH`. */\nconst ID_MAX_LENGTH = 1024;\nconst PATH_PATTERN = /^[^\\x00-\\x1f\\x7f]{1,1024}$/u;\n\n/** Cap of one row's display name (must match host `CATALOG_NAME_MAX_LENGTH`). */\nexport const NAME_MAX_LENGTH = 200;\n\n/** Cap of the saved rows (must match host `CATALOG_MAX_LENGTH`); the tail drops\n * off, so a merged run can never grow the persisted list without limit. */\nexport const ENTRY_CAP = 50;\n\n/** Whether one id is usable as a saved-row id. */\nexport function isValidEntryId(id: string): boolean {\n if (id === \"\" || id.length > ID_MAX_LENGTH) return false;\n return PATH_PATTERN.test(id);\n}\n\n/** One row label: the custom name when set, else the path itself. */\nexport function entryLabel(entry: CatalogEntry): string {\n const name = entry.name.trim();\n return name === \"\" ? entry.id : name;\n}\n\n/**\n * Coerce a served value into well-formed rows. Host-served arrays are already\n * normalized; a value read straight from the settings document may not be, so\n * the card can be handed anything.\n */\nexport function normalizeEntries(value: unknown): CatalogEntry[] {\n if (!Array.isArray(value)) return [];\n const out: CatalogEntry[] = [];\n const seen = new Set<string>();\n for (const item of value) {\n if (out.length === ENTRY_CAP) break;\n if (item === null || typeof item !== \"object\" || Array.isArray(item)) continue;\n const raw = item as { id?: unknown; name?: unknown };\n const id = typeof raw.id === \"string\" ? raw.id.trim() : \"\";\n if (!isValidEntryId(id) || seen.has(id)) continue;\n seen.add(id);\n const name = typeof raw.name === \"string\" ? raw.name.trim() : \"\";\n out.push({ id, name: name.slice(0, NAME_MAX_LENGTH) });\n }\n return out;\n}\n", "/**\n * Browser half \u2014 the settings/status configuration.\n *\n * What the Plugins page renders for this bundle's own row: it registers into\n * the shared `plugins.row.config` slot, keyed by the package and row id, and\n * renders only what the page asks the body for (`view: \"page\"`). Since dsh\n * 0.2.0 the page owns the container and its identity line \u2014 the crumb, the\n * icon, the row title and description, and the section the body sits in \u2014 so\n * what is rendered here is the configuration itself: nothing collapsed behind a\n * header, no card shell, and no status line duplicating what the page already\n * states.\n *\n * The body is three catalog blocks, the same shape and in the same order the\n * sibling card (`dsh-docker-desktop-mcp`) carries: the named executable picker\n * (the pill the bridge actually launches with, over the saved-executable rows,\n * which the fetch action refreshes through the choose-to-add dialog), the extra\n * flags rows, and the \"Reduce log output\" toggle. Both row lists are the same\n * widget read through different fields, and they live in ./rows.ts. Two blocks\n * sit alongside them as this plugin's extensions \u2014 the WSL + Windows-executable\n * notice, and the probe result line under the picker's rows.\n *\n * There is no \"auto\" mode anywhere: the rows are what is available, what gets\n * picked stays picked, and a picked path that later stops running is reported\n * broken rather than silently re-resolved.\n *\n * This file is only the body's composition. The imperative run logic \u2014 the\n * fetch and Windows actions with their busy/dialog/clock state \u2014 lives in\n * ./run-actions.ts, what one served snapshot means lives in ./view.ts, and the\n * blocks it assembles live alongside:\n *\n * ./view.ts what one served snapshot means (options, notes, the dot)\n * ./run-actions.ts the imperative runs + their state (busy, dialog, clock)\n * ./picker.ts the executable picker: pill + saved-row catalog\n * ./flags.ts the extra-flags rows (the one-field reading of ./rows.ts)\n * ./rows.ts the one row list both catalogs render\n * ./toggle.ts the \"Reduce log output\" catalog block\n * ./dialog.ts the choose-to-add modal a fetch opens\n * ./icons.ts the icon paths the shell primitives do not carry\n */\n\n/// <reference path=\"../shell-modules.d.ts\" />\nimport * as react from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport type { CatalogEntry } from \"../catalog.js\";\nimport type { ChromeExecutableStatus } from \"../types.js\";\nimport STYLES from \"../styles/ChromeMcpCard.module.css\";\nimport { ExtraFlagsEditor } from \"./flags.js\";\nimport { CatalogPicker } from \"./picker.js\";\nimport { CandidateDialog } from \"./dialog.js\";\nimport { useRunActions } from \"./run-actions.js\";\nimport { LogOutputToggle } from \"./toggle.js\";\nimport { describeCard, executableLabel, isBroken, probeAge, windowsChromeButton } from \"./view.js\";\n\n/** One option's label: the row's name, plus the tag the run gave a broken one. */\nfunction optionLabel(view: ReturnType<typeof describeCard>, id: string, t: (key: string) => string): string {\n const label = executableLabel(view, id);\n return isBroken(view, id) ? label + \" (\" + t(\"unavailableSuffix\") + \")\" : label;\n}\n\n/**\n * Hook result for the card component: locale copy, the snapshot selector, and\n * the controller-backed actions (all injected by the slot registration).\n */\nexport interface ChromeMcpCardProps {\n t: (key: string) => string;\n useChromeMcpCard: <T>(selector: (snapshot: any) => T) => T;\n saveFlags: (flags: string[]) => Promise<void>;\n toggleStderr: () => Promise<void>;\n /** Write the selected executable id (persisted; the default answers shift with it). */\n selectExecutable: (id: string) => Promise<void>;\n /** Save the whole saved-executables rows list (host re-runs the run). */\n saveExecutables: (entries: CatalogEntry[]) => Promise<void>;\n /** Ask the host to run the executable discovery, answering with every\n * candidate it looked at and what it said about each. */\n refreshExecutables: () => Promise<ChromeExecutableStatus[]>;\n /** Merge ids picked in the dialog into the saved rows. */\n addExecutables: (ids: string[]) => Promise<void>;\n /** Ask the host to drive a Windows-side Chrome in connect mode (locate,\n * prereq, launch, connect \u2014 all host-side; the answer lands in\n * `windowsChromeStatus`). */\n openWindowsChrome: () => Promise<void>;\n /** Persist every staged edit in one pass; nothing was applied until now. */\n apply: () => Promise<void>;\n /** Drop every staged edit, reverting the card to what the host serves. */\n discard: () => void;\n /** The shape the page asks for: `summary` is the one-liner, `page` the body.\n * (The page's own form handle is adopted by the shared body before any\n * block renders.) */\n view?: \"summary\" | \"page\";\n}\n\n/**\n * Render the DSH Chrome MCP settings/status configuration.\n * @param props - locale copy, the card snapshot hook, its actions, and the page\n * shape the slot renders this entry for.\n * @returns the configuration body, or nothing the page did not ask the body for.\n */\nexport function ChromeMcpCard(props: ChromeMcpCardProps) {\n const t = props.t;\n const state = props.useChromeMcpCard((snapshot) => snapshot);\n const menuState = react.useState(false);\n const menuOpen = menuState[0];\n const setMenuOpen = menuState[1];\n // The imperative half \u2014 the two host runs and the busy/dialog/clock state\n // they own \u2014 lives in ./run-actions.ts so this body stays composition.\n const runs = useRunActions({\n refreshExecutables: props.refreshExecutables,\n openWindowsChrome: props.openWindowsChrome,\n addExecutables: props.addExecutables\n });\n // The Plugins page asks for two shapes of the same slot: a one-line summary\n // and the body. Only the body is ours to render \u2014 the summary is the page's\n // own one-liner, and rendering the whole form inside one line would be\n // nonsense.\n if (props.view !== \"page\") return null;\n if (!state.available) return null;\n\n const view = describeCard(state);\n const rows = view.executableEntries;\n const savedIds = rows.map((entry: CatalogEntry) => entry.id);\n const options = view.executableOptions.map((option: { id: string }) => ({ id: option.id, label: optionLabel(view, option.id, t) }));\n // The error dot: red while an error line is present (a captured bridge/tool\n // failure or a rejected action), or the known \"executable not found\" state;\n // the tooltip always holds what the dot stands for. It used to ride the\n // card's own header; with no header of ours any more it rides the body's\n // error line instead, the one place the failure is stated.\n const dotLabel = view.error !== \"\" ? view.error : t(\"chromeMissing\");\n const dotAria = view.dotIsError || view.missing ? t(\"statusError\") : t(\"statusOk\");\n const statusDot = jsx(\"span\", {\n className: STYLES.dot + \" \" + STYLES.dotError,\n role: \"img\",\n \"aria-label\": dotAria,\n title: dotLabel\n });\n\n const windowsButton = windowsChromeButton(view);\n const windowsDisabled = windowsButton.disabled || runs.windowsRunning || !state.writable;\n const windowsBusy = windowsButton.busy || runs.windowsRunning;\n\n // Connect mode: the bridge connects instead of launching \u2014 so what the pill\n // claims is the connect address, not a local executable the host no longer\n // launches, probes or may not even have.\n const connectLabel =\n view.windowsChrome.port > 0\n ? t(\"connectModeLabel\") + \" (http://127.0.0.1:\" + String(view.windowsChrome.port) + \")\"\n : t(\"connectModeLabel\");\n const selectedLabel = view.connectMode\n ? connectLabel\n : view.effectivePath === \"\"\n ? t(\"executableNone\")\n : executableLabel(view, view.effectivePath);\n\n // What the last run answered for the **selected** executable \u2014 the line\n // beneath the rows that produced it. While a run is in flight the line says\n // so: a healthy host leaves the version unchanged, so without this the\n // action would only be a label flip. A failed run clears the version\n // host-side, so the line never claims what it did not answer with.\n const statusLine = runs.running\n ? jsx(\"p\", { className: STYLES.result, role: \"status\", children: t(\"probing\") })\n : view.version === \"\"\n ? null\n : jsxs(\"p\", {\n className: STYLES.result,\n role: \"status\",\n children: [\n t(\"versionLabel\"),\n jsx(\"span\", { className: STYLES.resultValue, children: view.version }),\n runs.lastProbedAt === 0 ? null : jsx(\"span\", { className: STYLES.resultAge, children: probeAge(runs.lastProbedAt, runs.clock, t) })\n ]\n });\n\n // The body's one error line: what the bridge or a tool call reported (or a\n // rejected write), else the known \"executable not found\" state \u2014 the dot\n // leading the same line so the failure and its marker read as one report.\n const errorLine = view.error !== \"\"\n ? jsxs(\"p\", { className: STYLES.error, role: \"status\", children: [statusDot, view.error] })\n : view.missing\n ? jsxs(\"p\", { className: STYLES.error, role: \"status\", children: [statusDot, t(\"chromeMissing\")] })\n : null;\n\n // The page renders its own section around what is returned, so the body is\n // the stack of blocks itself \u2014 no card shell and no collapsed header.\n return jsxs(\"div\", {\n className: STYLES.body,\n children: [\n // Nothing the page can write from here is writable: the row's\n // configuration is owned elsewhere (a home patch or the page's own\n // read-only state).\n !state.writable\n ? jsx(\"p\", { className: STYLES.readOnly, role: \"status\", children: t(\"readOnly\") })\n : null,\n jsx(CatalogPicker, {\n t: t,\n entries: rows,\n options: options,\n idPlaceholder: t(\"executableIdPlaceholder\"),\n namePlaceholder: t(\"namePlaceholder\"),\n selectedId: view.effectivePath,\n selectedLabel: selectedLabel,\n selectedTitle: view.connectMode ? connectLabel : view.effectivePath !== \"\" ? view.effectivePath : selectedLabel,\n writable: state.writable,\n busy: runs.running,\n menuOpen: menuOpen,\n setMenuOpen: setMenuOpen,\n connectMode: view.connectMode,\n selectorLabel: t(\"executableLabel\"),\n hint: view.connectMode ? t(\"connectModeHint\") : t(\"executableHint\"),\n windowsLabel: windowsBusy ? t(\"openWindowsChromeBusy\") : t(windowsButton.labelKey),\n windowsTitle: t(windowsButton.titleKey),\n windowsDisabled: windowsDisabled,\n windowsOnOpen: runs.runWindowsChrome,\n rowsLabel: t(\"executableRows\"),\n emptyText: t(\"executableEmpty\"),\n idLabel: t(\"executableIdLabel\"),\n nameLabel: t(\"executableNameLabel\"),\n removeLabel: t(\"removeExecutable\"),\n addLabel: t(\"addExecutable\"),\n refreshLabel: t(\"fetchExecutables\"),\n busyLabel: t(\"fetching\"),\n select: (id: string) => {\n if (typeof props.selectExecutable === \"function\") void props.selectExecutable(id);\n },\n saveEntries: (entries: CatalogEntry[]) => props.saveExecutables(entries),\n refresh: runs.runFetch,\n statusLine: statusLine\n }),\n // The one state no control of this form can express: the host runs\n // under WSL and what is selected is a Windows executable \u2014 which the\n // bridge cannot launch, however healthy its `--version` answer looks.\n // Nothing has failed yet, so this is a notice (static copy, shown only\n // while the host reports the state), not a third error surface: the\n // required configuration differs.\n view.wslWindowsExecutable\n ? jsxs(\"div\", {\n className: STYLES.notice,\n role: \"note\",\n children: [\n jsx(\"div\", { className: STYLES.noticeTitle, children: t(\"wslWindowsTitle\") }),\n jsx(\"div\", { className: STYLES.noticeBody, children: t(\"wslWindowsNote\") })\n ]\n })\n : null,\n jsx(ExtraFlagsEditor, {\n t: t,\n flags: Array.isArray(state.extraFlags) ? state.extraFlags : [],\n defaultFlags: Array.isArray(state.defaultExtraFlags) ? state.defaultExtraFlags : [],\n wslFlags: Array.isArray(state.wslExtraFlags) ? state.wslExtraFlags : [],\n writable: state.writable,\n saveFlags: props.saveFlags\n }),\n jsx(LogOutputToggle, {\n t: t,\n checked: view.reduceChecked,\n disabled: !state.writable,\n onToggle: props.toggleStderr\n }),\n errorLine,\n runs.dialog !== null\n ? jsx(CandidateDialog, {\n t: t,\n candidates: runs.dialog.candidates,\n savedIds: savedIds,\n title: t(\"dialogExecutablesTitle\"),\n description: t(\"dialogExecutablesDescription\"),\n searchPlaceholder: t(\"searchExecutables\"),\n onAdd: runs.addFromDialog,\n onClose: runs.closeDialog\n })\n : null,\n // The form writes nothing as it is edited: every staged edit is\n // persisted only when **Apply** lands them, and **Discard** drops the\n // whole draft \u2014 reverting every staged value to what the host already\n // serves.\n jsxs(\"div\", {\n className: STYLES.footer,\n children: [\n // A staged edit announces itself on the save line, since the\n // identity line the page draws says nothing about it.\n state.dirty\n ? jsx(\"span\", { className: STYLES.badge, children: t(\"unsaved\") })\n : null,\n state.failed\n ? jsx(\"p\", { className: STYLES.footerError, role: \"status\", children: t(\"saveFailed\") })\n : null,\n jsx(\"button\", {\n type: \"button\",\n className: STYLES.footerButton,\n onClick: () => {\n if (typeof props.discard === \"function\") props.discard();\n },\n children: t(\"discard\")\n }),\n jsx(\"button\", {\n type: \"button\",\n className: STYLES.footerButton + \" \" + STYLES.footerButtonPrimary,\n disabled: !state.dirty || state.saving || !state.writable,\n onClick: () => {\n if (typeof props.apply === \"function\") void props.apply();\n },\n children: state.saving ? t(\"saving\") : t(\"apply\")\n })\n ]\n })\n ]\n });\n}\n", "export const cssText = \".e5pfpa_body{flex-direction:column;gap:10px;display:flex}.e5pfpa_field{align-items:flex-start;gap:4px;display:flex;flex-direction:column;width:100%}.e5pfpa_fieldRow{align-items:center;gap:8px;display:flex;width:100%}.e5pfpa_fieldTitle{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px;flex:1;min-width:0}.e5pfpa_fieldDesc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px;width:100%}.e5pfpa_selector{background:var(--dsw-alias-bg-module-platform);height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.e5pfpa_selector:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.e5pfpa_selector:disabled{cursor:default}.e5pfpa_selectorWrap{display:flex}.e5pfpa_pillChevron{flex:none}.e5pfpa_row{display:flex;gap:10px;align-items:center}.e5pfpa_button{display:inline-flex;align-items:center;justify-content:center;gap:4px;border:.5px solid var(--dsw-alias-border-l3);border-radius:14px;cursor:pointer;font-size:12px;line-height:18px;color:var(--dsw-alias-label-primary);background:transparent;padding:0 10px;height:28px}.e5pfpa_button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.e5pfpa_button:disabled{cursor:not-allowed;opacity:.4}.e5pfpa_button:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.e5pfpa_readOnly{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px}.e5pfpa_error{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px;line-height:1.5}.e5pfpa_dot{box-sizing:border-box;corner-shape:round;border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.e5pfpa_dotError{background:var(--dsw-alias-state-error-primary)}.e5pfpa_badge{color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-1);border-radius:10px;padding:1px 8px;font-size:11px;line-height:16px;display:inline-flex;align-items:center;flex:none}.e5pfpa_empty{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px}.e5pfpa_catalog{flex-direction:column;align-items:stretch;gap:10px;display:flex}.e5pfpa_catalog+.e5pfpa_catalog{border-top:.5px solid var(--dsw-alias-border-l2);padding-top:12px}.e5pfpa_catalog>.e5pfpa_linkButton{align-self:flex-start}.e5pfpa_catalog>.e5pfpa_linkButtonRow{align-self:flex-start;display:flex;gap:8px;align-items:center}.e5pfpa_linkButton{box-sizing:border-box;border:none;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer;border-radius:14px;align-items:center;height:28px;padding:0 10px;font:inherit;font-size:12px;line-height:18px;display:inline-flex}.e5pfpa_linkButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.e5pfpa_linkButton:disabled{opacity:.4;cursor:default}.e5pfpa_linkButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.e5pfpa_catalogEntry{border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-module-platform);border-radius:10px;padding:6px}.e5pfpa_catalogRow{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) auto;align-items:center;gap:6px;display:grid}.e5pfpa_catalogInput{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);border-radius:8px;height:28px;padding:0 10px;font:inherit;font-size:14px;line-height:22px;min-width:0;width:100%}.e5pfpa_catalogInput::placeholder{color:var(--dsw-alias-label-dimmed)}.e5pfpa_catalogInput:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-1px}.e5pfpa_catalogInput:disabled{opacity:.6;cursor:default}.e5pfpa_iconButton{box-sizing:border-box;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.e5pfpa_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.e5pfpa_iconButton:disabled{opacity:.4;cursor:default}.e5pfpa_iconButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.e5pfpa_iconButtonDanger:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary)}.e5pfpa_addButton{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border-radius:14px;align-self:flex-start;align-items:center;gap:4px;height:28px;padding:0 10px;font:inherit;font-size:12px;line-height:18px;display:inline-flex}.e5pfpa_addButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.e5pfpa_addButton:disabled{opacity:.4;cursor:default}.e5pfpa_disclosure{flex-direction:column;gap:10px;display:flex}.e5pfpa_disclosureSummary{color:var(--dsw-alias-label-secondary);cursor:pointer;list-style:none;align-items:center;gap:6px;font-size:12px;line-height:18px;user-select:none;display:flex}.e5pfpa_disclosureSummary::-webkit-details-marker{display:none}.e5pfpa_disclosureSummary:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px;border-radius:6px}.e5pfpa_disclosureLabel:before{content:\\\"\\\\25b8\\\";display:inline-block;margin-right:6px;transition:transform .16s}.e5pfpa_disclosure[open] .e5pfpa_disclosureLabel:before{transform:rotate(90deg)}.e5pfpa_disclosureCount{color:var(--dsw-alias-label-tertiary)}.e5pfpa_disclosureBody{flex-direction:column;gap:10px;display:flex}.e5pfpa_disclosureBody>.e5pfpa_linkButton{align-self:flex-start}.e5pfpa_disclosureBody>.e5pfpa_linkButtonRow{align-self:flex-start;display:flex;gap:8px;align-items:center}.e5pfpa_toggleLabel{align-items:center;display:inline-flex;flex:none}.e5pfpa_fetchDialog{background:color-mix(in srgb,var(--dsw-alias-label-primary) 28%,transparent);align-items:center;justify-content:center;display:flex;position:fixed;inset:0;z-index:90}.e5pfpa_dialogContent{background:var(--dsw-alias-bg-layer-3);border:.5px solid var(--dsw-alias-border-l3);border-radius:16px;flex-direction:column;gap:10px;width:min(520px,calc(100vw - 32px));max-height:min(620px,calc(100vh - 48px));display:flex;overflow:hidden}.e5pfpa_dialogHeader{align-items:center;gap:8px;padding:14px 16px 0;display:flex}.e5pfpa_dialogTitle{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:22px;flex:1;min-width:0;margin:0}.e5pfpa_dialogClose{box-sizing:border-box;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;flex:none;width:28px;height:28px;display:inline-flex}.e5pfpa_dialogClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.e5pfpa_dialogClose:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.e5pfpa_dialogDescription{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;margin:0;padding:0 16px}.e5pfpa_dialogBody{flex-direction:column;flex:1;gap:8px;min-height:0;padding:0 16px;display:flex}.e5pfpa_candidateToolbar{align-items:center;gap:8px;display:flex}.e5pfpa_candidateSearch{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);border-radius:8px;height:32px;padding:0 10px;font:inherit;font-size:12px;line-height:20px;flex:1;min-width:0}.e5pfpa_candidateSearch::placeholder{color:var(--dsw-alias-label-dimmed)}.e5pfpa_candidateSearch:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-1px}.e5pfpa_candidateList{flex-direction:column;gap:2px;margin:0;padding:0 0 10px;list-style:none;overflow-y:auto;display:flex}.e5pfpa_candidate{border-radius:8px;padding:4px 6px}.e5pfpa_candidate:hover{background:var(--dsw-alias-interactive-bg-hover)}.e5pfpa_candidateLabel{align-items:center;gap:8px;min-width:0;display:flex}.e5pfpa_candidateLabel input[type=checkbox]{accent-color:var(--dsw-alias-brand-primary);flex:none;margin:0}.e5pfpa_candidateId{color:var(--dsw-alias-label-primary);font-size:12px;line-height:18px;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.e5pfpa_candidateNote{color:var(--dsw-alias-label-tertiary);flex:0 1 auto;min-width:0;overflow-wrap:anywhere;font-size:11px;line-height:16px}.e5pfpa_dialogFooter{border-top:.5px solid var(--dsw-alias-border-l2);align-items:center;justify-content:flex-end;gap:8px;padding:12px 16px;display:flex}.e5pfpa_dialogButton{display:inline-flex;align-items:center;justify-content:center;gap:4px;border:.5px solid var(--dsw-alias-border-l3);border-radius:16px;cursor:pointer;font-size:13px;line-height:20px;color:var(--dsw-alias-label-primary);background:transparent;padding:0 12px;height:32px}.e5pfpa_dialogButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.e5pfpa_dialogButton:disabled{cursor:not-allowed;opacity:.4}.e5pfpa_dialogButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.e5pfpa_dialogButtonPrimary{color:var(--dsw-alias-label-primary);font-weight:600}.e5pfpa_selectorLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.e5pfpa_result{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:18px}.e5pfpa_resultValue{color:var(--dsw-alias-label-secondary);margin-left:4px}.e5pfpa_resultAge{color:var(--dsw-alias-label-dimmed);margin-left:4px}.e5pfpa_notice{flex-direction:column;gap:4px;display:flex;border:.5px solid var(--dsw-alias-border-l3);border-radius:10px;background:var(--dsw-alias-bg-layer-1);padding:8px 10px}.e5pfpa_noticeTitle{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:600;line-height:18px}.e5pfpa_noticeBody{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.e5pfpa_docsLink{color:var(--dsw-alias-label-tertiary);align-items:center;gap:4px;display:inline-flex;text-decoration:none;font-size:12px;line-height:1.5}.e5pfpa_docsLinkLabel{text-decoration:none}.e5pfpa_docsLink:hover{color:var(--dsw-alias-brand-primary)}.e5pfpa_docsLink:hover .e5pfpa_docsLinkLabel{text-decoration:underline}.e5pfpa_docsLink:hover .e5pfpa_docsIcon{color:var(--dsw-alias-brand-primary)}.e5pfpa_docsIcon{color:var(--dsw-alias-label-tertiary);flex:none}.e5pfpa_docsLink:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px;border-radius:4px}.e5pfpa_catalogRowSingle{grid-template-columns:minmax(0,1fr) auto}.e5pfpa_catalogInputMono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.e5pfpa_footer{border-top:.5px solid var(--dsw-alias-border-l2);align-items:center;justify-content:flex-end;gap:8px;padding:12px 0 0;display:flex}.e5pfpa_footerError{color:var(--dsw-alias-label-error);text-align:right;min-width:0;flex:1;margin:0;font-size:12px;line-height:1.5}.e5pfpa_footerButton{border:.5px solid var(--dsw-alias-border-l3);border-radius:8px;cursor:pointer;color:var(--dsw-alias-label-secondary);background:transparent;padding:5px 14px;font-size:13px;line-height:1.5}.e5pfpa_footerButton:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.e5pfpa_footerButton:disabled{cursor:default;opacity:.4}.e5pfpa_footerButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.e5pfpa_footerButtonPrimary{color:var(--dsw-alias-bg-layer-3);font-weight:600;background:var(--dsw-alias-label-primary);border-color:transparent}.e5pfpa_footerButtonPrimary:hover:not(:disabled){color:var(--dsw-alias-bg-layer-3);background:var(--dsw-alias-label-secondary);border-color:transparent}\\n\";\nexport default {\"body\":\"e5pfpa_body\",\"field\":\"e5pfpa_field\",\"fieldRow\":\"e5pfpa_fieldRow\",\"fieldTitle\":\"e5pfpa_fieldTitle\",\"fieldDesc\":\"e5pfpa_fieldDesc\",\"selector\":\"e5pfpa_selector\",\"selectorWrap\":\"e5pfpa_selectorWrap\",\"pillChevron\":\"e5pfpa_pillChevron\",\"row\":\"e5pfpa_row\",\"button\":\"e5pfpa_button\",\"readOnly\":\"e5pfpa_readOnly\",\"error\":\"e5pfpa_error\",\"dot\":\"e5pfpa_dot\",\"dotError\":\"e5pfpa_dotError\",\"badge\":\"e5pfpa_badge\",\"empty\":\"e5pfpa_empty\",\"catalog\":\"e5pfpa_catalog\",\"linkButton\":\"e5pfpa_linkButton\",\"linkButtonRow\":\"e5pfpa_linkButtonRow\",\"catalogEntry\":\"e5pfpa_catalogEntry\",\"catalogRow\":\"e5pfpa_catalogRow\",\"catalogInput\":\"e5pfpa_catalogInput\",\"iconButton\":\"e5pfpa_iconButton\",\"iconButtonDanger\":\"e5pfpa_iconButtonDanger\",\"addButton\":\"e5pfpa_addButton\",\"disclosure\":\"e5pfpa_disclosure\",\"disclosureSummary\":\"e5pfpa_disclosureSummary\",\"disclosureLabel\":\"e5pfpa_disclosureLabel\",\"disclosureCount\":\"e5pfpa_disclosureCount\",\"disclosureBody\":\"e5pfpa_disclosureBody\",\"toggleLabel\":\"e5pfpa_toggleLabel\",\"fetchDialog\":\"e5pfpa_fetchDialog\",\"dialogContent\":\"e5pfpa_dialogContent\",\"dialogHeader\":\"e5pfpa_dialogHeader\",\"dialogTitle\":\"e5pfpa_dialogTitle\",\"dialogClose\":\"e5pfpa_dialogClose\",\"dialogDescription\":\"e5pfpa_dialogDescription\",\"dialogBody\":\"e5pfpa_dialogBody\",\"candidateToolbar\":\"e5pfpa_candidateToolbar\",\"candidateSearch\":\"e5pfpa_candidateSearch\",\"candidateList\":\"e5pfpa_candidateList\",\"candidate\":\"e5pfpa_candidate\",\"candidateLabel\":\"e5pfpa_candidateLabel\",\"candidateId\":\"e5pfpa_candidateId\",\"candidateNote\":\"e5pfpa_candidateNote\",\"dialogFooter\":\"e5pfpa_dialogFooter\",\"dialogButton\":\"e5pfpa_dialogButton\",\"dialogButtonPrimary\":\"e5pfpa_dialogButtonPrimary\",\"selectorLabel\":\"e5pfpa_selectorLabel\",\"result\":\"e5pfpa_result\",\"resultValue\":\"e5pfpa_resultValue\",\"resultAge\":\"e5pfpa_resultAge\",\"notice\":\"e5pfpa_notice\",\"noticeTitle\":\"e5pfpa_noticeTitle\",\"noticeBody\":\"e5pfpa_noticeBody\",\"docsLink\":\"e5pfpa_docsLink\",\"docsLinkLabel\":\"e5pfpa_docsLinkLabel\",\"docsIcon\":\"e5pfpa_docsIcon\",\"catalogRowSingle\":\"e5pfpa_catalogRowSingle\",\"catalogInputMono\":\"e5pfpa_catalogInputMono\",\"footer\":\"e5pfpa_footer\",\"footerError\":\"e5pfpa_footerError\",\"footerButton\":\"e5pfpa_footerButton\",\"footerButtonPrimary\":\"e5pfpa_footerButtonPrimary\"};", "/**\n * The extra-flags editor \u2014 the one catalog block the reference card has no\n * equivalent for (it carries no free-form list field). It is the flags half of\n * the two halves `./rows.ts` renders: the same rows, read through the single\n * field a flag actually has \u2014 the value itself \u2014 instead of the executable\n * block's path + display name. Nothing about the list's rules changes on the\n * way here: a blur/Enter commits the whole list, a delete persists on the spot,\n * and a blank added row is local until it carries text.\n *\n * The block keeps the shape the reference's catalogs carry: the two-row field\n * (title with the configuration-guide link inline, hint below) and then the\n * rows, folded behind the same collapsed `<details>` disclosure the executable\n * block uses, so the two catalogs read as one widget shape.\n *\n * The write goes through `saveFlags` (the host validates the list, then\n * restarts the bridge connection in place). An empty row is never persisted:\n * the write side rejects an empty flag, so a row with no text is dropped on the\n * way out \u2014 the same rule the executable rows follow with an id-less row.\n *\n * The **Restore defaults** control is the list's own action: it keeps every\n * flag the rows already carry and appends only the defaults still missing (the\n * host serves the defaults list, so the card carries no copy of it), writing\n * the merged list exactly the way any other row write does \u2014 defaults are\n * recovered, nothing that is there is dropped.\n *\n * **Flags WSL** rides the same list with the same merge rule against a\n * different served list: it keeps everything the rows carry, appends only the\n * recommended WSL \u2194 Windows flags still missing, and modifies or drops nothing\n * (the host serves the recommended list too, the same way it serves the\n * defaults).\n */\n\n/// <reference path=\"../shell-modules.d.ts\" />\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport { CONFIGURATION_URL } from \"../plugin-meta.js\";\nimport STYLES from \"../styles/ChromeMcpCard.module.css\";\nimport { DOCS_PATHS } from \"./icons.js\";\nimport { RowList } from \"./rows.js\";\n\n/** One flag list per row: the single field, held as one column. */\nfunction rowsOf(flags: readonly string[]): string[][] {\n return flags.map((flag: string) => [flag]);\n}\n\n/** The rows as a plain flags list: trimmed, with a row still without a value\n * dropped rather than persisted (the write side rejects an empty flag) and\n * duplicates folded \u2014 first row wins, the rule the saved executable rows\n * already follow for a repeated id. */\nfunction flagsOf(rows: readonly string[][]): string[] {\n var flags: string[] = [];\n for (const row of rows) {\n var flag = typeof row === \"undefined\" || row === null ? \"\" : String(row[0] ?? \"\").trim();\n if (flag === \"\") continue;\n if (flags.indexOf(flag) !== -1) continue;\n flags.push(flag);\n }\n return flags;\n}\n\nexport function ExtraFlagsEditor(props: any): any {\n var t = props.t;\n var writable = props.writable;\n var flags: string[] = Array.isArray(props.flags) ? props.flags : [];\n var defaults: string[] = Array.isArray(props.defaultFlags) ? props.defaultFlags : [];\n var wsl: string[] = Array.isArray(props.wslFlags) ? props.wslFlags : [];\n var save = (next: string[][]) => {\n if (typeof props.saveFlags !== \"function\") return Promise.resolve();\n return Promise.resolve(props.saveFlags(flagsOf(next)));\n };\n /**\n * Restore defaults without dropping anything: every flag the rows carry is\n * kept, and only the host-served defaults still missing are appended. The\n * write is an ordinary whole-list row write, so the local view and the\n * saved list never disagree.\n */\n var restoreAction = (visible: string[][]) => {\n var current = flagsOf(visible);\n var merged = current.concat(defaults.filter((flag: string) => current.indexOf(flag) === -1));\n return jsx(\"button\", {\n type: \"button\",\n className: STYLES.linkButton,\n // The defaults list is host-served \u2014 with nothing to recover there\n // is nothing to do.\n disabled: !writable || defaults.length === 0,\n title: t(\"flagsRestoreTitle\"),\n onClick: () => {\n if (!writable) return;\n save(merged.map((flag: string) => [flag]));\n },\n children: t(\"flagsRestore\")\n });\n };\n /**\n * **Flags WSL** \u2014 the list's other append action, the same merge rule read\n * through the recommended list the host serves instead of the defaults:\n * every flag the rows already carry stays exactly where it is (nothing is\n * dropped, nothing is modified), and only the recommended flags still\n * missing are appended. As with the defaults, the card carries no copy of\n * the list \u2014 it is what the host answers with that gets added.\n */\n var wslAction = (visible: string[][]) => {\n var current = flagsOf(visible);\n var merged = current.concat(wsl.filter((flag: string) => current.indexOf(flag) === -1));\n return jsx(\"button\", {\n type: \"button\",\n className: STYLES.linkButton,\n // The recommended list is host-served \u2014 with every one of them\n // already in the rows there is nothing left to add.\n disabled: !writable || wsl.length === 0,\n title: t(\"flagsWslTitle\"),\n onClick: () => {\n if (!writable) return;\n save(merged.map((flag: string) => [flag]));\n },\n children: t(\"flagsWsl\")\n });\n };\n /** Both list actions ride the list's one action slot, side by side in one\n * line \u2014 they do the same job against two different host-served lists. */\n var renderActions = (visible: string[][]) =>\n jsxs(\"div\", {\n className: STYLES.linkButtonRow,\n children: [restoreAction(visible), wslAction(visible)]\n });\n return jsxs(\"div\", {\n className: STYLES.catalog,\n children: [\n jsxs(\"div\", {\n className: STYLES.field,\n children: [\n jsxs(\"div\", {\n className: STYLES.fieldRow,\n children: [\n jsx(\"span\", { className: STYLES.fieldTitle, children: t(\"flagsTitle\") }),\n // The guide link rides the same field row the picker's\n // pill occupies.\n jsxs(\"a\", {\n className: STYLES.docsLink,\n href: CONFIGURATION_URL,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: t(\"docsMessage\"),\n children: [\n jsx(\"svg\", {\n className: STYLES.docsIcon,\n width: 14,\n height: 14,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n \"aria-hidden\": \"true\",\n children: DOCS_PATHS.map((d: string, at: number) => jsx(\"path\", { d: d }, at))\n }),\n jsx(\"span\", { className: STYLES.docsLinkLabel, children: t(\"docsLinkLabel\") })\n ]\n })\n ]\n }),\n jsx(\"div\", { className: STYLES.fieldDesc, children: t(\"flagsHint\") })\n ]\n }),\n // One row per saved flag: the single field is the flag itself, and\n // the two append controls \u2014 Restore defaults and Flags WSL \u2014 ride\n // the list's action line.\n jsx(RowList, {\n values: rowsOf(flags),\n labels: [t(\"flagsValueLabel\")],\n placeholders: [t(\"flagsValuePlaceholder\")],\n writable: writable,\n save: save,\n renderAction: renderActions,\n emptyText: t(\"flagsEmpty\"),\n rowsLabel: t(\"flagsRows\"),\n addLabel: t(\"addFlag\"),\n removeLabel: t(\"removeFlag\"),\n rowClassName: STYLES.catalogRowSingle,\n inputClassName: STYLES.catalogInputMono,\n disclosure: true\n })\n ]\n });\n}\n", "/**\n * Browser half \u2014 identity and the services the shell must resolve.\n *\n * The identifiers are contracts with the host half: the profile entry id is the\n * key every read and write goes through (both the configuration form's entry and\n * the row the bundle's own patch declares), the locale namespace is the lookup\n * root for every string the card renders, and the npm id tags the DOM this half\n * owns. The browser half is emitted on its own, so it cannot import\n * ./host/constants.ts and they are mirrored here \u2014 `test/client.test.mjs` pins\n * the mirror against the host half's export so a drift fails loudly.\n */\n\n/** Profile entry id the host half serves; the configuration form's key. */\nexport const ENTRY_ID = \"mcp-chrome\";\n\n/** npm id of this package; tags the injected `style` element. */\nexport const PLUGIN_ID = \"@comecaramelos/dsh-chrome-mcp\";\n\n/**\n * npm id of the bundle the row's patch layer lives in. A component is not its\n * own bundle \u2014 the row arrives through the manager bundle's patch, so the page\n * this card registers into is keyed by that id, not by this package.\n */\nexport const BUNDLE_ID = \"@comecaramelos/dsh-mcp-manager-bundle\";\n\n/**\n * Key this card registers the row-configuration slot under. The Plugins page\n * composes it as `<bundle>#<row id>` \u2014 the bundle a person installs, not the\n * package the row runs \u2014 so it is a *derived* key rather than a separate\n * identity: `ENTRY_ID` is what every read and write actually goes through, and\n * the bundle id only scopes it. Two components in one bundle therefore cannot\n * alias, and the card never claims a row that is not its own.\n */\nexport const ROW_CONFIG_KEY = `${BUNDLE_ID}#${ENTRY_ID}`;\n\n/** Locale dictionary namespace this half registers and renders from. */\nexport const LOCALE_NAMESPACE = \"chromeMcp\";\n\n/** Upstream configuration docs link (must match host CONFIGURATION_DOCS_URL). */\nexport const CONFIGURATION_URL =\n \"https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/configuration.md\";\n\n/**\n * The wall-clock backstop for every Host run the card waits on (a fetch, a\n * pick, Prelaunch Windows Chrome): the run's own counter settles the wait, this\n * only answers a Host that never does. Generous, because a Windows Chrome\n * launch through the interop mount takes its time.\n */\nexport const RUN_SETTLE_TIMEOUT_MS = 90000;\n\n/**\n * The Host's live-mirror keys, which every card write clears so a save never\n * persists them. Mirrored from `liveMirrorKeys()` in host/values.ts (the\n * browser half cannot import the host) \u2014 `test/client.test.mjs` pins the two.\n */\nexport const LIVE_KEYS: readonly string[] = [\n \"lastError\",\n \"chromeMissing\",\n \"executableDiscoveryRevision\",\n \"chromeVersion\",\n \"executableStatus\",\n \"effectiveChromePath\",\n \"effectiveSource\",\n \"stderrEffective\",\n \"defaultExtraFlags\",\n \"wslExtraFlags\",\n \"wslWindowsExecutable\",\n \"windowsChromeStatus\",\n \"carriesConnectionMode\",\n \"runningFlags\",\n \"runningNote\"\n];\n", "/**\n * The card's icon paths \u2014 the shapes the stock primitives do not carry.\n *\n * Every card icon is copied from the matching shell primitive so the card\n * matches the rest of the UI pixel for pixel; a shell icon bump is the only\n * reason to touch these. The external-link mark is the exception: no shell\n * primitive carries it, so it is the stroke idiom the reference card uses for\n * the same purpose \u2014 stroke-only paths on a 24-unit viewBox, `currentColor`\n * carried by the stroke, rounded caps and joins.\n */\n\n/** Chevron matching the shell's IconChevronDownOutline14 primitive. */\nexport const CHEVRON_PATH =\n \"M11.8486 5.5L11.4238 5.92383L8.69727 8.65137C8.44157 8.90706 8.21562 9.13382 8.01172 9.29785C7.79912 9.46883 7.55595 9.61756 7.25 9.66602C7.08435 9.69222 6.91565 9.69222 6.75 9.66602C6.44405 9.61756 6.20088 9.46883 5.98828 9.29785C5.78438 9.13382 5.55843 8.90706 5.30273 8.65137L2.57617 5.92383L2.15137 5.5L3 4.65137L3.42383 5.07617L6.15137 7.80273C6.42595 8.07732 6.59876 8.24849 6.74023 8.3623C6.87291 8.46904 6.92272 8.47813 6.9375 8.48047C6.97895 8.48703 7.02105 8.48703 7.0625 8.48047C7.07728 8.47813 7.12709 8.46904 7.25977 8.3623C7.40124 8.24849 7.57405 8.07732 7.84863 7.80273L10.5762 5.07617L11 4.65137L11.8486 5.5Z\";\n\n/** Trash icon for a row's delete button (stock 16px stroke idiom). */\nexport const TRASH_PATH =\n \"M2.5 4h11M6.5 4V2.5h3V4M4 4l.7 9a1 1 0 001 .9h4.6a1 1 0 001-.9L12 4M6.5 6.8v4.4M9.5 6.8v4.4\";\n\n/** The two diagonals of the fetch dialog's close icon (stock 16px cross). */\nexport const CLOSE_PATHS = [\n \"M14.1168 13.197L13.197 14.1167L1.8833 2.80303L2.80309 1.88324L14.1168 13.197Z\",\n \"M13.197 1.88326L14.1168 2.80305L2.80309 14.1168L1.8833 13.197L13.197 1.88326Z\"\n];\n\n/** External-link mark, in the same stroke idiom. */\nexport const DOCS_PATHS = [\n \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\",\n \"M15 3h6v6\",\n \"M10 14 21 3\"\n];\n", "/**\n * The rows list both catalogs render \u2014 the reference card's catalog rows, held\n * in one module so the saved executables and the extra flags read as one widget\n * instead of two lookalikes.\n *\n * A row is a bordered box of text fields in column order, every box ending on\n * the row's delete control; the list opens on the empty line and closes on the\n * add control. The executable block hands it two fields (the path and the\n * display name) folded behind the reference card's \"Customized settings\"\n * disclosure, the flags block a single field (the flag itself). Both now fold\n * behind the same collapsed `<details>` disclosure \u2014 the two blocks read as one\n * widget shape, differing only in how many fields a row carries.\n *\n * Like the reference card's `editing` map, rows come from the served snapshot\n * with a local draft overlaying them only while an edit is pending: typing does\n * not persist, a blur/Enter commits the whole list, a delete persists\n * immediately, and \"add\" appends a local blank row that only becomes a saved row\n * once it is typed in. Once the field is idle, the next host push (a discovery\n * merge that added rows, or a defaults restore) becomes the view again.\n *\n * The list action belongs to the caller (`renderAction`) and is handed the rows\n * exactly as they are visible plus the write that persists them: the picker's\n * **Fetch executables** asks the host to re-scan the machine's list, and the\n * flags block lines its two append controls up in the one slot \u2014 **Restore\n * defaults** appends what the defaults list is missing to precisely what the\n * rows already carry, **Flags WSL** the missing recommended WSL \u2194 Windows\n * flags the same way.\n */\n\n/// <reference path=\"../shell-modules.d.ts\" />\nimport * as react from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport STYLES from \"../styles/ChromeMcpCard.module.css\";\nimport { TRASH_PATH } from \"./icons.js\";\n\n/** One row's field values, in column order (the path + the name, or the flag). */\nexport type RowValues = string[];\n\n/** Persist one whole row list; the write side re-normalizes what lands. */\nexport type SaveRows = (rows: RowValues[]) => unknown;\n\n/**\n * Render one catalog's row list \u2014 the empty line, the rows and the add control.\n * @param props - the served rows (`values`), the per-column copy (`labels`,\n * `placeholders`), the write (`save`) and the shape knobs: `disclosure` folds\n * the rows behind a `<details>` (the two-field executable list, which sits\n * under the pill), `rowClassName` / `inputClassName` carry the single-field\n * column variant a block needs when the two-column grid would not fit.\n */\nexport function RowList(props: any): any {\n var served: RowValues[] = Array.isArray(props.values) ? props.values : [];\n var writable = props.writable === true;\n var busy = props.busy === true;\n var labels: string[] = Array.isArray(props.labels) ? props.labels : [];\n var placeholders: string[] = Array.isArray(props.placeholders) ? props.placeholders : [];\n var columns = Math.max(1, labels.length);\n var blankRow: RowValues = [];\n for (var blank = 0; blank < columns; blank++) blankRow.push(\"\");\n var draftState = react.useState<RowValues[] | null>(null);\n var draft = draftState[0];\n var setDraft = draftState[1];\n var focusedState = react.useState(false);\n var focused = focusedState[0];\n var setFocused = focusedState[1];\n var servedKey = JSON.stringify(served);\n var syncState = react.useState(\"\");\n var servedSync = syncState[0];\n var setServedSync = syncState[1];\n // A host push replaces an idle draft \u2014 that is how a discovery merge that\n // added rows (or a defaults restore) becomes visible again.\n if (servedKey !== servedSync) {\n setServedSync(servedKey);\n if (!focused) setDraft(null);\n }\n var rows: RowValues[] = draft === null ? served : draft;\n\n /**\n * Persist one whole list, and hold the local view to exactly what was\n * written: every structural change (delete, the caller's own action) lands\n * this way, so the draft never disagrees with the write. Deciding whether a\n * write is worth doing belongs to the write side, which normalizes and\n * compares \u2014 the list only hands it rows.\n */\n var save = (next: RowValues[]) => {\n if (typeof props.save !== \"function\") return Promise.resolve();\n setDraft(next);\n return Promise.resolve(props.save(next)).catch(() => { });\n };\n\n var withDraft = (make: (current: RowValues[]) => RowValues[]) => make(draft === null ? served : draft);\n\n var patchRow = (index: number, column: number, value: string) => {\n setFocused(true);\n setDraft(\n withDraft((current: RowValues[]) =>\n current.map((row: RowValues, at: number) =>\n at === index ? row.map((cell: string, field: number) => (field === column ? value : cell)) : row\n )\n )\n );\n };\n\n var removeRow = (index: number) => {\n if (!writable || rows[index] === void 0) return;\n save(rows.filter((_row: RowValues, at: number) => at !== index));\n };\n\n var addRow = () => {\n if (!writable) return;\n // A blank row is local until it carries a value: a write that strips the\n // empty row is what turns it into a saved row \u2014 the draft keeps it\n // visible either way.\n setDraft(withDraft((current: RowValues[]) => current.concat([blankRow])));\n };\n\n /** Idle rows are the truth; only a pending edit has to be written. */\n var commit = () => {\n if (draft === null) return;\n save(rows);\n };\n\n var fieldNode = (row: RowValues, index: number, column: number) =>\n jsx(\"input\", {\n className: props.inputClassName ? STYLES.catalogInput + \" \" + props.inputClassName : STYLES.catalogInput,\n type: \"text\",\n value: row[column] === undefined ? \"\" : row[column],\n placeholder: placeholders[column],\n \"aria-label\": labels[column] + \" \" + (index + 1),\n title: column === 0 ? row[column] : void 0,\n disabled: !writable,\n spellCheck: false,\n autoComplete: \"off\",\n autocapitalize: \"off\",\n onChange: (event: any) => {\n patchRow(index, column, event && event.target ? String(event.target.value ?? \"\") : \"\");\n },\n onFocus: () => setFocused(true),\n onBlur: () => {\n setFocused(false);\n commit();\n },\n onKeyDown: (event: any) => {\n if (event && event.key === \"Enter\") {\n setFocused(false);\n commit();\n }\n }\n }, column);\n\n var entryNode = (row: RowValues, index: number) => {\n var cells: any[] = [];\n var width = row.length === 0 ? columns : row.length;\n for (var column = 0; column < width; column++) cells.push(fieldNode(row, index, column));\n cells.push(\n jsx(\"button\", {\n type: \"button\",\n className: STYLES.iconButton + \" \" + STYLES.iconButtonDanger,\n \"aria-label\": props.removeLabel + \" \" + (index + 1),\n title: props.removeLabel,\n disabled: !writable,\n onClick: () => {\n removeRow(index);\n },\n children: jsx(\"svg\", {\n width: 14,\n height: 14,\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n \"aria-hidden\": \"true\",\n children: jsx(\"path\", {\n d: TRASH_PATH,\n stroke: \"currentColor\",\n strokeWidth: 1.3,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n })\n })\n );\n return jsx(\"div\", {\n className: STYLES.catalogEntry,\n children: jsxs(\"div\", {\n className: props.rowClassName ? STYLES.catalogRow + \" \" + props.rowClassName : STYLES.catalogRow,\n children: cells\n })\n }, index);\n };\n\n // The body, in render order: the caller's action (the reference card's body\n // opens on its fetch link, the flags block opens on Restore defaults), one\n // box per row, then the add control.\n var body: any[] = [];\n if (typeof props.renderAction === \"function\") body.push(props.renderAction(rows, save));\n var visible: any[] = [];\n for (var index = 0; index < rows.length; index++) visible.push(entryNode(rows[index], index));\n body = body.concat(visible);\n body.push(\n jsx(\"button\", {\n type: \"button\",\n className: STYLES.addButton,\n disabled: !writable || busy,\n onClick: addRow,\n children: props.addLabel\n })\n );\n var emptyLine = rows.length === 0 ? jsx(\"p\", { className: STYLES.empty, children: props.emptyText }) : null;\n\n if (props.disclosure !== true) {\n // No disclosure to fold behind: the single-field list reads straight\n // into the block, the same boxes at the same rhythm.\n return [emptyLine].concat(body);\n }\n return [\n emptyLine,\n jsxs(\"details\", {\n className: STYLES.disclosure,\n children: [\n jsxs(\"summary\", {\n className: STYLES.disclosureSummary,\n children: [\n jsx(\"span\", { className: STYLES.disclosureLabel, children: props.rowsLabel }),\n jsx(\"span\", { className: STYLES.disclosureCount, children: String(rows.length) })\n ]\n }),\n jsx(\"div\", { className: STYLES.disclosureBody, children: body })\n ]\n })\n ];\n}\n", "/**\n * The named picker \u2014 one Menu pill over the saved rows plus a catalog list you\n * can refresh, extend by hand and prune. It mirrors the reference card's picker\n * byte for byte in structure (field row \u2192 disclosure \u2192 rows) so the two cards\n * read as one component set; `statusLine` is the only extra slot, and the card\n * uses it for the probe result line the reference has no equivalent for.\n *\n * The row list itself is ./rows.ts \u2014 the same half the extra-flags block\n * renders, read here through two fields (the path and the display name) and\n * folded behind a collapsed `<details>` disclosure (the reference card's\n * \"Customized settings\" idiom), so only the field row and the dropdown are\n * visible until the user opens the row list.\n */\n\n/// <reference path=\"../shell-modules.d.ts\" />\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport { Menu } from \"@deepseek-ai/dsh-client-ui-primitives\";\nimport type { CatalogEntry } from \"../catalog.js\";\nimport STYLES from \"../styles/ChromeMcpCard.module.css\";\nimport { CHEVRON_PATH } from \"./icons.js\";\nimport { RowList } from \"./rows.js\";\n\nexport function CatalogPicker(props: any): any {\n var entries: CatalogEntry[] = props.entries;\n var options = props.options;\n var selectedId = props.selectedId;\n var writable = props.writable;\n var busy = props.busy === true;\n // The saved rows are what the list renders: `id` is the path that goes on\n // the wire, `name` the label the card shows (\"\" \u2192 render the path).\n var rows: string[][] = entries.map((entry: CatalogEntry) => [entry.id, entry.name]);\n\n /**\n * A whole-list write: the list owns the draft, the controller normalizes on\n * the way in and re-runs the scan the new ids imply.\n */\n var saveEntries = (next: string[][]) => {\n if (typeof props.saveEntries !== \"function\") return Promise.resolve();\n return Promise.resolve(props.saveEntries(next.map((row) => ({ id: row[0] ?? \"\", name: row[1] ?? \"\" }))));\n };\n\n // The fetch action belongs to this catalog's rows, so it lives inside the\n // body's head, not the field row. The Windows Chrome button rides the same\n // line (the two actions of the executable block, like the flags block\n // carries its two append actions).\n var fetchAction = () =>\n jsx(\"button\", {\n type: \"button\",\n className: STYLES.linkButton,\n disabled: !writable || busy,\n onClick: () => {\n props.refresh();\n },\n children: busy ? props.busyLabel : props.refreshLabel\n });\n var windowsAction = () =>\n jsx(\"button\", {\n type: \"button\",\n className: STYLES.linkButton,\n disabled: props.windowsDisabled === true,\n title: props.windowsTitle,\n onClick: () => {\n if (typeof props.windowsOnOpen === \"function\") props.windowsOnOpen();\n },\n children: props.windowsLabel\n });\n var renderActions = () =>\n jsxs(\"div\", {\n className: STYLES.linkButtonRow,\n children: [fetchAction(), windowsAction()]\n });\n\n return jsxs(\"div\", {\n className: STYLES.catalog,\n children: [\n jsxs(\"div\", {\n className: STYLES.field,\n children: [\n jsxs(\"div\", {\n className: STYLES.fieldRow,\n children: [\n jsx(\"span\", { className: STYLES.fieldTitle, children: props.selectorLabel }),\n jsx(\"span\", {\n className: STYLES.selectorWrap,\n children: jsx(Menu, {\n open: props.menuOpen,\n onClose: () => {\n props.setMenuOpen(false);\n },\n items: options,\n selectedId: options.some((option: { id: string }) => option.id === selectedId) ? selectedId : \"\",\n onSelect: (id: string) => {\n props.setMenuOpen(false);\n props.select(id);\n },\n align: \"end\",\n portal: true,\n anchor: jsxs(\"button\", {\n type: \"button\",\n className: STYLES.selector,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": props.menuOpen,\n disabled: !writable || busy,\n title: props.selectedTitle,\n onClick: () => {\n props.setMenuOpen(!props.menuOpen);\n },\n children: [\n // The reference card hands the pill a bare label;\n // the path needs its own truncating span.\n jsx(\"span\", { className: STYLES.selectorLabel, children: props.selectedLabel }),\n jsx(\"svg\", {\n width: 14,\n height: 14,\n className: STYLES.pillChevron,\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: jsx(\"path\", { d: CHEVRON_PATH, fill: \"currentColor\" })\n })\n ]\n })\n })\n })\n ]\n }),\n jsx(\"div\", { className: STYLES.fieldDesc, children: props.hint })\n ]\n }),\n // The saved rows: two fields per row, folded behind the disclosure,\n // with the fetch action sitting inside the body.\n jsx(RowList, {\n values: rows,\n labels: [props.idLabel, props.nameLabel],\n placeholders: [props.idPlaceholder, props.namePlaceholder],\n writable: writable,\n busy: busy,\n save: saveEntries,\n renderAction: renderActions,\n emptyText: props.emptyText,\n rowsLabel: props.rowsLabel,\n addLabel: props.addLabel,\n removeLabel: props.removeLabel,\n disclosure: true\n }),\n props.statusLine === undefined || props.statusLine === null ? null : props.statusLine\n ]\n });\n}\n", "/**\n * The fetch dialog \u2014 the \"choose which executables to keep\" modal the fetch\n * action opens once the host's executable run settled.\n *\n * One checkbox row per detected candidate \u2014 each carrying the answer the run\n * gave for it (its version line, or why it is not runnable), the reference\n * card's note slot. Already-saved paths are carried pre-checked and disabled\n * (removal is the row list's delete button, never a dialog side effect), a\n * search field sifts long path lists, and the footer's \"Add selected\" merges\n * the checked paths into the saved rows. Nothing here persists on its own:\n * closing with Cancel or the header X leaves the catalog untouched.\n */\nimport * as react from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport STYLES from \"../styles/ChromeMcpCard.module.css\";\nimport { CLOSE_PATHS } from \"./icons.js\";\n\n/**\n * Candidate rows arrive from the run that opened the dialog (the controller's\n * candidate list); the dialog itself keeps only its filter/selection draft, so\n * a re-render of the card cannot disturb the draft.\n */\nexport function CandidateDialog(props: any): any {\n var t = props.t;\n var candidates: { id: string; note: string; broken: boolean }[] = props.candidates;\n var savedIds: string[] = props.savedIds;\n var savedSet = new Set(savedIds);\n var initialChecked = candidates.filter((candidate) => savedSet.has(candidate.id)).map((candidate) => candidate.id);\n // The dialog mounts over a run that just landed; one keyed draft object\n // holds the filter + selection so a new candidate list resets the whole\n // draft (the row list's served-sync idiom, for a whole dialog session \u2014\n // nothing may bleed from a previous run).\n var servedKey = JSON.stringify(candidates) + \"|\" + JSON.stringify(savedIds);\n var draftState = react.useState({ key: \"\", query: \"\", checked: [] as string[] });\n var draft = draftState[0];\n var setDraft = draftState[1];\n var dirty = draft.key !== servedKey;\n var query = dirty ? \"\" : draft.query;\n var checked = dirty ? initialChecked : draft.checked;\n var checkedSet = new Set(checked);\n var setQuery = (value: string) => {\n setDraft({ key: servedKey, query: value, checked: Array.from(checkedSet) });\n };\n var setChecked = (make: (current: string[]) => string[]) => {\n setDraft({ key: servedKey, query: query, checked: make(checked) });\n };\n var needle = query.trim().toLowerCase();\n var shown = needle === \"\" ? candidates : candidates.filter((candidate) => candidate.id.toLowerCase().indexOf(needle) !== -1);\n var addable = shown.filter((candidate) => !savedSet.has(candidate.id)).map((candidate) => candidate.id);\n var allChecked = addable.length > 0 && addable.every((id: string) => checkedSet.has(id));\n\n var toggle = (id: string, value: boolean) => {\n setChecked((current: string[]) => (value ? current.concat([id]) : current.filter((entry: string) => entry !== id)));\n };\n\n return jsxs(\"div\", {\n className: STYLES.fetchDialog,\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-label\": props.title,\n children: [\n jsxs(\"div\", {\n className: STYLES.dialogContent,\n children: [\n jsxs(\"div\", {\n className: STYLES.dialogHeader,\n children: [\n jsx(\"h2\", { className: STYLES.dialogTitle, children: props.title }),\n jsx(\"button\", {\n type: \"button\",\n className: STYLES.dialogClose,\n \"aria-label\": t(\"close\"),\n onClick: () => props.onClose(),\n children: jsx(\"svg\", {\n width: 14,\n height: 14,\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-hidden\": \"true\",\n children: CLOSE_PATHS.map((d: string, at: number) => jsx(\"path\", { d: d, fill: \"currentColor\" }, at))\n })\n })\n ]\n }),\n jsx(\"p\", { className: STYLES.dialogDescription, children: props.description }),\n jsxs(\"div\", {\n className: STYLES.dialogBody,\n children: [\n jsxs(\"div\", {\n className: STYLES.candidateToolbar,\n children: [\n jsx(\"input\", {\n className: STYLES.candidateSearch,\n type: \"search\",\n placeholder: props.searchPlaceholder,\n \"aria-label\": props.searchPlaceholder,\n value: query,\n onChange: (event: any) => {\n setQuery(event && event.target ? String(event.target.value ?? \"\") : \"\");\n }\n }),\n jsx(\"button\", {\n type: \"button\",\n className: STYLES.linkButton,\n onClick: () => {\n if (allChecked) setChecked(() => []);\n else setChecked((current: string[]) => Array.from(new Set(current.concat(addable))));\n },\n children: t(\"selectAll\")\n })\n ]\n }),\n shown.length === 0\n ? jsx(\"p\", { className: STYLES.empty, children: t(\"dialogEmpty\") })\n : jsx(\"ul\", {\n className: STYLES.candidateList,\n children: shown.map((candidate) => {\n var isSaved = savedSet.has(candidate.id);\n // A row already saved carries the tag that\n // says so; anything else carries the run's\n // own answer.\n // Whatever the run answered leads the row;\n // a saved path with nothing to report says\n // it is already saved.\n var note = candidate.note !== \"\" ? candidate.note : (isSaved ? t(\"candidateSaved\") : \"\");\n return jsx(\"li\", {\n className: STYLES.candidate,\n children: jsxs(\"label\", {\n className: STYLES.candidateLabel,\n children: [\n jsx(\"input\", {\n type: \"checkbox\",\n checked: isSaved ? true : checkedSet.has(candidate.id),\n disabled: isSaved,\n onChange: (event: any) => {\n toggle(candidate.id, !!(event && event.target && event.target.checked));\n }\n }),\n jsx(\"span\", { className: STYLES.candidateId, children: candidate.id }),\n note === \"\" ? null : jsx(\"span\", { className: STYLES.candidateNote, children: note })\n ]\n })\n }, candidate.id);\n })\n })\n ]\n }),\n jsxs(\"div\", {\n className: STYLES.dialogFooter,\n children: [\n jsx(\"button\", {\n type: \"button\",\n className: STYLES.dialogButton,\n onClick: () => props.onClose(),\n children: t(\"cancel\")\n }),\n jsx(\"button\", {\n type: \"button\",\n className: STYLES.dialogButton + \" \" + STYLES.dialogButtonPrimary,\n onClick: () => props.onAdd(Array.from(checkedSet)),\n children: t(\"addSelected\")\n })\n ]\n })\n ]\n })\n ]\n });\n}\n", "/**\n * The card's imperative run logic.\n *\n * The two host actions the executable block drives \u2014 **Fetch executables** (run\n * the discovery, then open the choose-to-add dialog over what it answered for)\n * and **Prelaunch Windows Chrome** (drive the whole Windows path; the answer\n * lands in the served `windowsChromeStatus`, not the promise) \u2014 plus the one-run-\n * at-a-time busy overlays and the probe-freshness clock they own. It is a hook\n * so `./index.ts` stays the composition of the body while the imperative half\n * lives here; the widget owns none of this state by hand.\n */\n/// <reference path=\"../shell-modules.d.ts\" />\nimport * as react from \"react\";\n\nimport type { ChromeExecutableStatus } from \"../types.js\";\n\n/** How often the probe result line re-reads its clock to age the \"ago\" suffix. */\nexport const PROBED_AGE_TICK_MS = 10000;\n\n/** One row the fetch dialog offers: a path, what the run said about it, and\n * whether that answer is a failure (an empty version carrying an error). */\nexport type FetchCandidate = { id: string; note: string; broken: boolean };\n\n/** The shape `runFetch` opens the dialog over. */\nexport type FetchDialog = { candidates: FetchCandidate[] } | null;\n\n/** The run half `./index.ts` wires into the picker + the dialog. */\nexport type RunActions = {\n /** A fetch is in flight \u2014 the picker's pill reads busy. */\n running: boolean;\n /** A Windows run is in flight \u2014 the button reads busy. */\n windowsRunning: boolean;\n /** The open fetch dialog (null = closed). */\n dialog: FetchDialog;\n /** Fire the fetch action. */\n runFetch: () => void;\n /** Fire the Windows Chrome action. */\n runWindowsChrome: () => void;\n /** Merge the dialog's checked ids into the rows, then close. */\n addFromDialog: (ids: string[]) => void;\n /** Close the dialog. */\n closeDialog: () => void;\n /** When the last fetch settled, for the result line's age suffix. */\n lastProbedAt: number;\n /** The card's local clock, ticked while it is mounted so the age stays honest. */\n clock: number;\n};\n\n/**\n * Drive the two host runs, keeping the busy overlays, the fetch dialog, and the\n * probe-freshness clock in one place.\n */\nexport function useRunActions(deps: {\n /** The host executable run, answering with every candidate it looked at. */\n refreshExecutables: () => Promise<ChromeExecutableStatus[]>;\n /** The host Windows Chrome run. */\n openWindowsChrome: () => Promise<void>;\n /** Merge dialog ids into the saved rows. */\n addExecutables: (ids: string[]) => Promise<void>;\n}): RunActions {\n const runningState = react.useState(false);\n const isRunning = runningState[0];\n const setRunning = runningState[1];\n const windowsRunningState = react.useState(false);\n const isWindowsRunning = windowsRunningState[0];\n const setWindowsRunning = windowsRunningState[1];\n const dialogRef = react.useState<FetchDialog>(null);\n const dialog = dialogRef[0];\n const setDialog = dialogRef[1];\n // The probe's freshness clock: a run is only visible when the answer\n // differs, so the line ages the last run the card itself ran; the effect\n // keeps the age honest for as long as the block is mounted.\n const probedState = react.useState(0);\n const lastProbedAt = probedState[0];\n const setLastProbedAt = probedState[1];\n const clockState = react.useState(() => Date.now());\n const clock = clockState[0];\n const setClock = clockState[1];\n react.useEffect(() => {\n const tick = setInterval(() => setClock(Date.now()), PROBED_AGE_TICK_MS);\n return () => clearInterval(tick);\n }, []);\n\n /**\n * The fetch action: run the host's executable discovery, then open the\n * choose-to-add dialog over what it answered for. A run that found nothing\n * leaves the card exactly as it was \u2014 an empty list has nothing to select \u2014\n * so the dialog opens only when there are candidates.\n */\n const runFetch = () => {\n setRunning(true);\n let promise;\n try {\n promise = deps.refreshExecutables();\n } catch (caught) {\n promise = Promise.reject(caught);\n }\n Promise.resolve(promise).then(\n async (statuses) => {\n setRunning(false);\n const settled = Date.now();\n setLastProbedAt(settled);\n setClock(settled);\n if (!Array.isArray(statuses) || statuses.length === 0) return;\n // The dialog's rows: the whole run's answer list, so every path\n // the machine carries reads with its answer, not only the saved\n // ones. A path the run could not launch keeps its place carrying\n // the failure line; a path this host offers without probing it\n // carries the note that names the run that drives it.\n const candidates = statuses.map((status) => ({\n id: status.path,\n note: status.version !== \"\" ? status.version : (status.error !== \"\" ? status.error : status.note),\n broken: status.version === \"\" && status.error !== \"\"\n }));\n setDialog({ candidates });\n },\n () => {\n setRunning(false);\n }\n );\n };\n\n /**\n * The Windows Chrome action: it asks the host to run the whole Windows\n * path (locate, prereq, launch, connect). The run is not visible in the\n * promise it resolves with \u2014 everything it answers lands in the served\n * `windowsChromeStatus` \u2014 but, like every executable action, the click keeps\n * the button busy until the host's revision counter moves.\n */\n const runWindowsChrome = () => {\n setWindowsRunning(true);\n let promise;\n try {\n promise = deps.openWindowsChrome();\n } catch (caught) {\n promise = Promise.reject(caught);\n }\n Promise.resolve(promise).then(\n () => {\n setWindowsRunning(false);\n },\n () => {\n setWindowsRunning(false);\n }\n );\n };\n\n /** \"Add selected\": merge the dialog's checked ids into the rows, then close.\n * The controller owns the merge rules (and skips a no-op write). */\n const addFromDialog = (ids: string[]) => {\n setDialog(null);\n if (typeof deps.addExecutables === \"function\") Promise.resolve(deps.addExecutables(ids)).catch(() => { });\n };\n\n return {\n running: isRunning,\n windowsRunning: isWindowsRunning,\n dialog,\n runFetch,\n runWindowsChrome,\n addFromDialog,\n closeDialog: () => setDialog(null),\n lastProbedAt,\n clock\n };\n}\n", "/**\n * The \"Reduce log output\" toggle \u2014 a catalog block in its own right.\n *\n * It renders as a `.catalog` carrying the two-row field (title + switch inline,\n * hint below), so the section reads exactly like the picker block (and inherits\n * the same seam rule: only the block-to-block seam draws a hairline). The switch\n * mirrors what the host actually resolves \u2014 the explicit user-layer `stderrMode`\n * when set, else the row-config `rowStderr` fallback \u2014 never a phantom state.\n *\n * The Switch primitive renders only the control and names it through `label`,\n * which becomes the control's aria-label; the tooltip therefore lives on the\n * wrapper span the switch is rendered inside.\n */\n\n/// <reference path=\"../shell-modules.d.ts\" />\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport { Switch } from \"@deepseek-ai/dsh-client-ui-primitives\";\nimport STYLES from \"../styles/ChromeMcpCard.module.css\";\n\n/** The one catalog block that is a switch rather than a picker. */\nexport function LogOutputToggle(props: any): any {\n var t = props.t;\n return jsxs(\"div\", {\n className: STYLES.catalog,\n children: [\n jsxs(\"div\", {\n className: STYLES.field,\n children: [\n jsxs(\"div\", {\n className: STYLES.fieldRow,\n children: [\n jsx(\"span\", { className: STYLES.fieldTitle, children: t(\"reduceLabel\") }),\n jsx(\"span\", {\n className: STYLES.toggleLabel,\n title: t(\"reduceTitle\"),\n children: jsx(Switch, {\n checked: props.checked,\n label: t(\"reduceLabel\"),\n disabled: props.disabled,\n onChange: () => {\n if (typeof props.onToggle === \"function\") props.onToggle();\n }\n })\n })\n ]\n }),\n jsx(\"div\", { className: STYLES.fieldDesc, children: t(\"reduceHint\") })\n ]\n })\n ]\n });\n}\n", "/**\n * The card's derived view \u2014 what one served snapshot actually means.\n *\n * Everything the widget renders but does not own: the saved executable rows\n * (run through the same id rules the rows follow), the dropdown options the pill\n * lists, the ids the last run could not launch, the effective stderr mode\n * behind the toggle, and the error line's status dot. Pure derivation, no hooks \u2014\n * the widget owns its state, this section reads it.\n *\n * The reference card (`dsh-docker-desktop-mcp`) carries the same shape here; the\n * difference is `brokenIds`, which the host's per-path probe answer feeds.\n */\nimport { entryLabel, normalizeEntries, type CatalogEntry } from \"../catalog.js\";\nimport type { ChromeExecutableStatus, WindowsChromeStatus } from \"../types.js\";\n\n/** What the card renders, derived from the served snapshot. */\nexport type CardView = {\n /** The error the body's status line carries (\"\" = nothing to report). */\n error: string;\n /** Whether the \"Reduce log output\" switch reads as on. */\n reduceChecked: boolean;\n /** Saved executable rows, normalized \u2014 the rows list and the dropdown. */\n executableEntries: CatalogEntry[];\n /** The pill's options: the saved rows, plus the executable in use. */\n executableOptions: { id: string; label: string }[];\n /** Ids the last run could not launch \u2014 the pill tags those. */\n brokenIds: string[];\n /** What the bridge launches with (\"\" = nothing resolved yet). */\n effectivePath: string;\n /** What the selected executable answered with (\"\" = nothing answered). */\n version: string;\n /** Whether the known \"executable not found\" state is set. */\n missing: boolean;\n /** Whether the status dot reports an error (true) or a missing executable. */\n dotIsError: boolean;\n /** The host runs under WSL and the selection is a Windows executable. */\n wslWindowsExecutable: boolean;\n /** What the **Prelaunch Windows Chrome** run is doing \u2014 served by the host. */\n windowsChrome: WindowsChromeStatus;\n /** True while the bridge launches with a connect-mode flag; the pill then\n * reads \"connect mode\" and the local selection is muted. */\n connectMode: boolean;\n};\n\nfunction labelOf(entries: readonly CatalogEntry[], id: string): string {\n const row = entries.find((entry: CatalogEntry) => entry.id === id);\n return row === void 0 ? id : entryLabel(row);\n}\n\n/** Project one served snapshot onto everything the widget renders. */\nexport function describeCard(state: any): CardView {\n const error = state.lastError || state.actionError || \"\";\n // The \"Reduce log output\" switch mirrors what the host actually resolves:\n // the explicit `stderrMode` when set, else the row-config fallback\n // (`rowStderr`). Never a phantom state.\n const servedMode = typeof state.stderrMode === \"string\" ? state.stderrMode : \"\";\n const stderrEffective = servedMode !== \"\" ? servedMode : state.rowStderr === \"console\" ? \"console\" : \"log\";\n const executableEntries = normalizeEntries(state.executables);\n const statusList: ChromeExecutableStatus[] = Array.isArray(state.executableStatus) ? state.executableStatus : [];\n\n // The pill's options: the saved rows, plus what is actually running so a\n // picked path never disappears from the list.\n const optionIds = executableEntries.map((entry: CatalogEntry) => entry.id);\n const effectivePath = typeof state.effectiveChromePath === \"string\" ? state.effectiveChromePath : \"\";\n if (effectivePath !== \"\" && optionIds.indexOf(effectivePath) === -1) optionIds.push(effectivePath);\n const executableOptions = optionIds.map((id: string) => ({ id, label: labelOf(executableEntries, id) }));\n // Which ids the last run could not launch: the option list tags those, the\n // same way the reference card tags a broken row.\n const brokenIds = statusList.filter((status) => status.version === \"\" && status.error !== \"\").map((status) => status.path);\n\n return {\n error,\n reduceChecked: stderrEffective === \"log\",\n executableEntries,\n executableOptions,\n brokenIds,\n effectivePath,\n version: typeof state.chromeVersion === \"string\" ? state.chromeVersion : \"\",\n missing: state.chromeMissing === true && error === \"\",\n dotIsError: error !== \"\",\n wslWindowsExecutable: state.wslWindowsExecutable === true,\n windowsChrome: readWindowsChrome(state.windowsChromeStatus),\n // Connect mode reads two ways. The mirror's answer is what the Host says\n // the bridge launches with \u2014 authoritative when it has been answered. And\n // the same question answered off the **saved flags**, which is what the\n // bridge launches with by the same precedence the flags rows edit: a flag\n // entry is a real config field a write-back never clears, so it keeps the\n // answer standing through the reset window every write pass leaves behind\n // (the same rule the pill's saved-path fallback follows). Either half\n // answering is enough; neither can contradict what the other states,\n // because both are asked of the same launch.\n connectMode: state.carriesConnectionMode === true || flagsCarryConnectionMode(state.extraFlags)\n };\n}\n\n/** The Host's connect-flag shape, restated here because the client reads no host\n * module (`src/host/flags.ts`'s `carriesConnectionMode`, the same predicate the\n * probe skip keys on); `test/client.test.mjs` pins the two spellings against one\n * flag list. */\nconst CONNECT_FLAG_PATTERN = /^--(?:browserUrl|wsEndpoint)(?:=|(?=\\s)|$)/iu;\n\n/** A connect-mode entry among the saved extra flags. */\nfunction flagsCarryConnectionMode(flags: unknown): boolean {\n return Array.isArray(flags) && flags.some((flag) => typeof flag === \"string\" && CONNECT_FLAG_PATTERN.test(flag));\n}\n\n/** One row's menu label: its display name \u2014 the tag a broken row carries is\n * added by the picker, which owns the copy. */\nexport function executableLabel(view: CardView, id: string): string {\n return labelOf(view.executableEntries, id);\n}\n\n/** The served Windows-Chrome status, coerced to the shape this file renders. */\nfunction readWindowsChrome(value: unknown): WindowsChromeStatus {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return { state: \"off\", port: 0, error: \"\" };\n const record = value as Record<string, unknown>;\n const known = [\"off\", \"launching\", \"connected\", \"unreachable\", \"not-found\", \"launch-failed\", \"not-applicable\"];\n const state = typeof record.state === \"string\" && known.indexOf(record.state) !== -1 ? record.state as WindowsChromeStatus[\"state\"] : \"off\";\n const port = typeof record.port === \"number\" && Number.isFinite(record.port) ? Math.trunc(record.port) : 0;\n const error = typeof record.error === \"string\" ? record.error : \"\";\n return { state, port, error };\n}\n\n/** What the **Prelaunch Windows Chrome** button renders right now. The copy keys\n * carry the whole disabled reason (mirrored prereq, no Windows binary, off\n * WSL), so the button itself never re-derives what the host already answered. */\nexport type WindowsButton = {\n /** The action's copy key. */\n labelKey: string;\n /** The tooltip's copy key. */\n titleKey: string;\n /** Whether the click does nothing (disabled reason lives in `titleKey`). */\n disabled: boolean;\n /** Whether the run is in flight \u2014 the button reads as busy, not disabled. */\n busy: boolean;\n};\n\nexport function windowsChromeButton(view: CardView): WindowsButton {\n const status = view.windowsChrome;\n if (status.state === \"launching\") return { labelKey: \"openWindowsChromeBusy\", titleKey: \"openWindowsChromeTitle\", disabled: true, busy: true };\n if (status.state === \"not-applicable\") return { labelKey: \"openWindowsChrome\", titleKey: \"windowsChromeNotWsl\", disabled: true, busy: false };\n // `off`, `connected`, `launch-failed`, `not-found` and `unreachable` are all\n // idle answers: the button stays available so the run can be retried. A\n // `not-found` is an answer about *this* run \u2014 the executable the run looked\n // for may well be there next time (and, with the Windows executables folded\n // into the candidate list, the selection may change) \u2014 and `unreachable` is\n // the same question about the Windows side; a disabled button would be a\n // dead end the notice keeps pointing the user back to, and nothing else ever\n // puts the state back.\n if (status.state === \"not-found\") return { labelKey: \"openWindowsChrome\", titleKey: \"windowsChromeNotFound\", disabled: false, busy: false };\n if (status.state === \"unreachable\") return { labelKey: \"openWindowsChrome\", titleKey: \"windowsChromeUnreachable\", disabled: false, busy: false };\n // `off`, `connected` and `launch-failed` are all idle answers: the button\n // stays available so the run can be re-tried or re-adjusted.\n return { labelKey: \"openWindowsChrome\", titleKey: \"openWindowsChromeTitle\", disabled: false, busy: false };\n}\n\n/** Whether the run could not launch this id (the pill tags it, the dialog\n * renders its note as a failure). */\nexport function isBroken(view: CardView, id: string): boolean {\n return view.brokenIds.indexOf(id) !== -1;\n}\n\n/**\n * The result line's age suffix. A run whose answer equals what the line already\n * says is otherwise a no-op on screen, so the line states when the card last ran\n * one.\n */\nexport function probeAge(since: number, now: number, t: (key: string) => string): string {\n const seconds = Math.max(0, Math.floor((now - since) / 1000));\n if (seconds < 10) return t(\"probeJustNow\");\n if (seconds < 60) return String(seconds) + \" \" + t(\"probeSecondsAgo\");\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return String(minutes) + \" \" + t(\"probeMinutesAgo\");\n return String(Math.floor(minutes / 60)) + \" \" + t(\"probeHoursAgo\");\n}\n", "/**\n * Browser half \u2014 the safe reads that project a served value onto the\n * snapshot.\n *\n * The configuration form answers the resolved section as a bag of unknowns, and\n * a field the Host has not answered for yet is simply absent; the controller's\n * `publish` folds what is there into the snapshot through these small, total\n * readers so no field ever reads `undefined`. They are pure, so the class keeps\n * to just the store + actions.\n *\n * The `Served` projection and the two list comparisons ride here for the same\n * reason: they are pure foldings of what the Host answers, shared by the class\n * (`publish` recomputes the served projection on every push) and by the write\n * actions (every staged edit and every immediate trigger diffs against it).\n */\nimport type { CatalogEntry } from \"./catalog.js\";\nimport type { ChromeExecutableStatus, WindowsChromeStatus } from \"./types.js\";\n\n/** The served projection every write diffs against \u2014 staged fields overlay it,\n * immediate triggers are compared against it. */\nexport type Served = {\n extraFlags: string[];\n executables: CatalogEntry[];\n chromePath: string;\n effectiveChromePath: string;\n effectiveSource: string;\n /** The persisted \"Reduce log output\" mode (\"\" = follow the row config). */\n stderrMode: string;\n /** What the Host resolves that mode to \u2014 what the toggle reads as on. */\n stderrEffective: string;\n};\n\n/** An answer-less form leaves the card with: nothing editable, nothing running. */\nexport function nothingServed(): Served {\n return {\n extraFlags: [], executables: [], chromePath: \"\", effectiveChromePath: \"\", effectiveSource: \"\", stderrMode: \"\", stderrEffective: \"log\"\n };\n}\n\n/** Whether two flag lists carry the same strings in the same order. */\nexport function sameStrings(a: readonly string[], b: readonly string[]): boolean {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n\n/** Whether two saved-row lists carry the same ids and labels. */\nexport function sameEntries(a: readonly CatalogEntry[], b: readonly CatalogEntry[]): boolean {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i].id !== b[i].id || a[i].name !== b[i].name) return false;\n return true;\n}\n\n/** A list of flags read from any value; a non-list answers as nothing. */\nexport function readFlags(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((flag) => typeof flag === \"string\" && flag !== \"\") as string[];\n}\n\n/** Number read from any value, `fallback` when absent or not a number. */\nexport function readNumber(value: unknown, fallback: number): number {\n return typeof value === \"number\" ? value : fallback;\n}\n\n/** String read from any value, `fallback` when absent or not a string. */\nexport function readString(value: unknown, fallback: string): string {\n return typeof value === \"string\" ? value : fallback;\n}\n\n/** Coerce the served Windows-Chrome status into the shape the card renders. */\nexport function readWindowsChromeStatus(value: unknown): WindowsChromeStatus {\n const fallback: WindowsChromeStatus = { state: \"off\", port: 0, error: \"\" };\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return fallback;\n const status = (value as Record<string, unknown>).state;\n const states = [\"off\", \"launching\", \"connected\", \"unreachable\", \"not-found\", \"launch-failed\", \"not-applicable\"];\n const port = (value as Record<string, unknown>).port;\n const error = (value as Record<string, unknown>).error;\n return {\n state: typeof status === \"string\" && states.indexOf(status) !== -1 ? status as WindowsChromeStatus[\"state\"] : \"off\",\n port: typeof port === \"number\" && Number.isFinite(port) ? Math.trunc(port) : 0,\n error: typeof error === \"string\" ? error : \"\"\n };\n}\n\n/** Coerce the served per-row answers into the shape the card renders. */\nexport function readStatus(value: unknown): ChromeExecutableStatus[] {\n if (!Array.isArray(value)) return [];\n const statuses: ChromeExecutableStatus[] = [];\n for (const item of value) {\n if (item === null || typeof item !== \"object\" || Array.isArray(item)) continue;\n const path = readString((item as { path?: unknown }).path, \"\");\n if (path === \"\") continue;\n statuses.push({\n path,\n version: readString((item as { version?: unknown }).version, \"\"),\n error: readString((item as { error?: unknown }).error, \"\"),\n note: readString((item as { note?: unknown }).note, \"\")\n });\n }\n return statuses;\n}\n", "/**\n * Browser half \u2014 what one served snapshot means for the card.\n *\n * ancestros' `CardController` answers the row as a bag of values (the served\n * document, the two staged fields overlaid by their drafts) plus the write\n * state. This module folds that into the state the card renders, through the\n * small total readers in ./read.ts, so no field ever reads `undefined`. Two\n * readings are this plugin's own and stay here: the effective executable while\n * the Host has not re-answered it, and the WSL notice that holds its last\n * answer across that same window.\n */\nimport { normalizeEntries } from \"./catalog.js\";\nimport { readFlags, readNumber, readStatus, readString, readWindowsChromeStatus } from \"./read.js\";\nimport type { ChromeMcpCardSnapshot } from \"./types.js\";\n\n/** The slice of ancestros' snapshot the projection reads. */\nexport interface ServedSnapshot {\n available: boolean;\n writable: boolean;\n values: Record<string, unknown>;\n dirty: boolean;\n saving: boolean;\n failed: boolean;\n actionError: string;\n}\n\n/** The card with nothing served: the form is still loading, or the Host does\n * not expose the entry. The card renders nothing. */\nexport function nothingProjected(): ChromeMcpCardSnapshot {\n return {\n available: false,\n writable: false,\n extraFlags: [],\n lastError: \"\",\n chromeMissing: false,\n executableDiscoveryRevision: 0,\n chromeVersion: \"\",\n executables: [],\n executableStatus: [],\n chromePath: \"\",\n effectiveChromePath: \"\",\n effectiveSource: \"\",\n stderrMode: \"\",\n rowStderr: \"log\",\n defaultExtraFlags: [],\n wslExtraFlags: [],\n wslWindowsExecutable: false,\n windowsChromeStatus: { state: \"off\", port: 0, error: \"\" },\n carriesConnectionMode: false,\n actionError: \"\",\n dirty: false,\n saving: false,\n failed: false\n };\n}\n\n/**\n * Project one snapshot onto the card state.\n * @param snapshot - what ancestros' controller answers.\n * @param heldWslNotice - the WSL notice's previous answer (see below).\n */\nexport function projectCard(snapshot: ServedSnapshot, heldWslNotice: boolean): ChromeMcpCardSnapshot {\n if (snapshot.available !== true) return nothingProjected();\n const value = snapshot.values ?? {};\n const chromePath = readString(value.chromePath, \"\");\n // What the bridge launches with: the Host's own answer. **Empty is \"has not\n // answered\", not \"nothing is selected\"** \u2014 a config write recomposes the live\n // answers back to their defaults (nothing in the row persists them), and a\n // card that read that as no executable would say a pick had reverted. The\n // one host answer that *is* an empty path is a selection the host must never\n // exec (WSL host + Windows executable), whose own mirror flag keeps that\n // reading.\n const answeredEffective = readString(value.effectiveChromePath, \"\");\n // A `false` read of the WSL notice is ambiguous the same way: it is either\n // \"no Windows executable stands selected\" or the moment the recomposition\n // resets the live answers. While the Host has not answered the selection\n // (its effective path reads empty with a saved path standing), the notice\n // holds its last answer instead of flickering off and back; a `true` read is\n // an answer, so only the ambiguous false is held.\n const wslNotice = value.wslWindowsExecutable === true\n ? true\n : answeredEffective === \"\" && chromePath !== \"\"\n ? heldWslNotice\n : false;\n // The hold stands the NOTICE up, never the path: an unanswered effective path\n // says nothing about what is selected, and a pill that blanks during the\n // write's own reset window is a selection the user never dropped (measured\n // live 2026-10-12).\n const effectiveChromePath = answeredEffective !== \"\"\n ? answeredEffective\n : (value.wslWindowsExecutable === true ? \"\" : chromePath);\n const effectiveSource: \"\" | \"selected\" | \"row-config\" =\n value.effectiveSource === \"selected\" || value.effectiveSource === \"row-config\" ? value.effectiveSource : \"\";\n const stderrMode = value.stderrMode === \"log\" || value.stderrMode === \"console\" ? value.stderrMode : \"\";\n return {\n available: true,\n writable: snapshot.writable === true,\n extraFlags: readFlags(value.extraFlags),\n lastError: readString(value.lastError, \"\"),\n chromeMissing: value.chromeMissing === true,\n executableDiscoveryRevision: readNumber(value.executableDiscoveryRevision, 0),\n chromeVersion: readString(value.chromeVersion, \"\"),\n executables: normalizeEntries(value.executables),\n executableStatus: readStatus(value.executableStatus),\n chromePath,\n effectiveChromePath,\n effectiveSource,\n stderrMode,\n // The mode the bridge actually routes console output through, as the\n // Host resolves it \u2014 what the field states wins, the live answer fills\n // the gap.\n rowStderr: value.stderrEffective === \"console\" ? \"console\" : \"log\",\n defaultExtraFlags: readFlags(value.defaultExtraFlags),\n wslExtraFlags: readFlags(value.wslExtraFlags),\n wslWindowsExecutable: wslNotice,\n windowsChromeStatus: readWindowsChromeStatus(value.windowsChromeStatus),\n carriesConnectionMode: value.carriesConnectionMode === true,\n actionError: snapshot.actionError ?? \"\",\n dirty: snapshot.dirty === true,\n saving: snapshot.saving === true,\n failed: snapshot.failed === true\n };\n}\n", "/**\n * Browser half \u2014 the one block this card declares.\n *\n * The card's body is still this plugin's own (`./card/`): the executable\n * picker, the flags rows, the \"Reduce log output\" toggle, the WSL notice, the\n * Apply/Discard footer. What it renders from, and every write it makes, now ride\n * ancestros' `CardController` \u2014 the store over the row's configuration form,\n * the staged/immediate/trigger writes, the fenced write door (with its unfenced\n * last pass and live-key clears) and the settle. This module is the seam: it\n * projects the controller's snapshot onto the card state (./project.ts) and\n * hands the card its actions, each one a controller call.\n */\nimport { normalizeEntries, type CatalogEntry } from \"./catalog.js\";\nimport { ChromeMcpCard } from \"./card/index.js\";\nimport { projectCard, type ServedSnapshot } from \"./project.js\";\nimport { readStatus, sameEntries } from \"./read.js\";\nimport type { ChromeExecutableStatus, ChromeMcpCardSnapshot } from \"./types.js\";\n\n/** The field every executable action settles on: the Host run's own counter. */\nconst RUN_COUNTER = \"executableDiscoveryRevision\";\n\n/** The slice of ancestros' `CardController` this seam calls. */\nexport interface CardControllerLike {\n getSnapshot(): ServedSnapshot;\n value(field: string): unknown;\n servedValue(field: string): unknown;\n stage(field: string, value: unknown): void;\n discard(): void;\n applyStaged(): Promise<boolean>;\n settleTrigger(triggerField: string, watchField?: string): Promise<void>;\n settleAndWrite(settled: (snapshot: ServedSnapshot) => boolean, field: string, value: unknown): Promise<void>;\n}\n\n/** The WSL notice's last answer, per controller (see ./project.ts: it holds\n * across the recomposition window). */\nconst heldWslNotice = new WeakMap<object, boolean>();\n\n/** What the run counter answers on one snapshot. */\nfunction runCounter(snapshot: ServedSnapshot): number {\n const value = snapshot.values?.[RUN_COUNTER];\n return typeof value === \"number\" ? value : 0;\n}\n\n/** Project the controller's snapshot onto the card state, keeping the notice's\n * hold per controller. */\nexport function cardState(controller: CardControllerLike): ChromeMcpCardSnapshot {\n const state = projectCard(controller.getSnapshot(), heldWslNotice.get(controller) === true);\n heldWslNotice.set(controller, state.wslWindowsExecutable);\n return state;\n}\n\n/** Every action the card calls, each one a controller call. */\nexport function cardActions(controller: CardControllerLike) {\n const current = () => cardState(controller);\n const saveExecutables = (entries: CatalogEntry[]): Promise<void> => {\n const next = normalizeEntries(entries);\n // The rows are what the Host's next run reads; a list equal to what is\n // served writes nothing.\n if (sameEntries(next, current().executables)) return Promise.resolve();\n const baseline = runCounter(controller.getSnapshot());\n return controller.settleAndWrite((snapshot) => runCounter(snapshot) > baseline, \"executables\", next);\n };\n return {\n /** Stage the extra-flags list; a list equal to what is served is not\n * dirty (the controller drops that draft). */\n saveFlags: (flags: string[]): Promise<void> => {\n controller.stage(\"extraFlags\", Array.isArray(flags) ? flags : []);\n return Promise.resolve();\n },\n /** Stage the flipped \"Reduce log output\" mode. A flip that lands back on\n * what is already effective drops the draft instead of staging a no-op:\n * it stages the served value itself, which the controller reads as clean. */\n toggleStderr: (): Promise<void> => {\n const state = current();\n const held = state.stderrMode;\n const effective = held === \"\" ? state.rowStderr : held;\n const next = effective === \"log\" ? \"console\" : \"log\";\n const servedRaw = controller.servedValue(\"stderrMode\");\n const served = servedRaw === \"log\" || servedRaw === \"console\" ? servedRaw : \"\";\n const servedEffective = served === \"\" ? state.rowStderr : served;\n controller.stage(\"stderrMode\", next === servedEffective ? served : next);\n return Promise.resolve();\n },\n /** Select the executable the bridge launches with: written on the spot,\n * settled by the Host's own re-run. Picking what already runs writes\n * nothing. */\n selectExecutable: (id: string): Promise<void> => {\n const target = typeof id === \"string\" ? id.trim() : \"\";\n if (target === \"\" || target === current().effectiveChromePath) return Promise.resolve();\n const baseline = runCounter(controller.getSnapshot());\n return controller.settleAndWrite((snapshot) => runCounter(snapshot) > baseline, \"chromePath\", target);\n },\n saveExecutables,\n /** Merge the ids picked in the dialog into the saved rows. */\n addExecutables: (ids: string[]): Promise<void> =>\n saveExecutables(current().executables.concat(\n (Array.isArray(ids) ? ids : [])\n .filter((id) => typeof id === \"string\" && id.trim() !== \"\")\n .map((id) => ({ id: id.trim(), name: \"\" }))\n )),\n /** Ask the Host to re-probe the saved rows; answers every path the run\n * answered for, read off the served mirror once it settles. */\n refreshExecutables: (): Promise<ChromeExecutableStatus[]> =>\n controller.settleTrigger(\"refreshExecutablesNonce\", RUN_COUNTER).then(() => readStatus(controller.value(\"executableStatus\"))),\n /** Ask the Host to drive a Windows-side Chrome in connect mode; what the\n * button reports is served through `windowsChromeStatus`. */\n openWindowsChrome: (): Promise<void> => controller.settleTrigger(\"openWindowsChromeNonce\", RUN_COUNTER),\n /** Persist every staged edit in one pass. */\n apply: async (): Promise<void> => {\n await controller.applyStaged();\n },\n /** Drop every staged edit. */\n discard: (): void => controller.discard()\n };\n}\n\n/**\n * The block: the plugin's own card body, over the shared controller.\n * @param props - what ancestros' body hands a block (`controller`, `t`).\n */\nexport function ChromeCardBlock(props: { controller: CardControllerLike; t: (key: string) => string }): unknown {\n const state = cardState(props.controller);\n return ChromeMcpCard({\n t: props.t,\n view: \"page\",\n useChromeMcpCard: <T>(selector: (snapshot: ChromeMcpCardSnapshot) => T): T => selector(state),\n ...cardActions(props.controller)\n });\n}\n", "/**\n * English copy \u2014 the dictionary every other tag falls back to.\n *\n * Every string the card renders lives here; the widget itself stays\n * copy-free. Add a locale by dropping a sibling file and registering it in\n * ./index.ts.\n *\n * No key describes an \"automatic\" state, because there is no auto mode: what\n * the saved-executable rows list is what can be picked, and the only automatic\n * step is the host seeding a never-configured host once.\n */\nexport const en = {\n executableLabel: \"Chrome executable\",\n executableHint: \"The executable every connection launched from this row launches with, unless the connection picked its own. Changing it answers the live connections again.\",\n executableNone: \"No Chrome executable detected\",\n executableRows: \"Saved executables\",\n executableIdLabel: \"Executable path\",\n executableIdPlaceholder: \"Path to a Chrome executable\",\n executableNameLabel: \"Display name\",\n namePlaceholder: \"Display name\",\n addExecutable: \"Add executable\",\n removeExecutable: \"Delete executable\",\n fetchExecutables: \"Fetch executables\",\n fetching: \"Fetching\u2026\",\n executableEmpty: \"No executables saved. Use \u201CFetch executables\u201D, or add the Chrome path by hand.\",\n dialogExecutablesTitle: \"Choose executables to add\",\n dialogExecutablesDescription: \"These are the Chrome executables this host's last run answered for. Choose the ones to add.\",\n dialogEmpty: \"Nothing matches your search.\",\n searchExecutables: \"Search executables\",\n selectAll: \"Select all\",\n addSelected: \"Add selected\",\n candidateSaved: \"Saved\",\n close: \"Close\",\n cancel: \"Cancel\",\n unavailableSuffix: \"not runnable\",\n wslWindowsTitle: \"Windows executable under WSL\",\n wslWindowsNote:\n \"This host runs inside Windows Subsystem for Linux and the selected executable is the Windows Chrome, which no connection here can launch: the debug pipes it opens do not survive the WSL interop boundary, and its debugging port stays bound to the Windows loopback. It answers --version correctly, so the pill looks healthy until the first tool call fails. Drive it instead with the \u201CWindows Chrome (WSL debug port)\u201D connection, or with its run \u2014 Prelaunch Windows Chrome, the action the executable block carries next to Fetch executables, or the prelaunch_windows_chrome tool \u2014 which starts the Windows browser on a free debugging port. The run only reads whether Windows loopback reaches this WSL host (networkingMode=mirrored in %USERPROFILE%\\\\.wslconfig, then wsl --shutdown \u2014 a manual Windows-side setting it never edits). Chrome installed inside the Linux distro needs none of this.\",\n probing: \"Checking the executables\u2026\",\n versionLabel: \"Probed version:\",\n probeJustNow: \"just now\",\n probeSecondsAgo: \"seconds ago\",\n probeMinutesAgo: \"minutes ago\",\n probeHoursAgo: \"hours ago\",\n flagsTitle: \"Extra flags\",\n flagsHint: \"The extra flags every connection launched from this row launches with, unless the connection carries its own. One flag per row \u2014 applying them answers the live connections again.\",\n flagsEmpty: \"No extra flags saved. Add one by hand, or use \u201CRestore defaults\u201D.\",\n flagsRows: \"Saved flags\",\n flagsValueLabel: \"Extra flag\",\n flagsValuePlaceholder: \"e.g. --headless\",\n addFlag: \"Add flag\",\n removeFlag: \"Delete flag\",\n flagsRestore: \"Restore defaults\",\n flagsRestoreTitle: \"Keep every flag the rows carry and append the defaults that are still missing\",\n flagsWsl: \"Flags WSL\",\n flagsWslTitle: \"Append the recommended WSL<->Windows flags\",\n openWindowsChrome: \"Prelaunch Windows Chrome\",\n openWindowsChromeTitle: \"Start the Windows-side Chrome with --remote-debugging-port and refresh whatever Windows Chrome connections stand live\",\n openWindowsChromeBusy: \"Starting Windows Chrome\u2026\",\n windowsChromeNotWsl: \"Windows Chrome does not apply outside WSL.\",\n windowsChromeNotFound: \"No Windows Chrome was found (Program Files / Program Files (x86)) \u2014 run it again once one is installed.\",\n windowsChromeUnreachable:\n \"Needs networkingMode=mirrored in %USERPROFILE%\\\\.wslconfig, with wsl --shutdown: right now this WSL host cannot reach the Windows loopback.\",\n connectModeLabel: \"Connect mode\",\n connectModeHint: \"Connect mode: the connection launches no local Chrome (it connects with --browserUrl / --wsEndpoint); the local selection stays put.\",\n reduceLabel: \"Reduce log output\",\n reduceTitle: \"Capture the connection's stderr into the plugin's log file\",\n reduceHint: \"Captures stderr into the plugin's log file. Turn it off to debug the raw output; switching answers the live connections again.\",\n // The staged form's own copy: nothing is written until **Apply** lands every\n // staged edit, so the card announces what a save would store and what it\n // could not land.\n apply: \"Apply\",\n discard: \"Discard\",\n saving: \"Applying\u2026\",\n unsaved: \"Unsaved\",\n saveFailed: \"The last save was not accepted.\",\n docsMessage: \"Find the complete list of server parameters (e.g., --headless, --isolated, --slim) and how to configure WebSocket connections in the Configuration Guide.\",\n docsLinkLabel: \"Configuration Guide\",\n statusError: \"Error\",\n statusOk: \"OK\",\n chromeMissing: \"Chrome executable not found\",\n // The body-mounted toast host's copy: it announces what the card's own error\n // line can only show while the row page is open. An error notice carries the\n // Host's captured line, so `toastError` only stands behind an empty one.\n toastStall: \"The Chrome host did not answer the action \u2014 try it again.\",\n toastError: \"The Chrome host reported a failure.\",\n readOnly: \"Settings are read-only in this deployment.\"\n};\n", "/**\n * Locale dictionaries registered on the shell locale service.\n *\n * One dictionary per tag; `en` is the fallback every other tag resolves\n * missing keys through, so it must always be present.\n */\nimport { en } from \"./en-US.js\";\n\n/** tag \u2192 dictionary. Registered wholesale under the plugin's locale namespace. */\nexport const DICTIONARIES: Record<string, Record<string, string>> = { en };\n\n/** Every tag this half registers; the first entry is the fallback. */\nexport const TAGS = [\"en\"];\n", "/**\n * Browser half \u2014 the card's stylesheet surface.\n *\n * The rules and the class names live in `ChromeMcpCard.module.css`; the\n * build's CSS-modules step (scripts/build-client.mjs) compiles it \u2014 minified,\n * class names scoped `hash_local` \u2014 and the card imports that map directly,\n * the same way every shipped `dsh-client-ui-*` card consumes its own\n * stylesheet. This module keeps only the one-shot injection.\n *\n * The injection idiom is what every other plugin card uses: a `style` element\n * tagged with the plugin id, so a re-materialized bundle never stacks a second\n * copy. It is called from `apply`, never from a module body, so importing a\n * module for its class names cannot have DOM side effects.\n */\nimport { PLUGIN_ID } from \"../plugin-meta.js\";\nimport { cssText } from \"./ChromeMcpCard.module.css\";\n\n/** The one-shot `style` element's identity: `<plugin id>/<card>.module.css`. */\nconst CARD_CSS_ID = PLUGIN_ID + \"/ChromeMcpCard.module.css\";\n\n/**\n * Append the card's stylesheet once.\n *\n * Idempotent by construction: the element is tagged with the plugin id plus\n * the card's stylesheet id, so a re-materialized bundle never stacks a second\n * copy.\n */\nexport function injectCardStyles(): void {\n if (typeof document === \"undefined\") return;\n if (document.querySelector('style[data-plugin-css=\"' + CARD_CSS_ID + '\"]') !== null) return;\n const styleTag = document.createElement(\"style\");\n styleTag.dataset.plugin = PLUGIN_ID;\n styleTag.dataset.pluginCss = CARD_CSS_ID;\n styleTag.textContent = cssText;\n document.head.appendChild(styleTag);\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["RUN_SETTLE_TIMEOUT_MS", "import_jsx_runtime", "import_dsh_client_ui_primitives", "jsxs2", "jsx2", "jsx3", "jsxs3", "jsxs4", "jsx4", "jsx5", "jsxs5", "jsxs6", "jsx6", "jsx7", "Menu2", "jsxs7", "jsx8", "Menu3", "jsxs8", "jsx9", "react", "import_jsx_runtime", "cssText", "import_jsx_runtime", "LOCALE_NAMESPACE", "RUN_SETTLE_TIMEOUT_MS", "CHEVRON_PATH", "TRASH_PATH", "CLOSE_PATHS", "DOCS_PATHS", "react", "import_jsx_runtime", "index", "field", "TRASH_PATH", "DOCS_PATHS", "import_jsx_runtime", "import_dsh_client_ui_primitives", "CHEVRON_PATH", "react", "import_jsx_runtime", "CLOSE_PATHS", "react", "import_jsx_runtime", "import_dsh_client_ui_primitives", "heldWslNotice", "DICTIONARIES", "injectCardStyles", "cssText", "LOCALE_NAMESPACE", "DICTIONARIES", "RUN_SETTLE_TIMEOUT_MS", "injectCardStyles"]
7
+ }