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.
- package/dist/cli/agentCommand.d.ts +0 -1
- package/dist/cli/agentCommand.js +4 -29
- package/dist/client.mjs +987 -221
- package/dist/compiler/ast.d.ts +0 -6
- package/dist/compiler/ast.js +0 -5
- package/dist/compiler/componentContractTypes.d.ts +11 -5
- package/dist/compiler/componentContracts.js +3 -9
- package/dist/compiler/componentInstrumentation.d.ts +2 -13
- package/dist/compiler/componentInstrumentation.js +3 -12
- package/dist/compiler/componentPolicyResolution.d.ts +3 -22
- package/dist/compiler/componentPolicyResolution.js +6 -38
- package/dist/compiler/identityAttributes.d.ts +2 -0
- package/dist/compiler/identityAttributes.js +2 -0
- package/dist/compiler/index.d.ts +0 -1
- package/dist/compiler/index.js +0 -1
- package/dist/compiler/packageComponentContracts.d.ts +10 -19
- package/dist/compiler/packageComponentContracts.js +60 -43
- package/dist/compiler/reactComponentProtocols.d.ts +0 -7
- package/dist/compiler/reactComponentProtocols.js +0 -7
- package/dist/compiler/reactIdentity.d.ts +2 -2
- package/dist/compiler/reactIdentity.js +41 -43
- package/dist/compiler/sourcePaths.d.ts +4 -8
- package/dist/compiler/sourcePaths.js +6 -8
- package/dist/css/dialects/index.d.ts +2 -21
- package/dist/css/dialects/index.js +2 -9
- package/dist/css/dialects/tailwind.d.ts +2 -16
- package/dist/css/dialects/tailwind.js +2 -25
- package/dist/css/dialects/vanillaExtract.d.ts +1 -9
- package/dist/css/dialects/vanillaExtract.js +0 -1
- package/dist/css/index.d.ts +0 -8
- package/dist/css/index.js +0 -8
- package/dist/css/model/index.d.ts +6 -38
- package/dist/css/model/index.js +0 -9
- package/dist/css/token-inventory/index.d.ts +0 -23
- package/dist/css/token-inventory/index.js +0 -23
- package/dist/css/token-inventory/inventory.js +4 -16
- package/dist/css/token-inventory/parseStylesheet.d.ts +1 -9
- package/dist/css/token-inventory/parseStylesheet.js +5 -42
- package/dist/css/token-inventory/policy.d.ts +2 -39
- package/dist/css/token-inventory/policy.js +2 -39
- package/dist/css/token-inventory/types.d.ts +2 -15
- package/dist/css/value-semantics/borderSemantics.d.ts +1 -8
- package/dist/css/value-semantics/borderSemantics.js +5 -23
- package/dist/css/value-semantics/boxSemantics.d.ts +2 -25
- package/dist/css/value-semantics/boxSemantics.js +1 -7
- package/dist/css/value-semantics/colorSemantics.d.ts +6 -60
- package/dist/css/value-semantics/colorSemantics.js +9 -40
- package/dist/css/value-semantics/cssSyntax.d.ts +10 -10
- package/dist/css/value-semantics/cssSyntax.js +39 -11
- package/dist/css/value-semantics/fontSemantics.d.ts +3 -19
- package/dist/css/value-semantics/fontSemantics.js +7 -25
- package/dist/css/value-semantics/index.d.ts +1 -12
- package/dist/css/value-semantics/index.js +1 -12
- package/dist/css/value-semantics/propertyPolicy.d.ts +6 -53
- package/dist/css/value-semantics/propertyPolicy.js +47 -59
- package/dist/css/value-semantics/stringMaps.d.ts +0 -1
- package/dist/css/value-semantics/structuredValues.d.ts +3 -37
- package/dist/css/value-semantics/structuredValues.js +6 -17
- package/dist/css/value-semantics/tokenInterpretation.d.ts +8 -50
- package/dist/css/value-semantics/tokenInterpretation.js +7 -21
- package/dist/hosts/astro/astroRuntimeConfig.d.ts +0 -1
- package/dist/hosts/astro/astroRuntimeConfig.js +0 -1
- package/dist/hosts/astro/clientAsset.d.ts +1 -5
- package/dist/hosts/astro/clientAsset.js +1 -5
- package/dist/hosts/astro/clientTransport.d.ts +0 -1
- package/dist/hosts/astro/clientTransport.js +4 -9
- package/dist/hosts/astro/integration.d.ts +2 -28
- package/dist/hosts/astro/integration.js +7 -36
- package/dist/hosts/astro/markdownIdentity.d.ts +0 -3
- package/dist/hosts/astro/markdownIdentity.js +0 -3
- package/dist/hosts/astro/middleware.d.ts +1 -12
- package/dist/hosts/astro/middleware.js +1 -12
- package/dist/hosts/astro/projectContext.d.ts +1 -9
- package/dist/hosts/astro/projectContext.js +2 -11
- package/dist/hosts/astro/responseInstrumentation.d.ts +4 -33
- package/dist/hosts/astro/responseInstrumentation.js +5 -34
- package/dist/hosts/environment.d.ts +0 -8
- package/dist/hosts/environment.js +0 -1
- package/dist/hosts/next/index.js +1 -3
- package/dist/hosts/next/loader.d.ts +5 -44
- package/dist/hosts/next/loader.js +22 -103
- package/dist/hosts/next/loaders/identity-loader.cjs +111 -65
- package/dist/hosts/next/loaders/loader-plugin.cjs +111 -65
- package/dist/hosts/next/manifest.d.ts +2 -16
- package/dist/hosts/next/manifest.js +18 -20
- package/dist/hosts/next/mount.d.ts +1 -11
- package/dist/hosts/next/mount.js +1 -11
- package/dist/hosts/next/repositoryScope.d.ts +2 -17
- package/dist/hosts/next/repositoryScope.js +2 -17
- package/dist/hosts/next/sidecar.d.ts +0 -13
- package/dist/hosts/next/sidecar.js +25 -110
- package/dist/hosts/next/wrapper.d.ts +0 -31
- package/dist/hosts/next/wrapper.js +14 -71
- package/dist/hosts/projectBridge.d.ts +0 -2
- package/dist/hosts/projectBridge.js +3 -19
- package/dist/hosts/reactRendererCapture.d.ts +2 -0
- package/dist/hosts/reactRendererCapture.js +12 -0
- package/dist/hosts/static/cli.d.ts +0 -4
- package/dist/hosts/static/cli.js +0 -3
- package/dist/hosts/static/html/bootstrap.d.ts +1 -18
- package/dist/hosts/static/html/bootstrap.js +2 -14
- package/dist/hosts/static/manifest.d.ts +2 -15
- package/dist/hosts/static/manifest.js +5 -18
- package/dist/hosts/static/server.d.ts +4 -38
- package/dist/hosts/static/server.js +17 -67
- package/dist/hosts/vite/index.d.ts +0 -10
- package/dist/hosts/vite/index.js +0 -10
- package/dist/hosts/vite/react.d.ts +4 -17
- package/dist/hosts/vite/react.js +18 -35
- package/dist/hosts/vite/tokens/activeStylesheets.d.ts +1 -10
- package/dist/hosts/vite/tokens/activeStylesheets.js +3 -8
- package/dist/hosts/vite/tokens/fileMap.d.ts +0 -1
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +2 -15
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +3 -10
- package/dist/hosts/vite/vite.d.ts +5 -26
- package/dist/hosts/vite/vite.js +44 -80
- package/dist/html/dom.d.ts +0 -1
- package/dist/html/dom.js +0 -1
- package/dist/html/identity.d.ts +1 -15
- package/dist/html/identity.js +1 -8
- package/dist/html/insertions.d.ts +2 -8
- package/dist/html/insertions.js +1 -1
- package/dist/inspector/agent/McpConnectionDialog.d.ts +1 -6
- package/dist/inspector/agent/McpConnectionDialog.js +8 -9
- package/dist/inspector/agent/activity.d.ts +2 -2
- package/dist/inspector/agent/activity.js +4 -3
- package/dist/inspector/agent/client.d.ts +3 -27
- package/dist/inspector/agent/client.js +43 -91
- package/dist/inspector/agent/connectionStatus.d.ts +3 -2
- package/dist/inspector/agent/connectionStatus.js +25 -1
- package/dist/inspector/agent/httpTransport.d.ts +0 -8
- package/dist/inspector/agent/httpTransport.js +42 -176
- package/dist/inspector/agent/protocol.d.ts +1 -10
- package/dist/inspector/agent/protocol.js +1 -9
- package/dist/inspector/agent/verification.d.ts +3 -20
- package/dist/inspector/agent/verification.js +10 -43
- package/dist/inspector/boot.d.ts +5 -0
- package/dist/inspector/boot.js +289 -0
- package/dist/inspector/canvas/AgentActivityOverlay.d.ts +3 -2
- package/dist/inspector/canvas/AgentActivityOverlay.js +7 -4
- package/dist/inspector/canvas/CanvasCard.js +26 -24
- package/dist/inspector/canvas/CanvasElementOverlay.js +196 -174
- package/dist/inspector/canvas/CanvasToolbar.js +2 -1
- package/dist/inspector/canvas/CanvasWorkspace.js +87 -124
- package/dist/inspector/canvas/LockedWorkspaceNotice.d.ts +3 -2
- package/dist/inspector/canvas/LockedWorkspaceNotice.js +10 -6
- package/dist/inspector/canvas/PageCard.d.ts +9 -0
- package/dist/inspector/canvas/PageCard.js +50 -0
- package/dist/inspector/canvas/SketchToolOptions.d.ts +4 -0
- package/dist/inspector/canvas/SketchToolOptions.js +80 -0
- package/dist/inspector/canvas/StaleChangeIndicator.d.ts +1 -1
- package/dist/inspector/canvas/StaleChangeIndicator.js +1 -1
- package/dist/inspector/canvas/ToolOptionsDrawer.d.ts +16 -0
- package/dist/inspector/canvas/ToolOptionsDrawer.js +71 -0
- package/dist/inspector/canvas/activeCanvasDocument.d.ts +3 -4
- package/dist/inspector/canvas/activeCanvasDocument.js +0 -2
- package/dist/inspector/canvas/agentPresentation.d.ts +2 -13
- package/dist/inspector/canvas/agentPresentation.js +3 -14
- package/dist/inspector/canvas/assets/eraser.svg +28 -0
- package/dist/inspector/canvas/assets/pen.svg +25 -0
- package/dist/inspector/canvas/canvasFrame.d.ts +12 -0
- package/dist/inspector/canvas/canvasFrame.js +9 -0
- package/dist/inspector/canvas/canvasGestures.d.ts +0 -1
- package/dist/inspector/canvas/canvasGestures.js +0 -6
- package/dist/inspector/canvas/canvasResize.d.ts +1 -6
- package/dist/inspector/canvas/canvasResize.js +1 -6
- package/dist/inspector/canvas/canvasStore.d.ts +5 -7
- package/dist/inspector/canvas/canvasStore.js +42 -21
- package/dist/inspector/canvas/frameConnection.d.ts +42 -0
- package/dist/inspector/canvas/frameConnection.js +73 -0
- package/dist/inspector/canvas/frameContent.d.ts +0 -1
- package/dist/inspector/canvas/frameLifecycle.d.ts +12 -0
- package/dist/inspector/canvas/frameLifecycle.js +11 -0
- package/dist/inspector/canvas/frameProtocol.d.ts +20 -38
- package/dist/inspector/canvas/frameProtocol.js +37 -24
- package/dist/inspector/canvas/frameScrollbarStyles.d.ts +0 -1
- package/dist/inspector/canvas/frameScrollbarStyles.js +0 -1
- package/dist/inspector/canvas/layout.d.ts +10 -22
- package/dist/inspector/canvas/layout.js +0 -3
- package/dist/inspector/canvas/normalizeUrl.js +1 -8
- package/dist/inspector/canvas/pageSurface.d.ts +6 -0
- package/dist/inspector/canvas/pageSurface.js +29 -0
- package/dist/inspector/canvas/projection.d.ts +14 -25
- package/dist/inspector/canvas/projection.js +64 -87
- package/dist/inspector/canvas/rendererBootstrap.d.ts +8 -1
- package/dist/inspector/canvas/rendererBootstrap.js +10 -15
- package/dist/inspector/canvas/rendererCidIndex.d.ts +0 -5
- package/dist/inspector/canvas/rendererCidIndex.js +0 -5
- package/dist/inspector/canvas/rendererElementSelector.js +38 -28
- package/dist/inspector/canvas/rendererMessageRouter.d.ts +4 -6
- package/dist/inspector/canvas/rendererMessageRouter.js +12 -17
- package/dist/inspector/canvas/rendererSelectionProxy.d.ts +3 -1
- package/dist/inspector/canvas/rendererSelectionProxy.js +7 -40
- package/dist/inspector/canvas/rendererStylesheet.d.ts +0 -1
- package/dist/inspector/canvas/rendererStylesheet.js +23 -1
- package/dist/inspector/canvas/resizeHandleScale.d.ts +1 -10
- package/dist/inspector/canvas/resizeHandleScale.js +1 -10
- package/dist/inspector/canvas/sessionStore.d.ts +3 -9
- package/dist/inspector/canvas/sessionStore.js +33 -43
- package/dist/inspector/canvas/staleChangeDetector.d.ts +1 -1
- package/dist/inspector/canvas/staleChangeDetector.js +11 -26
- package/dist/inspector/canvas/toolbarScale.d.ts +1 -4
- package/dist/inspector/canvas/toolbarScale.js +1 -4
- package/dist/inspector/canvas/useCanvasLayoutAnimation.d.ts +0 -1
- package/dist/inspector/canvas/useCanvasLayoutAnimation.js +0 -1
- package/dist/inspector/canvas/viewStore.js +1 -1
- package/dist/inspector/canvas/wheelPan.d.ts +1 -1
- package/dist/inspector/canvas/wheelPan.js +1 -1
- package/dist/inspector/canvas/workspaceLease.d.ts +1 -5
- package/dist/inspector/canvas/workspaceLease.js +1 -7
- package/dist/inspector/changes/codecs.d.ts +1 -0
- package/dist/inspector/changes/codecs.js +21 -5
- package/dist/inspector/changes/draftPreview.d.ts +7 -0
- package/dist/inspector/changes/draftPreview.js +118 -0
- package/dist/inspector/changes/editModel.d.ts +11 -13
- package/dist/inspector/changes/editModel.js +9 -4
- package/dist/inspector/changes/managedStyleProjection.js +6 -15
- package/dist/inspector/changes/model.d.ts +0 -5
- package/dist/inspector/changes/model.js +1 -8
- package/dist/inspector/changes/previewDiagnostics.d.ts +2 -12
- package/dist/inspector/changes/previewDiagnostics.js +5 -21
- package/dist/inspector/changes/previewVerification.d.ts +25 -0
- package/dist/inspector/changes/previewVerification.js +34 -0
- package/dist/inspector/changes/structuralTypes.d.ts +2 -4
- package/dist/inspector/changes/types.d.ts +11 -8
- package/dist/inspector/clientManifest.d.ts +17 -6
- package/dist/inspector/clientManifest.js +16 -3
- package/dist/inspector/comments/CommentsOverlay.js +66 -23
- package/dist/inspector/comments/element.d.ts +1 -2
- package/dist/inspector/comments/element.js +1 -2
- package/dist/inspector/comments/store.d.ts +1 -1
- package/dist/inspector/comments/store.js +4 -3
- package/dist/inspector/comments/verification.d.ts +8 -2
- package/dist/inspector/comments/verification.js +19 -11
- package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +8 -0
- package/dist/inspector/componentSemantics/ComponentPropsSection.js +12 -8
- package/dist/inspector/componentSemantics/adapterRegistry.d.ts +2 -9
- package/dist/inspector/componentSemantics/adapterRegistry.js +2 -9
- package/dist/inspector/componentSemantics/changeAction.js +1 -1
- package/dist/inspector/componentSemantics/changeModel.js +2 -4
- package/dist/inspector/componentSemantics/react/callsites.d.ts +28 -0
- package/dist/inspector/componentSemantics/react/callsites.js +261 -0
- package/dist/inspector/componentSemantics/react/devtoolsHook.d.ts +23 -0
- package/dist/inspector/componentSemantics/react/devtoolsHook.js +71 -0
- package/dist/inspector/componentSemantics/react/fibers.d.ts +17 -0
- package/dist/inspector/componentSemantics/react/fibers.js +30 -0
- package/dist/inspector/componentSemantics/{reactRuntime.d.ts → react/runtime.d.ts} +3 -2
- package/dist/inspector/componentSemantics/{reactRuntime.js → react/runtime.js} +70 -53
- package/dist/inspector/componentSemantics/runtimeBridge.d.ts +2 -18
- package/dist/inspector/componentSemantics/runtimeBridge.js +5 -19
- package/dist/inspector/componentSemantics/textBinding.d.ts +2 -11
- package/dist/inspector/componentSemantics/textBinding.js +20 -87
- package/dist/inspector/componentSemantics/types.d.ts +8 -27
- package/dist/inspector/componentSemantics/types.js +0 -1
- package/dist/inspector/conformance/borderCases.d.ts +0 -5
- package/dist/inspector/conformance/borderCases.js +0 -5
- package/dist/inspector/conformance/colorCases.d.ts +0 -6
- package/dist/inspector/conformance/colorCases.js +0 -6
- package/dist/inspector/conformance/fixture.d.ts +1 -5
- package/dist/inspector/conformance/fixture.js +1 -5
- package/dist/inspector/conformance/spacingCases.d.ts +0 -4
- package/dist/inspector/conformance/spacingCases.js +0 -4
- package/dist/inspector/conformance/typographyCases.d.ts +0 -5
- package/dist/inspector/conformance/typographyCases.js +0 -5
- package/dist/inspector/drafts/draftStore.d.ts +95 -0
- package/dist/inspector/drafts/draftStore.js +461 -0
- package/dist/inspector/drafts/model.d.ts +14 -14
- package/dist/inspector/drafts/model.js +4 -2
- package/dist/inspector/drafts/store.d.ts +47 -16
- package/dist/inspector/drafts/store.js +137 -170
- package/dist/inspector/editScope.d.ts +0 -1
- package/dist/inspector/editScope.js +0 -1
- package/dist/inspector/index.d.ts +2 -4
- package/dist/inspector/index.js +2 -264
- package/dist/inspector/inline-text/inlineTextDiagnostics.d.ts +0 -2
- package/dist/inspector/inline-text/inlineTextDiagnostics.js +0 -2
- package/dist/inspector/inline-text/inlineTextEditor.d.ts +3 -9
- package/dist/inspector/inline-text/inlineTextEditor.js +27 -81
- package/dist/inspector/inline-text/inlineTextLifecycle.js +1 -6
- package/dist/inspector/inline-text/textEditChange.d.ts +1 -2
- package/dist/inspector/inspection/bridge.d.ts +3 -7
- package/dist/inspector/inspection/bridge.js +6 -13
- package/dist/inspector/inspection/browserCssInspection.d.ts +12 -11
- package/dist/inspector/inspection/browserCssInspection.js +32 -14
- package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +0 -7
- package/dist/inspector/inspection/browserCssInspectionRegistry.js +1 -16
- package/dist/inspector/inspection/inspectionSnapshot.d.ts +6 -0
- package/dist/inspector/inspection/inspectionSnapshot.js +10 -0
- package/dist/inspector/inspection/performanceDiagnostics.d.ts +18 -0
- package/dist/inspector/inspection/performanceDiagnostics.js +31 -0
- package/dist/inspector/inspection/selectionProperty.d.ts +1 -6
- package/dist/inspector/inspection/selectionProperty.js +1 -5
- package/dist/inspector/inspection/useBrowserCssInspection.d.ts +1 -5
- package/dist/inspector/inspection/useBrowserCssInspection.js +22 -59
- package/dist/inspector/iterations/capture.d.ts +2 -2
- package/dist/inspector/iterations/capture.js +4 -9
- package/dist/inspector/iterations/client.d.ts +2 -2
- package/dist/inspector/iterations/client.js +0 -1
- package/dist/inspector/iterations/coordinator.d.ts +4 -4
- package/dist/inspector/iterations/coordinator.js +5 -4
- package/dist/inspector/iterations/prompt.d.ts +0 -1
- package/dist/inspector/iterations/prompt.js +9 -9
- package/dist/inspector/overlay/DomNavigator.d.ts +3 -1
- package/dist/inspector/overlay/DomNavigator.js +39 -15
- package/dist/inspector/overlay/DropGuideOverlay.d.ts +0 -1
- package/dist/inspector/overlay/DropGuideOverlay.js +0 -1
- package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +1 -8
- package/dist/inspector/overlay/MeasurementGuideOverlay.js +1 -5
- package/dist/inspector/overlay/clickPolicy.d.ts +3 -14
- package/dist/inspector/overlay/clickPolicy.js +3 -14
- package/dist/inspector/overlay/dropGuide.d.ts +0 -3
- package/dist/inspector/overlay/dropGuide.js +0 -3
- package/dist/inspector/overlay/frameThrottle.d.ts +0 -1
- package/dist/inspector/overlay/frameThrottle.js +0 -1
- package/dist/inspector/overlay/interactionStyles.d.ts +1 -1
- package/dist/inspector/overlay/interactionStyles.js +19 -8
- package/dist/inspector/overlay/measurementGeometry.js +4 -12
- package/dist/inspector/overlay/selectedGeometry.d.ts +1 -6
- package/dist/inspector/overlay/selectedGeometry.js +1 -8
- package/dist/inspector/overlay/spacingGestures.d.ts +14 -21
- package/dist/inspector/overlay/spacingGestures.js +151 -31
- package/dist/inspector/overlay/structuralGestures.d.ts +2 -9
- package/dist/inspector/overlay/structuralGestures.js +1 -4
- package/dist/inspector/pageInspector.d.ts +33 -0
- package/dist/inspector/pageInspector.js +335 -0
- package/dist/inspector/projection/cssEscapes.d.ts +0 -1
- package/dist/inspector/projection/cssEscapes.js +2 -4
- package/dist/inspector/projection/draftProjection.d.ts +6 -10
- package/dist/inspector/projection/draftProjection.js +8 -7
- package/dist/inspector/projection/managedStylesheet.d.ts +1 -7
- package/dist/inspector/projection/managedStylesheet.js +28 -26
- package/dist/inspector/projection/renderedInstance.d.ts +5 -28
- package/dist/inspector/projection/renderedInstance.js +13 -33
- package/dist/inspector/projection/structuralProjection.d.ts +7 -48
- package/dist/inspector/projection/structuralProjection.js +31 -96
- package/dist/inspector/projection/textProjection.d.ts +7 -13
- package/dist/inspector/projection/textProjection.js +35 -80
- package/dist/inspector/prompt/PromptSettingsDialog.d.ts +0 -1
- package/dist/inspector/prompt/PromptSettingsDialog.js +0 -1
- package/dist/inspector/prompt/clipboardHandoff.d.ts +1 -0
- package/dist/inspector/prompt/clipboardHandoff.js +34 -16
- package/dist/inspector/prompt/generatePrompt.d.ts +2 -2
- package/dist/inspector/prompt/generatePrompt.js +247 -166
- package/dist/inspector/prompt/promptDocument.d.ts +3 -0
- package/dist/inspector/prompt/promptDocument.js +8 -0
- package/dist/inspector/prompt/promptSettings.d.ts +0 -3
- package/dist/inspector/prompt/promptSettings.js +7 -8
- package/dist/inspector/runtime/devFlag.d.ts +2 -25
- package/dist/inspector/runtime/devFlag.js +4 -31
- package/dist/inspector/runtime/documentStylesheetOrder.d.ts +0 -2
- package/dist/inspector/runtime/editorShell.d.ts +0 -1
- package/dist/inspector/runtime/editorShell.js +0 -1
- package/dist/inspector/runtime/inspectorStorage.d.ts +11 -0
- package/dist/inspector/runtime/inspectorStorage.js +37 -0
- package/dist/inspector/runtime/ownedStylesheets.d.ts +14 -0
- package/dist/inspector/runtime/ownedStylesheets.js +66 -0
- package/dist/inspector/runtime/runtimeConfig.d.ts +14 -84
- package/dist/inspector/runtime/runtimeConfig.js +18 -50
- package/dist/inspector/runtime/runtimeIdentityClaims.d.ts +19 -0
- package/dist/inspector/runtime/runtimeIdentityClaims.js +178 -0
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +6 -23
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +103 -52
- package/dist/inspector/runtime/useRuntimeConfig.d.ts +1 -8
- package/dist/inspector/runtime/useRuntimeConfig.js +1 -8
- package/dist/inspector/selection/editScope.d.ts +2 -7
- package/dist/inspector/selection/editScope.js +15 -14
- package/dist/inspector/selection/editTarget.d.ts +1 -5
- package/dist/inspector/selection/hierarchy.d.ts +11 -11
- package/dist/inspector/selection/hierarchy.js +42 -24
- package/dist/inspector/selection/selectionStore.d.ts +0 -3
- package/dist/inspector/selection/selectionStore.js +5 -16
- package/dist/inspector/selection/sourceSite.d.ts +1 -5
- package/dist/inspector/selection/sourceSite.js +2 -8
- package/dist/inspector/selection/styleSelection.d.ts +1 -5
- package/dist/inspector/selection/styleSelection.js +1 -5
- package/dist/inspector/session/lifecycle.d.ts +1 -9
- package/dist/inspector/session/lifecycle.js +0 -1
- package/dist/inspector/session/sessionContext.d.ts +0 -4
- package/dist/inspector/session/sessionContext.js +0 -4
- package/dist/inspector/session/sessionFactory.d.ts +0 -9
- package/dist/inspector/session/sessionFactory.js +0 -6
- package/dist/inspector/settings/SettingsDialog.d.ts +0 -1
- package/dist/inspector/settings/SettingsDialog.js +5 -3
- package/dist/inspector/shell/AgentStatusButton.d.ts +3 -2
- package/dist/inspector/shell/AgentStatusButton.js +7 -7
- package/dist/inspector/shell/AppShell.js +6 -2
- package/dist/inspector/shell/ChangesLog.js +29 -12
- package/dist/inspector/shell/CopyPromptButton.d.ts +2 -1
- package/dist/inspector/shell/CopyPromptButton.js +62 -55
- package/dist/inspector/shell/EmptyState.js +3 -3
- package/dist/inspector/shell/InspectorEditors.d.ts +16 -0
- package/dist/inspector/shell/InspectorEditors.js +14 -0
- package/dist/inspector/shell/InspectorPanel.d.ts +12 -0
- package/dist/inspector/shell/InspectorPanel.js +8 -0
- package/dist/inspector/shell/InspectorSelection.d.ts +24 -0
- package/dist/inspector/shell/InspectorSelection.js +20 -0
- package/dist/inspector/shell/InspectorShell.d.ts +0 -3
- package/dist/inspector/shell/InspectorShell.js +44 -58
- package/dist/inspector/shell/NudgeLogoIcon.d.ts +5 -0
- package/dist/inspector/shell/NudgeLogoIcon.js +5 -0
- package/dist/inspector/shell/PeekOriginalButton.d.ts +0 -5
- package/dist/inspector/shell/PeekOriginalButton.js +3 -8
- package/dist/inspector/shell/PeekOriginalIcon.d.ts +0 -5
- package/dist/inspector/shell/PeekOriginalIcon.js +0 -5
- package/dist/inspector/shell/PromptActionButton.d.ts +21 -0
- package/dist/inspector/shell/PromptActionButton.js +14 -0
- package/dist/inspector/shell/elementName.d.ts +5 -0
- package/dist/inspector/shell/elementName.js +29 -0
- package/dist/inspector/shell/interactionStatePreview.d.ts +6 -0
- package/dist/inspector/shell/interactionStatePreview.js +107 -0
- package/dist/inspector/shell/originalPreview.d.ts +1 -5
- package/dist/inspector/shell/originalPreview.js +5 -37
- package/dist/inspector/shell/stateValue.d.ts +1 -2
- package/dist/inspector/shell/stateValue.js +4 -8
- package/dist/inspector/shell/styleState.d.ts +1 -2
- package/dist/inspector/shell/styleState.js +1 -2
- package/dist/inspector/sketch/SketchEditor.js +5 -5
- package/dist/inspector/sketch/SketchFrameOverlay.d.ts +2 -1
- package/dist/inspector/sketch/SketchFrameOverlay.js +13 -16
- package/dist/inspector/sketch/SketchOverlay.d.ts +3 -5
- package/dist/inspector/sketch/SketchOverlay.js +138 -263
- package/dist/inspector/sketch/SketchPromptPanel.d.ts +1 -2
- package/dist/inspector/sketch/SketchPromptPanel.js +8 -2
- package/dist/inspector/sketch/SketchThumbnail.d.ts +5 -0
- package/dist/inspector/sketch/SketchThumbnail.js +18 -0
- package/dist/inspector/sketch/SketchWorkspace.d.ts +1 -2
- package/dist/inspector/sketch/SketchWorkspace.js +70 -37
- package/dist/inspector/sketch/capture.d.ts +12 -3
- package/dist/inspector/sketch/capture.js +31 -14
- package/dist/inspector/sketch/copySketch.d.ts +4 -0
- package/dist/inspector/sketch/copySketch.js +43 -0
- package/dist/inspector/sketch/drawingTools.d.ts +15 -0
- package/dist/inspector/sketch/drawingTools.js +46 -0
- package/dist/inspector/sketch/frameHeading.d.ts +3 -0
- package/dist/inspector/sketch/frameHeading.js +23 -0
- package/dist/inspector/sketch/freehand.d.ts +0 -1
- package/dist/inspector/sketch/freehand.js +3 -4
- package/dist/inspector/sketch/geometry.d.ts +2 -1
- package/dist/inspector/sketch/geometry.js +15 -1
- package/dist/inspector/sketch/handoff.js +0 -1
- package/dist/inspector/sketch/history.d.ts +26 -0
- package/dist/inspector/sketch/history.js +55 -0
- package/dist/inspector/sketch/interaction.d.ts +3 -5
- package/dist/inspector/sketch/interaction.js +8 -11
- package/dist/inspector/sketch/model.d.ts +33 -6
- package/dist/inspector/sketch/model.js +101 -63
- package/dist/inspector/sketch/persistence.d.ts +14 -1
- package/dist/inspector/sketch/persistence.js +64 -8
- package/dist/inspector/sketch/raster.d.ts +3 -2
- package/dist/inspector/sketch/raster.js +40 -20
- package/dist/inspector/sketch/store.d.ts +1 -1
- package/dist/inspector/sketch/store.js +3 -4
- package/dist/inspector/sketch/videoFrames.d.ts +6 -0
- package/dist/inspector/sketch/videoFrames.js +80 -0
- package/dist/inspector/spacing/projection.d.ts +0 -8
- package/dist/inspector/spacing/projection.js +38 -20
- package/dist/inspector/styleEditors/BackgroundEditor.js +3 -2
- package/dist/inspector/styleEditors/BorderEditor.js +30 -135
- package/dist/inspector/styleEditors/BorderRadiusEditor.js +8 -3
- package/dist/inspector/styleEditors/ChildPlacement.d.ts +12 -0
- package/dist/inspector/styleEditors/ChildPlacement.js +9 -0
- package/dist/inspector/styleEditors/FlexControls.d.ts +35 -0
- package/dist/inspector/styleEditors/FlexControls.js +158 -0
- package/dist/inspector/styleEditors/GapField.d.ts +5 -2
- package/dist/inspector/styleEditors/GapField.js +3 -4
- package/dist/inspector/styleEditors/GridChildSection.d.ts +0 -5
- package/dist/inspector/styleEditors/GridChildSection.js +0 -5
- package/dist/inspector/styleEditors/GridPicker.d.ts +1 -1
- package/dist/inspector/styleEditors/GridPicker.js +2 -4
- package/dist/inspector/styleEditors/GridSection.d.ts +10 -8
- package/dist/inspector/styleEditors/GridSection.js +22 -9
- package/dist/inspector/styleEditors/GridValueField.d.ts +1 -5
- package/dist/inspector/styleEditors/GridValueField.js +2 -8
- package/dist/inspector/styleEditors/ImageBackgroundEditor.d.ts +0 -1
- package/dist/inspector/styleEditors/ImageBackgroundEditor.js +1 -2
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +0 -1
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +0 -1
- package/dist/inspector/styleEditors/LayoutComboField.js +0 -5
- package/dist/inspector/styleEditors/LayoutModeRow.d.ts +14 -0
- package/dist/inspector/styleEditors/LayoutModeRow.js +60 -0
- package/dist/inspector/styleEditors/LayoutSection.d.ts +2 -2
- package/dist/inspector/styleEditors/LayoutSection.js +30 -356
- package/dist/inspector/styleEditors/OpacityEditor.js +7 -5
- package/dist/inspector/styleEditors/PositionControls.d.ts +18 -0
- package/dist/inspector/styleEditors/PositionControls.js +16 -0
- package/dist/inspector/styleEditors/SizeSection.d.ts +18 -0
- package/dist/inspector/styleEditors/SizeSection.js +71 -0
- package/dist/inspector/styleEditors/{SpacingBox.d.ts → SpacingField.d.ts} +3 -10
- package/dist/inspector/styleEditors/{SpacingBox.js → SpacingField.js} +15 -29
- package/dist/inspector/styleEditors/Typography.js +2 -4
- package/dist/inspector/styleEditors/borderModel.d.ts +36 -0
- package/dist/inspector/styleEditors/borderModel.js +105 -0
- package/dist/inspector/styleEditors/completeCssValue.d.ts +1 -5
- package/dist/inspector/styleEditors/completeCssValue.js +3 -13
- package/dist/inspector/styleEditors/fieldValue.d.ts +20 -0
- package/dist/inspector/styleEditors/fieldValue.js +26 -0
- package/dist/inspector/styleEditors/gradientValue.d.ts +1 -1
- package/dist/inspector/styleEditors/gradientValue.js +3 -2
- package/dist/inspector/styleEditors/gridChildModel.d.ts +7 -47
- package/dist/inspector/styleEditors/gridChildModel.js +6 -37
- package/dist/inspector/styleEditors/hiddenSizeOverrides.d.ts +5 -0
- package/dist/inspector/styleEditors/hiddenSizeOverrides.js +42 -0
- package/dist/inspector/styleEditors/inlineAuthored.d.ts +1 -8
- package/dist/inspector/styleEditors/inlineAuthored.js +3 -17
- package/dist/inspector/styleEditors/layoutMode.d.ts +15 -0
- package/dist/inspector/styleEditors/layoutMode.js +33 -0
- package/dist/inspector/styleEditors/layoutPreviewState.d.ts +0 -1
- package/dist/inspector/styleEditors/layoutPreviewState.js +0 -1
- package/dist/inspector/styleEditors/layoutValue.d.ts +2 -8
- package/dist/inspector/styleEditors/layoutValue.js +6 -15
- package/dist/inspector/styleEditors/nudgeValue.d.ts +1 -13
- package/dist/inspector/styleEditors/nudgeValue.js +1 -13
- package/dist/inspector/styleEditors/rowLookup.d.ts +1 -5
- package/dist/inspector/styleEditors/rowLookup.js +1 -5
- package/dist/inspector/styleEditors/stringRecord.d.ts +1 -2
- package/dist/inspector/styleEditors/stylePresence.d.ts +0 -2
- package/dist/inspector/styleEditors/stylePresence.js +1 -4
- package/dist/inspector/styleEditors/textRelevance.d.ts +1 -1
- package/dist/inspector/styleEditors/textRelevance.js +1 -1
- package/dist/inspector/styleEditors/useFieldVisibility.js +1 -2
- package/dist/inspector/styleEditors/useLayoutContext.d.ts +13 -0
- package/dist/inspector/styleEditors/useLayoutContext.js +53 -0
- package/dist/inspector/styleEditors/valuePolicy.d.ts +1 -5
- package/dist/inspector/styleEditors/valuePolicy.js +0 -1
- package/dist/inspector/testing.d.ts +1 -4
- package/dist/inspector/testing.js +1 -4
- package/dist/inspector/tokens/TokenChip.d.ts +1 -4
- package/dist/inspector/tokens/TokenChip.js +1 -4
- package/dist/inspector/tokens/TokenField.d.ts +4 -3
- package/dist/inspector/tokens/TokenField.js +53 -32
- package/dist/inspector/tokens/TokensPanel.js +2 -1
- package/dist/inspector/tokens/catalog.d.ts +2 -10
- package/dist/inspector/tokens/catalog.js +5 -12
- package/dist/inspector/tokens/dragPointerLock.d.ts +0 -1
- package/dist/inspector/tokens/dragPointerLock.js +2 -3
- package/dist/inspector/tokens/editActions.d.ts +4 -4
- package/dist/inspector/tokens/editActions.js +11 -7
- package/dist/inspector/tokens/resolution/cascade.d.ts +1 -5
- package/dist/inspector/tokens/resolution/cascade.js +1 -5
- package/dist/inspector/tokens/resolution/containerQueryEvaluator.d.ts +11 -0
- package/dist/inspector/tokens/resolution/containerQueryEvaluator.js +82 -0
- package/dist/inspector/tokens/resolution/cssomCollector.d.ts +4 -19
- package/dist/inspector/tokens/resolution/cssomCollector.js +186 -122
- package/dist/inspector/tokens/resolution/nestedSelectors.d.ts +2 -0
- package/dist/inspector/tokens/resolution/nestedSelectors.js +63 -0
- package/dist/inspector/tokens/resolution/ruleMatching.d.ts +4 -14
- package/dist/inspector/tokens/resolution/ruleMatching.js +136 -63
- package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +3 -14
- package/dist/inspector/tokens/resolution/selectorSemantics.js +12 -27
- package/dist/inspector/tokens/resolution.d.ts +11 -27
- package/dist/inspector/tokens/resolution.js +105 -181
- package/dist/inspector/tokens/tokenAvailability.d.ts +2 -14
- package/dist/inspector/tokens/tokenAvailability.js +6 -38
- package/dist/inspector/tokens/tokenEdits.d.ts +1 -1
- package/dist/inspector/tokens/tokenEdits.js +1 -1
- package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +0 -1
- package/dist/inspector/tokens/valueSemanticsAdapter.js +18 -2
- package/dist/inspector/ui/AtRuleContext.d.ts +5 -5
- package/dist/inspector/ui/AtRuleContext.js +8 -6
- package/dist/inspector/ui/ControlSurface.d.ts +0 -4
- package/dist/inspector/ui/Disclosure.d.ts +0 -5
- package/dist/inspector/ui/Disclosure.js +0 -4
- package/dist/inspector/ui/InlineStyleWarning.d.ts +0 -1
- package/dist/inspector/ui/InlineStyleWarning.js +2 -2
- package/dist/inspector/ui/InspectorPopover.d.ts +1 -5
- package/dist/inspector/ui/InspectorPopover.js +1 -5
- package/dist/inspector/ui/InspectorStyle.d.ts +8 -0
- package/dist/inspector/ui/InspectorStyle.js +26 -0
- package/dist/inspector/ui/PopoverListbox.d.ts +2 -1
- package/dist/inspector/ui/PopoverListbox.js +3 -3
- package/dist/inspector/ui/SegmentedControl.d.ts +4 -4
- package/dist/inspector/ui/SegmentedControl.js +6 -4
- package/dist/inspector/ui/SideValuesField.d.ts +1 -6
- package/dist/inspector/ui/SideValuesField.js +2 -8
- package/dist/inspector/ui/Toast.d.ts +10 -0
- package/dist/inspector/ui/Toast.js +26 -0
- package/dist/inspector/ui/assets/canvasIllustration.d.ts +2 -0
- package/dist/inspector/ui/assets/canvasIllustration.js +21 -0
- package/dist/inspector/ui/assets/gridIllustration.d.ts +2 -0
- package/dist/inspector/ui/assets/{grid.svg → gridIllustration.js} +3 -2
- package/dist/inspector/ui/atRuleSegments.d.ts +13 -0
- package/dist/inspector/ui/atRuleSegments.js +34 -0
- package/dist/inspector/ui/classNames.d.ts +0 -1
- package/dist/inspector/ui/classNames.js +0 -1
- package/dist/inspector/ui/customCursors.d.ts +11 -0
- package/dist/inspector/ui/customCursors.js +29 -7
- package/dist/inspector/ui/styles.js +25 -25
- package/dist/inspector/workspace/commands.js +1 -2
- package/dist/inspector/workspace/controller.js +20 -2
- package/dist/inspector/workspace/handoff.d.ts +1 -5
- package/dist/inspector/workspace/handoff.js +4 -7
- package/dist/inspector/workspace/sentItems.d.ts +3 -6
- package/dist/inspector/workspace/sentItems.js +6 -24
- package/dist/inspector/workspace/timeline.d.ts +28 -11
- package/dist/inspector/workspace/timeline.js +117 -96
- package/dist/internal/agent-protocol.d.ts +53 -38
- package/dist/internal/agent-protocol.js +151 -42
- package/dist/nudge-ui.mjs +155 -92
- package/dist/project/artifacts.js +24 -21
- package/dist/project/files.d.ts +0 -1
- package/dist/project/files.js +2 -9
- package/dist/project/identity.d.ts +1 -5
- package/dist/project/identity.js +1 -5
- package/dist/project/mcpPackage.d.ts +3 -0
- package/dist/project/mcpPackage.js +55 -0
- package/dist/project/pathPolicy.d.ts +1 -6
- package/dist/project/pathPolicy.js +1 -6
- package/dist/project/tokens.d.ts +2 -12
- package/dist/project/tokens.js +4 -15
- package/dist/transport/editor.d.ts +1 -12
- package/dist/transport/editor.js +2 -13
- package/dist/transport/index.d.ts +0 -5
- package/dist/transport/index.js +0 -5
- package/dist/transport/routes.d.ts +0 -5
- package/dist/transport/routes.js +0 -5
- package/package.json +16 -5
- package/dist/inspector/canvas/measurementProjection.d.ts +0 -8
- package/dist/inspector/canvas/measurementProjection.js +0 -16
- package/dist/inspector/changes/changesLog.d.ts +0 -49
- package/dist/inspector/changes/changesLog.js +0 -255
- package/dist/inspector/changes/draftChanges.d.ts +0 -58
- package/dist/inspector/changes/draftChanges.js +0 -304
- package/dist/inspector/conformance/projection.d.ts +0 -2
- package/dist/inspector/conformance/projection.js +0 -3
- package/dist/inspector/inline-text/textChangeBoundary.d.ts +0 -6
- package/dist/inspector/inline-text/textChangeBoundary.js +0 -1
- package/dist/inspector/overlay/InspectorOverlay.d.ts +0 -5
- package/dist/inspector/overlay/InspectorOverlay.js +0 -332
- package/dist/inspector/overlay/elementSelector.d.ts +0 -1
- package/dist/inspector/overlay/elementSelector.js +0 -111
- package/dist/inspector/sketch/SketchChanges.d.ts +0 -2
- package/dist/inspector/sketch/SketchChanges.js +0 -72
- package/dist/inspector/sketch/SketchEntryButton.d.ts +0 -4
- package/dist/inspector/sketch/SketchEntryButton.js +0 -11
- package/dist/inspector/sketch/SketchLayersPanel.d.ts +0 -2
- package/dist/inspector/sketch/SketchLayersPanel.js +0 -71
- package/dist/inspector/styleEditors/InsetSection.d.ts +0 -15
- package/dist/inspector/styleEditors/InsetSection.js +0 -15
- package/dist/inspector/styleEditors/PositionInsets.d.ts +0 -15
- package/dist/inspector/styleEditors/PositionInsets.js +0 -12
- package/dist/inspector/tokens/TokenDropdown.d.ts +0 -13
- 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 {
|
|
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 =
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
|
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: "
|
|
390
|
+
status: "delivered",
|
|
428
391
|
};
|
|
429
|
-
this.connection = "
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
//
|
|
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 =
|
|
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
|
|
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 !==
|
|
676
|
-
//
|
|
677
|
-
|
|
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
|
|
700
|
-
|
|
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 =
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
+
}
|