nudge-ui 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -0
- package/bin/nudge-ui.mjs +7 -0
- package/dist/LICENSE +21 -0
- package/dist/client.mjs +261 -0
- package/dist/compiler/ast.d.ts +18 -0
- package/dist/compiler/ast.js +75 -0
- package/dist/compiler/componentContractTypes.d.ts +19 -0
- package/dist/compiler/componentContractTypes.js +1 -0
- package/dist/compiler/componentContracts.d.ts +2 -0
- package/dist/compiler/componentContracts.js +260 -0
- package/dist/compiler/componentInstrumentation.d.ts +32 -0
- package/dist/compiler/componentInstrumentation.js +140 -0
- package/dist/compiler/componentPolicyResolution.d.ts +71 -0
- package/dist/compiler/componentPolicyResolution.js +388 -0
- package/dist/compiler/index.d.ts +9 -0
- package/dist/compiler/index.js +9 -0
- package/dist/compiler/packageComponentContracts.d.ts +32 -0
- package/dist/compiler/packageComponentContracts.js +308 -0
- package/dist/compiler/reactComponentProtocols.d.ts +145 -0
- package/dist/compiler/reactComponentProtocols.js +47 -0
- package/dist/compiler/reactIdentity.d.ts +15 -0
- package/dist/compiler/reactIdentity.js +339 -0
- package/dist/compiler/sourcePaths.d.ts +12 -0
- package/dist/compiler/sourcePaths.js +27 -0
- package/dist/css/dialects/index.d.ts +62 -0
- package/dist/css/dialects/index.js +103 -0
- package/dist/css/dialects/tailwind.d.ts +46 -0
- package/dist/css/dialects/tailwind.js +119 -0
- package/dist/css/dialects/vanillaExtract.d.ts +20 -0
- package/dist/css/dialects/vanillaExtract.js +32 -0
- package/dist/css/index.d.ts +10 -0
- package/dist/css/index.js +10 -0
- package/dist/css/model/index.d.ts +190 -0
- package/dist/css/model/index.js +10 -0
- package/dist/css/token-inventory/index.d.ts +26 -0
- package/dist/css/token-inventory/index.js +24 -0
- package/dist/css/token-inventory/inventory.d.ts +8 -0
- package/dist/css/token-inventory/inventory.js +421 -0
- package/dist/css/token-inventory/parseStylesheet.d.ts +16 -0
- package/dist/css/token-inventory/parseStylesheet.js +155 -0
- package/dist/css/token-inventory/policy.d.ts +47 -0
- package/dist/css/token-inventory/policy.js +50 -0
- package/dist/css/token-inventory/types.d.ts +97 -0
- package/dist/css/token-inventory/types.js +1 -0
- package/dist/css/value-semantics/borderSemantics.d.ts +28 -0
- package/dist/css/value-semantics/borderSemantics.js +91 -0
- package/dist/css/value-semantics/boxSemantics.d.ts +37 -0
- package/dist/css/value-semantics/boxSemantics.js +71 -0
- package/dist/css/value-semantics/colorSemantics.d.ts +99 -0
- package/dist/css/value-semantics/colorSemantics.js +526 -0
- package/dist/css/value-semantics/cssSyntax.d.ts +19 -0
- package/dist/css/value-semantics/cssSyntax.js +111 -0
- package/dist/css/value-semantics/fontSemantics.d.ts +35 -0
- package/dist/css/value-semantics/fontSemantics.js +131 -0
- package/dist/css/value-semantics/index.d.ts +20 -0
- package/dist/css/value-semantics/index.js +15 -0
- package/dist/css/value-semantics/propertyPolicy.d.ts +118 -0
- package/dist/css/value-semantics/propertyPolicy.js +356 -0
- package/dist/css/value-semantics/stringMaps.d.ts +2 -0
- package/dist/css/value-semantics/stringMaps.js +1 -0
- package/dist/css/value-semantics/structuredValues.d.ts +64 -0
- package/dist/css/value-semantics/structuredValues.js +250 -0
- package/dist/css/value-semantics/tokenInterpretation.d.ts +90 -0
- package/dist/css/value-semantics/tokenInterpretation.js +193 -0
- package/dist/css/virtual-design-tokens.d.ts +17 -0
- package/dist/hosts/astro/astroRuntimeConfig.d.ts +12 -0
- package/dist/hosts/astro/astroRuntimeConfig.js +26 -0
- package/dist/hosts/astro/clientAsset.d.ts +12 -0
- package/dist/hosts/astro/clientAsset.js +51 -0
- package/dist/hosts/astro/clientTransport.d.ts +3 -0
- package/dist/hosts/astro/clientTransport.js +57 -0
- package/dist/hosts/astro/index.d.ts +3 -0
- package/dist/hosts/astro/index.js +2 -0
- package/dist/hosts/astro/integration.d.ts +35 -0
- package/dist/hosts/astro/integration.js +96 -0
- package/dist/hosts/astro/middleware.d.ts +13 -0
- package/dist/hosts/astro/middleware.js +22 -0
- package/dist/hosts/astro/projectContext.d.ts +11 -0
- package/dist/hosts/astro/projectContext.js +34 -0
- package/dist/hosts/astro/responseInstrumentation.d.ts +41 -0
- package/dist/hosts/astro/responseInstrumentation.js +80 -0
- package/dist/hosts/next/index.d.ts +4 -0
- package/dist/hosts/next/index.js +7 -0
- package/dist/hosts/next/loader.d.ts +66 -0
- package/dist/hosts/next/loader.js +346 -0
- package/dist/hosts/next/loaders/identity-loader.cjs +228257 -0
- package/dist/hosts/next/loaders/loader-plugin.cjs +228257 -0
- package/dist/hosts/next/manifest.d.ts +38 -0
- package/dist/hosts/next/manifest.js +30 -0
- package/dist/hosts/next/mount.d.ts +12 -0
- package/dist/hosts/next/mount.js +23 -0
- package/dist/hosts/next/repositoryScope.d.ts +20 -0
- package/dist/hosts/next/repositoryScope.js +33 -0
- package/dist/hosts/next/sidecar.d.ts +27 -0
- package/dist/hosts/next/sidecar.js +526 -0
- package/dist/hosts/next/wrapper.d.ts +67 -0
- package/dist/hosts/next/wrapper.js +310 -0
- package/dist/hosts/static/cli.d.ts +12 -0
- package/dist/hosts/static/cli.js +77 -0
- package/dist/hosts/static/html/bootstrap.d.ts +27 -0
- package/dist/hosts/static/html/bootstrap.js +93 -0
- package/dist/hosts/static/index.d.ts +4 -0
- package/dist/hosts/static/index.js +4 -0
- package/dist/hosts/static/manifest.d.ts +18 -0
- package/dist/hosts/static/manifest.js +51 -0
- package/dist/hosts/static/server.d.ts +72 -0
- package/dist/hosts/static/server.js +554 -0
- package/dist/hosts/vite/index.d.ts +20 -0
- package/dist/hosts/vite/index.js +48 -0
- package/dist/hosts/vite/react.d.ts +67 -0
- package/dist/hosts/vite/react.js +231 -0
- package/dist/hosts/vite/tokens/activeStylesheets.d.ts +28 -0
- package/dist/hosts/vite/tokens/activeStylesheets.js +70 -0
- package/dist/hosts/vite/tokens/fileMap.d.ts +2 -0
- package/dist/hosts/vite/tokens/fileMap.js +1 -0
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +46 -0
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +104 -0
- package/dist/hosts/vite/virtual/design-tokens.d.ts +9 -0
- package/dist/hosts/vite/virtual/design-tokens.js +7 -0
- package/dist/hosts/vite/virtual-design-tokens.d.ts +1 -0
- package/dist/hosts/vite/vite.d.ts +62 -0
- package/dist/hosts/vite/vite.js +854 -0
- package/dist/html/dom.d.ts +13 -0
- package/dist/html/dom.js +46 -0
- package/dist/html/identity.d.ts +40 -0
- package/dist/html/identity.js +196 -0
- package/dist/html/insertions.d.ts +26 -0
- package/dist/html/insertions.js +59 -0
- package/dist/inspector/agent/McpConnectionDialog.d.ts +26 -0
- package/dist/inspector/agent/McpConnectionDialog.js +135 -0
- package/dist/inspector/agent/client.d.ts +98 -0
- package/dist/inspector/agent/client.js +728 -0
- package/dist/inspector/agent/connectionStatus.d.ts +13 -0
- package/dist/inspector/agent/connectionStatus.js +35 -0
- package/dist/inspector/agent/httpTransport.d.ts +21 -0
- package/dist/inspector/agent/httpTransport.js +347 -0
- package/dist/inspector/agent/protocol.d.ts +95 -0
- package/dist/inspector/agent/protocol.js +9 -0
- package/dist/inspector/agent/verification.d.ts +39 -0
- package/dist/inspector/agent/verification.js +207 -0
- package/dist/inspector/canvas/CanvasCard.d.ts +10 -0
- package/dist/inspector/canvas/CanvasCard.js +275 -0
- package/dist/inspector/canvas/CanvasElementOverlay.d.ts +2 -0
- package/dist/inspector/canvas/CanvasElementOverlay.js +301 -0
- package/dist/inspector/canvas/CanvasWorkspace.d.ts +2 -0
- package/dist/inspector/canvas/CanvasWorkspace.js +301 -0
- package/dist/inspector/canvas/LockedWorkspaceNotice.d.ts +6 -0
- package/dist/inspector/canvas/LockedWorkspaceNotice.js +17 -0
- package/dist/inspector/canvas/StaleChangeIndicator.d.ts +7 -0
- package/dist/inspector/canvas/StaleChangeIndicator.js +43 -0
- package/dist/inspector/canvas/agentPresentation.d.ts +87 -0
- package/dist/inspector/canvas/agentPresentation.js +421 -0
- package/dist/inspector/canvas/canvasGestures.d.ts +12 -0
- package/dist/inspector/canvas/canvasGestures.js +21 -0
- package/dist/inspector/canvas/canvasStore.d.ts +108 -0
- package/dist/inspector/canvas/canvasStore.js +448 -0
- package/dist/inspector/canvas/frameProtocol.d.ts +231 -0
- package/dist/inspector/canvas/frameProtocol.js +165 -0
- package/dist/inspector/canvas/linkEligibility.d.ts +8 -0
- package/dist/inspector/canvas/linkEligibility.js +68 -0
- package/dist/inspector/canvas/measurementProjection.d.ts +8 -0
- package/dist/inspector/canvas/measurementProjection.js +16 -0
- package/dist/inspector/canvas/normalizeUrl.d.ts +7 -0
- package/dist/inspector/canvas/normalizeUrl.js +27 -0
- package/dist/inspector/canvas/projection.d.ts +41 -0
- package/dist/inspector/canvas/projection.js +232 -0
- package/dist/inspector/canvas/rendererBootstrap.d.ts +4 -0
- package/dist/inspector/canvas/rendererBootstrap.js +410 -0
- package/dist/inspector/canvas/rendererCidIndex.d.ts +11 -0
- package/dist/inspector/canvas/rendererCidIndex.js +21 -0
- package/dist/inspector/canvas/rendererElementSelector.d.ts +2 -0
- package/dist/inspector/canvas/rendererElementSelector.js +378 -0
- package/dist/inspector/canvas/rendererSelectionProxy.d.ts +2 -0
- package/dist/inspector/canvas/rendererSelectionProxy.js +61 -0
- package/dist/inspector/canvas/rendererStylesheet.d.ts +16 -0
- package/dist/inspector/canvas/rendererStylesheet.js +221 -0
- package/dist/inspector/canvas/resizeHandleScale.d.ts +13 -0
- package/dist/inspector/canvas/resizeHandleScale.js +20 -0
- package/dist/inspector/canvas/roleDetection.d.ts +5 -0
- package/dist/inspector/canvas/roleDetection.js +21 -0
- package/dist/inspector/canvas/sessionStore.d.ts +71 -0
- package/dist/inspector/canvas/sessionStore.js +453 -0
- package/dist/inspector/canvas/staleChangeDetector.d.ts +11 -0
- package/dist/inspector/canvas/staleChangeDetector.js +217 -0
- package/dist/inspector/canvas/toolbarScale.d.ts +7 -0
- package/dist/inspector/canvas/toolbarScale.js +11 -0
- package/dist/inspector/canvas/workspaceLease.d.ts +26 -0
- package/dist/inspector/canvas/workspaceLease.js +214 -0
- package/dist/inspector/changes/changesLog.d.ts +46 -0
- package/dist/inspector/changes/changesLog.js +209 -0
- package/dist/inspector/changes/codecs.d.ts +98 -0
- package/dist/inspector/changes/codecs.js +389 -0
- package/dist/inspector/changes/editModel.d.ts +74 -0
- package/dist/inspector/changes/editModel.js +120 -0
- package/dist/inspector/changes/managedStyleProjection.d.ts +6 -0
- package/dist/inspector/changes/managedStyleProjection.js +109 -0
- package/dist/inspector/changes/model.d.ts +13 -0
- package/dist/inspector/changes/model.js +163 -0
- package/dist/inspector/changes/presentation.d.ts +14 -0
- package/dist/inspector/changes/presentation.js +81 -0
- package/dist/inspector/changes/previewDiagnostics.d.ts +39 -0
- package/dist/inspector/changes/previewDiagnostics.js +172 -0
- package/dist/inspector/changes/structuralTypes.d.ts +35 -0
- package/dist/inspector/changes/structuralTypes.js +1 -0
- package/dist/inspector/changes/types.d.ts +76 -0
- package/dist/inspector/changes/types.js +16 -0
- package/dist/inspector/changes/workspaceChanges.d.ts +43 -0
- package/dist/inspector/changes/workspaceChanges.js +239 -0
- package/dist/inspector/clientManifest.d.ts +24 -0
- package/dist/inspector/clientManifest.js +69 -0
- package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +5 -0
- package/dist/inspector/componentSemantics/ComponentPropsSection.js +44 -0
- package/dist/inspector/componentSemantics/adapterRegistry.d.ts +11 -0
- package/dist/inspector/componentSemantics/adapterRegistry.js +75 -0
- package/dist/inspector/componentSemantics/boundaries.d.ts +2 -0
- package/dist/inspector/componentSemantics/boundaries.js +10 -0
- package/dist/inspector/componentSemantics/changeAction.d.ts +3 -0
- package/dist/inspector/componentSemantics/changeAction.js +6 -0
- package/dist/inspector/componentSemantics/changeModel.d.ts +8 -0
- package/dist/inspector/componentSemantics/changeModel.js +60 -0
- package/dist/inspector/componentSemantics/index.d.ts +4 -0
- package/dist/inspector/componentSemantics/index.js +2 -0
- package/dist/inspector/componentSemantics/reactRuntime.d.ts +10 -0
- package/dist/inspector/componentSemantics/reactRuntime.js +186 -0
- package/dist/inspector/componentSemantics/runtimeBridge.d.ts +25 -0
- package/dist/inspector/componentSemantics/runtimeBridge.js +161 -0
- package/dist/inspector/componentSemantics/runtimeTypes.d.ts +2 -0
- package/dist/inspector/componentSemantics/runtimeTypes.js +1 -0
- package/dist/inspector/componentSemantics/textBinding.d.ts +69 -0
- package/dist/inspector/componentSemantics/textBinding.js +514 -0
- package/dist/inspector/componentSemantics/types.d.ts +96 -0
- package/dist/inspector/componentSemantics/types.js +5 -0
- package/dist/inspector/conformance/borderCases.d.ts +7 -0
- package/dist/inspector/conformance/borderCases.js +428 -0
- package/dist/inspector/conformance/colorCases.d.ts +8 -0
- package/dist/inspector/conformance/colorCases.js +470 -0
- package/dist/inspector/conformance/fixture.d.ts +68 -0
- package/dist/inspector/conformance/fixture.js +153 -0
- package/dist/inspector/conformance/projection.d.ts +2 -0
- package/dist/inspector/conformance/projection.js +3 -0
- package/dist/inspector/conformance/spacingCases.d.ts +6 -0
- package/dist/inspector/conformance/spacingCases.js +417 -0
- package/dist/inspector/conformance/typographyCases.d.ts +7 -0
- package/dist/inspector/conformance/typographyCases.js +174 -0
- package/dist/inspector/editScope.d.ts +4 -0
- package/dist/inspector/editScope.js +5 -0
- package/dist/inspector/index.d.ts +20 -0
- package/dist/inspector/index.js +236 -0
- package/dist/inspector/inline-text/inlineTextEditor.d.ts +74 -0
- package/dist/inspector/inline-text/inlineTextEditor.js +1207 -0
- package/dist/inspector/inline-text/inlineTextLifecycle.d.ts +2 -0
- package/dist/inspector/inline-text/inlineTextLifecycle.js +17 -0
- package/dist/inspector/inline-text/textChangeBoundary.d.ts +6 -0
- package/dist/inspector/inline-text/textChangeBoundary.js +1 -0
- package/dist/inspector/inspection/bridge.d.ts +72 -0
- package/dist/inspector/inspection/bridge.js +134 -0
- package/dist/inspector/inspection/browserCssInspection.d.ts +74 -0
- package/dist/inspector/inspection/browserCssInspection.js +317 -0
- package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +12 -0
- package/dist/inspector/inspection/browserCssInspectionRegistry.js +66 -0
- package/dist/inspector/inspection/selectionProperty.d.ts +32 -0
- package/dist/inspector/inspection/selectionProperty.js +33 -0
- package/dist/inspector/inspection/useBrowserCssInspection.d.ts +20 -0
- package/dist/inspector/inspection/useBrowserCssInspection.js +159 -0
- package/dist/inspector/overlay/DropGuideOverlay.d.ts +17 -0
- package/dist/inspector/overlay/DropGuideOverlay.js +17 -0
- package/dist/inspector/overlay/InspectorOverlay.d.ts +5 -0
- package/dist/inspector/overlay/InspectorOverlay.js +328 -0
- package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +19 -0
- package/dist/inspector/overlay/MeasurementGuideOverlay.js +40 -0
- package/dist/inspector/overlay/clickPolicy.d.ts +7 -0
- package/dist/inspector/overlay/clickPolicy.js +13 -0
- package/dist/inspector/overlay/dropGuide.d.ts +22 -0
- package/dist/inspector/overlay/dropGuide.js +48 -0
- package/dist/inspector/overlay/elementSelector.d.ts +1 -0
- package/dist/inspector/overlay/elementSelector.js +100 -0
- package/dist/inspector/overlay/frameThrottle.d.ts +10 -0
- package/dist/inspector/overlay/frameThrottle.js +38 -0
- package/dist/inspector/overlay/interactionStyles.d.ts +3 -0
- package/dist/inspector/overlay/interactionStyles.js +70 -0
- package/dist/inspector/overlay/measurementGeometry.d.ts +25 -0
- package/dist/inspector/overlay/measurementGeometry.js +104 -0
- package/dist/inspector/overlay/overlayGeometry.d.ts +40 -0
- package/dist/inspector/overlay/overlayGeometry.js +59 -0
- package/dist/inspector/overlay/selectedGeometry.d.ts +7 -0
- package/dist/inspector/overlay/selectedGeometry.js +51 -0
- package/dist/inspector/overlay/structuralGestures.d.ts +28 -0
- package/dist/inspector/overlay/structuralGestures.js +180 -0
- package/dist/inspector/projection/cssEscapes.d.ts +3 -0
- package/dist/inspector/projection/cssEscapes.js +20 -0
- package/dist/inspector/projection/managedStylesheet.d.ts +33 -0
- package/dist/inspector/projection/managedStylesheet.js +240 -0
- package/dist/inspector/projection/renderedInstance.d.ts +56 -0
- package/dist/inspector/projection/renderedInstance.js +306 -0
- package/dist/inspector/projection/structuralProjection.d.ts +93 -0
- package/dist/inspector/projection/structuralProjection.js +560 -0
- package/dist/inspector/projection/structuralProjectionBoundary.d.ts +5 -0
- package/dist/inspector/projection/structuralProjectionBoundary.js +65 -0
- package/dist/inspector/projection/textProjection.d.ts +53 -0
- package/dist/inspector/projection/textProjection.js +705 -0
- package/dist/inspector/projection/workspaceProjection.d.ts +43 -0
- package/dist/inspector/projection/workspaceProjection.js +58 -0
- package/dist/inspector/prompt/PromptSettingsDialog.d.ts +15 -0
- package/dist/inspector/prompt/PromptSettingsDialog.js +17 -0
- package/dist/inspector/prompt/clipboardHandoff.d.ts +34 -0
- package/dist/inspector/prompt/clipboardHandoff.js +212 -0
- package/dist/inspector/prompt/copyToClipboard.d.ts +1 -0
- package/dist/inspector/prompt/copyToClipboard.js +34 -0
- package/dist/inspector/prompt/detectFramework.d.ts +6 -0
- package/dist/inspector/prompt/detectFramework.js +4 -0
- package/dist/inspector/prompt/generatePrompt.d.ts +7 -0
- package/dist/inspector/prompt/generatePrompt.js +391 -0
- package/dist/inspector/prompt/promptSettings.d.ts +8 -0
- package/dist/inspector/prompt/promptSettings.js +28 -0
- package/dist/inspector/runtime/devFlag.d.ts +28 -0
- package/dist/inspector/runtime/devFlag.js +50 -0
- package/dist/inspector/runtime/documentStylesheetOrder.d.ts +19 -0
- package/dist/inspector/runtime/documentStylesheetOrder.js +89 -0
- package/dist/inspector/runtime/domRealm.d.ts +4 -0
- package/dist/inspector/runtime/domRealm.js +11 -0
- package/dist/inspector/runtime/runtimeConfig.d.ts +119 -0
- package/dist/inspector/runtime/runtimeConfig.js +276 -0
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +32 -0
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +149 -0
- package/dist/inspector/runtime/useRuntimeConfig.d.ts +10 -0
- package/dist/inspector/runtime/useRuntimeConfig.js +13 -0
- package/dist/inspector/selection/editScope.d.ts +32 -0
- package/dist/inspector/selection/editScope.js +140 -0
- package/dist/inspector/selection/editTarget.d.ts +8 -0
- package/dist/inspector/selection/editTarget.js +11 -0
- package/dist/inspector/selection/hierarchy.d.ts +7 -0
- package/dist/inspector/selection/hierarchy.js +42 -0
- package/dist/inspector/selection/resolveSelection.d.ts +10 -0
- package/dist/inspector/selection/resolveSelection.js +60 -0
- package/dist/inspector/selection/selectionStore.d.ts +41 -0
- package/dist/inspector/selection/selectionStore.js +262 -0
- package/dist/inspector/selection/selectionTarget.d.ts +5 -0
- package/dist/inspector/selection/selectionTarget.js +50 -0
- package/dist/inspector/selection/sourceSite.d.ts +2 -0
- package/dist/inspector/selection/sourceSite.js +12 -0
- package/dist/inspector/selection/styleSelection.d.ts +22 -0
- package/dist/inspector/selection/styleSelection.js +104 -0
- package/dist/inspector/session/index.d.ts +3 -0
- package/dist/inspector/session/index.js +2 -0
- package/dist/inspector/session/lifecycle.d.ts +22 -0
- package/dist/inspector/session/lifecycle.js +63 -0
- package/dist/inspector/session/sessionContext.d.ts +21 -0
- package/dist/inspector/session/sessionContext.js +28 -0
- package/dist/inspector/session/sessionFactory.d.ts +29 -0
- package/dist/inspector/session/sessionFactory.js +73 -0
- package/dist/inspector/settings/SettingsDialog.d.ts +12 -0
- package/dist/inspector/settings/SettingsDialog.js +46 -0
- package/dist/inspector/shell/AppShell.d.ts +2 -0
- package/dist/inspector/shell/AppShell.js +9 -0
- package/dist/inspector/shell/ChangesLog.d.ts +6 -0
- package/dist/inspector/shell/ChangesLog.js +92 -0
- package/dist/inspector/shell/CopyPromptButton.d.ts +9 -0
- package/dist/inspector/shell/CopyPromptButton.js +159 -0
- package/dist/inspector/shell/DomNavigation.d.ts +8 -0
- package/dist/inspector/shell/DomNavigation.js +30 -0
- package/dist/inspector/shell/EmptyState.d.ts +2 -0
- package/dist/inspector/shell/EmptyState.js +15 -0
- package/dist/inspector/shell/InspectorShell.d.ts +11 -0
- package/dist/inspector/shell/InspectorShell.js +268 -0
- package/dist/inspector/shell/openStore.d.ts +6 -0
- package/dist/inspector/shell/openStore.js +29 -0
- package/dist/inspector/shell/panelLayout.d.ts +2 -0
- package/dist/inspector/shell/panelLayout.js +29 -0
- package/dist/inspector/shell/shortcuts.d.ts +3 -0
- package/dist/inspector/shell/shortcuts.js +25 -0
- package/dist/inspector/shell/stateValue.d.ts +3 -0
- package/dist/inspector/shell/stateValue.js +34 -0
- package/dist/inspector/shell/styleState.d.ts +7 -0
- package/dist/inspector/shell/styleState.js +13 -0
- package/dist/inspector/spacing/projection.d.ts +43 -0
- package/dist/inspector/spacing/projection.js +136 -0
- package/dist/inspector/styleEditors/AppearanceSection.d.ts +13 -0
- package/dist/inspector/styleEditors/AppearanceSection.js +6 -0
- package/dist/inspector/styleEditors/AspectRatioField.d.ts +17 -0
- package/dist/inspector/styleEditors/AspectRatioField.js +10 -0
- package/dist/inspector/styleEditors/BorderEditor.d.ts +13 -0
- package/dist/inspector/styleEditors/BorderEditor.js +295 -0
- package/dist/inspector/styleEditors/BorderRadiusEditor.d.ts +14 -0
- package/dist/inspector/styleEditors/BorderRadiusEditor.js +108 -0
- package/dist/inspector/styleEditors/BoxShadowEditor.d.ts +13 -0
- package/dist/inspector/styleEditors/BoxShadowEditor.js +13 -0
- package/dist/inspector/styleEditors/ColorPicker.d.ts +15 -0
- package/dist/inspector/styleEditors/ColorPicker.js +73 -0
- package/dist/inspector/styleEditors/GapField.d.ts +17 -0
- package/dist/inspector/styleEditors/GapField.js +12 -0
- package/dist/inspector/styleEditors/GridChildSection.d.ts +14 -0
- package/dist/inspector/styleEditors/GridChildSection.js +91 -0
- package/dist/inspector/styleEditors/GridPicker.d.ts +13 -0
- package/dist/inspector/styleEditors/GridPicker.js +179 -0
- package/dist/inspector/styleEditors/GridSection.d.ts +17 -0
- package/dist/inspector/styleEditors/GridSection.js +27 -0
- package/dist/inspector/styleEditors/GridValueField.d.ts +17 -0
- package/dist/inspector/styleEditors/GridValueField.js +70 -0
- package/dist/inspector/styleEditors/InsetSection.d.ts +15 -0
- package/dist/inspector/styleEditors/InsetSection.js +15 -0
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +6 -0
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +6 -0
- package/dist/inspector/styleEditors/LayoutComboField.d.ts +18 -0
- package/dist/inspector/styleEditors/LayoutComboField.js +138 -0
- package/dist/inspector/styleEditors/LayoutDropdown.d.ts +14 -0
- package/dist/inspector/styleEditors/LayoutDropdown.js +34 -0
- package/dist/inspector/styleEditors/LayoutSection.d.ts +13 -0
- package/dist/inspector/styleEditors/LayoutSection.js +342 -0
- package/dist/inspector/styleEditors/OpacityEditor.d.ts +13 -0
- package/dist/inspector/styleEditors/OpacityEditor.js +34 -0
- package/dist/inspector/styleEditors/PositionInsets.d.ts +15 -0
- package/dist/inspector/styleEditors/PositionInsets.js +12 -0
- package/dist/inspector/styleEditors/SpacingBox.d.ts +29 -0
- package/dist/inspector/styleEditors/SpacingBox.js +189 -0
- package/dist/inspector/styleEditors/Typography.d.ts +13 -0
- package/dist/inspector/styleEditors/Typography.js +137 -0
- package/dist/inspector/styleEditors/completeCssValue.d.ts +8 -0
- package/dist/inspector/styleEditors/completeCssValue.js +34 -0
- package/dist/inspector/styleEditors/gridChildModel.d.ts +74 -0
- package/dist/inspector/styleEditors/gridChildModel.js +138 -0
- package/dist/inspector/styleEditors/layoutValue.d.ts +24 -0
- package/dist/inspector/styleEditors/layoutValue.js +103 -0
- package/dist/inspector/styleEditors/nudgeValue.d.ts +8 -0
- package/dist/inspector/styleEditors/nudgeValue.js +71 -0
- package/dist/inspector/styleEditors/rowLookup.d.ts +11 -0
- package/dist/inspector/styleEditors/rowLookup.js +13 -0
- package/dist/inspector/styleEditors/stringRecord.d.ts +4 -0
- package/dist/inspector/styleEditors/stringRecord.js +1 -0
- package/dist/inspector/styleEditors/valuePolicy.d.ts +20 -0
- package/dist/inspector/styleEditors/valuePolicy.js +82 -0
- package/dist/inspector/testing.d.ts +10 -0
- package/dist/inspector/testing.js +9 -0
- package/dist/inspector/tokens/TokenChip.d.ts +24 -0
- package/dist/inspector/tokens/TokenChip.js +23 -0
- package/dist/inspector/tokens/TokenDropdown.d.ts +13 -0
- package/dist/inspector/tokens/TokenDropdown.js +59 -0
- package/dist/inspector/tokens/TokenField.d.ts +68 -0
- package/dist/inspector/tokens/TokenField.js +485 -0
- package/dist/inspector/tokens/TokenLabel.d.ts +7 -0
- package/dist/inspector/tokens/TokenLabel.js +23 -0
- package/dist/inspector/tokens/TokensPanel.d.ts +5 -0
- package/dist/inspector/tokens/TokensPanel.js +47 -0
- package/dist/inspector/tokens/catalog.d.ts +51 -0
- package/dist/inspector/tokens/catalog.js +184 -0
- package/dist/inspector/tokens/editActions.d.ts +35 -0
- package/dist/inspector/tokens/editActions.js +164 -0
- package/dist/inspector/tokens/resolution/cascade.d.ts +14 -0
- package/dist/inspector/tokens/resolution/cascade.js +31 -0
- package/dist/inspector/tokens/resolution/cssomCollector.d.ts +43 -0
- package/dist/inspector/tokens/resolution/cssomCollector.js +528 -0
- package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +12 -0
- package/dist/inspector/tokens/resolution/selectorSemantics.js +106 -0
- package/dist/inspector/tokens/resolution.d.ts +56 -0
- package/dist/inspector/tokens/resolution.js +1401 -0
- package/dist/inspector/tokens/tokenEdits.d.ts +3 -0
- package/dist/inspector/tokens/tokenEdits.js +22 -0
- package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +6 -0
- package/dist/inspector/tokens/valueSemanticsAdapter.js +68 -0
- package/dist/inspector/ui/AtRuleContext.d.ts +18 -0
- package/dist/inspector/ui/AtRuleContext.js +54 -0
- package/dist/inspector/ui/Button.d.ts +9 -0
- package/dist/inspector/ui/Button.js +4 -0
- package/dist/inspector/ui/ColorSwatch.d.ts +7 -0
- package/dist/inspector/ui/ColorSwatch.js +6 -0
- package/dist/inspector/ui/ControlSurface.d.ts +14 -0
- package/dist/inspector/ui/ControlSurface.js +10 -0
- package/dist/inspector/ui/FieldRow.d.ts +14 -0
- package/dist/inspector/ui/FieldRow.js +15 -0
- package/dist/inspector/ui/IconButton.d.ts +14 -0
- package/dist/inspector/ui/IconButton.js +5 -0
- package/dist/inspector/ui/InspectorPopover.d.ts +17 -0
- package/dist/inspector/ui/InspectorPopover.js +13 -0
- package/dist/inspector/ui/PopoverListbox.d.ts +37 -0
- package/dist/inspector/ui/PopoverListbox.js +21 -0
- package/dist/inspector/ui/SegmentedControl.d.ts +24 -0
- package/dist/inspector/ui/SegmentedControl.js +16 -0
- package/dist/inspector/ui/Select.d.ts +25 -0
- package/dist/inspector/ui/Select.js +56 -0
- package/dist/inspector/ui/SideValuesField.d.ts +44 -0
- package/dist/inspector/ui/SideValuesField.js +76 -0
- package/dist/inspector/ui/StatusCallout.d.ts +9 -0
- package/dist/inspector/ui/StatusCallout.js +4 -0
- package/dist/inspector/ui/TextInput.d.ts +12 -0
- package/dist/inspector/ui/TextInput.js +5 -0
- package/dist/inspector/ui/ToggleButton.d.ts +11 -0
- package/dist/inspector/ui/ToggleButton.js +6 -0
- package/dist/inspector/ui/assets/grid.svg +14 -0
- package/dist/inspector/ui/css.d.ts +9 -0
- package/dist/inspector/ui/labels.d.ts +1 -0
- package/dist/inspector/ui/labels.js +7 -0
- package/dist/inspector/ui/styles.d.ts +1 -0
- package/dist/inspector/ui/styles.js +68 -0
- package/dist/inspector/virtual-modules.d.ts +7 -0
- package/dist/inspector/vite-env.d.ts +10 -0
- package/dist/internal/agent-protocol.d.ts +232 -0
- package/dist/internal/agent-protocol.js +237 -0
- package/dist/nudge-ui.mjs +15722 -0
- package/dist/project/files.d.ts +19 -0
- package/dist/project/files.js +226 -0
- package/dist/project/identity.d.ts +6 -0
- package/dist/project/identity.js +19 -0
- package/dist/project/pathPolicy.d.ts +8 -0
- package/dist/project/pathPolicy.js +12 -0
- package/dist/project/tokens.d.ts +36 -0
- package/dist/project/tokens.js +223 -0
- package/dist/transport/index.d.ts +8 -0
- package/dist/transport/index.js +8 -0
- package/dist/transport/routes.d.ts +13 -0
- package/dist/transport/routes.js +16 -0
- package/package.json +137 -0
|
@@ -0,0 +1,232 @@
|
|
|
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
|
+
*/
|
|
9
|
+
export declare const AGENT_PROTOCOL_VERSION: 1;
|
|
10
|
+
export declare const AGENT_PROTOCOL_LIMITS: {
|
|
11
|
+
readonly projectId: 256;
|
|
12
|
+
readonly workspaceRoot: 4096;
|
|
13
|
+
readonly origin: 2048;
|
|
14
|
+
readonly sessionToken: 256;
|
|
15
|
+
readonly requestId: 256;
|
|
16
|
+
readonly commandId: 256;
|
|
17
|
+
readonly prompt: 32000;
|
|
18
|
+
readonly groupId: 256;
|
|
19
|
+
readonly label: 160;
|
|
20
|
+
readonly routeUrl: 2048;
|
|
21
|
+
readonly routeTitle: 512;
|
|
22
|
+
readonly routeCount: 64;
|
|
23
|
+
readonly canvasCardCount: 128;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Returns the default project-specific loopback port used by the CLI.
|
|
27
|
+
*
|
|
28
|
+
* The value is deterministic so a browser can probe the companion without a
|
|
29
|
+
* port file, while the range stays high enough to avoid common dev servers.
|
|
30
|
+
* Callers may still override it with an explicit port when a collision occurs.
|
|
31
|
+
*/
|
|
32
|
+
export declare function defaultBridgePort(projectId: string): number;
|
|
33
|
+
export type AgentProtocolVersion = typeof AGENT_PROTOCOL_VERSION;
|
|
34
|
+
/** A project identity is the pairing boundary for one companion process. */
|
|
35
|
+
export interface AgentProjectIdentity {
|
|
36
|
+
readonly projectId: string;
|
|
37
|
+
/** Omitted when a trusted host establishes the browser origin out of band. */
|
|
38
|
+
readonly origin?: string;
|
|
39
|
+
readonly workspaceRoot?: string;
|
|
40
|
+
}
|
|
41
|
+
/** A same-origin route that an agent asks the browser to add to Canvas. */
|
|
42
|
+
export interface AgentRoute {
|
|
43
|
+
readonly url: string;
|
|
44
|
+
readonly title?: string;
|
|
45
|
+
/** A short user-facing name. When absent, the browser derives one. */
|
|
46
|
+
readonly label?: string;
|
|
47
|
+
}
|
|
48
|
+
/** The owner marker lets the browser remove only groups created by the agent. */
|
|
49
|
+
export type CanvasGroupOwner = "agent" | "user";
|
|
50
|
+
/** A browser-reported comparison group. */
|
|
51
|
+
export interface CanvasGroup {
|
|
52
|
+
readonly id: string;
|
|
53
|
+
readonly label: string;
|
|
54
|
+
readonly owner: CanvasGroupOwner;
|
|
55
|
+
readonly routes: readonly AgentRoute[];
|
|
56
|
+
}
|
|
57
|
+
/** A compact, serialisable Canvas snapshot returned by the browser. */
|
|
58
|
+
export interface CanvasState {
|
|
59
|
+
readonly mode: "inspect" | "canvas";
|
|
60
|
+
readonly groups: readonly CanvasGroup[];
|
|
61
|
+
readonly focusedGroupId?: string | null;
|
|
62
|
+
readonly focusedRouteUrl?: string | null;
|
|
63
|
+
}
|
|
64
|
+
export declare const CANVAS_COMMAND_TYPES: readonly ["read-state", "present-routes", "focus-group", "fit-all", "remove-group"];
|
|
65
|
+
export type CanvasCommandType = (typeof CANVAS_COMMAND_TYPES)[number];
|
|
66
|
+
export interface ReadCanvasStateCommand {
|
|
67
|
+
readonly type: "read-state";
|
|
68
|
+
readonly commandId: string;
|
|
69
|
+
}
|
|
70
|
+
export interface PresentRoutesCommand {
|
|
71
|
+
readonly type: "present-routes";
|
|
72
|
+
readonly commandId: string;
|
|
73
|
+
readonly groupId: string;
|
|
74
|
+
readonly label: string;
|
|
75
|
+
readonly routes: readonly AgentRoute[];
|
|
76
|
+
}
|
|
77
|
+
export interface FocusCanvasGroupCommand {
|
|
78
|
+
readonly type: "focus-group";
|
|
79
|
+
readonly commandId: string;
|
|
80
|
+
readonly groupId: string;
|
|
81
|
+
}
|
|
82
|
+
export interface FitCanvasCommand {
|
|
83
|
+
readonly type: "fit-all";
|
|
84
|
+
readonly commandId: string;
|
|
85
|
+
}
|
|
86
|
+
export interface RemoveCanvasGroupCommand {
|
|
87
|
+
readonly type: "remove-group";
|
|
88
|
+
readonly commandId: string;
|
|
89
|
+
readonly groupId: string;
|
|
90
|
+
}
|
|
91
|
+
/** Commands sent from the companion to the paired browser over SSE. */
|
|
92
|
+
export type CanvasCommand = ReadCanvasStateCommand | PresentRoutesCommand | FocusCanvasGroupCommand | FitCanvasCommand | RemoveCanvasGroupCommand;
|
|
93
|
+
export interface CanvasCommandError {
|
|
94
|
+
readonly code: string;
|
|
95
|
+
readonly message: string;
|
|
96
|
+
}
|
|
97
|
+
export interface CanvasCommandResult {
|
|
98
|
+
readonly commandId: string;
|
|
99
|
+
readonly ok: boolean;
|
|
100
|
+
readonly state?: CanvasState;
|
|
101
|
+
readonly group?: CanvasGroup;
|
|
102
|
+
readonly error?: CanvasCommandError;
|
|
103
|
+
}
|
|
104
|
+
/** A prompt is immutable after it is accepted by the browser bridge. */
|
|
105
|
+
export interface AgentPromptRequest {
|
|
106
|
+
readonly requestId: string;
|
|
107
|
+
readonly projectId: string;
|
|
108
|
+
readonly prompt: string;
|
|
109
|
+
/** The browser's canonical change revision captured at dispatch time. */
|
|
110
|
+
readonly changeRevision?: number;
|
|
111
|
+
}
|
|
112
|
+
export type AgentRequestStatus = "working" | "completed" | "failed" | "interrupted";
|
|
113
|
+
export interface AgentRequestOutcome {
|
|
114
|
+
readonly requestId: string;
|
|
115
|
+
readonly status: AgentRequestStatus;
|
|
116
|
+
readonly summary?: string;
|
|
117
|
+
readonly error?: string;
|
|
118
|
+
}
|
|
119
|
+
export type AgentConnectionState = "offline" | "listening" | "paired" | "working";
|
|
120
|
+
export interface AgentStatusSnapshot {
|
|
121
|
+
readonly protocolVersion: AgentProtocolVersion;
|
|
122
|
+
readonly projectId: string;
|
|
123
|
+
readonly connection: AgentConnectionState;
|
|
124
|
+
readonly listenerActive: boolean;
|
|
125
|
+
readonly paired: boolean;
|
|
126
|
+
/** The last paired page, retained only for this process lifetime. */
|
|
127
|
+
readonly pageUrl?: string | null;
|
|
128
|
+
readonly request: (AgentPromptRequest & {
|
|
129
|
+
readonly status: AgentRequestStatus;
|
|
130
|
+
readonly summary?: string;
|
|
131
|
+
readonly error?: string;
|
|
132
|
+
}) | null;
|
|
133
|
+
}
|
|
134
|
+
export type BridgeEventType = "status" | "canvas-command" | "connected" | "disconnected";
|
|
135
|
+
export interface BridgeStatusEvent {
|
|
136
|
+
readonly type: "status";
|
|
137
|
+
readonly status: AgentStatusSnapshot;
|
|
138
|
+
}
|
|
139
|
+
export interface BridgeConnectedEvent {
|
|
140
|
+
readonly type: "connected";
|
|
141
|
+
readonly status: AgentStatusSnapshot;
|
|
142
|
+
}
|
|
143
|
+
export interface BridgeDisconnectedEvent {
|
|
144
|
+
readonly type: "disconnected";
|
|
145
|
+
readonly reason?: string;
|
|
146
|
+
}
|
|
147
|
+
export interface BridgeCanvasCommandEvent {
|
|
148
|
+
readonly type: "canvas-command";
|
|
149
|
+
readonly command: CanvasCommand;
|
|
150
|
+
}
|
|
151
|
+
/** Payload delivered to a browser SSE connection. */
|
|
152
|
+
export type BridgeEvent = BridgeStatusEvent | BridgeConnectedEvent | BridgeDisconnectedEvent | BridgeCanvasCommandEvent;
|
|
153
|
+
export interface BridgeEnvelope {
|
|
154
|
+
readonly protocolVersion: AgentProtocolVersion;
|
|
155
|
+
readonly projectId: string;
|
|
156
|
+
readonly sessionToken: string;
|
|
157
|
+
readonly event: BridgeEvent;
|
|
158
|
+
}
|
|
159
|
+
export interface CanvasCommandAcknowledgement {
|
|
160
|
+
readonly commandId: string;
|
|
161
|
+
readonly ok: boolean;
|
|
162
|
+
readonly state?: CanvasState;
|
|
163
|
+
readonly group?: CanvasGroup;
|
|
164
|
+
readonly error?: CanvasCommandError;
|
|
165
|
+
}
|
|
166
|
+
export interface PairingRequest {
|
|
167
|
+
readonly projectId: string;
|
|
168
|
+
readonly origin: string;
|
|
169
|
+
/** The active page is retained only while this process is alive. */
|
|
170
|
+
readonly pageUrl?: string;
|
|
171
|
+
}
|
|
172
|
+
export interface PairingResponse {
|
|
173
|
+
readonly protocolVersion: AgentProtocolVersion;
|
|
174
|
+
readonly projectId: string;
|
|
175
|
+
readonly origin: string;
|
|
176
|
+
readonly sessionToken: string;
|
|
177
|
+
readonly pageUrl?: string;
|
|
178
|
+
readonly status: AgentStatusSnapshot;
|
|
179
|
+
}
|
|
180
|
+
export interface PromptDispatchRequest {
|
|
181
|
+
readonly projectId: string;
|
|
182
|
+
readonly sessionToken: string;
|
|
183
|
+
readonly prompt: string;
|
|
184
|
+
readonly changeRevision?: number;
|
|
185
|
+
}
|
|
186
|
+
export interface PromptDispatchResponse {
|
|
187
|
+
readonly request: AgentPromptRequest;
|
|
188
|
+
readonly status: AgentRequestStatus;
|
|
189
|
+
}
|
|
190
|
+
export interface StatusEventRequest {
|
|
191
|
+
readonly projectId: string;
|
|
192
|
+
readonly sessionToken: string;
|
|
193
|
+
}
|
|
194
|
+
export interface AgentStatusUpdate {
|
|
195
|
+
readonly requestId: string;
|
|
196
|
+
readonly status: AgentRequestStatus;
|
|
197
|
+
readonly summary?: string;
|
|
198
|
+
readonly error?: string;
|
|
199
|
+
}
|
|
200
|
+
export interface ProtocolErrorShape {
|
|
201
|
+
readonly code: string;
|
|
202
|
+
readonly message: string;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Returns a canonical origin or null. Credentials, paths, and fragments are
|
|
206
|
+
* rejected so the browser cannot broaden the pairing boundary accidentally.
|
|
207
|
+
*/
|
|
208
|
+
export declare function canonicalOrigin(value: unknown): string | null;
|
|
209
|
+
/** Returns true only for exact, canonical HTTP(S) origins. */
|
|
210
|
+
export declare function isCanonicalOrigin(value: unknown): value is string;
|
|
211
|
+
/**
|
|
212
|
+
* Checks an origin against an explicit allow-list. An empty allow-list does
|
|
213
|
+
* not mean wildcard access; callers must choose an origin before pairing.
|
|
214
|
+
*/
|
|
215
|
+
export declare function isAllowedOrigin(value: unknown, allowedOrigins: readonly string[]): value is string;
|
|
216
|
+
/**
|
|
217
|
+
* Validates an agent route and ensures it belongs to the paired origin.
|
|
218
|
+
* Fragments are retained because they are useful initial Canvas locations.
|
|
219
|
+
*/
|
|
220
|
+
export declare function isSameOriginRoute(value: unknown, origin: string): value is AgentRoute;
|
|
221
|
+
/** Validates and normalises route values for a presentation command. */
|
|
222
|
+
export declare function validateRoutes(value: unknown, origin: string): AgentRoute[];
|
|
223
|
+
/** Validates the fields shared by every companion message. */
|
|
224
|
+
export declare function isProtocolVersion(value: unknown): value is AgentProtocolVersion;
|
|
225
|
+
export declare function isProjectIdentity(value: unknown): value is AgentProjectIdentity;
|
|
226
|
+
export declare function isAgentPromptRequest(value: unknown): value is AgentPromptRequest;
|
|
227
|
+
export declare function isAgentStatusUpdate(value: unknown): value is AgentStatusUpdate;
|
|
228
|
+
export declare function isCanvasState(value: unknown): value is CanvasState;
|
|
229
|
+
export declare function isCanvasGroup(value: unknown): value is CanvasGroup;
|
|
230
|
+
export declare function isCanvasCommand(value: unknown): value is CanvasCommand;
|
|
231
|
+
/** Creates a stable protocol error shape without exposing thrown values. */
|
|
232
|
+
export declare function protocolError(code: string, message: string): ProtocolErrorShape;
|
|
@@ -0,0 +1,237 @@
|
|
|
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
|
+
*/
|
|
9
|
+
export const AGENT_PROTOCOL_VERSION = 1;
|
|
10
|
+
export const AGENT_PROTOCOL_LIMITS = {
|
|
11
|
+
projectId: 256,
|
|
12
|
+
workspaceRoot: 4096,
|
|
13
|
+
origin: 2048,
|
|
14
|
+
sessionToken: 256,
|
|
15
|
+
requestId: 256,
|
|
16
|
+
commandId: 256,
|
|
17
|
+
prompt: 32_000,
|
|
18
|
+
groupId: 256,
|
|
19
|
+
label: 160,
|
|
20
|
+
routeUrl: 2048,
|
|
21
|
+
routeTitle: 512,
|
|
22
|
+
routeCount: 64,
|
|
23
|
+
canvasCardCount: 128,
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Returns the default project-specific loopback port used by the CLI.
|
|
27
|
+
*
|
|
28
|
+
* The value is deterministic so a browser can probe the companion without a
|
|
29
|
+
* port file, while the range stays high enough to avoid common dev servers.
|
|
30
|
+
* Callers may still override it with an explicit port when a collision occurs.
|
|
31
|
+
*/
|
|
32
|
+
export function defaultBridgePort(projectId) {
|
|
33
|
+
if (!nonEmptyString(projectId, AGENT_PROTOCOL_LIMITS.projectId)) {
|
|
34
|
+
throw new TypeError("projectId must be a bounded non-empty string");
|
|
35
|
+
}
|
|
36
|
+
let hash = 2_166_136_261;
|
|
37
|
+
for (let index = 0; index < projectId.length; index += 1) {
|
|
38
|
+
hash ^= projectId.charCodeAt(index);
|
|
39
|
+
hash = Math.imul(hash, 16_777_619);
|
|
40
|
+
}
|
|
41
|
+
return 30_000 + ((hash >>> 0) % 20_000);
|
|
42
|
+
}
|
|
43
|
+
export const CANVAS_COMMAND_TYPES = [
|
|
44
|
+
"read-state",
|
|
45
|
+
"present-routes",
|
|
46
|
+
"focus-group",
|
|
47
|
+
"fit-all",
|
|
48
|
+
"remove-group",
|
|
49
|
+
];
|
|
50
|
+
const ORIGIN_PROTOCOLS = new Set(["http:", "https:"]);
|
|
51
|
+
function isRecord(value) {
|
|
52
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
53
|
+
}
|
|
54
|
+
function hasOnlyKeys(value, keys) {
|
|
55
|
+
const allowed = new Set(keys);
|
|
56
|
+
return Object.keys(value).every((key) => allowed.has(key));
|
|
57
|
+
}
|
|
58
|
+
function nonEmptyString(value, maximum) {
|
|
59
|
+
return typeof value === "string" && value.length > 0 && value.length <= maximum;
|
|
60
|
+
}
|
|
61
|
+
function optionalString(value, maximum) {
|
|
62
|
+
return value === undefined || (typeof value === "string" && value.length <= maximum);
|
|
63
|
+
}
|
|
64
|
+
function optionalRevision(value) {
|
|
65
|
+
return value === undefined || (typeof value === "number" && Number.isSafeInteger(value) && value >= 0);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Returns a canonical origin or null. Credentials, paths, and fragments are
|
|
69
|
+
* rejected so the browser cannot broaden the pairing boundary accidentally.
|
|
70
|
+
*/
|
|
71
|
+
export function canonicalOrigin(value) {
|
|
72
|
+
if (!nonEmptyString(value, AGENT_PROTOCOL_LIMITS.origin))
|
|
73
|
+
return null;
|
|
74
|
+
let parsed;
|
|
75
|
+
try {
|
|
76
|
+
parsed = new URL(value);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
if (!ORIGIN_PROTOCOLS.has(parsed.protocol) || parsed.username || parsed.password)
|
|
82
|
+
return null;
|
|
83
|
+
if (parsed.pathname !== "/" || parsed.search || parsed.hash)
|
|
84
|
+
return null;
|
|
85
|
+
return parsed.origin;
|
|
86
|
+
}
|
|
87
|
+
/** Returns true only for exact, canonical HTTP(S) origins. */
|
|
88
|
+
export function isCanonicalOrigin(value) {
|
|
89
|
+
return canonicalOrigin(value) === value;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Checks an origin against an explicit allow-list. An empty allow-list does
|
|
93
|
+
* not mean wildcard access; callers must choose an origin before pairing.
|
|
94
|
+
*/
|
|
95
|
+
export function isAllowedOrigin(value, allowedOrigins) {
|
|
96
|
+
const origin = canonicalOrigin(value);
|
|
97
|
+
if (!origin || allowedOrigins.length === 0)
|
|
98
|
+
return false;
|
|
99
|
+
return allowedOrigins.some((candidate) => canonicalOrigin(candidate) === origin);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Validates an agent route and ensures it belongs to the paired origin.
|
|
103
|
+
* Fragments are retained because they are useful initial Canvas locations.
|
|
104
|
+
*/
|
|
105
|
+
export function isSameOriginRoute(value, origin) {
|
|
106
|
+
if (!isRecord(value) || !hasOnlyKeys(value, ["url", "title", "label"]))
|
|
107
|
+
return false;
|
|
108
|
+
if (!nonEmptyString(value.url, AGENT_PROTOCOL_LIMITS.routeUrl))
|
|
109
|
+
return false;
|
|
110
|
+
if (!optionalString(value.title, AGENT_PROTOCOL_LIMITS.routeTitle))
|
|
111
|
+
return false;
|
|
112
|
+
if (!optionalString(value.label, AGENT_PROTOCOL_LIMITS.label))
|
|
113
|
+
return false;
|
|
114
|
+
const expectedOrigin = canonicalOrigin(origin);
|
|
115
|
+
if (!expectedOrigin)
|
|
116
|
+
return false;
|
|
117
|
+
let route;
|
|
118
|
+
try {
|
|
119
|
+
route = new URL(value.url, expectedOrigin);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
if (route.origin !== expectedOrigin || !ORIGIN_PROTOCOLS.has(route.protocol))
|
|
125
|
+
return false;
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
/** Validates and normalises route values for a presentation command. */
|
|
129
|
+
export function validateRoutes(value, origin) {
|
|
130
|
+
if (!Array.isArray(value) || value.length === 0 || value.length > AGENT_PROTOCOL_LIMITS.routeCount) {
|
|
131
|
+
throw new TypeError(`routes must contain between 1 and ${AGENT_PROTOCOL_LIMITS.routeCount} items`);
|
|
132
|
+
}
|
|
133
|
+
const expectedOrigin = canonicalOrigin(origin);
|
|
134
|
+
if (!expectedOrigin)
|
|
135
|
+
throw new TypeError("origin must be a canonical HTTP(S) origin");
|
|
136
|
+
return value.map((route, index) => {
|
|
137
|
+
if (!isSameOriginRoute(route, expectedOrigin)) {
|
|
138
|
+
throw new TypeError(`routes[${index}] must be a same-origin route`);
|
|
139
|
+
}
|
|
140
|
+
const input = route;
|
|
141
|
+
const parsed = new URL(input.url, expectedOrigin);
|
|
142
|
+
return {
|
|
143
|
+
url: parsed.href,
|
|
144
|
+
...(input.title === undefined ? {} : { title: input.title }),
|
|
145
|
+
...(input.label === undefined ? {} : { label: input.label }),
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/** Validates the fields shared by every companion message. */
|
|
150
|
+
export function isProtocolVersion(value) {
|
|
151
|
+
return value === AGENT_PROTOCOL_VERSION;
|
|
152
|
+
}
|
|
153
|
+
export function isProjectIdentity(value) {
|
|
154
|
+
if (!isRecord(value) || !hasOnlyKeys(value, ["projectId", "origin", "workspaceRoot"]))
|
|
155
|
+
return false;
|
|
156
|
+
return nonEmptyString(value.projectId, AGENT_PROTOCOL_LIMITS.projectId)
|
|
157
|
+
&& (value.origin === undefined || isCanonicalOrigin(value.origin))
|
|
158
|
+
&& optionalString(value.workspaceRoot, AGENT_PROTOCOL_LIMITS.workspaceRoot);
|
|
159
|
+
}
|
|
160
|
+
export function isAgentPromptRequest(value) {
|
|
161
|
+
if (!isRecord(value) || !hasOnlyKeys(value, ["requestId", "projectId", "prompt", "changeRevision"]))
|
|
162
|
+
return false;
|
|
163
|
+
return nonEmptyString(value.requestId, AGENT_PROTOCOL_LIMITS.requestId)
|
|
164
|
+
&& nonEmptyString(value.projectId, AGENT_PROTOCOL_LIMITS.projectId)
|
|
165
|
+
&& nonEmptyString(value.prompt, AGENT_PROTOCOL_LIMITS.prompt)
|
|
166
|
+
&& optionalRevision(value.changeRevision);
|
|
167
|
+
}
|
|
168
|
+
export function isAgentStatusUpdate(value) {
|
|
169
|
+
if (!isRecord(value) || !hasOnlyKeys(value, ["requestId", "status", "summary", "error"]))
|
|
170
|
+
return false;
|
|
171
|
+
return nonEmptyString(value.requestId, AGENT_PROTOCOL_LIMITS.requestId)
|
|
172
|
+
&& (value.status === "working" || value.status === "completed"
|
|
173
|
+
|| value.status === "failed" || value.status === "interrupted")
|
|
174
|
+
&& optionalString(value.summary, AGENT_PROTOCOL_LIMITS.prompt)
|
|
175
|
+
&& optionalString(value.error, AGENT_PROTOCOL_LIMITS.prompt);
|
|
176
|
+
}
|
|
177
|
+
export function isCanvasState(value) {
|
|
178
|
+
if (!isRecord(value) || !hasOnlyKeys(value, ["mode", "groups", "focusedGroupId", "focusedRouteUrl"]))
|
|
179
|
+
return false;
|
|
180
|
+
if (value.mode !== "inspect" && value.mode !== "canvas")
|
|
181
|
+
return false;
|
|
182
|
+
if (!Array.isArray(value.groups) || value.groups.length > AGENT_PROTOCOL_LIMITS.canvasCardCount)
|
|
183
|
+
return false;
|
|
184
|
+
if (!(value.focusedGroupId === undefined || value.focusedGroupId === null
|
|
185
|
+
|| nonEmptyString(value.focusedGroupId, AGENT_PROTOCOL_LIMITS.groupId)))
|
|
186
|
+
return false;
|
|
187
|
+
if (!(value.focusedRouteUrl === undefined || value.focusedRouteUrl === null
|
|
188
|
+
|| nonEmptyString(value.focusedRouteUrl, AGENT_PROTOCOL_LIMITS.routeUrl)))
|
|
189
|
+
return false;
|
|
190
|
+
return value.groups.every(isCanvasGroup);
|
|
191
|
+
}
|
|
192
|
+
export function isCanvasGroup(value) {
|
|
193
|
+
if (!isRecord(value) || !hasOnlyKeys(value, ["id", "label", "owner", "routes"]))
|
|
194
|
+
return false;
|
|
195
|
+
return nonEmptyString(value.id, AGENT_PROTOCOL_LIMITS.groupId)
|
|
196
|
+
&& nonEmptyString(value.label, AGENT_PROTOCOL_LIMITS.label)
|
|
197
|
+
&& (value.owner === "agent" || value.owner === "user")
|
|
198
|
+
&& Array.isArray(value.routes)
|
|
199
|
+
&& value.routes.length <= AGENT_PROTOCOL_LIMITS.routeCount
|
|
200
|
+
&& value.routes.every((route) => isRecord(route)
|
|
201
|
+
&& nonEmptyString(route.url, AGENT_PROTOCOL_LIMITS.routeUrl)
|
|
202
|
+
&& optionalString(route.title, AGENT_PROTOCOL_LIMITS.routeTitle)
|
|
203
|
+
&& optionalString(route.label, AGENT_PROTOCOL_LIMITS.label));
|
|
204
|
+
}
|
|
205
|
+
export function isCanvasCommand(value) {
|
|
206
|
+
if (!isRecord(value) || !hasOnlyKeys(value, ["type", "commandId", "groupId", "label", "routes"]))
|
|
207
|
+
return false;
|
|
208
|
+
if (!nonEmptyString(value.commandId, AGENT_PROTOCOL_LIMITS.commandId))
|
|
209
|
+
return false;
|
|
210
|
+
switch (value.type) {
|
|
211
|
+
case "read-state":
|
|
212
|
+
case "fit-all":
|
|
213
|
+
return true;
|
|
214
|
+
case "focus-group":
|
|
215
|
+
case "remove-group":
|
|
216
|
+
return nonEmptyString(value.groupId, AGENT_PROTOCOL_LIMITS.groupId);
|
|
217
|
+
case "present-routes":
|
|
218
|
+
return nonEmptyString(value.groupId, AGENT_PROTOCOL_LIMITS.groupId)
|
|
219
|
+
&& nonEmptyString(value.label, AGENT_PROTOCOL_LIMITS.label)
|
|
220
|
+
&& Array.isArray(value.routes)
|
|
221
|
+
&& value.routes.length > 0
|
|
222
|
+
&& value.routes.length <= AGENT_PROTOCOL_LIMITS.routeCount
|
|
223
|
+
&& value.routes.every((route) => isRecord(route)
|
|
224
|
+
&& nonEmptyString(route.url, AGENT_PROTOCOL_LIMITS.routeUrl)
|
|
225
|
+
&& optionalString(route.title, AGENT_PROTOCOL_LIMITS.routeTitle)
|
|
226
|
+
&& optionalString(route.label, AGENT_PROTOCOL_LIMITS.label));
|
|
227
|
+
default:
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/** Creates a stable protocol error shape without exposing thrown values. */
|
|
232
|
+
export function protocolError(code, message) {
|
|
233
|
+
if (!nonEmptyString(code, 128) || !nonEmptyString(message, AGENT_PROTOCOL_LIMITS.prompt)) {
|
|
234
|
+
throw new TypeError("Protocol errors require bounded code and message strings");
|
|
235
|
+
}
|
|
236
|
+
return { code, message };
|
|
237
|
+
}
|