@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
|
@@ -63,6 +63,8 @@ import {
|
|
|
63
63
|
|
|
64
64
|
// Exported so AssistantChatInner can provide a context value.
|
|
65
65
|
export const ChatRunningContext = React.createContext(false);
|
|
66
|
+
export const ChatRunDurationContext = React.createContext<number | null>(null);
|
|
67
|
+
export const ASSISTANT_VISIBLE_TOOL_CALL_LIMIT = 3;
|
|
66
68
|
|
|
67
69
|
/**
|
|
68
70
|
* Human-in-the-loop approval bridge. `AssistantChatInner` provides a value that
|
|
@@ -898,6 +900,7 @@ export function ReconnectStreamMessage({
|
|
|
898
900
|
content: ContentPart[];
|
|
899
901
|
}) {
|
|
900
902
|
const chatRunning = React.useContext(ChatRunningContext);
|
|
903
|
+
const toolSummary = getReconnectToolSummaryInfo(content);
|
|
901
904
|
const latestReasoningPartIndex = content.reduce(
|
|
902
905
|
(latestIndex, part, index) =>
|
|
903
906
|
part.type === "reasoning" ? index : latestIndex,
|
|
@@ -908,61 +911,148 @@ export function ReconnectStreamMessage({
|
|
|
908
911
|
const streamingReasoningPartIndex =
|
|
909
912
|
content.at(-1)?.type === "reasoning" ? content.length - 1 : -1;
|
|
910
913
|
|
|
914
|
+
const renderPart = (part: ContentPart, i: number) => {
|
|
915
|
+
if (part.type === "text") {
|
|
916
|
+
const partStreaming = chatRunning && i === streamingTextPartIndex;
|
|
917
|
+
return (
|
|
918
|
+
<SmoothMarkdownText
|
|
919
|
+
key={`reconnect-text-${i}`}
|
|
920
|
+
text={part.text}
|
|
921
|
+
streaming={partStreaming}
|
|
922
|
+
resetKey={`reconnect-text-${i}`}
|
|
923
|
+
statusType={partStreaming ? "running" : "complete"}
|
|
924
|
+
/>
|
|
925
|
+
);
|
|
926
|
+
}
|
|
927
|
+
if (part.type === "reasoning") {
|
|
928
|
+
return (
|
|
929
|
+
<ReasoningCell
|
|
930
|
+
key={`reconnect-reasoning-${i}`}
|
|
931
|
+
text={part.text}
|
|
932
|
+
isStreaming={chatRunning && i === streamingReasoningPartIndex}
|
|
933
|
+
resetKey={`reconnect-reasoning-${i}`}
|
|
934
|
+
defaultOpen={i === latestReasoningPartIndex}
|
|
935
|
+
collapseWhenReplaced={i < latestReasoningPartIndex}
|
|
936
|
+
/>
|
|
937
|
+
);
|
|
938
|
+
}
|
|
939
|
+
return (
|
|
940
|
+
<ToolCallDisplay
|
|
941
|
+
key={`reconnect-tool-${i}`}
|
|
942
|
+
toolName={part.toolName}
|
|
943
|
+
argsText={part.argsText}
|
|
944
|
+
args={part.args}
|
|
945
|
+
result={part.result}
|
|
946
|
+
mcpApp={part.mcpApp}
|
|
947
|
+
chatUI={part.chatUI}
|
|
948
|
+
structuredMeta={part.structuredMeta}
|
|
949
|
+
isRunning={
|
|
950
|
+
part.result === undefined && (chatRunning || part.activity === true)
|
|
951
|
+
}
|
|
952
|
+
approval={part.approval}
|
|
953
|
+
repeatCount={part.repeatCount}
|
|
954
|
+
/>
|
|
955
|
+
);
|
|
956
|
+
};
|
|
957
|
+
|
|
958
|
+
const renderedParts: React.ReactNode[] = [];
|
|
959
|
+
let summaryStartIndex = -1;
|
|
960
|
+
let summaryToolCount = 0;
|
|
961
|
+
const flushSummary = (endIndex: number) => {
|
|
962
|
+
if (summaryStartIndex < 0) return;
|
|
963
|
+
renderedParts.push(
|
|
964
|
+
<RanToolsSummary
|
|
965
|
+
key={`reconnect-tool-summary-${summaryStartIndex}`}
|
|
966
|
+
toolCount={summaryToolCount}
|
|
967
|
+
>
|
|
968
|
+
{content
|
|
969
|
+
.slice(summaryStartIndex, endIndex)
|
|
970
|
+
.map((part, offset) => renderPart(part, summaryStartIndex + offset))}
|
|
971
|
+
</RanToolsSummary>,
|
|
972
|
+
);
|
|
973
|
+
summaryStartIndex = -1;
|
|
974
|
+
summaryToolCount = 0;
|
|
975
|
+
};
|
|
976
|
+
|
|
977
|
+
for (let i = 0; i < content.length; i++) {
|
|
978
|
+
const part = content[i]!;
|
|
979
|
+
const isOlderToolWork =
|
|
980
|
+
toolSummary.startIndex >= 0 &&
|
|
981
|
+
i < toolSummary.startIndex &&
|
|
982
|
+
isReconnectToolSummaryPart(content, i, toolSummary.startIndex);
|
|
983
|
+
if (isOlderToolWork) {
|
|
984
|
+
summaryStartIndex = summaryStartIndex < 0 ? i : summaryStartIndex;
|
|
985
|
+
if (part.type === "tool-call") summaryToolCount++;
|
|
986
|
+
continue;
|
|
987
|
+
}
|
|
988
|
+
flushSummary(i);
|
|
989
|
+
renderedParts.push(renderPart(part, i));
|
|
990
|
+
}
|
|
991
|
+
flushSummary(content.length);
|
|
992
|
+
|
|
911
993
|
return (
|
|
912
994
|
<div className="flex justify-start">
|
|
913
995
|
<div className="w-full max-w-[95%] text-sm leading-relaxed text-foreground space-y-1">
|
|
914
|
-
{
|
|
915
|
-
if (part.type === "text") {
|
|
916
|
-
const partStreaming = chatRunning && i === streamingTextPartIndex;
|
|
917
|
-
return (
|
|
918
|
-
<SmoothMarkdownText
|
|
919
|
-
key={`reconnect-text-${i}`}
|
|
920
|
-
text={part.text}
|
|
921
|
-
streaming={partStreaming}
|
|
922
|
-
resetKey={`reconnect-text-${i}`}
|
|
923
|
-
statusType={partStreaming ? "running" : "complete"}
|
|
924
|
-
/>
|
|
925
|
-
);
|
|
926
|
-
}
|
|
927
|
-
if (part.type === "reasoning") {
|
|
928
|
-
return (
|
|
929
|
-
<ReasoningCell
|
|
930
|
-
key={`reconnect-reasoning-${i}`}
|
|
931
|
-
text={part.text}
|
|
932
|
-
isStreaming={chatRunning && i === streamingReasoningPartIndex}
|
|
933
|
-
resetKey={`reconnect-reasoning-${i}`}
|
|
934
|
-
defaultOpen={i === latestReasoningPartIndex}
|
|
935
|
-
collapseWhenReplaced={i < latestReasoningPartIndex}
|
|
936
|
-
/>
|
|
937
|
-
);
|
|
938
|
-
}
|
|
939
|
-
if (part.type === "tool-call") {
|
|
940
|
-
return (
|
|
941
|
-
<ToolCallDisplay
|
|
942
|
-
key={`reconnect-tool-${i}`}
|
|
943
|
-
toolName={part.toolName}
|
|
944
|
-
argsText={part.argsText}
|
|
945
|
-
args={part.args}
|
|
946
|
-
result={part.result}
|
|
947
|
-
mcpApp={part.mcpApp}
|
|
948
|
-
chatUI={part.chatUI}
|
|
949
|
-
structuredMeta={part.structuredMeta}
|
|
950
|
-
isRunning={
|
|
951
|
-
part.result === undefined &&
|
|
952
|
-
(chatRunning || part.activity === true)
|
|
953
|
-
}
|
|
954
|
-
approval={part.approval}
|
|
955
|
-
repeatCount={part.repeatCount}
|
|
956
|
-
/>
|
|
957
|
-
);
|
|
958
|
-
}
|
|
959
|
-
return null;
|
|
960
|
-
})}
|
|
996
|
+
{renderedParts}
|
|
961
997
|
</div>
|
|
962
998
|
</div>
|
|
963
999
|
);
|
|
964
1000
|
}
|
|
965
1001
|
|
|
1002
|
+
function getReconnectToolSummaryInfo(content: readonly ContentPart[]) {
|
|
1003
|
+
const toolCallIndices = content.reduce<number[]>((indices, part, index) => {
|
|
1004
|
+
if (part.type === "tool-call" && isReconnectSummarizablePart(part)) {
|
|
1005
|
+
indices.push(index);
|
|
1006
|
+
}
|
|
1007
|
+
return indices;
|
|
1008
|
+
}, []);
|
|
1009
|
+
if (toolCallIndices.length <= ASSISTANT_VISIBLE_TOOL_CALL_LIMIT) {
|
|
1010
|
+
return { startIndex: -1 };
|
|
1011
|
+
}
|
|
1012
|
+
return {
|
|
1013
|
+
startIndex:
|
|
1014
|
+
toolCallIndices[
|
|
1015
|
+
toolCallIndices.length - ASSISTANT_VISIBLE_TOOL_CALL_LIMIT
|
|
1016
|
+
]!,
|
|
1017
|
+
};
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
function isReconnectSummarizablePart(part: ContentPart): boolean {
|
|
1021
|
+
return (
|
|
1022
|
+
part.type === "reasoning" ||
|
|
1023
|
+
(part.type === "tool-call" && part.toolName !== "connect-builder")
|
|
1024
|
+
);
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
function isReconnectToolSummaryPart(
|
|
1028
|
+
content: readonly ContentPart[],
|
|
1029
|
+
index: number,
|
|
1030
|
+
startIndex: number,
|
|
1031
|
+
): boolean {
|
|
1032
|
+
if (startIndex < 0 || index >= startIndex) return false;
|
|
1033
|
+
if (!isReconnectSummarizablePart(content[index]!)) return false;
|
|
1034
|
+
|
|
1035
|
+
let segmentStart = index;
|
|
1036
|
+
while (
|
|
1037
|
+
segmentStart > 0 &&
|
|
1038
|
+
isReconnectSummarizablePart(content[segmentStart - 1]!)
|
|
1039
|
+
) {
|
|
1040
|
+
segmentStart--;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
let segmentEnd = index + 1;
|
|
1044
|
+
while (
|
|
1045
|
+
segmentEnd < startIndex &&
|
|
1046
|
+
isReconnectSummarizablePart(content[segmentEnd]!)
|
|
1047
|
+
) {
|
|
1048
|
+
segmentEnd++;
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
return content
|
|
1052
|
+
.slice(segmentStart, segmentEnd)
|
|
1053
|
+
.some((candidate) => candidate.type === "tool-call");
|
|
1054
|
+
}
|
|
1055
|
+
|
|
966
1056
|
// ─── Reasoning / Thinking cell ────────────────────────────────────────────────
|
|
967
1057
|
|
|
968
1058
|
/**
|
|
@@ -1141,6 +1231,39 @@ export function WorkedForSummary({
|
|
|
1141
1231
|
);
|
|
1142
1232
|
}
|
|
1143
1233
|
|
|
1234
|
+
export function RanToolsSummary({
|
|
1235
|
+
toolCount,
|
|
1236
|
+
children,
|
|
1237
|
+
}: {
|
|
1238
|
+
toolCount: number;
|
|
1239
|
+
children: React.ReactNode;
|
|
1240
|
+
}) {
|
|
1241
|
+
const [open, setOpen] = useState(false);
|
|
1242
|
+
const label = `Ran ${toolCount} ${toolCount === 1 ? "tool" : "tools"}`;
|
|
1243
|
+
|
|
1244
|
+
return (
|
|
1245
|
+
<div className="my-1 w-full">
|
|
1246
|
+
<button
|
|
1247
|
+
type="button"
|
|
1248
|
+
onClick={() => setOpen((v) => !v)}
|
|
1249
|
+
aria-expanded={open}
|
|
1250
|
+
className="flex items-center gap-1.5 py-0.5 text-[13px] text-muted-foreground transition-colors hover:text-foreground"
|
|
1251
|
+
>
|
|
1252
|
+
<span>{label}</span>
|
|
1253
|
+
<IconChevronRight
|
|
1254
|
+
className={cn(
|
|
1255
|
+
"size-3.5 shrink-0 transition-transform",
|
|
1256
|
+
open && "rotate-90",
|
|
1257
|
+
)}
|
|
1258
|
+
/>
|
|
1259
|
+
</button>
|
|
1260
|
+
<AnimatedCollapse open={open}>
|
|
1261
|
+
<div className="pt-1">{children}</div>
|
|
1262
|
+
</AnimatedCollapse>
|
|
1263
|
+
</div>
|
|
1264
|
+
);
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1144
1267
|
// ─── Re-export for AssistantMessage ───────────────────────────────────────────
|
|
1145
1268
|
// AssistantMessage in AssistantChat.tsx uses FilesChangedSummary directly, so
|
|
1146
1269
|
// re-export it so AssistantChat.tsx can import from one place.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { useCallback, useEffect } from "react";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
ACTIVE_RUN_STATE_EVENT,
|
|
5
|
+
getActiveRun,
|
|
6
|
+
type ActiveRunState,
|
|
7
|
+
} from "../active-run-state.js";
|
|
8
|
+
import { trackAgentChatLifecycle } from "../analytics.js";
|
|
9
|
+
|
|
10
|
+
export interface AgentChatLifecycleTrackingOptions {
|
|
11
|
+
surface: string;
|
|
12
|
+
threadId?: string;
|
|
13
|
+
tabId?: string;
|
|
14
|
+
onActiveRunChange?: (active: boolean) => void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function useAgentChatLifecycleTracking({
|
|
18
|
+
surface,
|
|
19
|
+
threadId,
|
|
20
|
+
tabId,
|
|
21
|
+
onActiveRunChange,
|
|
22
|
+
}: AgentChatLifecycleTrackingOptions): (runId?: string) => void {
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
trackAgentChatLifecycle({
|
|
25
|
+
phase: "surface-mounted",
|
|
26
|
+
surface,
|
|
27
|
+
...(threadId ? { threadId } : {}),
|
|
28
|
+
...(tabId ? { tabId } : {}),
|
|
29
|
+
});
|
|
30
|
+
}, [surface, tabId, threadId]);
|
|
31
|
+
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
const sync = (state = getActiveRun()) => {
|
|
34
|
+
const active = Boolean(
|
|
35
|
+
threadId && state?.threadId === threadId && state.runId,
|
|
36
|
+
);
|
|
37
|
+
onActiveRunChange?.(active);
|
|
38
|
+
if (!active || !state) return;
|
|
39
|
+
trackAgentChatLifecycle({
|
|
40
|
+
phase: "run-observed",
|
|
41
|
+
surface,
|
|
42
|
+
threadId: state.threadId,
|
|
43
|
+
runId: state.runId,
|
|
44
|
+
...(tabId ? { tabId } : {}),
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
sync();
|
|
48
|
+
const activeRunHandler = (event: Event) => {
|
|
49
|
+
const state = (event as CustomEvent<{ state?: ActiveRunState | null }>)
|
|
50
|
+
.detail?.state;
|
|
51
|
+
sync(state ?? null);
|
|
52
|
+
};
|
|
53
|
+
const storageHandler = () => sync();
|
|
54
|
+
window.addEventListener(ACTIVE_RUN_STATE_EVENT, activeRunHandler);
|
|
55
|
+
window.addEventListener("storage", storageHandler);
|
|
56
|
+
return () => {
|
|
57
|
+
window.removeEventListener(ACTIVE_RUN_STATE_EVENT, activeRunHandler);
|
|
58
|
+
window.removeEventListener("storage", storageHandler);
|
|
59
|
+
};
|
|
60
|
+
}, [onActiveRunChange, surface, tabId, threadId]);
|
|
61
|
+
|
|
62
|
+
return useCallback(
|
|
63
|
+
(runId?: string) => {
|
|
64
|
+
trackAgentChatLifecycle({
|
|
65
|
+
phase: "run-stopped",
|
|
66
|
+
surface,
|
|
67
|
+
...(threadId ? { threadId } : {}),
|
|
68
|
+
...(runId ? { runId } : {}),
|
|
69
|
+
...(tabId ? { tabId } : {}),
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
[surface, tabId, threadId],
|
|
73
|
+
);
|
|
74
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function hasChatThreadDeepLink(): boolean {
|
|
2
|
+
if (typeof window === "undefined") return false;
|
|
3
|
+
try {
|
|
4
|
+
const params = new URLSearchParams(window.location.search);
|
|
5
|
+
return Boolean(
|
|
6
|
+
params.get("thread")?.trim() || params.get("threadId")?.trim(),
|
|
7
|
+
);
|
|
8
|
+
} catch {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -355,6 +355,18 @@ function shouldIgnoreAutoCapturedError(normalized: {
|
|
|
355
355
|
return true;
|
|
356
356
|
}
|
|
357
357
|
|
|
358
|
+
// Route-chunk recovery reloads the current page after stale lazy chunks or
|
|
359
|
+
// module scripts fail. Browser-level failures have no useful stack, so do
|
|
360
|
+
// not retain the transient loader noise as an application issue.
|
|
361
|
+
if (
|
|
362
|
+
!stack &&
|
|
363
|
+
/^(?:Importing a module script failed\.?|(?:Failed to fetch|error loading) dynamically imported module(?::.*)?)$/i.test(
|
|
364
|
+
message,
|
|
365
|
+
)
|
|
366
|
+
) {
|
|
367
|
+
return true;
|
|
368
|
+
}
|
|
369
|
+
|
|
358
370
|
if (
|
|
359
371
|
normalized.type === "InvalidStateError" &&
|
|
360
372
|
/^Transition was aborted because of invalid state$/i.test(message)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IconPlus } from "@tabler/icons-react";
|
|
2
2
|
import { useQuery, useQueryClient } from "@tanstack/react-query";
|
|
3
|
-
import { useState } from "react";
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
4
|
|
|
5
5
|
import { sendToAgentChat } from "../agent-chat.js";
|
|
6
6
|
import { agentNativePath } from "../api-path.js";
|
|
@@ -49,6 +49,8 @@ export interface ExtensionSlotProps {
|
|
|
49
49
|
className?: string;
|
|
50
50
|
/** Optional className applied to each EmbeddedExtension. */
|
|
51
51
|
toolClassName?: string;
|
|
52
|
+
/** Fires once when the slot query and all installed extensions are ready. */
|
|
53
|
+
onReady?: () => void;
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
/**
|
|
@@ -70,8 +72,11 @@ export function ExtensionSlot({
|
|
|
70
72
|
showEmptyAffordance,
|
|
71
73
|
className,
|
|
72
74
|
toolClassName,
|
|
75
|
+
onReady,
|
|
73
76
|
}: ExtensionSlotProps) {
|
|
74
77
|
const t = useT();
|
|
78
|
+
const readyInstallIds = useRef(new Set<string>());
|
|
79
|
+
const readyNotified = useRef(false);
|
|
75
80
|
const installsQuery = useQuery<SlotInstall[]>({
|
|
76
81
|
queryKey: ["slot-installs", id],
|
|
77
82
|
queryFn: async () => {
|
|
@@ -87,6 +92,35 @@ export function ExtensionSlot({
|
|
|
87
92
|
});
|
|
88
93
|
const installs = installsQuery.data ?? [];
|
|
89
94
|
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
readyInstallIds.current.clear();
|
|
97
|
+
readyNotified.current = false;
|
|
98
|
+
}, [id]);
|
|
99
|
+
|
|
100
|
+
useEffect(() => {
|
|
101
|
+
if (readyNotified.current || installsQuery.isLoading) return;
|
|
102
|
+
if (
|
|
103
|
+
installsQuery.isError ||
|
|
104
|
+
installs.length === 0 ||
|
|
105
|
+
readyInstallIds.current.size >= installs.length
|
|
106
|
+
) {
|
|
107
|
+
readyNotified.current = true;
|
|
108
|
+
onReady?.();
|
|
109
|
+
}
|
|
110
|
+
}, [installs, installsQuery.isError, installsQuery.isLoading, onReady]);
|
|
111
|
+
|
|
112
|
+
const markInstallReady = (installId: string) => {
|
|
113
|
+
readyInstallIds.current.add(installId);
|
|
114
|
+
if (
|
|
115
|
+
!readyNotified.current &&
|
|
116
|
+
!installsQuery.isLoading &&
|
|
117
|
+
readyInstallIds.current.size >= installs.length
|
|
118
|
+
) {
|
|
119
|
+
readyNotified.current = true;
|
|
120
|
+
onReady?.();
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
|
|
90
124
|
if (installsQuery.isLoading) {
|
|
91
125
|
return null;
|
|
92
126
|
}
|
|
@@ -121,6 +155,8 @@ export function ExtensionSlot({
|
|
|
121
155
|
slotId={id}
|
|
122
156
|
context={context}
|
|
123
157
|
className={toolClassName}
|
|
158
|
+
onReady={() => markInstallReady(install.installId)}
|
|
159
|
+
onUnavailable={() => markInstallReady(install.installId)}
|
|
124
160
|
/>
|
|
125
161
|
))}
|
|
126
162
|
</div>
|