nudge-ui 0.2.5 → 0.2.6

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 (575) hide show
  1. package/dist/cli/agentCommand.d.ts +0 -1
  2. package/dist/cli/agentCommand.js +0 -1
  3. package/dist/client.mjs +238 -122
  4. package/dist/compiler/ast.d.ts +0 -6
  5. package/dist/compiler/ast.js +0 -5
  6. package/dist/compiler/componentContractTypes.d.ts +11 -5
  7. package/dist/compiler/componentContracts.js +3 -9
  8. package/dist/compiler/componentInstrumentation.d.ts +2 -13
  9. package/dist/compiler/componentInstrumentation.js +3 -12
  10. package/dist/compiler/componentPolicyResolution.d.ts +3 -22
  11. package/dist/compiler/componentPolicyResolution.js +6 -38
  12. package/dist/compiler/identityAttributes.d.ts +2 -0
  13. package/dist/compiler/identityAttributes.js +2 -0
  14. package/dist/compiler/index.d.ts +0 -1
  15. package/dist/compiler/index.js +0 -1
  16. package/dist/compiler/packageComponentContracts.d.ts +10 -19
  17. package/dist/compiler/packageComponentContracts.js +60 -43
  18. package/dist/compiler/reactComponentProtocols.d.ts +0 -7
  19. package/dist/compiler/reactComponentProtocols.js +0 -7
  20. package/dist/compiler/reactIdentity.d.ts +2 -2
  21. package/dist/compiler/reactIdentity.js +41 -43
  22. package/dist/compiler/sourcePaths.d.ts +4 -8
  23. package/dist/compiler/sourcePaths.js +6 -8
  24. package/dist/css/dialects/index.d.ts +2 -21
  25. package/dist/css/dialects/index.js +2 -9
  26. package/dist/css/dialects/tailwind.d.ts +2 -16
  27. package/dist/css/dialects/tailwind.js +2 -25
  28. package/dist/css/dialects/vanillaExtract.d.ts +1 -9
  29. package/dist/css/dialects/vanillaExtract.js +0 -1
  30. package/dist/css/index.d.ts +0 -8
  31. package/dist/css/index.js +0 -8
  32. package/dist/css/model/index.d.ts +6 -38
  33. package/dist/css/model/index.js +0 -9
  34. package/dist/css/token-inventory/index.d.ts +0 -23
  35. package/dist/css/token-inventory/index.js +0 -23
  36. package/dist/css/token-inventory/inventory.js +4 -16
  37. package/dist/css/token-inventory/parseStylesheet.d.ts +1 -9
  38. package/dist/css/token-inventory/parseStylesheet.js +5 -42
  39. package/dist/css/token-inventory/policy.d.ts +2 -39
  40. package/dist/css/token-inventory/policy.js +2 -39
  41. package/dist/css/token-inventory/types.d.ts +2 -15
  42. package/dist/css/value-semantics/borderSemantics.d.ts +1 -8
  43. package/dist/css/value-semantics/borderSemantics.js +5 -23
  44. package/dist/css/value-semantics/boxSemantics.d.ts +2 -25
  45. package/dist/css/value-semantics/boxSemantics.js +1 -7
  46. package/dist/css/value-semantics/colorSemantics.d.ts +6 -60
  47. package/dist/css/value-semantics/colorSemantics.js +9 -40
  48. package/dist/css/value-semantics/cssSyntax.d.ts +10 -10
  49. package/dist/css/value-semantics/cssSyntax.js +39 -11
  50. package/dist/css/value-semantics/fontSemantics.d.ts +3 -19
  51. package/dist/css/value-semantics/fontSemantics.js +7 -25
  52. package/dist/css/value-semantics/index.d.ts +1 -12
  53. package/dist/css/value-semantics/index.js +1 -12
  54. package/dist/css/value-semantics/propertyPolicy.d.ts +6 -53
  55. package/dist/css/value-semantics/propertyPolicy.js +47 -59
  56. package/dist/css/value-semantics/stringMaps.d.ts +0 -1
  57. package/dist/css/value-semantics/structuredValues.d.ts +3 -37
  58. package/dist/css/value-semantics/structuredValues.js +6 -17
  59. package/dist/css/value-semantics/tokenInterpretation.d.ts +8 -50
  60. package/dist/css/value-semantics/tokenInterpretation.js +7 -21
  61. package/dist/hosts/astro/astroRuntimeConfig.d.ts +0 -1
  62. package/dist/hosts/astro/astroRuntimeConfig.js +0 -1
  63. package/dist/hosts/astro/clientAsset.d.ts +1 -5
  64. package/dist/hosts/astro/clientAsset.js +1 -5
  65. package/dist/hosts/astro/clientTransport.d.ts +0 -1
  66. package/dist/hosts/astro/clientTransport.js +4 -9
  67. package/dist/hosts/astro/integration.d.ts +2 -28
  68. package/dist/hosts/astro/integration.js +7 -36
  69. package/dist/hosts/astro/markdownIdentity.d.ts +0 -3
  70. package/dist/hosts/astro/markdownIdentity.js +0 -3
  71. package/dist/hosts/astro/middleware.d.ts +1 -12
  72. package/dist/hosts/astro/middleware.js +1 -12
  73. package/dist/hosts/astro/projectContext.d.ts +1 -9
  74. package/dist/hosts/astro/projectContext.js +2 -11
  75. package/dist/hosts/astro/responseInstrumentation.d.ts +4 -33
  76. package/dist/hosts/astro/responseInstrumentation.js +5 -34
  77. package/dist/hosts/environment.d.ts +0 -8
  78. package/dist/hosts/environment.js +0 -1
  79. package/dist/hosts/next/index.js +1 -3
  80. package/dist/hosts/next/loader.d.ts +5 -44
  81. package/dist/hosts/next/loader.js +22 -103
  82. package/dist/hosts/next/loaders/identity-loader.cjs +111 -65
  83. package/dist/hosts/next/loaders/loader-plugin.cjs +111 -65
  84. package/dist/hosts/next/manifest.d.ts +2 -16
  85. package/dist/hosts/next/manifest.js +18 -20
  86. package/dist/hosts/next/mount.d.ts +1 -11
  87. package/dist/hosts/next/mount.js +1 -11
  88. package/dist/hosts/next/repositoryScope.d.ts +2 -17
  89. package/dist/hosts/next/repositoryScope.js +2 -17
  90. package/dist/hosts/next/sidecar.d.ts +0 -13
  91. package/dist/hosts/next/sidecar.js +25 -110
  92. package/dist/hosts/next/wrapper.d.ts +0 -31
  93. package/dist/hosts/next/wrapper.js +13 -64
  94. package/dist/hosts/projectBridge.d.ts +0 -2
  95. package/dist/hosts/projectBridge.js +0 -2
  96. package/dist/hosts/reactRendererCapture.d.ts +2 -0
  97. package/dist/hosts/reactRendererCapture.js +12 -0
  98. package/dist/hosts/static/cli.d.ts +0 -4
  99. package/dist/hosts/static/cli.js +0 -3
  100. package/dist/hosts/static/html/bootstrap.d.ts +1 -18
  101. package/dist/hosts/static/html/bootstrap.js +2 -14
  102. package/dist/hosts/static/manifest.d.ts +2 -15
  103. package/dist/hosts/static/manifest.js +5 -18
  104. package/dist/hosts/static/server.d.ts +4 -38
  105. package/dist/hosts/static/server.js +17 -67
  106. package/dist/hosts/vite/index.d.ts +0 -10
  107. package/dist/hosts/vite/index.js +0 -10
  108. package/dist/hosts/vite/react.d.ts +4 -17
  109. package/dist/hosts/vite/react.js +18 -35
  110. package/dist/hosts/vite/tokens/activeStylesheets.d.ts +1 -10
  111. package/dist/hosts/vite/tokens/activeStylesheets.js +3 -8
  112. package/dist/hosts/vite/tokens/fileMap.d.ts +0 -1
  113. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +2 -15
  114. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +3 -10
  115. package/dist/hosts/vite/vite.d.ts +5 -26
  116. package/dist/hosts/vite/vite.js +44 -80
  117. package/dist/html/dom.d.ts +0 -1
  118. package/dist/html/dom.js +0 -1
  119. package/dist/html/identity.d.ts +1 -15
  120. package/dist/html/identity.js +1 -8
  121. package/dist/html/insertions.d.ts +2 -8
  122. package/dist/html/insertions.js +1 -1
  123. package/dist/inspector/agent/McpConnectionDialog.d.ts +1 -6
  124. package/dist/inspector/agent/McpConnectionDialog.js +1 -6
  125. package/dist/inspector/agent/activity.d.ts +1 -1
  126. package/dist/inspector/agent/activity.js +1 -1
  127. package/dist/inspector/agent/client.d.ts +2 -26
  128. package/dist/inspector/agent/client.js +17 -64
  129. package/dist/inspector/agent/connectionStatus.d.ts +0 -1
  130. package/dist/inspector/agent/connectionStatus.js +0 -1
  131. package/dist/inspector/agent/httpTransport.d.ts +0 -8
  132. package/dist/inspector/agent/httpTransport.js +21 -39
  133. package/dist/inspector/agent/protocol.d.ts +1 -10
  134. package/dist/inspector/agent/protocol.js +1 -9
  135. package/dist/inspector/agent/verification.d.ts +2 -19
  136. package/dist/inspector/agent/verification.js +7 -43
  137. package/dist/inspector/boot.d.ts +3 -1
  138. package/dist/inspector/boot.js +12 -20
  139. package/dist/inspector/canvas/AgentActivityOverlay.d.ts +1 -1
  140. package/dist/inspector/canvas/AgentActivityOverlay.js +1 -1
  141. package/dist/inspector/canvas/CanvasCard.js +7 -14
  142. package/dist/inspector/canvas/CanvasElementOverlay.js +117 -50
  143. package/dist/inspector/canvas/CanvasWorkspace.js +15 -29
  144. package/dist/inspector/canvas/PageCard.d.ts +0 -1
  145. package/dist/inspector/canvas/PageCard.js +0 -1
  146. package/dist/inspector/canvas/SketchToolOptions.d.ts +0 -1
  147. package/dist/inspector/canvas/SketchToolOptions.js +0 -6
  148. package/dist/inspector/canvas/ToolOptionsDrawer.d.ts +1 -6
  149. package/dist/inspector/canvas/ToolOptionsDrawer.js +2 -8
  150. package/dist/inspector/canvas/activeCanvasDocument.d.ts +0 -2
  151. package/dist/inspector/canvas/activeCanvasDocument.js +0 -2
  152. package/dist/inspector/canvas/agentPresentation.d.ts +2 -13
  153. package/dist/inspector/canvas/agentPresentation.js +3 -14
  154. package/dist/inspector/canvas/canvasFrame.d.ts +2 -6
  155. package/dist/inspector/canvas/canvasFrame.js +1 -2
  156. package/dist/inspector/canvas/canvasResize.d.ts +1 -6
  157. package/dist/inspector/canvas/canvasResize.js +1 -6
  158. package/dist/inspector/canvas/canvasStore.d.ts +4 -12
  159. package/dist/inspector/canvas/canvasStore.js +12 -26
  160. package/dist/inspector/canvas/frameConnection.d.ts +1 -7
  161. package/dist/inspector/canvas/frameContent.d.ts +0 -1
  162. package/dist/inspector/canvas/frameLifecycle.d.ts +12 -0
  163. package/dist/inspector/canvas/frameLifecycle.js +11 -0
  164. package/dist/inspector/canvas/frameProtocol.d.ts +5 -40
  165. package/dist/inspector/canvas/frameProtocol.js +1 -24
  166. package/dist/inspector/canvas/frameScrollbarStyles.d.ts +0 -1
  167. package/dist/inspector/canvas/frameScrollbarStyles.js +0 -1
  168. package/dist/inspector/canvas/layout.d.ts +10 -22
  169. package/dist/inspector/canvas/layout.js +0 -3
  170. package/dist/inspector/canvas/normalizeUrl.js +1 -8
  171. package/dist/inspector/canvas/pageSurface.d.ts +1 -6
  172. package/dist/inspector/canvas/pageSurface.js +1 -6
  173. package/dist/inspector/canvas/projection.d.ts +4 -25
  174. package/dist/inspector/canvas/projection.js +22 -72
  175. package/dist/inspector/canvas/rendererBootstrap.d.ts +8 -1
  176. package/dist/inspector/canvas/rendererBootstrap.js +6 -14
  177. package/dist/inspector/canvas/rendererCidIndex.d.ts +0 -5
  178. package/dist/inspector/canvas/rendererCidIndex.js +0 -5
  179. package/dist/inspector/canvas/rendererElementSelector.js +29 -27
  180. package/dist/inspector/canvas/rendererMessageRouter.d.ts +0 -1
  181. package/dist/inspector/canvas/rendererMessageRouter.js +0 -1
  182. package/dist/inspector/canvas/rendererSelectionProxy.d.ts +1 -5
  183. package/dist/inspector/canvas/rendererSelectionProxy.js +2 -7
  184. package/dist/inspector/canvas/rendererStylesheet.d.ts +0 -1
  185. package/dist/inspector/canvas/rendererStylesheet.js +9 -2
  186. package/dist/inspector/canvas/resizeHandleScale.d.ts +1 -10
  187. package/dist/inspector/canvas/resizeHandleScale.js +1 -10
  188. package/dist/inspector/canvas/sessionStore.d.ts +1 -7
  189. package/dist/inspector/canvas/sessionStore.js +21 -34
  190. package/dist/inspector/canvas/staleChangeDetector.js +1 -4
  191. package/dist/inspector/canvas/toolbarScale.d.ts +1 -4
  192. package/dist/inspector/canvas/toolbarScale.js +1 -4
  193. package/dist/inspector/canvas/useCanvasLayoutAnimation.d.ts +0 -1
  194. package/dist/inspector/canvas/useCanvasLayoutAnimation.js +0 -1
  195. package/dist/inspector/canvas/viewStore.js +1 -1
  196. package/dist/inspector/canvas/wheelPan.d.ts +1 -1
  197. package/dist/inspector/canvas/wheelPan.js +1 -1
  198. package/dist/inspector/canvas/workspaceLease.d.ts +1 -5
  199. package/dist/inspector/canvas/workspaceLease.js +1 -7
  200. package/dist/inspector/changes/codecs.js +2 -1
  201. package/dist/inspector/changes/draftPreview.d.ts +1 -6
  202. package/dist/inspector/changes/draftPreview.js +15 -30
  203. package/dist/inspector/changes/editModel.d.ts +3 -13
  204. package/dist/inspector/changes/editModel.js +1 -2
  205. package/dist/inspector/changes/managedStyleProjection.js +4 -14
  206. package/dist/inspector/changes/model.d.ts +0 -5
  207. package/dist/inspector/changes/model.js +1 -8
  208. package/dist/inspector/changes/previewDiagnostics.d.ts +2 -12
  209. package/dist/inspector/changes/previewDiagnostics.js +4 -20
  210. package/dist/inspector/changes/previewVerification.d.ts +25 -0
  211. package/dist/inspector/changes/previewVerification.js +34 -0
  212. package/dist/inspector/changes/structuralTypes.d.ts +2 -4
  213. package/dist/inspector/changes/types.d.ts +3 -10
  214. package/dist/inspector/clientManifest.d.ts +17 -6
  215. package/dist/inspector/clientManifest.js +16 -3
  216. package/dist/inspector/comments/CommentsOverlay.js +48 -7
  217. package/dist/inspector/comments/element.d.ts +1 -2
  218. package/dist/inspector/comments/element.js +1 -2
  219. package/dist/inspector/comments/store.d.ts +1 -1
  220. package/dist/inspector/comments/store.js +1 -1
  221. package/dist/inspector/comments/verification.d.ts +8 -2
  222. package/dist/inspector/comments/verification.js +18 -10
  223. package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +8 -0
  224. package/dist/inspector/componentSemantics/ComponentPropsSection.js +10 -7
  225. package/dist/inspector/componentSemantics/adapterRegistry.d.ts +2 -9
  226. package/dist/inspector/componentSemantics/adapterRegistry.js +2 -9
  227. package/dist/inspector/componentSemantics/changeModel.js +2 -4
  228. package/dist/inspector/componentSemantics/react/callsites.d.ts +28 -0
  229. package/dist/inspector/componentSemantics/react/callsites.js +261 -0
  230. package/dist/inspector/componentSemantics/react/devtoolsHook.d.ts +23 -0
  231. package/dist/inspector/componentSemantics/react/devtoolsHook.js +71 -0
  232. package/dist/inspector/componentSemantics/react/fibers.d.ts +17 -0
  233. package/dist/inspector/componentSemantics/react/fibers.js +30 -0
  234. package/dist/inspector/componentSemantics/{reactRuntime.d.ts → react/runtime.d.ts} +3 -2
  235. package/dist/inspector/componentSemantics/{reactRuntime.js → react/runtime.js} +70 -53
  236. package/dist/inspector/componentSemantics/runtimeBridge.d.ts +2 -18
  237. package/dist/inspector/componentSemantics/runtimeBridge.js +5 -19
  238. package/dist/inspector/componentSemantics/textBinding.d.ts +1 -9
  239. package/dist/inspector/componentSemantics/textBinding.js +16 -42
  240. package/dist/inspector/componentSemantics/types.d.ts +8 -27
  241. package/dist/inspector/componentSemantics/types.js +0 -1
  242. package/dist/inspector/conformance/borderCases.d.ts +0 -5
  243. package/dist/inspector/conformance/borderCases.js +0 -5
  244. package/dist/inspector/conformance/colorCases.d.ts +0 -6
  245. package/dist/inspector/conformance/colorCases.js +0 -6
  246. package/dist/inspector/conformance/fixture.d.ts +1 -5
  247. package/dist/inspector/conformance/fixture.js +1 -5
  248. package/dist/inspector/conformance/spacingCases.d.ts +0 -4
  249. package/dist/inspector/conformance/spacingCases.js +0 -4
  250. package/dist/inspector/conformance/typographyCases.d.ts +0 -5
  251. package/dist/inspector/conformance/typographyCases.js +0 -5
  252. package/dist/inspector/drafts/draftStore.d.ts +7 -21
  253. package/dist/inspector/drafts/draftStore.js +15 -5
  254. package/dist/inspector/drafts/model.d.ts +7 -15
  255. package/dist/inspector/drafts/model.js +0 -2
  256. package/dist/inspector/drafts/store.d.ts +1 -8
  257. package/dist/inspector/drafts/store.js +3 -10
  258. package/dist/inspector/editScope.d.ts +0 -1
  259. package/dist/inspector/editScope.js +0 -1
  260. package/dist/inspector/inline-text/inlineTextDiagnostics.d.ts +0 -2
  261. package/dist/inspector/inline-text/inlineTextDiagnostics.js +0 -2
  262. package/dist/inspector/inline-text/inlineTextEditor.d.ts +2 -8
  263. package/dist/inspector/inline-text/inlineTextEditor.js +26 -79
  264. package/dist/inspector/inline-text/inlineTextLifecycle.js +1 -6
  265. package/dist/inspector/inline-text/textEditChange.d.ts +0 -1
  266. package/dist/inspector/inspection/bridge.d.ts +2 -6
  267. package/dist/inspector/inspection/bridge.js +4 -12
  268. package/dist/inspector/inspection/browserCssInspection.d.ts +4 -11
  269. package/dist/inspector/inspection/browserCssInspection.js +4 -8
  270. package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +0 -7
  271. package/dist/inspector/inspection/browserCssInspectionRegistry.js +1 -16
  272. package/dist/inspector/inspection/selectionProperty.d.ts +1 -6
  273. package/dist/inspector/inspection/selectionProperty.js +1 -5
  274. package/dist/inspector/inspection/useBrowserCssInspection.d.ts +1 -5
  275. package/dist/inspector/inspection/useBrowserCssInspection.js +5 -21
  276. package/dist/inspector/iterations/capture.d.ts +0 -1
  277. package/dist/inspector/iterations/capture.js +4 -9
  278. package/dist/inspector/iterations/client.d.ts +0 -1
  279. package/dist/inspector/iterations/client.js +0 -1
  280. package/dist/inspector/iterations/coordinator.d.ts +0 -1
  281. package/dist/inspector/iterations/coordinator.js +0 -1
  282. package/dist/inspector/iterations/prompt.d.ts +0 -1
  283. package/dist/inspector/iterations/prompt.js +0 -1
  284. package/dist/inspector/overlay/DomNavigator.d.ts +3 -1
  285. package/dist/inspector/overlay/DomNavigator.js +39 -15
  286. package/dist/inspector/overlay/DropGuideOverlay.d.ts +0 -1
  287. package/dist/inspector/overlay/DropGuideOverlay.js +0 -1
  288. package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +1 -8
  289. package/dist/inspector/overlay/MeasurementGuideOverlay.js +1 -5
  290. package/dist/inspector/overlay/clickPolicy.d.ts +3 -14
  291. package/dist/inspector/overlay/clickPolicy.js +3 -14
  292. package/dist/inspector/overlay/dropGuide.d.ts +0 -3
  293. package/dist/inspector/overlay/dropGuide.js +0 -3
  294. package/dist/inspector/overlay/frameThrottle.d.ts +0 -1
  295. package/dist/inspector/overlay/frameThrottle.js +0 -1
  296. package/dist/inspector/overlay/interactionStyles.d.ts +1 -1
  297. package/dist/inspector/overlay/interactionStyles.js +2 -8
  298. package/dist/inspector/overlay/measurementGeometry.js +4 -12
  299. package/dist/inspector/overlay/selectedGeometry.d.ts +1 -6
  300. package/dist/inspector/overlay/selectedGeometry.js +1 -8
  301. package/dist/inspector/overlay/spacingGestures.d.ts +14 -21
  302. package/dist/inspector/overlay/spacingGestures.js +151 -31
  303. package/dist/inspector/overlay/structuralGestures.d.ts +2 -9
  304. package/dist/inspector/overlay/structuralGestures.js +1 -4
  305. package/dist/inspector/pageInspector.d.ts +4 -13
  306. package/dist/inspector/pageInspector.js +25 -32
  307. package/dist/inspector/projection/cssEscapes.d.ts +0 -1
  308. package/dist/inspector/projection/cssEscapes.js +2 -4
  309. package/dist/inspector/projection/draftProjection.d.ts +2 -14
  310. package/dist/inspector/projection/draftProjection.js +1 -8
  311. package/dist/inspector/projection/managedStylesheet.d.ts +1 -7
  312. package/dist/inspector/projection/managedStylesheet.js +4 -22
  313. package/dist/inspector/projection/renderedInstance.d.ts +5 -28
  314. package/dist/inspector/projection/renderedInstance.js +6 -32
  315. package/dist/inspector/projection/structuralProjection.d.ts +7 -39
  316. package/dist/inspector/projection/structuralProjection.js +17 -52
  317. package/dist/inspector/projection/textProjection.d.ts +2 -14
  318. package/dist/inspector/projection/textProjection.js +17 -70
  319. package/dist/inspector/prompt/PromptSettingsDialog.d.ts +0 -1
  320. package/dist/inspector/prompt/PromptSettingsDialog.js +0 -1
  321. package/dist/inspector/prompt/clipboardHandoff.d.ts +1 -9
  322. package/dist/inspector/prompt/clipboardHandoff.js +1 -9
  323. package/dist/inspector/prompt/generatePrompt.d.ts +1 -1
  324. package/dist/inspector/prompt/generatePrompt.js +10 -25
  325. package/dist/inspector/prompt/promptSettings.d.ts +0 -3
  326. package/dist/inspector/prompt/promptSettings.js +0 -3
  327. package/dist/inspector/runtime/devFlag.d.ts +2 -25
  328. package/dist/inspector/runtime/devFlag.js +4 -31
  329. package/dist/inspector/runtime/documentStylesheetOrder.d.ts +0 -2
  330. package/dist/inspector/runtime/editorShell.d.ts +0 -1
  331. package/dist/inspector/runtime/editorShell.js +0 -1
  332. package/dist/inspector/runtime/inspectorStorage.d.ts +1 -7
  333. package/dist/inspector/runtime/inspectorStorage.js +1 -6
  334. package/dist/inspector/runtime/ownedStylesheets.d.ts +2 -8
  335. package/dist/inspector/runtime/ownedStylesheets.js +2 -8
  336. package/dist/inspector/runtime/runtimeConfig.d.ts +12 -86
  337. package/dist/inspector/runtime/runtimeConfig.js +9 -50
  338. package/dist/inspector/runtime/runtimeIdentityClaims.d.ts +3 -13
  339. package/dist/inspector/runtime/runtimeIdentityClaims.js +9 -19
  340. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +4 -36
  341. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +7 -40
  342. package/dist/inspector/runtime/useRuntimeConfig.d.ts +1 -8
  343. package/dist/inspector/runtime/useRuntimeConfig.js +1 -8
  344. package/dist/inspector/selection/editScope.d.ts +1 -7
  345. package/dist/inspector/selection/editScope.js +2 -12
  346. package/dist/inspector/selection/editTarget.d.ts +1 -5
  347. package/dist/inspector/selection/hierarchy.d.ts +11 -11
  348. package/dist/inspector/selection/hierarchy.js +42 -24
  349. package/dist/inspector/selection/selectionStore.d.ts +0 -3
  350. package/dist/inspector/selection/selectionStore.js +5 -16
  351. package/dist/inspector/selection/sourceSite.d.ts +1 -5
  352. package/dist/inspector/selection/sourceSite.js +2 -8
  353. package/dist/inspector/selection/styleSelection.d.ts +1 -5
  354. package/dist/inspector/selection/styleSelection.js +1 -5
  355. package/dist/inspector/session/lifecycle.d.ts +1 -9
  356. package/dist/inspector/session/lifecycle.js +0 -1
  357. package/dist/inspector/session/sessionContext.d.ts +0 -4
  358. package/dist/inspector/session/sessionContext.js +0 -4
  359. package/dist/inspector/session/sessionFactory.d.ts +0 -9
  360. package/dist/inspector/session/sessionFactory.js +0 -6
  361. package/dist/inspector/settings/SettingsDialog.d.ts +0 -1
  362. package/dist/inspector/settings/SettingsDialog.js +5 -3
  363. package/dist/inspector/shell/AgentStatusButton.d.ts +3 -2
  364. package/dist/inspector/shell/AgentStatusButton.js +5 -5
  365. package/dist/inspector/shell/ChangesLog.js +3 -4
  366. package/dist/inspector/shell/CopyPromptButton.d.ts +2 -1
  367. package/dist/inspector/shell/CopyPromptButton.js +12 -11
  368. package/dist/inspector/shell/InspectorEditors.d.ts +16 -0
  369. package/dist/inspector/shell/InspectorEditors.js +14 -0
  370. package/dist/inspector/shell/InspectorPanel.d.ts +12 -0
  371. package/dist/inspector/shell/InspectorPanel.js +8 -0
  372. package/dist/inspector/shell/InspectorSelection.d.ts +24 -0
  373. package/dist/inspector/shell/InspectorSelection.js +20 -0
  374. package/dist/inspector/shell/InspectorShell.js +26 -48
  375. package/dist/inspector/shell/NudgeLogoIcon.d.ts +5 -0
  376. package/dist/inspector/shell/NudgeLogoIcon.js +5 -0
  377. package/dist/inspector/shell/PeekOriginalButton.d.ts +0 -5
  378. package/dist/inspector/shell/PeekOriginalButton.js +0 -5
  379. package/dist/inspector/shell/PeekOriginalIcon.d.ts +0 -5
  380. package/dist/inspector/shell/PeekOriginalIcon.js +0 -5
  381. package/dist/inspector/shell/PromptActionButton.d.ts +21 -0
  382. package/dist/inspector/shell/PromptActionButton.js +14 -0
  383. package/dist/inspector/shell/elementName.d.ts +5 -0
  384. package/dist/inspector/shell/elementName.js +29 -0
  385. package/dist/inspector/shell/interactionStatePreview.d.ts +1 -4
  386. package/dist/inspector/shell/interactionStatePreview.js +3 -8
  387. package/dist/inspector/shell/originalPreview.d.ts +1 -6
  388. package/dist/inspector/shell/originalPreview.js +1 -6
  389. package/dist/inspector/shell/stateValue.d.ts +1 -2
  390. package/dist/inspector/shell/stateValue.js +2 -5
  391. package/dist/inspector/shell/styleState.d.ts +1 -2
  392. package/dist/inspector/shell/styleState.js +1 -2
  393. package/dist/inspector/sketch/SketchEditor.js +0 -1
  394. package/dist/inspector/sketch/SketchFrameOverlay.js +8 -12
  395. package/dist/inspector/sketch/SketchOverlay.js +5 -6
  396. package/dist/inspector/sketch/SketchPromptPanel.d.ts +0 -1
  397. package/dist/inspector/sketch/SketchPromptPanel.js +0 -1
  398. package/dist/inspector/sketch/SketchWorkspace.js +2 -4
  399. package/dist/inspector/sketch/capture.d.ts +12 -3
  400. package/dist/inspector/sketch/capture.js +12 -11
  401. package/dist/inspector/sketch/copySketch.d.ts +1 -7
  402. package/dist/inspector/sketch/copySketch.js +2 -11
  403. package/dist/inspector/sketch/drawingTools.d.ts +1 -3
  404. package/dist/inspector/sketch/drawingTools.js +1 -2
  405. package/dist/inspector/sketch/frameHeading.d.ts +1 -7
  406. package/dist/inspector/sketch/frameHeading.js +1 -8
  407. package/dist/inspector/sketch/freehand.d.ts +0 -1
  408. package/dist/inspector/sketch/freehand.js +0 -1
  409. package/dist/inspector/sketch/geometry.d.ts +1 -6
  410. package/dist/inspector/sketch/geometry.js +1 -6
  411. package/dist/inspector/sketch/handoff.js +0 -1
  412. package/dist/inspector/sketch/history.d.ts +1 -5
  413. package/dist/inspector/sketch/history.js +1 -4
  414. package/dist/inspector/sketch/interaction.d.ts +2 -2
  415. package/dist/inspector/sketch/interaction.js +2 -2
  416. package/dist/inspector/sketch/model.d.ts +2 -9
  417. package/dist/inspector/sketch/model.js +2 -19
  418. package/dist/inspector/sketch/persistence.d.ts +0 -1
  419. package/dist/inspector/sketch/persistence.js +2 -2
  420. package/dist/inspector/sketch/raster.d.ts +1 -4
  421. package/dist/inspector/sketch/raster.js +2 -8
  422. package/dist/inspector/sketch/store.js +2 -3
  423. package/dist/inspector/sketch/videoFrames.js +2 -3
  424. package/dist/inspector/spacing/projection.d.ts +0 -8
  425. package/dist/inspector/spacing/projection.js +38 -20
  426. package/dist/inspector/styleEditors/BackgroundEditor.js +1 -1
  427. package/dist/inspector/styleEditors/BorderEditor.js +1 -6
  428. package/dist/inspector/styleEditors/ChildPlacement.d.ts +12 -0
  429. package/dist/inspector/styleEditors/ChildPlacement.js +9 -0
  430. package/dist/inspector/styleEditors/FlexControls.d.ts +35 -0
  431. package/dist/inspector/styleEditors/FlexControls.js +158 -0
  432. package/dist/inspector/styleEditors/GapField.d.ts +5 -2
  433. package/dist/inspector/styleEditors/GapField.js +3 -4
  434. package/dist/inspector/styleEditors/GridChildSection.d.ts +0 -5
  435. package/dist/inspector/styleEditors/GridChildSection.js +0 -5
  436. package/dist/inspector/styleEditors/GridPicker.d.ts +1 -1
  437. package/dist/inspector/styleEditors/GridPicker.js +2 -4
  438. package/dist/inspector/styleEditors/GridSection.d.ts +10 -8
  439. package/dist/inspector/styleEditors/GridSection.js +22 -9
  440. package/dist/inspector/styleEditors/GridValueField.d.ts +1 -5
  441. package/dist/inspector/styleEditors/GridValueField.js +2 -8
  442. package/dist/inspector/styleEditors/ImageBackgroundEditor.d.ts +0 -1
  443. package/dist/inspector/styleEditors/ImageBackgroundEditor.js +0 -1
  444. package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +0 -1
  445. package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +0 -1
  446. package/dist/inspector/styleEditors/LayoutComboField.js +0 -5
  447. package/dist/inspector/styleEditors/LayoutModeRow.d.ts +14 -0
  448. package/dist/inspector/styleEditors/LayoutModeRow.js +60 -0
  449. package/dist/inspector/styleEditors/LayoutSection.d.ts +2 -2
  450. package/dist/inspector/styleEditors/LayoutSection.js +30 -356
  451. package/dist/inspector/styleEditors/OpacityEditor.js +7 -5
  452. package/dist/inspector/styleEditors/PositionControls.d.ts +18 -0
  453. package/dist/inspector/styleEditors/PositionControls.js +16 -0
  454. package/dist/inspector/styleEditors/SizeSection.d.ts +18 -0
  455. package/dist/inspector/styleEditors/SizeSection.js +71 -0
  456. package/dist/inspector/styleEditors/{SpacingBox.d.ts → SpacingField.d.ts} +3 -10
  457. package/dist/inspector/styleEditors/{SpacingBox.js → SpacingField.js} +15 -29
  458. package/dist/inspector/styleEditors/Typography.js +2 -4
  459. package/dist/inspector/styleEditors/borderModel.d.ts +1 -7
  460. package/dist/inspector/styleEditors/borderModel.js +2 -11
  461. package/dist/inspector/styleEditors/completeCssValue.d.ts +1 -5
  462. package/dist/inspector/styleEditors/completeCssValue.js +3 -13
  463. package/dist/inspector/styleEditors/fieldValue.d.ts +20 -0
  464. package/dist/inspector/styleEditors/fieldValue.js +26 -0
  465. package/dist/inspector/styleEditors/gradientValue.d.ts +1 -1
  466. package/dist/inspector/styleEditors/gradientValue.js +3 -2
  467. package/dist/inspector/styleEditors/gridChildModel.d.ts +7 -47
  468. package/dist/inspector/styleEditors/gridChildModel.js +6 -37
  469. package/dist/inspector/styleEditors/hiddenSizeOverrides.d.ts +5 -0
  470. package/dist/inspector/styleEditors/hiddenSizeOverrides.js +42 -0
  471. package/dist/inspector/styleEditors/inlineAuthored.d.ts +1 -8
  472. package/dist/inspector/styleEditors/inlineAuthored.js +3 -17
  473. package/dist/inspector/styleEditors/layoutMode.d.ts +15 -0
  474. package/dist/inspector/styleEditors/layoutMode.js +33 -0
  475. package/dist/inspector/styleEditors/layoutPreviewState.d.ts +0 -1
  476. package/dist/inspector/styleEditors/layoutPreviewState.js +0 -1
  477. package/dist/inspector/styleEditors/layoutValue.d.ts +2 -8
  478. package/dist/inspector/styleEditors/layoutValue.js +4 -12
  479. package/dist/inspector/styleEditors/nudgeValue.d.ts +1 -13
  480. package/dist/inspector/styleEditors/nudgeValue.js +1 -13
  481. package/dist/inspector/styleEditors/rowLookup.d.ts +1 -5
  482. package/dist/inspector/styleEditors/rowLookup.js +1 -5
  483. package/dist/inspector/styleEditors/stringRecord.d.ts +1 -2
  484. package/dist/inspector/styleEditors/stylePresence.d.ts +0 -2
  485. package/dist/inspector/styleEditors/stylePresence.js +1 -4
  486. package/dist/inspector/styleEditors/textRelevance.d.ts +1 -1
  487. package/dist/inspector/styleEditors/textRelevance.js +1 -1
  488. package/dist/inspector/styleEditors/useFieldVisibility.js +1 -2
  489. package/dist/inspector/styleEditors/useLayoutContext.d.ts +13 -0
  490. package/dist/inspector/styleEditors/useLayoutContext.js +53 -0
  491. package/dist/inspector/styleEditors/valuePolicy.d.ts +1 -5
  492. package/dist/inspector/styleEditors/valuePolicy.js +0 -1
  493. package/dist/inspector/testing.d.ts +1 -4
  494. package/dist/inspector/testing.js +1 -4
  495. package/dist/inspector/tokens/TokenChip.d.ts +1 -4
  496. package/dist/inspector/tokens/TokenChip.js +1 -4
  497. package/dist/inspector/tokens/TokenField.d.ts +4 -3
  498. package/dist/inspector/tokens/TokenField.js +19 -29
  499. package/dist/inspector/tokens/catalog.d.ts +2 -10
  500. package/dist/inspector/tokens/catalog.js +5 -12
  501. package/dist/inspector/tokens/dragPointerLock.d.ts +0 -1
  502. package/dist/inspector/tokens/dragPointerLock.js +2 -3
  503. package/dist/inspector/tokens/editActions.d.ts +1 -1
  504. package/dist/inspector/tokens/editActions.js +2 -4
  505. package/dist/inspector/tokens/resolution/cascade.d.ts +1 -5
  506. package/dist/inspector/tokens/resolution/cascade.js +1 -5
  507. package/dist/inspector/tokens/resolution/containerQueryEvaluator.d.ts +1 -5
  508. package/dist/inspector/tokens/resolution/containerQueryEvaluator.js +1 -5
  509. package/dist/inspector/tokens/resolution/cssomCollector.d.ts +4 -19
  510. package/dist/inspector/tokens/resolution/cssomCollector.js +151 -122
  511. package/dist/inspector/tokens/resolution/nestedSelectors.d.ts +1 -5
  512. package/dist/inspector/tokens/resolution/nestedSelectors.js +1 -5
  513. package/dist/inspector/tokens/resolution/ruleMatching.d.ts +4 -14
  514. package/dist/inspector/tokens/resolution/ruleMatching.js +121 -67
  515. package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +3 -14
  516. package/dist/inspector/tokens/resolution/selectorSemantics.js +12 -27
  517. package/dist/inspector/tokens/resolution.d.ts +5 -24
  518. package/dist/inspector/tokens/resolution.js +16 -71
  519. package/dist/inspector/tokens/tokenAvailability.d.ts +2 -14
  520. package/dist/inspector/tokens/tokenAvailability.js +6 -38
  521. package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +0 -1
  522. package/dist/inspector/tokens/valueSemanticsAdapter.js +18 -2
  523. package/dist/inspector/ui/AtRuleContext.d.ts +5 -5
  524. package/dist/inspector/ui/AtRuleContext.js +8 -6
  525. package/dist/inspector/ui/ControlSurface.d.ts +0 -4
  526. package/dist/inspector/ui/Disclosure.d.ts +0 -5
  527. package/dist/inspector/ui/Disclosure.js +0 -4
  528. package/dist/inspector/ui/InlineStyleWarning.d.ts +0 -1
  529. package/dist/inspector/ui/InspectorPopover.d.ts +1 -5
  530. package/dist/inspector/ui/InspectorPopover.js +1 -5
  531. package/dist/inspector/ui/SegmentedControl.d.ts +4 -4
  532. package/dist/inspector/ui/SegmentedControl.js +6 -4
  533. package/dist/inspector/ui/SideValuesField.d.ts +1 -6
  534. package/dist/inspector/ui/SideValuesField.js +2 -8
  535. package/dist/inspector/ui/Toast.d.ts +0 -4
  536. package/dist/inspector/ui/Toast.js +0 -4
  537. package/dist/inspector/ui/atRuleSegments.d.ts +13 -0
  538. package/dist/inspector/ui/atRuleSegments.js +34 -0
  539. package/dist/inspector/ui/classNames.d.ts +0 -1
  540. package/dist/inspector/ui/classNames.js +0 -1
  541. package/dist/inspector/ui/customCursors.d.ts +7 -1
  542. package/dist/inspector/ui/customCursors.js +2 -6
  543. package/dist/inspector/ui/styles.js +18 -20
  544. package/dist/inspector/workspace/controller.js +20 -1
  545. package/dist/inspector/workspace/handoff.d.ts +1 -5
  546. package/dist/inspector/workspace/handoff.js +1 -5
  547. package/dist/inspector/workspace/timeline.d.ts +5 -2
  548. package/dist/inspector/workspace/timeline.js +0 -1
  549. package/dist/internal/agent-protocol.d.ts +20 -42
  550. package/dist/internal/agent-protocol.js +18 -35
  551. package/dist/nudge-ui.mjs +75 -28
  552. package/dist/project/artifacts.js +24 -21
  553. package/dist/project/files.d.ts +0 -1
  554. package/dist/project/files.js +2 -9
  555. package/dist/project/identity.d.ts +1 -5
  556. package/dist/project/identity.js +1 -5
  557. package/dist/project/mcpPackage.d.ts +1 -6
  558. package/dist/project/mcpPackage.js +2 -7
  559. package/dist/project/pathPolicy.d.ts +1 -6
  560. package/dist/project/pathPolicy.js +1 -6
  561. package/dist/project/tokens.d.ts +2 -12
  562. package/dist/project/tokens.js +4 -15
  563. package/dist/transport/editor.d.ts +1 -12
  564. package/dist/transport/editor.js +2 -13
  565. package/dist/transport/index.d.ts +0 -5
  566. package/dist/transport/index.js +0 -5
  567. package/dist/transport/routes.d.ts +0 -5
  568. package/dist/transport/routes.js +0 -5
  569. package/package.json +5 -4
  570. package/dist/inspector/styleEditors/InsetSection.d.ts +0 -15
  571. package/dist/inspector/styleEditors/InsetSection.js +0 -15
  572. package/dist/inspector/styleEditors/PositionInsets.d.ts +0 -15
  573. package/dist/inspector/styleEditors/PositionInsets.js +0 -12
  574. package/dist/inspector/tokens/TokenDropdown.d.ts +0 -13
  575. package/dist/inspector/tokens/TokenDropdown.js +0 -59
