nudge-ui 0.2.4 → 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 (642) hide show
  1. package/dist/cli/agentCommand.d.ts +0 -1
  2. package/dist/cli/agentCommand.js +4 -29
  3. package/dist/client.mjs +987 -221
  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 +14 -71
  94. package/dist/hosts/projectBridge.d.ts +0 -2
  95. package/dist/hosts/projectBridge.js +3 -19
  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 +8 -9
  125. package/dist/inspector/agent/activity.d.ts +2 -2
  126. package/dist/inspector/agent/activity.js +4 -3
  127. package/dist/inspector/agent/client.d.ts +3 -27
  128. package/dist/inspector/agent/client.js +43 -91
  129. package/dist/inspector/agent/connectionStatus.d.ts +3 -2
  130. package/dist/inspector/agent/connectionStatus.js +25 -1
  131. package/dist/inspector/agent/httpTransport.d.ts +0 -8
  132. package/dist/inspector/agent/httpTransport.js +42 -176
  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 +3 -20
  136. package/dist/inspector/agent/verification.js +10 -43
  137. package/dist/inspector/boot.d.ts +5 -0
  138. package/dist/inspector/boot.js +289 -0
  139. package/dist/inspector/canvas/AgentActivityOverlay.d.ts +3 -2
  140. package/dist/inspector/canvas/AgentActivityOverlay.js +7 -4
  141. package/dist/inspector/canvas/CanvasCard.js +26 -24
  142. package/dist/inspector/canvas/CanvasElementOverlay.js +196 -174
  143. package/dist/inspector/canvas/CanvasToolbar.js +2 -1
  144. package/dist/inspector/canvas/CanvasWorkspace.js +87 -124
  145. package/dist/inspector/canvas/LockedWorkspaceNotice.d.ts +3 -2
  146. package/dist/inspector/canvas/LockedWorkspaceNotice.js +10 -6
  147. package/dist/inspector/canvas/PageCard.d.ts +9 -0
  148. package/dist/inspector/canvas/PageCard.js +50 -0
  149. package/dist/inspector/canvas/SketchToolOptions.d.ts +4 -0
  150. package/dist/inspector/canvas/SketchToolOptions.js +80 -0
  151. package/dist/inspector/canvas/StaleChangeIndicator.d.ts +1 -1
  152. package/dist/inspector/canvas/StaleChangeIndicator.js +1 -1
  153. package/dist/inspector/canvas/ToolOptionsDrawer.d.ts +16 -0
  154. package/dist/inspector/canvas/ToolOptionsDrawer.js +71 -0
  155. package/dist/inspector/canvas/activeCanvasDocument.d.ts +3 -4
  156. package/dist/inspector/canvas/activeCanvasDocument.js +0 -2
  157. package/dist/inspector/canvas/agentPresentation.d.ts +2 -13
  158. package/dist/inspector/canvas/agentPresentation.js +3 -14
  159. package/dist/inspector/canvas/assets/eraser.svg +28 -0
  160. package/dist/inspector/canvas/assets/pen.svg +25 -0
  161. package/dist/inspector/canvas/canvasFrame.d.ts +12 -0
  162. package/dist/inspector/canvas/canvasFrame.js +9 -0
  163. package/dist/inspector/canvas/canvasGestures.d.ts +0 -1
  164. package/dist/inspector/canvas/canvasGestures.js +0 -6
  165. package/dist/inspector/canvas/canvasResize.d.ts +1 -6
  166. package/dist/inspector/canvas/canvasResize.js +1 -6
  167. package/dist/inspector/canvas/canvasStore.d.ts +5 -7
  168. package/dist/inspector/canvas/canvasStore.js +42 -21
  169. package/dist/inspector/canvas/frameConnection.d.ts +42 -0
  170. package/dist/inspector/canvas/frameConnection.js +73 -0
  171. package/dist/inspector/canvas/frameContent.d.ts +0 -1
  172. package/dist/inspector/canvas/frameLifecycle.d.ts +12 -0
  173. package/dist/inspector/canvas/frameLifecycle.js +11 -0
  174. package/dist/inspector/canvas/frameProtocol.d.ts +20 -38
  175. package/dist/inspector/canvas/frameProtocol.js +37 -24
  176. package/dist/inspector/canvas/frameScrollbarStyles.d.ts +0 -1
  177. package/dist/inspector/canvas/frameScrollbarStyles.js +0 -1
  178. package/dist/inspector/canvas/layout.d.ts +10 -22
  179. package/dist/inspector/canvas/layout.js +0 -3
  180. package/dist/inspector/canvas/normalizeUrl.js +1 -8
  181. package/dist/inspector/canvas/pageSurface.d.ts +6 -0
  182. package/dist/inspector/canvas/pageSurface.js +29 -0
  183. package/dist/inspector/canvas/projection.d.ts +14 -25
  184. package/dist/inspector/canvas/projection.js +64 -87
  185. package/dist/inspector/canvas/rendererBootstrap.d.ts +8 -1
  186. package/dist/inspector/canvas/rendererBootstrap.js +10 -15
  187. package/dist/inspector/canvas/rendererCidIndex.d.ts +0 -5
  188. package/dist/inspector/canvas/rendererCidIndex.js +0 -5
  189. package/dist/inspector/canvas/rendererElementSelector.js +38 -28
  190. package/dist/inspector/canvas/rendererMessageRouter.d.ts +4 -6
  191. package/dist/inspector/canvas/rendererMessageRouter.js +12 -17
  192. package/dist/inspector/canvas/rendererSelectionProxy.d.ts +3 -1
  193. package/dist/inspector/canvas/rendererSelectionProxy.js +7 -40
  194. package/dist/inspector/canvas/rendererStylesheet.d.ts +0 -1
  195. package/dist/inspector/canvas/rendererStylesheet.js +23 -1
  196. package/dist/inspector/canvas/resizeHandleScale.d.ts +1 -10
  197. package/dist/inspector/canvas/resizeHandleScale.js +1 -10
  198. package/dist/inspector/canvas/sessionStore.d.ts +3 -9
  199. package/dist/inspector/canvas/sessionStore.js +33 -43
  200. package/dist/inspector/canvas/staleChangeDetector.d.ts +1 -1
  201. package/dist/inspector/canvas/staleChangeDetector.js +11 -26
  202. package/dist/inspector/canvas/toolbarScale.d.ts +1 -4
  203. package/dist/inspector/canvas/toolbarScale.js +1 -4
  204. package/dist/inspector/canvas/useCanvasLayoutAnimation.d.ts +0 -1
  205. package/dist/inspector/canvas/useCanvasLayoutAnimation.js +0 -1
  206. package/dist/inspector/canvas/viewStore.js +1 -1
  207. package/dist/inspector/canvas/wheelPan.d.ts +1 -1
  208. package/dist/inspector/canvas/wheelPan.js +1 -1
  209. package/dist/inspector/canvas/workspaceLease.d.ts +1 -5
  210. package/dist/inspector/canvas/workspaceLease.js +1 -7
  211. package/dist/inspector/changes/codecs.d.ts +1 -0
  212. package/dist/inspector/changes/codecs.js +21 -5
  213. package/dist/inspector/changes/draftPreview.d.ts +7 -0
  214. package/dist/inspector/changes/draftPreview.js +118 -0
  215. package/dist/inspector/changes/editModel.d.ts +11 -13
  216. package/dist/inspector/changes/editModel.js +9 -4
  217. package/dist/inspector/changes/managedStyleProjection.js +6 -15
  218. package/dist/inspector/changes/model.d.ts +0 -5
  219. package/dist/inspector/changes/model.js +1 -8
  220. package/dist/inspector/changes/previewDiagnostics.d.ts +2 -12
  221. package/dist/inspector/changes/previewDiagnostics.js +5 -21
  222. package/dist/inspector/changes/previewVerification.d.ts +25 -0
  223. package/dist/inspector/changes/previewVerification.js +34 -0
  224. package/dist/inspector/changes/structuralTypes.d.ts +2 -4
  225. package/dist/inspector/changes/types.d.ts +11 -8
  226. package/dist/inspector/clientManifest.d.ts +17 -6
  227. package/dist/inspector/clientManifest.js +16 -3
  228. package/dist/inspector/comments/CommentsOverlay.js +66 -23
  229. package/dist/inspector/comments/element.d.ts +1 -2
  230. package/dist/inspector/comments/element.js +1 -2
  231. package/dist/inspector/comments/store.d.ts +1 -1
  232. package/dist/inspector/comments/store.js +4 -3
  233. package/dist/inspector/comments/verification.d.ts +8 -2
  234. package/dist/inspector/comments/verification.js +19 -11
  235. package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +8 -0
  236. package/dist/inspector/componentSemantics/ComponentPropsSection.js +12 -8
  237. package/dist/inspector/componentSemantics/adapterRegistry.d.ts +2 -9
  238. package/dist/inspector/componentSemantics/adapterRegistry.js +2 -9
  239. package/dist/inspector/componentSemantics/changeAction.js +1 -1
  240. package/dist/inspector/componentSemantics/changeModel.js +2 -4
  241. package/dist/inspector/componentSemantics/react/callsites.d.ts +28 -0
  242. package/dist/inspector/componentSemantics/react/callsites.js +261 -0
  243. package/dist/inspector/componentSemantics/react/devtoolsHook.d.ts +23 -0
  244. package/dist/inspector/componentSemantics/react/devtoolsHook.js +71 -0
  245. package/dist/inspector/componentSemantics/react/fibers.d.ts +17 -0
  246. package/dist/inspector/componentSemantics/react/fibers.js +30 -0
  247. package/dist/inspector/componentSemantics/{reactRuntime.d.ts → react/runtime.d.ts} +3 -2
  248. package/dist/inspector/componentSemantics/{reactRuntime.js → react/runtime.js} +70 -53
  249. package/dist/inspector/componentSemantics/runtimeBridge.d.ts +2 -18
  250. package/dist/inspector/componentSemantics/runtimeBridge.js +5 -19
  251. package/dist/inspector/componentSemantics/textBinding.d.ts +2 -11
  252. package/dist/inspector/componentSemantics/textBinding.js +20 -87
  253. package/dist/inspector/componentSemantics/types.d.ts +8 -27
  254. package/dist/inspector/componentSemantics/types.js +0 -1
  255. package/dist/inspector/conformance/borderCases.d.ts +0 -5
  256. package/dist/inspector/conformance/borderCases.js +0 -5
  257. package/dist/inspector/conformance/colorCases.d.ts +0 -6
  258. package/dist/inspector/conformance/colorCases.js +0 -6
  259. package/dist/inspector/conformance/fixture.d.ts +1 -5
  260. package/dist/inspector/conformance/fixture.js +1 -5
  261. package/dist/inspector/conformance/spacingCases.d.ts +0 -4
  262. package/dist/inspector/conformance/spacingCases.js +0 -4
  263. package/dist/inspector/conformance/typographyCases.d.ts +0 -5
  264. package/dist/inspector/conformance/typographyCases.js +0 -5
  265. package/dist/inspector/drafts/draftStore.d.ts +95 -0
  266. package/dist/inspector/drafts/draftStore.js +461 -0
  267. package/dist/inspector/drafts/model.d.ts +14 -14
  268. package/dist/inspector/drafts/model.js +4 -2
  269. package/dist/inspector/drafts/store.d.ts +47 -16
  270. package/dist/inspector/drafts/store.js +137 -170
  271. package/dist/inspector/editScope.d.ts +0 -1
  272. package/dist/inspector/editScope.js +0 -1
  273. package/dist/inspector/index.d.ts +2 -4
  274. package/dist/inspector/index.js +2 -264
  275. package/dist/inspector/inline-text/inlineTextDiagnostics.d.ts +0 -2
  276. package/dist/inspector/inline-text/inlineTextDiagnostics.js +0 -2
  277. package/dist/inspector/inline-text/inlineTextEditor.d.ts +3 -9
  278. package/dist/inspector/inline-text/inlineTextEditor.js +27 -81
  279. package/dist/inspector/inline-text/inlineTextLifecycle.js +1 -6
  280. package/dist/inspector/inline-text/textEditChange.d.ts +1 -2
  281. package/dist/inspector/inspection/bridge.d.ts +3 -7
  282. package/dist/inspector/inspection/bridge.js +6 -13
  283. package/dist/inspector/inspection/browserCssInspection.d.ts +12 -11
  284. package/dist/inspector/inspection/browserCssInspection.js +32 -14
  285. package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +0 -7
  286. package/dist/inspector/inspection/browserCssInspectionRegistry.js +1 -16
  287. package/dist/inspector/inspection/inspectionSnapshot.d.ts +6 -0
  288. package/dist/inspector/inspection/inspectionSnapshot.js +10 -0
  289. package/dist/inspector/inspection/performanceDiagnostics.d.ts +18 -0
  290. package/dist/inspector/inspection/performanceDiagnostics.js +31 -0
  291. package/dist/inspector/inspection/selectionProperty.d.ts +1 -6
  292. package/dist/inspector/inspection/selectionProperty.js +1 -5
  293. package/dist/inspector/inspection/useBrowserCssInspection.d.ts +1 -5
  294. package/dist/inspector/inspection/useBrowserCssInspection.js +22 -59
  295. package/dist/inspector/iterations/capture.d.ts +2 -2
  296. package/dist/inspector/iterations/capture.js +4 -9
  297. package/dist/inspector/iterations/client.d.ts +2 -2
  298. package/dist/inspector/iterations/client.js +0 -1
  299. package/dist/inspector/iterations/coordinator.d.ts +4 -4
  300. package/dist/inspector/iterations/coordinator.js +5 -4
  301. package/dist/inspector/iterations/prompt.d.ts +0 -1
  302. package/dist/inspector/iterations/prompt.js +9 -9
  303. package/dist/inspector/overlay/DomNavigator.d.ts +3 -1
  304. package/dist/inspector/overlay/DomNavigator.js +39 -15
  305. package/dist/inspector/overlay/DropGuideOverlay.d.ts +0 -1
  306. package/dist/inspector/overlay/DropGuideOverlay.js +0 -1
  307. package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +1 -8
  308. package/dist/inspector/overlay/MeasurementGuideOverlay.js +1 -5
  309. package/dist/inspector/overlay/clickPolicy.d.ts +3 -14
  310. package/dist/inspector/overlay/clickPolicy.js +3 -14
  311. package/dist/inspector/overlay/dropGuide.d.ts +0 -3
  312. package/dist/inspector/overlay/dropGuide.js +0 -3
  313. package/dist/inspector/overlay/frameThrottle.d.ts +0 -1
  314. package/dist/inspector/overlay/frameThrottle.js +0 -1
  315. package/dist/inspector/overlay/interactionStyles.d.ts +1 -1
  316. package/dist/inspector/overlay/interactionStyles.js +19 -8
  317. package/dist/inspector/overlay/measurementGeometry.js +4 -12
  318. package/dist/inspector/overlay/selectedGeometry.d.ts +1 -6
  319. package/dist/inspector/overlay/selectedGeometry.js +1 -8
  320. package/dist/inspector/overlay/spacingGestures.d.ts +14 -21
  321. package/dist/inspector/overlay/spacingGestures.js +151 -31
  322. package/dist/inspector/overlay/structuralGestures.d.ts +2 -9
  323. package/dist/inspector/overlay/structuralGestures.js +1 -4
  324. package/dist/inspector/pageInspector.d.ts +33 -0
  325. package/dist/inspector/pageInspector.js +335 -0
  326. package/dist/inspector/projection/cssEscapes.d.ts +0 -1
  327. package/dist/inspector/projection/cssEscapes.js +2 -4
  328. package/dist/inspector/projection/draftProjection.d.ts +6 -10
  329. package/dist/inspector/projection/draftProjection.js +8 -7
  330. package/dist/inspector/projection/managedStylesheet.d.ts +1 -7
  331. package/dist/inspector/projection/managedStylesheet.js +28 -26
  332. package/dist/inspector/projection/renderedInstance.d.ts +5 -28
  333. package/dist/inspector/projection/renderedInstance.js +13 -33
  334. package/dist/inspector/projection/structuralProjection.d.ts +7 -48
  335. package/dist/inspector/projection/structuralProjection.js +31 -96
  336. package/dist/inspector/projection/textProjection.d.ts +7 -13
  337. package/dist/inspector/projection/textProjection.js +35 -80
  338. package/dist/inspector/prompt/PromptSettingsDialog.d.ts +0 -1
  339. package/dist/inspector/prompt/PromptSettingsDialog.js +0 -1
  340. package/dist/inspector/prompt/clipboardHandoff.d.ts +1 -0
  341. package/dist/inspector/prompt/clipboardHandoff.js +34 -16
  342. package/dist/inspector/prompt/generatePrompt.d.ts +2 -2
  343. package/dist/inspector/prompt/generatePrompt.js +247 -166
  344. package/dist/inspector/prompt/promptDocument.d.ts +3 -0
  345. package/dist/inspector/prompt/promptDocument.js +8 -0
  346. package/dist/inspector/prompt/promptSettings.d.ts +0 -3
  347. package/dist/inspector/prompt/promptSettings.js +7 -8
  348. package/dist/inspector/runtime/devFlag.d.ts +2 -25
  349. package/dist/inspector/runtime/devFlag.js +4 -31
  350. package/dist/inspector/runtime/documentStylesheetOrder.d.ts +0 -2
  351. package/dist/inspector/runtime/editorShell.d.ts +0 -1
  352. package/dist/inspector/runtime/editorShell.js +0 -1
  353. package/dist/inspector/runtime/inspectorStorage.d.ts +11 -0
  354. package/dist/inspector/runtime/inspectorStorage.js +37 -0
  355. package/dist/inspector/runtime/ownedStylesheets.d.ts +14 -0
  356. package/dist/inspector/runtime/ownedStylesheets.js +66 -0
  357. package/dist/inspector/runtime/runtimeConfig.d.ts +14 -84
  358. package/dist/inspector/runtime/runtimeConfig.js +18 -50
  359. package/dist/inspector/runtime/runtimeIdentityClaims.d.ts +19 -0
  360. package/dist/inspector/runtime/runtimeIdentityClaims.js +178 -0
  361. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +6 -23
  362. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +103 -52
  363. package/dist/inspector/runtime/useRuntimeConfig.d.ts +1 -8
  364. package/dist/inspector/runtime/useRuntimeConfig.js +1 -8
  365. package/dist/inspector/selection/editScope.d.ts +2 -7
  366. package/dist/inspector/selection/editScope.js +15 -14
  367. package/dist/inspector/selection/editTarget.d.ts +1 -5
  368. package/dist/inspector/selection/hierarchy.d.ts +11 -11
  369. package/dist/inspector/selection/hierarchy.js +42 -24
  370. package/dist/inspector/selection/selectionStore.d.ts +0 -3
  371. package/dist/inspector/selection/selectionStore.js +5 -16
  372. package/dist/inspector/selection/sourceSite.d.ts +1 -5
  373. package/dist/inspector/selection/sourceSite.js +2 -8
  374. package/dist/inspector/selection/styleSelection.d.ts +1 -5
  375. package/dist/inspector/selection/styleSelection.js +1 -5
  376. package/dist/inspector/session/lifecycle.d.ts +1 -9
  377. package/dist/inspector/session/lifecycle.js +0 -1
  378. package/dist/inspector/session/sessionContext.d.ts +0 -4
  379. package/dist/inspector/session/sessionContext.js +0 -4
  380. package/dist/inspector/session/sessionFactory.d.ts +0 -9
  381. package/dist/inspector/session/sessionFactory.js +0 -6
  382. package/dist/inspector/settings/SettingsDialog.d.ts +0 -1
  383. package/dist/inspector/settings/SettingsDialog.js +5 -3
  384. package/dist/inspector/shell/AgentStatusButton.d.ts +3 -2
  385. package/dist/inspector/shell/AgentStatusButton.js +7 -7
  386. package/dist/inspector/shell/AppShell.js +6 -2
  387. package/dist/inspector/shell/ChangesLog.js +29 -12
  388. package/dist/inspector/shell/CopyPromptButton.d.ts +2 -1
  389. package/dist/inspector/shell/CopyPromptButton.js +62 -55
  390. package/dist/inspector/shell/EmptyState.js +3 -3
  391. package/dist/inspector/shell/InspectorEditors.d.ts +16 -0
  392. package/dist/inspector/shell/InspectorEditors.js +14 -0
  393. package/dist/inspector/shell/InspectorPanel.d.ts +12 -0
  394. package/dist/inspector/shell/InspectorPanel.js +8 -0
  395. package/dist/inspector/shell/InspectorSelection.d.ts +24 -0
  396. package/dist/inspector/shell/InspectorSelection.js +20 -0
  397. package/dist/inspector/shell/InspectorShell.d.ts +0 -3
  398. package/dist/inspector/shell/InspectorShell.js +44 -58
  399. package/dist/inspector/shell/NudgeLogoIcon.d.ts +5 -0
  400. package/dist/inspector/shell/NudgeLogoIcon.js +5 -0
  401. package/dist/inspector/shell/PeekOriginalButton.d.ts +0 -5
  402. package/dist/inspector/shell/PeekOriginalButton.js +3 -8
  403. package/dist/inspector/shell/PeekOriginalIcon.d.ts +0 -5
  404. package/dist/inspector/shell/PeekOriginalIcon.js +0 -5
  405. package/dist/inspector/shell/PromptActionButton.d.ts +21 -0
  406. package/dist/inspector/shell/PromptActionButton.js +14 -0
  407. package/dist/inspector/shell/elementName.d.ts +5 -0
  408. package/dist/inspector/shell/elementName.js +29 -0
  409. package/dist/inspector/shell/interactionStatePreview.d.ts +6 -0
  410. package/dist/inspector/shell/interactionStatePreview.js +107 -0
  411. package/dist/inspector/shell/originalPreview.d.ts +1 -5
  412. package/dist/inspector/shell/originalPreview.js +5 -37
  413. package/dist/inspector/shell/stateValue.d.ts +1 -2
  414. package/dist/inspector/shell/stateValue.js +4 -8
  415. package/dist/inspector/shell/styleState.d.ts +1 -2
  416. package/dist/inspector/shell/styleState.js +1 -2
  417. package/dist/inspector/sketch/SketchEditor.js +5 -5
  418. package/dist/inspector/sketch/SketchFrameOverlay.d.ts +2 -1
  419. package/dist/inspector/sketch/SketchFrameOverlay.js +13 -16
  420. package/dist/inspector/sketch/SketchOverlay.d.ts +3 -5
  421. package/dist/inspector/sketch/SketchOverlay.js +138 -263
  422. package/dist/inspector/sketch/SketchPromptPanel.d.ts +1 -2
  423. package/dist/inspector/sketch/SketchPromptPanel.js +8 -2
  424. package/dist/inspector/sketch/SketchThumbnail.d.ts +5 -0
  425. package/dist/inspector/sketch/SketchThumbnail.js +18 -0
  426. package/dist/inspector/sketch/SketchWorkspace.d.ts +1 -2
  427. package/dist/inspector/sketch/SketchWorkspace.js +70 -37
  428. package/dist/inspector/sketch/capture.d.ts +12 -3
  429. package/dist/inspector/sketch/capture.js +31 -14
  430. package/dist/inspector/sketch/copySketch.d.ts +4 -0
  431. package/dist/inspector/sketch/copySketch.js +43 -0
  432. package/dist/inspector/sketch/drawingTools.d.ts +15 -0
  433. package/dist/inspector/sketch/drawingTools.js +46 -0
  434. package/dist/inspector/sketch/frameHeading.d.ts +3 -0
  435. package/dist/inspector/sketch/frameHeading.js +23 -0
  436. package/dist/inspector/sketch/freehand.d.ts +0 -1
  437. package/dist/inspector/sketch/freehand.js +3 -4
  438. package/dist/inspector/sketch/geometry.d.ts +2 -1
  439. package/dist/inspector/sketch/geometry.js +15 -1
  440. package/dist/inspector/sketch/handoff.js +0 -1
  441. package/dist/inspector/sketch/history.d.ts +26 -0
  442. package/dist/inspector/sketch/history.js +55 -0
  443. package/dist/inspector/sketch/interaction.d.ts +3 -5
  444. package/dist/inspector/sketch/interaction.js +8 -11
  445. package/dist/inspector/sketch/model.d.ts +33 -6
  446. package/dist/inspector/sketch/model.js +101 -63
  447. package/dist/inspector/sketch/persistence.d.ts +14 -1
  448. package/dist/inspector/sketch/persistence.js +64 -8
  449. package/dist/inspector/sketch/raster.d.ts +3 -2
  450. package/dist/inspector/sketch/raster.js +40 -20
  451. package/dist/inspector/sketch/store.d.ts +1 -1
  452. package/dist/inspector/sketch/store.js +3 -4
  453. package/dist/inspector/sketch/videoFrames.d.ts +6 -0
  454. package/dist/inspector/sketch/videoFrames.js +80 -0
  455. package/dist/inspector/spacing/projection.d.ts +0 -8
  456. package/dist/inspector/spacing/projection.js +38 -20
  457. package/dist/inspector/styleEditors/BackgroundEditor.js +3 -2
  458. package/dist/inspector/styleEditors/BorderEditor.js +30 -135
  459. package/dist/inspector/styleEditors/BorderRadiusEditor.js +8 -3
  460. package/dist/inspector/styleEditors/ChildPlacement.d.ts +12 -0
  461. package/dist/inspector/styleEditors/ChildPlacement.js +9 -0
  462. package/dist/inspector/styleEditors/FlexControls.d.ts +35 -0
  463. package/dist/inspector/styleEditors/FlexControls.js +158 -0
  464. package/dist/inspector/styleEditors/GapField.d.ts +5 -2
  465. package/dist/inspector/styleEditors/GapField.js +3 -4
  466. package/dist/inspector/styleEditors/GridChildSection.d.ts +0 -5
  467. package/dist/inspector/styleEditors/GridChildSection.js +0 -5
  468. package/dist/inspector/styleEditors/GridPicker.d.ts +1 -1
  469. package/dist/inspector/styleEditors/GridPicker.js +2 -4
  470. package/dist/inspector/styleEditors/GridSection.d.ts +10 -8
  471. package/dist/inspector/styleEditors/GridSection.js +22 -9
  472. package/dist/inspector/styleEditors/GridValueField.d.ts +1 -5
  473. package/dist/inspector/styleEditors/GridValueField.js +2 -8
  474. package/dist/inspector/styleEditors/ImageBackgroundEditor.d.ts +0 -1
  475. package/dist/inspector/styleEditors/ImageBackgroundEditor.js +1 -2
  476. package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +0 -1
  477. package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +0 -1
  478. package/dist/inspector/styleEditors/LayoutComboField.js +0 -5
  479. package/dist/inspector/styleEditors/LayoutModeRow.d.ts +14 -0
  480. package/dist/inspector/styleEditors/LayoutModeRow.js +60 -0
  481. package/dist/inspector/styleEditors/LayoutSection.d.ts +2 -2
  482. package/dist/inspector/styleEditors/LayoutSection.js +30 -356
  483. package/dist/inspector/styleEditors/OpacityEditor.js +7 -5
  484. package/dist/inspector/styleEditors/PositionControls.d.ts +18 -0
  485. package/dist/inspector/styleEditors/PositionControls.js +16 -0
  486. package/dist/inspector/styleEditors/SizeSection.d.ts +18 -0
  487. package/dist/inspector/styleEditors/SizeSection.js +71 -0
  488. package/dist/inspector/styleEditors/{SpacingBox.d.ts → SpacingField.d.ts} +3 -10
  489. package/dist/inspector/styleEditors/{SpacingBox.js → SpacingField.js} +15 -29
  490. package/dist/inspector/styleEditors/Typography.js +2 -4
  491. package/dist/inspector/styleEditors/borderModel.d.ts +36 -0
  492. package/dist/inspector/styleEditors/borderModel.js +105 -0
  493. package/dist/inspector/styleEditors/completeCssValue.d.ts +1 -5
  494. package/dist/inspector/styleEditors/completeCssValue.js +3 -13
  495. package/dist/inspector/styleEditors/fieldValue.d.ts +20 -0
  496. package/dist/inspector/styleEditors/fieldValue.js +26 -0
  497. package/dist/inspector/styleEditors/gradientValue.d.ts +1 -1
  498. package/dist/inspector/styleEditors/gradientValue.js +3 -2
  499. package/dist/inspector/styleEditors/gridChildModel.d.ts +7 -47
  500. package/dist/inspector/styleEditors/gridChildModel.js +6 -37
  501. package/dist/inspector/styleEditors/hiddenSizeOverrides.d.ts +5 -0
  502. package/dist/inspector/styleEditors/hiddenSizeOverrides.js +42 -0
  503. package/dist/inspector/styleEditors/inlineAuthored.d.ts +1 -8
  504. package/dist/inspector/styleEditors/inlineAuthored.js +3 -17
  505. package/dist/inspector/styleEditors/layoutMode.d.ts +15 -0
  506. package/dist/inspector/styleEditors/layoutMode.js +33 -0
  507. package/dist/inspector/styleEditors/layoutPreviewState.d.ts +0 -1
  508. package/dist/inspector/styleEditors/layoutPreviewState.js +0 -1
  509. package/dist/inspector/styleEditors/layoutValue.d.ts +2 -8
  510. package/dist/inspector/styleEditors/layoutValue.js +6 -15
  511. package/dist/inspector/styleEditors/nudgeValue.d.ts +1 -13
  512. package/dist/inspector/styleEditors/nudgeValue.js +1 -13
  513. package/dist/inspector/styleEditors/rowLookup.d.ts +1 -5
  514. package/dist/inspector/styleEditors/rowLookup.js +1 -5
  515. package/dist/inspector/styleEditors/stringRecord.d.ts +1 -2
  516. package/dist/inspector/styleEditors/stylePresence.d.ts +0 -2
  517. package/dist/inspector/styleEditors/stylePresence.js +1 -4
  518. package/dist/inspector/styleEditors/textRelevance.d.ts +1 -1
  519. package/dist/inspector/styleEditors/textRelevance.js +1 -1
  520. package/dist/inspector/styleEditors/useFieldVisibility.js +1 -2
  521. package/dist/inspector/styleEditors/useLayoutContext.d.ts +13 -0
  522. package/dist/inspector/styleEditors/useLayoutContext.js +53 -0
  523. package/dist/inspector/styleEditors/valuePolicy.d.ts +1 -5
  524. package/dist/inspector/styleEditors/valuePolicy.js +0 -1
  525. package/dist/inspector/testing.d.ts +1 -4
  526. package/dist/inspector/testing.js +1 -4
  527. package/dist/inspector/tokens/TokenChip.d.ts +1 -4
  528. package/dist/inspector/tokens/TokenChip.js +1 -4
  529. package/dist/inspector/tokens/TokenField.d.ts +4 -3
  530. package/dist/inspector/tokens/TokenField.js +53 -32
  531. package/dist/inspector/tokens/TokensPanel.js +2 -1
  532. package/dist/inspector/tokens/catalog.d.ts +2 -10
  533. package/dist/inspector/tokens/catalog.js +5 -12
  534. package/dist/inspector/tokens/dragPointerLock.d.ts +0 -1
  535. package/dist/inspector/tokens/dragPointerLock.js +2 -3
  536. package/dist/inspector/tokens/editActions.d.ts +4 -4
  537. package/dist/inspector/tokens/editActions.js +11 -7
  538. package/dist/inspector/tokens/resolution/cascade.d.ts +1 -5
  539. package/dist/inspector/tokens/resolution/cascade.js +1 -5
  540. package/dist/inspector/tokens/resolution/containerQueryEvaluator.d.ts +11 -0
  541. package/dist/inspector/tokens/resolution/containerQueryEvaluator.js +82 -0
  542. package/dist/inspector/tokens/resolution/cssomCollector.d.ts +4 -19
  543. package/dist/inspector/tokens/resolution/cssomCollector.js +186 -122
  544. package/dist/inspector/tokens/resolution/nestedSelectors.d.ts +2 -0
  545. package/dist/inspector/tokens/resolution/nestedSelectors.js +63 -0
  546. package/dist/inspector/tokens/resolution/ruleMatching.d.ts +4 -14
  547. package/dist/inspector/tokens/resolution/ruleMatching.js +136 -63
  548. package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +3 -14
  549. package/dist/inspector/tokens/resolution/selectorSemantics.js +12 -27
  550. package/dist/inspector/tokens/resolution.d.ts +11 -27
  551. package/dist/inspector/tokens/resolution.js +105 -181
  552. package/dist/inspector/tokens/tokenAvailability.d.ts +2 -14
  553. package/dist/inspector/tokens/tokenAvailability.js +6 -38
  554. package/dist/inspector/tokens/tokenEdits.d.ts +1 -1
  555. package/dist/inspector/tokens/tokenEdits.js +1 -1
  556. package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +0 -1
  557. package/dist/inspector/tokens/valueSemanticsAdapter.js +18 -2
  558. package/dist/inspector/ui/AtRuleContext.d.ts +5 -5
  559. package/dist/inspector/ui/AtRuleContext.js +8 -6
  560. package/dist/inspector/ui/ControlSurface.d.ts +0 -4
  561. package/dist/inspector/ui/Disclosure.d.ts +0 -5
  562. package/dist/inspector/ui/Disclosure.js +0 -4
  563. package/dist/inspector/ui/InlineStyleWarning.d.ts +0 -1
  564. package/dist/inspector/ui/InlineStyleWarning.js +2 -2
  565. package/dist/inspector/ui/InspectorPopover.d.ts +1 -5
  566. package/dist/inspector/ui/InspectorPopover.js +1 -5
  567. package/dist/inspector/ui/InspectorStyle.d.ts +8 -0
  568. package/dist/inspector/ui/InspectorStyle.js +26 -0
  569. package/dist/inspector/ui/PopoverListbox.d.ts +2 -1
  570. package/dist/inspector/ui/PopoverListbox.js +3 -3
  571. package/dist/inspector/ui/SegmentedControl.d.ts +4 -4
  572. package/dist/inspector/ui/SegmentedControl.js +6 -4
  573. package/dist/inspector/ui/SideValuesField.d.ts +1 -6
  574. package/dist/inspector/ui/SideValuesField.js +2 -8
  575. package/dist/inspector/ui/Toast.d.ts +10 -0
  576. package/dist/inspector/ui/Toast.js +26 -0
  577. package/dist/inspector/ui/assets/canvasIllustration.d.ts +2 -0
  578. package/dist/inspector/ui/assets/canvasIllustration.js +21 -0
  579. package/dist/inspector/ui/assets/gridIllustration.d.ts +2 -0
  580. package/dist/inspector/ui/assets/{grid.svg → gridIllustration.js} +3 -2
  581. package/dist/inspector/ui/atRuleSegments.d.ts +13 -0
  582. package/dist/inspector/ui/atRuleSegments.js +34 -0
  583. package/dist/inspector/ui/classNames.d.ts +0 -1
  584. package/dist/inspector/ui/classNames.js +0 -1
  585. package/dist/inspector/ui/customCursors.d.ts +11 -0
  586. package/dist/inspector/ui/customCursors.js +29 -7
  587. package/dist/inspector/ui/styles.js +25 -25
  588. package/dist/inspector/workspace/commands.js +1 -2
  589. package/dist/inspector/workspace/controller.js +20 -2
  590. package/dist/inspector/workspace/handoff.d.ts +1 -5
  591. package/dist/inspector/workspace/handoff.js +4 -7
  592. package/dist/inspector/workspace/sentItems.d.ts +3 -6
  593. package/dist/inspector/workspace/sentItems.js +6 -24
  594. package/dist/inspector/workspace/timeline.d.ts +28 -11
  595. package/dist/inspector/workspace/timeline.js +117 -96
  596. package/dist/internal/agent-protocol.d.ts +53 -38
  597. package/dist/internal/agent-protocol.js +151 -42
  598. package/dist/nudge-ui.mjs +155 -92
  599. package/dist/project/artifacts.js +24 -21
  600. package/dist/project/files.d.ts +0 -1
  601. package/dist/project/files.js +2 -9
  602. package/dist/project/identity.d.ts +1 -5
  603. package/dist/project/identity.js +1 -5
  604. package/dist/project/mcpPackage.d.ts +3 -0
  605. package/dist/project/mcpPackage.js +55 -0
  606. package/dist/project/pathPolicy.d.ts +1 -6
  607. package/dist/project/pathPolicy.js +1 -6
  608. package/dist/project/tokens.d.ts +2 -12
  609. package/dist/project/tokens.js +4 -15
  610. package/dist/transport/editor.d.ts +1 -12
  611. package/dist/transport/editor.js +2 -13
  612. package/dist/transport/index.d.ts +0 -5
  613. package/dist/transport/index.js +0 -5
  614. package/dist/transport/routes.d.ts +0 -5
  615. package/dist/transport/routes.js +0 -5
  616. package/package.json +16 -5
  617. package/dist/inspector/canvas/measurementProjection.d.ts +0 -8
  618. package/dist/inspector/canvas/measurementProjection.js +0 -16
  619. package/dist/inspector/changes/changesLog.d.ts +0 -49
  620. package/dist/inspector/changes/changesLog.js +0 -255
  621. package/dist/inspector/changes/draftChanges.d.ts +0 -58
  622. package/dist/inspector/changes/draftChanges.js +0 -304
  623. package/dist/inspector/conformance/projection.d.ts +0 -2
  624. package/dist/inspector/conformance/projection.js +0 -3
  625. package/dist/inspector/inline-text/textChangeBoundary.d.ts +0 -6
  626. package/dist/inspector/inline-text/textChangeBoundary.js +0 -1
  627. package/dist/inspector/overlay/InspectorOverlay.d.ts +0 -5
  628. package/dist/inspector/overlay/InspectorOverlay.js +0 -332
  629. package/dist/inspector/overlay/elementSelector.d.ts +0 -1
  630. package/dist/inspector/overlay/elementSelector.js +0 -111
  631. package/dist/inspector/sketch/SketchChanges.d.ts +0 -2
  632. package/dist/inspector/sketch/SketchChanges.js +0 -72
  633. package/dist/inspector/sketch/SketchEntryButton.d.ts +0 -4
  634. package/dist/inspector/sketch/SketchEntryButton.js +0 -11
  635. package/dist/inspector/sketch/SketchLayersPanel.d.ts +0 -2
  636. package/dist/inspector/sketch/SketchLayersPanel.js +0 -71
  637. package/dist/inspector/styleEditors/InsetSection.d.ts +0 -15
  638. package/dist/inspector/styleEditors/InsetSection.js +0 -15
  639. package/dist/inspector/styleEditors/PositionInsets.d.ts +0 -15
  640. package/dist/inspector/styleEditors/PositionInsets.js +0 -12
  641. package/dist/inspector/tokens/TokenDropdown.d.ts +0 -13
  642. package/dist/inspector/tokens/TokenDropdown.js +0 -59
