@agent-native/core 0.37.3 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -6
- package/dist/action.d.ts +60 -2
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +6 -2
- package/dist/action.js.map +1 -1
- package/dist/agent/production-agent.d.ts +12 -6
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +161 -11
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/types.d.ts +2 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/catalog.json +2 -2
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +15 -0
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/index.js +10 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/plan-publish-store.d.ts +52 -0
- package/dist/cli/plan-publish-store.d.ts.map +1 -0
- package/dist/cli/plan-publish-store.js +103 -0
- package/dist/cli/plan-publish-store.js.map +1 -0
- package/dist/cli/skills.d.ts +29 -4
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +851 -275
- package/dist/cli/skills.js.map +1 -1
- package/dist/cli/templates-meta.js +12 -12
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +3 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +65 -15
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +20 -2
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +12 -0
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-engine-key.d.ts +24 -0
- package/dist/client/agent-engine-key.d.ts.map +1 -0
- package/dist/client/agent-engine-key.js +49 -0
- package/dist/client/agent-engine-key.js.map +1 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +34 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/blocks/BlockView.d.ts +26 -0
- package/dist/client/blocks/BlockView.d.ts.map +1 -0
- package/dist/client/blocks/BlockView.js +24 -0
- package/dist/client/blocks/BlockView.js.map +1 -0
- package/dist/client/blocks/SchemaBlockEditor.d.ts +25 -0
- package/dist/client/blocks/SchemaBlockEditor.d.ts.map +1 -0
- package/dist/client/blocks/SchemaBlockEditor.js +72 -0
- package/dist/client/blocks/SchemaBlockEditor.js.map +1 -0
- package/dist/client/blocks/agent.d.ts +30 -0
- package/dist/client/blocks/agent.d.ts.map +1 -0
- package/dist/client/blocks/agent.js +61 -0
- package/dist/client/blocks/agent.js.map +1 -0
- package/dist/client/blocks/index.d.ts +34 -0
- package/dist/client/blocks/index.d.ts.map +1 -0
- package/dist/client/blocks/index.js +42 -0
- package/dist/client/blocks/index.js.map +1 -0
- package/dist/client/blocks/library/checklist.config.d.ts +36 -0
- package/dist/client/blocks/library/checklist.config.d.ts.map +1 -0
- package/dist/client/blocks/library/checklist.config.js +25 -0
- package/dist/client/blocks/library/checklist.config.js.map +1 -0
- package/dist/client/blocks/library/checklist.d.ts +26 -0
- package/dist/client/blocks/library/checklist.d.ts.map +1 -0
- package/dist/client/blocks/library/checklist.js +76 -0
- package/dist/client/blocks/library/checklist.js.map +1 -0
- package/dist/client/blocks/library/code-tabs.config.d.ts +36 -0
- package/dist/client/blocks/library/code-tabs.config.d.ts.map +1 -0
- package/dist/client/blocks/library/code-tabs.config.js +30 -0
- package/dist/client/blocks/library/code-tabs.config.js.map +1 -0
- package/dist/client/blocks/library/code-tabs.d.ts +3 -0
- package/dist/client/blocks/library/code-tabs.d.ts.map +1 -0
- package/dist/client/blocks/library/code-tabs.js +165 -0
- package/dist/client/blocks/library/code-tabs.js.map +1 -0
- package/dist/client/blocks/library/html.config.d.ts +37 -0
- package/dist/client/blocks/library/html.config.d.ts.map +1 -0
- package/dist/client/blocks/library/html.config.js +46 -0
- package/dist/client/blocks/library/html.config.js.map +1 -0
- package/dist/client/blocks/library/html.d.ts +21 -0
- package/dist/client/blocks/library/html.d.ts.map +1 -0
- package/dist/client/blocks/library/html.js +69 -0
- package/dist/client/blocks/library/html.js.map +1 -0
- package/dist/client/blocks/library/table.config.d.ts +30 -0
- package/dist/client/blocks/library/table.config.d.ts.map +1 -0
- package/dist/client/blocks/library/table.config.js +22 -0
- package/dist/client/blocks/library/table.config.js.map +1 -0
- package/dist/client/blocks/library/table.d.ts +8 -0
- package/dist/client/blocks/library/table.d.ts.map +1 -0
- package/dist/client/blocks/library/table.js +107 -0
- package/dist/client/blocks/library/table.js.map +1 -0
- package/dist/client/blocks/library/tabs.config.d.ts +56 -0
- package/dist/client/blocks/library/tabs.config.d.ts.map +1 -0
- package/dist/client/blocks/library/tabs.config.js +36 -0
- package/dist/client/blocks/library/tabs.config.js.map +1 -0
- package/dist/client/blocks/library/tabs.d.ts +20 -0
- package/dist/client/blocks/library/tabs.d.ts.map +1 -0
- package/dist/client/blocks/library/tabs.js +123 -0
- package/dist/client/blocks/library/tabs.js.map +1 -0
- package/dist/client/blocks/mdx.d.ts +74 -0
- package/dist/client/blocks/mdx.d.ts.map +1 -0
- package/dist/client/blocks/mdx.js +205 -0
- package/dist/client/blocks/mdx.js.map +1 -0
- package/dist/client/blocks/provider.d.ts +25 -0
- package/dist/client/blocks/provider.d.ts.map +1 -0
- package/dist/client/blocks/provider.js +19 -0
- package/dist/client/blocks/provider.js.map +1 -0
- package/dist/client/blocks/registry.d.ts +24 -0
- package/dist/client/blocks/registry.d.ts.map +1 -0
- package/dist/client/blocks/registry.js +50 -0
- package/dist/client/blocks/registry.js.map +1 -0
- package/dist/client/blocks/schema-form/introspect.d.ts +31 -0
- package/dist/client/blocks/schema-form/introspect.d.ts.map +1 -0
- package/dist/client/blocks/schema-form/introspect.js +164 -0
- package/dist/client/blocks/schema-form/introspect.js.map +1 -0
- package/dist/client/blocks/server.d.ts +22 -0
- package/dist/client/blocks/server.d.ts.map +1 -0
- package/dist/client/blocks/server.js +25 -0
- package/dist/client/blocks/server.js.map +1 -0
- package/dist/client/blocks/types.d.ts +212 -0
- package/dist/client/blocks/types.d.ts.map +1 -0
- package/dist/client/blocks/types.js +5 -0
- package/dist/client/blocks/types.js.map +1 -0
- package/dist/client/composer/ComposerPlusMenu.js +10 -1
- package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
- package/dist/client/guided-questions.d.ts +68 -0
- package/dist/client/guided-questions.d.ts.map +1 -1
- package/dist/client/guided-questions.js +158 -3
- package/dist/client/guided-questions.js.map +1 -1
- package/dist/client/index.d.ts +5 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +15 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/rich-markdown-editor/BubbleToolbar.d.ts +37 -0
- package/dist/client/rich-markdown-editor/BubbleToolbar.d.ts.map +1 -0
- package/dist/client/rich-markdown-editor/BubbleToolbar.js +161 -0
- package/dist/client/rich-markdown-editor/BubbleToolbar.js.map +1 -0
- package/dist/client/rich-markdown-editor/ImageExtension.d.ts +63 -0
- package/dist/client/rich-markdown-editor/ImageExtension.d.ts.map +1 -0
- package/dist/client/rich-markdown-editor/ImageExtension.js +242 -0
- package/dist/client/rich-markdown-editor/ImageExtension.js.map +1 -0
- package/dist/client/rich-markdown-editor/RichMarkdownEditor.d.ts +51 -0
- package/dist/client/rich-markdown-editor/RichMarkdownEditor.d.ts.map +1 -0
- package/dist/client/rich-markdown-editor/RichMarkdownEditor.js +37 -0
- package/dist/client/rich-markdown-editor/RichMarkdownEditor.js.map +1 -0
- package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts +61 -0
- package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts.map +1 -0
- package/dist/client/rich-markdown-editor/SharedRichEditor.js +121 -0
- package/dist/client/rich-markdown-editor/SharedRichEditor.js.map +1 -0
- package/dist/client/rich-markdown-editor/SlashCommandMenu.d.ts +36 -0
- package/dist/client/rich-markdown-editor/SlashCommandMenu.d.ts.map +1 -0
- package/dist/client/rich-markdown-editor/SlashCommandMenu.js +193 -0
- package/dist/client/rich-markdown-editor/SlashCommandMenu.js.map +1 -0
- package/dist/client/rich-markdown-editor/extensions.d.ts +166 -0
- package/dist/client/rich-markdown-editor/extensions.d.ts.map +1 -0
- package/dist/client/rich-markdown-editor/extensions.js +222 -0
- package/dist/client/rich-markdown-editor/extensions.js.map +1 -0
- package/dist/client/rich-markdown-editor/index.d.ts +9 -0
- package/dist/client/rich-markdown-editor/index.d.ts.map +1 -0
- package/dist/client/rich-markdown-editor/index.js +9 -0
- package/dist/client/rich-markdown-editor/index.js.map +1 -0
- package/dist/client/rich-markdown-editor/uploadEditorImage.d.ts +18 -0
- package/dist/client/rich-markdown-editor/uploadEditorImage.d.ts.map +1 -0
- package/dist/client/rich-markdown-editor/uploadEditorImage.js +57 -0
- package/dist/client/rich-markdown-editor/uploadEditorImage.js.map +1 -0
- package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts +91 -0
- package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts.map +1 -0
- package/dist/client/rich-markdown-editor/useCollabReconcile.js +342 -0
- package/dist/client/rich-markdown-editor/useCollabReconcile.js.map +1 -0
- package/dist/client/track.d.ts +25 -0
- package/dist/client/track.d.ts.map +1 -0
- package/dist/client/track.js +53 -0
- package/dist/client/track.js.map +1 -0
- package/dist/client/use-action.d.ts.map +1 -1
- package/dist/client/use-action.js +6 -0
- package/dist/client/use-action.js.map +1 -1
- package/dist/client/use-session.d.ts +3 -2
- package/dist/client/use-session.d.ts.map +1 -1
- package/dist/client/use-session.js +3 -2
- package/dist/client/use-session.js.map +1 -1
- package/dist/deploy/build.d.ts +5 -0
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +67 -1
- package/dist/deploy/build.js.map +1 -1
- package/dist/extensions/schema.d.ts +1 -1
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +9 -2
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +35 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/provider-api/index.d.ts +1 -1
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/scripts/docs/search.d.ts.map +1 -1
- package/dist/scripts/docs/search.js +5 -2
- package/dist/scripts/docs/search.js.map +1 -1
- package/dist/scripts/runner.d.ts.map +1 -1
- package/dist/scripts/runner.js +16 -3
- package/dist/scripts/runner.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +2 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/action-routes.d.ts.map +1 -1
- package/dist/server/action-routes.js +30 -4
- package/dist/server/action-routes.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +65 -19
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +8 -1
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/agents-bundle.d.ts +27 -1
- package/dist/server/agents-bundle.d.ts.map +1 -1
- package/dist/server/agents-bundle.js +41 -3
- package/dist/server/agents-bundle.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +76 -3
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +60 -0
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +160 -22
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/sentry.d.ts.map +1 -1
- package/dist/server/sentry.js +6 -0
- package/dist/server/sentry.js.map +1 -1
- package/dist/server/social-og-image.d.ts +2 -1
- package/dist/server/social-og-image.d.ts.map +1 -1
- package/dist/server/social-og-image.js +24 -4
- package/dist/server/social-og-image.js.map +1 -1
- package/dist/sharing/schema.d.ts +1 -1
- package/dist/styles/agent-native.css +1 -0
- package/dist/styles/rich-markdown-editor.css +439 -0
- package/dist/templates/default/.agents/skills/actions/SKILL.md +4 -1
- package/dist/templates/default/.agents/skills/security/SKILL.md +13 -4
- package/dist/templates/default/.agents/skills/storing-data/SKILL.md +15 -3
- package/dist/templates/default/AGENTS.md +1 -0
- package/dist/templates/default/DEVELOPING.md +2 -0
- package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +10 -3
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +98 -10
- package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +45 -3
- package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -0
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +37 -4
- package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +9 -4
- package/dist/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +2 -0
- package/dist/templates/workspace-core/.agents/skills/client-methods/SKILL.md +106 -0
- package/dist/templates/workspace-core/.agents/skills/client-methods/references/legacy-client-fetch-audit-2026-06-03.md +53 -0
- package/dist/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +2 -0
- package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +62 -61
- package/dist/templates/workspace-core/.agents/skills/context-xray/SKILL.md +47 -0
- package/dist/templates/workspace-core/.agents/skills/create-skill/SKILL.md +28 -0
- package/dist/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +52 -1
- package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +2 -0
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +95 -433
- package/dist/templates/workspace-core/.agents/skills/extensions/references/api.md +285 -0
- package/dist/templates/workspace-core/.agents/skills/extensions/references/examples.md +259 -0
- package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +398 -0
- package/dist/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +157 -0
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +17 -0
- package/dist/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +13 -2
- package/dist/templates/workspace-core/.agents/skills/mvp-followup/SKILL.md +51 -0
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +14 -4
- package/dist/templates/workspace-core/.agents/skills/onboarding/SKILL.md +13 -1
- package/dist/templates/workspace-core/.agents/skills/portability/SKILL.md +27 -5
- package/dist/templates/workspace-core/.agents/skills/qa/SKILL.md +24 -8
- package/dist/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +53 -7
- package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +43 -10
- package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +2 -0
- package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +43 -14
- package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +50 -1
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -2
- package/dist/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +11 -1
- package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +15 -0
- package/dist/templates/workspace-core/.agents/skills/sharing/SKILL.md +5 -1
- package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +48 -19
- package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +7 -3
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +13 -6
- package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +236 -0
- package/dist/templates/workspace-core/AGENTS.md +5 -1
- package/dist/templates/workspace-root/AGENTS.md +5 -2
- package/dist/tracking/route.d.ts +43 -0
- package/dist/tracking/route.d.ts.map +1 -0
- package/dist/tracking/route.js +85 -0
- package/dist/tracking/route.js.map +1 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +15 -0
- package/dist/vite/client.js.map +1 -1
- package/docs/content/a2a-protocol.md +18 -4
- package/docs/content/actions.md +87 -0
- package/docs/content/agent-mentions.md +2 -1
- package/docs/content/authentication.md +2 -1
- package/docs/content/client.md +64 -13
- package/docs/content/cloneable-saas.md +1 -1
- package/docs/content/code-agents-ui.md +17 -11
- package/docs/content/context-awareness.md +23 -28
- package/docs/content/creating-templates.md +1 -1
- package/docs/content/drop-in-agent.md +2 -0
- package/docs/content/getting-started.md +2 -2
- package/docs/content/key-concepts.md +2 -2
- package/docs/content/messaging.md +57 -15
- package/docs/content/migration-workbench.md +1 -1
- package/docs/content/multi-app-workspace.md +1 -1
- package/docs/content/multi-tenancy.md +17 -15
- package/docs/content/real-time-collaboration.md +1 -1
- package/docs/content/recurring-jobs.md +1 -1
- package/docs/content/security.md +2 -2
- package/docs/content/server.md +4 -4
- package/docs/content/skills-guide.md +30 -0
- package/docs/content/template-analytics.md +2 -2
- package/docs/content/template-assets.md +17 -1
- package/docs/content/template-brain.md +2 -2
- package/docs/content/template-calendar.md +1 -1
- package/docs/content/template-clips.md +3 -3
- package/docs/content/template-content.md +2 -2
- package/docs/content/template-design.md +2 -2
- package/docs/content/template-dispatch.md +3 -3
- package/docs/content/template-forms.md +14 -2
- package/docs/content/template-mail.md +1 -3
- package/docs/content/template-plan.md +118 -0
- package/docs/content/template-slides.md +5 -4
- package/docs/content/template-starter.md +4 -4
- package/docs/content/template-videos.md +6 -11
- package/docs/content/tracking.md +21 -1
- package/docs/content/visual-plans.md +72 -0
- package/docs/content/workspace.md +9 -9
- package/package.json +26 -11
- package/src/templates/default/.agents/skills/actions/SKILL.md +4 -1
- package/src/templates/default/.agents/skills/security/SKILL.md +13 -4
- package/src/templates/default/.agents/skills/storing-data/SKILL.md +15 -3
- package/src/templates/default/AGENTS.md +1 -0
- package/src/templates/default/DEVELOPING.md +2 -0
- package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +10 -3
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +98 -10
- package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +45 -3
- package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -0
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +37 -4
- package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +9 -4
- package/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +2 -0
- package/src/templates/workspace-core/.agents/skills/client-methods/SKILL.md +106 -0
- package/src/templates/workspace-core/.agents/skills/client-methods/references/legacy-client-fetch-audit-2026-06-03.md +53 -0
- package/src/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +2 -0
- package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +62 -61
- package/src/templates/workspace-core/.agents/skills/context-xray/SKILL.md +47 -0
- package/src/templates/workspace-core/.agents/skills/create-skill/SKILL.md +28 -0
- package/src/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +52 -1
- package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +2 -0
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +95 -433
- package/src/templates/workspace-core/.agents/skills/extensions/references/api.md +285 -0
- package/src/templates/workspace-core/.agents/skills/extensions/references/examples.md +259 -0
- package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +398 -0
- package/src/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +157 -0
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +17 -0
- package/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +13 -2
- package/src/templates/workspace-core/.agents/skills/mvp-followup/SKILL.md +51 -0
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +14 -4
- package/src/templates/workspace-core/.agents/skills/onboarding/SKILL.md +13 -1
- package/src/templates/workspace-core/.agents/skills/portability/SKILL.md +27 -5
- package/src/templates/workspace-core/.agents/skills/qa/SKILL.md +24 -8
- package/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +53 -7
- package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +43 -10
- package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +2 -0
- package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +43 -14
- package/src/templates/workspace-core/.agents/skills/security/SKILL.md +50 -1
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -2
- package/src/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +11 -1
- package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +15 -0
- package/src/templates/workspace-core/.agents/skills/sharing/SKILL.md +5 -1
- package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +48 -19
- package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +7 -3
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +13 -6
- package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +236 -0
- package/src/templates/workspace-core/AGENTS.md +5 -1
- package/src/templates/workspace-root/AGENTS.md +5 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposerPlusMenu.js","sourceRoot":"","sources":["../../../src/client/composer/ComposerPlusMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useRef, useEffect, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n IconPlus,\n IconUpload,\n IconBulb,\n IconClock,\n IconBolt,\n IconTool,\n IconPlugConnected,\n IconPhotoPlus,\n IconLoader2,\n IconCheck,\n IconArrowLeft,\n IconX,\n} from \"@tabler/icons-react\";\nimport { ComposerPrimitive } from \"@assistant-ui/react\";\nimport { cn } from \"../utils.js\";\nimport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n} from \"../components/ui/popover.js\";\nimport { useOrg } from \"../org/hooks.js\";\nimport { agentNativePath } from \"../api-path.js\";\nimport {\n formatMcpServerError,\n getMcpUrlValidationError,\n useCreateMcpServer,\n testMcpServerUrl,\n type McpServerScope,\n} from \"../resources/use-mcp-servers.js\";\nimport type { ComposerMode } from \"./types.js\";\nimport { setAgentChatContextItem } from \"../agent-chat.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\ninterface ComposerPlusMenuProps {\n onSelectMode?: (mode: ComposerMode) => void;\n /**\n * \"full\" (default): full + menu with Upload File, Create Skill, Schedule Task,\n * Automation, Extension, MCP Server. \"upload-only\": clicking + opens the file\n * picker directly — no popover, no other modes. Use for prompt popovers\n * (create extension, create deck, create dashboard, etc.) where the only thing\n * to attach is a file.\n */\n mode?: \"full\" | \"upload-only\";\n}\n\ntype View = \"menu\" | \"mcp-server\" | \"skill-upload\";\n\nconst DEFAULT_ASSETS_PICKER_URL = \"https://assets.agent-native.com/picker\";\nconst EMBED_PROTOCOL = \"agent-native.embed\";\nconst EMBED_VERSION = 1;\n\ninterface EmbedEnvelope<TPayload = unknown> {\n protocol?: string;\n version?: number;\n type?: string;\n name?: string;\n payload?: TPayload;\n}\n\ninterface AssetPickerPayload {\n assetId?: unknown;\n url?: unknown;\n previewUrl?: unknown;\n downloadUrl?: unknown;\n embedUrl?: unknown;\n altText?: unknown;\n title?: unknown;\n prompt?: unknown;\n mediaType?: unknown;\n libraryId?: unknown;\n}\n\nfunction assetPickerUrl() {\n const env = (import.meta.env as Record<string, string | undefined>) ?? {};\n return env.VITE_AGENT_NATIVE_ASSETS_PICKER_URL || DEFAULT_ASSETS_PICKER_URL;\n}\n\nfunction withEmbeddedParams(url: string): string {\n try {\n const parsed = new URL(url, window.location.href);\n parsed.searchParams.set(\"embedded\", \"1\");\n parsed.searchParams.set(\"mediaType\", \"image\");\n return parsed.toString();\n } catch {\n const separator = url.includes(\"?\") ? \"&\" : \"?\";\n return `${url}${separator}embedded=1&mediaType=image`;\n }\n}\n\nfunction assetPickerOrigin(url: string): string | null {\n try {\n return new URL(url, window.location.href).origin;\n } catch {\n return null;\n }\n}\n\nfunction embedEnvelope(\n type: \"message\" | \"ready\",\n options: { name?: string; payload?: unknown } = {},\n): EmbedEnvelope {\n return {\n protocol: EMBED_PROTOCOL,\n version: EMBED_VERSION,\n type,\n ...options,\n };\n}\n\nfunction isEmbedEnvelope(value: unknown): value is EmbedEnvelope {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const candidate = value as EmbedEnvelope;\n return (\n candidate.protocol === EMBED_PROTOCOL &&\n candidate.version === EMBED_VERSION &&\n typeof candidate.type === \"string\"\n );\n}\n\nfunction assetString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction assetImageSource(payload: unknown): string | null {\n if (!payload || typeof payload !== \"object\") return null;\n const asset = payload as AssetPickerPayload;\n return (\n assetString(asset.url) ??\n assetString(asset.previewUrl) ??\n assetString(asset.downloadUrl) ??\n assetString(asset.embedUrl)\n );\n}\n\nfunction assetTitle(payload: unknown, url: string): string {\n if (payload && typeof payload === \"object\") {\n const title = assetString((payload as AssetPickerPayload).title);\n if (title) return title;\n const prompt = assetString((payload as AssetPickerPayload).prompt);\n if (prompt) return prompt.slice(0, 80);\n }\n try {\n const name = new URL(url).pathname.split(\"/\").filter(Boolean).pop();\n return name ? decodeURIComponent(name) : \"Generated image\";\n } catch {\n return \"Generated image\";\n }\n}\n\nfunction assetContext(payload: unknown, url: string): string {\n const lines = [`Image URL: ${url}`];\n if (payload && typeof payload === \"object\") {\n const asset = payload as AssetPickerPayload;\n const assetId = assetString(asset.assetId);\n const libraryId = assetString(asset.libraryId);\n const prompt = assetString(asset.prompt);\n const altText = assetString(asset.altText);\n if (assetId) lines.push(`Asset ID: ${assetId}`);\n if (libraryId) lines.push(`Library ID: ${libraryId}`);\n if (prompt) lines.push(`Prompt: ${prompt}`);\n if (altText) lines.push(`Alt text: ${altText}`);\n }\n return lines.join(\"\\n\");\n}\n\nfunction slugifyName(value: string): string {\n return (\n value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\") || \"uploaded-skill\"\n );\n}\n\nfunction UploadOnlyAttachButton() {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex shrink-0\">\n <ComposerPrimitive.AddAttachment asChild>\n <button\n type=\"button\"\n className=\"shrink-0 flex h-7 w-7 cursor-pointer items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n aria-label=\"Upload\"\n >\n <IconPlus className=\"h-4 w-4\" />\n </button>\n </ComposerPrimitive.AddAttachment>\n </span>\n </TooltipTrigger>\n <TooltipContent>Upload</TooltipContent>\n </Tooltip>\n );\n}\n\nexport function ComposerPlusMenu({\n onSelectMode,\n mode = \"full\",\n}: ComposerPlusMenuProps) {\n if (mode === \"upload-only\") {\n return <UploadOnlyAttachButton />;\n }\n return <ComposerPlusMenuFull onSelectMode={onSelectMode} />;\n}\n\nfunction ComposerPlusMenuFull({\n onSelectMode,\n}: Pick<ComposerPlusMenuProps, \"onSelectMode\">) {\n const [open, setOpen] = useState(false);\n const [assetsPickerOpen, setAssetsPickerOpen] = useState(false);\n const [view, setView] = useState<View>(\"menu\");\n\n // MCP state\n const { data: org } = useOrg();\n const canCreateOrgMcp =\n !org?.orgId || org.role === \"owner\" || org.role === \"admin\";\n const hasOrg = !!org?.orgId;\n const defaultMcpScope: McpServerScope =\n hasOrg && canCreateOrgMcp ? \"org\" : \"user\";\n const [mcpScope, setMcpScope] = useState<McpServerScope>(defaultMcpScope);\n const [mcpName, setMcpName] = useState(\"\");\n const [mcpUrl, setMcpUrl] = useState(\"\");\n const [mcpDescription, setMcpDescription] = useState(\"\");\n const [mcpHeadersText, setMcpHeadersText] = useState(\"\");\n const [mcpBusy, setMcpBusy] = useState(false);\n const [mcpError, setMcpError] = useState<string | null>(null);\n const [mcpTestResult, setMcpTestResult] = useState<{\n ok: boolean;\n message: string;\n } | null>(null);\n const createMcp = useCreateMcpServer();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const fileUploadRef = useRef<HTMLButtonElement>(null);\n const skillFileInputRef = useRef<HTMLInputElement>(null);\n const skillHoverTimerRef = useRef<number | null>(null);\n const [skillUploadSlug, setSkillUploadSlug] = useState(\"\");\n const [skillUploadContent, setSkillUploadContent] = useState(\"\");\n const [skillUploadFileName, setSkillUploadFileName] = useState(\"\");\n const [skillUploadStatus, setSkillUploadStatus] = useState<{\n kind: \"ok\" | \"err\";\n message: string;\n } | null>(null);\n const [skillUploadBusy, setSkillUploadBusy] = useState(false);\n const [skillFlyoutOpen, setSkillFlyoutOpen] = useState(false);\n const [skillFlyoutSide, setSkillFlyoutSide] = useState<\"right\" | \"left\">(\n \"right\",\n );\n const skillFlyoutCloseTimerRef = useRef<number | null>(null);\n const openSkillFlyout = (rowEl?: HTMLElement | null) => {\n if (skillFlyoutCloseTimerRef.current) {\n window.clearTimeout(skillFlyoutCloseTimerRef.current);\n skillFlyoutCloseTimerRef.current = null;\n }\n if (rowEl && typeof window !== \"undefined\") {\n const rect = rowEl.getBoundingClientRect();\n const FLYOUT_WIDTH = 248;\n setSkillFlyoutSide(\n window.innerWidth - rect.right < FLYOUT_WIDTH ? \"left\" : \"right\",\n );\n }\n setSkillFlyoutOpen(true);\n };\n const scheduleSkillFlyoutClose = () => {\n if (skillFlyoutCloseTimerRef.current)\n window.clearTimeout(skillFlyoutCloseTimerRef.current);\n skillFlyoutCloseTimerRef.current = window.setTimeout(() => {\n setSkillFlyoutOpen(false);\n }, 160);\n };\n\n useEffect(() => {\n if (open) {\n setView(\"menu\");\n setMcpScope(defaultMcpScope);\n setMcpName(\"\");\n setMcpUrl(\"\");\n setMcpDescription(\"\");\n setMcpHeadersText(\"\");\n setMcpError(null);\n setMcpTestResult(null);\n setMcpBusy(false);\n setSkillUploadSlug(\"\");\n setSkillUploadContent(\"\");\n setSkillUploadFileName(\"\");\n setSkillUploadStatus(null);\n setSkillUploadBusy(false);\n setSkillFlyoutOpen(false);\n }\n }, [open, defaultMcpScope]);\n\n useEffect(() => {\n if (view === \"mcp-server\") {\n setMcpError(null);\n setMcpTestResult(null);\n const t = setTimeout(() => inputRef.current?.focus(), 50);\n return () => clearTimeout(t);\n }\n }, [view]);\n\n const clearMcpFeedback = () => {\n setMcpError(null);\n setMcpTestResult(null);\n };\n\n const parseHeaderLines = (\n text: string,\n ): Record<string, string> | undefined => {\n const out: Record<string, string> = {};\n for (const line of text.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n const idx = trimmed.indexOf(\":\");\n if (idx <= 0) continue;\n const key = trimmed.slice(0, idx).trim();\n const val = trimmed.slice(idx + 1).trim();\n if (!key || !val) continue;\n out[key] = val;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n };\n\n const submitMcpServer = async () => {\n const name = mcpName.trim();\n const url = mcpUrl.trim();\n if (!name || !url || mcpBusy) return;\n const validationError = getMcpUrlValidationError(url);\n if (validationError) {\n setMcpError(validationError);\n setMcpTestResult(null);\n return;\n }\n setMcpError(null);\n setMcpBusy(true);\n try {\n await createMcp.mutateAsync({\n scope: mcpScope,\n name,\n url,\n headers: parseHeaderLines(mcpHeadersText),\n description: mcpDescription.trim() || undefined,\n });\n setOpen(false);\n } catch (err: any) {\n setMcpError(formatMcpServerError(err));\n } finally {\n setMcpBusy(false);\n }\n };\n\n const runMcpTest = async () => {\n const url = mcpUrl.trim();\n if (!url || mcpBusy) return;\n const validationError = getMcpUrlValidationError(url);\n if (validationError) {\n setMcpTestResult({ ok: false, message: validationError });\n setMcpError(null);\n return;\n }\n setMcpTestResult(null);\n setMcpError(null);\n setMcpBusy(true);\n try {\n const res = await testMcpServerUrl(url, parseHeaderLines(mcpHeadersText));\n if (res.ok) {\n setMcpTestResult({\n ok: true,\n message: `${res.toolCount ?? 0} tool${res.toolCount === 1 ? \"\" : \"s\"} available`,\n });\n } else {\n setMcpTestResult({ ok: false, message: res.error ?? \"Failed\" });\n }\n } catch (err: any) {\n setMcpTestResult({ ok: false, message: formatMcpServerError(err) });\n } finally {\n setMcpBusy(false);\n }\n };\n\n const handleSkillFileSelected = async (files: FileList | null) => {\n if (!files || files.length === 0) return;\n const file = files[0];\n const text = await file.text();\n const baseName = file.name.replace(/\\.[^./]+$/, \"\");\n const slug = slugifyName(\n baseName.toLowerCase() === \"skill\" ? \"uploaded-skill\" : baseName,\n );\n setSkillUploadSlug(slug);\n setSkillUploadContent(text);\n setSkillUploadFileName(file.name);\n setSkillUploadStatus(null);\n setView(\"skill-upload\");\n };\n\n const submitSkillUpload = async () => {\n if (skillUploadBusy) return;\n const slug = slugifyName(skillUploadSlug || \"uploaded-skill\");\n const path = `skills/${slug}/SKILL.md`;\n setSkillUploadBusy(true);\n setSkillUploadStatus(null);\n try {\n const res = await fetch(agentNativePath(\"/_agent-native/resources\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n path,\n content: skillUploadContent,\n mimeType: \"text/markdown\",\n shared: false,\n }),\n });\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new Error(body || `Upload failed (${res.status})`);\n }\n setSkillUploadStatus({\n kind: \"ok\",\n message: `Skill \"${skillUploadFileName || `${slug}/SKILL.md`}\" added`,\n });\n window.setTimeout(() => setOpen(false), 1200);\n } catch (err: any) {\n setSkillUploadStatus({\n kind: \"err\",\n message: err?.message || \"Failed to save skill file\",\n });\n } finally {\n setSkillUploadBusy(false);\n }\n };\n\n const menuItems: {\n icon: React.ReactNode;\n label: string;\n desc: string;\n action: () => void;\n hoverAction?: () => void;\n }[] = [\n {\n icon: <IconUpload className=\"h-3.5 w-3.5\" />,\n label: \"Upload File\",\n desc: \"Images, PDFs, text/code, JSON, CSV\",\n action: () => {\n setOpen(false);\n setTimeout(() => fileUploadRef.current?.click(), 0);\n },\n },\n {\n icon: <IconPhotoPlus className=\"h-3.5 w-3.5\" />,\n label: \"Generate Image\",\n desc: \"Open the Assets image picker\",\n action: () => {\n setOpen(false);\n setAssetsPickerOpen(true);\n },\n },\n {\n icon: <IconClock className=\"h-3.5 w-3.5\" />,\n label: \"Schedule Task\",\n desc: \"Run something on a schedule\",\n action: () => {\n onSelectMode?.(\"job\");\n setOpen(false);\n },\n },\n {\n icon: <IconBolt className=\"h-3.5 w-3.5\" />,\n label: \"Create Automation\",\n desc: \"Set up a when-X-do-Y rule\",\n action: () => {\n onSelectMode?.(\"automation\");\n setOpen(false);\n },\n },\n {\n icon: <IconTool className=\"h-3.5 w-3.5\" />,\n label: \"Create Extension\",\n desc: \"Build a mini app extension\",\n action: () => {\n onSelectMode?.(\"extension\");\n setOpen(false);\n },\n },\n {\n icon: <IconPlugConnected className=\"h-3.5 w-3.5\" />,\n label: \"Connect MCP Server\",\n desc: \"Expose external tools to the agent\",\n action: () => setView(\"mcp-server\"),\n },\n {\n icon: <IconBulb className=\"h-3.5 w-3.5\" />,\n label: \"Create Skill\",\n desc: \"Teach the agent a new ability\",\n action: openSkillFlyout,\n hoverAction: openSkillFlyout,\n },\n ];\n\n const backButton = (\n <button\n type=\"button\"\n onClick={() => {\n clearMcpFeedback();\n setView(\"menu\");\n }}\n className=\"flex items-center gap-1 text-[11px] text-muted-foreground hover:text-foreground mb-1.5\"\n >\n <IconArrowLeft className=\"h-3 w-3\" />\n Back\n </button>\n );\n\n return (\n <>\n {/* Hidden button to trigger the native file upload */}\n <ComposerPrimitive.AddAttachment asChild>\n <button\n ref={fileUploadRef}\n type=\"button\"\n className=\"hidden\"\n style={{ display: \"none\" }}\n tabIndex={-1}\n aria-hidden\n />\n </ComposerPrimitive.AddAttachment>\n <input\n ref={skillFileInputRef}\n type=\"file\"\n accept=\".md,text/markdown\"\n className=\"hidden\"\n onChange={(e) => {\n void handleSkillFileSelected(e.target.files);\n e.target.value = \"\";\n }}\n />\n\n <Popover open={open} onOpenChange={setOpen}>\n <Tooltip>\n <TooltipTrigger asChild>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"shrink-0 flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50 disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <IconPlus className=\"h-4 w-4\" />\n </button>\n </PopoverTrigger>\n </TooltipTrigger>\n <TooltipContent>Add...</TooltipContent>\n </Tooltip>\n <PopoverContent\n side=\"top\"\n align=\"start\"\n sideOffset={8}\n className={cn(\n \"p-0 rounded-lg\",\n view === \"skill-upload\" || view === \"mcp-server\"\n ? \"max-h-[70vh] w-[calc(100vw-24px)] max-w-[380px] overflow-y-auto\"\n : \"w-[260px]\",\n )}\n style={{ fontSize: 13, lineHeight: \"normal\" }}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n {view === \"menu\" && (\n <div className=\"py-1\">\n {menuItems.map((item) => {\n const isSkill = item.label === \"Create Skill\";\n return (\n <div\n key={item.label}\n className={cn(\"relative\", isSkill && \"group/skill\")}\n onMouseEnter={(e) => {\n if (isSkill) {\n openSkillFlyout(e.currentTarget);\n return;\n }\n if (!item.hoverAction) return;\n if (skillHoverTimerRef.current)\n window.clearTimeout(skillHoverTimerRef.current);\n skillHoverTimerRef.current = window.setTimeout(() => {\n item.hoverAction?.();\n }, 180);\n }}\n onMouseLeave={() => {\n if (isSkill) {\n scheduleSkillFlyoutClose();\n return;\n }\n if (skillHoverTimerRef.current) {\n window.clearTimeout(skillHoverTimerRef.current);\n skillHoverTimerRef.current = null;\n }\n }}\n >\n <button\n type=\"button\"\n onClick={item.action}\n className={cn(\n \"flex w-full items-center gap-2.5 px-3 py-2 text-left hover:bg-accent/50\",\n isSkill && skillFlyoutOpen && \"bg-accent/50\",\n )}\n >\n <span className=\"text-muted-foreground\">{item.icon}</span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-[12px] font-medium text-foreground\">\n {item.label}\n </div>\n <div className=\"mt-0.5 text-[10px] text-muted-foreground/60\">\n {item.desc}\n </div>\n </div>\n {isSkill && (\n <span className=\"ml-auto text-muted-foreground/60\">\n ›\n </span>\n )}\n </button>\n {isSkill && skillFlyoutOpen && (\n <div\n role=\"menu\"\n onMouseEnter={() => openSkillFlyout()}\n onMouseLeave={scheduleSkillFlyoutClose}\n className={cn(\n \"absolute top-0 z-20 w-[240px] rounded-lg border border-border bg-popover py-1 shadow-md\",\n skillFlyoutSide === \"right\"\n ? \"left-full ml-1\"\n : \"right-full mr-1\",\n )}\n >\n <button\n type=\"button\"\n onClick={() => {\n onSelectMode?.(\"skill\");\n setSkillFlyoutOpen(false);\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-2.5 px-3 py-2 text-left hover:bg-accent/50\"\n >\n <span className=\"text-muted-foreground\">\n <IconBulb className=\"h-3.5 w-3.5\" />\n </span>\n <div className=\"min-w-0\">\n <div className=\"text-[12px] font-medium text-foreground\">\n Create new skill\n </div>\n <div className=\"mt-0.5 text-[10px] text-muted-foreground/60\">\n Describe a skill and let the agent draft it\n </div>\n </div>\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setSkillFlyoutOpen(false);\n skillFileInputRef.current?.click();\n }}\n className=\"flex w-full items-center gap-2.5 px-3 py-2 text-left hover:bg-accent/50\"\n >\n <span className=\"text-muted-foreground\">\n <IconUpload className=\"h-3.5 w-3.5\" />\n </span>\n <div className=\"min-w-0\">\n <div className=\"text-[12px] font-medium text-foreground\">\n Upload skill file\n </div>\n <div className=\"mt-0.5 text-[10px] text-muted-foreground/60\">\n Import an existing SKILL.md file\n </div>\n </div>\n </button>\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n {view === \"skill-upload\" && (\n <div className=\"p-3\">\n <button\n type=\"button\"\n onClick={() => setView(\"menu\")}\n className=\"mb-1.5 flex items-center gap-1 text-[11px] text-muted-foreground hover:text-foreground\"\n >\n <IconArrowLeft className=\"h-3 w-3\" />\n Back\n </button>\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Upload skill file\n </label>\n <p className=\"mb-2 text-[10px] leading-relaxed text-muted-foreground/60\">\n Review the content from{\" \"}\n <span className=\"font-mono\">\n {skillUploadFileName || \"the selected file\"}\n </span>{\" \"}\n before saving.\n </p>\n <label className=\"mb-1 block text-[10px] font-medium text-muted-foreground\">\n Skill name\n </label>\n <input\n value={skillUploadSlug}\n onChange={(e) => setSkillUploadSlug(e.target.value)}\n className=\"mb-2 w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[12px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"my-skill\"\n />\n <p className=\"mb-2 text-[10px] text-muted-foreground/60\">\n Saved at{\" \"}\n <span className=\"font-mono\">\n skills/{slugifyName(skillUploadSlug || \"uploaded-skill\")}\n /SKILL.md\n </span>\n </p>\n <label className=\"mb-1 block text-[10px] font-medium text-muted-foreground\">\n Content\n </label>\n <textarea\n value={skillUploadContent}\n onChange={(e) => setSkillUploadContent(e.target.value)}\n rows={10}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 font-mono text-[11px] leading-relaxed text-foreground outline-none focus:ring-1 focus:ring-accent\"\n />\n {skillUploadStatus && (\n <div\n className={cn(\n \"mt-2 text-[11px] leading-snug\",\n skillUploadStatus.kind === \"ok\"\n ? \"text-green-600 dark:text-green-400\"\n : \"text-red-600 dark:text-red-400\",\n )}\n >\n {skillUploadStatus.message}\n </div>\n )}\n <div className=\"mt-2.5 flex justify-end gap-2\">\n <button\n type=\"button\"\n onClick={() => setView(\"menu\")}\n className=\"rounded-md px-3 py-1.5 text-[12px] font-medium text-muted-foreground hover:bg-accent/40\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={submitSkillUpload}\n disabled={\n skillUploadBusy ||\n !skillUploadContent.trim() ||\n !skillUploadSlug.trim()\n }\n className=\"rounded-md bg-accent px-3 py-1.5 text-[12px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40 disabled:pointer-events-none\"\n >\n {skillUploadBusy ? (\n <IconLoader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n \"Save\"\n )}\n </button>\n </div>\n </div>\n )}\n\n {view === \"mcp-server\" && (\n <div className=\"p-3\">\n {backButton}\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Connect MCP Server\n </label>\n <p className=\"mb-2 text-[10px] text-muted-foreground/60 leading-relaxed\">\n Point at any Streamable HTTP MCP server. Its tools become\n available to the agent. Use Personal for private or staging\n servers; use Organization only for vetted servers the whole org\n should share.\n </p>\n <div className=\"space-y-2\">\n <div className=\"flex gap-1 rounded-md border border-border p-0.5\">\n <button\n type=\"button\"\n onClick={() => setMcpScope(\"user\")}\n className={cn(\n \"flex-1 rounded px-2 py-1 text-[11px] font-medium\",\n mcpScope === \"user\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n Personal\n </button>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() =>\n hasOrg && canCreateOrgMcp && setMcpScope(\"org\")\n }\n disabled={!hasOrg || !canCreateOrgMcp}\n className={cn(\n \"flex-1 rounded px-2 py-1 text-[11px] font-medium\",\n mcpScope === \"org\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n (!hasOrg || !canCreateOrgMcp) &&\n \"cursor-not-allowed opacity-50 hover:text-muted-foreground\",\n )}\n >\n Organization\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {!hasOrg\n ? \"Join an organization to share MCP servers\"\n : !canCreateOrgMcp\n ? \"Only owners and admins can add org-scope servers\"\n : undefined}\n </TooltipContent>\n </Tooltip>\n </div>\n <input\n ref={inputRef}\n value={mcpName}\n onChange={(e) => {\n setMcpName(e.target.value);\n clearMcpFeedback();\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Server name (e.g. zapier-staging)\"\n />\n <input\n value={mcpUrl}\n onChange={(e) => {\n setMcpUrl(e.target.value);\n clearMcpFeedback();\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"https://mcp.example.com/\"\n />\n <input\n value={mcpDescription}\n onChange={(e) => {\n setMcpDescription(e.target.value);\n clearMcpFeedback();\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Description (optional)\"\n />\n <div>\n <label className=\"block text-[10px] font-medium text-foreground\">\n Headers\n </label>\n <p className=\"mt-0.5 text-[10px] leading-snug text-muted-foreground/70\">\n Optional. One per line, for example Authorization: Bearer\n sk-...\n </p>\n </div>\n <textarea\n value={mcpHeadersText}\n onChange={(e) => {\n setMcpHeadersText(e.target.value);\n clearMcpFeedback();\n }}\n rows={2}\n className=\"w-full resize-y rounded-md border border-border bg-background px-2.5 py-1.5 text-[12px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n }}\n placeholder=\"Authorization: Bearer sk-...\"\n />\n {mcpTestResult && (\n <div\n className={cn(\n \"flex items-start gap-1 text-[11px] leading-snug\",\n mcpTestResult.ok\n ? \"text-green-600 dark:text-green-400\"\n : \"text-red-600 dark:text-red-400\",\n )}\n >\n {mcpTestResult.ok && (\n <IconCheck className=\"mt-0.5 h-3 w-3 shrink-0\" />\n )}\n <span className=\"min-w-0 break-words\">\n {mcpTestResult.message}\n </span>\n </div>\n )}\n {mcpError && (\n <div className=\"break-words text-[11px] leading-snug text-red-600 dark:text-red-400\">\n {mcpError}\n </div>\n )}\n </div>\n <div className=\"mt-2.5 flex items-center justify-between gap-2\">\n <button\n type=\"button\"\n onClick={runMcpTest}\n disabled={!mcpUrl.trim() || mcpBusy}\n className=\"rounded-md border border-border bg-background px-2.5 py-1.5 text-[11px] font-medium text-foreground hover:bg-accent disabled:opacity-40 disabled:pointer-events-none\"\n >\n Test\n </button>\n <button\n type=\"button\"\n onClick={submitMcpServer}\n disabled={!mcpName.trim() || !mcpUrl.trim() || mcpBusy}\n className=\"rounded-md bg-accent px-3 py-1.5 text-[12px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40 disabled:pointer-events-none\"\n >\n {mcpBusy ? (\n <IconLoader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n \"Connect\"\n )}\n </button>\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n <AssetsPickerModal\n open={assetsPickerOpen}\n onOpenChange={setAssetsPickerOpen}\n />\n </>\n );\n}\n\nfunction AssetsPickerModal({\n open,\n onOpenChange,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) {\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const sourceUrl = useMemo(() => assetPickerUrl(), []);\n const iframeUrl = useMemo(() => withEmbeddedParams(sourceUrl), [sourceUrl]);\n const targetOrigin = useMemo(() => assetPickerOrigin(iframeUrl), [iframeUrl]);\n\n useEffect(() => {\n if (!open || !targetOrigin) return;\n\n const handleMessage = (event: MessageEvent) => {\n if (event.source !== iframeRef.current?.contentWindow) return;\n if (event.origin !== targetOrigin) return;\n if (!isEmbedEnvelope(event.data)) return;\n\n if (event.data.type === \"ready\") {\n iframeRef.current?.contentWindow?.postMessage(\n embedEnvelope(\"message\", {\n name: \"configure\",\n payload: { mediaType: \"image\", count: 3 },\n }),\n targetOrigin,\n );\n return;\n }\n\n if (event.data.type !== \"message\") return;\n if (event.data.name === \"close\") {\n onOpenChange(false);\n return;\n }\n if (\n event.data.name !== \"chooseImage\" &&\n event.data.name !== \"chooseAsset\"\n )\n return;\n\n const url = assetImageSource(event.data.payload);\n if (!url) return;\n const title = assetTitle(event.data.payload, url);\n const assetId =\n event.data.payload && typeof event.data.payload === \"object\"\n ? assetString((event.data.payload as AssetPickerPayload).assetId)\n : null;\n setAgentChatContextItem({\n key: `asset-image:${assetId ?? url}`,\n title: `Image: ${title}`,\n context: assetContext(event.data.payload, url),\n });\n onOpenChange(false);\n };\n\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onOpenChange(false);\n };\n\n window.addEventListener(\"message\", handleMessage);\n window.addEventListener(\"keydown\", handleKey);\n return () => {\n window.removeEventListener(\"message\", handleMessage);\n window.removeEventListener(\"keydown\", handleKey);\n };\n }, [onOpenChange, open, targetOrigin]);\n\n if (!open || typeof document === \"undefined\") return null;\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-[280] flex items-center justify-center bg-black/50 p-3\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"composer-assets-picker-title\"\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) onOpenChange(false);\n }}\n >\n <div className=\"flex h-[min(86vh,760px)] w-[min(96vw,1040px)] flex-col overflow-hidden rounded-xl border border-border bg-background shadow-2xl\">\n <div className=\"flex h-12 shrink-0 items-center justify-between border-b border-border px-4\">\n <div\n id=\"composer-assets-picker-title\"\n className=\"text-sm font-medium text-foreground\"\n >\n Generate image\n </div>\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label=\"Close image picker\"\n >\n <IconX className=\"h-4 w-4\" />\n </button>\n </div>\n {targetOrigin ? (\n <iframe\n ref={iframeRef}\n src={iframeUrl}\n title=\"Assets image picker\"\n className=\"min-h-0 flex-1 border-0 bg-background\"\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-downloads\"\n allow=\"clipboard-read; clipboard-write; microphone; fullscreen\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n />\n ) : (\n <div className=\"flex min-h-0 flex-1 items-center justify-center p-8 text-center text-sm text-muted-foreground\">\n The configured image picker URL is not valid.\n </div>\n )}\n </div>\n </div>,\n document.body,\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ComposerPlusMenu.js","sourceRoot":"","sources":["../../../src/client/composer/ComposerPlusMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useRef, useEffect, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n IconPlus,\n IconUpload,\n IconBulb,\n IconClock,\n IconBolt,\n IconTool,\n IconPlugConnected,\n IconPhotoPlus,\n IconLoader2,\n IconCheck,\n IconArrowLeft,\n IconX,\n} from \"@tabler/icons-react\";\nimport { ComposerPrimitive } from \"@assistant-ui/react\";\nimport { cn } from \"../utils.js\";\nimport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n} from \"../components/ui/popover.js\";\nimport { useOrg } from \"../org/hooks.js\";\nimport { agentNativePath } from \"../api-path.js\";\nimport {\n formatMcpServerError,\n getMcpUrlValidationError,\n useCreateMcpServer,\n testMcpServerUrl,\n type McpServerScope,\n} from \"../resources/use-mcp-servers.js\";\nimport type { ComposerMode } from \"./types.js\";\nimport { setAgentChatContextItem } from \"../agent-chat.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\ninterface ComposerPlusMenuProps {\n onSelectMode?: (mode: ComposerMode) => void;\n /**\n * \"full\" (default): full + menu with Upload File, Create Skill, Schedule Task,\n * Automation, Extension, MCP Server. \"upload-only\": clicking + opens the file\n * picker directly — no popover, no other modes. Use for prompt popovers\n * (create extension, create deck, create dashboard, etc.) where the only thing\n * to attach is a file.\n */\n mode?: \"full\" | \"upload-only\";\n}\n\ntype View = \"menu\" | \"mcp-server\" | \"skill-upload\";\n\nconst DEFAULT_ASSETS_PICKER_URL = \"https://assets.agent-native.com/picker\";\nconst EMBED_PROTOCOL = \"agent-native.embed\";\nconst EMBED_VERSION = 1;\n\ninterface EmbedEnvelope<TPayload = unknown> {\n protocol?: string;\n version?: number;\n type?: string;\n name?: string;\n payload?: TPayload;\n}\n\ninterface AssetPickerPayload {\n assetId?: unknown;\n url?: unknown;\n previewUrl?: unknown;\n downloadUrl?: unknown;\n embedUrl?: unknown;\n altText?: unknown;\n title?: unknown;\n prompt?: unknown;\n mediaType?: unknown;\n libraryId?: unknown;\n}\n\nfunction assetPickerUrl() {\n const env = (import.meta.env as Record<string, string | undefined>) ?? {};\n return env.VITE_AGENT_NATIVE_ASSETS_PICKER_URL || DEFAULT_ASSETS_PICKER_URL;\n}\n\nfunction withEmbeddedParams(url: string): string {\n try {\n const parsed = new URL(url, window.location.href);\n parsed.searchParams.set(\"embedded\", \"1\");\n parsed.searchParams.set(\"mediaType\", \"image\");\n return parsed.toString();\n } catch {\n const separator = url.includes(\"?\") ? \"&\" : \"?\";\n return `${url}${separator}embedded=1&mediaType=image`;\n }\n}\n\nfunction assetPickerOrigin(url: string): string | null {\n try {\n return new URL(url, window.location.href).origin;\n } catch {\n return null;\n }\n}\n\nfunction embedEnvelope(\n type: \"message\" | \"ready\",\n options: { name?: string; payload?: unknown } = {},\n): EmbedEnvelope {\n return {\n protocol: EMBED_PROTOCOL,\n version: EMBED_VERSION,\n type,\n ...options,\n };\n}\n\nfunction isEmbedEnvelope(value: unknown): value is EmbedEnvelope {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const candidate = value as EmbedEnvelope;\n return (\n candidate.protocol === EMBED_PROTOCOL &&\n candidate.version === EMBED_VERSION &&\n typeof candidate.type === \"string\"\n );\n}\n\nfunction assetString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction assetImageSource(payload: unknown): string | null {\n if (!payload || typeof payload !== \"object\") return null;\n const asset = payload as AssetPickerPayload;\n return (\n assetString(asset.url) ??\n assetString(asset.previewUrl) ??\n assetString(asset.downloadUrl) ??\n assetString(asset.embedUrl)\n );\n}\n\nfunction assetTitle(payload: unknown, url: string): string {\n if (payload && typeof payload === \"object\") {\n const title = assetString((payload as AssetPickerPayload).title);\n if (title) return title;\n const prompt = assetString((payload as AssetPickerPayload).prompt);\n if (prompt) return prompt.slice(0, 80);\n }\n try {\n const name = new URL(url).pathname.split(\"/\").filter(Boolean).pop();\n return name ? decodeURIComponent(name) : \"Generated image\";\n } catch {\n return \"Generated image\";\n }\n}\n\nfunction assetContext(payload: unknown, url: string): string {\n const lines = [`Image URL: ${url}`];\n if (payload && typeof payload === \"object\") {\n const asset = payload as AssetPickerPayload;\n const assetId = assetString(asset.assetId);\n const libraryId = assetString(asset.libraryId);\n const prompt = assetString(asset.prompt);\n const altText = assetString(asset.altText);\n if (assetId) lines.push(`Asset ID: ${assetId}`);\n if (libraryId) lines.push(`Library ID: ${libraryId}`);\n if (prompt) lines.push(`Prompt: ${prompt}`);\n if (altText) lines.push(`Alt text: ${altText}`);\n }\n return lines.join(\"\\n\");\n}\n\nfunction slugifyName(value: string): string {\n return (\n value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\") || \"uploaded-skill\"\n );\n}\n\nfunction UploadOnlyAttachButton() {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex shrink-0\">\n <ComposerPrimitive.AddAttachment asChild>\n <button\n type=\"button\"\n className=\"shrink-0 flex h-7 w-7 cursor-pointer items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n aria-label=\"Upload\"\n >\n <IconPlus className=\"h-4 w-4\" />\n </button>\n </ComposerPrimitive.AddAttachment>\n </span>\n </TooltipTrigger>\n <TooltipContent>Upload</TooltipContent>\n </Tooltip>\n );\n}\n\nexport function ComposerPlusMenu({\n onSelectMode,\n mode = \"full\",\n}: ComposerPlusMenuProps) {\n if (mode === \"upload-only\") {\n return <UploadOnlyAttachButton />;\n }\n return <ComposerPlusMenuFull onSelectMode={onSelectMode} />;\n}\n\nfunction ComposerPlusMenuFull({\n onSelectMode,\n}: Pick<ComposerPlusMenuProps, \"onSelectMode\">) {\n const [open, setOpen] = useState(false);\n const [assetsPickerOpen, setAssetsPickerOpen] = useState(false);\n const [view, setView] = useState<View>(\"menu\");\n\n // MCP state\n const { data: org } = useOrg();\n const canCreateOrgMcp =\n !org?.orgId || org.role === \"owner\" || org.role === \"admin\";\n const hasOrg = !!org?.orgId;\n const defaultMcpScope: McpServerScope =\n hasOrg && canCreateOrgMcp ? \"org\" : \"user\";\n const [mcpScope, setMcpScope] = useState<McpServerScope>(defaultMcpScope);\n const [mcpName, setMcpName] = useState(\"\");\n const [mcpUrl, setMcpUrl] = useState(\"\");\n const [mcpDescription, setMcpDescription] = useState(\"\");\n const [mcpHeadersText, setMcpHeadersText] = useState(\"\");\n const [mcpBusy, setMcpBusy] = useState(false);\n const [mcpError, setMcpError] = useState<string | null>(null);\n const [mcpTestResult, setMcpTestResult] = useState<{\n ok: boolean;\n message: string;\n } | null>(null);\n const createMcp = useCreateMcpServer();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const fileUploadRef = useRef<HTMLButtonElement>(null);\n const skillFileInputRef = useRef<HTMLInputElement>(null);\n const skillHoverTimerRef = useRef<number | null>(null);\n const [skillUploadSlug, setSkillUploadSlug] = useState(\"\");\n const [skillUploadContent, setSkillUploadContent] = useState(\"\");\n const [skillUploadFileName, setSkillUploadFileName] = useState(\"\");\n const [skillUploadStatus, setSkillUploadStatus] = useState<{\n kind: \"ok\" | \"err\";\n message: string;\n } | null>(null);\n const [skillUploadBusy, setSkillUploadBusy] = useState(false);\n const [skillFlyoutOpen, setSkillFlyoutOpen] = useState(false);\n const [skillFlyoutSide, setSkillFlyoutSide] = useState<\"right\" | \"left\">(\n \"right\",\n );\n const skillFlyoutCloseTimerRef = useRef<number | null>(null);\n const openSkillFlyout = (rowEl?: HTMLElement | null) => {\n if (skillFlyoutCloseTimerRef.current) {\n window.clearTimeout(skillFlyoutCloseTimerRef.current);\n skillFlyoutCloseTimerRef.current = null;\n }\n if (rowEl && typeof window !== \"undefined\") {\n const rect = rowEl.getBoundingClientRect();\n const FLYOUT_WIDTH = 248;\n setSkillFlyoutSide(\n window.innerWidth - rect.right < FLYOUT_WIDTH ? \"left\" : \"right\",\n );\n }\n setSkillFlyoutOpen(true);\n };\n const scheduleSkillFlyoutClose = () => {\n if (skillFlyoutCloseTimerRef.current)\n window.clearTimeout(skillFlyoutCloseTimerRef.current);\n skillFlyoutCloseTimerRef.current = window.setTimeout(() => {\n setSkillFlyoutOpen(false);\n }, 160);\n };\n\n useEffect(() => {\n if (open) {\n setView(\"menu\");\n setMcpScope(defaultMcpScope);\n setMcpName(\"\");\n setMcpUrl(\"\");\n setMcpDescription(\"\");\n setMcpHeadersText(\"\");\n setMcpError(null);\n setMcpTestResult(null);\n setMcpBusy(false);\n setSkillUploadSlug(\"\");\n setSkillUploadContent(\"\");\n setSkillUploadFileName(\"\");\n setSkillUploadStatus(null);\n setSkillUploadBusy(false);\n setSkillFlyoutOpen(false);\n }\n }, [open, defaultMcpScope]);\n\n useEffect(() => {\n if (view === \"mcp-server\") {\n setMcpError(null);\n setMcpTestResult(null);\n const t = setTimeout(() => inputRef.current?.focus(), 50);\n return () => clearTimeout(t);\n }\n }, [view]);\n\n const clearMcpFeedback = () => {\n setMcpError(null);\n setMcpTestResult(null);\n };\n\n const parseHeaderLines = (\n text: string,\n ): Record<string, string> | undefined => {\n const out: Record<string, string> = {};\n for (const line of text.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n const idx = trimmed.indexOf(\":\");\n if (idx <= 0) continue;\n const key = trimmed.slice(0, idx).trim();\n const val = trimmed.slice(idx + 1).trim();\n if (!key || !val) continue;\n out[key] = val;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n };\n\n const submitMcpServer = async () => {\n const name = mcpName.trim();\n const url = mcpUrl.trim();\n if (!name || !url || mcpBusy) return;\n const validationError = getMcpUrlValidationError(url);\n if (validationError) {\n setMcpError(validationError);\n setMcpTestResult(null);\n return;\n }\n setMcpError(null);\n setMcpBusy(true);\n try {\n await createMcp.mutateAsync({\n scope: mcpScope,\n name,\n url,\n headers: parseHeaderLines(mcpHeadersText),\n description: mcpDescription.trim() || undefined,\n });\n setOpen(false);\n } catch (err: any) {\n setMcpError(formatMcpServerError(err));\n } finally {\n setMcpBusy(false);\n }\n };\n\n const runMcpTest = async () => {\n const url = mcpUrl.trim();\n if (!url || mcpBusy) return;\n const validationError = getMcpUrlValidationError(url);\n if (validationError) {\n setMcpTestResult({ ok: false, message: validationError });\n setMcpError(null);\n return;\n }\n setMcpTestResult(null);\n setMcpError(null);\n setMcpBusy(true);\n try {\n const res = await testMcpServerUrl(url, parseHeaderLines(mcpHeadersText));\n if (res.ok) {\n setMcpTestResult({\n ok: true,\n message: `${res.toolCount ?? 0} tool${res.toolCount === 1 ? \"\" : \"s\"} available`,\n });\n } else {\n setMcpTestResult({ ok: false, message: res.error ?? \"Failed\" });\n }\n } catch (err: any) {\n setMcpTestResult({ ok: false, message: formatMcpServerError(err) });\n } finally {\n setMcpBusy(false);\n }\n };\n\n const handleSkillFileSelected = async (files: FileList | null) => {\n if (!files || files.length === 0) return;\n const file = files[0];\n const text = await file.text();\n const baseName = file.name.replace(/\\.[^./]+$/, \"\");\n const slug = slugifyName(\n baseName.toLowerCase() === \"skill\" ? \"uploaded-skill\" : baseName,\n );\n setSkillUploadSlug(slug);\n setSkillUploadContent(text);\n setSkillUploadFileName(file.name);\n setSkillUploadStatus(null);\n setView(\"skill-upload\");\n };\n\n const submitSkillUpload = async () => {\n if (skillUploadBusy) return;\n const slug = slugifyName(skillUploadSlug || \"uploaded-skill\");\n const path = `skills/${slug}/SKILL.md`;\n setSkillUploadBusy(true);\n setSkillUploadStatus(null);\n try {\n const res = await fetch(agentNativePath(\"/_agent-native/resources\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n path,\n content: skillUploadContent,\n mimeType: \"text/markdown\",\n shared: false,\n }),\n });\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new Error(body || `Upload failed (${res.status})`);\n }\n setSkillUploadStatus({\n kind: \"ok\",\n message: `Skill \"${skillUploadFileName || `${slug}/SKILL.md`}\" added`,\n });\n window.setTimeout(() => setOpen(false), 1200);\n } catch (err: any) {\n setSkillUploadStatus({\n kind: \"err\",\n message: err?.message || \"Failed to save skill file\",\n });\n } finally {\n setSkillUploadBusy(false);\n }\n };\n\n const menuItems: {\n icon: React.ReactNode;\n label: string;\n desc: string;\n action: () => void;\n hoverAction?: () => void;\n }[] = [\n {\n icon: <IconUpload className=\"h-3.5 w-3.5\" />,\n label: \"Upload File\",\n desc: \"Images, PDFs, text/code, JSON, CSV\",\n action: () => {\n setOpen(false);\n setTimeout(() => fileUploadRef.current?.click(), 0);\n },\n },\n {\n icon: <IconPhotoPlus className=\"h-3.5 w-3.5\" />,\n label: \"Generate Image\",\n desc: \"Open the Assets image picker\",\n action: () => {\n setOpen(false);\n setAssetsPickerOpen(true);\n },\n },\n {\n icon: <IconClock className=\"h-3.5 w-3.5\" />,\n label: \"Schedule Task\",\n desc: \"Run something on a schedule\",\n action: () => {\n onSelectMode?.(\"job\");\n setOpen(false);\n },\n },\n {\n icon: <IconBolt className=\"h-3.5 w-3.5\" />,\n label: \"Create Automation\",\n desc: \"Set up a when-X-do-Y rule\",\n action: () => {\n onSelectMode?.(\"automation\");\n setOpen(false);\n },\n },\n {\n icon: <IconTool className=\"h-3.5 w-3.5\" />,\n label: \"Create Extension\",\n desc: \"Build a mini app extension\",\n action: () => {\n onSelectMode?.(\"extension\");\n setOpen(false);\n },\n },\n {\n icon: <IconPlugConnected className=\"h-3.5 w-3.5\" />,\n label: \"Connect MCP Server\",\n desc: \"Expose external tools to the agent\",\n action: () => setView(\"mcp-server\"),\n },\n {\n icon: <IconBulb className=\"h-3.5 w-3.5\" />,\n label: \"Create Skill\",\n desc: \"Teach the agent a new ability\",\n action: openSkillFlyout,\n hoverAction: openSkillFlyout,\n },\n ];\n\n const backButton = (\n <button\n type=\"button\"\n onClick={() => {\n clearMcpFeedback();\n setView(\"menu\");\n }}\n className=\"flex items-center gap-1 text-[11px] text-muted-foreground hover:text-foreground mb-1.5\"\n >\n <IconArrowLeft className=\"h-3 w-3\" />\n Back\n </button>\n );\n\n return (\n <>\n {/* Hidden button to trigger the native file upload */}\n <ComposerPrimitive.AddAttachment asChild>\n <button\n ref={fileUploadRef}\n type=\"button\"\n className=\"hidden\"\n style={{ display: \"none\" }}\n tabIndex={-1}\n aria-hidden\n />\n </ComposerPrimitive.AddAttachment>\n <input\n ref={skillFileInputRef}\n type=\"file\"\n accept=\".md,text/markdown\"\n className=\"hidden\"\n onChange={(e) => {\n void handleSkillFileSelected(e.target.files);\n e.target.value = \"\";\n }}\n />\n\n <Popover open={open} onOpenChange={setOpen}>\n <Tooltip>\n <TooltipTrigger asChild>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"shrink-0 flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50 disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <IconPlus className=\"h-4 w-4\" />\n </button>\n </PopoverTrigger>\n </TooltipTrigger>\n <TooltipContent>Add...</TooltipContent>\n </Tooltip>\n <PopoverContent\n side=\"top\"\n align=\"start\"\n sideOffset={8}\n className={cn(\n \"p-0 rounded-lg\",\n view === \"skill-upload\" || view === \"mcp-server\"\n ? \"max-h-[70vh] w-[calc(100vw-24px)] max-w-[380px] overflow-y-auto\"\n : \"w-[260px]\",\n )}\n style={{ fontSize: 13, lineHeight: \"normal\" }}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n {view === \"menu\" && (\n <div className=\"py-1\">\n {menuItems.map((item) => {\n const isSkill = item.label === \"Create Skill\";\n return (\n <div\n key={item.label}\n className={cn(\"relative\", isSkill && \"group/skill\")}\n onMouseEnter={(e) => {\n if (isSkill) {\n openSkillFlyout(e.currentTarget);\n return;\n }\n if (!item.hoverAction) return;\n if (skillHoverTimerRef.current)\n window.clearTimeout(skillHoverTimerRef.current);\n skillHoverTimerRef.current = window.setTimeout(() => {\n item.hoverAction?.();\n }, 180);\n }}\n onMouseLeave={() => {\n if (isSkill) {\n scheduleSkillFlyoutClose();\n return;\n }\n if (skillHoverTimerRef.current) {\n window.clearTimeout(skillHoverTimerRef.current);\n skillHoverTimerRef.current = null;\n }\n }}\n >\n <button\n type=\"button\"\n onClick={item.action}\n className={cn(\n \"flex w-full items-center gap-2.5 px-3 py-2 text-left hover:bg-accent/50\",\n isSkill && skillFlyoutOpen && \"bg-accent/50\",\n )}\n >\n <span className=\"text-muted-foreground\">{item.icon}</span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-[12px] font-medium text-foreground\">\n {item.label}\n </div>\n <div className=\"mt-0.5 text-[10px] text-muted-foreground/60\">\n {item.desc}\n </div>\n </div>\n {isSkill && (\n <span className=\"ml-auto text-muted-foreground/60\">\n ›\n </span>\n )}\n </button>\n {isSkill && skillFlyoutOpen && (\n <div\n role=\"menu\"\n onMouseEnter={() => openSkillFlyout()}\n onMouseLeave={scheduleSkillFlyoutClose}\n className={cn(\n \"absolute top-0 z-20 w-[240px] rounded-lg border border-border bg-popover py-1 shadow-md\",\n skillFlyoutSide === \"right\"\n ? \"left-full ml-1\"\n : \"right-full mr-1\",\n )}\n >\n <button\n type=\"button\"\n onClick={() => {\n onSelectMode?.(\"skill\");\n setSkillFlyoutOpen(false);\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-2.5 px-3 py-2 text-left hover:bg-accent/50\"\n >\n <span className=\"text-muted-foreground\">\n <IconBulb className=\"h-3.5 w-3.5\" />\n </span>\n <div className=\"min-w-0\">\n <div className=\"text-[12px] font-medium text-foreground\">\n Create new skill\n </div>\n <div className=\"mt-0.5 text-[10px] text-muted-foreground/60\">\n Describe a skill and let the agent draft it\n </div>\n </div>\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setSkillFlyoutOpen(false);\n skillFileInputRef.current?.click();\n }}\n className=\"flex w-full items-center gap-2.5 px-3 py-2 text-left hover:bg-accent/50\"\n >\n <span className=\"text-muted-foreground\">\n <IconUpload className=\"h-3.5 w-3.5\" />\n </span>\n <div className=\"min-w-0\">\n <div className=\"text-[12px] font-medium text-foreground\">\n Upload skill file\n </div>\n <div className=\"mt-0.5 text-[10px] text-muted-foreground/60\">\n Import an existing SKILL.md file\n </div>\n </div>\n </button>\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n {view === \"skill-upload\" && (\n <div className=\"p-3\">\n <button\n type=\"button\"\n onClick={() => setView(\"menu\")}\n className=\"mb-1.5 flex items-center gap-1 text-[11px] text-muted-foreground hover:text-foreground\"\n >\n <IconArrowLeft className=\"h-3 w-3\" />\n Back\n </button>\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Upload skill file\n </label>\n <p className=\"mb-2 text-[10px] leading-relaxed text-muted-foreground/60\">\n Review the content from{\" \"}\n <span className=\"font-mono\">\n {skillUploadFileName || \"the selected file\"}\n </span>{\" \"}\n before saving.\n </p>\n <label className=\"mb-1 block text-[10px] font-medium text-muted-foreground\">\n Skill name\n </label>\n <input\n value={skillUploadSlug}\n onChange={(e) => setSkillUploadSlug(e.target.value)}\n className=\"mb-2 w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[12px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"my-skill\"\n />\n <p className=\"mb-2 text-[10px] text-muted-foreground/60\">\n Saved at{\" \"}\n <span className=\"font-mono\">\n skills/{slugifyName(skillUploadSlug || \"uploaded-skill\")}\n /SKILL.md\n </span>\n </p>\n <label className=\"mb-1 block text-[10px] font-medium text-muted-foreground\">\n Content\n </label>\n <textarea\n value={skillUploadContent}\n onChange={(e) => setSkillUploadContent(e.target.value)}\n rows={10}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 font-mono text-[11px] leading-relaxed text-foreground outline-none focus:ring-1 focus:ring-accent\"\n />\n {skillUploadStatus && (\n <div\n className={cn(\n \"mt-2 text-[11px] leading-snug\",\n skillUploadStatus.kind === \"ok\"\n ? \"text-green-600 dark:text-green-400\"\n : \"text-red-600 dark:text-red-400\",\n )}\n >\n {skillUploadStatus.message}\n </div>\n )}\n <div className=\"mt-2.5 flex justify-end gap-2\">\n <button\n type=\"button\"\n onClick={() => setView(\"menu\")}\n className=\"rounded-md px-3 py-1.5 text-[12px] font-medium text-muted-foreground hover:bg-accent/40\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={submitSkillUpload}\n disabled={\n skillUploadBusy ||\n !skillUploadContent.trim() ||\n !skillUploadSlug.trim()\n }\n className=\"rounded-md bg-accent px-3 py-1.5 text-[12px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40 disabled:pointer-events-none\"\n >\n {skillUploadBusy ? (\n <IconLoader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n \"Save\"\n )}\n </button>\n </div>\n </div>\n )}\n\n {view === \"mcp-server\" && (\n <div className=\"p-3\">\n {backButton}\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Connect MCP Server\n </label>\n <p className=\"mb-2 text-[10px] text-muted-foreground/60 leading-relaxed\">\n Point at any Streamable HTTP MCP server. Its tools become\n available to the agent. Use Personal for private or staging\n servers; use Organization only for vetted servers the whole org\n should share.\n </p>\n <div className=\"space-y-2\">\n <div className=\"flex gap-1 rounded-md border border-border p-0.5\">\n <button\n type=\"button\"\n onClick={() => setMcpScope(\"user\")}\n className={cn(\n \"flex-1 rounded px-2 py-1 text-[11px] font-medium\",\n mcpScope === \"user\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n Personal\n </button>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() =>\n hasOrg && canCreateOrgMcp && setMcpScope(\"org\")\n }\n disabled={!hasOrg || !canCreateOrgMcp}\n className={cn(\n \"flex-1 rounded px-2 py-1 text-[11px] font-medium\",\n mcpScope === \"org\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n (!hasOrg || !canCreateOrgMcp) &&\n \"cursor-not-allowed opacity-50 hover:text-muted-foreground\",\n )}\n >\n Organization\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {!hasOrg\n ? \"Join an organization to share MCP servers\"\n : !canCreateOrgMcp\n ? \"Only owners and admins can add org-scope servers\"\n : undefined}\n </TooltipContent>\n </Tooltip>\n </div>\n <input\n ref={inputRef}\n value={mcpName}\n onChange={(e) => {\n setMcpName(e.target.value);\n clearMcpFeedback();\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Server name (e.g. zapier-staging)\"\n />\n <input\n value={mcpUrl}\n onChange={(e) => {\n setMcpUrl(e.target.value);\n clearMcpFeedback();\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"https://mcp.example.com/\"\n />\n <input\n value={mcpDescription}\n onChange={(e) => {\n setMcpDescription(e.target.value);\n clearMcpFeedback();\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Description (optional)\"\n />\n <div>\n <label className=\"block text-[10px] font-medium text-foreground\">\n Headers\n </label>\n <p className=\"mt-0.5 text-[10px] leading-snug text-muted-foreground/70\">\n Optional. One per line, for example Authorization: Bearer\n sk-...\n </p>\n </div>\n <textarea\n value={mcpHeadersText}\n onChange={(e) => {\n setMcpHeadersText(e.target.value);\n clearMcpFeedback();\n }}\n rows={2}\n className=\"w-full resize-y rounded-md border border-border bg-background px-2.5 py-1.5 text-[12px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n }}\n placeholder=\"Authorization: Bearer sk-...\"\n />\n {mcpTestResult && (\n <div\n className={cn(\n \"flex items-start gap-1 text-[11px] leading-snug\",\n mcpTestResult.ok\n ? \"text-green-600 dark:text-green-400\"\n : \"text-red-600 dark:text-red-400\",\n )}\n >\n {mcpTestResult.ok && (\n <IconCheck className=\"mt-0.5 h-3 w-3 shrink-0\" />\n )}\n <span className=\"min-w-0 break-words\">\n {mcpTestResult.message}\n </span>\n </div>\n )}\n {mcpError && (\n <div className=\"break-words text-[11px] leading-snug text-red-600 dark:text-red-400\">\n {mcpError}\n </div>\n )}\n </div>\n <div className=\"mt-2.5 flex items-center justify-between gap-2\">\n <button\n type=\"button\"\n onClick={runMcpTest}\n disabled={!mcpUrl.trim() || mcpBusy}\n className=\"rounded-md border border-border bg-background px-2.5 py-1.5 text-[11px] font-medium text-foreground hover:bg-accent disabled:opacity-40 disabled:pointer-events-none\"\n >\n Test\n </button>\n <button\n type=\"button\"\n onClick={submitMcpServer}\n disabled={!mcpName.trim() || !mcpUrl.trim() || mcpBusy}\n className=\"rounded-md bg-accent px-3 py-1.5 text-[12px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40 disabled:pointer-events-none\"\n >\n {mcpBusy ? (\n <IconLoader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n \"Connect\"\n )}\n </button>\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n <AssetsPickerModal\n open={assetsPickerOpen}\n onOpenChange={setAssetsPickerOpen}\n />\n </>\n );\n}\n\nfunction AssetsPickerModal({\n open,\n onOpenChange,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) {\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const [pickerReady, setPickerReady] = useState(false);\n const sourceUrl = useMemo(() => assetPickerUrl(), []);\n const iframeUrl = useMemo(() => withEmbeddedParams(sourceUrl), [sourceUrl]);\n const targetOrigin = useMemo(() => assetPickerOrigin(iframeUrl), [iframeUrl]);\n\n useEffect(() => {\n if (open) setPickerReady(false);\n }, [iframeUrl, open]);\n\n useEffect(() => {\n if (!open || !targetOrigin) return;\n\n const handleMessage = (event: MessageEvent) => {\n if (event.source !== iframeRef.current?.contentWindow) return;\n if (event.origin !== targetOrigin) return;\n if (!isEmbedEnvelope(event.data)) return;\n\n if (event.data.type === \"ready\") {\n setPickerReady(true);\n iframeRef.current?.contentWindow?.postMessage(\n embedEnvelope(\"message\", {\n name: \"configure\",\n payload: { mediaType: \"image\", count: 3 },\n }),\n targetOrigin,\n );\n return;\n }\n\n if (event.data.type !== \"message\") return;\n if (event.data.name === \"close\") {\n onOpenChange(false);\n return;\n }\n if (\n event.data.name !== \"chooseImage\" &&\n event.data.name !== \"chooseAsset\"\n )\n return;\n\n const url = assetImageSource(event.data.payload);\n if (!url) return;\n const title = assetTitle(event.data.payload, url);\n const assetId =\n event.data.payload && typeof event.data.payload === \"object\"\n ? assetString((event.data.payload as AssetPickerPayload).assetId)\n : null;\n setAgentChatContextItem({\n key: `asset-image:${assetId ?? url}`,\n title: `Image: ${title}`,\n context: assetContext(event.data.payload, url),\n });\n onOpenChange(false);\n };\n\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onOpenChange(false);\n };\n\n window.addEventListener(\"message\", handleMessage);\n window.addEventListener(\"keydown\", handleKey);\n return () => {\n window.removeEventListener(\"message\", handleMessage);\n window.removeEventListener(\"keydown\", handleKey);\n };\n }, [onOpenChange, open, targetOrigin]);\n\n if (!open || typeof document === \"undefined\") return null;\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-[280] flex items-center justify-center bg-black/50 p-3\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"composer-assets-picker-title\"\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) onOpenChange(false);\n }}\n >\n <div className=\"flex h-[min(86vh,760px)] w-[min(96vw,1040px)] flex-col overflow-hidden rounded-xl border border-border bg-background shadow-2xl\">\n <div className=\"flex h-12 shrink-0 items-center justify-between border-b border-border px-4\">\n <div\n id=\"composer-assets-picker-title\"\n className=\"text-sm font-medium text-foreground\"\n >\n Generate image\n </div>\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label=\"Close image picker\"\n >\n <IconX className=\"h-4 w-4\" />\n </button>\n </div>\n {targetOrigin ? (\n <div className=\"relative min-h-0 flex-1 overflow-hidden bg-background\">\n {!pickerReady && <AssetsPickerLoadingSkeleton />}\n <iframe\n ref={iframeRef}\n src={iframeUrl}\n title=\"Assets image picker\"\n className={cn(\n \"absolute inset-0 h-full w-full border-0 bg-background transition-opacity duration-150\",\n pickerReady ? \"opacity-100\" : \"pointer-events-none opacity-0\",\n )}\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-downloads\"\n allow=\"clipboard-read; clipboard-write; microphone; fullscreen\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n />\n </div>\n ) : (\n <div className=\"flex min-h-0 flex-1 items-center justify-center p-8 text-center text-sm text-muted-foreground\">\n The configured image picker URL is not valid.\n </div>\n )}\n </div>\n </div>,\n document.body,\n );\n}\n\nfunction AssetsPickerLoadingSkeleton() {\n return (\n <div\n className=\"absolute inset-0 flex flex-col gap-5 p-5\"\n role=\"status\"\n aria-label=\"Loading Assets picker\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"h-9 flex-1 animate-pulse rounded-md bg-muted\" />\n <div className=\"h-9 w-24 animate-pulse rounded-md bg-muted\" />\n </div>\n <div className=\"grid min-h-0 flex-1 grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-4\">\n {Array.from({ length: 8 }).map((_, index) => (\n <div key={index} className=\"flex min-w-0 flex-col gap-2\">\n <div className=\"aspect-square w-full animate-pulse rounded-lg bg-muted\" />\n <div className=\"h-3 w-3/4 animate-pulse rounded bg-muted\" />\n <div className=\"h-3 w-1/2 animate-pulse rounded bg-muted\" />\n </div>\n ))}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -6,6 +6,10 @@ export interface GuidedQuestionOption {
|
|
|
6
6
|
icon?: string;
|
|
7
7
|
description?: string;
|
|
8
8
|
recommended?: boolean;
|
|
9
|
+
/** Optional preview content (mockup, code snippet, or short comparison)
|
|
10
|
+
* shown beneath the option to help the user compare choices. Mirrors the
|
|
11
|
+
* `preview` field of Claude Code's AskUserQuestion options. */
|
|
12
|
+
preview?: string;
|
|
9
13
|
}
|
|
10
14
|
export interface GuidedQuestion {
|
|
11
15
|
id: string;
|
|
@@ -32,6 +36,12 @@ export interface GuidedQuestionPayload {
|
|
|
32
36
|
description?: string;
|
|
33
37
|
skipLabel?: string;
|
|
34
38
|
submitLabel?: string;
|
|
39
|
+
/**
|
|
40
|
+
* @internal Set by {@link askUserQuestion} for client-initiated questions.
|
|
41
|
+
* When present, `useGuidedQuestionFlow` resolves the matching in-memory
|
|
42
|
+
* promise with the answer instead of forwarding it to the agent chat.
|
|
43
|
+
*/
|
|
44
|
+
clientResolveId?: string;
|
|
35
45
|
}
|
|
36
46
|
export declare function isOtherGuidedAnswer(value: unknown): value is string;
|
|
37
47
|
export declare function getOtherGuidedAnswerText(value: unknown): string;
|
|
@@ -40,6 +50,64 @@ export declare function hasGuidedAnswer(value: unknown): boolean;
|
|
|
40
50
|
export declare function formatGuidedAnswerValue(value: unknown): unknown;
|
|
41
51
|
export declare function normalizeGuidedAnswers(answers: GuidedQuestionAnswers): GuidedQuestionAnswers;
|
|
42
52
|
export declare function formatGuidedAnswersForAgent(answers: GuidedQuestionAnswers): string;
|
|
53
|
+
/** A single option for {@link askUserQuestion}. Mirrors the agent `ask-question`
|
|
54
|
+
* tool and Claude Code's AskUserQuestion option shape. */
|
|
55
|
+
export interface AskUserQuestionOption {
|
|
56
|
+
/** Display text the user picks (1-5 words). */
|
|
57
|
+
label: string;
|
|
58
|
+
/** Value reported back. Defaults to `label` when omitted. */
|
|
59
|
+
value?: string;
|
|
60
|
+
/** Short explanation of the trade-off. */
|
|
61
|
+
description?: string;
|
|
62
|
+
/** Optional preview (mockup, code snippet, short comparison) shown under the option. */
|
|
63
|
+
preview?: string;
|
|
64
|
+
/** Mark the most likely option so the UI highlights it. */
|
|
65
|
+
recommended?: boolean;
|
|
66
|
+
}
|
|
67
|
+
/** Input for {@link askUserQuestion}. */
|
|
68
|
+
export interface AskUserQuestionInput {
|
|
69
|
+
/** The complete question. Clear, specific, ends with a question mark. */
|
|
70
|
+
question: string;
|
|
71
|
+
/** Optional very short chip/heading (≈12 chars), e.g. "Date range". */
|
|
72
|
+
header?: string;
|
|
73
|
+
/** 2-4 distinct options (mutually exclusive unless `allowMultiple`). */
|
|
74
|
+
options: AskUserQuestionOption[];
|
|
75
|
+
/** Allow a free-text "Other" answer. Default `true`. */
|
|
76
|
+
allowFreeText?: boolean;
|
|
77
|
+
/** Allow selecting more than one option (multi-select). Default `false`. */
|
|
78
|
+
allowMultiple?: boolean;
|
|
79
|
+
/** Application-state key the agent panel polls. Default `"guided-questions"`. */
|
|
80
|
+
stateKey?: string;
|
|
81
|
+
}
|
|
82
|
+
/** The user's answer to an {@link askUserQuestion}: the selected option
|
|
83
|
+
* value(s), the free-text "Other" string, or `null` if the user skipped. */
|
|
84
|
+
export type AskUserQuestionResult = string | string[] | null;
|
|
85
|
+
/**
|
|
86
|
+
* Ask the user a multiple-choice question from app code and render it inline in
|
|
87
|
+
* the agent panel — the client-side twin of the agent's `ask-question` tool.
|
|
88
|
+
*
|
|
89
|
+
* The question is written to application state (`"guided-questions"` by
|
|
90
|
+
* default), where the mounted `GuidedQuestionFlow` (driven by
|
|
91
|
+
* {@link useGuidedQuestionFlow}) renders it, and the agent panel is revealed so
|
|
92
|
+
* it's visible. **Resolves with the user's answer** — the selected option
|
|
93
|
+
* value (or `value[]` when `allowMultiple`), the free-text "Other" string, or
|
|
94
|
+
* `null` if they skip — so the caller can branch on it (e.g. build the right
|
|
95
|
+
* generate prompt before kicking off agent work):
|
|
96
|
+
*
|
|
97
|
+
* ```ts
|
|
98
|
+
* const length = await askUserQuestion({
|
|
99
|
+
* question: "How long should this deck be?",
|
|
100
|
+
* header: "Deck length",
|
|
101
|
+
* options: [{ label: "Short", recommended: true }, { label: "Long" }],
|
|
102
|
+
* });
|
|
103
|
+
* if (length) sendToAgentChat({ message: `Make a ${length} deck`, submit: true });
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
106
|
+
* Requires the agent panel (the mounted `GuidedQuestionFlow`) to exist, which
|
|
107
|
+
* it does in every template. The returned promise stays pending until the user
|
|
108
|
+
* answers or skips.
|
|
109
|
+
*/
|
|
110
|
+
export declare function askUserQuestion(input: AskUserQuestionInput): Promise<AskUserQuestionResult>;
|
|
43
111
|
export interface GuidedQuestionFlowProps {
|
|
44
112
|
questions: GuidedQuestion[];
|
|
45
113
|
onSubmit: (answers: GuidedQuestionAnswers) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guided-questions.d.ts","sourceRoot":"","sources":["../../src/client/guided-questions.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"guided-questions.d.ts","sourceRoot":"","sources":["../../src/client/guided-questions.tsx"],"names":[],"mappings":"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"}
|