@agent-native/core 0.79.27 → 0.80.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/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +34 -0
- package/corpus/core/docs/content/locales/ar-SA/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +55 -1
- package/corpus/core/docs/content/locales/de-DE/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/de-DE/template-design.mdx +66 -1
- package/corpus/core/docs/content/locales/es-ES/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/es-ES/template-design.mdx +65 -1
- package/corpus/core/docs/content/locales/fr-FR/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +64 -1
- package/corpus/core/docs/content/locales/hi-IN/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +59 -1
- package/corpus/core/docs/content/locales/ja-JP/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +62 -1
- package/corpus/core/docs/content/locales/ko-KR/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +58 -1
- package/corpus/core/docs/content/locales/pt-BR/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +62 -1
- package/corpus/core/docs/content/locales/zh-CN/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +50 -1
- package/corpus/core/docs/content/locales/zh-TW/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +52 -1
- package/corpus/core/docs/content/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/template-design.mdx +59 -1
- package/corpus/core/package.json +2 -1
- package/corpus/core/src/agent/engine/index.ts +1 -0
- package/corpus/core/src/agent/engine/registry.ts +40 -0
- package/corpus/core/src/agent/production-agent.ts +6 -2
- package/corpus/core/src/application-state/handlers.ts +1 -1
- package/corpus/core/src/brand-kit/index.ts +1 -1
- package/corpus/core/src/cli/design-connect.ts +490 -0
- package/corpus/core/src/cli/index.ts +16 -0
- package/corpus/core/src/cli/skills.ts +144 -3
- package/corpus/core/src/client/AgentPanel.tsx +1 -1
- package/corpus/core/src/client/AssistantChat.tsx +43 -7
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +1 -1
- package/corpus/core/src/client/agent-chat.ts +27 -3
- package/corpus/core/src/client/blocks/library/MermaidBlock.tsx +1 -1
- package/corpus/core/src/client/blocks/library/diagram.tsx +2 -2
- package/corpus/core/src/client/blocks/library/wireframe.tsx +1 -1
- package/corpus/core/src/client/chat/message-components.tsx +1 -1
- package/corpus/core/src/client/chat-model-groups.ts +1 -2
- package/corpus/core/src/client/components/LiveCursorOverlay.tsx +33 -66
- package/corpus/core/src/client/composer/TiptapComposer.tsx +99 -24
- package/corpus/core/src/client/composer/useVoiceDictation.ts +429 -260
- package/corpus/core/src/client/extensions/portable-extension.ts +1 -1
- package/corpus/core/src/client/frame-protocol.ts +17 -2
- package/corpus/core/src/client/rich-markdown-editor/RegistryBlockNode.tsx +2 -2
- package/corpus/core/src/client/sharing/ShareButton.tsx +20 -15
- package/corpus/core/src/client/use-agent-engine-configured.ts +80 -28
- package/corpus/core/src/code-agents/transcript-normalizer.ts +1 -1
- package/corpus/core/src/extensions/path.ts +1 -4
- package/corpus/core/src/integrations/a2a-continuation-processor.ts +1 -1
- package/corpus/core/src/mcp/build-server.ts +1 -1
- package/corpus/core/src/org/handlers.ts +5 -5
- package/corpus/core/src/org/plugin.ts +2 -2
- package/corpus/core/src/scripts/call-agent.ts +1 -1
- package/corpus/core/src/scripts/db/safety.ts +1 -1
- package/corpus/core/src/server/auth.ts +3 -0
- package/corpus/core/src/server/builder-design-systems.ts +308 -0
- package/corpus/core/src/server/core-routes-plugin.ts +29 -3
- package/corpus/core/src/server/index.ts +8 -0
- package/corpus/core/src/server/transcribe-voice.ts +57 -22
- package/corpus/core/src/shared/mcp-embed-headers.ts +23 -1
- package/corpus/core/src/styles/agent-native.css +60 -4
- package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
- package/corpus/core/src/usage/store.ts +2 -2
- package/corpus/core/src/vite/client.ts +2 -0
- package/corpus/core/src/voice/index.ts +18 -0
- package/corpus/core/src/voice/voice-cleanup-prompt.ts +38 -0
- package/corpus/core/src/voice/voice-context.ts +217 -0
- package/corpus/core/src/voice/voice-replacements.ts +75 -0
- package/corpus/templates/analytics/AGENTS.md +4 -3
- package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +298 -15
- package/corpus/templates/analytics/actions/get-sql-dashboard.ts +9 -4
- package/corpus/templates/analytics/actions/list-session-recordings.ts +6 -1
- package/corpus/templates/analytics/actions/mutate-dashboard.ts +18 -2
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +12 -2
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +557 -400
- package/corpus/templates/analytics/app/global.css +0 -4
- package/corpus/templates/analytics/app/hooks/use-replay-storage-status.ts +66 -0
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +39 -0
- package/corpus/templates/analytics/app/i18n-data.ts +424 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +333 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +2 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-layout.ts +121 -3
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +82 -34
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +7 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +144 -36
- package/corpus/templates/analytics/changelog/2026-06-28-ask-tab-now-matches-the-darker-app-background.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-28-dashboard-email-reports-now-use-cleaner-light-mode-snapshots.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-28-sessions-now-show-only-signed-in-recordings-with-playable-re.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-analytics-agents-can-now-place-new-charts-into-requested-das.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-analytics-queries-now-report-failed-source-query-errors-inst.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-charts-can-now-be-dropped-between-full-dashboard-rows-to-cre.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-dashboard-email-reports-include-the-full-dashboard-image-wit.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-main-surface-border-reaches-the-top.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-session-replay-now-records-playable-sessions-in-production-a.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-set-up-session-replay-storage-from-settings-connect-builder-.md +6 -0
- package/corpus/templates/analytics/scripts/cleanup-empty-session-recordings.ts +102 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +3 -3
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +75 -30
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +5 -2
- package/corpus/templates/analytics/server/lib/real-data-actions.ts +81 -20
- package/corpus/templates/analytics/server/lib/replay-storage.ts +79 -0
- package/corpus/templates/analytics/server/lib/s3-upload-provider.ts +255 -0
- package/corpus/templates/analytics/server/lib/session-replay.ts +53 -12
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +11 -2
- package/corpus/templates/analytics/server/plugins/onboarding.ts +97 -0
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +4 -4
- package/corpus/templates/assets/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +29 -2
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +131 -42
- package/corpus/templates/brain/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/brain/app/i18n-data.ts +20 -0
- package/corpus/templates/brain/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +29 -1
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +417 -299
- package/corpus/templates/calendar/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/calendar/app/i18n-data.ts +20 -0
- package/corpus/templates/calendar/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +6 -19
- package/corpus/templates/chat/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/clips/AGENTS.md +4 -0
- package/corpus/templates/clips/actions/cleanup-transcript.ts +39 -9
- package/corpus/templates/clips/actions/finalize-meeting.ts +81 -12
- package/corpus/templates/clips/actions/lib/agents-md-context.ts +4 -1
- package/corpus/templates/clips/app/components/library/library-layout.tsx +3 -3
- package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +1 -1
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +2 -2
- package/corpus/templates/clips/changelog/2026-06-28-left-sidebar-footer-controls-use-less-divider-chrome.md +6 -0
- package/corpus/templates/clips/desktop/src/lib/personal-vocabulary.ts +13 -8
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +24 -0
- package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +105 -5
- package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +60 -1
- package/corpus/templates/content/actions/set-image-alt-text.ts +1 -1
- package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +1 -1
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +1 -1
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +5 -5
- package/corpus/templates/content/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/content/shared/document-export.ts +1 -1
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -18
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +154 -0
- package/corpus/templates/design/AGENTS.md +95 -5
- package/corpus/templates/design/DESIGN.md +82 -0
- package/corpus/templates/design/DEVELOPING.md +43 -0
- package/corpus/templates/design/actions/add-localhost-screens.ts +453 -0
- package/corpus/templates/design/actions/apply-shader.ts +277 -0
- package/corpus/templates/design/actions/apply-visual-edit.ts +303 -0
- package/corpus/templates/design/actions/connect-localhost.ts +183 -0
- package/corpus/templates/design/actions/edit-design.ts +195 -42
- package/corpus/templates/design/actions/generate-design.ts +71 -1
- package/corpus/templates/design/actions/generate-screens.ts +193 -0
- package/corpus/templates/design/actions/get-code-layer-projection.ts +191 -0
- package/corpus/templates/design/actions/get-shader.ts +119 -0
- package/corpus/templates/design/actions/index-design-system-with-builder.ts +259 -0
- package/corpus/templates/design/actions/list-localhost-connections.ts +95 -0
- package/corpus/templates/design/actions/navigate.ts +55 -2
- package/corpus/templates/design/actions/update-file.ts +9 -2
- package/corpus/templates/design/actions/view-screen.ts +68 -1
- package/corpus/templates/design/agent-native.app-skill.json +10 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +719 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +2120 -103
- package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +74 -38
- package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +401 -0
- package/corpus/templates/design/app/components/design/EditPanel.tsx +3966 -440
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +1473 -0
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +3940 -147
- package/corpus/templates/design/app/components/design/QuestionFlow.tsx +700 -13
- package/corpus/templates/design/app/components/design/TweaksPanel.tsx +105 -63
- package/corpus/templates/design/app/components/design/index.ts +0 -5
- package/corpus/templates/design/app/components/design/inspector/AlignmentMatrix.tsx +353 -0
- package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +1589 -0
- package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +511 -0
- package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +395 -0
- package/corpus/templates/design/app/components/design/inspector/FigmaColorPicker.tsx +2010 -0
- package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +601 -0
- package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +242 -0
- package/corpus/templates/design/app/components/design/inspector/SHADER_INTEGRATION.md +420 -0
- package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +238 -0
- package/corpus/templates/design/app/components/design/inspector/ShaderControls.stories.tsx +71 -0
- package/corpus/templates/design/app/components/design/inspector/ShaderControls.tsx +575 -0
- package/corpus/templates/design/app/components/design/inspector/ShaderEffectRow.tsx +106 -0
- package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +423 -0
- package/corpus/templates/design/app/components/design/inspector/figma-icons.tsx +741 -0
- package/corpus/templates/design/app/components/design/inspector/index.ts +87 -0
- package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +201 -0
- package/corpus/templates/design/app/components/design/types.ts +23 -0
- package/corpus/templates/design/app/components/layout/Layout.tsx +24 -13
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +4 -4
- package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +474 -36
- package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +22 -5
- package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +24 -11
- package/corpus/templates/design/app/global.css +149 -5
- package/corpus/templates/design/app/hooks/use-agent-generating.ts +4 -0
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +130 -8
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +329 -0
- package/corpus/templates/design/app/i18n/zh-TW.ts +277 -0
- package/corpus/templates/design/app/i18n-data.ts +3028 -1
- package/corpus/templates/design/app/pages/DesignEditor.tsx +5831 -904
- package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +57 -221
- package/corpus/templates/design/changelog/2026-06-28-annotate-mode-now-combines-drawing-and-comment-pins-in-one-c.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-design-editor-panel-borders-are-cleaner-so-the-canvas-edge-s.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-drawing-prompts-now-reliably-open-and-submit-to-the-design-a.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-editor-app-menus-now-use-an-outline-agent-native-mark-with-b.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-figma-style-code-design-mode.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-layer-selection-now-updates-chat-context-without-opening-the.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-layer-selections-now-preserve-hidden-and-locked-canvas-state.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-live-cursors-now-keep-names-beside-a-cleaner-pointer-marker.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-mode-switching-now-lives-in-a-compact-bottom-right-icon-dock.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-screen-overview-now-handles-zooming-drawing-opening-and-dele.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-screen-overview-now-selects-screens-on-click-and-opens-them-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-screen-overview-zooms-into-the-active-screen-with-smoother-e.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-selected-element-chips-in-chat-are-shorter-and-easier-to-sca.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-the-design-editor-toolbar-is-more-compact-and-the-app-menu-m.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-tweaks-now-live-at-the-top-of-the-design-sidebar-instead-of-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-tweaks-now-live-in-the-right-inspector-beside-the-design-tab.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-active-sidebar-rows-use-soft-highlights.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-agents-can-now-open-screen-overview-focus-screens-and-add.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-canvas-selection-no-longer-flashes-broken-prototype-html-whe.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-command-menu-selections-are-clearer-in-dark-mode.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-agents-now-edit-broad-copy-changes-more-reliably.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-editor-extensions-now-run-inline-beside-the-artboard.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-mode-top-chrome-now-groups-collaborators-preview-shar.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-element-selection-now-stays-on-the-intended-layer-after-sele.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-full-view-controls-now-sit-above-frames-inst.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-tools-can-draw-shapes-create-screens-and-kee.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-sidebars-use-darker-chrome-and-chat-warns-immediately.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-pen-tool-now-creates-anchor-based-bezier-vectors-with-ha.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-visual-edit-can-open-localhost-routes-as-url-backed-screens.md +6 -0
- package/corpus/templates/design/package.json +1 -0
- package/corpus/templates/design/server/db/schema.ts +26 -0
- package/corpus/templates/design/server/handlers/import-figma-system.ts +38 -85
- package/corpus/templates/design/server/lib/design-snapshot.ts +9 -1
- package/corpus/templates/design/server/plugins/agent-chat.ts +3 -0
- package/corpus/templates/design/shared/api.ts +27 -0
- package/corpus/templates/design/shared/canvas-frames.ts +103 -0
- package/corpus/templates/design/shared/canvas-math.ts +1058 -0
- package/corpus/templates/design/shared/code-layer.ts +2412 -0
- package/corpus/templates/design/shared/color-utils.ts +180 -0
- package/corpus/templates/design/shared/generation-session.ts +61 -0
- package/corpus/templates/design/shared/html-content.ts +21 -0
- package/corpus/templates/design/shared/pen-path.ts +207 -0
- package/corpus/templates/design/shared/shader-presets.ts +782 -0
- package/corpus/templates/design/shared/shader-safety.ts +137 -0
- package/corpus/templates/design/shared/source-mode.ts +237 -0
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +149 -6
- package/corpus/templates/forms/app/i18n/ar-SA.ts +2 -0
- package/corpus/templates/forms/app/i18n/de-DE.ts +2 -0
- package/corpus/templates/forms/app/i18n/en-US.ts +2 -0
- package/corpus/templates/forms/app/i18n/es-ES.ts +2 -0
- package/corpus/templates/forms/app/i18n/fr-FR.ts +2 -0
- package/corpus/templates/forms/app/i18n/hi-IN.ts +2 -0
- package/corpus/templates/forms/app/i18n/ja-JP.ts +2 -0
- package/corpus/templates/forms/app/i18n/ko-KR.ts +2 -0
- package/corpus/templates/forms/app/i18n/pt-BR.ts +2 -0
- package/corpus/templates/forms/app/i18n/zh-CN.ts +2 -0
- package/corpus/templates/forms/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/forms/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +2 -2
- package/corpus/templates/macros/changelog/2026-06-28-left-sidebar-footer-controls-use-less-divider-chrome.md +6 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +408 -247
- package/corpus/templates/mail/app/i18n/ar-SA.ts +4 -0
- package/corpus/templates/mail/app/i18n/de-DE.ts +4 -0
- package/corpus/templates/mail/app/i18n/en-US.ts +4 -0
- package/corpus/templates/mail/app/i18n/es-ES.ts +4 -0
- package/corpus/templates/mail/app/i18n/fr-FR.ts +4 -0
- package/corpus/templates/mail/app/i18n/hi-IN.ts +4 -0
- package/corpus/templates/mail/app/i18n/ja-JP.ts +4 -0
- package/corpus/templates/mail/app/i18n/ko-KR.ts +4 -0
- package/corpus/templates/mail/app/i18n/pt-BR.ts +4 -0
- package/corpus/templates/mail/app/i18n/zh-CN.ts +4 -0
- package/corpus/templates/mail/app/i18n/zh-TW.ts +4 -0
- package/corpus/templates/mail/app/lib/utils.ts +2 -2
- package/corpus/templates/mail/changelog/2026-06-28-pinned-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +6 -8
- package/corpus/templates/plan/app/components/plan/wireframe/Wireframe.tsx +1 -1
- package/corpus/templates/plan/app/global.css +61 -78
- package/corpus/templates/plan/app/pages/PlansPage.tsx +8 -0
- package/corpus/templates/plan/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/plan/changelog/2026-06-28-plans-use-the-shared-neutral-light-and-dark-theme.md +6 -0
- package/corpus/templates/plan/changelog/2026-06-28-sending-open-feedback-from-a-plan-now-opens-the-inline-plan-.md +6 -0
- package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +9 -10
- package/corpus/templates/slides/AGENTS.md +3 -2
- package/corpus/templates/slides/actions/import-file.ts +26 -17
- package/corpus/templates/slides/actions/index-design-system-with-builder.ts +259 -0
- package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +35 -167
- package/corpus/templates/slides/app/components/design-system/fig-import-response.ts +9 -13
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +5 -5
- package/corpus/templates/slides/app/context/DeckContext.tsx +1 -1
- package/corpus/templates/slides/app/i18n/ar-SA.ts +9 -37
- package/corpus/templates/slides/app/i18n/de-DE.ts +10 -25
- package/corpus/templates/slides/app/i18n/en-US.ts +9 -26
- package/corpus/templates/slides/app/i18n/es-ES.ts +10 -28
- package/corpus/templates/slides/app/i18n/fr-FR.ts +10 -28
- package/corpus/templates/slides/app/i18n/hi-IN.ts +9 -26
- package/corpus/templates/slides/app/i18n/ja-JP.ts +10 -22
- package/corpus/templates/slides/app/i18n/ko-KR.ts +9 -23
- package/corpus/templates/slides/app/i18n/pt-BR.ts +10 -28
- package/corpus/templates/slides/app/i18n/zh-CN.ts +9 -22
- package/corpus/templates/slides/app/i18n/zh-TW.ts +9 -22
- package/corpus/templates/slides/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/slides/server/handlers/import-figma-system.ts +44 -12
- package/corpus/templates/slides/server/lib/chat-attachments.ts +1 -1
- package/corpus/templates/videos/app/components/NewCompositionPopover.tsx +1 -1
- package/corpus/templates/videos/app/components/Sidebar.tsx +2 -2
- package/corpus/templates/videos/app/components/layout/Layout.tsx +29 -2
- package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +113 -30
- package/corpus/templates/videos/app/i18n/ar-SA.ts +2 -0
- package/corpus/templates/videos/app/i18n/de-DE.ts +2 -0
- package/corpus/templates/videos/app/i18n/en-US.ts +2 -0
- package/corpus/templates/videos/app/i18n/es-ES.ts +2 -0
- package/corpus/templates/videos/app/i18n/fr-FR.ts +2 -0
- package/corpus/templates/videos/app/i18n/hi-IN.ts +2 -0
- package/corpus/templates/videos/app/i18n/ja-JP.ts +2 -0
- package/corpus/templates/videos/app/i18n/ko-KR.ts +2 -0
- package/corpus/templates/videos/app/i18n/pt-BR.ts +2 -0
- package/corpus/templates/videos/app/i18n/zh-CN.ts +2 -0
- package/corpus/templates/videos/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/videos/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/dist/agent/engine/index.d.ts +1 -1
- package/dist/agent/engine/index.d.ts.map +1 -1
- package/dist/agent/engine/index.js +1 -1
- package/dist/agent/engine/index.js.map +1 -1
- package/dist/agent/engine/registry.d.ts +9 -0
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +37 -0
- 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 +4 -3
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/application-state/handlers.js +1 -1
- package/dist/application-state/handlers.js.map +1 -1
- package/dist/brand-kit/index.d.ts +1 -1
- package/dist/brand-kit/index.js +1 -1
- package/dist/brand-kit/index.js.map +1 -1
- package/dist/cli/design-connect.d.ts +52 -0
- package/dist/cli/design-connect.d.ts.map +1 -0
- package/dist/cli/design-connect.js +409 -0
- package/dist/cli/design-connect.js.map +1 -0
- package/dist/cli/index.js +15 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/skills.d.ts +3 -0
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +139 -3
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AgentPanel.js +1 -1
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +38 -8
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +1 -1
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat.d.ts +6 -0
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +17 -3
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/blocks/library/MermaidBlock.js +1 -1
- package/dist/client/blocks/library/MermaidBlock.js.map +1 -1
- package/dist/client/blocks/library/diagram.js +1 -1
- package/dist/client/blocks/library/diagram.js.map +1 -1
- package/dist/client/blocks/library/wireframe.js +1 -1
- package/dist/client/blocks/library/wireframe.js.map +1 -1
- package/dist/client/chat/message-components.js +1 -1
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat-model-groups.d.ts.map +1 -1
- package/dist/client/chat-model-groups.js +1 -2
- package/dist/client/chat-model-groups.js.map +1 -1
- package/dist/client/components/LiveCursorOverlay.d.ts +1 -2
- package/dist/client/components/LiveCursorOverlay.d.ts.map +1 -1
- package/dist/client/components/LiveCursorOverlay.js +19 -40
- package/dist/client/components/LiveCursorOverlay.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +3 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +86 -24
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/useVoiceDictation.d.ts +9 -0
- package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
- package/dist/client/composer/useVoiceDictation.js +154 -32
- package/dist/client/composer/useVoiceDictation.js.map +1 -1
- package/dist/client/extensions/portable-extension.d.ts +1 -1
- package/dist/client/extensions/portable-extension.d.ts.map +1 -1
- package/dist/client/extensions/portable-extension.js.map +1 -1
- package/dist/client/frame-protocol.d.ts +17 -2
- package/dist/client/frame-protocol.d.ts.map +1 -1
- package/dist/client/frame-protocol.js.map +1 -1
- package/dist/client/rich-markdown-editor/RegistryBlockNode.js +2 -2
- package/dist/client/rich-markdown-editor/RegistryBlockNode.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +2 -0
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +7 -6
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/use-agent-engine-configured.d.ts +5 -0
- package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
- package/dist/client/use-agent-engine-configured.js +51 -25
- package/dist/client/use-agent-engine-configured.js.map +1 -1
- package/dist/code-agents/transcript-normalizer.js +1 -1
- package/dist/code-agents/transcript-normalizer.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/extensions/path.d.ts +1 -1
- package/dist/extensions/path.d.ts.map +1 -1
- package/dist/extensions/path.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +2 -2
- package/dist/integrations/a2a-continuation-processor.js +1 -1
- package/dist/integrations/a2a-continuation-processor.js.map +1 -1
- package/dist/mcp/build-server.d.ts +1 -1
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts +5 -5
- package/dist/org/handlers.js +5 -5
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/plugin.js +2 -2
- package/dist/org/plugin.js.map +1 -1
- package/dist/scripts/call-agent.js +1 -1
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/scripts/db/safety.js +1 -1
- package/dist/scripts/db/safety.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +3 -0
- package/dist/server/auth.js.map +1 -1
- package/dist/server/builder-design-systems.d.ts +28 -0
- package/dist/server/builder-design-systems.d.ts.map +1 -0
- package/dist/server/builder-design-systems.js +217 -0
- package/dist/server/builder-design-systems.js.map +1 -0
- package/dist/server/core-routes-plugin.d.ts +1 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +20 -3
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts.map +1 -1
- package/dist/server/transcribe-voice.js +40 -24
- package/dist/server/transcribe-voice.js.map +1 -1
- package/dist/shared/mcp-embed-headers.d.ts +1 -0
- package/dist/shared/mcp-embed-headers.d.ts.map +1 -1
- package/dist/shared/mcp-embed-headers.js +20 -1
- package/dist/shared/mcp-embed-headers.js.map +1 -1
- package/dist/styles/agent-native.css +60 -4
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
- package/dist/usage/store.js +2 -2
- package/dist/usage/store.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +2 -0
- package/dist/vite/client.js.map +1 -1
- package/dist/voice/index.d.ts +5 -0
- package/dist/voice/index.d.ts.map +1 -0
- package/dist/voice/index.js +4 -0
- package/dist/voice/index.js.map +1 -0
- package/dist/voice/voice-cleanup-prompt.d.ts +6 -0
- package/dist/voice/voice-cleanup-prompt.d.ts.map +1 -0
- package/dist/voice/voice-cleanup-prompt.js +26 -0
- package/dist/voice/voice-cleanup-prompt.js.map +1 -0
- package/dist/voice/voice-context.d.ts +25 -0
- package/dist/voice/voice-context.d.ts.map +1 -0
- package/dist/voice/voice-context.js +156 -0
- package/dist/voice/voice-context.js.map +1 -0
- package/dist/voice/voice-replacements.d.ts +4 -0
- package/dist/voice/voice-replacements.d.ts.map +1 -0
- package/dist/voice/voice-replacements.js +52 -0
- package/dist/voice/voice-replacements.js.map +1 -0
- package/docs/content/locales/ar-SA/skills-guide.mdx +5 -0
- package/docs/content/locales/ar-SA/template-design.mdx +55 -1
- package/docs/content/locales/de-DE/skills-guide.mdx +5 -0
- package/docs/content/locales/de-DE/template-design.mdx +66 -1
- package/docs/content/locales/es-ES/skills-guide.mdx +5 -0
- package/docs/content/locales/es-ES/template-design.mdx +65 -1
- package/docs/content/locales/fr-FR/skills-guide.mdx +5 -0
- package/docs/content/locales/fr-FR/template-design.mdx +64 -1
- package/docs/content/locales/hi-IN/skills-guide.mdx +5 -0
- package/docs/content/locales/hi-IN/template-design.mdx +59 -1
- package/docs/content/locales/ja-JP/skills-guide.mdx +5 -0
- package/docs/content/locales/ja-JP/template-design.mdx +62 -1
- package/docs/content/locales/ko-KR/skills-guide.mdx +5 -0
- package/docs/content/locales/ko-KR/template-design.mdx +58 -1
- package/docs/content/locales/pt-BR/skills-guide.mdx +5 -0
- package/docs/content/locales/pt-BR/template-design.mdx +62 -1
- package/docs/content/locales/zh-CN/skills-guide.mdx +5 -0
- package/docs/content/locales/zh-CN/template-design.mdx +50 -1
- package/docs/content/locales/zh-TW/skills-guide.mdx +5 -0
- package/docs/content/locales/zh-TW/template-design.mdx +52 -1
- package/docs/content/skills-guide.mdx +5 -0
- package/docs/content/template-design.mdx +59 -1
- package/package.json +2 -1
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
- package/corpus/templates/design/actions/import-figma-file.ts +0 -166
- package/corpus/templates/design/app/components/design/DesignToolbar.tsx +0 -339
- package/corpus/templates/design/app/components/design/PresentMode.tsx +0 -68
- package/corpus/templates/design/app/components/design/ViewportTabs.tsx +0 -149
- package/corpus/templates/design/app/components/design/ZoomControls.tsx +0 -157
- package/corpus/templates/slides/server/lib/fig-design-system.ts +0 -110
|
@@ -47,7 +47,7 @@ export interface AgentNativeExtensionStorageOptions {
|
|
|
47
47
|
export interface AgentNativeExtensionStorageContext {
|
|
48
48
|
extensionId: string;
|
|
49
49
|
slotId?: string;
|
|
50
|
-
scope?: Exclude<AgentNativeExtensionStorageScope, "all"
|
|
50
|
+
scope?: Exclude<AgentNativeExtensionStorageScope, "all">;
|
|
51
51
|
userId?: string;
|
|
52
52
|
organizationId?: string;
|
|
53
53
|
[key: string]: unknown;
|
|
@@ -84,6 +84,10 @@ export interface PresentationModeMessage {
|
|
|
84
84
|
data: { active: boolean };
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
+
export interface DesignCloseMessage {
|
|
88
|
+
type: "design:close";
|
|
89
|
+
}
|
|
90
|
+
|
|
87
91
|
export type AppToFrameMessage =
|
|
88
92
|
| AppReadyMessage
|
|
89
93
|
| SubmitChatMessage
|
|
@@ -97,7 +101,8 @@ export type AppToFrameMessage =
|
|
|
97
101
|
| EnterStyleEditingMessage
|
|
98
102
|
| EnterTextEditingMessage
|
|
99
103
|
| ExitSelectionModeMessage
|
|
100
|
-
| PresentationModeMessage
|
|
104
|
+
| PresentationModeMessage
|
|
105
|
+
| DesignCloseMessage;
|
|
101
106
|
|
|
102
107
|
// ---------------------------------------------------------------------------
|
|
103
108
|
// Messages FROM frame TO app
|
|
@@ -138,13 +143,23 @@ export interface SidebarModeMessage {
|
|
|
138
143
|
};
|
|
139
144
|
}
|
|
140
145
|
|
|
146
|
+
export interface DesignInitMessage {
|
|
147
|
+
type: "design:init";
|
|
148
|
+
data: {
|
|
149
|
+
previewUrl: string;
|
|
150
|
+
themeVars?: Record<string, string>;
|
|
151
|
+
context?: { projectId?: string; branchId?: string; orgId?: string };
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
141
155
|
export type FrameToAppMessage =
|
|
142
156
|
| FrameOriginMessage
|
|
143
157
|
| ChatRunningMessage
|
|
144
158
|
| UserInfoMessage
|
|
145
159
|
| CodeCompleteMessage
|
|
146
160
|
| SidebarModeMessage
|
|
147
|
-
| PresentationModeMessage
|
|
161
|
+
| PresentationModeMessage
|
|
162
|
+
| DesignInitMessage;
|
|
148
163
|
|
|
149
164
|
// ---------------------------------------------------------------------------
|
|
150
165
|
// All message types
|
|
@@ -344,7 +344,7 @@ export function RegistryBlockNodeView(props: NodeViewProps) {
|
|
|
344
344
|
data-plan-interactive
|
|
345
345
|
aria-label={`Edit ${spec.label}`}
|
|
346
346
|
onClick={() => setPanelOpen(true)}
|
|
347
|
-
className="an-block-edit-trigger flex size-7 items-center justify-center rounded-md border border-border bg-background
|
|
347
|
+
className="an-block-edit-trigger flex size-7 items-center justify-center rounded-md border border-border bg-background text-muted-foreground opacity-0 shadow-sm transition-opacity hover:bg-muted hover:text-foreground focus-visible:opacity-100 data-[visible=true]:opacity-100"
|
|
348
348
|
data-visible={panelOpen || shellHovered}
|
|
349
349
|
>
|
|
350
350
|
<IconPencil className="size-4" />
|
|
@@ -485,7 +485,7 @@ export function LegacyJsonEditSurface({
|
|
|
485
485
|
data-plan-interactive
|
|
486
486
|
aria-label={`Edit ${block.title ?? "block"}`}
|
|
487
487
|
onClick={() => onOpenChange(true)}
|
|
488
|
-
className="an-block-edit-trigger flex size-7 items-center justify-center rounded-md border border-border bg-background
|
|
488
|
+
className="an-block-edit-trigger flex size-7 items-center justify-center rounded-md border border-border bg-background text-muted-foreground opacity-0 shadow-sm transition-opacity hover:bg-muted hover:text-foreground focus-visible:opacity-100 data-[visible=true]:opacity-100"
|
|
489
489
|
data-visible={selected || open}
|
|
490
490
|
>
|
|
491
491
|
<IconPencil className="size-4" />
|
|
@@ -47,6 +47,8 @@ export interface ShareButtonProps {
|
|
|
47
47
|
variant?: "compact" | "label";
|
|
48
48
|
/** Optional trigger style. Defaults to the Google-Docs-style "Share" label. */
|
|
49
49
|
trigger?: "label" | "icon";
|
|
50
|
+
/** Hide the visibility/share glyph in the label trigger. */
|
|
51
|
+
hideTriggerIcon?: boolean;
|
|
50
52
|
/** Optional className applied to the trigger button. */
|
|
51
53
|
triggerClassName?: string;
|
|
52
54
|
/** Notified when the share popover opens or closes. Hosts that render the
|
|
@@ -154,7 +156,7 @@ const BUTTON_GHOST_ICON = cn(
|
|
|
154
156
|
"h-7 w-7 p-0 text-muted-foreground hover:bg-accent hover:text-accent-foreground",
|
|
155
157
|
);
|
|
156
158
|
const SHARE_POPOVER_SURFACE =
|
|
157
|
-
"border-
|
|
159
|
+
"border border-border bg-popover text-popover-foreground";
|
|
158
160
|
const MEMBER_SUGGESTION_LIMIT = 25;
|
|
159
161
|
const MEMBER_SEARCH_DEBOUNCE_MS = 140;
|
|
160
162
|
|
|
@@ -311,6 +313,7 @@ export function ShareButton(props: ShareButtonProps) {
|
|
|
311
313
|
: currentVisibility === "org"
|
|
312
314
|
? IconBuilding
|
|
313
315
|
: IconLock;
|
|
316
|
+
const showTriggerIcon = iconOnly || !props.hideTriggerIcon;
|
|
314
317
|
const TriggerIcon = iconOnly ? IconShare3 : VisibilityIcon;
|
|
315
318
|
|
|
316
319
|
return (
|
|
@@ -324,14 +327,16 @@ export function ShareButton(props: ShareButtonProps) {
|
|
|
324
327
|
)}
|
|
325
328
|
aria-label={iconOnly ? "Share" : undefined}
|
|
326
329
|
>
|
|
327
|
-
{
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
330
|
+
{showTriggerIcon ? (
|
|
331
|
+
loaded || iconOnly ? (
|
|
332
|
+
<TriggerIcon size={16} strokeWidth={1.75} />
|
|
333
|
+
) : (
|
|
334
|
+
<span
|
|
335
|
+
aria-hidden
|
|
336
|
+
className="inline-block h-4 w-4 rounded-sm bg-muted animate-pulse"
|
|
337
|
+
/>
|
|
338
|
+
)
|
|
339
|
+
) : null}
|
|
335
340
|
{!iconOnly && <span>Share</span>}
|
|
336
341
|
</button>
|
|
337
342
|
</PopoverTrigger>
|
|
@@ -1029,7 +1034,7 @@ function AdvancedAccessPopover({
|
|
|
1029
1034
|
disabled={!canManage || control.pending}
|
|
1030
1035
|
onClick={onToggle}
|
|
1031
1036
|
className={cn(
|
|
1032
|
-
"flex w-full items-start gap-3 rounded-md border border-border/70 bg-
|
|
1037
|
+
"flex w-full items-start gap-3 rounded-md border border-border/70 bg-card px-3 py-2.5 text-start transition-colors hover:bg-accent/45 disabled:cursor-not-allowed disabled:opacity-60",
|
|
1033
1038
|
control.checked && "border-border bg-accent/35 text-foreground",
|
|
1034
1039
|
)}
|
|
1035
1040
|
>
|
|
@@ -1042,7 +1047,7 @@ function AdvancedAccessPopover({
|
|
|
1042
1047
|
>
|
|
1043
1048
|
<span
|
|
1044
1049
|
className={cn(
|
|
1045
|
-
"ml-0.5 size-4 rounded-full bg-
|
|
1050
|
+
"ml-0.5 size-4 rounded-full bg-popover shadow-sm transition-transform",
|
|
1046
1051
|
control.checked && "translate-x-4",
|
|
1047
1052
|
)}
|
|
1048
1053
|
/>
|
|
@@ -1210,7 +1215,7 @@ function MemberAutocomplete({
|
|
|
1210
1215
|
}}
|
|
1211
1216
|
onKeyDown={handleKeyDown}
|
|
1212
1217
|
autoComplete="off"
|
|
1213
|
-
className="h-9 w-full min-w-0 rounded-md border border-input bg-
|
|
1218
|
+
className="h-9 w-full min-w-0 rounded-md border border-input bg-card ps-8 pe-8 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background"
|
|
1214
1219
|
/>
|
|
1215
1220
|
{search.isLoading ? (
|
|
1216
1221
|
<IconLoader2
|
|
@@ -1355,13 +1360,13 @@ function CopyLinkField({
|
|
|
1355
1360
|
<input
|
|
1356
1361
|
readOnly
|
|
1357
1362
|
value={value}
|
|
1358
|
-
className="h-9 min-w-0 flex-1 rounded-md border border-input bg-
|
|
1363
|
+
className="h-9 min-w-0 flex-1 rounded-md border border-input bg-card px-3 text-sm text-muted-foreground outline-none"
|
|
1359
1364
|
onFocus={(event) => event.currentTarget.select()}
|
|
1360
1365
|
/>
|
|
1361
1366
|
<button
|
|
1362
1367
|
type="button"
|
|
1363
1368
|
onClick={handleCopy}
|
|
1364
|
-
className="inline-flex h-9 shrink-0 items-center gap-2 rounded-md border border-input bg-
|
|
1369
|
+
className="inline-flex h-9 shrink-0 items-center gap-2 rounded-md border border-input bg-card px-3 text-sm font-medium text-foreground hover:bg-accent"
|
|
1365
1370
|
>
|
|
1366
1371
|
{copied ? <IconCheck size={15} /> : <IconCopy size={15} />}
|
|
1367
1372
|
{copied ? "Copied" : "Copy"}
|
|
@@ -1439,7 +1444,7 @@ function RoleSelect(props: {
|
|
|
1439
1444
|
)
|
|
1440
1445
|
: cn(
|
|
1441
1446
|
BUTTON_BASE,
|
|
1442
|
-
"h-9 px-3 border border-input bg-
|
|
1447
|
+
"h-9 px-3 border border-input bg-card hover:bg-accent hover:text-accent-foreground",
|
|
1443
1448
|
)
|
|
1444
1449
|
}
|
|
1445
1450
|
aria-label="Role"
|
|
@@ -14,6 +14,83 @@ export interface UseAgentEngineConfiguredResult {
|
|
|
14
14
|
state: AgentEngineConfiguredState;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
export interface FetchAgentEngineConfiguredStateOptions {
|
|
18
|
+
missingFallback?: boolean;
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const DEFAULT_STATUS_CHECK_TIMEOUT_MS = 2500;
|
|
23
|
+
|
|
24
|
+
async function fetchStatusJson(
|
|
25
|
+
path: string,
|
|
26
|
+
timeoutMs: number,
|
|
27
|
+
): Promise<unknown | null> {
|
|
28
|
+
const controller =
|
|
29
|
+
typeof AbortController !== "undefined" ? new AbortController() : null;
|
|
30
|
+
let timeoutId: ReturnType<typeof setTimeout> | undefined;
|
|
31
|
+
const timeout = new Promise<null>((resolve) => {
|
|
32
|
+
timeoutId = setTimeout(() => {
|
|
33
|
+
controller?.abort();
|
|
34
|
+
resolve(null);
|
|
35
|
+
}, timeoutMs);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const request = fetch(
|
|
39
|
+
agentNativePath(path),
|
|
40
|
+
controller ? { signal: controller.signal } : undefined,
|
|
41
|
+
)
|
|
42
|
+
.then((r) => (r.ok ? r.json() : null))
|
|
43
|
+
.catch(() => null)
|
|
44
|
+
.finally(() => {
|
|
45
|
+
if (timeoutId !== undefined) clearTimeout(timeoutId);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return Promise.race([request, timeout]);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function hasConfiguredFlag(value: unknown): value is { configured: boolean } {
|
|
52
|
+
return (
|
|
53
|
+
typeof value === "object" &&
|
|
54
|
+
value !== null &&
|
|
55
|
+
"configured" in value &&
|
|
56
|
+
typeof (value as { configured?: unknown }).configured === "boolean"
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export async function fetchAgentEngineConfiguredState(
|
|
61
|
+
enabled = true,
|
|
62
|
+
options?: FetchAgentEngineConfiguredStateOptions,
|
|
63
|
+
): Promise<AgentEngineConfiguredState> {
|
|
64
|
+
if (!enabled) return "configured";
|
|
65
|
+
|
|
66
|
+
const timeoutMs =
|
|
67
|
+
typeof options?.timeoutMs === "number" && options.timeoutMs > 0
|
|
68
|
+
? options.timeoutMs
|
|
69
|
+
: DEFAULT_STATUS_CHECK_TIMEOUT_MS;
|
|
70
|
+
const [envKeys, builderStatus, engineStatus] = await Promise.all([
|
|
71
|
+
fetchStatusJson("/_agent-native/env-status", timeoutMs),
|
|
72
|
+
fetchStatusJson("/_agent-native/builder/status", timeoutMs),
|
|
73
|
+
fetchStatusJson("/_agent-native/agent-engine/status", timeoutMs),
|
|
74
|
+
]);
|
|
75
|
+
|
|
76
|
+
// All three failed — likely a flaky network; keep the caller in unknown
|
|
77
|
+
// unless this check is reacting to an explicit missing-key stream event.
|
|
78
|
+
if (envKeys == null && builderStatus == null && engineStatus == null) {
|
|
79
|
+
return options?.missingFallback ? "missing" : "unknown";
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const keys = (envKeys ?? []) as Array<{
|
|
83
|
+
key: string;
|
|
84
|
+
configured: boolean;
|
|
85
|
+
}>;
|
|
86
|
+
const llmKeys = keys.filter((k) => PROVIDER_ENV_VAR_SET.has(k.key));
|
|
87
|
+
const anyConfigured =
|
|
88
|
+
llmKeys.some((k) => k.configured) ||
|
|
89
|
+
(hasConfiguredFlag(builderStatus) && builderStatus.configured) ||
|
|
90
|
+
(hasConfiguredFlag(engineStatus) && engineStatus.configured);
|
|
91
|
+
return anyConfigured ? "configured" : "missing";
|
|
92
|
+
}
|
|
93
|
+
|
|
17
94
|
/**
|
|
18
95
|
* Shared "can the agent run?" gate — the single source of truth for the sidebar
|
|
19
96
|
* composer and app prompt boxes. Checks the env-key / Builder / BYOK status
|
|
@@ -29,37 +106,12 @@ export function useAgentEngineConfigured(
|
|
|
29
106
|
useEffect(() => {
|
|
30
107
|
let cancelled = false;
|
|
31
108
|
const check = async (options?: { missingFallback?: boolean }) => {
|
|
32
|
-
|
|
33
|
-
setState("configured");
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
const [envKeys, builderStatus, engineStatus] = await Promise.all([
|
|
37
|
-
fetch(agentNativePath("/_agent-native/env-status"))
|
|
38
|
-
.then((r) => (r.ok ? r.json() : null))
|
|
39
|
-
.catch(() => null),
|
|
40
|
-
fetch(agentNativePath("/_agent-native/builder/status"))
|
|
41
|
-
.then((r) => (r.ok ? r.json() : null))
|
|
42
|
-
.catch(() => null),
|
|
43
|
-
fetch(agentNativePath("/_agent-native/agent-engine/status"))
|
|
44
|
-
.then((r) => (r.ok ? r.json() : null))
|
|
45
|
-
.catch(() => null),
|
|
46
|
-
]);
|
|
109
|
+
const nextState = await fetchAgentEngineConfiguredState(enabled, options);
|
|
47
110
|
if (cancelled) return;
|
|
48
|
-
|
|
49
|
-
if (envKeys == null && builderStatus == null && engineStatus == null) {
|
|
50
|
-
if (options?.missingFallback) setState("missing");
|
|
111
|
+
if (nextState === "unknown") {
|
|
51
112
|
return;
|
|
52
113
|
}
|
|
53
|
-
|
|
54
|
-
key: string;
|
|
55
|
-
configured: boolean;
|
|
56
|
-
}>;
|
|
57
|
-
const llmKeys = keys.filter((k) => PROVIDER_ENV_VAR_SET.has(k.key));
|
|
58
|
-
const anyConfigured =
|
|
59
|
-
llmKeys.some((k) => k.configured) ||
|
|
60
|
-
builderStatus?.configured === true ||
|
|
61
|
-
engineStatus?.configured === true;
|
|
62
|
-
setState(anyConfigured ? "configured" : "missing");
|
|
114
|
+
setState(nextState);
|
|
63
115
|
};
|
|
64
116
|
const onConfiguredChanged = () => {
|
|
65
117
|
void check();
|
|
@@ -576,7 +576,7 @@ function joinAssistantChunks(previous: string, next: string): string {
|
|
|
576
576
|
if (!next) return previous;
|
|
577
577
|
if (/\s$/.test(previous) || /^\s/.test(next)) return `${previous}${next}`;
|
|
578
578
|
if (/^[.,!?;:)\]}'"`]/.test(next)) return `${previous}${next}`;
|
|
579
|
-
if (/[(
|
|
579
|
+
if (/[([{'"`]$/.test(previous)) return `${previous}${next}`;
|
|
580
580
|
return `${previous} ${next}`;
|
|
581
581
|
}
|
|
582
582
|
|
|
@@ -19,10 +19,7 @@ export function extensionNameToSlug(
|
|
|
19
19
|
return sliced || "extension";
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export function extensionPath(
|
|
23
|
-
id: string,
|
|
24
|
-
name?: string | null | undefined,
|
|
25
|
-
): string {
|
|
22
|
+
export function extensionPath(id: string, name?: string | null): string {
|
|
26
23
|
const encodedId = encodeURIComponent(id);
|
|
27
24
|
if (name === undefined) return `/extensions/${encodedId}`;
|
|
28
25
|
return `/extensions/${encodedId}/${extensionNameToSlug(name)}`;
|
|
@@ -528,7 +528,7 @@ function expandRelativeUrls(text: string, agentUrl: string): string {
|
|
|
528
528
|
if (!text || !agentUrl) return text;
|
|
529
529
|
const base = publicAgentBaseUrl(agentUrl);
|
|
530
530
|
return text.replace(
|
|
531
|
-
/(^|[\s(
|
|
531
|
+
/(^|[\s([<"'`])(\/[a-z0-9_-][a-z0-9_/?&=%#.,:-]*)/gi,
|
|
532
532
|
(_match, lead, path) => `${lead}${base}${path}`,
|
|
533
533
|
);
|
|
534
534
|
}
|
|
@@ -1889,7 +1889,7 @@ async function isConnectTokenAllowed(
|
|
|
1889
1889
|
*/
|
|
1890
1890
|
export async function verifyAuth(
|
|
1891
1891
|
authHeader: string | undefined,
|
|
1892
|
-
ownerEmailHeader?: string
|
|
1892
|
+
ownerEmailHeader?: string,
|
|
1893
1893
|
options: { allowDevOpen?: boolean; resourceUrl?: string | string[] } = {},
|
|
1894
1894
|
): Promise<{
|
|
1895
1895
|
authed: boolean;
|
|
@@ -17,8 +17,8 @@ function extractInvitationId(event: H3Event): string | undefined {
|
|
|
17
17
|
if (fromRouter) return fromRouter;
|
|
18
18
|
const path = getRequestURL(event).pathname;
|
|
19
19
|
const match =
|
|
20
|
-
path.match(/^\/([
|
|
21
|
-
path.match(/\/org\/invitations\/([
|
|
20
|
+
path.match(/^\/([^/]+)\/accept\/?$/) ??
|
|
21
|
+
path.match(/\/org\/invitations\/([^/]+)\/accept\/?$/);
|
|
22
22
|
return match?.[1] ? decodeURIComponent(match[1]) : undefined;
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -28,9 +28,9 @@ function extractMemberEmail(event: H3Event): string | undefined {
|
|
|
28
28
|
if (fromRouter) return fromRouter;
|
|
29
29
|
const path = getRequestURL(event).pathname;
|
|
30
30
|
const match =
|
|
31
|
-
path.match(/^\/([
|
|
32
|
-
path.match(/^\/([
|
|
33
|
-
path.match(/\/org\/members\/([
|
|
31
|
+
path.match(/^\/([^/]+)\/role\/?$/) ??
|
|
32
|
+
path.match(/^\/([^/]+)\/?$/) ??
|
|
33
|
+
path.match(/\/org\/members\/([^/]+)(?:\/role)?\/?$/);
|
|
34
34
|
return match?.[1] ? decodeURIComponent(match[1]) : undefined;
|
|
35
35
|
}
|
|
36
36
|
const nanoid = (): string =>
|
|
@@ -100,7 +100,7 @@ export function createOrgPlugin(): NitroPluginDef {
|
|
|
100
100
|
return listMembersHandler(event);
|
|
101
101
|
}
|
|
102
102
|
// Tail is /:email/role
|
|
103
|
-
if (/^\/[
|
|
103
|
+
if (/^\/[^/]+\/role\/?$/.test(tail)) {
|
|
104
104
|
if (method !== "PUT") {
|
|
105
105
|
setResponseStatus(event, 405);
|
|
106
106
|
return { error: "Method not allowed" };
|
|
@@ -129,7 +129,7 @@ export function createOrgPlugin(): NitroPluginDef {
|
|
|
129
129
|
return { error: "Method not allowed" };
|
|
130
130
|
}
|
|
131
131
|
// Tail is /:id/accept
|
|
132
|
-
if (/^\/[
|
|
132
|
+
if (/^\/[^/]+\/accept\/?$/.test(tail)) {
|
|
133
133
|
if (method !== "POST") {
|
|
134
134
|
setResponseStatus(event, 405);
|
|
135
135
|
return { error: "Method not allowed" };
|
|
@@ -434,7 +434,7 @@ export function expandRelativeUrls(text: string, agentUrl: string): string {
|
|
|
434
434
|
// Path must start at boundary (start, whitespace, or punctuation that isn't
|
|
435
435
|
// ':' — to avoid mangling `https://example.com/foo` or markdown link bodies).
|
|
436
436
|
return text.replace(
|
|
437
|
-
/(^|[\s(
|
|
437
|
+
/(^|[\s([<"'`])(\/[a-z0-9_-][a-z0-9_/?&=%#.,:-]*)/gi,
|
|
438
438
|
(_match, lead, path) => `${lead}${base}${path}`,
|
|
439
439
|
);
|
|
440
440
|
}
|
|
@@ -1855,6 +1855,9 @@ function createAuthGuardFn(): (
|
|
|
1855
1855
|
// the gate below 401s anonymous /_agent-native/* requests before any DB
|
|
1856
1856
|
// query, so the database would never get warmed.
|
|
1857
1857
|
if (p === "/_agent-native/health") return;
|
|
1858
|
+
if (getMethod(event) === "GET" && p.startsWith("/_agent-native/avatar/")) {
|
|
1859
|
+
return;
|
|
1860
|
+
}
|
|
1858
1861
|
if (isPublicPath(normalizedUrl, publicPaths)) return;
|
|
1859
1862
|
if (shouldBypassAuthForBuilderConnect(event, p)) return;
|
|
1860
1863
|
if (isPublicWorkspacePageRequest(event, p, config)) {
|