@@ -18,10 +18,5 @@ export interface McpConnectionDialogProps extends McpConnectionContentProps {
18
18
  }
19
19
  /** Renders the MCP setup and pairing flow without owning a dialog surface. */
20
20
  export declare function McpConnectionContent({ projectId, origin, snapshot, onConnect, onTakeOver, onDisconnect, onCheckAgain, }: McpConnectionContentProps): ReactElement;
21
- /**
22
- * Explains and controls the project-scoped MCP companion connection.
23
- *
24
- * This compatibility wrapper keeps the existing standalone MCP surface while
25
- * the shared content is also embedded in the general settings modal.
26
- */
21
+ /** Compatibility wrapper: the shared content is also embedded in the general settings modal. */
27
22
  export declare function McpConnectionDialog({ open, projectId, origin, snapshot, onOpenChange, onConnect, onTakeOver, onDisconnect, onCheckAgain, }: McpConnectionDialogProps): ReactElement;
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { useMemo, useRef, useState } from "react";
3
3
  import { Dialog } from "@base-ui/react/dialog";
4
4
  import { IconCheck, IconCopy, IconPlugConnected, IconRefresh, IconUnlink, IconX, } from "@tabler/icons-react";
5
- import { getAgentConnectionStatus } from "./connectionStatus.js";
5
+ import { useAgentConnectionStatus } from "./connectionStatus.js";
6
6
  import { copyToClipboard } from "../prompt/copyToClipboard.js";
