@agent-native/core 0.14.8 → 0.15.1
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 +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +30 -9
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +14 -4
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +71 -4
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/types.d.ts +9 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/appearance/actions/change-appearance.d.ts +3 -0
- package/dist/appearance/actions/change-appearance.d.ts.map +1 -0
- package/dist/appearance/actions/change-appearance.js +29 -0
- package/dist/appearance/actions/change-appearance.js.map +1 -0
- package/dist/chat-threads/store.d.ts +53 -2
- package/dist/chat-threads/store.d.ts.map +1 -1
- package/dist/chat-threads/store.js +172 -12
- package/dist/chat-threads/store.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +114 -37
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +30 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/workspace-dev.d.ts +25 -1
- package/dist/cli/workspace-dev.d.ts.map +1 -1
- package/dist/cli/workspace-dev.js +275 -49
- package/dist/cli/workspace-dev.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +23 -4
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +276 -53
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AppearancePicker.d.ts +11 -0
- package/dist/client/AppearancePicker.d.ts.map +1 -0
- package/dist/client/AppearancePicker.js +16 -0
- package/dist/client/AppearancePicker.js.map +1 -0
- package/dist/client/AssistantChat.d.ts +35 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +315 -32
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/ConnectBuilderCard.d.ts.map +1 -1
- package/dist/client/ConnectBuilderCard.js +5 -2
- package/dist/client/ConnectBuilderCard.js.map +1 -1
- package/dist/client/ErrorBoundary.d.ts.map +1 -1
- package/dist/client/ErrorBoundary.js +8 -10
- package/dist/client/ErrorBoundary.js.map +1 -1
- package/dist/client/FeedbackButton.d.ts.map +1 -1
- package/dist/client/FeedbackButton.js +1 -1
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts +13 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +217 -38
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.js +37 -14
- package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +5 -0
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +4 -0
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-sidebar-state.d.ts +12 -0
- package/dist/client/agent-sidebar-state.d.ts.map +1 -1
- package/dist/client/agent-sidebar-state.js +8 -0
- package/dist/client/agent-sidebar-state.js.map +1 -1
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +175 -3
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/appearance.d.ts +40 -0
- package/dist/client/appearance.d.ts.map +1 -0
- package/dist/client/appearance.js +114 -0
- package/dist/client/appearance.js.map +1 -0
- package/dist/client/builder-frame.d.ts +1 -0
- package/dist/client/builder-frame.d.ts.map +1 -1
- package/dist/client/builder-frame.js +19 -9
- package/dist/client/builder-frame.js.map +1 -1
- package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
- package/dist/client/components/CodeRequiredDialog.js +10 -2
- package/dist/client/components/CodeRequiredDialog.js.map +1 -1
- package/dist/client/components/ui/dropdown-menu.js +2 -2
- package/dist/client/components/ui/dropdown-menu.js.map +1 -1
- package/dist/client/components/ui/hover-card.js +1 -1
- package/dist/client/components/ui/hover-card.js.map +1 -1
- package/dist/client/components/ui/popover.js +1 -1
- package/dist/client/components/ui/popover.js.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts +7 -0
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +63 -32
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +5 -0
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +36 -6
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
- package/dist/client/composer/useVoiceDictation.js +13 -1
- package/dist/client/composer/useVoiceDictation.js.map +1 -1
- package/dist/client/dev-mode.d.ts +14 -0
- package/dist/client/dev-mode.d.ts.map +1 -0
- package/dist/client/dev-mode.js +14 -0
- package/dist/client/dev-mode.js.map +1 -0
- package/dist/client/error-format.d.ts +3 -2
- package/dist/client/error-format.d.ts.map +1 -1
- package/dist/client/error-format.js +9 -2
- package/dist/client/error-format.js.map +1 -1
- package/dist/client/extensions/EmbeddedTool.d.ts +20 -0
- package/dist/client/extensions/EmbeddedTool.d.ts.map +1 -0
- package/dist/client/extensions/EmbeddedTool.js +199 -0
- package/dist/client/extensions/EmbeddedTool.js.map +1 -0
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +24 -2
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/ToolEditor.d.ts +5 -0
- package/dist/client/extensions/ToolEditor.d.ts.map +1 -0
- package/dist/client/extensions/ToolEditor.js +129 -0
- package/dist/client/extensions/ToolEditor.js.map +1 -0
- package/dist/client/extensions/ToolViewer.d.ts +5 -0
- package/dist/client/extensions/ToolViewer.d.ts.map +1 -0
- package/dist/client/extensions/ToolViewer.js +400 -0
- package/dist/client/extensions/ToolViewer.js.map +1 -0
- package/dist/client/extensions/ToolViewerPage.d.ts +2 -0
- package/dist/client/extensions/ToolViewerPage.d.ts.map +1 -0
- package/dist/client/extensions/ToolViewerPage.js +24 -0
- package/dist/client/extensions/ToolViewerPage.js.map +1 -0
- package/dist/client/extensions/ToolsListPage.d.ts +2 -0
- package/dist/client/extensions/ToolsListPage.d.ts.map +1 -0
- package/dist/client/extensions/ToolsListPage.js +67 -0
- package/dist/client/extensions/ToolsListPage.js.map +1 -0
- package/dist/client/extensions/ToolsSidebarSection.d.ts +2 -0
- package/dist/client/extensions/ToolsSidebarSection.d.ts.map +1 -0
- package/dist/client/extensions/ToolsSidebarSection.js +236 -0
- package/dist/client/extensions/ToolsSidebarSection.js.map +1 -0
- package/dist/client/extensions/tool-order.d.ts +7 -0
- package/dist/client/extensions/tool-order.d.ts.map +1 -0
- package/dist/client/extensions/tool-order.js +47 -0
- package/dist/client/extensions/tool-order.js.map +1 -0
- package/dist/client/index.d.ts +8 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +7 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/onboarding/OnboardingPanel.js +1 -0
- package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
- package/dist/client/org/InvitationBanner.d.ts.map +1 -1
- package/dist/client/org/InvitationBanner.js +23 -2
- package/dist/client/org/InvitationBanner.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +5 -4
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +57 -9
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/org/hooks.js +10 -6
- package/dist/client/org/hooks.js.map +1 -1
- package/dist/client/org/workspace-app-links.d.ts +31 -0
- package/dist/client/org/workspace-app-links.d.ts.map +1 -0
- package/dist/client/org/workspace-app-links.js +268 -0
- package/dist/client/org/workspace-app-links.js.map +1 -0
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +18 -5
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/resources/use-resources.d.ts +18 -13
- package/dist/client/resources/use-resources.d.ts.map +1 -1
- package/dist/client/resources/use-resources.js +24 -6
- package/dist/client/resources/use-resources.js.map +1 -1
- package/dist/client/settings/BackgroundAgentSection.d.ts.map +1 -1
- package/dist/client/settings/BackgroundAgentSection.js +9 -1
- package/dist/client/settings/BackgroundAgentSection.js.map +1 -1
- package/dist/client/settings/BrowserSection.d.ts.map +1 -1
- package/dist/client/settings/BrowserSection.js +16 -1
- package/dist/client/settings/BrowserSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +4 -1
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +5 -5
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +8 -0
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +50 -13
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.spec.d.ts +2 -0
- package/dist/client/settings/useBuilderStatus.spec.d.ts.map +1 -0
- package/dist/client/settings/useBuilderStatus.spec.js +64 -0
- package/dist/client/settings/useBuilderStatus.spec.js.map +1 -0
- package/dist/client/sharing/ShareButton.d.ts +5 -0
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +60 -6
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/theme.js +1 -1
- package/dist/client/theme.js.map +1 -1
- package/dist/client/tools/EmbeddedTool.d.ts +20 -0
- package/dist/client/tools/EmbeddedTool.d.ts.map +1 -0
- package/dist/client/tools/EmbeddedTool.js +199 -0
- package/dist/client/tools/EmbeddedTool.js.map +1 -0
- package/dist/client/tools/ExtensionSlot.d.ts +27 -0
- package/dist/client/tools/ExtensionSlot.d.ts.map +1 -0
- package/dist/client/tools/ExtensionSlot.js +96 -0
- package/dist/client/tools/ExtensionSlot.js.map +1 -0
- package/dist/client/tools/ToolEditor.d.ts +5 -0
- package/dist/client/tools/ToolEditor.d.ts.map +1 -0
- package/dist/client/tools/ToolEditor.js +129 -0
- package/dist/client/tools/ToolEditor.js.map +1 -0
- package/dist/client/tools/ToolViewer.d.ts +5 -0
- package/dist/client/tools/ToolViewer.d.ts.map +1 -0
- package/dist/client/tools/ToolViewer.js +400 -0
- package/dist/client/tools/ToolViewer.js.map +1 -0
- package/dist/client/tools/ToolViewerPage.d.ts +2 -0
- package/dist/client/tools/ToolViewerPage.d.ts.map +1 -0
- package/dist/client/tools/ToolViewerPage.js +24 -0
- package/dist/client/tools/ToolViewerPage.js.map +1 -0
- package/dist/client/tools/ToolsListPage.d.ts +2 -0
- package/dist/client/tools/ToolsListPage.d.ts.map +1 -0
- package/dist/client/tools/ToolsListPage.js +67 -0
- package/dist/client/tools/ToolsListPage.js.map +1 -0
- package/dist/client/tools/ToolsSidebarSection.d.ts +2 -0
- package/dist/client/tools/ToolsSidebarSection.d.ts.map +1 -0
- package/dist/client/tools/ToolsSidebarSection.js +236 -0
- package/dist/client/tools/ToolsSidebarSection.js.map +1 -0
- package/dist/client/tools/iframe-bridge.d.ts +38 -0
- package/dist/client/tools/iframe-bridge.d.ts.map +1 -0
- package/dist/client/tools/iframe-bridge.js +207 -0
- package/dist/client/tools/iframe-bridge.js.map +1 -0
- package/dist/client/tools/index.d.ts +8 -0
- package/dist/client/tools/index.d.ts.map +1 -0
- package/dist/client/tools/index.js +8 -0
- package/dist/client/tools/index.js.map +1 -0
- package/dist/client/tools/tool-order.d.ts +7 -0
- package/dist/client/tools/tool-order.d.ts.map +1 -0
- package/dist/client/tools/tool-order.js +47 -0
- package/dist/client/tools/tool-order.js.map +1 -0
- package/dist/client/transcription/BuilderTranscriptionCta.d.ts.map +1 -1
- package/dist/client/transcription/BuilderTranscriptionCta.js +2 -3
- package/dist/client/transcription/BuilderTranscriptionCta.js.map +1 -1
- package/dist/client/use-change-version.d.ts +46 -0
- package/dist/client/use-change-version.d.ts.map +1 -0
- package/dist/client/use-change-version.js +135 -0
- package/dist/client/use-change-version.js.map +1 -0
- package/dist/client/use-chat-threads.d.ts +16 -2
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +87 -12
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/use-chat-threads.spec.d.ts +2 -0
- package/dist/client/use-chat-threads.spec.d.ts.map +1 -0
- package/dist/client/use-chat-threads.spec.js +85 -0
- package/dist/client/use-chat-threads.spec.js.map +1 -0
- package/dist/client/use-db-sync.d.ts +5 -2
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +41 -16
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/client/use-pinch-zoom.d.ts +35 -0
- package/dist/client/use-pinch-zoom.d.ts.map +1 -0
- package/dist/client/use-pinch-zoom.js +105 -0
- package/dist/client/use-pinch-zoom.js.map +1 -0
- package/dist/deploy/workspace-deploy.d.ts.map +1 -1
- package/dist/deploy/workspace-deploy.js +99 -5
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +3 -0
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/store.d.ts +5 -0
- package/dist/extensions/store.d.ts.map +1 -1
- package/dist/extensions/store.js +16 -1
- package/dist/extensions/store.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +3 -0
- package/dist/file-upload/actions/upload-image.d.ts.map +1 -0
- package/dist/file-upload/actions/upload-image.js +145 -0
- package/dist/file-upload/actions/upload-image.js.map +1 -0
- package/dist/file-upload/builder.d.ts.map +1 -1
- package/dist/file-upload/builder.js +31 -11
- package/dist/file-upload/builder.js.map +1 -1
- package/dist/file-upload/index.d.ts +1 -0
- package/dist/file-upload/index.d.ts.map +1 -1
- package/dist/file-upload/index.js +1 -0
- package/dist/file-upload/index.js.map +1 -1
- package/dist/file-upload/pre-upload-attachments.d.ts +39 -0
- package/dist/file-upload/pre-upload-attachments.d.ts.map +1 -0
- package/dist/file-upload/pre-upload-attachments.js +110 -0
- package/dist/file-upload/pre-upload-attachments.js.map +1 -0
- package/dist/file-upload/registry.d.ts.map +1 -1
- package/dist/file-upload/registry.js +8 -7
- package/dist/file-upload/registry.js.map +1 -1
- package/dist/onboarding/default-steps.js +1 -1
- package/dist/onboarding/default-steps.js.map +1 -1
- package/dist/org/context.d.ts +15 -1
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +25 -0
- package/dist/org/context.js.map +1 -1
- package/dist/org/handlers.d.ts +2 -2
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +3 -17
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/index.d.ts +1 -1
- package/dist/org/index.d.ts.map +1 -1
- package/dist/org/index.js +1 -1
- package/dist/org/index.js.map +1 -1
- package/dist/resources/handlers.d.ts +6 -0
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +30 -6
- package/dist/resources/handlers.js.map +1 -1
- package/dist/resources/script-helpers.d.ts +11 -2
- package/dist/resources/script-helpers.d.ts.map +1 -1
- package/dist/resources/script-helpers.js +20 -3
- package/dist/resources/script-helpers.js.map +1 -1
- package/dist/resources/store.d.ts +28 -3
- package/dist/resources/store.d.ts.map +1 -1
- package/dist/resources/store.js +170 -20
- package/dist/resources/store.js.map +1 -1
- package/dist/scripts/resources/list.d.ts +1 -1
- package/dist/scripts/resources/list.d.ts.map +1 -1
- package/dist/scripts/resources/list.js +16 -4
- package/dist/scripts/resources/list.js.map +1 -1
- package/dist/scripts/resources/write.d.ts +1 -1
- package/dist/scripts/resources/write.d.ts.map +1 -1
- package/dist/scripts/resources/write.js +47 -3
- package/dist/scripts/resources/write.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +8 -3
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +214 -25
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-discovery.d.ts +35 -0
- package/dist/server/agent-discovery.d.ts.map +1 -1
- package/dist/server/agent-discovery.js +139 -8
- package/dist/server/agent-discovery.js.map +1 -1
- package/dist/server/app-url.d.ts +12 -6
- package/dist/server/app-url.d.ts.map +1 -1
- package/dist/server/app-url.js +58 -11
- package/dist/server/app-url.js.map +1 -1
- package/dist/server/auth.d.ts +22 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +316 -65
- package/dist/server/auth.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +0 -4
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +0 -3
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +23 -0
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +29 -14
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/credential-provider.d.ts +14 -0
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +88 -11
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/google-auth-plugin.d.ts.map +1 -1
- package/dist/server/google-auth-plugin.js +65 -17
- package/dist/server/google-auth-plugin.js.map +1 -1
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +47 -17
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/local-migration.d.ts +41 -0
- package/dist/server/local-migration.d.ts.map +1 -0
- package/dist/server/local-migration.js +235 -0
- package/dist/server/local-migration.js.map +1 -0
- package/dist/server/oauth-public-origin.d.ts.map +1 -1
- package/dist/server/oauth-public-origin.js +19 -1
- package/dist/server/oauth-public-origin.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +74 -19
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +20 -5
- package/dist/server/poll.js.map +1 -1
- package/dist/server/request-context.d.ts +8 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +2 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/llm-connection.d.ts +10 -0
- package/dist/shared/llm-connection.d.ts.map +1 -0
- package/dist/shared/llm-connection.js +29 -0
- package/dist/shared/llm-connection.js.map +1 -0
- package/dist/shared/workspace-app-audience.d.ts +25 -0
- package/dist/shared/workspace-app-audience.d.ts.map +1 -0
- package/dist/shared/workspace-app-audience.js +126 -0
- package/dist/shared/workspace-app-audience.js.map +1 -0
- package/dist/shared/workspace-app-id.d.ts +1 -1
- package/dist/shared/workspace-app-id.d.ts.map +1 -1
- package/dist/shared/workspace-app-id.js +1 -0
- package/dist/shared/workspace-app-id.js.map +1 -1
- package/dist/sharing/access.d.ts.map +1 -1
- package/dist/sharing/access.js +46 -5
- package/dist/sharing/access.js.map +1 -1
- package/dist/sharing/actions/list-resource-shares.d.ts.map +1 -1
- package/dist/sharing/actions/list-resource-shares.js +8 -1
- package/dist/sharing/actions/list-resource-shares.js.map +1 -1
- package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -1
- package/dist/sharing/actions/set-resource-visibility.js +12 -3
- package/dist/sharing/actions/set-resource-visibility.js.map +1 -1
- package/dist/sharing/actions/share-resource.d.ts.map +1 -1
- package/dist/sharing/actions/share-resource.js +50 -1
- package/dist/sharing/actions/share-resource.js.map +1 -1
- package/dist/sharing/registry.d.ts +26 -0
- package/dist/sharing/registry.d.ts.map +1 -1
- package/dist/sharing/registry.js.map +1 -1
- package/dist/styles/agent-native.css +91 -0
- package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +72 -0
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +60 -37
- package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +28 -17
- package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +79 -0
- package/dist/templates/default/AGENTS.md +22 -19
- package/dist/templates/default/actions/navigate.ts +3 -0
- package/dist/templates/default/app/hooks/use-navigation-state.ts +29 -5
- package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +251 -0
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +264 -0
- package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +130 -0
- package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +112 -0
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +88 -0
- package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +191 -0
- package/dist/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +74 -0
- package/dist/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +75 -0
- package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +190 -0
- package/dist/templates/workspace-core/.agents/skills/create-skill/SKILL.md +168 -0
- package/dist/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +163 -0
- package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +205 -0
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +720 -0
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +92 -0
- package/dist/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +285 -0
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +192 -0
- package/dist/templates/workspace-core/.agents/skills/onboarding/SKILL.md +43 -0
- package/dist/templates/workspace-core/.agents/skills/portability/SKILL.md +84 -0
- package/dist/templates/workspace-core/.agents/skills/qa/SKILL.md +313 -0
- package/dist/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +112 -0
- package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +165 -0
- package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +41 -0
- package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +239 -0
- package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +191 -0
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +79 -0
- package/dist/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +73 -0
- package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +79 -0
- package/dist/templates/workspace-core/.agents/skills/sharing/SKILL.md +217 -0
- package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +132 -0
- package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +150 -0
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +124 -0
- package/dist/templates/workspace-core/AGENTS.md +16 -1
- package/dist/templates/workspace-root/AGENTS.md +35 -0
- package/dist/templates/workspace-root/README.md +7 -0
- package/dist/tools/actions.d.ts +3 -0
- package/dist/tools/actions.d.ts.map +1 -0
- package/dist/tools/actions.js +272 -0
- package/dist/tools/actions.js.map +1 -0
- package/dist/tools/fetch-tool.d.ts +23 -0
- package/dist/tools/fetch-tool.d.ts.map +1 -0
- package/dist/tools/fetch-tool.js +178 -0
- package/dist/tools/fetch-tool.js.map +1 -0
- package/dist/tools/html-shell.d.ts +45 -0
- package/dist/tools/html-shell.d.ts.map +1 -0
- package/dist/tools/html-shell.js +514 -0
- package/dist/tools/html-shell.js.map +1 -0
- package/dist/tools/proxy-security.d.ts +12 -0
- package/dist/tools/proxy-security.d.ts.map +1 -0
- package/dist/tools/proxy-security.js +158 -0
- package/dist/tools/proxy-security.js.map +1 -0
- package/dist/tools/routes.d.ts +2 -0
- package/dist/tools/routes.d.ts.map +1 -0
- package/dist/tools/routes.js +627 -0
- package/dist/tools/routes.js.map +1 -0
- package/dist/tools/schema.d.ts +664 -0
- package/dist/tools/schema.d.ts.map +1 -0
- package/dist/tools/schema.js +146 -0
- package/dist/tools/schema.js.map +1 -0
- package/dist/tools/slots/routes.d.ts +15 -0
- package/dist/tools/slots/routes.d.ts.map +1 -0
- package/dist/tools/slots/routes.js +94 -0
- package/dist/tools/slots/routes.js.map +1 -0
- package/dist/tools/slots/schema.d.ts +303 -0
- package/dist/tools/slots/schema.d.ts.map +1 -0
- package/dist/tools/slots/schema.js +76 -0
- package/dist/tools/slots/schema.js.map +1 -0
- package/dist/tools/slots/store.d.ts +66 -0
- package/dist/tools/slots/store.d.ts.map +1 -0
- package/dist/tools/slots/store.js +227 -0
- package/dist/tools/slots/store.js.map +1 -0
- package/dist/tools/store.d.ts +40 -0
- package/dist/tools/store.d.ts.map +1 -0
- package/dist/tools/store.js +193 -0
- package/dist/tools/store.js.map +1 -0
- package/dist/tools/theme.d.ts +2 -0
- package/dist/tools/theme.d.ts.map +1 -0
- package/dist/tools/theme.js +67 -0
- package/dist/tools/theme.js.map +1 -0
- package/dist/tools/url-safety.d.ts +24 -0
- package/dist/tools/url-safety.d.ts.map +1 -0
- package/dist/tools/url-safety.js +224 -0
- package/dist/tools/url-safety.js.map +1 -0
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +4 -0
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/docs/content/authentication.md +36 -0
- package/docs/content/creating-templates.md +15 -0
- package/docs/content/dispatch.md +3 -3
- package/docs/content/multi-app-workspace.md +5 -0
- package/docs/content/tracking.md +12 -0
- package/docs/content/workspace-management.md +39 -4
- package/package.json +15 -12
- package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +72 -0
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +60 -37
- package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +28 -17
- package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +79 -0
- package/src/templates/default/AGENTS.md +22 -19
- package/src/templates/default/actions/navigate.ts +3 -0
- package/src/templates/default/app/hooks/use-navigation-state.ts +29 -5
- package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +251 -0
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +264 -0
- package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +130 -0
- package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +112 -0
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +88 -0
- package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +191 -0
- package/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +74 -0
- package/src/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +75 -0
- package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +190 -0
- package/src/templates/workspace-core/.agents/skills/create-skill/SKILL.md +168 -0
- package/src/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +163 -0
- package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +205 -0
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +720 -0
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +92 -0
- package/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +285 -0
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +192 -0
- package/src/templates/workspace-core/.agents/skills/onboarding/SKILL.md +43 -0
- package/src/templates/workspace-core/.agents/skills/portability/SKILL.md +84 -0
- package/src/templates/workspace-core/.agents/skills/qa/SKILL.md +313 -0
- package/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +112 -0
- package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +165 -0
- package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +41 -0
- package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +239 -0
- package/src/templates/workspace-core/.agents/skills/security/SKILL.md +191 -0
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +79 -0
- package/src/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +73 -0
- package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +79 -0
- package/src/templates/workspace-core/.agents/skills/sharing/SKILL.md +217 -0
- package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +132 -0
- package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +150 -0
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +124 -0
- package/src/templates/workspace-core/AGENTS.md +16 -1
- package/src/templates/workspace-root/AGENTS.md +35 -0
- package/src/templates/workspace-root/README.md +7 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { useEffect, useRef } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Pinch-to-zoom for canvas-style editors. Wires the trackpad pinch / Cmd+scroll
|
|
4
|
+
* wheel gesture and 2-pointer touchscreen pinch onto a scrolling container.
|
|
5
|
+
*
|
|
6
|
+
* Trackpad pinch is detected via `wheel` events with `ctrlKey: true` — browsers
|
|
7
|
+
* have synthesized that since ~2015 specifically so web apps can intercept the
|
|
8
|
+
* gesture. `metaKey` is also accepted so Cmd+scroll on Mac feels native.
|
|
9
|
+
*
|
|
10
|
+
* The hook only calls `setZoom(next)` — it doesn't render anything. Templates
|
|
11
|
+
* decide how to translate the zoom percentage into visual scaling (CSS
|
|
12
|
+
* `transform: scale()`, width/height, etc.).
|
|
13
|
+
*/
|
|
14
|
+
export function usePinchZoom({ containerRef, zoom, setZoom, min = 25, max = 400, zoomToCursor = true, enabled = true, }) {
|
|
15
|
+
const zoomRef = useRef(zoom);
|
|
16
|
+
const setZoomRef = useRef(setZoom);
|
|
17
|
+
zoomRef.current = zoom;
|
|
18
|
+
setZoomRef.current = setZoom;
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (!enabled)
|
|
21
|
+
return;
|
|
22
|
+
const container = containerRef.current;
|
|
23
|
+
if (!container)
|
|
24
|
+
return;
|
|
25
|
+
const clamp = (n) => Math.max(min, Math.min(max, n));
|
|
26
|
+
const handleWheel = (e) => {
|
|
27
|
+
if (!(e.ctrlKey || e.metaKey))
|
|
28
|
+
return;
|
|
29
|
+
e.preventDefault();
|
|
30
|
+
const currentZoom = zoomRef.current;
|
|
31
|
+
const clampedDelta = Math.max(-50, Math.min(50, e.deltaY));
|
|
32
|
+
const factor = Math.exp(-clampedDelta * 0.01);
|
|
33
|
+
const nextZoom = clamp(currentZoom * factor);
|
|
34
|
+
if (nextZoom === currentZoom)
|
|
35
|
+
return;
|
|
36
|
+
if (zoomToCursor) {
|
|
37
|
+
const rect = container.getBoundingClientRect();
|
|
38
|
+
const cx = e.clientX - rect.left + container.scrollLeft;
|
|
39
|
+
const cy = e.clientY - rect.top + container.scrollTop;
|
|
40
|
+
const ratio = nextZoom / currentZoom;
|
|
41
|
+
const dx = cx * (ratio - 1);
|
|
42
|
+
const dy = cy * (ratio - 1);
|
|
43
|
+
setZoomRef.current(nextZoom);
|
|
44
|
+
requestAnimationFrame(() => {
|
|
45
|
+
container.scrollLeft += dx;
|
|
46
|
+
container.scrollTop += dy;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
setZoomRef.current(nextZoom);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const activePointers = new Map();
|
|
54
|
+
let initialDistance = 0;
|
|
55
|
+
let initialZoom = 0;
|
|
56
|
+
const handlePointerDown = (e) => {
|
|
57
|
+
if (e.pointerType !== "touch")
|
|
58
|
+
return;
|
|
59
|
+
activePointers.set(e.pointerId, { x: e.clientX, y: e.clientY });
|
|
60
|
+
if (activePointers.size === 2) {
|
|
61
|
+
const [p1, p2] = Array.from(activePointers.values());
|
|
62
|
+
initialDistance = Math.hypot(p2.x - p1.x, p2.y - p1.y);
|
|
63
|
+
initialZoom = zoomRef.current;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const handlePointerMove = (e) => {
|
|
67
|
+
if (e.pointerType !== "touch")
|
|
68
|
+
return;
|
|
69
|
+
if (!activePointers.has(e.pointerId))
|
|
70
|
+
return;
|
|
71
|
+
activePointers.set(e.pointerId, { x: e.clientX, y: e.clientY });
|
|
72
|
+
if (activePointers.size === 2 && initialDistance > 0) {
|
|
73
|
+
const [p1, p2] = Array.from(activePointers.values());
|
|
74
|
+
const distance = Math.hypot(p2.x - p1.x, p2.y - p1.y);
|
|
75
|
+
const nextZoom = clamp(initialZoom * (distance / initialDistance));
|
|
76
|
+
if (nextZoom !== zoomRef.current) {
|
|
77
|
+
setZoomRef.current(nextZoom);
|
|
78
|
+
}
|
|
79
|
+
e.preventDefault();
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const handlePointerEnd = (e) => {
|
|
83
|
+
if (e.pointerType !== "touch")
|
|
84
|
+
return;
|
|
85
|
+
activePointers.delete(e.pointerId);
|
|
86
|
+
if (activePointers.size < 2)
|
|
87
|
+
initialDistance = 0;
|
|
88
|
+
};
|
|
89
|
+
container.addEventListener("wheel", handleWheel, { passive: false });
|
|
90
|
+
container.addEventListener("pointerdown", handlePointerDown);
|
|
91
|
+
container.addEventListener("pointermove", handlePointerMove, {
|
|
92
|
+
passive: false,
|
|
93
|
+
});
|
|
94
|
+
container.addEventListener("pointerup", handlePointerEnd);
|
|
95
|
+
container.addEventListener("pointercancel", handlePointerEnd);
|
|
96
|
+
return () => {
|
|
97
|
+
container.removeEventListener("wheel", handleWheel);
|
|
98
|
+
container.removeEventListener("pointerdown", handlePointerDown);
|
|
99
|
+
container.removeEventListener("pointermove", handlePointerMove);
|
|
100
|
+
container.removeEventListener("pointerup", handlePointerEnd);
|
|
101
|
+
container.removeEventListener("pointercancel", handlePointerEnd);
|
|
102
|
+
};
|
|
103
|
+
}, [containerRef, enabled, min, max, zoomToCursor]);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=use-pinch-zoom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-pinch-zoom.js","sourceRoot":"","sources":["../../src/client/use-pinch-zoom.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useRef } from \"react\";\n\nexport interface UsePinchZoomOptions {\n /** Scrolling viewport that receives the gesture. The scaled content should\n * live inside this element. */\n containerRef: React.RefObject<HTMLElement | null>;\n /** Current zoom as a percentage (100 = 100%). */\n zoom: number;\n /** Setter for the zoom value (called with the next percentage). */\n setZoom: (next: number) => void;\n /** Minimum zoom percentage. Default 25. */\n min?: number;\n /** Maximum zoom percentage. Default 400. */\n max?: number;\n /** When true (default), adjusts container scroll so the point under the\n * cursor stays under the cursor during wheel-zoom. Assumes the scaled\n * content uses `transform-origin: top left` (or equivalent — e.g. resizing\n * the inner container's width proportionally to zoom). Disable for layouts\n * with `transform-origin: center center`. */\n zoomToCursor?: boolean;\n /** Disable the hook entirely without unmounting it. */\n enabled?: boolean;\n}\n\n/**\n * Pinch-to-zoom for canvas-style editors. Wires the trackpad pinch / Cmd+scroll\n * wheel gesture and 2-pointer touchscreen pinch onto a scrolling container.\n *\n * Trackpad pinch is detected via `wheel` events with `ctrlKey: true` — browsers\n * have synthesized that since ~2015 specifically so web apps can intercept the\n * gesture. `metaKey` is also accepted so Cmd+scroll on Mac feels native.\n *\n * The hook only calls `setZoom(next)` — it doesn't render anything. Templates\n * decide how to translate the zoom percentage into visual scaling (CSS\n * `transform: scale()`, width/height, etc.).\n */\nexport function usePinchZoom({\n containerRef,\n zoom,\n setZoom,\n min = 25,\n max = 400,\n zoomToCursor = true,\n enabled = true,\n}: UsePinchZoomOptions) {\n const zoomRef = useRef(zoom);\n const setZoomRef = useRef(setZoom);\n zoomRef.current = zoom;\n setZoomRef.current = setZoom;\n\n useEffect(() => {\n if (!enabled) return;\n const container = containerRef.current;\n if (!container) return;\n\n const clamp = (n: number) => Math.max(min, Math.min(max, n));\n\n const handleWheel = (e: WheelEvent) => {\n if (!(e.ctrlKey || e.metaKey)) return;\n e.preventDefault();\n\n const currentZoom = zoomRef.current;\n const clampedDelta = Math.max(-50, Math.min(50, e.deltaY));\n const factor = Math.exp(-clampedDelta * 0.01);\n const nextZoom = clamp(currentZoom * factor);\n\n if (nextZoom === currentZoom) return;\n\n if (zoomToCursor) {\n const rect = container.getBoundingClientRect();\n const cx = e.clientX - rect.left + container.scrollLeft;\n const cy = e.clientY - rect.top + container.scrollTop;\n const ratio = nextZoom / currentZoom;\n const dx = cx * (ratio - 1);\n const dy = cy * (ratio - 1);\n setZoomRef.current(nextZoom);\n requestAnimationFrame(() => {\n container.scrollLeft += dx;\n container.scrollTop += dy;\n });\n } else {\n setZoomRef.current(nextZoom);\n }\n };\n\n const activePointers = new Map<number, { x: number; y: number }>();\n let initialDistance = 0;\n let initialZoom = 0;\n\n const handlePointerDown = (e: PointerEvent) => {\n if (e.pointerType !== \"touch\") return;\n activePointers.set(e.pointerId, { x: e.clientX, y: e.clientY });\n if (activePointers.size === 2) {\n const [p1, p2] = Array.from(activePointers.values());\n initialDistance = Math.hypot(p2.x - p1.x, p2.y - p1.y);\n initialZoom = zoomRef.current;\n }\n };\n\n const handlePointerMove = (e: PointerEvent) => {\n if (e.pointerType !== \"touch\") return;\n if (!activePointers.has(e.pointerId)) return;\n activePointers.set(e.pointerId, { x: e.clientX, y: e.clientY });\n if (activePointers.size === 2 && initialDistance > 0) {\n const [p1, p2] = Array.from(activePointers.values());\n const distance = Math.hypot(p2.x - p1.x, p2.y - p1.y);\n const nextZoom = clamp(initialZoom * (distance / initialDistance));\n if (nextZoom !== zoomRef.current) {\n setZoomRef.current(nextZoom);\n }\n e.preventDefault();\n }\n };\n\n const handlePointerEnd = (e: PointerEvent) => {\n if (e.pointerType !== \"touch\") return;\n activePointers.delete(e.pointerId);\n if (activePointers.size < 2) initialDistance = 0;\n };\n\n container.addEventListener(\"wheel\", handleWheel, { passive: false });\n container.addEventListener(\"pointerdown\", handlePointerDown);\n container.addEventListener(\"pointermove\", handlePointerMove, {\n passive: false,\n });\n container.addEventListener(\"pointerup\", handlePointerEnd);\n container.addEventListener(\"pointercancel\", handlePointerEnd);\n\n return () => {\n container.removeEventListener(\"wheel\", handleWheel);\n container.removeEventListener(\"pointerdown\", handlePointerDown);\n container.removeEventListener(\"pointermove\", handlePointerMove);\n container.removeEventListener(\"pointerup\", handlePointerEnd);\n container.removeEventListener(\"pointercancel\", handlePointerEnd);\n };\n }, [containerRef, enabled, min, max, zoomToCursor]);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-deploy.d.ts","sourceRoot":"","sources":["../../src/deploy/workspace-deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace-deploy.d.ts","sourceRoot":"","sources":["../../src/deploy/workspace-deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAe7C,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAiD9E,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,YAAY,CAAC;CAChC;AAED,wBAAsB,kBAAkB,CACtC,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,IAAI,CAAC,CAwGf"}
|
|
@@ -19,6 +19,7 @@ import fs from "fs";
|
|
|
19
19
|
import path from "path";
|
|
20
20
|
import { findWorkspaceRoot } from "../scripts/utils.js";
|
|
21
21
|
import { DISPATCH_WORKSPACE_ROOT_REDIRECTS } from "../shared/workspace-app-id.js";
|
|
22
|
+
import { DEFAULT_WORKSPACE_APP_AUDIENCE, normalizeWorkspaceAppAudience, normalizeWorkspaceAppPathList, workspaceAppAudienceFromPackageJson, workspaceAppRouteAccessFromPackageJson, } from "../shared/workspace-app-audience.js";
|
|
22
23
|
const NETLIFY_WORKSPACE_STATIC_DIR = "_workspace_static";
|
|
23
24
|
const NETLIFY_PUBLIC_ASSET_EXTENSIONS = new Set([
|
|
24
25
|
"avif",
|
|
@@ -121,6 +122,8 @@ export async function runWorkspaceDeploy(opts = {}) {
|
|
|
121
122
|
}
|
|
122
123
|
function buildOneApp(workspaceRoot, app, preset, execFile, workspaceApps) {
|
|
123
124
|
const appDir = path.join(workspaceRoot, "apps", app);
|
|
125
|
+
const workspaceAppAudience = workspaceAppAudienceForApp(workspaceApps, app);
|
|
126
|
+
const workspaceAppRouteAccess = workspaceAppRouteAccessForApp(workspaceApps, app);
|
|
124
127
|
const workspaceGatewayUrl = process.env.VITE_WORKSPACE_GATEWAY_URL || workspaceBaseUrl();
|
|
125
128
|
const workspaceOAuthUrl = workspaceOAuthOrigin(workspaceGatewayUrl);
|
|
126
129
|
const env = {
|
|
@@ -130,6 +133,13 @@ function buildOneApp(workspaceRoot, app, preset, execFile, workspaceApps) {
|
|
|
130
133
|
VITE_AGENT_NATIVE_WORKSPACE: "1",
|
|
131
134
|
APP_BASE_PATH: `/${app}`,
|
|
132
135
|
VITE_APP_BASE_PATH: `/${app}`,
|
|
136
|
+
AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: workspaceAppAudience,
|
|
137
|
+
AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: JSON.stringify(workspaceAppRouteAccess.publicPaths),
|
|
138
|
+
AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: JSON.stringify(workspaceAppRouteAccess.protectedPaths),
|
|
139
|
+
VITE_AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: workspaceAppAudience,
|
|
140
|
+
VITE_AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: JSON.stringify(workspaceAppRouteAccess.publicPaths),
|
|
141
|
+
VITE_AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: JSON.stringify(workspaceAppRouteAccess.protectedPaths),
|
|
142
|
+
VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON: JSON.stringify(workspaceApps),
|
|
133
143
|
...(workspaceGatewayUrl
|
|
134
144
|
? {
|
|
135
145
|
WORKSPACE_GATEWAY_URL: process.env.WORKSPACE_GATEWAY_URL || workspaceGatewayUrl,
|
|
@@ -263,6 +273,10 @@ function writeCloudflareRoutingManifest(distDir, apps) {
|
|
|
263
273
|
: "";
|
|
264
274
|
const dispatchRootDynamicAliasRoutes = apps.includes("dispatch")
|
|
265
275
|
? ` if (pathname.startsWith("/apps/")) return Response.redirect(new URL("/dispatch" + pathname + search, request.url).toString(), 302);
|
|
276
|
+
`
|
|
277
|
+
: "";
|
|
278
|
+
const dispatchMountedRootRedirect = apps.includes("dispatch")
|
|
279
|
+
? ` if (pathname === "/dispatch" || pathname === "/dispatch/") return Response.redirect(new URL("/dispatch/overview" + search, request.url).toString(), 302);
|
|
266
280
|
`
|
|
267
281
|
: "";
|
|
268
282
|
const worker = `${imports}
|
|
@@ -270,7 +284,7 @@ function writeCloudflareRoutingManifest(distDir, apps) {
|
|
|
270
284
|
export default {
|
|
271
285
|
async fetch(request, env, ctx) {
|
|
272
286
|
const { pathname, search } = new URL(request.url);
|
|
273
|
-
${dispatchRootFrameworkRoutes}${dispatchRootFaviconRoute}${dispatchRootAliasRoutes}${dispatchRootDynamicAliasRoutes}${dispatch}
|
|
287
|
+
${dispatchRootFrameworkRoutes}${dispatchRootFaviconRoute}${dispatchRootAliasRoutes}${dispatchRootDynamicAliasRoutes}${dispatchMountedRootRedirect}${dispatch}
|
|
274
288
|
if (pathname === "/") {
|
|
275
289
|
return Response.redirect(new URL("${cloudflareRootRedirectPath(apps)}", request.url).toString(), 302);
|
|
276
290
|
}
|
|
@@ -302,6 +316,7 @@ function writeNetlifyRedirects(distDir, apps) {
|
|
|
302
316
|
if (apps.includes("dispatch")) {
|
|
303
317
|
lines.push("/ /dispatch/overview 302");
|
|
304
318
|
lines.push("/dispatch /dispatch/overview 302");
|
|
319
|
+
lines.push("/dispatch/ /dispatch/overview 302");
|
|
305
320
|
for (const [from, to] of DISPATCH_WORKSPACE_ROOT_REDIRECTS) {
|
|
306
321
|
lines.push(`/${from} /dispatch/${to} 302`);
|
|
307
322
|
}
|
|
@@ -320,7 +335,7 @@ function writeVercelBuildConfig(outputDir, apps) {
|
|
|
320
335
|
if (faviconAsset) {
|
|
321
336
|
routes.push(vercelRedirect("/favicon.ico", `/dispatch/${faviconAsset}`));
|
|
322
337
|
}
|
|
323
|
-
routes.push(vercelRedirect("/", "/dispatch/overview"), vercelRedirect("/dispatch", "/dispatch/overview"));
|
|
338
|
+
routes.push(vercelRedirect("/", "/dispatch/overview"), vercelRedirect("/dispatch", "/dispatch/overview"), vercelRedirect("/dispatch/", "/dispatch/overview"));
|
|
324
339
|
for (const [from, to] of DISPATCH_WORKSPACE_ROOT_REDIRECTS) {
|
|
325
340
|
routes.push(vercelRedirect(`/${from}`, `/dispatch/${to}`));
|
|
326
341
|
}
|
|
@@ -401,6 +416,8 @@ function patchNetlifyFunctionEntry(functionDir, app, workspaceApps, staticDir) {
|
|
|
401
416
|
if (!fs.existsSync(serverPath))
|
|
402
417
|
return;
|
|
403
418
|
const basePath = `/${app}`;
|
|
419
|
+
const workspaceAppAudience = workspaceAppAudienceForApp(workspaceApps, app);
|
|
420
|
+
const workspaceAppRouteAccess = workspaceAppRouteAccessForApp(workspaceApps, app);
|
|
404
421
|
const pathConfig = app === "dispatch"
|
|
405
422
|
? ["/_agent-native/*", "/.well-known/*", `${basePath}/*`]
|
|
406
423
|
: [basePath, `${basePath}/*`];
|
|
@@ -429,8 +446,15 @@ function setBasePathEnv() {
|
|
|
429
446
|
Object.assign(processRef.env, {
|
|
430
447
|
AGENT_NATIVE_WORKSPACE: "1",
|
|
431
448
|
APP_BASE_PATH: basePath,
|
|
449
|
+
AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},
|
|
450
|
+
AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},
|
|
451
|
+
AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},
|
|
432
452
|
VITE_AGENT_NATIVE_WORKSPACE: "1",
|
|
433
453
|
VITE_APP_BASE_PATH: basePath,
|
|
454
|
+
VITE_AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},
|
|
455
|
+
VITE_AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},
|
|
456
|
+
VITE_AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},
|
|
457
|
+
VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON: ${JSON.stringify(JSON.stringify(workspaceApps))},
|
|
434
458
|
${JSON.stringify(WORKSPACE_APPS_ENV_KEY)}: ${JSON.stringify(JSON.stringify(workspaceApps))},
|
|
435
459
|
});
|
|
436
460
|
}
|
|
@@ -469,6 +493,8 @@ function patchVercelFunctionEntry(functionDir, app, workspaceApps) {
|
|
|
469
493
|
fs.rmSync(mainPath, { force: true });
|
|
470
494
|
fs.renameSync(entryPath, mainPath);
|
|
471
495
|
const basePath = `/${app}`;
|
|
496
|
+
const workspaceAppAudience = workspaceAppAudienceForApp(workspaceApps, app);
|
|
497
|
+
const workspaceAppRouteAccess = workspaceAppRouteAccessForApp(workspaceApps, app);
|
|
472
498
|
const entry = `const basePath = ${JSON.stringify(basePath)};
|
|
473
499
|
|
|
474
500
|
function setBasePathEnv() {
|
|
@@ -477,8 +503,15 @@ function setBasePathEnv() {
|
|
|
477
503
|
Object.assign(processRef.env, {
|
|
478
504
|
AGENT_NATIVE_WORKSPACE: "1",
|
|
479
505
|
APP_BASE_PATH: basePath,
|
|
506
|
+
AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},
|
|
507
|
+
AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},
|
|
508
|
+
AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},
|
|
480
509
|
VITE_AGENT_NATIVE_WORKSPACE: "1",
|
|
481
510
|
VITE_APP_BASE_PATH: basePath,
|
|
511
|
+
VITE_AGENT_NATIVE_WORKSPACE_APP_AUDIENCE: ${JSON.stringify(workspaceAppAudience)},
|
|
512
|
+
VITE_AGENT_NATIVE_WORKSPACE_APP_PUBLIC_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.publicPaths))},
|
|
513
|
+
VITE_AGENT_NATIVE_WORKSPACE_APP_PROTECTED_PATHS: ${JSON.stringify(JSON.stringify(workspaceAppRouteAccess.protectedPaths))},
|
|
514
|
+
VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON: ${JSON.stringify(JSON.stringify(workspaceApps))},
|
|
482
515
|
${JSON.stringify(WORKSPACE_APPS_ENV_KEY)}: ${JSON.stringify(JSON.stringify(workspaceApps))},
|
|
483
516
|
});
|
|
484
517
|
}
|
|
@@ -590,6 +623,17 @@ function readWorkspaceAppManifest(workspaceRoot, apps) {
|
|
|
590
623
|
const appPath = `/${app}`;
|
|
591
624
|
const explicit = explicitApps.get(app);
|
|
592
625
|
const url = normalizeWorkspaceAppUrl(explicit?.url) ?? workspaceAppUrl(appPath);
|
|
626
|
+
const audience = workspaceAppAudienceFromPackageJson(pkg) ??
|
|
627
|
+
explicit?.audience ??
|
|
628
|
+
DEFAULT_WORKSPACE_APP_AUDIENCE;
|
|
629
|
+
const packageRouteAccess = workspaceAppRouteAccessFromPackageJson(pkg);
|
|
630
|
+
// Prefer the package.json value whenever the field was set — including
|
|
631
|
+
// an explicit empty array, which is how a per-app package.json signals
|
|
632
|
+
// "clear any previously-published manifest override." Falling back on
|
|
633
|
+
// length > 0 would silently keep the explicit override even after the
|
|
634
|
+
// app owner blanked their list.
|
|
635
|
+
const publicPaths = packageRouteAccess.publicPaths ?? explicit?.publicPaths ?? [];
|
|
636
|
+
const protectedPaths = packageRouteAccess.protectedPaths ?? explicit?.protectedPaths ?? [];
|
|
593
637
|
return {
|
|
594
638
|
id: app,
|
|
595
639
|
name: pkg?.displayName || titleCase(app),
|
|
@@ -597,6 +641,9 @@ function readWorkspaceAppManifest(workspaceRoot, apps) {
|
|
|
597
641
|
path: appPath,
|
|
598
642
|
...(url ? { url } : {}),
|
|
599
643
|
isDispatch: app === "dispatch",
|
|
644
|
+
audience,
|
|
645
|
+
publicPaths,
|
|
646
|
+
protectedPaths,
|
|
600
647
|
};
|
|
601
648
|
})
|
|
602
649
|
.sort((a, b) => {
|
|
@@ -645,20 +692,36 @@ function parseWorkspaceAppsManifest(parsed) {
|
|
|
645
692
|
if (!id)
|
|
646
693
|
return null;
|
|
647
694
|
const url = normalizeWorkspaceAppUrl(entry.url);
|
|
695
|
+
const audience = entry.audience === undefined
|
|
696
|
+
? undefined
|
|
697
|
+
: normalizeWorkspaceAppAudience(entry.audience);
|
|
698
|
+
const publicPaths = normalizeWorkspaceAppPathList(entry.publicPaths);
|
|
699
|
+
const protectedPaths = normalizeWorkspaceAppPathList(entry.protectedPaths);
|
|
648
700
|
return {
|
|
649
701
|
id,
|
|
650
702
|
...(url ? { url } : {}),
|
|
703
|
+
...(audience ? { audience } : {}),
|
|
704
|
+
...(publicPaths.length > 0 ? { publicPaths } : {}),
|
|
705
|
+
...(protectedPaths.length > 0 ? { protectedPaths } : {}),
|
|
651
706
|
};
|
|
652
707
|
})
|
|
653
708
|
.filter((app) => !!app);
|
|
654
709
|
return apps.length ? apps : null;
|
|
655
710
|
}
|
|
656
711
|
function workspaceBaseUrl() {
|
|
657
|
-
|
|
658
|
-
|
|
712
|
+
const gatewayOrigin = process.env.WORKSPACE_GATEWAY_URL || process.env.VITE_WORKSPACE_GATEWAY_URL;
|
|
713
|
+
const publicGatewayOrigin = normalizeOrigin(gatewayOrigin);
|
|
714
|
+
const gatewayFallback = publicGatewayOrigin && !isLoopbackOrigin(publicGatewayOrigin)
|
|
715
|
+
? gatewayOrigin
|
|
716
|
+
: null;
|
|
717
|
+
return (process.env.APP_URL ||
|
|
718
|
+
process.env.WORKSPACE_OAUTH_ORIGIN ||
|
|
719
|
+
process.env.VITE_WORKSPACE_OAUTH_ORIGIN ||
|
|
659
720
|
process.env.URL ||
|
|
660
721
|
process.env.DEPLOY_URL ||
|
|
661
722
|
process.env.BETTER_AUTH_URL ||
|
|
723
|
+
gatewayFallback ||
|
|
724
|
+
gatewayOrigin ||
|
|
662
725
|
null);
|
|
663
726
|
}
|
|
664
727
|
function normalizeOrigin(value) {
|
|
@@ -671,14 +734,34 @@ function normalizeOrigin(value) {
|
|
|
671
734
|
return undefined;
|
|
672
735
|
}
|
|
673
736
|
}
|
|
737
|
+
function isLoopbackOrigin(origin) {
|
|
738
|
+
if (!origin)
|
|
739
|
+
return false;
|
|
740
|
+
try {
|
|
741
|
+
const host = new URL(origin).hostname.toLowerCase();
|
|
742
|
+
return (host === "localhost" ||
|
|
743
|
+
host === "127.0.0.1" ||
|
|
744
|
+
host === "[::1]" ||
|
|
745
|
+
host === "::1");
|
|
746
|
+
}
|
|
747
|
+
catch {
|
|
748
|
+
return false;
|
|
749
|
+
}
|
|
750
|
+
}
|
|
674
751
|
function workspaceOAuthOrigin(workspaceGatewayUrl) {
|
|
752
|
+
// Explicit overrides (env vars set by the operator) win even if they happen
|
|
753
|
+
// to be loopback — that's a deliberate dev-against-prod choice.
|
|
754
|
+
// The gateway-URL fallback, however, is auto-resolved and would silently
|
|
755
|
+
// send users to localhost if the configured gateway is loopback in a
|
|
756
|
+
// production deploy. Strip loopback there so OAuth fails loudly instead.
|
|
757
|
+
const gatewayFallback = normalizeOrigin(workspaceGatewayUrl);
|
|
675
758
|
return (normalizeOrigin(process.env.VITE_WORKSPACE_OAUTH_ORIGIN) ||
|
|
676
759
|
normalizeOrigin(process.env.WORKSPACE_OAUTH_ORIGIN) ||
|
|
677
760
|
normalizeOrigin(process.env.APP_URL) ||
|
|
678
761
|
normalizeOrigin(process.env.BETTER_AUTH_URL) ||
|
|
679
762
|
normalizeOrigin(process.env.URL) ||
|
|
680
763
|
normalizeOrigin(process.env.DEPLOY_URL) ||
|
|
681
|
-
|
|
764
|
+
(isLoopbackOrigin(gatewayFallback) ? undefined : gatewayFallback));
|
|
682
765
|
}
|
|
683
766
|
function workspaceAppUrl(appPath) {
|
|
684
767
|
const base = workspaceBaseUrl();
|
|
@@ -780,6 +863,17 @@ function normalizePreset(value) {
|
|
|
780
863
|
function moduleIdent(app) {
|
|
781
864
|
return "app_" + app.replace(/[^a-zA-Z0-9_]/g, "_");
|
|
782
865
|
}
|
|
866
|
+
function workspaceAppAudienceForApp(workspaceApps, app) {
|
|
867
|
+
return (workspaceApps.find((entry) => entry.id === app)?.audience ??
|
|
868
|
+
DEFAULT_WORKSPACE_APP_AUDIENCE);
|
|
869
|
+
}
|
|
870
|
+
function workspaceAppRouteAccessForApp(workspaceApps, app) {
|
|
871
|
+
const entry = workspaceApps.find((candidate) => candidate.id === app);
|
|
872
|
+
return {
|
|
873
|
+
publicPaths: entry?.publicPaths ?? [],
|
|
874
|
+
protectedPaths: entry?.protectedPaths ?? [],
|
|
875
|
+
};
|
|
876
|
+
}
|
|
783
877
|
function compareWorkspaceAppIds(a, b) {
|
|
784
878
|
if (a === "dispatch")
|
|
785
879
|
return -1;
|