@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,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: create-skill
|
|
3
|
+
description: >-
|
|
4
|
+
How to create new skills for an agent-native app. Use when adding a new
|
|
5
|
+
skill, documenting a pattern the agent should follow, or creating reusable
|
|
6
|
+
guidance for the agent.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Create a Skill
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
Create a new skill when:
|
|
14
|
+
|
|
15
|
+
- There's a pattern the agent should follow repeatedly
|
|
16
|
+
- A workflow needs step-by-step guidance
|
|
17
|
+
- You want to scaffold files from a template
|
|
18
|
+
|
|
19
|
+
Don't create a skill when:
|
|
20
|
+
|
|
21
|
+
- The guidance already exists in another skill (extend it instead)
|
|
22
|
+
- You're documenting something the agent already knows (e.g., how to write TypeScript)
|
|
23
|
+
- The guidance is a one-off — put it in `AGENTS.md` or `learnings.md` instead
|
|
24
|
+
|
|
25
|
+
## 5-Question Interview
|
|
26
|
+
|
|
27
|
+
Before writing the skill, answer these:
|
|
28
|
+
|
|
29
|
+
1. **What should this skill enable?** — The core purpose in one sentence.
|
|
30
|
+
2. **Which agent-native rule does it serve?** — Rule 1 (data in SQL), Rule 2 (delegate to agent), Rule 3 (scripts), Rule 4 (polling sync), Rule 5 (self-modify), Rule 6 (app-state in SQL), or "utility."
|
|
31
|
+
3. **When should it trigger?** — Describe the situations in natural language. Be slightly pushy — over-triggering is better than under-triggering.
|
|
32
|
+
4. **Does it involve context awareness?** — Does the agent need to know what the user is looking at to use this skill? If yes, the skill should reference the `navigation` app-state key and the `view-screen` script pattern. See the **context-awareness** skill.
|
|
33
|
+
5. **What type of skill?** — Pattern, Workflow, or Generator (see templates below).
|
|
34
|
+
6. **Does it need supporting files?** — References (read-only context) or none. Keep it minimal.
|
|
35
|
+
|
|
36
|
+
## Skill Types and Templates
|
|
37
|
+
|
|
38
|
+
### Pattern (architectural rule)
|
|
39
|
+
|
|
40
|
+
For documenting how things should be done:
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
---
|
|
44
|
+
name: my-pattern
|
|
45
|
+
description: >-
|
|
46
|
+
[Under 40 words. When should this trigger?]
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
# [Pattern Name]
|
|
50
|
+
|
|
51
|
+
## Rule
|
|
52
|
+
|
|
53
|
+
[One sentence: what must be true]
|
|
54
|
+
|
|
55
|
+
## Why
|
|
56
|
+
|
|
57
|
+
[Why this rule exists]
|
|
58
|
+
|
|
59
|
+
## How
|
|
60
|
+
|
|
61
|
+
[How to follow it, with code examples]
|
|
62
|
+
|
|
63
|
+
## Don't
|
|
64
|
+
|
|
65
|
+
[Common violations]
|
|
66
|
+
|
|
67
|
+
## Related Skills
|
|
68
|
+
|
|
69
|
+
[Which skills compose with this one]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Workflow (step-by-step)
|
|
73
|
+
|
|
74
|
+
For multi-step implementation tasks:
|
|
75
|
+
|
|
76
|
+
```markdown
|
|
77
|
+
---
|
|
78
|
+
name: my-workflow
|
|
79
|
+
description: >-
|
|
80
|
+
[Under 40 words. When should this trigger?]
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
# [Workflow Name]
|
|
84
|
+
|
|
85
|
+
## Prerequisites
|
|
86
|
+
|
|
87
|
+
[What must be in place first]
|
|
88
|
+
|
|
89
|
+
## Steps
|
|
90
|
+
|
|
91
|
+
[Numbered steps with code examples]
|
|
92
|
+
|
|
93
|
+
## Verification
|
|
94
|
+
|
|
95
|
+
[How to confirm it worked]
|
|
96
|
+
|
|
97
|
+
## Troubleshooting
|
|
98
|
+
|
|
99
|
+
[Common issues and fixes]
|
|
100
|
+
|
|
101
|
+
## Related Skills
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Generator (scaffolding)
|
|
105
|
+
|
|
106
|
+
For creating files from templates:
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
---
|
|
110
|
+
name: my-generator
|
|
111
|
+
description: >-
|
|
112
|
+
[Under 40 words. When should this trigger?]
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
# [Generator Name]
|
|
116
|
+
|
|
117
|
+
## Usage
|
|
118
|
+
|
|
119
|
+
[How to invoke — what args/inputs are needed]
|
|
120
|
+
|
|
121
|
+
## What Gets Created
|
|
122
|
+
|
|
123
|
+
[List of files and their purpose]
|
|
124
|
+
|
|
125
|
+
## Template
|
|
126
|
+
|
|
127
|
+
[The template content with placeholders]
|
|
128
|
+
|
|
129
|
+
## After Generation
|
|
130
|
+
|
|
131
|
+
[What to do next — wire up SSE, add routes, etc.]
|
|
132
|
+
|
|
133
|
+
## Related Skills
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Naming Conventions
|
|
137
|
+
|
|
138
|
+
- Hyphen-case only: `[a-z0-9-]`, max 64 characters
|
|
139
|
+
- Pattern skills: descriptive names (`storing-data`, `delegate-to-agent`)
|
|
140
|
+
- Workflow/generator skills: verb-noun (`create-script`, `capture-learnings`)
|
|
141
|
+
|
|
142
|
+
## Tips
|
|
143
|
+
|
|
144
|
+
- **Keep descriptions under 40 words** — They're loaded into context on every conversation.
|
|
145
|
+
- **Keep SKILL.md under 500 lines** — Move detailed content to `references/` files.
|
|
146
|
+
- **Use standard markdown headings** — No XML tags or custom formats.
|
|
147
|
+
|
|
148
|
+
## Anti-Patterns
|
|
149
|
+
|
|
150
|
+
- **Inline LLM calls** — Skills must not call LLMs directly (violates Rule 2)
|
|
151
|
+
- **Database patterns** — Skills must not introduce databases (violates Rule 1)
|
|
152
|
+
- **Ignoring db sync** — If a skill creates data, mention wiring up `useDbSync`
|
|
153
|
+
- **Vague descriptions** — "Helps with development" won't trigger. Be specific about _when_.
|
|
154
|
+
- **Pure documentation** — Skills should guide action, not just explain concepts
|
|
155
|
+
|
|
156
|
+
## File Structure
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
.agents/skills/my-skill/
|
|
160
|
+
├── SKILL.md # Main skill (required)
|
|
161
|
+
└── references/ # Optional supporting context
|
|
162
|
+
└── detailed-guide.md
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Related Skills
|
|
166
|
+
|
|
167
|
+
- **capture-learnings** — When a learning graduates to reusable guidance, create a skill
|
|
168
|
+
- **self-modifying-code** — The agent can create new skills (Tier 2 modification)
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: delegate-to-agent
|
|
3
|
+
description: >-
|
|
4
|
+
How to delegate all AI work to the agent chat. Use when delegating AI work
|
|
5
|
+
from UI or scripts to the agent, when a user asks for agent behavior or
|
|
6
|
+
LLM-powered features, when tempted to add inline LLM calls, or when sending
|
|
7
|
+
messages to the agent from application code.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Delegate All AI to the Agent
|
|
11
|
+
|
|
12
|
+
## Rule
|
|
13
|
+
|
|
14
|
+
The UI and server never call an LLM directly. All AI work is delegated to the agent through the chat bridge.
|
|
15
|
+
|
|
16
|
+
## Why
|
|
17
|
+
|
|
18
|
+
The agent is the single AI interface. It has context about the full project, can read/write any file, and can run scripts. Inline LLM calls bypass this — they create a shadow AI that doesn't know what the agent knows and can't coordinate with it.
|
|
19
|
+
|
|
20
|
+
## How
|
|
21
|
+
|
|
22
|
+
**From the UI (client):**
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
import { sendToAgentChat } from "@agent-native/core";
|
|
26
|
+
|
|
27
|
+
sendToAgentChat({
|
|
28
|
+
message: "Generate a summary of this document",
|
|
29
|
+
context: documentContent, // optional hidden context (not shown in chat UI)
|
|
30
|
+
submit: true, // auto-submit to the agent
|
|
31
|
+
});
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**From scripts (Node):**
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import { agentChat } from "@agent-native/core";
|
|
38
|
+
|
|
39
|
+
agentChat.submit("Process the uploaded images and create thumbnails");
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**From the UI, detecting when agent is done:**
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
import { useAgentChatGenerating } from "@agent-native/core";
|
|
46
|
+
|
|
47
|
+
function MyComponent() {
|
|
48
|
+
const isGenerating = useAgentChatGenerating();
|
|
49
|
+
// Show loading state while agent is working
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## `submit` vs Prefill
|
|
54
|
+
|
|
55
|
+
The `submit` option controls whether the message is sent automatically or placed in the chat input for user review:
|
|
56
|
+
|
|
57
|
+
| `submit` value | Behavior | Use when |
|
|
58
|
+
| -------------- | --------------------------------------- | ----------------------------------------------------------------------------------- |
|
|
59
|
+
| `true` | Auto-submits to the agent immediately | Routine operations the user has already approved |
|
|
60
|
+
| `false` | Prefills the chat input for user review | High-stakes operations (deleting data, modifying code, API calls with side effects) |
|
|
61
|
+
| omitted | Uses the project's default setting | General-purpose delegation |
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
// Auto-submit: routine operation
|
|
65
|
+
sendToAgentChat({ message: "Update the project summary", submit: true });
|
|
66
|
+
|
|
67
|
+
// Prefill: let user review before sending
|
|
68
|
+
sendToAgentChat({
|
|
69
|
+
message: "Delete all projects older than 30 days",
|
|
70
|
+
submit: false,
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Capture user input first when generating from a prompt
|
|
75
|
+
|
|
76
|
+
Buttons that produce new content ("New Design", "Create Dashboard", "Make Deck", "Generate Form") need the user's prompt as input. **Never hardcode a generic message** — the result will be a generic generation the user didn't actually ask for.
|
|
77
|
+
|
|
78
|
+
**Bad** — auto-submits a placeholder message; the user never said what they wanted:
|
|
79
|
+
|
|
80
|
+
```tsx
|
|
81
|
+
<Button
|
|
82
|
+
onClick={() =>
|
|
83
|
+
sendToAgentChat({ message: "make a design", submit: true })
|
|
84
|
+
}
|
|
85
|
+
>
|
|
86
|
+
New Design
|
|
87
|
+
</Button>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Good** — Popover anchored to the button captures the prompt, then submits it:
|
|
91
|
+
|
|
92
|
+
```tsx
|
|
93
|
+
<Popover open={open} onOpenChange={setOpen}>
|
|
94
|
+
<PopoverTrigger asChild>
|
|
95
|
+
<Button>New Design</Button>
|
|
96
|
+
</PopoverTrigger>
|
|
97
|
+
<PopoverContent className="w-96">
|
|
98
|
+
<Textarea
|
|
99
|
+
autoFocus
|
|
100
|
+
value={prompt}
|
|
101
|
+
onChange={(e) => setPrompt(e.target.value)}
|
|
102
|
+
placeholder="What do you want to design?"
|
|
103
|
+
/>
|
|
104
|
+
<Button
|
|
105
|
+
onClick={() => {
|
|
106
|
+
sendToAgentChat({ message: prompt, submit: true });
|
|
107
|
+
setOpen(false);
|
|
108
|
+
setPrompt("");
|
|
109
|
+
}}
|
|
110
|
+
>
|
|
111
|
+
Create
|
|
112
|
+
</Button>
|
|
113
|
+
</PopoverContent>
|
|
114
|
+
</Popover>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Always ask for input first when** the output depends on a prompt the user must provide — "design what?", "deck about what?", "dashboard for which metric?", "form for which use case?".
|
|
118
|
+
|
|
119
|
+
**Auto-submit without input is fine when intent is unambiguous:**
|
|
120
|
+
|
|
121
|
+
- "Try to fix" on a tool error — submits the error details with a clear fix instruction
|
|
122
|
+
- "Retry the last operation" after a transient failure
|
|
123
|
+
- Single-purpose buttons where there is nothing meaningful for the user to add
|
|
124
|
+
|
|
125
|
+
If you find yourself writing `submit: true` with a hardcoded creative verb (`"design a..."`, `"write a..."`, `"build a..."`), stop and add a Popover.
|
|
126
|
+
|
|
127
|
+
## Don't
|
|
128
|
+
|
|
129
|
+
- Don't `import Anthropic from "@anthropic-ai/sdk"` in client or server code
|
|
130
|
+
- Don't `import OpenAI from "openai"` in client or server code
|
|
131
|
+
- Don't make direct API calls to any LLM provider
|
|
132
|
+
- Don't use AI SDK functions like `generateText()`, `streamText()`, etc.
|
|
133
|
+
- Don't build "AI features" that bypass the agent chat
|
|
134
|
+
- Don't auto-submit a hardcoded prompt for generative actions — capture user input first (see above)
|
|
135
|
+
|
|
136
|
+
## Exception
|
|
137
|
+
|
|
138
|
+
Scripts may call external APIs (image generation, search, etc.) — but the AI reasoning and orchestration still goes through the agent. A script is a tool the agent uses, not a replacement for the agent.
|
|
139
|
+
|
|
140
|
+
## When to Use A2A Instead
|
|
141
|
+
|
|
142
|
+
`sendToAgentChat()` delegates work to the **local** agent — the one running alongside your app. When the work should go to a **different** agent entirely (e.g., asking an analytics agent for data, or a calendar agent for availability), use the A2A (agent-to-agent) protocol instead.
|
|
143
|
+
|
|
144
|
+
```ts
|
|
145
|
+
import { callAgent } from "@agent-native/core/a2a";
|
|
146
|
+
|
|
147
|
+
// Call a different agent — not the local agent chat
|
|
148
|
+
const stats = await callAgent(
|
|
149
|
+
"https://analytics.example.com",
|
|
150
|
+
"What were last week's signups?",
|
|
151
|
+
{ apiKey: process.env.ANALYTICS_A2A_KEY },
|
|
152
|
+
);
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
See the **a2a-protocol** skill for the full pattern.
|
|
156
|
+
|
|
157
|
+
## Related Skills
|
|
158
|
+
|
|
159
|
+
- **a2a-protocol** — When the work goes to a different agent, not the local one
|
|
160
|
+
- **scripts** — The agent invokes scripts via `pnpm action <name>` to perform complex operations
|
|
161
|
+
- **self-modifying-code** — The agent operates through the chat bridge to make code changes
|
|
162
|
+
- **storing-data** — The agent writes results to the database after processing requests
|
|
163
|
+
- **real-time-sync** — The UI updates automatically when the agent writes data
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: extension-points
|
|
3
|
+
description: >-
|
|
4
|
+
How extensions render as widgets inside other apps via named UI slots — the
|
|
5
|
+
framework's VS-Code-style extension system. Use when a user asks to add a
|
|
6
|
+
custom widget to an app surface (e.g. "add a sticky-note widget to my mail
|
|
7
|
+
contact sidebar"), when wiring an ExtensionSlot in a template, or when
|
|
8
|
+
marking an extension as installable into a slot.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Extension Points
|
|
12
|
+
|
|
13
|
+
> **Terminology note.** "Extensions" in this doc are the framework's
|
|
14
|
+
> sandboxed Alpine.js mini-app primitive (see the `extensions` skill).
|
|
15
|
+
> They are NOT LLM "tools" (function calls). The slot-system tables are
|
|
16
|
+
> still physically named `tool_slots` and `tool_slot_installs` for
|
|
17
|
+
> back-compat — see the table at the bottom of this doc and the
|
|
18
|
+
> "Database & API names" section in the `extensions` skill.
|
|
19
|
+
|
|
20
|
+
## Mental model
|
|
21
|
+
|
|
22
|
+
**Slots** are named React-shaped holes in apps. **Extensions** are widgets
|
|
23
|
+
that opt into filling those holes. The framework matches them up by string
|
|
24
|
+
ID.
|
|
25
|
+
|
|
26
|
+
Three primitives:
|
|
27
|
+
|
|
28
|
+
| Primitive | What it is |
|
|
29
|
+
| -------------------- | ------------------------------------------------------------------------------------------------ |
|
|
30
|
+
| **Slot** | `<ExtensionSlot id="..." context={...} />` dropped into an app's JSX |
|
|
31
|
+
| **Slot target** | A row saying "extension X can render in slot Y" — `tool_slots` table (Drizzle: `extensionSlots`) |
|
|
32
|
+
| **Slot install** | A row saying "user U wants extension X in slot Y" — `tool_slot_installs` (Drizzle: `extensionSlotInstalls`) |
|
|
33
|
+
|
|
34
|
+
When `<ExtensionSlot>` renders, it queries the user's installs and mounts
|
|
35
|
+
one `<EmbeddedTool>` (a small auto-sized iframe) per install, pushing the
|
|
36
|
+
slot's context into each via postMessage. (The component is still exported
|
|
37
|
+
as `EmbeddedTool` for back-compat.)
|
|
38
|
+
|
|
39
|
+
## Slot ID convention
|
|
40
|
+
|
|
41
|
+
`<app>.<area>.<position>` — three dot-separated lowercase-kebab segments.
|
|
42
|
+
|
|
43
|
+
- `mail.contact-sidebar.bottom`
|
|
44
|
+
- `mail.thread-toolbar.actions`
|
|
45
|
+
- `clips.right-panel.tabs`
|
|
46
|
+
- `calendar.event-detail.bottom`
|
|
47
|
+
|
|
48
|
+
Stable strings. Renaming a slot is a data migration — same as renaming a
|
|
49
|
+
route.
|
|
50
|
+
|
|
51
|
+
## How to author an extension that fills a slot
|
|
52
|
+
|
|
53
|
+
1. **Create the extension** with `create-extension`. The HTML can read
|
|
54
|
+
`window.slotContext` to get the host's context (the contact email,
|
|
55
|
+
recording id, etc.) and subscribe to changes via
|
|
56
|
+
`window.onSlotContext(fn)`.
|
|
57
|
+
|
|
58
|
+
```html
|
|
59
|
+
<div
|
|
60
|
+
x-data="{ contact: null }"
|
|
61
|
+
x-init="contact = window.slotContext; window.onSlotContext(c => contact = c)"
|
|
62
|
+
>
|
|
63
|
+
<template x-if="contact">
|
|
64
|
+
<div class="rounded-lg border p-4 m-4">
|
|
65
|
+
<p class="text-sm">
|
|
66
|
+
Notes for <span x-text="contact.contactEmail"></span>
|
|
67
|
+
</p>
|
|
68
|
+
</div>
|
|
69
|
+
</template>
|
|
70
|
+
</div>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
2. **Declare the slot target** with `add-extension-slot-target`:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
add-extension-slot-target { extensionId: "<id>", slotId: "mail.contact-sidebar.bottom" }
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
3. **Install it** for the current user with `install-extension`:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
install-extension { extensionId: "<id>", slotId: "mail.contact-sidebar.bottom" }
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The slot will pick up the install on its next render (≤2s via polling sync,
|
|
86
|
+
immediate after the action's UI invalidation).
|
|
87
|
+
|
|
88
|
+
## How to declare a slot in your app
|
|
89
|
+
|
|
90
|
+
Drop `<ExtensionSlot>` wherever you want to allow extensions:
|
|
91
|
+
|
|
92
|
+
```tsx
|
|
93
|
+
import { ExtensionSlot } from "@agent-native/core/client/extensions";
|
|
94
|
+
|
|
95
|
+
// inside your component
|
|
96
|
+
<ExtensionSlot
|
|
97
|
+
id="mail.contact-sidebar.bottom"
|
|
98
|
+
context={{ contactEmail: contact.email, contactName: contact.name }}
|
|
99
|
+
showEmptyAffordance
|
|
100
|
+
/>;
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
> The legacy import path `@agent-native/core/client/tools` continues to
|
|
104
|
+
> re-export the same component for back-compat with existing templates.
|
|
105
|
+
|
|
106
|
+
Props:
|
|
107
|
+
|
|
108
|
+
- `id` — slot identifier. Must match what extensions target.
|
|
109
|
+
- `context` — object pushed to each embedded extension as `slotContext`. Re-pushed
|
|
110
|
+
whenever this prop changes.
|
|
111
|
+
- `showEmptyAffordance` — when true, shows a "+ Add widget" button in the
|
|
112
|
+
empty state. Default: false (slot renders nothing when empty).
|
|
113
|
+
- `className` / `toolClassName` — optional styling hooks. (The `toolClassName`
|
|
114
|
+
prop name is kept for back-compat; it styles the embedded extension's
|
|
115
|
+
iframe wrapper.)
|
|
116
|
+
|
|
117
|
+
The host doesn't register slots in advance — `<ExtensionSlot>` is the
|
|
118
|
+
declaration. If an extension targets a slot ID that no app has placed, it
|
|
119
|
+
just won't render anywhere (the install record is harmless).
|
|
120
|
+
|
|
121
|
+
## Context contract
|
|
122
|
+
|
|
123
|
+
Each slot publishes whatever shape it wants via the `context` prop. There's
|
|
124
|
+
no schema enforcement in v1 — extensions should null-check fields and fail
|
|
125
|
+
gracefully if a field they expect is missing.
|
|
126
|
+
|
|
127
|
+
Document the context shape next to your `<ExtensionSlot>` so extension
|
|
128
|
+
authors know what to read. Convention: include the document in the slot
|
|
129
|
+
ID's prefix section so the agent can find it (`mail.contact-sidebar.*`
|
|
130
|
+
slots all publish `{ contactEmail, contactName }`).
|
|
131
|
+
|
|
132
|
+
## Agent actions
|
|
133
|
+
|
|
134
|
+
| Action | What it does |
|
|
135
|
+
| ---------------------------- | ----------------------------------------------------------------------- |
|
|
136
|
+
| `add-extension-slot-target` | Mark an extension as installable into a slot (extension author opts in) |
|
|
137
|
+
| `install-extension` | Install an extension into a slot for the current user |
|
|
138
|
+
| `uninstall-extension` | Remove an extension from a slot for the current user |
|
|
139
|
+
| `list-extensions-for-slot` | List installable extensions for a given slot ID |
|
|
140
|
+
| `list-extension-slots` | List slot targets an extension declares |
|
|
141
|
+
|
|
142
|
+
Typical flow when a user asks "add a CRM widget below my contacts":
|
|
143
|
+
|
|
144
|
+
1. `list-extensions-for-slot { slotId: "mail.contact-sidebar.bottom" }` —
|
|
145
|
+
see what's already installable
|
|
146
|
+
2. If a fitting extension exists: `install-extension`
|
|
147
|
+
3. Otherwise: `create-extension` → `add-extension-slot-target` →
|
|
148
|
+
`install-extension`
|
|
149
|
+
|
|
150
|
+
## Lifecycle
|
|
151
|
+
|
|
152
|
+
**Mount** — host calls the slot installs API, renders an `<iframe>` per
|
|
153
|
+
install. The iframe URL includes `?slot=<slotId>` so the runtime knows it's
|
|
154
|
+
embedded (enables auto-resize, suppresses anything that only makes sense
|
|
155
|
+
full-page).
|
|
156
|
+
|
|
157
|
+
**Context push** — host posts `agent-native-slot-context` immediately on
|
|
158
|
+
iframe load, and again on every prop change. The extension reads the
|
|
159
|
+
current value synchronously via `window.slotContext` and subscribes via
|
|
160
|
+
`window.onSlotContext(fn)` for live updates.
|
|
161
|
+
|
|
162
|
+
**Auto-resize** — when in slot mode, the iframe runtime measures its
|
|
163
|
+
content height and posts `agent-native-tool-resize` (postMessage type kept
|
|
164
|
+
for back-compat) to the host. The `<EmbeddedTool>` sets the iframe height
|
|
165
|
+
accordingly. Use `ResizeObserver` to follow content changes.
|
|
166
|
+
|
|
167
|
+
**Extension API** — embedded extensions have the full helper set:
|
|
168
|
+
`appAction`, `appFetch`, `dbQuery`, `dbExec`, `extensionFetch`,
|
|
169
|
+
`extensionData` (with `toolFetch` / `toolData` legacy aliases). Same auth
|
|
170
|
+
context as full-page extensions.
|
|
171
|
+
|
|
172
|
+
**Unmount** — uninstall deletes the install row. Polling sync invalidates
|
|
173
|
+
the `slot-installs` query and the host re-renders without the iframe.
|
|
174
|
+
|
|
175
|
+
## Permissions
|
|
176
|
+
|
|
177
|
+
- Installing requires viewer access to the extension. A user can only
|
|
178
|
+
install extensions they have access to.
|
|
179
|
+
- Declaring slot targets requires editor access to the extension.
|
|
180
|
+
- Slot installs are per-user — installing a widget only affects the
|
|
181
|
+
installing user's view. There's no org-wide "default install" in v1.
|
|
182
|
+
- Slots themselves are ungated. Any app code can drop an `<ExtensionSlot>`
|
|
183
|
+
in any user's view; the slot's contents come from that user's installs.
|
|
184
|
+
|
|
185
|
+
## What this is NOT
|
|
186
|
+
|
|
187
|
+
- **Not a way to render arbitrary React in slots.** Slots only render
|
|
188
|
+
Alpine.js iframe extensions. Same security/auth/sandbox as
|
|
189
|
+
`/extensions/:id`.
|
|
190
|
+
- **Not cross-extension messaging.** Two extensions in the same slot can't
|
|
191
|
+
read each other's `extensionData`. Use actions or app SQL if widgets need
|
|
192
|
+
to coordinate.
|
|
193
|
+
- **Not a slot manifest.** Slot targets live in the `tool_slots` table
|
|
194
|
+
(Drizzle export `extensionSlots`), not in the extension's HTML content.
|
|
195
|
+
The agent can re-target an extension without rewriting it.
|
|
196
|
+
- **Not for arbitrary code modification.** If a user wants to change how
|
|
197
|
+
the app itself behaves (not add a sandboxed widget), use the
|
|
198
|
+
`self-modifying-code` skill instead.
|
|
199
|
+
|
|
200
|
+
## Cross-references
|
|
201
|
+
|
|
202
|
+
- `extensions` skill — authoring Alpine.js mini-apps (the substrate for widgets)
|
|
203
|
+
- `sharing` skill — how access flows from extension sharing to slot installs
|
|
204
|
+
- `context-awareness` skill — how extensions read what the user is looking at
|
|
205
|
+
- `actions` skill — how `install-extension` etc. are auto-mounted
|