7
7
  import { Button } from "../ui/Button.js";
8
8
  import { Disclosure } from "../ui/Disclosure.js";
@@ -35,20 +35,24 @@ export function McpConnectionContent({ projectId, origin, snapshot, onConnect, o
35
35
  "Start the application normally. Reload the agent if needed, then listen to Nudge.",
36
36
  ].join("\n"), [setupCommand]);
37
37
  const doctorCommand = "nudge-ui agent doctor";
38
- const status = getAgentConnectionStatus(snapshot);
38
+ const status = useAgentConnectionStatus(snapshot);
39
39
  const showConnectionStatus = status.kind !== "not-found"
40
40
  || Boolean(snapshot.error || checkError || snapshot.request?.summary || snapshot.request?.error);
41
41
  const canConnect = snapshot.companionReachable
42
42
  && !snapshot.paired
43
43
  && !snapshot.pairedElsewhere
44
44
  && snapshot.state !== "pairing"
45
+ && snapshot.state !== "delivered"
45
46
  && snapshot.state !== "working"
47
+ && snapshot.request?.status !== "delivered"
46
48
  && snapshot.request?.status !== "working";
47
- const canDisconnect = snapshot.paired || snapshot.request?.status === "working";
49
+ const canDisconnect = snapshot.paired || snapshot.request?.status === "working" || snapshot.request?.status === "delivered";
48
50
  const canTakeOver = snapshot.companionReachable
