nudge-ui 0.2.5 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/agentCommand.d.ts +0 -1
- package/dist/cli/agentCommand.js +0 -1
- package/dist/client.mjs +238 -122
- 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 +13 -64
- package/dist/hosts/projectBridge.d.ts +0 -2
- package/dist/hosts/projectBridge.js +0 -2
- 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 +1 -6
- package/dist/inspector/agent/activity.d.ts +1 -1
- package/dist/inspector/agent/activity.js +1 -1
- package/dist/inspector/agent/client.d.ts +2 -26
- package/dist/inspector/agent/client.js +17 -64
- package/dist/inspector/agent/connectionStatus.d.ts +0 -1
- package/dist/inspector/agent/connectionStatus.js +0 -1
- package/dist/inspector/agent/httpTransport.d.ts +0 -8
- package/dist/inspector/agent/httpTransport.js +21 -39
- package/dist/inspector/agent/protocol.d.ts +1 -10
- package/dist/inspector/agent/protocol.js +1 -9
- package/dist/inspector/agent/verification.d.ts +2 -19
- package/dist/inspector/agent/verification.js +7 -43
- package/dist/inspector/boot.d.ts +3 -1
- package/dist/inspector/boot.js +12 -20
- package/dist/inspector/canvas/AgentActivityOverlay.d.ts +1 -1
- package/dist/inspector/canvas/AgentActivityOverlay.js +1 -1
- package/dist/inspector/canvas/CanvasCard.js +7 -14
- package/dist/inspector/canvas/CanvasElementOverlay.js +117 -50
- package/dist/inspector/canvas/CanvasWorkspace.js +15 -29
- package/dist/inspector/canvas/PageCard.d.ts +0 -1
- package/dist/inspector/canvas/PageCard.js +0 -1
- package/dist/inspector/canvas/SketchToolOptions.d.ts +0 -1
- package/dist/inspector/canvas/SketchToolOptions.js +0 -6
- package/dist/inspector/canvas/ToolOptionsDrawer.d.ts +1 -6
- package/dist/inspector/canvas/ToolOptionsDrawer.js +2 -8
- package/dist/inspector/canvas/activeCanvasDocument.d.ts +0 -2
- 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/canvasFrame.d.ts +2 -6
- package/dist/inspector/canvas/canvasFrame.js +1 -2
- package/dist/inspector/canvas/canvasResize.d.ts +1 -6
- package/dist/inspector/canvas/canvasResize.js +1 -6
- package/dist/inspector/canvas/canvasStore.d.ts +4 -12
- package/dist/inspector/canvas/canvasStore.js +12 -26
- package/dist/inspector/canvas/frameConnection.d.ts +1 -7
- 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 +5 -40
- package/dist/inspector/canvas/frameProtocol.js +1 -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 +1 -6
- package/dist/inspector/canvas/pageSurface.js +1 -6
- package/dist/inspector/canvas/projection.d.ts +4 -25
- package/dist/inspector/canvas/projection.js +22 -72
- package/dist/inspector/canvas/rendererBootstrap.d.ts +8 -1
- package/dist/inspector/canvas/rendererBootstrap.js +6 -14
- package/dist/inspector/canvas/rendererCidIndex.d.ts +0 -5
- package/dist/inspector/canvas/rendererCidIndex.js +0 -5
- package/dist/inspector/canvas/rendererElementSelector.js +29 -27
- package/dist/inspector/canvas/rendererMessageRouter.d.ts +0 -1
- package/dist/inspector/canvas/rendererMessageRouter.js +0 -1
- package/dist/inspector/canvas/rendererSelectionProxy.d.ts +1 -5
- package/dist/inspector/canvas/rendererSelectionProxy.js +2 -7
- package/dist/inspector/canvas/rendererStylesheet.d.ts +0 -1
- package/dist/inspector/canvas/rendererStylesheet.js +9 -2
- package/dist/inspector/canvas/resizeHandleScale.d.ts +1 -10
- package/dist/inspector/canvas/resizeHandleScale.js +1 -10
- package/dist/inspector/canvas/sessionStore.d.ts +1 -7
- package/dist/inspector/canvas/sessionStore.js +21 -34
- package/dist/inspector/canvas/staleChangeDetector.js +1 -4
- 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.js +2 -1
- package/dist/inspector/changes/draftPreview.d.ts +1 -6
- package/dist/inspector/changes/draftPreview.js +15 -30
- package/dist/inspector/changes/editModel.d.ts +3 -13
- package/dist/inspector/changes/editModel.js +1 -2
- package/dist/inspector/changes/managedStyleProjection.js +4 -14
- 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 +4 -20
- 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 +3 -10
- package/dist/inspector/clientManifest.d.ts +17 -6
- package/dist/inspector/clientManifest.js +16 -3
- package/dist/inspector/comments/CommentsOverlay.js +48 -7
- 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 +1 -1
- package/dist/inspector/comments/verification.d.ts +8 -2
- package/dist/inspector/comments/verification.js +18 -10
- package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +8 -0
- package/dist/inspector/componentSemantics/ComponentPropsSection.js +10 -7
- package/dist/inspector/componentSemantics/adapterRegistry.d.ts +2 -9
- package/dist/inspector/componentSemantics/adapterRegistry.js +2 -9
- 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 +1 -9
- package/dist/inspector/componentSemantics/textBinding.js +16 -42
- 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 +7 -21
- package/dist/inspector/drafts/draftStore.js +15 -5
- package/dist/inspector/drafts/model.d.ts +7 -15
- package/dist/inspector/drafts/model.js +0 -2
- package/dist/inspector/drafts/store.d.ts +1 -8
- package/dist/inspector/drafts/store.js +3 -10
- package/dist/inspector/editScope.d.ts +0 -1
- package/dist/inspector/editScope.js +0 -1
- 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 +2 -8
- package/dist/inspector/inline-text/inlineTextEditor.js +26 -79
- package/dist/inspector/inline-text/inlineTextLifecycle.js +1 -6
- package/dist/inspector/inline-text/textEditChange.d.ts +0 -1
- package/dist/inspector/inspection/bridge.d.ts +2 -6
- package/dist/inspector/inspection/bridge.js +4 -12
- package/dist/inspector/inspection/browserCssInspection.d.ts +4 -11
- package/dist/inspector/inspection/browserCssInspection.js +4 -8
- package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +0 -7
- package/dist/inspector/inspection/browserCssInspectionRegistry.js +1 -16
- 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 +5 -21
- package/dist/inspector/iterations/capture.d.ts +0 -1
- package/dist/inspector/iterations/capture.js +4 -9
- package/dist/inspector/iterations/client.d.ts +0 -1
- package/dist/inspector/iterations/client.js +0 -1
- package/dist/inspector/iterations/coordinator.d.ts +0 -1
- package/dist/inspector/iterations/coordinator.js +0 -1
- package/dist/inspector/iterations/prompt.d.ts +0 -1
- package/dist/inspector/iterations/prompt.js +0 -1
- 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 +2 -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 +4 -13
- package/dist/inspector/pageInspector.js +25 -32
- package/dist/inspector/projection/cssEscapes.d.ts +0 -1
- package/dist/inspector/projection/cssEscapes.js +2 -4
- package/dist/inspector/projection/draftProjection.d.ts +2 -14
- package/dist/inspector/projection/draftProjection.js +1 -8
- package/dist/inspector/projection/managedStylesheet.d.ts +1 -7
- package/dist/inspector/projection/managedStylesheet.js +4 -22
- package/dist/inspector/projection/renderedInstance.d.ts +5 -28
- package/dist/inspector/projection/renderedInstance.js +6 -32
- package/dist/inspector/projection/structuralProjection.d.ts +7 -39
- package/dist/inspector/projection/structuralProjection.js +17 -52
- package/dist/inspector/projection/textProjection.d.ts +2 -14
- package/dist/inspector/projection/textProjection.js +17 -70
- 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 -9
- package/dist/inspector/prompt/clipboardHandoff.js +1 -9
- package/dist/inspector/prompt/generatePrompt.d.ts +1 -1
- package/dist/inspector/prompt/generatePrompt.js +10 -25
- package/dist/inspector/prompt/promptSettings.d.ts +0 -3
- package/dist/inspector/prompt/promptSettings.js +0 -3
- 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 +1 -7
- package/dist/inspector/runtime/inspectorStorage.js +1 -6
- package/dist/inspector/runtime/ownedStylesheets.d.ts +2 -8
- package/dist/inspector/runtime/ownedStylesheets.js +2 -8
- package/dist/inspector/runtime/runtimeConfig.d.ts +12 -86
- package/dist/inspector/runtime/runtimeConfig.js +9 -50
- package/dist/inspector/runtime/runtimeIdentityClaims.d.ts +3 -13
- package/dist/inspector/runtime/runtimeIdentityClaims.js +9 -19
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +4 -36
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +7 -40
- package/dist/inspector/runtime/useRuntimeConfig.d.ts +1 -8
- package/dist/inspector/runtime/useRuntimeConfig.js +1 -8
- package/dist/inspector/selection/editScope.d.ts +1 -7
- package/dist/inspector/selection/editScope.js +2 -12
- 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 +5 -5
- package/dist/inspector/shell/ChangesLog.js +3 -4
- package/dist/inspector/shell/CopyPromptButton.d.ts +2 -1
- package/dist/inspector/shell/CopyPromptButton.js +12 -11
- 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.js +26 -48
- 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 +0 -5
- 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 +1 -4
- package/dist/inspector/shell/interactionStatePreview.js +3 -8
- package/dist/inspector/shell/originalPreview.d.ts +1 -6
- package/dist/inspector/shell/originalPreview.js +1 -6
- package/dist/inspector/shell/stateValue.d.ts +1 -2
- package/dist/inspector/shell/stateValue.js +2 -5
- package/dist/inspector/shell/styleState.d.ts +1 -2
- package/dist/inspector/shell/styleState.js +1 -2
- package/dist/inspector/sketch/SketchEditor.js +0 -1
- package/dist/inspector/sketch/SketchFrameOverlay.js +8 -12
- package/dist/inspector/sketch/SketchOverlay.js +5 -6
- package/dist/inspector/sketch/SketchPromptPanel.d.ts +0 -1
- package/dist/inspector/sketch/SketchPromptPanel.js +0 -1
- package/dist/inspector/sketch/SketchWorkspace.js +2 -4
- package/dist/inspector/sketch/capture.d.ts +12 -3
- package/dist/inspector/sketch/capture.js +12 -11
- package/dist/inspector/sketch/copySketch.d.ts +1 -7
- package/dist/inspector/sketch/copySketch.js +2 -11
- package/dist/inspector/sketch/drawingTools.d.ts +1 -3
- package/dist/inspector/sketch/drawingTools.js +1 -2
- package/dist/inspector/sketch/frameHeading.d.ts +1 -7
- package/dist/inspector/sketch/frameHeading.js +1 -8
- package/dist/inspector/sketch/freehand.d.ts +0 -1
- package/dist/inspector/sketch/freehand.js +0 -1
- package/dist/inspector/sketch/geometry.d.ts +1 -6
- package/dist/inspector/sketch/geometry.js +1 -6
- package/dist/inspector/sketch/handoff.js +0 -1
- package/dist/inspector/sketch/history.d.ts +1 -5
- package/dist/inspector/sketch/history.js +1 -4
- package/dist/inspector/sketch/interaction.d.ts +2 -2
- package/dist/inspector/sketch/interaction.js +2 -2
- package/dist/inspector/sketch/model.d.ts +2 -9
- package/dist/inspector/sketch/model.js +2 -19
- package/dist/inspector/sketch/persistence.d.ts +0 -1
- package/dist/inspector/sketch/persistence.js +2 -2
- package/dist/inspector/sketch/raster.d.ts +1 -4
- package/dist/inspector/sketch/raster.js +2 -8
- package/dist/inspector/sketch/store.js +2 -3
- package/dist/inspector/sketch/videoFrames.js +2 -3
- package/dist/inspector/spacing/projection.d.ts +0 -8
- package/dist/inspector/spacing/projection.js +38 -20
- package/dist/inspector/styleEditors/BackgroundEditor.js +1 -1
- package/dist/inspector/styleEditors/BorderEditor.js +1 -6
- 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 +0 -1
- 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 +1 -7
- package/dist/inspector/styleEditors/borderModel.js +2 -11
- 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 +4 -12
- 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 +19 -29
- 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 +1 -1
- package/dist/inspector/tokens/editActions.js +2 -4
- 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 +1 -5
- package/dist/inspector/tokens/resolution/containerQueryEvaluator.js +1 -5
- package/dist/inspector/tokens/resolution/cssomCollector.d.ts +4 -19
- package/dist/inspector/tokens/resolution/cssomCollector.js +151 -122
- package/dist/inspector/tokens/resolution/nestedSelectors.d.ts +1 -5
- package/dist/inspector/tokens/resolution/nestedSelectors.js +1 -5
- package/dist/inspector/tokens/resolution/ruleMatching.d.ts +4 -14
- package/dist/inspector/tokens/resolution/ruleMatching.js +121 -67
- 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 +5 -24
- package/dist/inspector/tokens/resolution.js +16 -71
- package/dist/inspector/tokens/tokenAvailability.d.ts +2 -14
- package/dist/inspector/tokens/tokenAvailability.js +6 -38
- 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/InspectorPopover.d.ts +1 -5
- package/dist/inspector/ui/InspectorPopover.js +1 -5
- 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 +0 -4
- package/dist/inspector/ui/Toast.js +0 -4
- 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 +7 -1
- package/dist/inspector/ui/customCursors.js +2 -6
- package/dist/inspector/ui/styles.js +18 -20
- package/dist/inspector/workspace/controller.js +20 -1
- package/dist/inspector/workspace/handoff.d.ts +1 -5
- package/dist/inspector/workspace/handoff.js +1 -5
- package/dist/inspector/workspace/timeline.d.ts +5 -2
- package/dist/inspector/workspace/timeline.js +0 -1
- package/dist/internal/agent-protocol.d.ts +20 -42
- package/dist/internal/agent-protocol.js +18 -35
- package/dist/nudge-ui.mjs +75 -28
- 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 +1 -6
- package/dist/project/mcpPackage.js +2 -7
- 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 +5 -4
- 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
|
@@ -33,10 +33,6 @@ export declare function prepareHandoff(request: HandoffRequest): Promise<Prepare
|
|
|
33
33
|
export declare function prepareIterationImplementationPrompt(request: HandoffRequest): Promise<string>;
|
|
34
34
|
/** Copies a prompt and records the checkpoint that later clipboard verification reconciles. */
|
|
35
35
|
export declare function copyHandoff(handoff: PreparedHandoff): Promise<void>;
|
|
36
|
-
/**
|
|
37
|
-
* Sends the prompt to a connected agent, or copies it when no agent is given.
|
|
38
|
-
* A failed send without sketches falls back to the clipboard; a failed sketch
|
|
39
|
-
* send is returned so the user can choose to copy without the images.
|
|
40
|
-
*/
|
|
36
|
+
/** Falls back to the clipboard; a failed sketch send returns so the caller can copy without the images. */
|
|
41
37
|
export declare function deliverHandoff(handoff: PreparedHandoff, projectId: string, agent: PromptDispatcher | null): Promise<HandoffOutcome>;
|
|
42
38
|
export {};
|
|
@@ -62,11 +62,7 @@ export async function copyHandoff(handoff) {
|
|
|
62
62
|
recordClipboardHandoff(changes, structuralChanges, owner);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
-
/**
|
|
66
|
-
* Sends the prompt to a connected agent, or copies it when no agent is given.
|
|
67
|
-
* A failed send without sketches falls back to the clipboard; a failed sketch
|
|
68
|
-
* send is returned so the user can choose to copy without the images.
|
|
69
|
-
*/
|
|
65
|
+
/** Falls back to the clipboard; a failed sketch send returns so the caller can copy without the images. */
|
|
70
66
|
export async function deliverHandoff(handoff, projectId, agent) {
|
|
71
67
|
if (agent) {
|
|
72
68
|
const outcome = await dispatchHandoff(handoff, projectId, agent);
|
|
@@ -5,7 +5,11 @@ export interface EditHistoryEntry {
|
|
|
5
5
|
readonly group?: symbol;
|
|
6
6
|
readonly before: DraftContents;
|
|
7
7
|
readonly after: DraftContents;
|
|
8
|
-
|
|
8
|
+
/** Where replay should take the user: the draft's owning frame, when one was known. */
|
|
9
|
+
readonly focus?: {
|
|
10
|
+
readonly draftId: string;
|
|
11
|
+
readonly cardId?: string;
|
|
12
|
+
};
|
|
9
13
|
}
|
|
10
14
|
export interface CanvasHistoryEntry {
|
|
11
15
|
readonly kind: "canvas";
|
|
@@ -33,7 +37,6 @@ export interface Timeline {
|
|
|
33
37
|
createGroup(): (update: () => void) => void;
|
|
34
38
|
}
|
|
35
39
|
export declare function createTimeline(): Timeline;
|
|
36
|
-
/** The Workspace's session timeline. */
|
|
37
40
|
export declare const sessionTimeline: Timeline;
|
|
38
41
|
export declare function recordCanvasChange(entry: Omit<CanvasHistoryEntry, "kind">): void;
|
|
39
42
|
export declare function discardCanvasHistory(cardId: string): void;
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Public, host-neutral contracts shared by the Nudge browser inspector and
|
|
3
|
-
* its local MCP companion.
|
|
4
|
-
*
|
|
5
|
-
* This module deliberately has no Node, browser, MCP SDK, or framework
|
|
6
|
-
* imports. Hosts can use the same validation and message shapes without
|
|
7
|
-
* pulling the companion into a browser bundle.
|
|
8
|
-
*/
|
|
1
|
+
/** Host-neutral contracts shared by the browser inspector and the local MCP companion; no Node, browser, MCP SDK, or framework imports. */
|
|
9
2
|
export declare const AGENT_PROTOCOL_VERSION: 3;
|
|
10
3
|
export declare const AGENT_PROTOCOL_LIMITS: {
|
|
11
4
|
readonly projectId: 256;
|
|
@@ -38,6 +31,18 @@ export declare const AGENT_PROTOCOL_LIMITS: {
|
|
|
38
31
|
readonly agentClientName: 120;
|
|
39
32
|
};
|
|
40
33
|
export type AgentProtocolVersion = typeof AGENT_PROTOCOL_VERSION;
|
|
34
|
+
/** Stable loopback endpoint names shared by the browser client and the MCP bridge. */
|
|
35
|
+
export declare const BRIDGE_ENDPOINTS: {
|
|
36
|
+
readonly health: "/health";
|
|
37
|
+
readonly pair: "/pair";
|
|
38
|
+
readonly takeover: "/takeover";
|
|
39
|
+
readonly events: "/events";
|
|
40
|
+
readonly prompt: "/prompt";
|
|
41
|
+
readonly status: "/status";
|
|
42
|
+
readonly canvasAcknowledgement: "/canvas/ack";
|
|
43
|
+
readonly disconnect: "/disconnect";
|
|
44
|
+
};
|
|
45
|
+
export type BridgeEndpoint = (typeof BRIDGE_ENDPOINTS)[keyof typeof BRIDGE_ENDPOINTS];
|
|
41
46
|
/** A project identity is the pairing boundary for one companion process. */
|
|
42
47
|
export interface AgentProjectIdentity {
|
|
43
48
|
readonly projectId: string;
|
|
@@ -54,14 +59,12 @@ export interface AgentRoute {
|
|
|
54
59
|
}
|
|
55
60
|
/** The owner marker lets the browser remove only groups created by the agent. */
|
|
56
61
|
export type CanvasGroupOwner = "agent" | "user";
|
|
57
|
-
/** A browser-reported comparison group. */
|
|
58
62
|
export interface CanvasGroup {
|
|
59
63
|
readonly id: string;
|
|
60
64
|
readonly label: string;
|
|
61
65
|
readonly owner: CanvasGroupOwner;
|
|
62
66
|
readonly routes: readonly AgentRoute[];
|
|
63
67
|
}
|
|
64
|
-
/** A compact, serialisable Canvas snapshot returned by the browser. */
|
|
65
68
|
export interface CanvasState {
|
|
66
69
|
readonly mode: "inspect" | "canvas";
|
|
67
70
|
readonly groups: readonly CanvasGroup[];
|
|
@@ -287,32 +290,16 @@ export interface ProjectBridgeHandle {
|
|
|
287
290
|
};
|
|
288
291
|
close(): Promise<void>;
|
|
289
292
|
}
|
|
290
|
-
/**
|
|
291
|
-
* The `startProjectBridge` export of `@nudge-ui/mcp/project`. Hosts load it
|
|
292
|
-
* dynamically from the application's own dependencies, so this type is the
|
|
293
|
-
* only compile-time link between the two packages.
|
|
294
|
-
*/
|
|
293
|
+
/** The `@nudge-ui/mcp/project` export; hosts load it dynamically, so this is the only compile-time link between the packages. */
|
|
295
294
|
export type StartProjectBridge = (options: ProjectBridgeStartOptions) => Promise<ProjectBridgeHandle>;
|
|
296
|
-
/**
|
|
297
|
-
* Returns a canonical origin or null. Credentials, paths, and fragments are
|
|
298
|
-
* rejected so the browser cannot broaden the pairing boundary accidentally.
|
|
299
|
-
*/
|
|
295
|
+
/** Canonical origin or null; credentials, paths, and fragments are rejected so pairing cannot broaden accidentally. */
|
|
300
296
|
export declare function canonicalOrigin(value: unknown): string | null;
|
|
301
|
-
/** Returns true only for exact, canonical HTTP(S) origins. */
|
|
302
297
|
export declare function isCanonicalOrigin(value: unknown): value is string;
|
|
303
|
-
/**
|
|
304
|
-
* Checks an origin against an explicit allow-list. An empty allow-list does
|
|
305
|
-
* not mean wildcard access; callers must choose an origin before pairing.
|
|
306
|
-
*/
|
|
298
|
+
/** An empty allow-list is not wildcard access; callers must choose an origin before pairing. */
|
|
307
299
|
export declare function isAllowedOrigin(value: unknown, allowedOrigins: readonly string[]): value is string;
|
|
308
|
-
/**
|
|
309
|
-
* Validates an agent route and ensures it belongs to the paired origin.
|
|
310
|
-
* Fragments are retained because they are useful initial Canvas locations.
|
|
311
|
-
*/
|
|
300
|
+
/** Fragments are retained because they are useful initial Canvas locations. */
|
|
312
301
|
export declare function isSameOriginRoute(value: unknown, origin: string): value is AgentRoute;
|
|
313
|
-
/** Validates and normalises route values for a presentation command. */
|
|
314
302
|
export declare function validateRoutes(value: unknown, origin: string): AgentRoute[];
|
|
315
|
-
/** Validates the fields shared by every companion message. */
|
|
316
303
|
export declare function isProtocolVersion(value: unknown): value is AgentProtocolVersion;
|
|
317
304
|
export declare function isProjectIdentity(value: unknown): value is AgentProjectIdentity;
|
|
318
305
|
export declare function isAgentSketchCaptureMetadata(value: unknown): value is AgentSketchCaptureMetadata;
|
|
@@ -326,21 +313,12 @@ export declare function isCanvasState(value: unknown): value is CanvasState;
|
|
|
326
313
|
export declare function isCanvasGroup(value: unknown): value is CanvasGroup;
|
|
327
314
|
export declare function isCanvasCommand(value: unknown): value is CanvasCommand;
|
|
328
315
|
export declare function isAgentDeliveredPrompt(value: unknown): value is AgentDeliveredPrompt;
|
|
329
|
-
/** A
|
|
316
|
+
/** A successful result never carries an error. */
|
|
330
317
|
export declare function isCanvasCommandResult(value: unknown): value is CanvasCommandResult;
|
|
331
|
-
/** The connection state shown for a pairing, a listener, and the current request. */
|
|
332
318
|
export declare function deriveConnectionState(status: Pick<AgentStatusSnapshot, "listenerActive" | "paired" | "request">): AgentConnectionState;
|
|
333
|
-
/**
|
|
334
|
-
* Decodes a status snapshot from any peer. Unknown fields are dropped and the
|
|
335
|
-
* connection state is recomputed, so a snapshot can never claim a state its
|
|
336
|
-
* own fields contradict.
|
|
337
|
-
*/
|
|
319
|
+
/** Unknown fields are dropped and the connection state is recomputed, so a snapshot cannot claim a state its own fields contradict. */
|
|
338
320
|
export declare function decodeAgentStatusSnapshot(value: unknown): AgentStatusSnapshot | null;
|
|
339
|
-
/**
|
|
340
|
-
* Decodes the event inside a bridge envelope. A Canvas command is passed
|
|
341
|
-
* through as received: the Canvas controller validates it so a malformed
|
|
342
|
-
* command still receives an error acknowledgement instead of a timeout.
|
|
343
|
-
*/
|
|
321
|
+
/** A Canvas command is passed through as received: the Canvas controller validates it so a malformed command still receives an error acknowledgement. */
|
|
344
322
|
export declare function decodeBridgeEvent(value: unknown): BridgeEvent | null;
|
|
345
323
|
/** Decodes a pairing or takeover response for the exact project and origin requested. */
|
|
346
324
|
export declare function decodePairingResponse(value: unknown, expected: Pick<PairingRequest, "projectId" | "origin">): PairingResponse | null;
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Public, host-neutral contracts shared by the Nudge browser inspector and
|
|
3
|
-
* its local MCP companion.
|
|
4
|
-
*
|
|
5
|
-
* This module deliberately has no Node, browser, MCP SDK, or framework
|
|
6
|
-
* imports. Hosts can use the same validation and message shapes without
|
|
7
|
-
* pulling the companion into a browser bundle.
|
|
8
|
-
*/
|
|
1
|
+
/** Host-neutral contracts shared by the browser inspector and the local MCP companion; no Node, browser, MCP SDK, or framework imports. */
|
|
9
2
|
export const AGENT_PROTOCOL_VERSION = 3;
|
|
10
3
|
export const AGENT_PROTOCOL_LIMITS = {
|
|
11
4
|
projectId: 256,
|
|
@@ -37,6 +30,17 @@ export const AGENT_PROTOCOL_LIMITS = {
|
|
|
37
30
|
canvasCardCount: 128,
|
|
38
31
|
agentClientName: 120,
|
|
39
32
|
};
|
|
33
|
+
/** Stable loopback endpoint names shared by the browser client and the MCP bridge. */
|
|
34
|
+
export const BRIDGE_ENDPOINTS = {
|
|
35
|
+
health: "/health",
|
|
36
|
+
pair: "/pair",
|
|
37
|
+
takeover: "/takeover",
|
|
38
|
+
events: "/events",
|
|
39
|
+
prompt: "/prompt",
|
|
40
|
+
status: "/status",
|
|
41
|
+
canvasAcknowledgement: "/canvas/ack",
|
|
42
|
+
disconnect: "/disconnect",
|
|
43
|
+
};
|
|
40
44
|
export const CANVAS_COMMAND_TYPES = [
|
|
41
45
|
"read-state",
|
|
42
46
|
"present-routes",
|
|
@@ -93,10 +97,7 @@ function encodedByteLength(value) {
|
|
|
93
97
|
const padding = value.endsWith("==") ? 2 : value.endsWith("=") ? 1 : 0;
|
|
94
98
|
return Math.max(0, Math.floor(value.length * 3 / 4) - padding);
|
|
95
99
|
}
|
|
96
|
-
/**
|
|
97
|
-
* Returns a canonical origin or null. Credentials, paths, and fragments are
|
|
98
|
-
* rejected so the browser cannot broaden the pairing boundary accidentally.
|
|
99
|
-
*/
|
|
100
|
+
/** Canonical origin or null; credentials, paths, and fragments are rejected so pairing cannot broaden accidentally. */
|
|
100
101
|
export function canonicalOrigin(value) {
|
|
101
102
|
if (!nonEmptyString(value, AGENT_PROTOCOL_LIMITS.origin))
|
|
102
103
|
return null;
|
|
@@ -113,24 +114,17 @@ export function canonicalOrigin(value) {
|
|
|
113
114
|
return null;
|
|
114
115
|
return parsed.origin;
|
|
115
116
|
}
|
|
116
|
-
/** Returns true only for exact, canonical HTTP(S) origins. */
|
|
117
117
|
export function isCanonicalOrigin(value) {
|
|
118
118
|
return canonicalOrigin(value) === value;
|
|
119
119
|
}
|
|
120
|
-
/**
|
|
121
|
-
* Checks an origin against an explicit allow-list. An empty allow-list does
|
|
122
|
-
* not mean wildcard access; callers must choose an origin before pairing.
|
|
123
|
-
*/
|
|
120
|
+
/** An empty allow-list is not wildcard access; callers must choose an origin before pairing. */
|
|
124
121
|
export function isAllowedOrigin(value, allowedOrigins) {
|
|
125
122
|
const origin = canonicalOrigin(value);
|
|
126
123
|
if (!origin || allowedOrigins.length === 0)
|
|
127
124
|
return false;
|
|
128
125
|
return allowedOrigins.some((candidate) => canonicalOrigin(candidate) === origin);
|
|
129
126
|
}
|
|
130
|
-
/**
|
|
131
|
-
* Validates an agent route and ensures it belongs to the paired origin.
|
|
132
|
-
* Fragments are retained because they are useful initial Canvas locations.
|
|
133
|
-
*/
|
|
127
|
+
/** Fragments are retained because they are useful initial Canvas locations. */
|
|
134
128
|
export function isSameOriginRoute(value, origin) {
|
|
135
129
|
if (!isRecord(value) || !hasOnlyKeys(value, ["url", "title", "label"]))
|
|
136
130
|
return false;
|
|
@@ -154,7 +148,6 @@ export function isSameOriginRoute(value, origin) {
|
|
|
154
148
|
return false;
|
|
155
149
|
return true;
|
|
156
150
|
}
|
|
157
|
-
/** Validates and normalises route values for a presentation command. */
|
|
158
151
|
export function validateRoutes(value, origin) {
|
|
159
152
|
if (!Array.isArray(value) || value.length === 0 || value.length > AGENT_PROTOCOL_LIMITS.routeCount) {
|
|
160
153
|
throw new TypeError(`routes must contain between 1 and ${AGENT_PROTOCOL_LIMITS.routeCount} items`);
|
|
@@ -175,7 +168,6 @@ export function validateRoutes(value, origin) {
|
|
|
175
168
|
};
|
|
176
169
|
});
|
|
177
170
|
}
|
|
178
|
-
/** Validates the fields shared by every companion message. */
|
|
179
171
|
export function isProtocolVersion(value) {
|
|
180
172
|
return value === AGENT_PROTOCOL_VERSION;
|
|
181
173
|
}
|
|
@@ -418,7 +410,7 @@ function isCanvasCommandError(value) {
|
|
|
418
410
|
&& nonEmptyString(value.code, 128)
|
|
419
411
|
&& typeof value.message === "string" && value.message.length <= AGENT_PROTOCOL_LIMITS.prompt;
|
|
420
412
|
}
|
|
421
|
-
/** A
|
|
413
|
+
/** A successful result never carries an error. */
|
|
422
414
|
export function isCanvasCommandResult(value) {
|
|
423
415
|
if (!isRecord(value) || !hasOnlyKeys(value, ["commandId", "ok", "state", "group", "error"]))
|
|
424
416
|
return false;
|
|
@@ -428,7 +420,6 @@ export function isCanvasCommandResult(value) {
|
|
|
428
420
|
&& (value.group === undefined || isCanvasGroup(value.group))
|
|
429
421
|
&& (value.error === undefined || (!value.ok && isCanvasCommandError(value.error)));
|
|
430
422
|
}
|
|
431
|
-
/** The connection state shown for a pairing, a listener, and the current request. */
|
|
432
423
|
export function deriveConnectionState(status) {
|
|
433
424
|
if (status.request?.status === "delivered")
|
|
434
425
|
return "delivered";
|
|
@@ -460,11 +451,7 @@ function decodeStatusRequest(value) {
|
|
|
460
451
|
...(error === undefined ? {} : { error }),
|
|
461
452
|
};
|
|
462
453
|
}
|
|
463
|
-
/**
|
|
464
|
-
* Decodes a status snapshot from any peer. Unknown fields are dropped and the
|
|
465
|
-
* connection state is recomputed, so a snapshot can never claim a state its
|
|
466
|
-
* own fields contradict.
|
|
467
|
-
*/
|
|
454
|
+
/** Unknown fields are dropped and the connection state is recomputed, so a snapshot cannot claim a state its own fields contradict. */
|
|
468
455
|
export function decodeAgentStatusSnapshot(value) {
|
|
469
456
|
if (!isRecord(value)
|
|
470
457
|
|| value.protocolVersion !== AGENT_PROTOCOL_VERSION
|
|
@@ -491,11 +478,7 @@ export function decodeAgentStatusSnapshot(value) {
|
|
|
491
478
|
: {}),
|
|
492
479
|
};
|
|
493
480
|
}
|
|
494
|
-
/**
|
|
495
|
-
* Decodes the event inside a bridge envelope. A Canvas command is passed
|
|
496
|
-
* through as received: the Canvas controller validates it so a malformed
|
|
497
|
-
* command still receives an error acknowledgement instead of a timeout.
|
|
498
|
-
*/
|
|
481
|
+
/** A Canvas command is passed through as received: the Canvas controller validates it so a malformed command still receives an error acknowledgement. */
|
|
499
482
|
export function decodeBridgeEvent(value) {
|
|
500
483
|
if (!isRecord(value))
|
|
501
484
|
return null;
|
package/dist/nudge-ui.mjs
CHANGED
|
@@ -6199,7 +6199,7 @@ function isRecord(value) {
|
|
|
6199
6199
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6200
6200
|
}
|
|
6201
6201
|
function isPnpRuntime() {
|
|
6202
|
-
return typeof process.versions.pnp === "string";
|
|
6202
|
+
return "pnp" in process.versions && typeof process.versions.pnp === "string";
|
|
6203
6203
|
}
|
|
6204
6204
|
|
|
6205
6205
|
// src/cli/agentCommand.ts
|
|
@@ -6262,6 +6262,42 @@ function isReservedNudgeUiRoute(pathname) {
|
|
|
6262
6262
|
return pathname === NUDGE_UI_ROUTE_PREFIX.slice(0, -1) || pathname.startsWith(NUDGE_UI_ROUTE_PREFIX);
|
|
6263
6263
|
}
|
|
6264
6264
|
|
|
6265
|
+
// src/inspector/runtime/runtimeConfig.ts
|
|
6266
|
+
function cloneAndFreeze(value, seen = /* @__PURE__ */ new WeakMap()) {
|
|
6267
|
+
if (value === null || typeof value !== "object") return value;
|
|
6268
|
+
const source = value;
|
|
6269
|
+
const existing = seen.get(source);
|
|
6270
|
+
if (existing) return existing;
|
|
6271
|
+
if (Object.isFrozen(value)) {
|
|
6272
|
+
seen.set(source, value);
|
|
6273
|
+
return value;
|
|
6274
|
+
}
|
|
6275
|
+
if (Array.isArray(value)) {
|
|
6276
|
+
const copy2 = [];
|
|
6277
|
+
seen.set(source, copy2);
|
|
6278
|
+
for (const item of value) copy2.push(cloneAndFreeze(item, seen));
|
|
6279
|
+
return Object.freeze(copy2);
|
|
6280
|
+
}
|
|
6281
|
+
const copy = {};
|
|
6282
|
+
seen.set(source, copy);
|
|
6283
|
+
for (const [key, child] of Object.entries(value)) {
|
|
6284
|
+
copy[key] = cloneAndFreeze(child, seen);
|
|
6285
|
+
}
|
|
6286
|
+
return Object.freeze(copy);
|
|
6287
|
+
}
|
|
6288
|
+
var DEFAULT_RUNTIME_CONFIG = cloneAndFreeze({
|
|
6289
|
+
projectId: "/stub/project",
|
|
6290
|
+
host: "vite-react",
|
|
6291
|
+
framework: "React",
|
|
6292
|
+
stylingSystem: "CSS custom properties",
|
|
6293
|
+
capabilities: { canvas: true, componentSemantics: true, domNavigation: false },
|
|
6294
|
+
tokenCatalog: [],
|
|
6295
|
+
tokens: [],
|
|
6296
|
+
tokenDiagnostics: [],
|
|
6297
|
+
tokenGeneration: "",
|
|
6298
|
+
componentContracts: []
|
|
6299
|
+
});
|
|
6300
|
+
|
|
6265
6301
|
// src/transport/editor.ts
|
|
6266
6302
|
function isNudgeUiEditorDocumentRequest(requestHref, method, headers) {
|
|
6267
6303
|
const normalizedMethod = (method ?? "GET").toUpperCase();
|
|
@@ -6285,7 +6321,7 @@ function createNudgeUiEditorDocument() {
|
|
|
6285
6321
|
<head>
|
|
6286
6322
|
<meta charset="utf-8">
|
|
6287
6323
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6288
|
-
<title
|
|
6324
|
+
<title></title>
|
|
6289
6325
|
<style>html,body,#${NUDGE_UI_MOUNT_ID}{width:100%;height:100%;margin:0}body{overflow:hidden}</style>
|
|
6290
6326
|
</head>
|
|
6291
6327
|
<body>
|
|
@@ -6298,6 +6334,20 @@ function createNudgeUiEditorDocument() {
|
|
|
6298
6334
|
// src/transport/index.ts
|
|
6299
6335
|
var NUDGE_UI_MANIFEST_VERSION = 1;
|
|
6300
6336
|
|
|
6337
|
+
// src/inspector/clientManifest.ts
|
|
6338
|
+
var NUDGE_UI_CLIENT_MANIFEST_VERSION = NUDGE_UI_MANIFEST_VERSION;
|
|
6339
|
+
function createNudgeUiClientManifest(input) {
|
|
6340
|
+
return {
|
|
6341
|
+
version: NUDGE_UI_CLIENT_MANIFEST_VERSION,
|
|
6342
|
+
revision: input.revision ?? 0,
|
|
6343
|
+
runtime: input.runtime,
|
|
6344
|
+
...input.agentBridge ? { agentBridge: input.agentBridge } : {},
|
|
6345
|
+
...input.document ? { document: input.document } : {},
|
|
6346
|
+
...input.reload ? { reload: input.reload } : {},
|
|
6347
|
+
...input.inspectAutomatedBrowsers ? { inspectAutomatedBrowsers: true } : {}
|
|
6348
|
+
};
|
|
6349
|
+
}
|
|
6350
|
+
|
|
6301
6351
|
// src/hosts/environment.ts
|
|
6302
6352
|
function readNudgeUiEnvironmentSwitch(env = process.env) {
|
|
6303
6353
|
const value = env.NUDGE_UI?.trim().toLowerCase();
|
|
@@ -6311,17 +6361,14 @@ function automationManifestFields(env = process.env) {
|
|
|
6311
6361
|
|
|
6312
6362
|
// src/hosts/static/manifest.ts
|
|
6313
6363
|
function createStandaloneRuntimeManifest(projectId, tokenSnapshot = emptyTokenSnapshot(), revision2 = 0) {
|
|
6314
|
-
return {
|
|
6315
|
-
version: NUDGE_UI_MANIFEST_VERSION,
|
|
6364
|
+
return createNudgeUiClientManifest({
|
|
6316
6365
|
revision: revision2,
|
|
6317
6366
|
runtime: {
|
|
6318
6367
|
projectId,
|
|
6319
6368
|
host: "static-html",
|
|
6320
6369
|
framework: "HTML",
|
|
6321
6370
|
stylingSystem: "CSS custom properties",
|
|
6322
|
-
// Canvas shares the Vite host's controller/renderer runtime (ADR-0012)
|
|
6323
|
-
// every served document carries the bootstrap, so card iframes boot as
|
|
6324
|
-
// renderers without host-specific code.
|
|
6371
|
+
// Canvas shares the Vite host's controller/renderer runtime (ADR-0012).
|
|
6325
6372
|
capabilities: { canvas: true, componentSemantics: false, domNavigation: true },
|
|
6326
6373
|
tokenCatalog: tokenSnapshot.tokenCatalog,
|
|
6327
6374
|
tokens: tokenSnapshot.tokens,
|
|
@@ -6339,7 +6386,7 @@ function createStandaloneRuntimeManifest(projectId, tokenSnapshot = emptyTokenSn
|
|
|
6339
6386
|
events: ["ready", "reload"]
|
|
6340
6387
|
},
|
|
6341
6388
|
...automationManifestFields()
|
|
6342
|
-
};
|
|
6389
|
+
});
|
|
6343
6390
|
}
|
|
6344
6391
|
function emptyTokenSnapshot() {
|
|
6345
6392
|
return {
|
|
@@ -14320,6 +14367,9 @@ async function directory(root2, id) {
|
|
|
14320
14367
|
}
|
|
14321
14368
|
return join2(actual, id);
|
|
14322
14369
|
}
|
|
14370
|
+
function isRecord2(value) {
|
|
14371
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
14372
|
+
}
|
|
14323
14373
|
async function body(request) {
|
|
14324
14374
|
const chunks = [];
|
|
14325
14375
|
let size = 0;
|
|
@@ -14330,7 +14380,9 @@ async function body(request) {
|
|
|
14330
14380
|
chunks.push(data);
|
|
14331
14381
|
}
|
|
14332
14382
|
const text = Buffer.concat(chunks).toString("utf8");
|
|
14333
|
-
|
|
14383
|
+
if (text.length === 0) return {};
|
|
14384
|
+
const parsed = JSON.parse(text);
|
|
14385
|
+
return isRecord2(parsed) ? parsed : null;
|
|
14334
14386
|
}
|
|
14335
14387
|
function respond(response, status, content, type = "text/plain; charset=utf-8") {
|
|
14336
14388
|
response.writeHead(status, {
|
|
@@ -14367,7 +14419,7 @@ async function handleHtmlArtifactRequest(request, response, root2, transformHtml
|
|
|
14367
14419
|
try {
|
|
14368
14420
|
if (request.method === "POST" && parts.length === 0) {
|
|
14369
14421
|
const input = await body(request);
|
|
14370
|
-
if (!validArtifact(input)) {
|
|
14422
|
+
if (!input || !validArtifact(input)) {
|
|
14371
14423
|
respond(response, 400, "Invalid artifact");
|
|
14372
14424
|
return true;
|
|
14373
14425
|
}
|
|
@@ -14423,27 +14475,26 @@ async function handleHtmlArtifactRequest(request, response, root2, transformHtml
|
|
|
14423
14475
|
}
|
|
14424
14476
|
if (request.method === "PUT" && parts[1] === "document" || request.method === "POST" && parts[1] === "commit") {
|
|
14425
14477
|
const input = await body(request);
|
|
14426
|
-
if (!input
|
|
14478
|
+
if (!input) {
|
|
14427
14479
|
respond(response, 400, "Invalid document");
|
|
14428
14480
|
return true;
|
|
14429
14481
|
}
|
|
14430
|
-
|
|
14431
|
-
if (!isHtmlArtifactRevision(item.expected)) {
|
|
14482
|
+
if (!isHtmlArtifactRevision(input.expected)) {
|
|
14432
14483
|
respond(response, 428, "An expected iteration revision is required");
|
|
14433
14484
|
return true;
|
|
14434
14485
|
}
|
|
14435
|
-
if (
|
|
14486
|
+
if (input.html !== void 0 && typeof input.html !== "string" || request.method === "PUT" && typeof input.html !== "string") {
|
|
14436
14487
|
respond(response, 400, "Invalid document");
|
|
14437
14488
|
return true;
|
|
14438
14489
|
}
|
|
14439
|
-
const expected =
|
|
14490
|
+
const expected = input.expected;
|
|
14440
14491
|
if (!sameRevision(await readRevision(target), expected)) {
|
|
14441
14492
|
respond(response, 409, HTML_ITERATION_CONFLICT);
|
|
14442
14493
|
return true;
|
|
14443
14494
|
}
|
|
14444
|
-
const html = typeof
|
|
14495
|
+
const html = typeof input.html === "string" ? input.html : await readFile(join2(target, "document.html"), "utf8");
|
|
14445
14496
|
const writes = request.method === "POST" ? ["preview.html"] : [];
|
|
14446
|
-
if (typeof
|
|
14497
|
+
if (typeof input.html === "string") writes.push("document.html");
|
|
14447
14498
|
const previewBefore = await readFile(join2(target, "preview.html"));
|
|
14448
14499
|
const temporaryFiles = [];
|
|
14449
14500
|
try {
|
|
@@ -14500,10 +14551,9 @@ async function handleHtmlArtifactRequest(request, response, root2, transformHtml
|
|
|
14500
14551
|
return true;
|
|
14501
14552
|
}
|
|
14502
14553
|
function validArtifact(value) {
|
|
14503
|
-
if (!value
|
|
14504
|
-
const
|
|
14505
|
-
|
|
14506
|
-
return typeof item.id === "string" && ID.test(item.id) && typeof item.sourceUrl === "string" && item.sourceUrl.length < 4096 && typeof item.title === "string" && item.title.length < 512 && typeof item.html === "string" && item.html.length > 0 && !!viewport && typeof viewport.width === "number" && typeof viewport.height === "number";
|
|
14554
|
+
if (!isRecord2(value)) return false;
|
|
14555
|
+
const viewport = value.viewport;
|
|
14556
|
+
return typeof value.id === "string" && ID.test(value.id) && typeof value.sourceUrl === "string" && value.sourceUrl.length < 4096 && typeof value.title === "string" && value.title.length < 512 && typeof value.html === "string" && value.html.length > 0 && isRecord2(viewport) && typeof viewport.width === "number" && typeof viewport.height === "number";
|
|
14507
14557
|
}
|
|
14508
14558
|
|
|
14509
14559
|
// src/hosts/static/server.ts
|
|
@@ -15858,10 +15908,7 @@ function createStandaloneProjectId(rootDirectory) {
|
|
|
15858
15908
|
}
|
|
15859
15909
|
function contentTypeForPath(filePath) {
|
|
15860
15910
|
const extension = extname2(filePath).toLowerCase();
|
|
15861
|
-
return MIME_TYPES2
|
|
15862
|
-
}
|
|
15863
|
-
function isReservedNudgeUiRoute2(pathname) {
|
|
15864
|
-
return pathname === NUDGE_UI_ROUTE_PREFIX.slice(0, -1) || pathname.startsWith(NUDGE_UI_ROUTE_PREFIX);
|
|
15911
|
+
return MIME_TYPES2.get(extension) ?? "application/octet-stream";
|
|
15865
15912
|
}
|
|
15866
15913
|
function canonicalDirectory(directory2) {
|
|
15867
15914
|
const canonical = canonicalDirectoryOrNull(directory2);
|
|
@@ -15944,7 +15991,7 @@ async function handleRequest(input) {
|
|
|
15944
15991
|
sendText(response, 400, "Bad Request");
|
|
15945
15992
|
return;
|
|
15946
15993
|
}
|
|
15947
|
-
if (
|
|
15994
|
+
if (isReservedNudgeUiRoute(decodedPath)) {
|
|
15948
15995
|
await handleNudgeUiRoute(input, decodedPath);
|
|
15949
15996
|
return;
|
|
15950
15997
|
}
|
|
@@ -16100,7 +16147,7 @@ function sendBody(response, status, body2, contentType, headers = {}) {
|
|
|
16100
16147
|
if (response.req?.method !== "HEAD") response.end(body2);
|
|
16101
16148
|
else response.end();
|
|
16102
16149
|
}
|
|
16103
|
-
var MIME_TYPES2 = {
|
|
16150
|
+
var MIME_TYPES2 = new Map(Object.entries({
|
|
16104
16151
|
".avif": "image/avif",
|
|
16105
16152
|
".css": "text/css; charset=utf-8",
|
|
16106
16153
|
".csv": "text/csv; charset=utf-8",
|
|
@@ -16126,7 +16173,7 @@ var MIME_TYPES2 = {
|
|
|
16126
16173
|
".woff": "font/woff",
|
|
16127
16174
|
".woff2": "font/woff2",
|
|
16128
16175
|
".xml": "application/xml; charset=utf-8"
|
|
16129
|
-
};
|
|
16176
|
+
}));
|
|
16130
16177
|
|
|
16131
16178
|
// src/hosts/static/cli.ts
|
|
16132
16179
|
function parseServeArguments(args, currentDirectory = process.cwd()) {
|
|
@@ -49,6 +49,10 @@ async function directory(root, id) {
|
|
|
49
49
|
}
|
|
50
50
|
return join(actual, id);
|
|
51
51
|
}
|
|
52
|
+
function isRecord(value) {
|
|
53
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
54
|
+
}
|
|
55
|
+
/** Both artifact endpoints accept JSON objects only. */
|
|
52
56
|
async function body(request) {
|
|
53
57
|
const chunks = [];
|
|
54
58
|
let size = 0;
|
|
@@ -60,7 +64,10 @@ async function body(request) {
|
|
|
60
64
|
chunks.push(data);
|
|
61
65
|
}
|
|
62
66
|
const text = Buffer.concat(chunks).toString("utf8");
|
|
63
|
-
|
|
67
|
+
if (text.length === 0)
|
|
68
|
+
return {};
|
|
69
|
+
const parsed = JSON.parse(text);
|
|
70
|
+
return isRecord(parsed) ? parsed : null;
|
|
64
71
|
}
|
|
65
72
|
function respond(response, status, content, type = "text/plain; charset=utf-8") {
|
|
66
73
|
response.writeHead(status, {
|
|
@@ -100,7 +107,7 @@ export async function handleHtmlArtifactRequest(request, response, root, transfo
|
|
|
100
107
|
try {
|
|
101
108
|
if (request.method === "POST" && parts.length === 0) {
|
|
102
109
|
const input = await body(request);
|
|
103
|
-
if (!validArtifact(input)) {
|
|
110
|
+
if (!input || !validArtifact(input)) {
|
|
104
111
|
respond(response, 400, "Invalid artifact");
|
|
105
112
|
return true;
|
|
106
113
|
}
|
|
@@ -159,28 +166,27 @@ export async function handleHtmlArtifactRequest(request, response, root, transfo
|
|
|
159
166
|
if ((request.method === "PUT" && parts[1] === "document")
|
|
160
167
|
|| (request.method === "POST" && parts[1] === "commit")) {
|
|
161
168
|
const input = await body(request);
|
|
162
|
-
if (!input
|
|
169
|
+
if (!input) {
|
|
163
170
|
respond(response, 400, "Invalid document");
|
|
164
171
|
return true;
|
|
165
172
|
}
|
|
166
|
-
|
|
167
|
-
if (!isHtmlArtifactRevision(item.expected)) {
|
|
173
|
+
if (!isHtmlArtifactRevision(input.expected)) {
|
|
168
174
|
respond(response, 428, "An expected iteration revision is required");
|
|
169
175
|
return true;
|
|
170
176
|
}
|
|
171
|
-
if ((
|
|
172
|
-
|| (request.method === "PUT" && typeof
|
|
177
|
+
if ((input.html !== undefined && typeof input.html !== "string")
|
|
178
|
+
|| (request.method === "PUT" && typeof input.html !== "string")) {
|
|
173
179
|
respond(response, 400, "Invalid document");
|
|
174
180
|
return true;
|
|
175
181
|
}
|
|
176
|
-
const expected =
|
|
182
|
+
const expected = input.expected;
|
|
177
183
|
if (!sameRevision(await readRevision(target), expected)) {
|
|
178
184
|
respond(response, 409, HTML_ITERATION_CONFLICT);
|
|
179
185
|
return true;
|
|
180
186
|
}
|
|
181
|
-
const html = typeof
|
|
187
|
+
const html = typeof input.html === "string" ? input.html : await readFile(join(target, "document.html"), "utf8");
|
|
182
188
|
const writes = request.method === "POST" ? ["preview.html"] : [];
|
|
183
|
-
if (typeof
|
|
189
|
+
if (typeof input.html === "string")
|
|
184
190
|
writes.push("document.html");
|
|
185
191
|
const previewBefore = await readFile(join(target, "preview.html"));
|
|
186
192
|
const temporaryFiles = [];
|
|
@@ -190,9 +196,7 @@ export async function handleHtmlArtifactRequest(request, response, root, transfo
|
|
|
190
196
|
temporaryFiles.push({ temporary, destination: join(target, file) });
|
|
191
197
|
await writeFile(temporary, html);
|
|
192
198
|
}
|
|
193
|
-
//
|
|
194
|
-
// External tools must finish their file writes before handoff; they do
|
|
195
|
-
// not participate in this process's request queue.
|
|
199
|
+
// External writers do not join this request queue, so the final check and replacements stay in one critical section.
|
|
196
200
|
const latest = {
|
|
197
201
|
document: revision(readFileSync(join(target, "document.html"))),
|
|
198
202
|
preview: revision(readFileSync(join(target, "preview.html"))),
|
|
@@ -241,13 +245,12 @@ export async function handleHtmlArtifactRequest(request, response, root, transfo
|
|
|
241
245
|
return true;
|
|
242
246
|
}
|
|
243
247
|
function validArtifact(value) {
|
|
244
|
-
if (!value
|
|
248
|
+
if (!isRecord(value))
|
|
245
249
|
return false;
|
|
246
|
-
const
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
&& typeof
|
|
250
|
-
&& typeof
|
|
251
|
-
&& typeof
|
|
252
|
-
&& !!viewport && typeof viewport.width === "number" && typeof viewport.height === "number";
|
|
250
|
+
const viewport = value.viewport;
|
|
251
|
+
return typeof value.id === "string" && ID.test(value.id)
|
|
252
|
+
&& typeof value.sourceUrl === "string" && value.sourceUrl.length < 4096
|
|
253
|
+
&& typeof value.title === "string" && value.title.length < 512
|
|
254
|
+
&& typeof value.html === "string" && value.html.length > 0
|
|
255
|
+
&& isRecord(viewport) && typeof viewport.width === "number" && typeof viewport.height === "number";
|
|
253
256
|
}
|
package/dist/project/files.d.ts
CHANGED
|
@@ -15,5 +15,4 @@ export interface ProjectFileWatcher {
|
|
|
15
15
|
start(): Promise<void>;
|
|
16
16
|
close(): Promise<void>;
|
|
17
17
|
}
|
|
18
|
-
/** Creates a watcher that starts and stops explicitly with the server. */
|
|
19
18
|
export declare function createProjectFileWatcher(options: ProjectFileWatcherOptions): ProjectFileWatcher;
|
package/dist/project/files.js
CHANGED
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Node's recursive `fs.watch` is not available on every supported platform, so
|
|
3
|
-
* this watches each directory and adds watches for ones created later. The
|
|
4
|
-
* public surface is lifecycle and settled batches; debounce and symlink
|
|
5
|
-
* confinement stay internal.
|
|
6
|
-
*/
|
|
1
|
+
/** Node's recursive `fs.watch` is not available on every supported platform, so directories are watched individually. */
|
|
7
2
|
import { watch } from "node:fs";
|
|
8
3
|
import { readdir } from "node:fs/promises";
|
|
9
4
|
import { realpathSync, statSync } from "node:fs";
|
|
10
5
|
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
11
6
|
import { isExcludedDirectoryName, isSensitiveProjectPath } from "./pathPolicy.js";
|
|
12
7
|
export { isExcludedDirectoryName, isSensitiveProjectPath } from "./pathPolicy.js";
|
|
13
|
-
/** Creates a watcher that starts and stops explicitly with the server. */
|
|
14
8
|
export function createProjectFileWatcher(options) {
|
|
15
9
|
const rootDirectory = realpathSync(resolve(options.rootDirectory));
|
|
16
10
|
const debounceMs = Math.max(0, options.debounceMs ?? 60);
|
|
@@ -85,8 +79,7 @@ export function createProjectFileWatcher(options) {
|
|
|
85
79
|
return;
|
|
86
80
|
}
|
|
87
81
|
watches.set(directory, { directory, canonicalDirectory, watcher: directoryWatcher });
|
|
88
|
-
// Watch before scanning so events during the async walk are not missed.
|
|
89
|
-
// run serially and re-check `closed` after every await, so none leak past close().
|
|
82
|
+
// Watch before scanning so events during the async walk are not missed.
|
|
90
83
|
pendingScans += 1;
|
|
91
84
|
scanQueue = scanQueue
|
|
92
85
|
.then(() => scanSubdirectories(directory))
|