@agent-native/core 0.107.2 → 0.109.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/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +24 -0
- package/corpus/core/docs/content/actions.mdx +48 -0
- package/corpus/core/docs/content/locales/ar-SA/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/de-DE/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/es-ES/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/fr-FR/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/hi-IN/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/ja-JP/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/ko-KR/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/pt-BR/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/zh-CN/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/zh-TW/actions.mdx +38 -0
- package/corpus/core/package.json +5 -1
- package/corpus/core/src/a2a/client.ts +140 -17
- package/corpus/core/src/a2a/handlers.ts +60 -0
- package/corpus/core/src/a2a/index.ts +6 -1
- package/corpus/core/src/a2a/invoke.ts +68 -1
- package/corpus/core/src/a2a/server.ts +13 -1
- package/corpus/core/src/a2a/types.ts +16 -0
- package/corpus/core/src/a2a-claims.ts +52 -0
- package/corpus/core/src/action.ts +7 -2
- package/corpus/core/src/agent/production-agent.ts +10 -4
- package/corpus/core/src/audit/record.ts +6 -0
- package/corpus/core/src/client/AssistantChat.tsx +648 -603
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +31 -4
- package/corpus/core/src/client/agent-chat-adapter.ts +23 -37
- package/corpus/core/src/client/agent-sidebar-state.ts +4 -0
- package/corpus/core/src/client/analytics.ts +84 -0
- package/corpus/core/src/client/chat/message-components.tsx +94 -22
- package/corpus/core/src/client/chat/tool-call-display.tsx +170 -47
- package/corpus/core/src/client/chat/use-agent-chat-lifecycle-tracking.ts +74 -0
- package/corpus/core/src/client/chat-thread-url.ts +11 -0
- package/corpus/core/src/client/error-capture.ts +12 -0
- package/corpus/core/src/client/extensions/ExtensionSlot.tsx +37 -1
- package/corpus/core/src/client/feature-flags/FeatureFlagsPanel.tsx +519 -0
- package/corpus/core/src/client/feature-flags/helpers.ts +77 -0
- package/corpus/core/src/client/feature-flags/index.ts +13 -0
- package/corpus/core/src/client/feature-flags/types.ts +29 -0
- package/corpus/core/src/client/feature-flags/use-feature-flag.ts +26 -0
- package/corpus/core/src/client/index.ts +13 -0
- package/corpus/core/src/client/route-chunk-recovery.ts +20 -8
- package/corpus/core/src/client/session-replay.ts +31 -0
- package/corpus/core/src/extensions/actions.ts +2 -14
- package/corpus/core/src/extensions/routes.ts +1 -1
- package/corpus/core/src/extensions/store.ts +1 -1
- package/corpus/core/src/feature-flags/a2a-action-route.ts +56 -0
- package/corpus/core/src/feature-flags/actions/get-feature-flags.ts +24 -0
- package/corpus/core/src/feature-flags/actions/list-feature-flags.ts +69 -0
- package/corpus/core/src/feature-flags/actions/set-feature-flag.ts +89 -0
- package/corpus/core/src/feature-flags/index.ts +21 -0
- package/corpus/core/src/feature-flags/permissions.ts +53 -0
- package/corpus/core/src/feature-flags/plugin.ts +44 -0
- package/corpus/core/src/feature-flags/registry.ts +96 -0
- package/corpus/core/src/feature-flags/store.ts +176 -0
- package/corpus/core/src/index.ts +15 -0
- package/corpus/core/src/localization/default-messages.ts +50 -0
- package/corpus/core/src/mcp/build-server.ts +2 -2
- package/corpus/core/src/progress/actions.ts +4 -2
- package/corpus/core/src/provider-api/index.ts +205 -105
- package/corpus/core/src/scripts/call-agent.ts +137 -17
- package/corpus/core/src/server/action-discovery.ts +12 -0
- package/corpus/core/src/server/action-routes.ts +47 -5
- package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +40 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +31 -0
- package/corpus/core/src/server/index.ts +1 -0
- package/corpus/core/src/settings/org-settings.ts +13 -0
- package/corpus/core/src/settings/store.ts +57 -0
- package/corpus/core/src/styles/agent-conversation.css +7 -0
- package/corpus/core/src/templates/default/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/core/src/templates/default/AGENTS.md +1 -0
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +19 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +19 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +19 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +19 -0
- package/corpus/core/src/templates/headless/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +28 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
- package/corpus/core/src/templates/workspace-core/AGENTS.md +1 -1
- package/corpus/core/src/templates/workspace-root/AGENTS.md +1 -1
- package/corpus/core/src/vite/action-types-plugin.ts +12 -0
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +29 -10
- package/corpus/templates/analytics/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +54 -23
- package/corpus/templates/analytics/.builder/skills/apollo/SKILL.md +19 -41
- package/corpus/templates/analytics/.builder/skills/commonroom/SKILL.md +20 -35
- package/corpus/templates/analytics/.builder/skills/github/SKILL.md +23 -67
- package/corpus/templates/analytics/.builder/skills/pylon/SKILL.md +25 -43
- package/corpus/templates/analytics/AGENTS.md +37 -16
- package/corpus/templates/analytics/actions/account-deep-dive.ts +1 -0
- package/corpus/templates/analytics/actions/configure-gong-native-insights.ts +29 -0
- package/corpus/templates/analytics/actions/content-calendar-schema.ts +8 -4
- package/corpus/templates/analytics/actions/content-calendar.ts +12 -4
- package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +2 -1
- package/corpus/templates/analytics/actions/gong-calls.ts +113 -22
- package/corpus/templates/analytics/actions/gong-native-insights.ts +166 -0
- package/corpus/templates/analytics/actions/hubspot-deals.ts +190 -46
- package/corpus/templates/analytics/actions/list-workspace-feature-flags.ts +15 -0
- package/corpus/templates/analytics/actions/navigate.ts +2 -2
- package/corpus/templates/analytics/actions/pylon-issues.ts +123 -0
- package/corpus/templates/analytics/actions/set-workspace-feature-flag.ts +45 -0
- package/corpus/templates/analytics/actions/slack-messages.ts +179 -27
- package/corpus/templates/analytics/actions/view-screen.ts +13 -0
- package/corpus/templates/analytics/app/components/agents/FeatureFlagsFleetPanel.tsx +243 -0
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +48 -152
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +11 -3
- package/corpus/templates/analytics/app/components/ui/chart.tsx +1 -1
- package/corpus/templates/analytics/app/hooks/use-chart-tooltip-flip.ts +21 -6
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +3 -1
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +30 -0
- package/corpus/templates/analytics/app/i18n-data.ts +385 -0
- package/corpus/templates/analytics/app/pages/Agents.tsx +22 -2
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +181 -30
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +6 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +4 -3
- package/corpus/templates/analytics/changelog/2026-07-17-dashboard-editors-can-add-shared-extensions-or-opt-into-per-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-dashboard-extensions-show-a-loading-skeleton.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-errors-now-group-repeat-failures-consistently-and-keep-priva.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-gong-transcript-reviews-now-batch-bounded-call-windows-for-f.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-hubspot-deal-filters-now-run-in-hubspot-before-paging-result.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-manage-feature-flag-rollouts-across-your-organization-s-apps.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-notion-content-calendars-now-discover-the-matching-database-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-pylon-dashboard-reads-now-use-the-paginated-issue-search-api.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-slack-reads-no-longer-join-channels-and-report-pagination-coverage.md +6 -0
- package/corpus/templates/analytics/server/handlers/notion.ts +14 -3
- package/corpus/templates/analytics/server/handlers/slack.ts +182 -29
- package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +2 -6
- package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +6 -2
- package/corpus/templates/analytics/server/lib/db-admin-connections.ts +13 -5
- package/corpus/templates/analytics/server/lib/error-capture.ts +75 -8
- package/corpus/templates/analytics/server/lib/gong-native-policy.ts +72 -0
- package/corpus/templates/analytics/server/lib/gong.ts +54 -66
- package/corpus/templates/analytics/server/lib/hubspot.ts +40 -3
- package/corpus/templates/analytics/server/lib/notion.ts +83 -8
- package/corpus/templates/analytics/server/lib/real-data-actions.ts +4 -0
- package/corpus/templates/analytics/server/lib/slack.ts +242 -90
- package/corpus/templates/analytics/server/lib/workspace-feature-flags.ts +347 -0
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +3 -3
- package/corpus/templates/analytics/server/routes/api/pylon/accounts.get.ts +42 -1
- package/corpus/templates/analytics/server/routes/api/pylon/issues.get.ts +71 -1
- package/corpus/templates/analytics/server/routes/api/test-connection.post.ts +44 -4
- package/corpus/templates/assets/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/brain/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/calendar/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/chat/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/clips/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +19 -1
- package/corpus/templates/clips/app/components/library/create-folder-dialog.tsx +123 -0
- package/corpus/templates/clips/app/components/library/library-grid.tsx +42 -4
- package/corpus/templates/clips/app/components/library/recording-card.tsx +30 -0
- package/corpus/templates/clips/app/entry.client.tsx +6 -1
- package/corpus/templates/clips/app/i18n/ar-SA.ts +12 -1
- package/corpus/templates/clips/app/i18n/de-DE.ts +12 -1
- package/corpus/templates/clips/app/i18n/en-US.ts +12 -1
- package/corpus/templates/clips/app/i18n/es-ES.ts +11 -1
- package/corpus/templates/clips/app/i18n/fr-FR.ts +11 -1
- package/corpus/templates/clips/app/i18n/hi-IN.ts +10 -1
- package/corpus/templates/clips/app/i18n/ja-JP.ts +12 -1
- package/corpus/templates/clips/app/i18n/ko-KR.ts +11 -1
- package/corpus/templates/clips/app/i18n/pt-BR.ts +11 -1
- package/corpus/templates/clips/app/i18n/zh-CN.ts +11 -1
- package/corpus/templates/clips/app/i18n/zh-TW.ts +11 -1
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +72 -1
- package/corpus/templates/clips/changelog/2026-07-17-choose-which-workspace-receives-new-clips-recordings-and-des.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-17-create-folders-directly-from-the-move-menu.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-17-failed-desktop-uploads-now-offer-a-direct-way-to-reopen-clip.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +1 -1
- package/corpus/templates/clips/server/plugins/feature-flags.ts +11 -0
- package/corpus/templates/clips/shared/feature-flags.ts +30 -37
- package/corpus/templates/content/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/content/app/entry.client.tsx +6 -1
- package/corpus/templates/design/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/design/AGENTS.md +5 -3
- package/corpus/templates/design/actions/add-fusion-screens.ts +4 -6
- package/corpus/templates/design/actions/apply-fusion-edits.ts +4 -6
- package/corpus/templates/design/actions/create-fusion-app.ts +5 -4
- package/corpus/templates/design/actions/deploy-fusion-app.ts +4 -3
- package/corpus/templates/design/actions/get-fusion-deploy-status.ts +4 -6
- package/corpus/templates/design/actions/list-fusion-edits.ts +4 -3
- package/corpus/templates/design/actions/push-fusion-app.ts +4 -6
- package/corpus/templates/design/actions/queue-fusion-edit.ts +4 -3
- package/corpus/templates/design/actions/send-fusion-message.ts +4 -6
- package/corpus/templates/design/actions/sync-fusion-app.ts +4 -3
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +1 -1
- package/corpus/templates/design/app/pages/Index.tsx +8 -6
- package/corpus/templates/design/server/plugins/feature-flags.ts +5 -0
- package/corpus/templates/design/shared/full-app.ts +10 -7
- package/corpus/templates/dispatch/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/dispatch/AGENTS.md +5 -0
- package/corpus/templates/dispatch/changelog/2026-07-17-apps-page-links-to-other-available-apps.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-17-curated-template-remixes.md +6 -0
- package/corpus/templates/forms/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/macros/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/mail/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/mail/app/entry.client.tsx +6 -1
- package/corpus/templates/plan/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/slides/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +11 -7
- package/corpus/templates/slides/.env.example +0 -1
- package/corpus/templates/slides/AGENTS.md +4 -0
- package/corpus/templates/slides/DEVELOPING.md +2 -2
- package/corpus/templates/slides/actions/index-design-system-with-builder.ts +1 -1
- package/corpus/templates/slides/actions/logo-config.ts +6 -7
- package/corpus/templates/slides/actions/search-images.ts +11 -39
- package/corpus/templates/slides/actions/search-logos.ts +5 -52
- package/corpus/templates/slides/app/components/editor/ImageSearchPanel.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/LogoSearchPanel.tsx +16 -26
- package/corpus/templates/slides/app/entry.client.tsx +6 -1
- package/corpus/templates/slides/server/lib/media-search-providers.ts +216 -0
- package/corpus/templates/slides/server/register-secrets.ts +30 -0
- package/corpus/templates/tasks/.agents/skills/feature-flags/SKILL.md +169 -0
- package/dist/a2a/client.d.ts +38 -1
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +81 -12
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +47 -0
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/index.d.ts +4 -4
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +2 -2
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/invoke.d.ts +26 -2
- package/dist/a2a/invoke.d.ts.map +1 -1
- package/dist/a2a/invoke.js +30 -1
- package/dist/a2a/invoke.js.map +1 -1
- package/dist/a2a/server.d.ts.map +1 -1
- package/dist/a2a/server.js +14 -1
- package/dist/a2a/server.js.map +1 -1
- package/dist/a2a/types.d.ts +12 -0
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/a2a/types.js.map +1 -1
- package/dist/a2a-claims.d.ts +10 -0
- package/dist/a2a-claims.d.ts.map +1 -0
- package/dist/a2a-claims.js +41 -0
- package/dist/a2a-claims.js.map +1 -0
- package/dist/action.d.ts +7 -2
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js.map +1 -1
- package/dist/agent/production-agent.d.ts +5 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +5 -3
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/audit/record.d.ts +3 -0
- package/dist/audit/record.d.ts.map +1 -1
- package/dist/audit/record.js +3 -0
- package/dist/audit/record.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +14 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +158 -136
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +27 -4
- 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 +21 -39
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-sidebar-state.d.ts +1 -0
- package/dist/client/agent-sidebar-state.d.ts.map +1 -1
- package/dist/client/agent-sidebar-state.js +4 -0
- package/dist/client/agent-sidebar-state.js.map +1 -1
- package/dist/client/analytics.d.ts +14 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +67 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +8 -0
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +62 -19
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +6 -0
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +83 -14
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts +8 -0
- package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts.map +1 -0
- package/dist/client/chat/use-agent-chat-lifecycle-tracking.js +51 -0
- package/dist/client/chat/use-agent-chat-lifecycle-tracking.js.map +1 -0
- package/dist/client/chat-thread-url.d.ts +2 -0
- package/dist/client/chat-thread-url.d.ts.map +1 -0
- package/dist/client/chat-thread-url.js +12 -0
- package/dist/client/chat-thread-url.js.map +1 -0
- package/dist/client/error-capture.d.ts.map +1 -1
- package/dist/client/error-capture.js +7 -0
- package/dist/client/error-capture.js.map +1 -1
- package/dist/client/extensions/ExtensionSlot.d.ts +3 -1
- package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionSlot.js +28 -3
- package/dist/client/extensions/ExtensionSlot.js.map +1 -1
- package/dist/client/feature-flags/FeatureFlagsPanel.d.ts +10 -0
- package/dist/client/feature-flags/FeatureFlagsPanel.d.ts.map +1 -0
- package/dist/client/feature-flags/FeatureFlagsPanel.js +143 -0
- package/dist/client/feature-flags/FeatureFlagsPanel.js.map +1 -0
- package/dist/client/feature-flags/helpers.d.ts +16 -0
- package/dist/client/feature-flags/helpers.d.ts.map +1 -0
- package/dist/client/feature-flags/helpers.js +50 -0
- package/dist/client/feature-flags/helpers.js.map +1 -0
- package/dist/client/feature-flags/index.d.ts +5 -0
- package/dist/client/feature-flags/index.d.ts.map +1 -0
- package/dist/client/feature-flags/index.js +4 -0
- package/dist/client/feature-flags/index.js.map +1 -0
- package/dist/client/feature-flags/types.d.ts +27 -0
- package/dist/client/feature-flags/types.d.ts.map +1 -0
- package/dist/client/feature-flags/types.js +2 -0
- package/dist/client/feature-flags/types.js.map +1 -0
- package/dist/client/feature-flags/use-feature-flag.d.ts +8 -0
- package/dist/client/feature-flags/use-feature-flag.d.ts.map +1 -0
- package/dist/client/feature-flags/use-feature-flag.js +15 -0
- package/dist/client/feature-flags/use-feature-flag.js.map +1 -0
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/route-chunk-recovery.d.ts.map +1 -1
- package/dist/client/route-chunk-recovery.js +14 -9
- package/dist/client/route-chunk-recovery.js.map +1 -1
- package/dist/client/session-replay.d.ts +15 -0
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +20 -0
- package/dist/client/session-replay.js.map +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +2 -10
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/routes.d.ts.map +1 -1
- package/dist/extensions/routes.js +1 -1
- package/dist/extensions/routes.js.map +1 -1
- package/dist/extensions/store.js +1 -1
- package/dist/extensions/store.js.map +1 -1
- package/dist/feature-flags/a2a-action-route.d.ts +14 -0
- package/dist/feature-flags/a2a-action-route.d.ts.map +1 -0
- package/dist/feature-flags/a2a-action-route.js +50 -0
- package/dist/feature-flags/a2a-action-route.js.map +1 -0
- package/dist/feature-flags/actions/get-feature-flags.d.ts +3 -0
- package/dist/feature-flags/actions/get-feature-flags.d.ts.map +1 -0
- package/dist/feature-flags/actions/get-feature-flags.js +18 -0
- package/dist/feature-flags/actions/get-feature-flags.js.map +1 -0
- package/dist/feature-flags/actions/list-feature-flags.d.ts +28 -0
- package/dist/feature-flags/actions/list-feature-flags.d.ts.map +1 -0
- package/dist/feature-flags/actions/list-feature-flags.js +60 -0
- package/dist/feature-flags/actions/list-feature-flags.js.map +1 -0
- package/dist/feature-flags/actions/set-feature-flag.d.ts +26 -0
- package/dist/feature-flags/actions/set-feature-flag.d.ts.map +1 -0
- package/dist/feature-flags/actions/set-feature-flag.js +78 -0
- package/dist/feature-flags/actions/set-feature-flag.js.map +1 -0
- package/dist/feature-flags/index.d.ts +5 -0
- package/dist/feature-flags/index.d.ts.map +1 -0
- package/dist/feature-flags/index.js +5 -0
- package/dist/feature-flags/index.js.map +1 -0
- package/dist/feature-flags/permissions.d.ts +13 -0
- package/dist/feature-flags/permissions.d.ts.map +1 -0
- package/dist/feature-flags/permissions.js +37 -0
- package/dist/feature-flags/permissions.js.map +1 -0
- package/dist/feature-flags/plugin.d.ts +17 -0
- package/dist/feature-flags/plugin.d.ts.map +1 -0
- package/dist/feature-flags/plugin.js +29 -0
- package/dist/feature-flags/plugin.js.map +1 -0
- package/dist/feature-flags/registry.d.ts +23 -0
- package/dist/feature-flags/registry.d.ts.map +1 -0
- package/dist/feature-flags/registry.js +59 -0
- package/dist/feature-flags/registry.js.map +1 -0
- package/dist/feature-flags/store.d.ts +31 -0
- package/dist/feature-flags/store.d.ts.map +1 -0
- package/dist/feature-flags/store.js +124 -0
- package/dist/feature-flags/store.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/localization/default-messages.d.ts +45 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +45 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp/build-server.d.ts +2 -0
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +2 -2
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/progress/actions.d.ts.map +1 -1
- package/dist/progress/actions.js +3 -2
- package/dist/progress/actions.js.map +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +91 -8
- package/dist/provider-api/index.js.map +1 -1
- package/dist/resources/handlers.d.ts +3 -3
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +107 -16
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +12 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/action-routes.d.ts +3 -0
- package/dist/server/action-routes.d.ts.map +1 -1
- package/dist/server/action-routes.js +45 -5
- package/dist/server/action-routes.js.map +1 -1
- package/dist/server/agent-chat/action-filters-a2a.d.ts +6 -0
- package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -1
- package/dist/server/agent-chat/action-filters-a2a.js +27 -0
- package/dist/server/agent-chat/action-filters-a2a.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +27 -1
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +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/settings/org-settings.d.ts +2 -0
- package/dist/settings/org-settings.d.ts.map +1 -1
- package/dist/settings/org-settings.js +5 -1
- package/dist/settings/org-settings.js.map +1 -1
- package/dist/settings/store.d.ts +8 -0
- package/dist/settings/store.d.ts.map +1 -1
- package/dist/settings/store.js +48 -0
- package/dist/settings/store.js.map +1 -1
- package/dist/styles/agent-conversation.css +7 -0
- package/dist/templates/chat/.agents/skills/feature-flags/SKILL.md +169 -0
- package/dist/templates/default/.agents/skills/feature-flags/SKILL.md +169 -0
- package/dist/templates/default/AGENTS.md +1 -0
- package/dist/templates/default/app/i18n/ar-SA.ts +20 -0
- package/dist/templates/default/app/i18n/de-DE.ts +20 -0
- package/dist/templates/default/app/i18n/en-US.ts +20 -0
- package/dist/templates/default/app/i18n/es-ES.ts +20 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +21 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +19 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +20 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +19 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +20 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +19 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +19 -0
- package/dist/templates/headless/.agents/skills/feature-flags/SKILL.md +169 -0
- package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +28 -0
- package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +169 -0
- package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
- package/dist/templates/workspace-core/AGENTS.md +1 -1
- package/dist/templates/workspace-root/AGENTS.md +1 -1
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +12 -0
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/docs/content/actions.mdx +48 -0
- package/docs/content/locales/ar-SA/actions.mdx +38 -0
- package/docs/content/locales/de-DE/actions.mdx +38 -0
- package/docs/content/locales/es-ES/actions.mdx +38 -0
- package/docs/content/locales/fr-FR/actions.mdx +38 -0
- package/docs/content/locales/hi-IN/actions.mdx +38 -0
- package/docs/content/locales/ja-JP/actions.mdx +38 -0
- package/docs/content/locales/ko-KR/actions.mdx +38 -0
- package/docs/content/locales/pt-BR/actions.mdx +38 -0
- package/docs/content/locales/zh-CN/actions.mdx +38 -0
- package/docs/content/locales/zh-TW/actions.mdx +38 -0
- package/package.json +5 -1
- package/src/templates/chat/.agents/skills/feature-flags/SKILL.md +169 -0
- package/src/templates/default/.agents/skills/feature-flags/SKILL.md +169 -0
- package/src/templates/default/AGENTS.md +1 -0
- package/src/templates/default/app/i18n/ar-SA.ts +20 -0
- package/src/templates/default/app/i18n/de-DE.ts +20 -0
- package/src/templates/default/app/i18n/en-US.ts +20 -0
- package/src/templates/default/app/i18n/es-ES.ts +20 -0
- package/src/templates/default/app/i18n/fr-FR.ts +21 -0
- package/src/templates/default/app/i18n/hi-IN.ts +19 -0
- package/src/templates/default/app/i18n/ja-JP.ts +20 -0
- package/src/templates/default/app/i18n/ko-KR.ts +19 -0
- package/src/templates/default/app/i18n/pt-BR.ts +20 -0
- package/src/templates/default/app/i18n/zh-CN.ts +19 -0
- package/src/templates/default/app/i18n/zh-TW.ts +19 -0
- package/src/templates/headless/.agents/skills/feature-flags/SKILL.md +169 -0
- package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +28 -0
- package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +169 -0
- package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
- package/src/templates/workspace-core/AGENTS.md +1 -1
- package/src/templates/workspace-root/AGENTS.md +1 -1
- package/corpus/templates/analytics/server/handlers/github.ts +0 -200
- package/corpus/templates/analytics/server/handlers/pylon.ts +0 -43
- package/corpus/templates/analytics/server/lib/apollo.ts +0 -167
- package/corpus/templates/analytics/server/lib/commonroom.ts +0 -149
- package/corpus/templates/analytics/server/lib/github.ts +0 -660
- package/corpus/templates/analytics/server/lib/mixpanel.ts +0 -156
- package/corpus/templates/analytics/server/lib/posthog.ts +0 -194
- package/corpus/templates/analytics/server/lib/pylon.ts +0 -109
- package/corpus/templates/analytics/server/routes/api/github/graphql.post.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/issue.get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/org-prs.get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/pr.get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/prs.get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/search.get.ts +0 -1
- package/corpus/templates/clips/actions/get-feature-flags.ts +0 -30
- package/corpus/templates/slides/actions/fetch-logos.ts +0 -90
- package/corpus/templates/slides/actions/image-search.ts +0 -64
- package/corpus/templates/slides/actions/import-github.ts +0 -182
- package/corpus/templates/slides/actions/logo-lookup.ts +0 -113
|
@@ -19,14 +19,12 @@ import {
|
|
|
19
19
|
useCallback,
|
|
20
20
|
useContext,
|
|
21
21
|
useEffect,
|
|
22
|
-
useLayoutEffect,
|
|
23
22
|
useMemo,
|
|
24
23
|
useRef,
|
|
25
24
|
useState,
|
|
26
25
|
type CSSProperties,
|
|
27
26
|
type ReactNode,
|
|
28
27
|
} from "react";
|
|
29
|
-
import { createPortal } from "react-dom";
|
|
30
28
|
import { Link } from "react-router";
|
|
31
29
|
import {
|
|
32
30
|
Area,
|
|
@@ -61,6 +59,7 @@ import {
|
|
|
61
59
|
SelectValue,
|
|
62
60
|
} from "@/components/ui/select";
|
|
63
61
|
import { Skeleton } from "@/components/ui/skeleton";
|
|
62
|
+
import { useChartTooltipFlip } from "@/hooks/use-chart-tooltip-flip";
|
|
64
63
|
|
|
65
64
|
const PAGE_SIZE_OPTIONS = [10, 25, 50, 100];
|
|
66
65
|
import { createDemoChartTrendRows } from "@/lib/demo-chart-trend";
|
|
@@ -90,11 +89,6 @@ const CHART_TOOLTIP_WRAPPER_STYLE: CSSProperties = {
|
|
|
90
89
|
pointerEvents: "none",
|
|
91
90
|
};
|
|
92
91
|
|
|
93
|
-
const PORTAL_GUTTER_PADDING = 12;
|
|
94
|
-
const PORTAL_CURSOR_OFFSET = 24;
|
|
95
|
-
const useBrowserLayoutEffect =
|
|
96
|
-
typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
97
|
-
|
|
98
92
|
const CHART_TOOLTIP_PROPS = {
|
|
99
93
|
allowEscapeViewBox: { x: true, y: true },
|
|
100
94
|
wrapperStyle: CHART_TOOLTIP_WRAPPER_STYLE,
|
|
@@ -598,7 +592,7 @@ export function SeriesLegend({
|
|
|
598
592
|
if (!shouldShowLegend(panel, keys.length)) return null;
|
|
599
593
|
|
|
600
594
|
return (
|
|
601
|
-
<div className="mt-
|
|
595
|
+
<div className="mt-1 max-h-16 overflow-y-auto overflow-x-hidden pr-1 text-[11px] leading-4 text-muted-foreground">
|
|
602
596
|
<div className="flex flex-wrap gap-x-3 gap-y-1">
|
|
603
597
|
{keys.map((key, i) => {
|
|
604
598
|
const hidden = hiddenKeys?.has(key) ?? false;
|
|
@@ -612,7 +606,7 @@ export function SeriesLegend({
|
|
|
612
606
|
>
|
|
613
607
|
<PopoverAnchor asChild>
|
|
614
608
|
<div
|
|
615
|
-
className="inline-flex min-h-
|
|
609
|
+
className="inline-flex min-h-6 max-w-[14rem] items-center"
|
|
616
610
|
onPointerDown={(event) => {
|
|
617
611
|
if (!hasLegendActions || event.pointerType === "mouse") {
|
|
618
612
|
return;
|
|
@@ -648,7 +642,7 @@ export function SeriesLegend({
|
|
|
648
642
|
}
|
|
649
643
|
aria-haspopup={hasLegendActions ? "menu" : undefined}
|
|
650
644
|
data-chart-legend-item={key}
|
|
651
|
-
className={`inline-flex min-h-
|
|
645
|
+
className={`inline-flex min-h-6 max-w-[14rem] min-w-0 items-center gap-1.5 rounded-md px-1.5 text-left transition-[opacity,color] touch-manipulation hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring ${
|
|
652
646
|
hidden ? "opacity-35" : "opacity-100"
|
|
653
647
|
} ${onToggleKey ? "cursor-pointer" : "cursor-default"}`}
|
|
654
648
|
title={label}
|
|
@@ -680,18 +674,18 @@ export function SeriesLegend({
|
|
|
680
674
|
align="center"
|
|
681
675
|
sideOffset={8}
|
|
682
676
|
collisionPadding={12}
|
|
683
|
-
className="w-
|
|
677
|
+
className="w-auto max-w-[calc(100vw-1.5rem)] rounded-lg p-1 shadow-lg"
|
|
684
678
|
onPointerEnter={clearCloseTimeout}
|
|
685
679
|
onPointerLeave={scheduleCloseLegendActions}
|
|
686
680
|
onFocusCapture={clearCloseTimeout}
|
|
687
681
|
>
|
|
688
|
-
<div className="flex
|
|
682
|
+
<div className="flex items-center gap-0.5">
|
|
689
683
|
{onFilterKey && (
|
|
690
684
|
<button
|
|
691
685
|
type="button"
|
|
692
686
|
data-chart-legend-action="filter"
|
|
693
687
|
aria-label={`${t("sqlDashboard.filterSeries")} ${label}`}
|
|
694
|
-
className="min-h-
|
|
688
|
+
className="min-h-8 rounded-md px-2.5 py-1 text-xs font-medium whitespace-nowrap text-popover-foreground outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground"
|
|
695
689
|
onClick={() => {
|
|
696
690
|
onFilterKey(key);
|
|
697
691
|
setOpenKey(null);
|
|
@@ -706,7 +700,7 @@ export function SeriesLegend({
|
|
|
706
700
|
data-chart-legend-action="hide"
|
|
707
701
|
aria-label={`${t("sqlDashboard.hide")} ${label}`}
|
|
708
702
|
disabled={hidden}
|
|
709
|
-
className="min-h-
|
|
703
|
+
className="min-h-8 rounded-md px-2.5 py-1 text-xs font-medium whitespace-nowrap text-popover-foreground outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-40"
|
|
710
704
|
onClick={() => {
|
|
711
705
|
onToggleKey(key);
|
|
712
706
|
setOpenKey(null);
|
|
@@ -886,9 +880,9 @@ function SqlChartLoadingSkeleton({ panel }: { panel: SqlPanel }) {
|
|
|
886
880
|
<Skeleton
|
|
887
881
|
className={`w-full ${fill ? "h-full min-h-[250px] flex-1" : "h-[250px]"}`}
|
|
888
882
|
/>
|
|
889
|
-
<div className="mt-
|
|
890
|
-
{Array.from({ length:
|
|
891
|
-
<div key={index} className="flex items-center gap-1.5">
|
|
883
|
+
<div className="mt-1 flex min-h-6 flex-wrap gap-x-3 gap-y-1 overflow-hidden pr-1">
|
|
884
|
+
{Array.from({ length: 3 }).map((_, index) => (
|
|
885
|
+
<div key={index} className="flex min-h-6 items-center gap-1.5">
|
|
892
886
|
<Skeleton className="h-2.5 w-3 shrink-0 rounded-sm" />
|
|
893
887
|
<Skeleton className="h-3 w-20 min-w-0" />
|
|
894
888
|
</div>
|
|
@@ -898,7 +892,7 @@ function SqlChartLoadingSkeleton({ panel }: { panel: SqlPanel }) {
|
|
|
898
892
|
);
|
|
899
893
|
}
|
|
900
894
|
|
|
901
|
-
function ChartTooltip({
|
|
895
|
+
export function ChartTooltip({
|
|
902
896
|
active,
|
|
903
897
|
payload,
|
|
904
898
|
label,
|
|
@@ -918,12 +912,7 @@ function ChartTooltip({
|
|
|
918
912
|
seriesNameFormatter?: (value: string) => string;
|
|
919
913
|
valueFormatter?: (value: number) => string;
|
|
920
914
|
}) {
|
|
921
|
-
const
|
|
922
|
-
const portalRef = useRef<HTMLDivElement | null>(null);
|
|
923
|
-
const [portalPosition, setPortalPosition] = useState<{
|
|
924
|
-
left: number;
|
|
925
|
-
top: number;
|
|
926
|
-
} | null>(null);
|
|
915
|
+
const tooltipRef = useChartTooltipFlip<HTMLDivElement>(active);
|
|
927
916
|
const items = useMemo(
|
|
928
917
|
() =>
|
|
929
918
|
sortTooltipPayloadItems(
|
|
@@ -932,11 +921,6 @@ function ChartTooltip({
|
|
|
932
921
|
),
|
|
933
922
|
[payload],
|
|
934
923
|
);
|
|
935
|
-
const portalVisible = portalPosition !== null;
|
|
936
|
-
const clearPortalPosition = useCallback(
|
|
937
|
-
() => setPortalPosition((prev) => (prev === null ? prev : null)),
|
|
938
|
-
[],
|
|
939
|
-
);
|
|
940
924
|
|
|
941
925
|
const labelText =
|
|
942
926
|
label == null
|
|
@@ -945,96 +929,14 @@ function ChartTooltip({
|
|
|
945
929
|
? labelFormatter(String(label))
|
|
946
930
|
: String(label);
|
|
947
931
|
|
|
948
|
-
useBrowserLayoutEffect(() => {
|
|
949
|
-
if (!active || items.length === 0 || typeof window === "undefined") {
|
|
950
|
-
clearPortalPosition();
|
|
951
|
-
return;
|
|
952
|
-
}
|
|
953
|
-
|
|
954
|
-
const anchor = anchorRef.current;
|
|
955
|
-
const wrapper = anchor?.parentElement;
|
|
956
|
-
if (!anchor || !wrapper) return;
|
|
957
|
-
|
|
958
|
-
let frame = 0;
|
|
959
|
-
const apply = () => {
|
|
960
|
-
frame = 0;
|
|
961
|
-
if (!(wrapper as HTMLElement).style.transform) return;
|
|
962
|
-
|
|
963
|
-
const anchorRect = anchor.getBoundingClientRect();
|
|
964
|
-
const portalRect = portalRef.current?.getBoundingClientRect();
|
|
965
|
-
const width = portalRect?.width || anchorRect.width;
|
|
966
|
-
const height = portalRect?.height || anchorRect.height;
|
|
967
|
-
if (width === 0 || height === 0) return;
|
|
968
|
-
|
|
969
|
-
const sidebar = document.querySelector(".agent-sidebar-panel");
|
|
970
|
-
const sidebarRect = sidebar?.getBoundingClientRect();
|
|
971
|
-
const rightLimit =
|
|
972
|
-
sidebarRect && sidebarRect.width > 0 && sidebarRect.left > 0
|
|
973
|
-
? sidebarRect.left - PORTAL_GUTTER_PADDING
|
|
974
|
-
: window.innerWidth - PORTAL_GUTTER_PADDING;
|
|
975
|
-
const bottomLimit = window.innerHeight - PORTAL_GUTTER_PADDING;
|
|
976
|
-
|
|
977
|
-
let left = anchorRect.left;
|
|
978
|
-
let top = anchorRect.top;
|
|
979
|
-
|
|
980
|
-
if (left + width > rightLimit) {
|
|
981
|
-
left = anchorRect.left - width - PORTAL_CURSOR_OFFSET;
|
|
982
|
-
}
|
|
983
|
-
left = Math.max(
|
|
984
|
-
PORTAL_GUTTER_PADDING,
|
|
985
|
-
Math.min(left, rightLimit - width),
|
|
986
|
-
);
|
|
987
|
-
|
|
988
|
-
if (top + height > bottomLimit) {
|
|
989
|
-
top = bottomLimit - height;
|
|
990
|
-
}
|
|
991
|
-
top = Math.max(PORTAL_GUTTER_PADDING, top);
|
|
992
|
-
|
|
993
|
-
setPortalPosition((prev) =>
|
|
994
|
-
prev &&
|
|
995
|
-
Math.abs(prev.left - left) < 0.5 &&
|
|
996
|
-
Math.abs(prev.top - top) < 0.5
|
|
997
|
-
? prev
|
|
998
|
-
: { left, top },
|
|
999
|
-
);
|
|
1000
|
-
};
|
|
1001
|
-
|
|
1002
|
-
const schedule = () => {
|
|
1003
|
-
if (frame) return;
|
|
1004
|
-
frame = window.requestAnimationFrame(apply);
|
|
1005
|
-
};
|
|
1006
|
-
|
|
1007
|
-
schedule();
|
|
1008
|
-
|
|
1009
|
-
const mutationObserver = new MutationObserver(schedule);
|
|
1010
|
-
mutationObserver.observe(wrapper, {
|
|
1011
|
-
attributes: true,
|
|
1012
|
-
attributeFilter: ["style", "class"],
|
|
1013
|
-
});
|
|
1014
|
-
|
|
1015
|
-
const resizeObserver =
|
|
1016
|
-
typeof ResizeObserver === "undefined"
|
|
1017
|
-
? null
|
|
1018
|
-
: new ResizeObserver(schedule);
|
|
1019
|
-
resizeObserver?.observe(anchor);
|
|
1020
|
-
if (portalRef.current) resizeObserver?.observe(portalRef.current);
|
|
1021
|
-
|
|
1022
|
-
window.addEventListener("resize", schedule);
|
|
1023
|
-
window.addEventListener("scroll", schedule, true);
|
|
1024
|
-
|
|
1025
|
-
return () => {
|
|
1026
|
-
if (frame) window.cancelAnimationFrame(frame);
|
|
1027
|
-
mutationObserver.disconnect();
|
|
1028
|
-
resizeObserver?.disconnect();
|
|
1029
|
-
window.removeEventListener("resize", schedule);
|
|
1030
|
-
window.removeEventListener("scroll", schedule, true);
|
|
1031
|
-
};
|
|
1032
|
-
}, [active, clearPortalPosition, items.length, portalVisible]);
|
|
1033
|
-
|
|
1034
932
|
if (!active || items.length === 0) return null;
|
|
1035
933
|
|
|
1036
934
|
const tooltip = (
|
|
1037
|
-
<div
|
|
935
|
+
<div
|
|
936
|
+
ref={tooltipRef}
|
|
937
|
+
role="tooltip"
|
|
938
|
+
className="min-w-40 max-w-[280px] rounded-md border border-border bg-card px-3 py-2 text-xs text-foreground shadow-lg"
|
|
939
|
+
>
|
|
1038
940
|
{labelText && (
|
|
1039
941
|
<div className="mb-1.5 truncate font-medium text-foreground">
|
|
1040
942
|
{labelText}
|
|
@@ -1068,31 +970,7 @@ function ChartTooltip({
|
|
|
1068
970
|
</div>
|
|
1069
971
|
);
|
|
1070
972
|
|
|
1071
|
-
return
|
|
1072
|
-
<>
|
|
1073
|
-
<div ref={anchorRef} aria-hidden="true" className="invisible">
|
|
1074
|
-
{tooltip}
|
|
1075
|
-
</div>
|
|
1076
|
-
{portalPosition && typeof document !== "undefined"
|
|
1077
|
-
? createPortal(
|
|
1078
|
-
<div
|
|
1079
|
-
ref={portalRef}
|
|
1080
|
-
role="tooltip"
|
|
1081
|
-
style={{
|
|
1082
|
-
position: "fixed",
|
|
1083
|
-
left: portalPosition.left,
|
|
1084
|
-
top: portalPosition.top,
|
|
1085
|
-
zIndex: 1000,
|
|
1086
|
-
pointerEvents: "none",
|
|
1087
|
-
}}
|
|
1088
|
-
>
|
|
1089
|
-
{tooltip}
|
|
1090
|
-
</div>,
|
|
1091
|
-
document.body,
|
|
1092
|
-
)
|
|
1093
|
-
: null}
|
|
1094
|
-
</>
|
|
1095
|
-
);
|
|
973
|
+
return tooltip;
|
|
1096
974
|
}
|
|
1097
975
|
|
|
1098
976
|
function detectKeys(
|
|
@@ -1434,16 +1312,33 @@ function DashboardExtensionPanel({
|
|
|
1434
1312
|
// dashboard report screenshots don't capture a blank extension panel.
|
|
1435
1313
|
const [ready, setReady] = useState(false);
|
|
1436
1314
|
const [unavailable, setUnavailable] = useState(false);
|
|
1315
|
+
const loadingSkeleton = !ready ? (
|
|
1316
|
+
<Skeleton
|
|
1317
|
+
data-dashboard-extension-loading="true"
|
|
1318
|
+
className="absolute inset-0 z-10 h-full min-h-[180px] w-full rounded-md"
|
|
1319
|
+
aria-hidden="true"
|
|
1320
|
+
/>
|
|
1321
|
+
) : null;
|
|
1437
1322
|
|
|
1438
1323
|
if (slotId) {
|
|
1439
1324
|
return (
|
|
1440
|
-
<
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1325
|
+
<div
|
|
1326
|
+
className="relative min-h-[180px] w-full"
|
|
1327
|
+
aria-busy={!ready}
|
|
1328
|
+
data-dashboard-report-loading={ready ? undefined : "true"}
|
|
1329
|
+
>
|
|
1330
|
+
{loadingSkeleton}
|
|
1331
|
+
<div className={ready ? "opacity-100" : "opacity-0"}>
|
|
1332
|
+
<ExtensionSlot
|
|
1333
|
+
id={slotId}
|
|
1334
|
+
context={context}
|
|
1335
|
+
showEmptyAffordance
|
|
1336
|
+
onReady={() => setReady(true)}
|
|
1337
|
+
className="min-h-[120px] w-full"
|
|
1338
|
+
toolClassName="w-full"
|
|
1339
|
+
/>
|
|
1340
|
+
</div>
|
|
1341
|
+
</div>
|
|
1447
1342
|
);
|
|
1448
1343
|
}
|
|
1449
1344
|
|
|
@@ -1462,15 +1357,16 @@ function DashboardExtensionPanel({
|
|
|
1462
1357
|
|
|
1463
1358
|
return (
|
|
1464
1359
|
<div
|
|
1465
|
-
className="w-full"
|
|
1360
|
+
className="relative min-h-[180px] w-full"
|
|
1361
|
+
aria-busy={!ready}
|
|
1466
1362
|
data-dashboard-report-loading={ready ? undefined : "true"}
|
|
1467
1363
|
>
|
|
1364
|
+
{loadingSkeleton}
|
|
1468
1365
|
<EmbeddedExtension
|
|
1469
1366
|
extensionId={extensionId!}
|
|
1470
1367
|
slotId={`dashboard-panel-${panelId}`}
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
// receive the dashboard's filters/variables/date range as `context`.
|
|
1368
|
+
context={context}
|
|
1369
|
+
className={ready ? "w-full opacity-100" : "w-full opacity-0"}
|
|
1474
1370
|
initialHeight={180}
|
|
1475
1371
|
onReady={() => setReady(true)}
|
|
1476
1372
|
onUnavailable={() => {
|
|
@@ -95,16 +95,20 @@ const defaultTools = [
|
|
|
95
95
|
"agent monitoring",
|
|
96
96
|
"observability",
|
|
97
97
|
"evals",
|
|
98
|
-
"experiments",
|
|
99
98
|
"feedback",
|
|
100
99
|
"database",
|
|
101
100
|
"db admin",
|
|
102
101
|
"dashboard usage",
|
|
103
102
|
"dashboard audit",
|
|
104
|
-
"ab testing",
|
|
105
103
|
"llm",
|
|
106
104
|
],
|
|
107
105
|
},
|
|
106
|
+
{
|
|
107
|
+
id: "feature-flags",
|
|
108
|
+
nameKey: "agents.featureFlags",
|
|
109
|
+
href: "/agents?view=flags",
|
|
110
|
+
keywords: ["flags", "rollout", "release", "targeting"],
|
|
111
|
+
},
|
|
108
112
|
{
|
|
109
113
|
id: "explorer",
|
|
110
114
|
nameKey: "commandPalette.toolExplorer",
|
|
@@ -565,7 +569,11 @@ export function CommandPalette() {
|
|
|
565
569
|
|
|
566
570
|
<CommandGroup key="tools" heading={t("commandPalette.groupTools")}>
|
|
567
571
|
{defaultTools
|
|
568
|
-
.filter((tool) =>
|
|
572
|
+
.filter((tool) =>
|
|
573
|
+
["agents", "feature-flags"].includes(tool.id)
|
|
574
|
+
? canManageOrg
|
|
575
|
+
: true,
|
|
576
|
+
)
|
|
569
577
|
.map((tool) => (
|
|
570
578
|
<CommandItem
|
|
571
579
|
key={`tool-${tool.id}`}
|
|
@@ -136,7 +136,7 @@ const ChartTooltipContent = React.forwardRef<
|
|
|
136
136
|
ref,
|
|
137
137
|
) => {
|
|
138
138
|
const { config } = useChart();
|
|
139
|
-
const flipRef = useChartTooltipFlip<HTMLDivElement>();
|
|
139
|
+
const flipRef = useChartTooltipFlip<HTMLDivElement>(active);
|
|
140
140
|
const setRefs = React.useCallback(
|
|
141
141
|
(node: HTMLDivElement | null) => {
|
|
142
142
|
flipRef.current = node;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useEffect, useRef } from "react";
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const VIEWPORT_GUTTER_PADDING = 12;
|
|
4
4
|
const FLIP_CURSOR_OFFSET = 24;
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -10,10 +10,11 @@ const FLIP_CURSOR_OFFSET = 24;
|
|
|
10
10
|
* `transform` (cursor moves) and translate the content left when its right
|
|
11
11
|
* edge would land inside `.agent-sidebar-panel`.
|
|
12
12
|
*/
|
|
13
|
-
export function useChartTooltipFlip<T extends HTMLElement>() {
|
|
13
|
+
export function useChartTooltipFlip<T extends HTMLElement>(active = true) {
|
|
14
14
|
const ref = useRef<T | null>(null);
|
|
15
15
|
|
|
16
16
|
useEffect(() => {
|
|
17
|
+
if (!active) return;
|
|
17
18
|
const el = ref.current;
|
|
18
19
|
if (!el) return;
|
|
19
20
|
const wrapper = el.parentElement;
|
|
@@ -32,11 +33,25 @@ export function useChartTooltipFlip<T extends HTMLElement>() {
|
|
|
32
33
|
sidebarRect && sidebarRect.width > 0 && sidebarRect.left > 0
|
|
33
34
|
? sidebarRect.left
|
|
34
35
|
: window.innerWidth;
|
|
35
|
-
const
|
|
36
|
+
const rightLimit = gutterLeft - VIEWPORT_GUTTER_PADDING;
|
|
37
|
+
const bottomLimit = window.innerHeight - VIEWPORT_GUTTER_PADDING;
|
|
38
|
+
let translateX = 0;
|
|
39
|
+
let translateY = 0;
|
|
36
40
|
|
|
37
|
-
if (rect.right >
|
|
38
|
-
|
|
41
|
+
if (rect.right > rightLimit) {
|
|
42
|
+
translateX = -(rect.width + FLIP_CURSOR_OFFSET);
|
|
39
43
|
}
|
|
44
|
+
if (rect.bottom > bottomLimit) {
|
|
45
|
+
translateY = bottomLimit - rect.bottom;
|
|
46
|
+
} else if (rect.top < VIEWPORT_GUTTER_PADDING) {
|
|
47
|
+
translateY = VIEWPORT_GUTTER_PADDING - rect.top;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const transforms = [
|
|
51
|
+
translateX ? `translateX(${translateX}px)` : "",
|
|
52
|
+
translateY ? `translateY(${translateY}px)` : "",
|
|
53
|
+
].filter(Boolean);
|
|
54
|
+
node.style.transform = transforms.join(" ");
|
|
40
55
|
};
|
|
41
56
|
|
|
42
57
|
apply();
|
|
@@ -46,7 +61,7 @@ export function useChartTooltipFlip<T extends HTMLElement>() {
|
|
|
46
61
|
attributeFilter: ["style"],
|
|
47
62
|
});
|
|
48
63
|
return () => observer.disconnect();
|
|
49
|
-
}, []);
|
|
64
|
+
}, [active]);
|
|
50
65
|
|
|
51
66
|
return ref;
|
|
52
67
|
}
|
|
@@ -129,7 +129,9 @@ export function useNavigationState() {
|
|
|
129
129
|
if (cmd.view === "sessions") return "/sessions";
|
|
130
130
|
if (
|
|
131
131
|
cmd.view === "agents" &&
|
|
132
|
-
(cmd.agentsView === "database" ||
|
|
132
|
+
(cmd.agentsView === "database" ||
|
|
133
|
+
cmd.agentsView === "dashboards" ||
|
|
134
|
+
cmd.agentsView === "flags")
|
|
133
135
|
) {
|
|
134
136
|
const params = new URLSearchParams({ view: cmd.agentsView });
|
|
135
137
|
if (cmd.agentsView === "database" && cmd.dbAdminConnectionId) {
|
|
@@ -484,12 +484,25 @@ const messages = {
|
|
|
484
484
|
chartTypePie: "餡餅",
|
|
485
485
|
chartTypeMetric: "公制",
|
|
486
486
|
chartTypeTable: "桌子",
|
|
487
|
+
chartTypeExtension: "擴充功能",
|
|
487
488
|
failedToSavePanel: "儲存面板失敗",
|
|
488
489
|
failedToFormatSql: "格式化 SQL 失敗",
|
|
489
490
|
title: "標題",
|
|
490
491
|
titlePlaceholder: "例如每週註冊人數",
|
|
491
492
|
chartType: "圖表型別",
|
|
492
493
|
source: "來源",
|
|
494
|
+
extensionDisplay: "擴充功能顯示方式",
|
|
495
|
+
sharedExtension: "共用擴充功能",
|
|
496
|
+
perViewerSlot: "每位檢視者的插槽",
|
|
497
|
+
extension: "擴充功能",
|
|
498
|
+
loadingExtensions: "正在載入擴充功能...",
|
|
499
|
+
selectExtension: "選取擴充功能",
|
|
500
|
+
noExtensions: "沒有可見的擴充功能。請先建立或共用一個。",
|
|
501
|
+
sharedExtensionHelp:
|
|
502
|
+
"選取的擴充功能會與此儀表板共用,並顯示在排程報告中。檢視者仍需具備該擴充功能的存取權。",
|
|
503
|
+
slotIdOptional: "插槽 ID(選填)",
|
|
504
|
+
perViewerSlotHelp:
|
|
505
|
+
"每位檢視者各自安裝擴充功能。排程報告可能會顯示空插槽。留空即可產生穩定的 ID。",
|
|
493
506
|
sectionColumns: "剖面列",
|
|
494
507
|
format: "格式",
|
|
495
508
|
filterInterpolation: "使用 {{example}} 插值濾波器值。",
|
|
@@ -698,6 +711,23 @@ const messages = {
|
|
|
698
711
|
deleteConnectionTitle: "刪除資料庫連線?",
|
|
699
712
|
deleteConnectionDescription:
|
|
700
713
|
"這會從 Analytics 移除 {{name}} 並刪除儲存的連線密鑰。目標應用程式資料庫不會被修改。",
|
|
714
|
+
featureFlags: "功能旗標",
|
|
715
|
+
featureFlagsDescription: "檢視已註冊應用程式旗標,並進行可回復的發布調整。",
|
|
716
|
+
reloadFlags: "重新載入功能旗標",
|
|
717
|
+
loading: "載入中",
|
|
718
|
+
flagsUnavailable: "功能旗標無法使用",
|
|
719
|
+
flagsUnreachable: "無法連線到工作區目錄。連線可用後請重試。",
|
|
720
|
+
flagsEmpty: "沒有應用程式回報功能旗標",
|
|
721
|
+
flagsEmptyDetail: "連線的應用程式準備就緒後,已註冊旗標會顯示在這裡。",
|
|
722
|
+
flagsNotReady: "此應用程式為 {{status}},不會假定旗標已關閉。",
|
|
723
|
+
noFlagDefinitions: "此應用程式沒有已註冊的旗標定義。",
|
|
724
|
+
noFlagDescription: "未提供說明。",
|
|
725
|
+
selected: "已選取",
|
|
726
|
+
openFlag: "開啟功能旗標",
|
|
727
|
+
confirm: "確認",
|
|
728
|
+
name: "名稱",
|
|
729
|
+
appId: "應用程式 ID",
|
|
730
|
+
flagKey: "功能旗標",
|
|
701
731
|
},
|
|
702
732
|
providerCorpusNotifier: {
|
|
703
733
|
completed: "提供者語料庫作業已完成",
|