49
51
  && snapshot.pairedElsewhere
50
52
  && snapshot.state !== "pairing"
53
+ && snapshot.state !== "delivered"
51
54
  && snapshot.state !== "working"
55
+ && snapshot.request?.status !== "delivered"
52
56
  && snapshot.request?.status !== "working";
53
57
  async function handleCheckAgain() {
54
58
  if (checking)
@@ -100,12 +104,7 @@ export function McpConnectionContent({ projectId, origin, snapshot, onConnect, o
100
104
  }
101
105
  return (_jsxs(_Fragment, { children: [showConnectionStatus ? (_jsxs(StatusCallout, { className: "mcp-connection__status", tone: status.tone, "data-test": "mcp-connection-status", children: [_jsx("span", { className: "mcp-connection__status-label", role: "status", children: status.label }), snapshot.error ? (_jsx("span", { className: "mcp-connection__status-detail", children: snapshot.error })) : null, checkError ? _jsx("span", { role: "alert", children: checkError }) : null, snapshot.request?.summary ? (_jsx("span", { className: "mcp-connection__status-detail", children: snapshot.request.summary })) : null, snapshot.request?.error ? (_jsx("span", { className: "mcp-connection__status-detail", children: snapshot.request.error })) : null] })) : null, _jsxs("ol", { className: "mcp-connection__timeline", "data-test": "mcp-connection-timeline", children: [_jsxs(TimelineStep, { number: 1, complete: snapshot.companionReachable || snapshot.listenerActive || snapshot.request !== null, title: "Set up agent", children: [_jsx("p", { className: "mcp-connection__copy", children: "Agent prompt" }), _jsxs("div", { className: "mcp-connection__command-block", children: [_jsx(IconButton, { className: "mcp-connection__copy-button", variant: "quiet", size: "compact", label: copiedPrompt ? "Copied" : "Copy setup instructions", "data-test": "mcp-copy-setup-prompt", onClick: () => void handleCopyPrompt(), children: copiedPrompt ? _jsx(IconCheck, { size: 16, "aria-hidden": "true" }) : _jsx(IconCopy, { size: 16, "aria-hidden": "true" }) }), _jsx("pre", { className: "mcp-connection__command", children: _jsx("code", { "data-test": "mcp-setup-prompt", children: setupPrompt }) })] }), _jsx("p", { className: "mcp-connection__copy", children: "Or, terminal command" }), _jsxs("div", { className: "mcp-connection__command-block", children: [_jsx(IconButton, { className: "mcp-connection__copy-button", variant: "quiet", size: "compact", label: copiedCommand ? "Copied" : "Copy command", "data-test": "mcp-copy-command", onClick: () => void handleCopyCommand(), children: copiedCommand ? _jsx(IconCheck, { size: 16, "aria-hidden": "true" }) : _jsx(IconCopy, { size: 16, "aria-hidden": "true" }) }), _jsx("pre", { className: "mcp-connection__command", children: _jsx("code", { "data-test": "mcp-setup-command", children: setupCommand }) })] })] }), _jsx(TimelineStep, { number: 2, complete: snapshot.listenerActive, title: "Tell agent to listen for instructions", children: _jsx("p", { className: "mcp-connection__copy", children: "Tell your coding agent: \u201CListen to Nudge.\u201D" }) })] }), _jsxs(Disclosure, { className: "mcp-connection__details", title: "Troubleshooting", defaultOpen: true, children: [_jsx("p", { className: "mcp-connection__copy", children: "To diagnose setup" }), _jsxs("div", { className: "mcp-connection__command-block", children: [_jsx(IconButton, { className: "mcp-connection__copy-button", variant: "quiet", size: "compact", label: copiedDoctor ? "Copied" : "Copy diagnostic command", "data-test": "mcp-copy-doctor", onClick: () => void handleCopyDoctor(), children: copiedDoctor ? _jsx(IconCheck, { size: 16, "aria-hidden": "true" }) : _jsx(IconCopy, { size: 16, "aria-hidden": "true" }) }), _jsx("pre", { className: "mcp-connection__command", children: _jsx("code", { children: doctorCommand }) })] }), _jsxs("dl", { className: "mcp-connection__diagnostics", "data-test": "mcp-connection-diagnostics", children: [_jsxs("div", { className: "mcp-connection__diagnostic", children: [_jsx("dt", { children: "Project ID" }), _jsx("dd", { "data-test": "mcp-project-id", children: projectId })] }), _jsxs("div", { className: "mcp-connection__diagnostic", children: [_jsx("dt", { children: "Origin" }), _jsx("dd", { "data-test": "mcp-origin", children: origin })] })] }), _jsxs("div", { className: "mcp-connection__actions", children: [canTakeOver ? (_jsxs(Button, { variant: "primary", "data-test": "mcp-takeover", type: "button", onClick: () => void onTakeOver(), children: [_jsx(IconPlugConnected, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }), "Take over"] })) : null, canConnect ? (_jsxs(Button, { variant: "primary", "data-test": "mcp-connect", type: "button", onClick: () => void onConnect(), children: [_jsx(IconPlugConnected, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }), "Connect"] })) : null, _jsxs(Button, { variant: "quiet", "data-test": "mcp-check-again", type: "button", disabled: checking || snapshot.state === "disabled" || snapshot.state === "pairing", onClick: () => void handleCheckAgain(), children: [_jsx(IconRefresh, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }), checking ? "Checking…" : "Refresh connection"] }), canDisconnect ? (_jsxs(Button, { variant: "danger", "data-test": "mcp-disconnect", type: "button", onClick: onDisconnect, children: [_jsx(IconUnlink, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }), snapshot.paired ? "Disconnect" : "Forget connection"] })) : null] })] }), copyError ? _jsx("p", { className: "mcp-connection__error", role: "alert", children: copyError }) : null] }));
