@agent-native/core 0.91.2 → 0.92.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +31 -0
- package/corpus/core/docs/content/faq.mdx +17 -0
- package/corpus/core/docs/content/notifications.mdx +12 -6
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/production-agent.ts +140 -46
- package/corpus/core/src/agent/tool-search.ts +71 -4
- package/corpus/core/src/application-state/store.ts +12 -1
- package/corpus/core/src/cli/index.ts +20 -0
- package/corpus/core/src/cli/upgrade.ts +798 -0
- package/corpus/core/src/client/AssistantChat.tsx +28 -15
- package/corpus/core/src/client/HighlightedCodeBlock.tsx +20 -3
- package/corpus/core/src/client/PoweredByBadge.tsx +1 -8
- package/corpus/core/src/client/agent-chat-adapter.ts +68 -16
- package/corpus/core/src/client/chat/message-components.tsx +85 -8
- package/corpus/core/src/client/chat/tool-call-display.tsx +355 -144
- package/corpus/core/src/client/chat/widgets/DataTableWidget.tsx +52 -1
- package/corpus/core/src/client/code-agent-chat-adapter.ts +2 -9
- package/corpus/core/src/client/db-admin/TableEditor.tsx +49 -0
- package/corpus/core/src/client/db-admin/export-utils.ts +13 -4
- package/corpus/core/src/client/db-admin/useAgentSync.ts +72 -0
- package/corpus/core/src/client/error-capture.ts +69 -7
- package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +5 -1
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +53 -8
- package/corpus/core/src/client/extensions/InlineExtensionFrame.tsx +5 -1
- package/corpus/core/src/client/extensions/portable-extension.ts +1 -0
- package/corpus/core/src/client/org/OrgSwitcher.tsx +12 -9
- package/corpus/core/src/client/org/TeamPage.tsx +77 -71
- package/corpus/core/src/client/session-replay.ts +3 -97
- package/corpus/core/src/client/settings/SettingsPanel.tsx +738 -441
- package/corpus/core/src/client/settings/SettingsSection.tsx +161 -17
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +25 -9
- package/corpus/core/src/client/sse-event-processor.ts +29 -2
- package/corpus/core/src/db-admin/agent-tools.ts +8 -2
- package/corpus/core/src/db-admin/operations.ts +116 -4
- package/corpus/core/src/db-admin/routes.ts +1 -0
- package/corpus/core/src/db-admin/types.ts +4 -0
- package/corpus/core/src/extensions/actions.ts +113 -5
- package/corpus/core/src/extensions/html-shell.ts +5 -4
- package/corpus/core/src/extensions/routes.ts +10 -0
- package/corpus/core/src/navigation/index.ts +1 -1
- package/corpus/core/src/notifications/channels.ts +88 -25
- package/corpus/core/src/notifications/registry.ts +17 -3
- package/corpus/core/src/notifications/types.ts +4 -1
- package/corpus/core/src/resources/handlers.ts +10 -8
- package/corpus/core/src/server/agent-chat-plugin.ts +7 -3
- package/corpus/core/src/server/poll.ts +293 -8
- package/corpus/core/src/server/request-context.ts +7 -0
- package/corpus/core/src/styles/agent-conversation.css +1 -1
- package/corpus/core/src/styles/agent-native.css +27 -0
- package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/core/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +7 -0
- package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/core/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/core/src/templates/default/AGENTS.md +14 -5
- package/corpus/core/src/templates/default/package.json +2 -1
- package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/core/src/templates/headless/AGENTS.md +13 -3
- package/corpus/core/src/templates/headless/package.json +1 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/core/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/core/src/templates/workspace-core/AGENTS.md +7 -1
- package/corpus/core/src/templates/workspace-root/AGENTS.md +17 -5
- package/corpus/core/src/templates/workspace-root/package.json +1 -0
- package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +10 -0
- package/corpus/templates/analytics/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/analytics/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +5 -6
- package/corpus/templates/analytics/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/analytics/AGENTS.md +39 -18
- package/corpus/templates/analytics/actions/capture-test-error.ts +4 -0
- package/corpus/templates/analytics/actions/get-analytics-alert-rule-defaults.ts +23 -0
- package/corpus/templates/analytics/actions/get-error-issue.ts +1 -1
- package/corpus/templates/analytics/actions/list-analysis-revisions.ts +40 -0
- package/corpus/templates/analytics/actions/list-dashboard-revisions.ts +40 -0
- package/corpus/templates/analytics/actions/list-dashboard-usage-stats.ts +299 -0
- package/corpus/templates/analytics/actions/navigate.ts +4 -2
- package/corpus/templates/analytics/actions/restore-analysis-revision.ts +43 -0
- package/corpus/templates/analytics/actions/restore-dashboard-revision.ts +68 -0
- package/corpus/templates/analytics/actions/save-analytics-alert-rule.ts +14 -0
- package/corpus/templates/analytics/actions/save-monitor.ts +15 -1
- package/corpus/templates/analytics/actions/view-screen.ts +24 -0
- package/corpus/templates/analytics/app/components/analysis/AnalysisHistoryPanel.tsx +181 -0
- package/corpus/templates/analytics/app/components/dashboard/DashboardHistoryPanel.tsx +184 -0
- package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +41 -6
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +122 -11
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +22 -16
- package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -1
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +27 -21
- package/corpus/templates/analytics/app/hooks/use-analysis-revisions.ts +43 -0
- package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +110 -0
- package/corpus/templates/analytics/app/hooks/use-dashboard-revisions.ts +43 -0
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +8 -3
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +64 -2
- package/corpus/templates/analytics/app/i18n-data.ts +783 -3
- package/corpus/templates/analytics/app/pages/Agents.tsx +359 -19
- package/corpus/templates/analytics/app/pages/Settings.tsx +3 -2
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +34 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +28 -0
- package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +18 -1
- package/corpus/templates/analytics/app/pages/monitoring/ErrorsPanel.tsx +7 -10
- package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +8 -2
- package/corpus/templates/analytics/app/pages/monitoring/errors/IssueDetail.tsx +479 -23
- package/corpus/templates/analytics/app/pages/monitoring/errors/IssueList.tsx +0 -9
- package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +11 -0
- package/corpus/templates/analytics/app/pages/monitoring/errors/types.ts +9 -1
- package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +157 -35
- package/corpus/templates/analytics/app/pages/monitoring/uptime/i18n.ts +17 -2
- package/corpus/templates/analytics/app/pages/monitoring/uptime/types.ts +4 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +80 -220
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +9 -99
- package/corpus/templates/analytics/app/pages/settings/AlertRulesSettingsCard.tsx +262 -104
- package/corpus/templates/analytics/app/routes/team.tsx +1 -1
- package/corpus/templates/analytics/changelog/2026-07-08-admins-can-audit-dashboard-usage-ownership-and-cleanup-signa.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-agent-monitoring-stays-available-to-non-admins.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-alert-rules-are-easier-to-scan-expand-and-edit-from-settings.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-forms-remember-last-email-recipients.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-rules-can-now-use-per-rule-slack-and-webhook.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-dashboard-history-and-chat-context.md +5 -0
- package/corpus/templates/analytics/changelog/2026-07-08-dashboard-tables-keep-their-size-while-loading.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-dashboard-usage-now-counts-explorer-dashboard-traffic.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-demo-mode-session-emails-are-filtered-and-anonymized.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-adds-stack-traces-and-frequency-bars.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-now-shows-the-latest-occurrence-message-a.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-monitoring-errors-only-show-test-action-when-empty.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-monitoring-uptime-and-errors-tabs-now-clearly-show-which-view-is-active.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-production-session-replay-now-requires-private-blob-storage-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-session-replay-uses-stock-rrweb-sizing-again-so-recorded.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-shared-extension-links-now-show-a-clear-message-when-you-do-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-sidebar-dashboard-menus-now-open-above-the-dashboard-canvas.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-team-settings-show-access-controls-next-to-member-lists.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-uptime-alerting-clarifies-in-app-inbox-vs-email-and-lets-you-paste-slack-or-webhook-urls-per-monitor.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-uptime-monitors-now-use-a-10-second-request-timeout-by-defau.md +6 -0
- package/corpus/templates/analytics/docs/uptime-monitoring.md +13 -11
- package/corpus/templates/analytics/server/db/schema-monitoring.ts +5 -1
- package/corpus/templates/analytics/server/db/schema.ts +56 -0
- package/corpus/templates/analytics/server/lib/analytics-alerts.ts +92 -0
- package/corpus/templates/analytics/server/lib/dashboards-store.ts +334 -5
- package/corpus/templates/analytics/server/lib/error-capture.ts +231 -36
- package/corpus/templates/analytics/server/lib/session-replay.ts +114 -8
- package/corpus/templates/analytics/server/lib/uptime-monitors.ts +65 -16
- package/corpus/templates/analytics/server/plugins/db.ts +122 -2
- package/corpus/templates/analytics/server/routes/api/dashboard-agent-context.json.get.ts +1 -0
- package/corpus/templates/assets/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/assets/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/assets/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/assets/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/assets/AGENTS.md +4 -0
- package/corpus/templates/assets/app/routes/settings.tsx +1 -1
- package/corpus/templates/assets/app/routes/team.tsx +1 -1
- package/corpus/templates/brain/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/brain/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/brain/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/brain/AGENTS.md +4 -0
- package/corpus/templates/brain/app/routes/team.tsx +1 -1
- package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/calendar/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/calendar/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/calendar/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/calendar/AGENTS.md +4 -0
- package/corpus/templates/calendar/app/components/calendar/DayView.tsx +11 -2
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +21 -8
- package/corpus/templates/calendar/app/components/calendar/MonthView.tsx +7 -1
- package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +11 -2
- package/corpus/templates/calendar/app/lib/popover-click-guard.ts +48 -4
- package/corpus/templates/calendar/app/pages/Settings.tsx +1 -1
- package/corpus/templates/calendar/app/routes/_app.team.tsx +1 -1
- package/corpus/templates/calendar/changelog/2026-07-08-clicking-empty-calendar-space-closes-an-open-event-popover-b.md +6 -0
- package/corpus/templates/chat/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/chat/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/chat/AGENTS.md +4 -0
- package/corpus/templates/chat/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/chat/app/routes/settings.tsx +2 -2
- package/corpus/templates/chat/app/routes/team.tsx +1 -1
- package/corpus/templates/clips/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/clips/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/clips/AGENTS.md +4 -0
- package/corpus/templates/clips/actions/finalize-recording.ts +9 -3
- package/corpus/templates/clips/actions/set-thumbnail.ts +11 -2
- package/corpus/templates/clips/app/components/meetings/canvas-editor.tsx +1 -7
- package/corpus/templates/clips/app/components/player/player-controls.tsx +21 -13
- package/corpus/templates/clips/app/components/player/video-player.tsx +30 -75
- package/corpus/templates/clips/app/i18n/ar-SA.ts +6 -5
- package/corpus/templates/clips/app/i18n/de-DE.ts +6 -6
- package/corpus/templates/clips/app/i18n/en-US.ts +6 -5
- package/corpus/templates/clips/app/i18n/es-ES.ts +6 -5
- package/corpus/templates/clips/app/i18n/fr-FR.ts +6 -6
- package/corpus/templates/clips/app/i18n/hi-IN.ts +6 -5
- package/corpus/templates/clips/app/i18n/ja-JP.ts +6 -5
- package/corpus/templates/clips/app/i18n/ko-KR.ts +6 -5
- package/corpus/templates/clips/app/i18n/pt-BR.ts +6 -5
- package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -5
- package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -5
- package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +51 -118
- package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-notes-stay-active-from-tray-and-shortcut-controls.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-popovers-can-start-notes-and-join-the-meetin.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-hosted-clip-uploads-now-clear-failed-buffered-chunks.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-hosted-recording-uploads-now-avoid-sql-chunk-storage.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-meeting-notes-keep-their-recording-state-when-the-desktop.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-meeting-recaps-now-keep-summaries-action-items-and-transcrip.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-meeting-reminder-dropdowns-now-expand-fully-instead-of-being.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-video-playback-controls-now-match-loom-style-5-second-skips-.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +123 -3
- package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +15 -1
- package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +23 -0
- package/corpus/templates/clips/desktop/src/styles.css +23 -1
- package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +1 -3
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +40 -6
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +4 -2
- package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +3 -5
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +23 -19
- package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +3 -3
- package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +0 -1
- package/corpus/templates/clips/desktop/src-tauri/src/state.rs +5 -0
- package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +18 -6
- package/corpus/templates/clips/server/lib/recording-upload-state.ts +63 -0
- package/corpus/templates/clips/server/lib/video-storage.ts +4 -0
- package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +19 -13
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +40 -1
- package/corpus/templates/content/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/content/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/content/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/content/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/content/AGENTS.md +4 -0
- package/corpus/templates/content/actions/_batch-utils.ts +8 -0
- package/corpus/templates/content/actions/_builder-cms-read-client.ts +7 -5
- package/corpus/templates/content/actions/_database-source-utils.ts +776 -319
- package/corpus/templates/content/actions/_database-utils.ts +6 -1
- package/corpus/templates/content/actions/_property-utils.ts +168 -0
- package/corpus/templates/content/actions/add-content-database-source-field-property.ts +19 -12
- package/corpus/templates/content/actions/bind-content-database-source-field.ts +19 -12
- package/corpus/templates/content/actions/delete-document.ts +9 -13
- package/corpus/templates/content/actions/refresh-content-database-source.ts +5 -5
- package/corpus/templates/content/app/components/editor/body-hydration.ts +35 -11
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +47 -5
- package/corpus/templates/content/app/hooks/use-documents.ts +8 -2
- package/corpus/templates/content/app/routes/_app.settings.tsx +2 -2
- package/corpus/templates/content/app/routes/_app.team.tsx +1 -1
- package/corpus/templates/content/changelog/2026-07-08-builder-source-sync-now-completes-reliably-on-hosted-databases.md +6 -0
- package/corpus/templates/content/changelog/2026-07-08-fixed-builder-database-sync-so-large-sources-continue-past-t.md +6 -0
- package/corpus/templates/content/server/plugins/db.ts +19 -0
- package/corpus/templates/design/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/design/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/design/AGENTS.md +4 -0
- package/corpus/templates/design/actions/take-design-screenshot.ts +12 -9
- package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +57 -13
- package/corpus/templates/design/app/routes/team.tsx +1 -1
- package/corpus/templates/design/changelog/2026-07-08-local-images-added-to-designs-now-upload-to-file-storage-ins.md +6 -0
- package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/dispatch/AGENTS.md +4 -0
- package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/dispatch/app/routes/settings.tsx +2 -2
- package/corpus/templates/dispatch/app/routes/team.tsx +1 -1
- package/corpus/templates/forms/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/forms/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/forms/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/forms/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/forms/AGENTS.md +4 -0
- package/corpus/templates/forms/app/routes/_app.settings.tsx +2 -2
- package/corpus/templates/forms/app/routes/_app.team.tsx +1 -1
- package/corpus/templates/forms/shared/navigation.ts +1 -1
- package/corpus/templates/macros/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/macros/AGENTS.md +4 -0
- package/corpus/templates/macros/app/routes/settings.tsx +2 -2
- package/corpus/templates/macros/app/routes/team.tsx +1 -1
- package/corpus/templates/mail/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +1 -1
- package/corpus/templates/mail/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/mail/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/mail/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/mail/AGENTS.md +4 -0
- package/corpus/templates/mail/changelog/2026-07-08-mail-attachments-in-hosted-environments-now-require-file-sto.md +6 -0
- package/corpus/templates/mail/server/handlers/media.ts +26 -1
- package/corpus/templates/mail/server/lib/outgoing-email.ts +24 -1
- package/corpus/templates/mail/server/lib/upload-store.ts +2 -1
- package/corpus/templates/plan/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/plan/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/plan/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/plan/AGENTS.md +4 -0
- package/corpus/templates/plan/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/plan/app/routes/settings.tsx +2 -2
- package/corpus/templates/plan/app/routes/team.tsx +1 -1
- package/corpus/templates/plan/changelog/2026-07-08-hosted-plan-images-now-require-connected-storage.md +6 -0
- package/corpus/templates/plan/server/lib/plan-assets.ts +33 -4
- package/corpus/templates/slides/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/slides/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/slides/AGENTS.md +4 -0
- package/corpus/templates/slides/actions/generate-image-api.ts +15 -3
- package/corpus/templates/slides/app/routes/settings.tsx +2 -2
- package/corpus/templates/slides/app/routes/team.tsx +1 -1
- package/corpus/templates/slides/changelog/2026-07-08-generated-slide-images-now-return-hosted-file-storage-urls-i.md +6 -0
- package/corpus/templates/slides/shared/api.ts +1 -1
- package/corpus/templates/videos/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/voice/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/dist/agent/production-agent.d.ts +5 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +112 -42
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/tool-search.d.ts +2 -0
- package/dist/agent/tool-search.d.ts.map +1 -1
- package/dist/agent/tool-search.js +60 -4
- package/dist/agent/tool-search.js.map +1 -1
- package/dist/application-state/store.d.ts.map +1 -1
- package/dist/application-state/store.js +8 -2
- package/dist/application-state/store.js.map +1 -1
- package/dist/cli/index.js +19 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/upgrade.d.ts +100 -0
- package/dist/cli/upgrade.d.ts.map +1 -0
- package/dist/cli/upgrade.js +678 -0
- package/dist/cli/upgrade.js.map +1 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +25 -14
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/HighlightedCodeBlock.d.ts +2 -0
- package/dist/client/HighlightedCodeBlock.d.ts.map +1 -1
- package/dist/client/HighlightedCodeBlock.js +10 -1
- package/dist/client/HighlightedCodeBlock.js.map +1 -1
- package/dist/client/PoweredByBadge.d.ts +1 -1
- package/dist/client/PoweredByBadge.d.ts.map +1 -1
- package/dist/client/PoweredByBadge.js +3 -9
- package/dist/client/PoweredByBadge.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +60 -13
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +61 -8
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +12 -0
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +136 -42
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat/widgets/DataTableWidget.d.ts.map +1 -1
- package/dist/client/chat/widgets/DataTableWidget.js +19 -2
- package/dist/client/chat/widgets/DataTableWidget.js.map +1 -1
- package/dist/client/code-agent-chat-adapter.js +2 -9
- package/dist/client/code-agent-chat-adapter.js.map +1 -1
- package/dist/client/db-admin/TableEditor.d.ts.map +1 -1
- package/dist/client/db-admin/TableEditor.js +19 -2
- package/dist/client/db-admin/TableEditor.js.map +1 -1
- package/dist/client/db-admin/export-utils.d.ts +2 -0
- package/dist/client/db-admin/export-utils.d.ts.map +1 -1
- package/dist/client/db-admin/export-utils.js +11 -3
- package/dist/client/db-admin/export-utils.js.map +1 -1
- package/dist/client/db-admin/useAgentSync.d.ts.map +1 -1
- package/dist/client/db-admin/useAgentSync.js +63 -0
- package/dist/client/db-admin/useAgentSync.js.map +1 -1
- package/dist/client/error-capture.d.ts.map +1 -1
- package/dist/client/error-capture.js +41 -7
- package/dist/client/error-capture.js.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.js +3 -1
- package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +32 -5
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/InlineExtensionFrame.d.ts.map +1 -1
- package/dist/client/extensions/InlineExtensionFrame.js +3 -1
- package/dist/client/extensions/InlineExtensionFrame.js.map +1 -1
- package/dist/client/extensions/portable-extension.d.ts.map +1 -1
- package/dist/client/extensions/portable-extension.js +1 -0
- package/dist/client/extensions/portable-extension.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +1 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +11 -6
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +5 -5
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/session-replay.d.ts +0 -8
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +3 -80
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +89 -33
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsSection.d.ts +19 -4
- package/dist/client/settings/SettingsSection.d.ts.map +1 -1
- package/dist/client/settings/SettingsSection.js +33 -4
- package/dist/client/settings/SettingsSection.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +21 -10
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +9 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +20 -2
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/db-admin/agent-tools.d.ts.map +1 -1
- package/dist/db-admin/agent-tools.js +7 -2
- package/dist/db-admin/agent-tools.js.map +1 -1
- package/dist/db-admin/operations.d.ts.map +1 -1
- package/dist/db-admin/operations.js +90 -4
- package/dist/db-admin/operations.js.map +1 -1
- package/dist/db-admin/routes.d.ts.map +1 -1
- package/dist/db-admin/routes.js +1 -0
- package/dist/db-admin/routes.js.map +1 -1
- package/dist/db-admin/types.d.ts +4 -0
- package/dist/db-admin/types.d.ts.map +1 -1
- package/dist/db-admin/types.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +85 -5
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/html-shell.d.ts +5 -4
- package/dist/extensions/html-shell.d.ts.map +1 -1
- package/dist/extensions/html-shell.js.map +1 -1
- package/dist/extensions/routes.d.ts.map +1 -1
- package/dist/extensions/routes.js +8 -0
- package/dist/extensions/routes.js.map +1 -1
- package/dist/navigation/index.d.ts +1 -1
- package/dist/navigation/index.d.ts.map +1 -1
- package/dist/navigation/index.js +1 -1
- package/dist/navigation/index.js.map +1 -1
- package/dist/notifications/channels.d.ts +8 -3
- package/dist/notifications/channels.d.ts.map +1 -1
- package/dist/notifications/channels.js +61 -22
- package/dist/notifications/channels.js.map +1 -1
- package/dist/notifications/registry.d.ts.map +1 -1
- package/dist/notifications/registry.js +14 -3
- package/dist/notifications/registry.js.map +1 -1
- package/dist/notifications/types.d.ts +4 -1
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/notifications/types.js.map +1 -1
- package/dist/resources/handlers.d.ts +5 -0
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +9 -8
- package/dist/resources/handlers.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +5 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +2 -2
- 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/poll.d.ts +12 -4
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +236 -9
- package/dist/server/poll.js.map +1 -1
- package/dist/server/request-context.d.ts +7 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/styles/agent-conversation.css +1 -1
- package/dist/styles/agent-native.css +27 -0
- package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -0
- package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/dist/templates/default/.agents/skills/security/SKILL.md +7 -0
- package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/dist/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
- package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/dist/templates/default/AGENTS.md +14 -5
- package/dist/templates/default/package.json +2 -1
- package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/dist/templates/headless/AGENTS.md +13 -3
- package/dist/templates/headless/package.json +1 -0
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
- package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
- package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
- package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/dist/templates/workspace-core/AGENTS.md +7 -1
- package/dist/templates/workspace-root/AGENTS.md +17 -5
- package/dist/templates/workspace-root/package.json +1 -0
- package/docs/content/faq.mdx +17 -0
- package/docs/content/notifications.mdx +12 -6
- package/package.json +2 -2
- package/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
- package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/security/SKILL.md +7 -0
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
- package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/src/templates/default/AGENTS.md +14 -5
- package/src/templates/default/package.json +2 -1
- package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/src/templates/headless/AGENTS.md +13 -3
- package/src/templates/headless/package.json +1 -0
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
- package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
- package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
- package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/src/templates/workspace-core/AGENTS.md +7 -1
- package/src/templates/workspace-root/AGENTS.md +17 -5
- package/src/templates/workspace-root/package.json +1 -0
- package/corpus/templates/analytics/changelog/2026-07-08-session-replay-clamps-ultra-wide-viewports-while-keeping-the.md +0 -6
|
@@ -355,7 +355,7 @@ function isAssistantUiDuplicateMessageIdError(error: unknown): boolean {
|
|
|
355
355
|
|
|
356
356
|
function cloneContentParts(content: ContentPart[]): ContentPart[] {
|
|
357
357
|
return content.map((part) =>
|
|
358
|
-
part.type === "text"
|
|
358
|
+
part.type === "text" || part.type === "reasoning"
|
|
359
359
|
? { ...part }
|
|
360
360
|
: {
|
|
361
361
|
...part,
|
|
@@ -1894,7 +1894,9 @@ const AssistantChatInner = forwardRef<
|
|
|
1894
1894
|
repo,
|
|
1895
1895
|
);
|
|
1896
1896
|
} catch {
|
|
1897
|
-
|
|
1897
|
+
// If the runtime/export comparison itself fails, do not fail open by
|
|
1898
|
+
// importing a server snapshot that may be stale relative to local UI.
|
|
1899
|
+
shouldImport = false;
|
|
1898
1900
|
}
|
|
1899
1901
|
if (shouldImport) {
|
|
1900
1902
|
if (options?.markTitleGenerated) {
|
|
@@ -1907,7 +1909,7 @@ const AssistantChatInner = forwardRef<
|
|
|
1907
1909
|
settled = false;
|
|
1908
1910
|
}
|
|
1909
1911
|
}
|
|
1910
|
-
if (Array.isArray(repo?.queuedMessages)) {
|
|
1912
|
+
if (settled && Array.isArray(repo?.queuedMessages)) {
|
|
1911
1913
|
const incomingQueue = repo.queuedMessages as QueuedMessage[];
|
|
1912
1914
|
const incomingSerialized = JSON.stringify(incomingQueue);
|
|
1913
1915
|
const currentSerialized = JSON.stringify(queuedMessagesRef.current);
|
|
@@ -2521,18 +2523,29 @@ const AssistantChatInner = forwardRef<
|
|
|
2521
2523
|
markTitleGenerated: true,
|
|
2522
2524
|
});
|
|
2523
2525
|
if (repo) {
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2526
|
+
let shouldCacheServerSnapshot = true;
|
|
2527
|
+
try {
|
|
2528
|
+
shouldCacheServerSnapshot = shouldImportServerThreadData(
|
|
2529
|
+
normalizeThreadRepository(threadRuntime.export()),
|
|
2530
|
+
repo,
|
|
2531
|
+
);
|
|
2532
|
+
} catch {
|
|
2533
|
+
shouldCacheServerSnapshot = false;
|
|
2534
|
+
}
|
|
2535
|
+
if (shouldCacheServerSnapshot) {
|
|
2536
|
+
const { title, preview } = extractThreadMeta(repo);
|
|
2537
|
+
writeCachedThreadSnapshot(apiUrl, threadId, {
|
|
2538
|
+
threadData:
|
|
2539
|
+
typeof data.threadData === "string"
|
|
2540
|
+
? data.threadData
|
|
2541
|
+
: JSON.stringify(data.threadData),
|
|
2542
|
+
title: data.title || title,
|
|
2543
|
+
preview,
|
|
2544
|
+
messageCount: Array.isArray(repo.messages)
|
|
2545
|
+
? repo.messages.length
|
|
2546
|
+
: 0,
|
|
2547
|
+
});
|
|
2548
|
+
}
|
|
2536
2549
|
}
|
|
2537
2550
|
}
|
|
2538
2551
|
// Also skip title generation if thread already has a title
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
* - A content hash gate means identical re-renders never re-invoke Shiki.
|
|
9
9
|
* - A final highlight is triggered immediately when streaming ends (caller
|
|
10
10
|
* passes streaming=false).
|
|
11
|
+
* - Non-streaming first paint waits for Shiki (invisible placeholder reserves
|
|
12
|
+
* space) so the UI never snaps from plain text to highlighted HTML.
|
|
11
13
|
*
|
|
12
14
|
* Usage:
|
|
13
15
|
* <HighlightedCodeBlock code={code} lang="typescript" containerClass="agent-markdown-shiki" />
|
|
@@ -69,6 +71,7 @@ export function HighlightedCodeBlock({
|
|
|
69
71
|
loadHighlighter,
|
|
70
72
|
}: HighlightedCodeBlockProps): React.ReactElement {
|
|
71
73
|
const [html, setHtml] = useState<string | null>(null);
|
|
74
|
+
const [failed, setFailed] = useState(false);
|
|
72
75
|
// Track the content hash for which html was last rendered so identical
|
|
73
76
|
// re-renders never re-invoke Shiki.
|
|
74
77
|
const renderedHashRef = useRef<number | null>(null);
|
|
@@ -111,12 +114,14 @@ export function HighlightedCodeBlock({
|
|
|
111
114
|
.then((out) => {
|
|
112
115
|
if (!cancelledRef.current) {
|
|
113
116
|
renderedHashRef.current = contentHash;
|
|
117
|
+
setFailed(false);
|
|
114
118
|
setHtml(out as string);
|
|
115
119
|
}
|
|
116
120
|
})
|
|
117
121
|
.catch(() => {
|
|
118
122
|
if (!cancelledRef.current) {
|
|
119
123
|
renderedHashRef.current = contentHash;
|
|
124
|
+
setFailed(true);
|
|
120
125
|
setHtml(null);
|
|
121
126
|
}
|
|
122
127
|
});
|
|
@@ -148,9 +153,21 @@ export function HighlightedCodeBlock({
|
|
|
148
153
|
/>
|
|
149
154
|
);
|
|
150
155
|
}
|
|
156
|
+
|
|
157
|
+
// Streaming: show plain growing text (previous html already kept above when
|
|
158
|
+
// available). Non-streaming first paint: reserve space invisibly so we never
|
|
159
|
+
// flash unhighlighted → highlighted.
|
|
160
|
+
const showPlain = streaming || failed;
|
|
151
161
|
return (
|
|
152
|
-
<
|
|
153
|
-
<
|
|
154
|
-
|
|
162
|
+
<div className={containerClass} aria-busy={!showPlain && !failed}>
|
|
163
|
+
<pre>
|
|
164
|
+
<code
|
|
165
|
+
className={lang ? `language-${lang}` : undefined}
|
|
166
|
+
style={showPlain ? undefined : { visibility: "hidden" }}
|
|
167
|
+
>
|
|
168
|
+
{code}
|
|
169
|
+
</code>
|
|
170
|
+
</pre>
|
|
171
|
+
</div>
|
|
155
172
|
);
|
|
156
173
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { IconBrandGithub } from "@tabler/icons-react";
|
|
2
1
|
import type { CSSProperties } from "react";
|
|
3
2
|
|
|
4
3
|
import { appPath } from "./api-path.js";
|
|
@@ -192,7 +191,7 @@ export function PoweredByBadge({
|
|
|
192
191
|
}
|
|
193
192
|
|
|
194
193
|
/**
|
|
195
|
-
* Small
|
|
194
|
+
* Small badge: "Free and open source"
|
|
196
195
|
*
|
|
197
196
|
* Intended to pair with PoweredByBadge on public pages.
|
|
198
197
|
*/
|
|
@@ -209,11 +208,6 @@ export function OpenSourceBadge({
|
|
|
209
208
|
return (
|
|
210
209
|
<>
|
|
211
210
|
<style>{`
|
|
212
|
-
.an-open-source-badge svg {
|
|
213
|
-
width: 15px;
|
|
214
|
-
height: 15px;
|
|
215
|
-
flex: none;
|
|
216
|
-
}
|
|
217
211
|
.an-open-source-badge {
|
|
218
212
|
background: transparent !important;
|
|
219
213
|
border-color: transparent !important;
|
|
@@ -283,7 +277,6 @@ export function OpenSourceBadge({
|
|
|
283
277
|
: containerStyle(position)
|
|
284
278
|
}
|
|
285
279
|
>
|
|
286
|
-
<IconBrandGithub aria-hidden="true" stroke={1.8} />
|
|
287
280
|
<span>Free and open source</span>
|
|
288
281
|
</a>
|
|
289
282
|
</>
|
|
@@ -196,6 +196,7 @@ function contentToContinuationHistory(content: ContentPart[]): string {
|
|
|
196
196
|
if (part.text.trim()) chunks.push(part.text.trim());
|
|
197
197
|
continue;
|
|
198
198
|
}
|
|
199
|
+
if (part.type === "reasoning") continue;
|
|
199
200
|
if (part.activity === true) continue;
|
|
200
201
|
const toolSummary = [
|
|
201
202
|
`Tool: ${part.toolName}`,
|
|
@@ -577,6 +578,12 @@ function contentToStructuredMessages(
|
|
|
577
578
|
continue;
|
|
578
579
|
}
|
|
579
580
|
|
|
581
|
+
// Reasoning/thinking is UI-only — do not send chain-of-thought back into
|
|
582
|
+
// model history on continuation.
|
|
583
|
+
if (part.type === "reasoning") {
|
|
584
|
+
continue;
|
|
585
|
+
}
|
|
586
|
+
|
|
580
587
|
if (isToolCallContentPart(part)) {
|
|
581
588
|
if (part.activity === true) continue;
|
|
582
589
|
const toolCallId = nextToolCallId();
|
|
@@ -736,11 +743,11 @@ function combineContinuationHistory(fragments: string[]): string {
|
|
|
736
743
|
}
|
|
737
744
|
|
|
738
745
|
function hasContinuationProgress(content: ContentPart[]): boolean {
|
|
739
|
-
return content.some((part) =>
|
|
740
|
-
part.type === "text"
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
);
|
|
746
|
+
return content.some((part) => {
|
|
747
|
+
if (part.type === "text") return part.text.trim().length > 0;
|
|
748
|
+
if (part.type === "reasoning") return false;
|
|
749
|
+
return part.result !== undefined;
|
|
750
|
+
});
|
|
744
751
|
}
|
|
745
752
|
|
|
746
753
|
const COMPLETED_TOOL_TIMEOUT_NAME_RE =
|
|
@@ -880,7 +887,9 @@ function lastUnresolvedToolActivity(
|
|
|
880
887
|
|
|
881
888
|
function snapshotContent(content: ContentPart[]): ContentPart[] {
|
|
882
889
|
return content.map((part) =>
|
|
883
|
-
part.type === "text"
|
|
890
|
+
part.type === "text" || part.type === "reasoning"
|
|
891
|
+
? { ...part }
|
|
892
|
+
: { ...part, args: { ...part.args } },
|
|
884
893
|
);
|
|
885
894
|
}
|
|
886
895
|
|
|
@@ -952,6 +961,22 @@ function contentAfterContinuationPrefix(
|
|
|
952
961
|
return content.slice(contentIndex);
|
|
953
962
|
}
|
|
954
963
|
|
|
964
|
+
if (prefixPart.type === "reasoning" && currentPart.type === "reasoning") {
|
|
965
|
+
if (currentPart.text === prefixPart.text) {
|
|
966
|
+
contentIndex += 1;
|
|
967
|
+
continue;
|
|
968
|
+
}
|
|
969
|
+
if (currentPart.text.startsWith(prefixPart.text)) {
|
|
970
|
+
const appendedText = currentPart.text.slice(prefixPart.text.length);
|
|
971
|
+
if (appendedText) {
|
|
972
|
+
delta.push({ type: "reasoning", text: appendedText });
|
|
973
|
+
}
|
|
974
|
+
contentIndex += 1;
|
|
975
|
+
continue;
|
|
976
|
+
}
|
|
977
|
+
return content.slice(contentIndex);
|
|
978
|
+
}
|
|
979
|
+
|
|
955
980
|
if (
|
|
956
981
|
prefixPart.type === "tool-call" &&
|
|
957
982
|
currentPart.type === "tool-call" &&
|
|
@@ -2251,7 +2276,11 @@ export function createAgentChatAdapter(
|
|
|
2251
2276
|
// ends the turn from the client side.
|
|
2252
2277
|
const followBackgroundTurn = async function* (
|
|
2253
2278
|
initialSignal: AgentAutoContinueSignal,
|
|
2254
|
-
): AsyncGenerator<
|
|
2279
|
+
): AsyncGenerator<
|
|
2280
|
+
ChatModelRunResult,
|
|
2281
|
+
"completed" | "client_continue",
|
|
2282
|
+
unknown
|
|
2283
|
+
> {
|
|
2255
2284
|
lastAutoContinueReason = initialSignal.reason;
|
|
2256
2285
|
if (initialSignal.activityTrail.length > 0) {
|
|
2257
2286
|
lastActivityTrail = [...initialSignal.activityTrail];
|
|
@@ -2285,7 +2314,7 @@ export function createAgentChatAdapter(
|
|
|
2285
2314
|
while (true) {
|
|
2286
2315
|
if (abortSignal.aborted) {
|
|
2287
2316
|
clearActiveRun();
|
|
2288
|
-
return;
|
|
2317
|
+
return "completed";
|
|
2289
2318
|
}
|
|
2290
2319
|
let active: Record<string, unknown> | null = null;
|
|
2291
2320
|
try {
|
|
@@ -2299,7 +2328,7 @@ export function createAgentChatAdapter(
|
|
|
2299
2328
|
} catch (pollErr: unknown) {
|
|
2300
2329
|
if (pollErr instanceof Error && pollErr.name === "AbortError") {
|
|
2301
2330
|
clearActiveRun();
|
|
2302
|
-
return;
|
|
2331
|
+
return "completed";
|
|
2303
2332
|
}
|
|
2304
2333
|
// Transient poll failure — counts as "no active run" this tick.
|
|
2305
2334
|
}
|
|
@@ -2326,8 +2355,25 @@ export function createAgentChatAdapter(
|
|
|
2326
2355
|
const isTerminal =
|
|
2327
2356
|
activeStatus === "completed" || activeStatus === "errored";
|
|
2328
2357
|
if (isTerminal && replayedTerminalRunIds.has(activeRunId)) {
|
|
2358
|
+
if (
|
|
2359
|
+
lastAutoContinueReason === "stale_run" &&
|
|
2360
|
+
lastRecoverableRunError?.errorCode === "stale_run"
|
|
2361
|
+
) {
|
|
2362
|
+
const continuation = prepareAutoContinuation(
|
|
2363
|
+
new AgentAutoContinueSignal({
|
|
2364
|
+
reason: "stale_run",
|
|
2365
|
+
errorInfo: lastRecoverableRunError,
|
|
2366
|
+
activityTrail: lastActivityTrail,
|
|
2367
|
+
}),
|
|
2368
|
+
);
|
|
2369
|
+
if (continuation.ok) {
|
|
2370
|
+
dispatchResumingUiEvent();
|
|
2371
|
+
await delay(250, abortSignal);
|
|
2372
|
+
return "client_continue";
|
|
2373
|
+
}
|
|
2374
|
+
}
|
|
2329
2375
|
yield* emitBackgroundTerminalOutcome(active);
|
|
2330
|
-
return;
|
|
2376
|
+
return "completed";
|
|
2331
2377
|
}
|
|
2332
2378
|
const previousRunId = runId;
|
|
2333
2379
|
runId = activeRunId;
|
|
@@ -2340,7 +2386,7 @@ export function createAgentChatAdapter(
|
|
|
2340
2386
|
}
|
|
2341
2387
|
const attach = yield* followAttachOnce();
|
|
2342
2388
|
if (attach === "completed" || attach === "aborted") {
|
|
2343
|
-
return;
|
|
2389
|
+
return "completed";
|
|
2344
2390
|
}
|
|
2345
2391
|
if (isTerminal) {
|
|
2346
2392
|
replayedTerminalRunIds.add(activeRunId);
|
|
@@ -2362,7 +2408,7 @@ export function createAgentChatAdapter(
|
|
|
2362
2408
|
BACKGROUND_FOLLOW_IDLE_TIMEOUT_MS
|
|
2363
2409
|
) {
|
|
2364
2410
|
yield* emitBackgroundTerminalOutcome(lastSeenActive);
|
|
2365
|
-
return;
|
|
2411
|
+
return "completed";
|
|
2366
2412
|
}
|
|
2367
2413
|
}
|
|
2368
2414
|
dispatchResumingUiEvent();
|
|
@@ -2382,13 +2428,13 @@ export function createAgentChatAdapter(
|
|
|
2382
2428
|
},
|
|
2383
2429
|
);
|
|
2384
2430
|
yield* emitBackgroundTerminalOutcome(lastSeenActive);
|
|
2385
|
-
return;
|
|
2431
|
+
return "completed";
|
|
2386
2432
|
}
|
|
2387
2433
|
}
|
|
2388
2434
|
await delay(BACKGROUND_FOLLOW_POLL_INTERVAL_MS, abortSignal);
|
|
2389
2435
|
if (abortSignal.aborted) {
|
|
2390
2436
|
clearActiveRun();
|
|
2391
|
-
return;
|
|
2437
|
+
return "completed";
|
|
2392
2438
|
}
|
|
2393
2439
|
}
|
|
2394
2440
|
};
|
|
@@ -2978,7 +3024,10 @@ export function createAgentChatAdapter(
|
|
|
2978
3024
|
// client/server recovery race: client watchdog signals here are
|
|
2979
3025
|
// just "reattach", not "recover".
|
|
2980
3026
|
if (shouldFollowServerContinuation(err) && threadId) {
|
|
2981
|
-
yield* followBackgroundTurn(err);
|
|
3027
|
+
const followOutcome = yield* followBackgroundTurn(err);
|
|
3028
|
+
if (followOutcome === "client_continue") {
|
|
3029
|
+
continue;
|
|
3030
|
+
}
|
|
2982
3031
|
return;
|
|
2983
3032
|
}
|
|
2984
3033
|
if (err.reason === "no_progress") {
|
|
@@ -3157,9 +3206,12 @@ export function createAgentChatAdapter(
|
|
|
3157
3206
|
// before any response headers arrived has no dispatch mode yet
|
|
3158
3207
|
// and keeps the foreground startup-retry path.)
|
|
3159
3208
|
if (shouldFollowServerContinuation() && threadId) {
|
|
3160
|
-
yield* followBackgroundTurn(
|
|
3209
|
+
const followOutcome = yield* followBackgroundTurn(
|
|
3161
3210
|
new AgentAutoContinueSignal({ reason: "stream_ended" }),
|
|
3162
3211
|
);
|
|
3212
|
+
if (followOutcome === "client_continue") {
|
|
3213
|
+
continue;
|
|
3214
|
+
}
|
|
3163
3215
|
return;
|
|
3164
3216
|
}
|
|
3165
3217
|
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
ActionBarPrimitive,
|
|
11
11
|
BranchPickerPrimitive,
|
|
12
12
|
ComposerPrimitive,
|
|
13
|
+
useMessagePartReasoning,
|
|
13
14
|
} from "@assistant-ui/react";
|
|
14
15
|
import type { Attachment } from "@assistant-ui/react";
|
|
15
16
|
import {
|
|
@@ -66,6 +67,8 @@ import {
|
|
|
66
67
|
ToolCallFallback,
|
|
67
68
|
FilesChangedSummary,
|
|
68
69
|
ChatRunningContext,
|
|
70
|
+
ReasoningCell,
|
|
71
|
+
WorkedForSummary,
|
|
69
72
|
} from "./tool-call-display.js";
|
|
70
73
|
|
|
71
74
|
// ─── Pending selection context key ───────────────────────────────────────────
|
|
@@ -793,7 +796,7 @@ function assistantMessageHasRenderableContent(message: {
|
|
|
793
796
|
return content.some((part) => {
|
|
794
797
|
if (!part || typeof part !== "object") return false;
|
|
795
798
|
const type = (part as { type?: unknown }).type;
|
|
796
|
-
if (type === "text") {
|
|
799
|
+
if (type === "text" || type === "reasoning") {
|
|
797
800
|
const text = (part as { text?: unknown }).text;
|
|
798
801
|
return typeof text === "string" && text.trim().length > 0;
|
|
799
802
|
}
|
|
@@ -837,6 +840,21 @@ export function shouldShowAssistantMessageFooter({
|
|
|
837
840
|
return !chatRunning && statusIsTerminal;
|
|
838
841
|
}
|
|
839
842
|
|
|
843
|
+
function ReasoningMessagePart() {
|
|
844
|
+
const part = useMessagePartReasoning();
|
|
845
|
+
const isStreaming = part.status?.type === "running";
|
|
846
|
+
return <ReasoningCell text={part.text} isStreaming={isStreaming} />;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
function groupAssistantWorkParts(part: {
|
|
850
|
+
type?: string;
|
|
851
|
+
}): ["group-work"] | null {
|
|
852
|
+
if (part.type === "reasoning" || part.type === "tool-call") {
|
|
853
|
+
return ["group-work"];
|
|
854
|
+
}
|
|
855
|
+
return null;
|
|
856
|
+
}
|
|
857
|
+
|
|
840
858
|
export function AssistantMessage() {
|
|
841
859
|
const [restoreState, setRestoreState] = useState<
|
|
842
860
|
"idle" | "confirming" | "restoring"
|
|
@@ -860,6 +878,39 @@ export function AssistantMessage() {
|
|
|
860
878
|
});
|
|
861
879
|
const cpCtx = React.useContext(CheckpointContext);
|
|
862
880
|
|
|
881
|
+
// Capture live run duration when this message finishes streaming.
|
|
882
|
+
const runStartedAtRef = useRef<number | null>(null);
|
|
883
|
+
const [capturedDurationMs, setCapturedDurationMs] = useState<number | null>(
|
|
884
|
+
null,
|
|
885
|
+
);
|
|
886
|
+
useEffect(() => {
|
|
887
|
+
if (chatRunning && isLast) {
|
|
888
|
+
if (runStartedAtRef.current == null) {
|
|
889
|
+
runStartedAtRef.current = Date.now();
|
|
890
|
+
}
|
|
891
|
+
return;
|
|
892
|
+
}
|
|
893
|
+
if (
|
|
894
|
+
!chatRunning &&
|
|
895
|
+
isLast &&
|
|
896
|
+
runStartedAtRef.current != null &&
|
|
897
|
+
capturedDurationMs == null
|
|
898
|
+
) {
|
|
899
|
+
setCapturedDurationMs(Date.now() - runStartedAtRef.current);
|
|
900
|
+
runStartedAtRef.current = null;
|
|
901
|
+
}
|
|
902
|
+
}, [chatRunning, isLast, capturedDurationMs]);
|
|
903
|
+
|
|
904
|
+
// Animate collapse only when this message just finished running in-session.
|
|
905
|
+
const wasRunningRef = useRef(false);
|
|
906
|
+
const [animateCollapse, setAnimateCollapse] = useState(false);
|
|
907
|
+
useEffect(() => {
|
|
908
|
+
if (wasRunningRef.current && !chatRunning && isComplete && isLast) {
|
|
909
|
+
setAnimateCollapse(true);
|
|
910
|
+
}
|
|
911
|
+
wasRunningRef.current = chatRunning && isLast;
|
|
912
|
+
}, [chatRunning, isComplete, isLast]);
|
|
913
|
+
|
|
863
914
|
const handleRestore = useCallback(async () => {
|
|
864
915
|
if (restoreState === "idle") {
|
|
865
916
|
setRestoreState("confirming");
|
|
@@ -926,6 +977,13 @@ export function AssistantMessage() {
|
|
|
926
977
|
(p.structuredMeta.toolKind === "edit" ||
|
|
927
978
|
p.structuredMeta.toolKind === "write"),
|
|
928
979
|
);
|
|
980
|
+
const hasCollapsibleWork =
|
|
981
|
+
Array.isArray(msgContent) &&
|
|
982
|
+
msgContent.some(
|
|
983
|
+
(p) =>
|
|
984
|
+
p.type === "reasoning" ||
|
|
985
|
+
(p.type === "tool-call" && p.activity !== true),
|
|
986
|
+
);
|
|
929
987
|
|
|
930
988
|
if (!hasRenderableContent) return null;
|
|
931
989
|
|
|
@@ -935,14 +993,33 @@ export function AssistantMessage() {
|
|
|
935
993
|
style={{ contentVisibility: isComplete ? "auto" : "visible" }}
|
|
936
994
|
>
|
|
937
995
|
<div className="w-full max-w-[95%] text-sm leading-relaxed text-foreground">
|
|
938
|
-
<MessagePrimitive.
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
996
|
+
<MessagePrimitive.GroupedParts groupBy={groupAssistantWorkParts}>
|
|
997
|
+
{({ part, children }) => {
|
|
998
|
+
switch (part.type) {
|
|
999
|
+
case "group-work": {
|
|
1000
|
+
const showSummary =
|
|
1001
|
+
isComplete && !chatRunning && hasCollapsibleWork;
|
|
1002
|
+
if (!showSummary) return <>{children}</>;
|
|
1003
|
+
return (
|
|
1004
|
+
<WorkedForSummary
|
|
1005
|
+
durationMs={capturedDurationMs}
|
|
1006
|
+
autoCollapse={animateCollapse}
|
|
1007
|
+
>
|
|
1008
|
+
{children}
|
|
1009
|
+
</WorkedForSummary>
|
|
1010
|
+
);
|
|
1011
|
+
}
|
|
1012
|
+
case "text":
|
|
1013
|
+
return <MarkdownText />;
|
|
1014
|
+
case "reasoning":
|
|
1015
|
+
return <ReasoningMessagePart />;
|
|
1016
|
+
case "tool-call":
|
|
1017
|
+
return part.toolUI ?? <ToolCallFallback {...part} />;
|
|
1018
|
+
default:
|
|
1019
|
+
return null;
|
|
1020
|
+
}
|
|
944
1021
|
}}
|
|
945
|
-
|
|
1022
|
+
</MessagePrimitive.GroupedParts>
|
|
946
1023
|
{isComplete && hasCodeAgentTools && msgContent && (
|
|
947
1024
|
<FilesChangedSummary parts={msgContent} />
|
|
948
1025
|
)}
|