@@ -33,10 +33,6 @@ export declare function prepareHandoff(request: HandoffRequest): Promise<Prepare
33
33
  export declare function prepareIterationImplementationPrompt(request: HandoffRequest): Promise<string>;
34
34
  /** Copies a prompt and records the checkpoint that later clipboard verification reconciles. */
35
35
  export declare function copyHandoff(handoff: PreparedHandoff): Promise<void>;
36
- /**
37
- * Sends the prompt to a connected agent, or copies it when no agent is given.
38
- * A failed send without sketches falls back to the clipboard; a failed sketch
39
- * send is returned so the user can choose to copy without the images.
40
- */
36
+ /** Falls back to the clipboard; a failed sketch send returns so the caller can copy without the images. */
41
37
  export declare function deliverHandoff(handoff: PreparedHandoff, projectId: string, agent: PromptDispatcher | null): Promise<HandoffOutcome>;
42
38
  export {};
@@ -62,11 +62,7 @@ export async function copyHandoff(handoff) {
62
62
  recordClipboardHandoff(changes, structuralChanges, owner);
63
63
  }
64
64
  }
65
- /**
66
- * Sends the prompt to a connected agent, or copies it when no agent is given.
67
- * A failed send without sketches falls back to the clipboard; a failed sketch
68
- * send is returned so the user can choose to copy without the images.
69
- */
65
+ /** Falls back to the clipboard; a failed sketch send returns so the caller can copy without the images. */
70
66
  export async function deliverHandoff(handoff, projectId, agent) {
71
67
  if (agent) {
72
68
  const outcome = await dispatchHandoff(handoff, projectId, agent);
@@ -5,7 +5,11 @@ export interface EditHistoryEntry {
5
5
  readonly group?: symbol;
6
6
  readonly before: DraftContents;
7
7
  readonly after: DraftContents;
8
- readonly activate?: () => void;
8
+ /** Where replay should take the user: the draft's owning frame, when one was known. */
9
+ readonly focus?: {
10
+ readonly draftId: string;
11
+ readonly cardId?: string;
12
+ };
9
13
  }
10
14
  export interface CanvasHistoryEntry {
11
15
  readonly kind: "canvas";
@@ -33,7 +37,6 @@ export interface Timeline {
33
37
  createGroup(): (update: () => void) => void;
34
38
  }
35
39
  export declare function createTimeline(): Timeline;
36
- /** The Workspace's session timeline. */
37
40
  export declare const sessionTimeline: Timeline;
38
41
  export declare function recordCanvasChange(entry: Omit<CanvasHistoryEntry, "kind">): void;
39
42
  export declare function discardCanvasHistory(cardId: string): void;
@@ -108,7 +108,6 @@ export function createTimeline() {
108
108
  },
109
109
  };
110
110
  }
111
- /** The Workspace's session timeline. */
112
111
  export const sessionTimeline = createTimeline();
113
112
  export function recordCanvasChange(entry) {
114
113
  sessionTimeline.recordCanvasChange(entry);
@@ -1,11 +1,4 @@
1
- /**
2
- * Public, host-neutral contracts shared by the Nudge browser inspector and
3
- * its local MCP companion.
4
- *
5
- * This module deliberately has no Node, browser, MCP SDK, or framework
6
- * imports. Hosts can use the same validation and message shapes without
7
- * pulling the companion into a browser bundle.
8
- */
1
+ /** Host-neutral contracts shared by the browser inspector and the local MCP companion; no Node, browser, MCP SDK, or framework imports. */
9
2
  export declare const AGENT_PROTOCOL_VERSION: 3;
10
3
  export declare const AGENT_PROTOCOL_LIMITS: {
11
4
  readonly projectId: 256;
@@ -38,6 +31,18 @@ export declare const AGENT_PROTOCOL_LIMITS: {
38
31
  readonly agentClientName: 120;
39
32
  };
40
33
  export type AgentProtocolVersion = typeof AGENT_PROTOCOL_VERSION;
34
+ /** Stable loopback endpoint names shared by the browser client and the MCP bridge. */
35
+ export declare const BRIDGE_ENDPOINTS: {
36
+ readonly health: "/health";
37
+ readonly pair: "/pair";
38
+ readonly takeover: "/takeover";
39
+ readonly events: "/events";
40
+ readonly prompt: "/prompt";
41
+ readonly status: "/status";
42
+ readonly canvasAcknowledgement: "/canvas/ack";
43
+ readonly disconnect: "/disconnect";
44
+ };
45
+ export type BridgeEndpoint = (typeof BRIDGE_ENDPOINTS)[keyof typeof BRIDGE_ENDPOINTS];
41
46
  /** A project identity is the pairing boundary for one companion process. */
42
47
  export interface AgentProjectIdentity {
43
48
  readonly projectId: string;
@@ -54,14 +59,12 @@ export interface AgentRoute {
54
59
  }
55
60
  /** The owner marker lets the browser remove only groups created by the agent. */
56
61
  export type CanvasGroupOwner = "agent" | "user";
57
- /** A browser-reported comparison group. */
58
62
  export interface CanvasGroup {
59
63
  readonly id: string;
60
64
  readonly label: string;
61
65
  readonly owner: CanvasGroupOwner;
62
66
  readonly routes: readonly AgentRoute[];
63
67
  }
64
- /** A compact, serialisable Canvas snapshot returned by the browser. */
65
68
  export interface CanvasState {
66
69
  readonly mode: "inspect" | "canvas";
67
70
  readonly groups: readonly CanvasGroup[];
@@ -287,32 +290,16 @@ export interface ProjectBridgeHandle {
287
290
  };
288
291
  close(): Promise<void>;
289
292
  }
290
- /**
291
- * The `startProjectBridge` export of `@nudge-ui/mcp/project`. Hosts load it
292
- * dynamically from the application's own dependencies, so this type is the
293
- * only compile-time link between the two packages.
294
- */
293
+ /** The `@nudge-ui/mcp/project` export; hosts load it dynamically, so this is the only compile-time link between the packages. */
295
294
  export type StartProjectBridge = (options: ProjectBridgeStartOptions) => Promise<ProjectBridgeHandle>;
296
- /**
297
- * Returns a canonical origin or null. Credentials, paths, and fragments are
298
- * rejected so the browser cannot broaden the pairing boundary accidentally.
299
- */
295
+ /** Canonical origin or null; credentials, paths, and fragments are rejected so pairing cannot broaden accidentally. */
300
296
  export declare function canonicalOrigin(value: unknown): string | null;
301
- /** Returns true only for exact, canonical HTTP(S) origins. */
302
297
  export declare function isCanonicalOrigin(value: unknown): value is string;
303
- /**
304
- * Checks an origin against an explicit allow-list. An empty allow-list does
305
- * not mean wildcard access; callers must choose an origin before pairing.
306
- */
298
+ /** An empty allow-list is not wildcard access; callers must choose an origin before pairing. */
307
299
  export declare function isAllowedOrigin(value: unknown, allowedOrigins: readonly string[]): value is string;
308
- /**
309
- * Validates an agent route and ensures it belongs to the paired origin.
310
- * Fragments are retained because they are useful initial Canvas locations.
311
- */
300
+ /** Fragments are retained because they are useful initial Canvas locations. */
312
301
  export declare function isSameOriginRoute(value: unknown, origin: string): value is AgentRoute;
313
- /** Validates and normalises route values for a presentation command. */
314
302
  export declare function validateRoutes(value: unknown, origin: string): AgentRoute[];
315
- /** Validates the fields shared by every companion message. */
316
303
  export declare function isProtocolVersion(value: unknown): value is AgentProtocolVersion;
317
304
  export declare function isProjectIdentity(value: unknown): value is AgentProjectIdentity;
318
305
  export declare function isAgentSketchCaptureMetadata(value: unknown): value is AgentSketchCaptureMetadata;
@@ -326,21 +313,12 @@ export declare function isCanvasState(value: unknown): value is CanvasState;
326
313
  export declare function isCanvasGroup(value: unknown): value is CanvasGroup;
327
314
  export declare function isCanvasCommand(value: unknown): value is CanvasCommand;
328
315
  export declare function isAgentDeliveredPrompt(value: unknown): value is AgentDeliveredPrompt;
329
- /** A Canvas acknowledgement or result; a successful one never carries an error. */
316
+ /** A successful result never carries an error. */
330
317
  export declare function isCanvasCommandResult(value: unknown): value is CanvasCommandResult;
331
- /** The connection state shown for a pairing, a listener, and the current request. */
332
318
  export declare function deriveConnectionState(status: Pick<AgentStatusSnapshot, "listenerActive" | "paired" | "request">): AgentConnectionState;
333
- /**
334
- * Decodes a status snapshot from any peer. Unknown fields are dropped and the
335
- * connection state is recomputed, so a snapshot can never claim a state its
336
- * own fields contradict.
337
- */
319
+ /** Unknown fields are dropped and the connection state is recomputed, so a snapshot cannot claim a state its own fields contradict. */
338
320
  export declare function decodeAgentStatusSnapshot(value: unknown): AgentStatusSnapshot | null;
339
- /**
340
- * Decodes the event inside a bridge envelope. A Canvas command is passed
341
- * through as received: the Canvas controller validates it so a malformed
342
- * command still receives an error acknowledgement instead of a timeout.
343
- */
321
+ /** A Canvas command is passed through as received: the Canvas controller validates it so a malformed command still receives an error acknowledgement. */
344
322
  export declare function decodeBridgeEvent(value: unknown): BridgeEvent | null;
345
323
  /** Decodes a pairing or takeover response for the exact project and origin requested. */
346
324
  export declare function decodePairingResponse(value: unknown, expected: Pick<PairingRequest, "projectId" | "origin">): PairingResponse | null;
@@ -1,11 +1,4 @@
1
- /**
2
- * Public, host-neutral contracts shared by the Nudge browser inspector and
3
- * its local MCP companion.
4
- *
5
- * This module deliberately has no Node, browser, MCP SDK, or framework
6
- * imports. Hosts can use the same validation and message shapes without
7
- * pulling the companion into a browser bundle.
8
- */
1
+ /** Host-neutral contracts shared by the browser inspector and the local MCP companion; no Node, browser, MCP SDK, or framework imports. */
9
2
  export const AGENT_PROTOCOL_VERSION = 3;
10
3
  export const AGENT_PROTOCOL_LIMITS = {
11
4
  projectId: 256,
@@ -37,6 +30,17 @@ export const AGENT_PROTOCOL_LIMITS = {
37
30
  canvasCardCount: 128,
38
31
  agentClientName: 120,
39
32
  };
33
+ /** Stable loopback endpoint names shared by the browser client and the MCP bridge. */
34
+ export const BRIDGE_ENDPOINTS = {
35
+ health: "/health",
36
+ pair: "/pair",
37
+ takeover: "/takeover",
38
+ events: "/events",
39
+ prompt: "/prompt",
40
+ status: "/status",
41
+ canvasAcknowledgement: "/canvas/ack",
42
+ disconnect: "/disconnect",
43
+ };
40
44
  export const CANVAS_COMMAND_TYPES = [
41
45
  "read-state",
42
46
  "present-routes",
@@ -93,10 +97,7 @@ function encodedByteLength(value) {
93
97
  const padding = value.endsWith("==") ? 2 : value.endsWith("=") ? 1 : 0;
94
98
  return Math.max(0, Math.floor(value.length * 3 / 4) - padding);
95
99
  }
96
- /**
97
- * Returns a canonical origin or null. Credentials, paths, and fragments are
98
- * rejected so the browser cannot broaden the pairing boundary accidentally.
99
- */
100
+ /** Canonical origin or null; credentials, paths, and fragments are rejected so pairing cannot broaden accidentally. */
100
101
  export function canonicalOrigin(value) {
101
102
  if (!nonEmptyString(value, AGENT_PROTOCOL_LIMITS.origin))
102
103
  return null;
@@ -113,24 +114,17 @@ export function canonicalOrigin(value) {
113
114
  return null;
114
115
  return parsed.origin;
115
116
  }
116
- /** Returns true only for exact, canonical HTTP(S) origins. */
117
117
  export function isCanonicalOrigin(value) {
118
118
  return canonicalOrigin(value) === value;
119
119
  }
120
- /**
121
- * Checks an origin against an explicit allow-list. An empty allow-list does
122
- * not mean wildcard access; callers must choose an origin before pairing.
123
- */
120
+ /** An empty allow-list is not wildcard access; callers must choose an origin before pairing. */
124
121
  export function isAllowedOrigin(value, allowedOrigins) {
125
122
  const origin = canonicalOrigin(value);
126
123
  if (!origin || allowedOrigins.length === 0)
127
124
  return false;
128
125
  return allowedOrigins.some((candidate) => canonicalOrigin(candidate) === origin);
129
126
  }
130
- /**
131
- * Validates an agent route and ensures it belongs to the paired origin.
132
- * Fragments are retained because they are useful initial Canvas locations.
133
- */
127
+ /** Fragments are retained because they are useful initial Canvas locations. */
134
128
  export function isSameOriginRoute(value, origin) {
135
129
  if (!isRecord(value) || !hasOnlyKeys(value, ["url", "title", "label"]))
136
130
  return false;
@@ -154,7 +148,6 @@ export function isSameOriginRoute(value, origin) {
154
148
  return false;
155
149
  return true;
156
150
  }
157
- /** Validates and normalises route values for a presentation command. */
158
151
  export function validateRoutes(value, origin) {
159
152
  if (!Array.isArray(value) || value.length === 0 || value.length > AGENT_PROTOCOL_LIMITS.routeCount) {
160
153
  throw new TypeError(`routes must contain between 1 and ${AGENT_PROTOCOL_LIMITS.routeCount} items`);
@@ -175,7 +168,6 @@ export function validateRoutes(value, origin) {
175
168
  };
176
169
  });
177
170
  }
178
- /** Validates the fields shared by every companion message. */
179
171
  export function isProtocolVersion(value) {
180
172
  return value === AGENT_PROTOCOL_VERSION;
181
173
  }
@@ -418,7 +410,7 @@ function isCanvasCommandError(value) {
418
410
  && nonEmptyString(value.code, 128)
419
411
  && typeof value.message === "string" && value.message.length <= AGENT_PROTOCOL_LIMITS.prompt;
420
412
  }
421
- /** A Canvas acknowledgement or result; a successful one never carries an error. */
413
+ /** A successful result never carries an error. */
422
414
  export function isCanvasCommandResult(value) {
423
415
  if (!isRecord(value) || !hasOnlyKeys(value, ["commandId", "ok", "state", "group", "error"]))
424
416
  return false;
@@ -428,7 +420,6 @@ export function isCanvasCommandResult(value) {
428
420
  && (value.group === undefined || isCanvasGroup(value.group))
429
421
  && (value.error === undefined || (!value.ok && isCanvasCommandError(value.error)));
430
422
  }
431
- /** The connection state shown for a pairing, a listener, and the current request. */
432
423
  export function deriveConnectionState(status) {
433
424
  if (status.request?.status === "delivered")
434
425
  return "delivered";
@@ -460,11 +451,7 @@ function decodeStatusRequest(value) {
460
451
  ...(error === undefined ? {} : { error }),
461
452
  };
462
453
  }
463
- /**
464
- * Decodes a status snapshot from any peer. Unknown fields are dropped and the
465
- * connection state is recomputed, so a snapshot can never claim a state its
466
- * own fields contradict.
467
- */
454
+ /** Unknown fields are dropped and the connection state is recomputed, so a snapshot cannot claim a state its own fields contradict. */
468
455
  export function decodeAgentStatusSnapshot(value) {
469
456
  if (!isRecord(value)
470
457
  || value.protocolVersion !== AGENT_PROTOCOL_VERSION
@@ -491,11 +478,7 @@ export function decodeAgentStatusSnapshot(value) {
491
478
  : {}),
492
479
  };
493
480
  }
494
- /**
495
- * Decodes the event inside a bridge envelope. A Canvas command is passed
496
- * through as received: the Canvas controller validates it so a malformed
497
- * command still receives an error acknowledgement instead of a timeout.
498
- */
481
+ /** A Canvas command is passed through as received: the Canvas controller validates it so a malformed command still receives an error acknowledgement. */
499
482
  export function decodeBridgeEvent(value) {
500
483
  if (!isRecord(value))
501
484
  return null;
package/dist/nudge-ui.mjs CHANGED
@@ -6199,7 +6199,7 @@ function isRecord(value) {
6199
6199
  return typeof value === "object" && value !== null && !Array.isArray(value);
6200
6200
  }
6201
6201
  function isPnpRuntime() {
6202
- return typeof process.versions.pnp === "string";
6202
+ return "pnp" in process.versions && typeof process.versions.pnp === "string";
6203
6203
  }
6204
6204
 
6205
6205
  // src/cli/agentCommand.ts
@@ -6262,6 +6262,42 @@ function isReservedNudgeUiRoute(pathname) {
6262
6262
  return pathname === NUDGE_UI_ROUTE_PREFIX.slice(0, -1) || pathname.startsWith(NUDGE_UI_ROUTE_PREFIX);
6263
6263
  }
6264
6264
 
6265
+ // src/inspector/runtime/runtimeConfig.ts
6266
+ function cloneAndFreeze(value, seen = /* @__PURE__ */ new WeakMap()) {
6267
+ if (value === null || typeof value !== "object") return value;
6268
+ const source = value;
6269
+ const existing = seen.get(source);
6270
+ if (existing) return existing;
6271
+ if (Object.isFrozen(value)) {
6272
+ seen.set(source, value);
6273
+ return value;
6274
+ }
6275
+ if (Array.isArray(value)) {
6276
+ const copy2 = [];
6277
+ seen.set(source, copy2);
6278
+ for (const item of value) copy2.push(cloneAndFreeze(item, seen));
6279
+ return Object.freeze(copy2);
6280
+ }
6281
+ const copy = {};
6282
+ seen.set(source, copy);
6283
+ for (const [key, child] of Object.entries(value)) {
6284
+ copy[key] = cloneAndFreeze(child, seen);
6285
+ }
6286
+ return Object.freeze(copy);
6287
+ }
6288
+ var DEFAULT_RUNTIME_CONFIG = cloneAndFreeze({
6289
+ projectId: "/stub/project",
6290
+ host: "vite-react",
6291
+ framework: "React",
6292
+ stylingSystem: "CSS custom properties",
6293
+ capabilities: { canvas: true, componentSemantics: true, domNavigation: false },
6294
+ tokenCatalog: [],
6295
+ tokens: [],
6296
+ tokenDiagnostics: [],
6297
+ tokenGeneration: "",
6298
+ componentContracts: []
6299
+ });
6300
+
6265
6301
  // src/transport/editor.ts
6266
6302
  function isNudgeUiEditorDocumentRequest(requestHref, method, headers) {
6267
6303
  const normalizedMethod = (method ?? "GET").toUpperCase();
@@ -6285,7 +6321,7 @@ function createNudgeUiEditorDocument() {
6285
6321
  <head>
6286
6322
  <meta charset="utf-8">
6287
6323
  <meta name="viewport" content="width=device-width, initial-scale=1">
6288
- <title>Nudge UI</title>
6324
+ <title></title>
6289
6325
  <style>html,body,#${NUDGE_UI_MOUNT_ID}{width:100%;height:100%;margin:0}body{overflow:hidden}</style>
6290
6326
  </head>
6291
6327
  <body>
@@ -6298,6 +6334,20 @@ function createNudgeUiEditorDocument() {
6298
6334
  // src/transport/index.ts
6299
6335
  var NUDGE_UI_MANIFEST_VERSION = 1;
6300
6336
 
6337
+ // src/inspector/clientManifest.ts
6338
+ var NUDGE_UI_CLIENT_MANIFEST_VERSION = NUDGE_UI_MANIFEST_VERSION;
6339
+ function createNudgeUiClientManifest(input) {
6340
+ return {
6341
+ version: NUDGE_UI_CLIENT_MANIFEST_VERSION,
6342
+ revision: input.revision ?? 0,
6343
+ runtime: input.runtime,
6344
+ ...input.agentBridge ? { agentBridge: input.agentBridge } : {},
6345
+ ...input.document ? { document: input.document } : {},
6346
+ ...input.reload ? { reload: input.reload } : {},
6347
+ ...input.inspectAutomatedBrowsers ? { inspectAutomatedBrowsers: true } : {}
6348
+ };
6349
+ }
6350
+
6301
6351
  // src/hosts/environment.ts
6302
6352
  function readNudgeUiEnvironmentSwitch(env = process.env) {
6303
6353
  const value = env.NUDGE_UI?.trim().toLowerCase();
@@ -6311,17 +6361,14 @@ function automationManifestFields(env = process.env) {
6311
6361
 
6312
6362
  // src/hosts/static/manifest.ts
6313
6363
  function createStandaloneRuntimeManifest(projectId, tokenSnapshot = emptyTokenSnapshot(), revision2 = 0) {
6314
- return {
6315
- version: NUDGE_UI_MANIFEST_VERSION,
6364
+ return createNudgeUiClientManifest({
6316
6365
  revision: revision2,
6317
6366
  runtime: {
6318
6367
  projectId,
6319
6368
  host: "static-html",
6320
6369
  framework: "HTML",
6321
6370
  stylingSystem: "CSS custom properties",
6322
- // Canvas shares the Vite host's controller/renderer runtime (ADR-0012):
6323
- // every served document carries the bootstrap, so card iframes boot as
6324
- // renderers without host-specific code.
6371
+ // Canvas shares the Vite host's controller/renderer runtime (ADR-0012).
6325
6372
  capabilities: { canvas: true, componentSemantics: false, domNavigation: true },
6326
6373
  tokenCatalog: tokenSnapshot.tokenCatalog,
6327
6374
  tokens: tokenSnapshot.tokens,
@@ -6339,7 +6386,7 @@ function createStandaloneRuntimeManifest(projectId, tokenSnapshot = emptyTokenSn
6339
6386
  events: ["ready", "reload"]
6340
6387
  },
6341
6388
  ...automationManifestFields()
6342
- };
6389
+ });
6343
6390
  }
6344
6391
  function emptyTokenSnapshot() {
6345
6392
  return {
@@ -14320,6 +14367,9 @@ async function directory(root2, id) {
14320
14367
  }
14321
14368
  return join2(actual, id);
14322
14369
  }
14370
+ function isRecord2(value) {
14371
+ return typeof value === "object" && value !== null && !Array.isArray(value);
14372
+ }
14323
14373
  async function body(request) {
14324
14374
  const chunks = [];
14325
14375
  let size = 0;
@@ -14330,7 +14380,9 @@ async function body(request) {
14330
14380
  chunks.push(data);
14331
14381
  }
14332
14382
  const text = Buffer.concat(chunks).toString("utf8");
14333
- return text.length === 0 ? {} : JSON.parse(text);
14383
+ if (text.length === 0) return {};
14384
+ const parsed = JSON.parse(text);
14385
+ return isRecord2(parsed) ? parsed : null;
14334
14386
  }
14335
14387
  function respond(response, status, content, type = "text/plain; charset=utf-8") {
14336
14388
  response.writeHead(status, {
@@ -14367,7 +14419,7 @@ async function handleHtmlArtifactRequest(request, response, root2, transformHtml
14367
14419
  try {
14368
14420
  if (request.method === "POST" && parts.length === 0) {
14369
14421
  const input = await body(request);
14370
- if (!validArtifact(input)) {
14422
+ if (!input || !validArtifact(input)) {
14371
14423
  respond(response, 400, "Invalid artifact");
14372
14424
  return true;
14373
14425
  }
@@ -14423,27 +14475,26 @@ async function handleHtmlArtifactRequest(request, response, root2, transformHtml
14423
14475
  }
14424
14476
  if (request.method === "PUT" && parts[1] === "document" || request.method === "POST" && parts[1] === "commit") {
14425
14477
  const input = await body(request);
14426
- if (!input || typeof input !== "object") {
14478
+ if (!input) {
14427
14479
  respond(response, 400, "Invalid document");
14428
14480
  return true;
14429
14481
  }
14430
- const item = input;
14431
- if (!isHtmlArtifactRevision(item.expected)) {
14482
+ if (!isHtmlArtifactRevision(input.expected)) {
14432
14483
  respond(response, 428, "An expected iteration revision is required");
14433
14484
  return true;
14434
14485
  }
14435
- if (item.html !== void 0 && typeof item.html !== "string" || request.method === "PUT" && typeof item.html !== "string") {
14486
+ if (input.html !== void 0 && typeof input.html !== "string" || request.method === "PUT" && typeof input.html !== "string") {
14436
14487
  respond(response, 400, "Invalid document");
14437
14488
  return true;
14438
14489
  }
14439
- const expected = item.expected;
14490
+ const expected = input.expected;
14440
14491
  if (!sameRevision(await readRevision(target), expected)) {
14441
14492
  respond(response, 409, HTML_ITERATION_CONFLICT);
14442
14493
  return true;
14443
14494
  }
14444
- const html = typeof item.html === "string" ? item.html : await readFile(join2(target, "document.html"), "utf8");
14495
+ const html = typeof input.html === "string" ? input.html : await readFile(join2(target, "document.html"), "utf8");
14445
14496
  const writes = request.method === "POST" ? ["preview.html"] : [];
14446
- if (typeof item.html === "string") writes.push("document.html");
14497
+ if (typeof input.html === "string") writes.push("document.html");
14447
14498
  const previewBefore = await readFile(join2(target, "preview.html"));
14448
14499
  const temporaryFiles = [];
14449
14500
  try {
@@ -14500,10 +14551,9 @@ async function handleHtmlArtifactRequest(request, response, root2, transformHtml
14500
14551
  return true;
14501
14552
  }
14502
14553
  function validArtifact(value) {
14503
- if (!value || typeof value !== "object") return false;
14504
- const item = value;
14505
- const viewport = item.viewport;
14506
- return typeof item.id === "string" && ID.test(item.id) && typeof item.sourceUrl === "string" && item.sourceUrl.length < 4096 && typeof item.title === "string" && item.title.length < 512 && typeof item.html === "string" && item.html.length > 0 && !!viewport && typeof viewport.width === "number" && typeof viewport.height === "number";
14554
+ if (!isRecord2(value)) return false;
14555
+ const viewport = value.viewport;
14556
+ return typeof value.id === "string" && ID.test(value.id) && typeof value.sourceUrl === "string" && value.sourceUrl.length < 4096 && typeof value.title === "string" && value.title.length < 512 && typeof value.html === "string" && value.html.length > 0 && isRecord2(viewport) && typeof viewport.width === "number" && typeof viewport.height === "number";
14507
14557
  }
14508
14558
 
14509
14559
  // src/hosts/static/server.ts
@@ -15858,10 +15908,7 @@ function createStandaloneProjectId(rootDirectory) {
15858
15908
  }
15859
15909
  function contentTypeForPath(filePath) {
15860
15910
  const extension = extname2(filePath).toLowerCase();
15861
- return MIME_TYPES2[extension] ?? "application/octet-stream";
15862
- }
15863
- function isReservedNudgeUiRoute2(pathname) {
15864
- return pathname === NUDGE_UI_ROUTE_PREFIX.slice(0, -1) || pathname.startsWith(NUDGE_UI_ROUTE_PREFIX);
15911
+ return MIME_TYPES2.get(extension) ?? "application/octet-stream";
15865
15912
  }
15866
15913
  function canonicalDirectory(directory2) {
15867
15914
  const canonical = canonicalDirectoryOrNull(directory2);
@@ -15944,7 +15991,7 @@ async function handleRequest(input) {
15944
15991
  sendText(response, 400, "Bad Request");
15945
15992
  return;
15946
15993
  }
15947
- if (isReservedNudgeUiRoute2(decodedPath)) {
15994
+ if (isReservedNudgeUiRoute(decodedPath)) {
15948
15995
  await handleNudgeUiRoute(input, decodedPath);
15949
15996
  return;
15950
15997
  }
@@ -16100,7 +16147,7 @@ function sendBody(response, status, body2, contentType, headers = {}) {
16100
16147
  if (response.req?.method !== "HEAD") response.end(body2);
16101
16148
  else response.end();
16102
16149
  }
16103
- var MIME_TYPES2 = {
16150
+ var MIME_TYPES2 = new Map(Object.entries({
16104
16151
  ".avif": "image/avif",
16105
16152
  ".css": "text/css; charset=utf-8",
16106
16153
  ".csv": "text/csv; charset=utf-8",
@@ -16126,7 +16173,7 @@ var MIME_TYPES2 = {
16126
16173
  ".woff": "font/woff",
16127
16174
  ".woff2": "font/woff2",
16128
16175
  ".xml": "application/xml; charset=utf-8"
16129
- };
16176
+ }));
16130
16177
 
16131
16178
  // src/hosts/static/cli.ts
16132
16179
  function parseServeArguments(args, currentDirectory = process.cwd()) {
@@ -49,6 +49,10 @@ async function directory(root, id) {
49
49
  }
50
50
  return join(actual, id);
51
51
  }
52
+ function isRecord(value) {
53
+ return typeof value === "object" && value !== null && !Array.isArray(value);
54
+ }
55
+ /** Both artifact endpoints accept JSON objects only. */
52
56
  async function body(request) {
53
57
  const chunks = [];
54
58
  let size = 0;
@@ -60,7 +64,10 @@ async function body(request) {
60
64
  chunks.push(data);
61
65
  }
62
66
  const text = Buffer.concat(chunks).toString("utf8");
63
- return text.length === 0 ? {} : JSON.parse(text);
67
+ if (text.length === 0)
68
+ return {};
69
+ const parsed = JSON.parse(text);
70
+ return isRecord(parsed) ? parsed : null;
64
71
  }
65
72
  function respond(response, status, content, type = "text/plain; charset=utf-8") {
66
73
  response.writeHead(status, {
@@ -100,7 +107,7 @@ export async function handleHtmlArtifactRequest(request, response, root, transfo
100
107
  try {
101
108
  if (request.method === "POST" && parts.length === 0) {
102
109
  const input = await body(request);
103
- if (!validArtifact(input)) {
110
+ if (!input || !validArtifact(input)) {
104
111
  respond(response, 400, "Invalid artifact");
105
112
  return true;
106
113
  }
@@ -159,28 +166,27 @@ export async function handleHtmlArtifactRequest(request, response, root, transfo
159
166
  if ((request.method === "PUT" && parts[1] === "document")
160
167
  || (request.method === "POST" && parts[1] === "commit")) {
161
168
  const input = await body(request);
162
- if (!input || typeof input !== "object") {
169
+ if (!input) {
163
170
  respond(response, 400, "Invalid document");
164
171
  return true;
165
172
  }
166
- const item = input;
167
- if (!isHtmlArtifactRevision(item.expected)) {
173
+ if (!isHtmlArtifactRevision(input.expected)) {
168
174
  respond(response, 428, "An expected iteration revision is required");
169
175
  return true;
170
176
  }
171
- if ((item.html !== undefined && typeof item.html !== "string")
172
- || (request.method === "PUT" && typeof item.html !== "string")) {
177
+ if ((input.html !== undefined && typeof input.html !== "string")
178
+ || (request.method === "PUT" && typeof input.html !== "string")) {
173
179
  respond(response, 400, "Invalid document");
174
180
  return true;
175
181
  }
176
- const expected = item.expected;
182
+ const expected = input.expected;
177
183
  if (!sameRevision(await readRevision(target), expected)) {
178
184
  respond(response, 409, HTML_ITERATION_CONFLICT);
179
185
  return true;
180
186
  }
181
- const html = typeof item.html === "string" ? item.html : await readFile(join(target, "document.html"), "utf8");
187
+ const html = typeof input.html === "string" ? input.html : await readFile(join(target, "document.html"), "utf8");
182
188
  const writes = request.method === "POST" ? ["preview.html"] : [];
183
- if (typeof item.html === "string")
189
+ if (typeof input.html === "string")
184
190
  writes.push("document.html");
185
191
  const previewBefore = await readFile(join(target, "preview.html"));
186
192
  const temporaryFiles = [];
@@ -190,9 +196,7 @@ export async function handleHtmlArtifactRequest(request, response, root, transfo
190
196
  temporaryFiles.push({ temporary, destination: join(target, file) });
191
197
  await writeFile(temporary, html);
192
198
  }
193
- // Keep the final check and replacements in one controller critical section.
194
- // External tools must finish their file writes before handoff; they do
195
- // not participate in this process's request queue.
199
+ // External writers do not join this request queue, so the final check and replacements stay in one critical section.
196
200
  const latest = {
197
201
  document: revision(readFileSync(join(target, "document.html"))),
198
202
  preview: revision(readFileSync(join(target, "preview.html"))),
@@ -241,13 +245,12 @@ export async function handleHtmlArtifactRequest(request, response, root, transfo
241
245
  return true;
242
246
  }
243
247
  function validArtifact(value) {
244
- if (!value || typeof value !== "object")
248
+ if (!isRecord(value))
245
249
  return false;
246
- const item = value;
247
- const viewport = item.viewport;
248
- return typeof item.id === "string" && ID.test(item.id)
249
- && typeof item.sourceUrl === "string" && item.sourceUrl.length < 4096
250
- && typeof item.title === "string" && item.title.length < 512
251
- && typeof item.html === "string" && item.html.length > 0
252
- && !!viewport && typeof viewport.width === "number" && typeof viewport.height === "number";
250
+ const viewport = value.viewport;
251
+ return typeof value.id === "string" && ID.test(value.id)
252
+ && typeof value.sourceUrl === "string" && value.sourceUrl.length < 4096
253
+ && typeof value.title === "string" && value.title.length < 512
254
+ && typeof value.html === "string" && value.html.length > 0
255
+ && isRecord(viewport) && typeof viewport.width === "number" && typeof viewport.height === "number";
253
256
  }
@@ -15,5 +15,4 @@ export interface ProjectFileWatcher {
15
15
  start(): Promise<void>;
16
16
  close(): Promise<void>;
17
17
  }
18
- /** Creates a watcher that starts and stops explicitly with the server. */
19
18
  export declare function createProjectFileWatcher(options: ProjectFileWatcherOptions): ProjectFileWatcher;
@@ -1,16 +1,10 @@
1
- /**
2
- * Node's recursive `fs.watch` is not available on every supported platform, so
3
- * this watches each directory and adds watches for ones created later. The
4
- * public surface is lifecycle and settled batches; debounce and symlink
5
- * confinement stay internal.
6
- */
1
+ /** Node's recursive `fs.watch` is not available on every supported platform, so directories are watched individually. */
7
2
  import { watch } from "node:fs";
8
3
  import { readdir } from "node:fs/promises";
9
4
  import { realpathSync, statSync } from "node:fs";
10
5
  import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
11
6
  import { isExcludedDirectoryName, isSensitiveProjectPath } from "./pathPolicy.js";
12
7
  export { isExcludedDirectoryName, isSensitiveProjectPath } from "./pathPolicy.js";
13
- /** Creates a watcher that starts and stops explicitly with the server. */
14
8
  export function createProjectFileWatcher(options) {
15
9
  const rootDirectory = realpathSync(resolve(options.rootDirectory));
16
10
  const debounceMs = Math.max(0, options.debounceMs ?? 60);
@@ -85,8 +79,7 @@ export function createProjectFileWatcher(options) {
85
79
  return;
86
80
  }
87
81
  watches.set(directory, { directory, canonicalDirectory, watcher: directoryWatcher });
88
- // Watch before scanning so events during the async walk are not missed. Scans
89
- // run serially and re-check `closed` after every await, so none leak past close().
82
+ // Watch before scanning so events during the async walk are not missed.
90
83
  pendingScans += 1;
91
84
  scanQueue = scanQueue
92
85
  .then(() => scanSubdirectories(directory))