102
106
  }
103
- /**
104
- * Explains and controls the project-scoped MCP companion connection.
105
- *
106
- * This compatibility wrapper keeps the existing standalone MCP surface while
107
- * the shared content is also embedded in the general settings modal.
108
- */
107
+ /** Compatibility wrapper: the shared content is also embedded in the general settings modal. */
109
108
  export function McpConnectionDialog({ open, projectId, origin, snapshot, onOpenChange, onConnect, onTakeOver, onDisconnect, onCheckAgain, }) {
110
109
  const closeRef = useRef(null);
111
110
  return (_jsx(Dialog.Root, { open: open, onOpenChange: onOpenChange, children: _jsxs(Dialog.Portal, { container: portalContainer(), children: [_jsx(Dialog.Backdrop, { className: "mcp-connection__backdrop", "data-test": "mcp-connection-backdrop" }), _jsxs(Dialog.Popup, { className: "mcp-connection__popup", "data-test": "mcp-connection-dialog", initialFocus: closeRef, children: [_jsxs("div", { className: "mcp-connection__header", children: [_jsxs("div", { children: [_jsx(Dialog.Title, { className: "mcp-connection__title", children: "Connect MCP" }), _jsx(Dialog.Description, { className: "mcp-connection__description", children: "Set up your coding agent once, then ask it to listen to Nudge in this worktree." })] }), _jsx(Dialog.Close, { ref: closeRef, className: "icon-button icon-button--quiet mcp-connection__close", "aria-label": "Close MCP connection", "data-test": "mcp-connection-close", type: "button", children: _jsx(IconX, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }) })] }), _jsx(McpConnectionContent, { projectId: projectId, origin: origin, snapshot: snapshot, onConnect: onConnect, onTakeOver: onTakeOver, onDisconnect: onDisconnect, onCheckAgain: onCheckAgain })] })] }) }));
@@ -9,10 +9,10 @@ export interface AgentActivitySnapshot {
9
9
  readonly target?: DraftTarget;
10
10
  readonly files: readonly ActivityFile[];
11
11
  }
12
- /** Pins submitted frames before dispatch. Activity never selects or edits a draft. */
12
+ /** Pins submitted frames before dispatch; activity never selects or edits a draft. */
13
13
  export declare function beginActivityDispatch(projectId: string, dispatchId: string, targets: readonly string[], target?: DraftTarget): void;
14
14
  /** Dispatch and status are the only authority for the layer's lifetime. */
15
- export declare function synchronizeAgentActivity(projectId: string, requestId: string | undefined, working: boolean, dispatchId?: string): void;
15
+ export declare function synchronizeAgentActivity(projectId: string, requestId: string | undefined, working: boolean, dispatchId?: string, awaitingAcknowledgment?: boolean): void;
16
16
  export declare function reportAgentActivity(projectId: string, activity: AgentActivity): void;
17
17
  export declare function getAgentActivity(projectId: string): AgentActivitySnapshot;
18
18
  export declare function useAgentActivity(projectId: string): AgentActivitySnapshot;
@@ -14,18 +14,19 @@ function publish(state, snapshot) {
14
14
  for (const listener of state.listeners)
15
15
  listener();
16
16
  }
17
- /** Pins submitted frames before dispatch. Activity never selects or edits a draft. */
17
+ /** Pins submitted frames before dispatch; activity never selects or edits a draft. */
18
18
  export function beginActivityDispatch(projectId, dispatchId, targets, target) {
19
19
  project(projectId).dispatch = { id: dispatchId, targets: [...targets], target };
20
20
  }
21
21
  /** Dispatch and status are the only authority for the layer's lifetime. */
22
- export function synchronizeAgentActivity(projectId, requestId, working, dispatchId) {
22
+ export function synchronizeAgentActivity(projectId, requestId, working, dispatchId, awaitingAcknowledgment = false) {
23
23
  const state = project(projectId);
24
24
  if (!working || !requestId) {
25
25
  if (state.timer)
26
26
  clearTimeout(state.timer);
27
27
  state.timer = undefined;
28
- state.dispatch = undefined;
28
+ if (!awaitingAcknowledgment)
29
+ state.dispatch = undefined;
29
30
  if (state.snapshot !== EMPTY)
30
31
  publish(state, EMPTY);
31
32
  return;
@@ -1,5 +1,5 @@
1
1
  import { type AgentBridgeTransport, type AgentClientOptions, type AgentSketchAttachment, type AgentSketchMetadata, type AgentRequestStatus, type AgentStatusSnapshot, type PromptDispatchResponse } from "./protocol.js";
2
- export type AgentClientState = "disabled" | "disconnected" | "available" | "pairing" | "connected" | "working" | "completed" | "failed" | "interrupted";
2
+ export type AgentClientState = "disabled" | "disconnected" | "available" | "pairing" | "connected" | "delivered" | "working" | "completed" | "failed" | "interrupted";
3
3
  export interface AgentRequestSnapshot {
4
4
  readonly requestId: string;
5
5
  readonly changeRevision?: number;
@@ -16,23 +16,14 @@ export interface AgentClientSnapshot {
16
16
  readonly connection: AgentStatusSnapshot["connection"];
17
17
  readonly listenerActive: boolean;
18
18
  readonly agentClientName?: string;
19
- /** Whether the last valid discovery response came from the local companion. */
20
19
  readonly companionReachable: boolean;
21
20
  readonly paired: boolean;
22
- /** Whether another browser currently owns this project's pairing. */
23
21
  readonly pairedElsewhere: boolean;
24
22
  readonly request: AgentRequestSnapshot | null;
25
23
  readonly error?: string;
26
24
  }
27
- /** Creates a stable numeric revision for one prompt snapshot. */
28
25
  export declare function createPromptRevision(changes: readonly unknown[], structuralChanges?: readonly unknown[], sketches?: readonly unknown[]): number;
29
- /**
30
- * Browser-side companion client.
31
- *
32
- * Discovery is deliberately started by `start()`, which is guarded by the
33
- * dev-only flag. Constructing this class never opens a socket or performs a
34
- * network request, so importing the inspector remains inert in production.
35
- */
26
+ /** Construction never touches the network; discovery starts only from the dev-flag-guarded start(). */
36
27
  export declare class AgentClient {
37
28
  readonly projectId: string;
38
29
  readonly origin: string;
@@ -60,35 +51,23 @@ export declare class AgentClient {
60
51
  private readonly autoConnect;
61
52
  private autoConnectSuppressed;
62
53
  constructor(options: AgentClientOptions);
63
- /** Installs the controller callback used to acknowledge Canvas commands. */
64
54
  setCanvasCommandHandler(handler: AgentClientOptions["canvasCommandHandler"]): void;
65
55
  getSnapshot: () => AgentClientSnapshot;
66
56
  subscribe: (listener: () => void) => (() => void);
67
- /** Starts loopback discovery. Calling it repeatedly is idempotent. */
68
57
  start(): void;
69
- /** Stops discovery and closes the browser event stream. */
70
58
  stop(): void;
71
59
  private restoreOrDiscover;
72
- /** Runs an immediate authenticated restore or companion discovery probe. */
73
60
  checkConnection(): Promise<void>;
74
- /** Triggers a new discovery probe after a connection loss. */
75
61
  reconnect(): void;
76
- /** Pairs the browser with a reachable companion, including an idle agent. */
77
62
  connect(): Promise<boolean>;
78
- /** Replaces an existing browser pairing after an explicit user action. */
79
63
  takeOver(): Promise<boolean>;
80
64
  private pairWith;
81
65
  private openEvents;
82
- /**
83
- * Dispatches one immutable prompt revision. The request enters `working`
84
- * synchronously, before the transport promise resolves, so the UI cannot
85
- * issue a second prompt while the first one is in flight.
86
- */
66
+ /** Enters `delivered` synchronously so the UI cannot dispatch a second prompt while the first is in flight. */
87
67
  dispatchPrompt(prompt: string, changeRevision?: number, options?: {
88
68
  readonly clientDispatchId?: string;
89
69
  readonly attachments?: readonly AgentSketchAttachment[];
90
70
  }): Promise<PromptDispatchResponse | null>;
91
- /** Interrupts local request state and asks the companion to revoke pairing. */
92
71
  disconnect(reason?: string): void;
93
72
  private discover;
94
73
  private scheduleDiscovery;
@@ -103,11 +82,8 @@ export declare class AgentClient {
103
82
  private deriveState;
104
83
  private publish;
105
84
  }
106
- /** Sets a host/test transport for subsequently created project clients. */
107
85
  export declare function configureAgentBridgeTransport(transport: AgentBridgeTransport | undefined): void;
108
- /** Clears cached clients and their active streams. */
109
86
  export declare function resetAgentClients(): void;
110
87
  export declare function createAgentClient(options: AgentClientOptions): AgentClient;
111
88
  export declare function getAgentClient(projectId: string, options?: Omit<AgentClientOptions, "projectId">): AgentClient;
112
- /** React hook used by the inspector handoff control. */
113
89
  export declare function useAgentClient(projectId: string, suppliedClient?: AgentClient): AgentClientSnapshot;
@@ -3,7 +3,7 @@ import { useEffect, useMemo, useSyncExternalStore } from "react";
3
3
  import { isNudgeUiDev } from "../runtime/devFlag.js";
4
4
  import { isDemoRuntime } from "../runtime/runtimeConfig.js";
5
5
  import { AgentBridgeHttpError, HttpAgentBridgeTransport, shouldAutoConnectAgentBridge, } from "./httpTransport.js";
6
- import { AGENT_PROTOCOL_VERSION, } from "./protocol.js";
6
+ import { AGENT_PROTOCOL_VERSION, deriveConnectionState, } from "./protocol.js";
7
7
  const DISABLED_SNAPSHOT = Object.freeze({
8
8
  state: "disabled",
9
9
  connection: "offline",
@@ -57,8 +57,7 @@ function writeStoredSession(session) {
57
57
  localStorage.setItem(sessionStorageKey(session.projectId), JSON.stringify(session));
58
58
  }
59
59
  catch {
60
- // Storage can be disabled by browser privacy settings. The in-memory
61
- // pairing remains valid for this document in that case.
60
+ // Storage can be disabled by browser privacy settings; the in-memory pairing stays valid.
62
61
  }
63
62
  }
64
63
  function clearStoredSession(projectId) {
@@ -92,24 +91,11 @@ function setAutoConnectDisabled(projectId, disabled) {
92
91
  localStorage.removeItem(key);
93
92
  }
94
93
  catch {
95
- // Privacy settings can disable storage. The current document still keeps
96
- // the explicit disconnect preference in memory.
94
+ // Storage can be disabled; the disconnect preference stays in memory for this document.
97
95
  }
98
96
  }
99
- function statusForConnection(status) {
100
- if (status.connection === "working" || status.request?.status === "working")
101
- return "working";
102
- if (status.paired)
103
- return "paired";
104
- if (status.listenerActive)
105
- return "listening";
106
- return "offline";
107
- }
108
97
  function hashRevision(value) {
109
- // FNV-1a is sufficient here: the revision is an opaque, bounded identity
110
- // used to prevent a later browser edit from being mistaken for the sent
111
- // canonical change set. Keep it in the safe-integer range accepted by the
112
- // companion protocol.
98
+ // Opaque bounded identity, kept in the safe-integer range the companion protocol accepts.
113
99
  let hash = 2_166_136_261;
114
100
  for (let index = 0; index < value.length; index += 1) {
115
101
  hash ^= value.charCodeAt(index);
@@ -117,7 +103,6 @@ function hashRevision(value) {
117
103
  }
118
104
  return (hash >>> 0) & 0x7fff_ffff;
119
105
  }
120
- /** Creates a stable numeric revision for one prompt snapshot. */
121
106
  export function createPromptRevision(changes, structuralChanges = [], sketches = []) {
122
107
  let serialized;
123
108
  try {
@@ -128,13 +113,7 @@ export function createPromptRevision(changes, structuralChanges = [], sketches =
128
113
  }
129
114
  return hashRevision(serialized);
130
115
  }
131
- /**
132
- * Browser-side companion client.
133
- *
134
- * Discovery is deliberately started by `start()`, which is guarded by the
135
- * dev-only flag. Constructing this class never opens a socket or performs a
136
- * network request, so importing the inspector remains inert in production.
137
- */
116
+ /** Construction never touches the network; discovery starts only from the dev-flag-guarded start(). */
138
117
  export class AgentClient {
139
118
  projectId;
140
119
  origin;
@@ -169,12 +148,10 @@ export class AgentClient {
169
148
  this.canvasCommandHandler = options.canvasCommandHandler;
170
149
  this.autoConnect = options.autoConnect ?? shouldAutoConnectAgentBridge();
171
150
  this.autoConnectSuppressed = this.autoConnect && autoConnectDisabled(this.projectId);
172
- // The public demo renders the real inspector but intentionally keeps the
173
- // local MCP/agent bridge inert.
151
+ // The public demo renders the real inspector but intentionally keeps the local MCP/agent bridge inert.
174
152
  this.enabled = isNudgeUiDev() && !isDemoRuntime();
175
153
  this.snapshot = this.enabled ? this.makeSnapshot() : DISABLED_SNAPSHOT;
176
154
  }
177
- /** Installs the controller callback used to acknowledge Canvas commands. */
178
155
  setCanvasCommandHandler(handler) {
179
156
  this.canvasCommandHandler = handler;
180
157
  }
@@ -183,14 +160,12 @@ export class AgentClient {
183
160
  this.listeners.add(listener);
184
161
  return () => this.listeners.delete(listener);
185
162
  };
186
- /** Starts loopback discovery. Calling it repeatedly is idempotent. */
187
163
  start() {
188
164
  if (!this.enabled || this.started)
189
165
  return;
190
166
  this.started = true;
191
167
  void this.restoreOrDiscover();
192
168
  }
193
- /** Stops discovery and closes the browser event stream. */
194
169
  stop() {
195
170
  if (!this.started && !this.eventSubscription)
196
171
  return;
@@ -207,10 +182,7 @@ export class AgentClient {
207
182
  this.dispatchAbort = null;
208
183
  this.eventSubscription?.close();
209
184
  this.eventSubscription = null;
210
- // `stop` is used by React effect cleanup and page remounts. Keep the
211
- // request and ephemeral token in memory/storage so a still-running
212
- // companion can be resumed; explicit `disconnect()` is the revocation
213
- // and interruption path.
185
+ // Keep the request and token so a remount can resume; disconnect() is the revocation path.
214
186
  this.connection = "offline";
215
187
  this.listenerActive = false;
216
188
  this.companionReachable = false;
@@ -249,8 +221,7 @@ export class AgentClient {
249
221
  catch (error) {
250
222
  if (abortController.signal.aborted || !this.started)
251
223
  return;
252
- // A stale or revoked token is not a connection error. Clearing it
253
- // lets the normal listener discovery path offer a fresh pairing.
224
+ // A stale or revoked token is not a connection error; clearing it lets discovery offer a fresh pairing.
254
225
  clearStoredSession(this.projectId);
255
226
  this.sessionToken = null;
256
227
  this.resetForDiscovery();
@@ -263,7 +234,6 @@ export class AgentClient {
263
234
  }
264
235
  await this.discover();
265
236
  }
266
- /** Runs an immediate authenticated restore or companion discovery probe. */
267
237
  async checkConnection() {
268
238
  if (!this.enabled)
269
239
  return;
@@ -279,7 +249,6 @@ export class AgentClient {
279
249
  this.publish();
280
250
  await this.restoreOrDiscover();
281
251
  }
282
- /** Triggers a new discovery probe after a connection loss. */
283
252
  reconnect() {
284
253
  if (!this.enabled)
285
254
  return;
@@ -301,11 +270,9 @@ export class AgentClient {
301
270
  this.publish();
302
271
  void this.restoreOrDiscover();
303
272
  }
304
- /** Pairs the browser with a reachable companion, including an idle agent. */
305
273
  async connect() {
306
274
  return this.pairWith((request, signal) => this.transport.pair(request, signal));
307
275
  }
308
- /** Replaces an existing browser pairing after an explicit user action. */
309
276
  async takeOver() {
310
277
  if (!this.transport.takeOver)
311
278
  return false;
@@ -316,7 +283,7 @@ export class AgentClient {
316
283
  return false;
317
284
  this.autoConnectSuppressed = false;
318
285
  setAutoConnectDisabled(this.projectId, false);
319
- if (this.connection === "working" || this.activeRequest?.status === "working")
286
+ if (this.connection === "working" || this.connection === "delivered" || this.activeRequest?.status === "working" || this.activeRequest?.status === "delivered")
320
287
  return false;
321
288
  const idleListenerActive = this.listenerActive;
322
289
  const idleCompanionReachable = this.companionReachable;
@@ -397,15 +364,11 @@ export class AgentClient {
397
364
  this.handleDisconnect(errorMessage(error, "The agent event stream could not be opened."));
398
365
  }
399
366
  }
400
- /**
401
- * Dispatches one immutable prompt revision. The request enters `working`
402
- * synchronously, before the transport promise resolves, so the UI cannot
403
- * issue a second prompt while the first one is in flight.
404
- */
367
+ /** Enters `delivered` synchronously so the UI cannot dispatch a second prompt while the first is in flight. */
405
368
  async dispatchPrompt(prompt, changeRevision, options = {}) {
406
369
  if (!this.enabled || !this.started || !this.paired || !this.listenerActive || !this.sessionToken)
407
370
  return null;
408
- if (!prompt || this.activeRequest?.status === "working")
371
+ if (!prompt || this.activeRequest?.status === "working" || this.activeRequest?.status === "delivered")
409
372
  return null;
410
373
  const localRequestId = randomId("request");
411
374
  const request = {
@@ -424,9 +387,9 @@ export class AgentClient {
424
387
  ...(changeRevision === undefined ? {} : { changeRevision }),
425
388
  ...(options.clientDispatchId === undefined ? {} : { clientDispatchId: options.clientDispatchId }),
426
389
  ...(sketches === undefined ? {} : { sketches }),
427
- status: "working",
390
+ status: "delivered",
428
391
  };
429
- this.connection = "working";
392
+ this.connection = "delivered";
430
393
  this.lastError = undefined;
431
394
  this.publish();
432
395
  const abortController = new AbortController();
@@ -445,8 +408,9 @@ export class AgentClient {
445
408
  }
446
409
  : this.activeRequest;
447
410
  }
448
- if (response?.status && response.status !== "working") {
411
+ if (response?.status) {
449
412
  this.applyRequestStatus(response.status, response.request.requestId);
413
+ this.publish();
450
414
  }
451
415
  return response ?? null;
452
416
  }
@@ -464,14 +428,13 @@ export class AgentClient {
464
428
  this.dispatchAbort = null;
465
429
  }
466
430
  }
467
- /** Interrupts local request state and asks the companion to revoke pairing. */
468
431
  disconnect(reason = "browser_disconnected") {
469
432
  this.autoConnectSuppressed = true;
470
433
  if (this.autoConnect)
471
434
  setAutoConnectDisabled(this.projectId, true);
472
435
  const token = this.sessionToken;
473
436
  const active = this.activeRequest;
474
- if (active?.status === "working") {
437
+ if (active?.status === "working" || active?.status === "delivered") {
475
438
  this.activeRequest = { ...active, status: "interrupted", error: reason };
476
439
  }
477
440
  this.dispatchAbort?.abort();
@@ -518,11 +481,8 @@ export class AgentClient {
518
481
  }
519
482
  else {
520
483
  this.companionReachable = true;
521
- if (this.connection !== "paired" && this.connection !== "working" && !this.pairingAbort) {
522
- // Discovery is unauthenticated. Another browser tab can own the
523
- // pairing, so do not adopt `paired` until this tab restores the
524
- // shared token. The next poll runs restore first in case a sibling
525
- // tab has just stored that token.
484
+ if (this.connection !== "paired" && this.connection !== "working" && this.connection !== "delivered" && !this.pairingAbort) {
485
+ // Discovery is unauthenticated; do not adopt `paired` until this tab restores the shared token.
526
486
  const pairedElsewhere = status.paired && !this.sessionToken;
527
487
  this.applyStatus(status.paired ? {
528
488
  ...status,
@@ -538,7 +498,7 @@ export class AgentClient {
538
498
  }
539
499
  }
540
500
  }
541
- else if (this.connection !== "paired" && this.connection !== "working" && !this.pairingAbort) {
501
+ else if (this.connection !== "paired" && this.connection !== "working" && this.connection !== "delivered" && !this.pairingAbort) {
542
502
  this.connection = "offline";
543
503
  this.listenerActive = false;
544
504
  this.companionReachable = false;
@@ -549,14 +509,13 @@ export class AgentClient {
549
509
  }
550
510
  }
551
511
  catch (error) {
552
- if (!abortController.signal.aborted && this.started && this.connection !== "paired" && this.connection !== "working" && !this.pairingAbort) {
512
+ if (!abortController.signal.aborted && this.started && this.connection !== "paired" && this.connection !== "working" && this.connection !== "delivered" && !this.pairingAbort) {
553
513
  this.connection = "offline";
554
514
  this.listenerActive = false;
555
515
  this.companionReachable = false;
556
516
  this.paired = false;
557
517
  this.pairedElsewhere = false;
558
- // Discovery failures are expected while the companion is not running;
559
- // retain a quiet disconnected state rather than flashing an error.
518
+ // Discovery failures are expected while the companion is down; stay quietly disconnected.
560
519
  this.lastError = undefined;
561
520
  this.publish();
562
521
  }
@@ -624,10 +583,7 @@ export class AgentClient {
624
583
  },
625
584
  };
626
585
  }
627
- // Every tab with the shared browser session receives the SSE command, but
628
- // only the Canvas lease owner may answer it. A read-only tab reports this
629
- // local sentinel; leave the command pending for the owning tab instead of
630
- // racing its acknowledgement with a false failure.
586
+ // Every tab receives the SSE command but only the Canvas lease owner may answer; leave it pending for that tab.
631
587
  if (!acknowledgement.ok && acknowledgement.error?.code === "workspace-locked")
632
588
  return;
633
589
  if (acknowledgement.commandId !== command.commandId) {
@@ -647,8 +603,7 @@ export class AgentClient {
647
603
  await this.transport.acknowledgeCanvasCommand(request);
648
604
  }
649
605
  catch {
650
- // A command acknowledgement is best effort. The companion owns the
651
- // bounded timeout and reports any expired command to its agent host.
606
+ // Acknowledgement is best effort; the companion owns the timeout.
652
607
  }
653
608
  }
654
609
  applyStatus(status, pairedElsewhere = false) {
@@ -658,7 +613,7 @@ export class AgentClient {
658
613
  this.agentClientName = status.agentClientName;
659
614
  this.paired = status.paired;
660
615
  this.pairedElsewhere = pairedElsewhere;
661
- this.connection = statusForConnection(status);
616
+ this.connection = deriveConnectionState(status);
662
617
  if (status.paired && this.discoveryTimer !== null) {
663
618
  clearTimeout(this.discoveryTimer);
664
619
  this.discoveryTimer = null;
@@ -666,16 +621,13 @@ export class AgentClient {
666
621
  if (status.request) {
667
622
  this.applyRequestStatus(status.request.status, status.request.requestId, status.request.summary, status.request.error, status.request.changeRevision, status.request.clientDispatchId, status.request.sketches);
668
623
  }
669
- else if (status.listenerActive && status.paired && this.activeRequest?.status !== "working") {
670
- // A re-armed MCP listen call is the lifecycle boundary for the previous
671
- // terminal request. Drop only that terminal status; newer edits remain
672
- // in the inspector's canonical change log.
624
+ else if (status.listenerActive && status.paired && this.activeRequest?.status !== "working" && this.activeRequest?.status !== "delivered") {
625
+ // A re-armed listen call ends the previous terminal request; newer edits stay in the canonical change log.
673
626
  this.activeRequest = null;
674
627
  }
675
- else if (this.activeRequest?.status === "working" && status.connection !== "working") {
676
- // The bridge may omit a request during a brief re-arm transition. Do
677
- // not mark a local request interrupted until the stream disconnects.
678
- this.connection = "working";
628
+ else if ((this.activeRequest?.status === "working" || this.activeRequest?.status === "delivered") && status.connection !== this.activeRequest.status) {
629
+ // A brief re-arm can omit the request; do not mark it interrupted until the stream disconnects.
630
+ this.connection = this.activeRequest.status;
679
631
  }
680
632
  if (!status.paired && this.sessionToken) {
681
633
  this.handleDisconnect("The agent bridge pairing expired.");
@@ -695,10 +647,14 @@ export class AgentClient {
695
647
  }
696
648
  applyRequestStatus(status, requestId, summary, error, changeRevision, clientDispatchId, sketches) {
697
649
  const active = this.activeRequest;
650
+ // A dispatch response can arrive after an SSE acknowledgment or outcome.
651
+ if (status === "delivered" && active && active.status !== "delivered") {
652
+ this.connection = active.status === "working" ? "working" : this.paired ? "paired" : "offline";
653
+ return;
654
+ }
698
655
  if (active && active.requestId !== requestId && active.localRequestId !== requestId) {
699
- // A fresh server id can arrive before the POST response. Associate it
700
- // with the one local request that was just marked working.
701
- if (active.status !== "working")
656
+ // A fresh server id can arrive before the POST response; associate it with the local request.
657
+ if (active.status !== "working" && active.status !== "delivered")
702
658
  return;
703
659
  this.activeRequest = { ...active, requestId };
704
660
  }
@@ -727,17 +683,15 @@ export class AgentClient {
727
683
  ...(error === undefined ? {} : { error }),
728
684
  };
729
685
  }
730
- if (status === "working")
731
- this.connection = "working";
686
+ if (status === "working" || status === "delivered")
687
+ this.connection = status;
732
688
  else if (this.paired)
733
689
  this.connection = "paired";
734
690
  }
735
691
  handleDisconnect(reason = "The agent connection was lost.") {
736
692
  this.eventSubscription?.close();
737
693
  this.eventSubscription = null;
738
- // An SSE disconnect is not proof that the coding request stopped. Keep
739
- // its last known state until an authenticated status restore says
740
- // otherwise. Explicit browser disconnect remains the interruption path.
694
+ // An SSE disconnect is not proof the request stopped; keep its last known state until an authenticated restore says otherwise.
741
695
  this.connection = "offline";
742
696
  this.listenerActive = false;
743
697
  this.companionReachable = false;
@@ -745,8 +699,7 @@ export class AgentClient {
745
699
  this.pairedElsewhere = false;
746
700
  this.lastError = reason;
747
701
  if (reason === "browser_disconnected") {
748
- // A remote takeover deliberately invalidates this browser's token. Do
749
- // not immediately race the new browser by auto-pairing again.
702
+ // A remote takeover invalidates this token; do not race the new browser by auto-pairing.
750
703
  this.autoConnectSuppressed = true;
751
704
  if (this.autoConnect)
752
705
  setAutoConnectDisabled(this.projectId, true);
@@ -784,6 +737,8 @@ export class AgentClient {
784
737
  return "disconnected";
785
738
  if (this.connection === "listening")
786
739
  return "available";
740
+ if (this.connection === "delivered" || this.activeRequest?.status === "delivered")
741
+ return "delivered";
787
742
  if (this.connection === "working" || this.activeRequest?.status === "working")
788
743
  return "working";
789
744
  if (this.activeRequest?.status === "completed")
@@ -796,7 +751,7 @@ export class AgentClient {
796
751
  }
797
752
  publish(stateOverride) {
798
753
  this.snapshot = Object.freeze(this.makeSnapshot(stateOverride));
799
- synchronizeAgentActivity(this.projectId, this.snapshot.request?.requestId, this.snapshot.paired && this.snapshot.request?.status === "working", this.snapshot.request?.clientDispatchId);
754
+ synchronizeAgentActivity(this.projectId, this.snapshot.request?.requestId, this.snapshot.paired && this.snapshot.request?.status === "working", this.snapshot.request?.clientDispatchId, this.snapshot.paired && this.snapshot.request?.status === "delivered");
800
755
  for (const listener of this.listeners)
801
756
  listener();
802
757
  }
@@ -804,7 +759,6 @@ export class AgentClient {
804
759
  let configuredTransport;
805
760
  const clients = new Map();
806
761
  const consumerCounts = new Map();
807
- /** Sets a host/test transport for subsequently created project clients. */
808
762
  export function configureAgentBridgeTransport(transport) {
809
763
  for (const client of clients.values())
810
764
  client.stop();
@@ -812,7 +766,6 @@ export function configureAgentBridgeTransport(transport) {
812
766
  consumerCounts.clear();
813
767
  configuredTransport = transport;
814
768
  }
815
- /** Clears cached clients and their active streams. */
816
769
  export function resetAgentClients() {
817
770
  for (const client of clients.values())
818
771
  client.stop();
@@ -847,7 +800,6 @@ export function getAgentClient(projectId, options = {}) {
847
800
  }
848
801
  return client;
849
802
  }
850
- /** React hook used by the inspector handoff control. */
851
803
  export function useAgentClient(projectId, suppliedClient) {
852
804
  const client = useMemo(() => suppliedClient ?? getAgentClient(projectId), [projectId, suppliedClient]);
853
805
  useEffect(() => {
@@ -1,5 +1,5 @@
1
1
  import type { AgentClientSnapshot } from "./client.js";
2
- export type AgentConnectionStatusKind = "unavailable" | "connecting" | "working-disconnected" | "working" | "paired-elsewhere" | "not-found" | "ready-to-connect" | "connected-not-listening" | "listening";
2
+ export type AgentConnectionStatusKind = "unavailable" | "connecting" | "delivered" | "delivered-disconnected" | "working-disconnected" | "working" | "paired-elsewhere" | "not-found" | "ready-to-connect" | "connected" | "connected-not-listening" | "listening";
3
3
  export interface AgentConnectionStatus {
4
4
  readonly kind: AgentConnectionStatusKind;
5
5
  readonly label: string;
@@ -9,5 +9,6 @@ export interface AgentConnectionStatus {
9
9
  readonly label: "Connect" | "Take over";
10
10
  };
11
11
  }
12
- /** Returns the user-facing connection state shared by the prompt UI and MCP panel. */
13
12
  export declare function getAgentConnectionStatus(snapshot: AgentClientSnapshot): AgentConnectionStatus;
13
+ /** Gives the agent time to rearm after completing a request before showing a reminder. */
14
+ export declare function useAgentConnectionStatus(snapshot: AgentClientSnapshot): AgentConnectionStatus;
@@ -1,4 +1,4 @@
1
- /** Returns the user-facing connection state shared by the prompt UI and MCP panel. */
1
+ import { useEffect, useState } from "react";
2
2
  export function getAgentConnectionStatus(snapshot) {
3
3
  if (snapshot.state === "disabled") {
4
4
  return { kind: "unavailable", label: "Unavailable in this build", tone: "neutral" };
@@ -14,6 +14,11 @@ export function getAgentConnectionStatus(snapshot) {
14
14
  action: { kind: "takeover", label: "Take over" },
15
15
  };
16
16
  }
17
+ if (snapshot.state === "delivered" || snapshot.request?.status === "delivered") {
18
+ return snapshot.paired
19
+ ? { kind: "delivered", label: "Connected · Awaiting agent acknowledgment", tone: "accent" }
20
+ : { kind: "delivered-disconnected", label: "Disconnected · Agent acknowledgment unknown", tone: "warning" };
21
+ }
17
22
  if (!snapshot.paired && (snapshot.state === "working" || snapshot.request?.status === "working")) {
18
23
  return { kind: "working-disconnected", label: "Disconnected · Last work status unknown", tone: "warning" };
19
24
  }
@@ -40,3 +45,22 @@ export function getAgentConnectionStatus(snapshot) {
40
45
  action: { kind: "connect", label: "Connect" },
41
46
  };
42
47
  }
48
+ /** Gives the agent time to rearm after completing a request before showing a reminder. */
49
+ export function useAgentConnectionStatus(snapshot) {
50
+ const status = getAgentConnectionStatus(snapshot);
51
+ const completedRequestId = status.kind === "connected-not-listening" && snapshot.request?.status === "completed"
52
+ ? snapshot.request.requestId
53
+ : undefined;
54
+ const [reminderRequestId, setReminderRequestId] = useState();
55
+ useEffect(() => {
56
+ setReminderRequestId(undefined);
57
+ if (!completedRequestId)
58
+ return;
59
+ const timeout = setTimeout(() => setReminderRequestId(completedRequestId), 5_000);
60
+ return () => clearTimeout(timeout);
61
+ }, [completedRequestId]);
62
+ if (completedRequestId && reminderRequestId !== completedRequestId) {
63
+ return { kind: "connected", label: "MCP connected", tone: "accent" };
64
+ }
65
+ return status;
66
+ }