@agent-native/core 0.118.0 → 0.119.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 +32 -0
- package/corpus/core/docs/content/a2a-protocol.mdx +15 -0
- package/corpus/core/docs/content/template-chat.mdx +1 -1
- package/corpus/core/docs/content/template-plan.mdx +3 -3
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/activity.ts +371 -0
- package/corpus/core/src/a2a/client.ts +35 -11
- package/corpus/core/src/a2a/index.ts +21 -0
- package/corpus/core/src/a2a/types.ts +8 -0
- package/corpus/core/src/agent/model-config.ts +19 -23
- package/corpus/core/src/agent/production-agent.ts +167 -100
- package/corpus/core/src/agent/types.ts +16 -1
- package/corpus/core/src/cli/index.ts +18 -10
- package/corpus/core/src/cli/multi-frontier-runs.ts +5 -3
- package/corpus/core/src/cli/templates-meta.ts +0 -12
- package/corpus/core/src/cli/workspace-dev.ts +1 -1
- package/corpus/core/src/client/AgentPanel.tsx +9 -1
- package/corpus/core/src/client/RunStuckBanner.tsx +39 -47
- package/corpus/core/src/client/chat/action-chat-ui-surface.tsx +32 -0
- package/corpus/core/src/client/chat/message-components.tsx +53 -8
- package/corpus/core/src/client/chat/tool-call-display.tsx +214 -44
- package/corpus/core/src/client/chat/widgets/InlineExtensionWidget.tsx +0 -1
- package/corpus/core/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
- package/corpus/core/src/client/chat-model-groups.ts +67 -27
- package/corpus/core/src/client/conversation/AgentConversation.tsx +12 -1
- package/corpus/core/src/client/error-capture.ts +2 -6
- package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +20 -14
- package/corpus/core/src/client/resources/ResourcesPanel.tsx +5 -1
- package/corpus/core/src/client/resources/mcp-integration-catalog.ts +7 -17
- package/corpus/core/src/client/resources/mcp-integration-logos.ts +2 -2
- package/corpus/core/src/client/route-chunk-recovery.ts +5 -3
- package/corpus/core/src/client/session-replay.ts +3 -3
- package/corpus/core/src/client/settings/SettingsPanel.tsx +15 -6
- package/corpus/core/src/client/sharing/ShareButton.tsx +1 -27
- package/corpus/core/src/client/sharing/ShareDialog.tsx +0 -16
- package/corpus/core/src/client/sharing/useShareButtonController.ts +0 -7
- package/corpus/core/src/client/sharing/useShareDialogController.ts +0 -2
- package/corpus/core/src/client/sse-event-processor.ts +85 -1
- package/corpus/core/src/client/transcription/use-live-transcription.ts +64 -45
- package/corpus/core/src/deploy/build.ts +2 -1
- package/corpus/core/src/guards/db-tool-scoping.ts +1 -1
- package/corpus/core/src/integrations/adapters/slack.ts +84 -5
- package/corpus/core/src/integrations/index.ts +5 -1
- package/corpus/core/src/localization/default-messages.ts +7 -1
- package/corpus/core/src/mcp-client/oauth-routes.ts +45 -12
- package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +1 -18
- package/corpus/core/src/scripts/call-agent.ts +49 -6
- package/corpus/core/src/server/agent-chat-plugin.ts +50 -10
- package/corpus/core/src/server/realtime-voice.ts +4 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
- package/corpus/core/src/terminal/cli-registry.ts +1 -1
- package/corpus/core/src/vite/client.ts +166 -1
- package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +13 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +10 -0
- package/corpus/templates/analytics/changelog/2026-07-22-show-a-useful-error-when-saving-a-dashboard-view-fails.md +6 -0
- package/corpus/templates/brain/app/routes/sources.tsx +181 -114
- package/corpus/templates/clips/AGENTS.md +8 -6
- package/corpus/templates/clips/actions/request-transcript.ts +90 -420
- package/corpus/templates/clips/actions/save-browser-transcript.ts +11 -28
- package/corpus/templates/clips/app/components/capture-install-options.tsx +5 -3
- package/corpus/templates/clips/app/components/player/transcript-panel.tsx +3 -136
- package/corpus/templates/clips/app/lib/capture-install-options.ts +15 -4
- package/corpus/templates/clips/app/routes/download.tsx +3 -2
- package/corpus/templates/clips/changelog/2026-07-22-fixed-an-intermittent-hydration-error-on-the-download-page.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-fixed-transcript-generation-when-native-speech-capture-retur.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-transcript-generation-now-retries-with-backup-speech-recogni.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-23-fixed-recordings-failing-to-save-with-a-cancelled-or-cleanup.md +6 -0
- package/corpus/templates/clips/server/lib/public-agent-context.ts +2 -2
- package/corpus/templates/clips/server/plugins/db.ts +9 -1
- package/corpus/templates/clips/server/register-secrets.ts +7 -6
- package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +16 -84
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +13 -7
- package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +2 -2
- package/corpus/templates/content/app/i18n-data.ts +10 -0
- package/corpus/templates/design/server/lib/fig-file-decoder.ts +1 -0
- package/corpus/templates/plan/app/entry.client.tsx +3 -0
- package/corpus/templates/plan/changelog/2026-07-22-recover-stale-pages-after-a-deployment-refresh-automatically.md +6 -0
- package/corpus/templates/slides/app/hooks/use-agent-generating.ts +10 -3
- package/corpus/templates/slides/app/pages/Index.tsx +1 -0
- package/corpus/templates/slides/changelog/2026-07-22-new-deck-prompts-now-open-in-their-own-visible-chat-thread.md +6 -0
- package/corpus/toolkit/CHANGELOG.md +9 -0
- package/corpus/toolkit/package.json +1 -1
- package/corpus/toolkit/src/composer/PromptComposer.tsx +5 -1
- package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +119 -31
- package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +30 -0
- package/corpus/toolkit/src/conformance/runner.tsx +153 -1
- package/corpus/toolkit/src/editor/SharedRichEditor.tsx +13 -2
- package/corpus/toolkit/src/editor/SlashCommandMenu.tsx +20 -0
- package/corpus/toolkit/src/editor/index.ts +2 -0
- package/corpus/toolkit/src/styles.css +52 -23
- package/dist/a2a/activity.d.ts +50 -0
- package/dist/a2a/activity.d.ts.map +1 -0
- package/dist/a2a/activity.js +236 -0
- package/dist/a2a/activity.js.map +1 -0
- package/dist/a2a/client.d.ts +5 -1
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +18 -13
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/index.d.ts +2 -1
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +1 -0
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/types.d.ts +1 -0
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/a2a/types.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts +1 -1
- package/dist/agent/engine/builder-engine.d.ts +2 -2
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/model-config.d.ts +16 -16
- package/dist/agent/model-config.d.ts.map +1 -1
- package/dist/agent/model-config.js +19 -23
- package/dist/agent/model-config.js.map +1 -1
- package/dist/agent/production-agent.d.ts +26 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +137 -80
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/types.d.ts +10 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/cli/index.js +18 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/multi-frontier-runs.js +3 -3
- package/dist/cli/multi-frontier-runs.js.map +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +0 -12
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/cli/workspace-dev.js +1 -1
- package/dist/cli/workspace-dev.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +4 -1
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/RunStuckBanner.d.ts +3 -5
- package/dist/client/RunStuckBanner.d.ts.map +1 -1
- package/dist/client/RunStuckBanner.js +17 -18
- package/dist/client/RunStuckBanner.js.map +1 -1
- package/dist/client/chat/action-chat-ui-surface.d.ts +8 -0
- package/dist/client/chat/action-chat-ui-surface.d.ts.map +1 -0
- package/dist/client/chat/action-chat-ui-surface.js +10 -0
- package/dist/client/chat/action-chat-ui-surface.js.map +1 -0
- package/dist/client/chat/message-components.d.ts +3 -0
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +40 -7
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +3 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +76 -23
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat/widgets/InlineExtensionWidget.d.ts.map +1 -1
- package/dist/client/chat/widgets/InlineExtensionWidget.js +1 -1
- package/dist/client/chat/widgets/InlineExtensionWidget.js.map +1 -1
- package/dist/client/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
- package/dist/client/chat/widgets/builtin-tool-renderers.js +5 -3
- package/dist/client/chat/widgets/builtin-tool-renderers.js.map +1 -1
- package/dist/client/chat-model-groups.d.ts.map +1 -1
- package/dist/client/chat-model-groups.js +44 -21
- package/dist/client/chat-model-groups.js.map +1 -1
- package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
- package/dist/client/conversation/AgentConversation.js +3 -2
- package/dist/client/conversation/AgentConversation.js.map +1 -1
- package/dist/client/error-capture.d.ts.map +1 -1
- package/dist/client/error-capture.js +2 -2
- package/dist/client/error-capture.js.map +1 -1
- package/dist/client/resources/McpConnectionSuggestion.d.ts +1 -0
- package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
- package/dist/client/resources/McpConnectionSuggestion.js +9 -8
- package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +3 -1
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.d.ts +1 -0
- package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.js +4 -17
- package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
- package/dist/client/resources/mcp-integration-logos.js +2 -2
- package/dist/client/resources/mcp-integration-logos.js.map +1 -1
- package/dist/client/route-chunk-recovery.d.ts.map +1 -1
- package/dist/client/route-chunk-recovery.js +5 -3
- package/dist/client/route-chunk-recovery.js.map +1 -1
- package/dist/client/session-replay.js +3 -3
- 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 +2 -2
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +1 -1
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +3 -4
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/client/sharing/ShareDialog.js +1 -2
- package/dist/client/sharing/ShareDialog.js.map +1 -1
- package/dist/client/sharing/useShareButtonController.d.ts +0 -1
- package/dist/client/sharing/useShareButtonController.d.ts.map +1 -1
- package/dist/client/sharing/useShareButtonController.js +0 -6
- package/dist/client/sharing/useShareButtonController.js.map +1 -1
- package/dist/client/sharing/useShareDialogController.d.ts +0 -1
- package/dist/client/sharing/useShareDialogController.d.ts.map +1 -1
- package/dist/client/sharing/useShareDialogController.js +0 -1
- package/dist/client/sharing/useShareDialogController.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +12 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +63 -1
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/transcription/use-live-transcription.d.ts +3 -3
- package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
- package/dist/client/transcription/use-live-transcription.js +22 -11
- package/dist/client/transcription/use-live-transcription.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +1 -1
- package/dist/deploy/build.js.map +1 -1
- package/dist/guards/db-tool-scoping.js +1 -1
- package/dist/guards/db-tool-scoping.js.map +1 -1
- package/dist/integrations/adapters/slack.d.ts +1 -0
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +61 -5
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/index.d.ts +1 -1
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +1 -1
- package/dist/integrations/index.js.map +1 -1
- package/dist/localization/default-messages.d.ts +6 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +7 -1
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp-client/oauth-routes.d.ts +3 -0
- package/dist/mcp-client/oauth-routes.d.ts.map +1 -1
- package/dist/mcp-client/oauth-routes.js +41 -12
- package/dist/mcp-client/oauth-routes.js.map +1 -1
- package/dist/observability/routes.d.ts +3 -3
- package/dist/provider-api/actions/custom-provider-registration.d.ts +8 -8
- package/dist/provider-api/actions/provider-api.d.ts +11 -11
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +1 -18
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +49 -6
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/secrets/routes.d.ts +6 -6
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +38 -10
- 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/realtime-voice.d.ts.map +1 -1
- package/dist/server/realtime-voice.js +1 -1
- package/dist/server/realtime-voice.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
- package/dist/terminal/cli-registry.js +1 -1
- package/dist/terminal/cli-registry.js.map +1 -1
- package/dist/vite/client.d.ts +8 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +113 -2
- package/dist/vite/client.js.map +1 -1
- package/docs/content/a2a-protocol.mdx +15 -0
- package/docs/content/template-chat.mdx +1 -1
- package/docs/content/template-plan.mdx +3 -3
- package/package.json +2 -2
- package/src/a2a/activity.ts +371 -0
- package/src/a2a/client.ts +35 -11
- package/src/a2a/index.ts +21 -0
- package/src/a2a/types.ts +8 -0
- package/src/agent/model-config.ts +19 -23
- package/src/agent/production-agent.ts +167 -100
- package/src/agent/types.ts +16 -1
- package/src/cli/index.ts +18 -10
- package/src/cli/multi-frontier-runs.ts +5 -3
- package/src/cli/templates-meta.ts +0 -12
- package/src/cli/workspace-dev.ts +1 -1
- package/src/client/AgentPanel.tsx +9 -1
- package/src/client/RunStuckBanner.tsx +39 -47
- package/src/client/chat/action-chat-ui-surface.tsx +32 -0
- package/src/client/chat/message-components.tsx +53 -8
- package/src/client/chat/tool-call-display.tsx +214 -44
- package/src/client/chat/widgets/InlineExtensionWidget.tsx +0 -1
- package/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
- package/src/client/chat-model-groups.ts +67 -27
- package/src/client/conversation/AgentConversation.tsx +12 -1
- package/src/client/error-capture.ts +2 -6
- package/src/client/resources/McpConnectionSuggestion.tsx +20 -14
- package/src/client/resources/ResourcesPanel.tsx +5 -1
- package/src/client/resources/mcp-integration-catalog.ts +7 -17
- package/src/client/resources/mcp-integration-logos.ts +2 -2
- package/src/client/route-chunk-recovery.ts +5 -3
- package/src/client/session-replay.ts +3 -3
- package/src/client/settings/SettingsPanel.tsx +15 -6
- package/src/client/sharing/ShareButton.tsx +1 -27
- package/src/client/sharing/ShareDialog.tsx +0 -16
- package/src/client/sharing/useShareButtonController.ts +0 -7
- package/src/client/sharing/useShareDialogController.ts +0 -2
- package/src/client/sse-event-processor.ts +85 -1
- package/src/client/transcription/use-live-transcription.ts +64 -45
- package/src/deploy/build.ts +2 -1
- package/src/guards/db-tool-scoping.ts +1 -1
- package/src/integrations/adapters/slack.ts +84 -5
- package/src/integrations/index.ts +5 -1
- package/src/localization/default-messages.ts +7 -1
- package/src/mcp-client/oauth-routes.ts +45 -12
- package/src/scripts/agent-engines/list-agent-engines.ts +1 -18
- package/src/scripts/call-agent.ts +49 -6
- package/src/server/agent-chat-plugin.ts +50 -10
- package/src/server/realtime-voice.ts +4 -1
- package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
- package/src/terminal/cli-registry.ts +1 -1
- package/src/vite/client.ts +166 -1
- package/corpus/core/src/observability/hosted-model-experiment.ts +0 -118
- package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +0 -115
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +0 -177
- package/corpus/templates/crm/.agents/skills/crm/SKILL.md +0 -128
- package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +0 -220
- package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +0 -100
- package/corpus/templates/crm/.env.example +0 -5
- package/corpus/templates/crm/AGENTS.md +0 -120
- package/corpus/templates/crm/CHANGELOG.md +0 -1
- package/corpus/templates/crm/DEVELOPING.md +0 -66
- package/corpus/templates/crm/README.md +0 -106
- package/corpus/templates/crm/_gitignore +0 -12
- package/corpus/templates/crm/actions/_crm-action-utils.ts +0 -87
- package/corpus/templates/crm/actions/_crm-dashboard.ts +0 -69
- package/corpus/templates/crm/actions/_crm-data-program-actions.ts +0 -15
- package/corpus/templates/crm/actions/_crm-signal-utils.ts +0 -79
- package/corpus/templates/crm/actions/apply-crm-proposals.ts +0 -203
- package/corpus/templates/crm/actions/attach-call-evidence.ts +0 -170
- package/corpus/templates/crm/actions/configure-crm-connection.ts +0 -126
- package/corpus/templates/crm/actions/configure-native-crm.ts +0 -44
- package/corpus/templates/crm/actions/create-crm-record.ts +0 -148
- package/corpus/templates/crm/actions/create-crm-signal-tracker.ts +0 -58
- package/corpus/templates/crm/actions/delete-staged-dataset.ts +0 -14
- package/corpus/templates/crm/actions/get-crm-automation-recipe.ts +0 -36
- package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +0 -35
- package/corpus/templates/crm/actions/get-crm-dashboard.ts +0 -14
- package/corpus/templates/crm/actions/get-crm-overview.ts +0 -13
- package/corpus/templates/crm/actions/get-crm-pipeline-data.ts +0 -61
- package/corpus/templates/crm/actions/get-crm-record.ts +0 -75
- package/corpus/templates/crm/actions/install-crm-pipeline-dashboard.ts +0 -81
- package/corpus/templates/crm/actions/list-crm-dashboard-revisions.ts +0 -15
- package/corpus/templates/crm/actions/list-crm-dashboards.ts +0 -15
- package/corpus/templates/crm/actions/list-crm-proposals.ts +0 -31
- package/corpus/templates/crm/actions/list-crm-records.ts +0 -79
- package/corpus/templates/crm/actions/list-crm-saved-views.ts +0 -15
- package/corpus/templates/crm/actions/list-crm-signal-hits.ts +0 -43
- package/corpus/templates/crm/actions/list-crm-signal-trackers.ts +0 -32
- package/corpus/templates/crm/actions/list-crm-tasks.ts +0 -22
- package/corpus/templates/crm/actions/list-staged-datasets.ts +0 -14
- package/corpus/templates/crm/actions/list-workspace-connections.ts +0 -47
- package/corpus/templates/crm/actions/manage-crm-signal-tracker.ts +0 -87
- package/corpus/templates/crm/actions/manage-crm-task.ts +0 -132
- package/corpus/templates/crm/actions/navigate.ts +0 -63
- package/corpus/templates/crm/actions/provider-api-catalog.ts +0 -22
- package/corpus/templates/crm/actions/provider-api-docs.ts +0 -54
- package/corpus/templates/crm/actions/provider-api-request.ts +0 -92
- package/corpus/templates/crm/actions/query-staged-dataset.ts +0 -44
- package/corpus/templates/crm/actions/record-crm-call-insight.ts +0 -160
- package/corpus/templates/crm/actions/record-crm-smart-signal.ts +0 -150
- package/corpus/templates/crm/actions/restore-crm-dashboard-revision.ts +0 -23
- package/corpus/templates/crm/actions/review-crm-signal.ts +0 -31
- package/corpus/templates/crm/actions/run-crm-saved-view-program.ts +0 -103
- package/corpus/templates/crm/actions/run-crm-signal-trackers.ts +0 -275
- package/corpus/templates/crm/actions/run.ts +0 -7
- package/corpus/templates/crm/actions/save-crm-dashboard.ts +0 -51
- package/corpus/templates/crm/actions/save-crm-saved-view.ts +0 -119
- package/corpus/templates/crm/actions/sync-crm.ts +0 -146
- package/corpus/templates/crm/actions/update-crm-record.ts +0 -510
- package/corpus/templates/crm/actions/view-screen.ts +0 -218
- package/corpus/templates/crm/agent-native.app-skill.json +0 -58
- package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +0 -158
- package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +0 -78
- package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +0 -226
- package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +0 -414
- package/corpus/templates/crm/app/components/crm/RecordActions.tsx +0 -510
- package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +0 -134
- package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +0 -362
- package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +0 -93
- package/corpus/templates/crm/app/components/crm/Surface.tsx +0 -97
- package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +0 -180
- package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +0 -112
- package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +0 -84
- package/corpus/templates/crm/app/components/ui/alert-dialog.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/badge.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/button.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/card.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/dialog.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/input.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/label.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/select.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/sheet.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/skeleton.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/switch.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/table.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/tabs.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/textarea.tsx +0 -1
- package/corpus/templates/crm/app/components/ui/toolkit-provider.tsx +0 -17
- package/corpus/templates/crm/app/design-system.ts +0 -3
- package/corpus/templates/crm/app/entry.client.tsx +0 -16
- package/corpus/templates/crm/app/entry.server.tsx +0 -10
- package/corpus/templates/crm/app/global.css +0 -167
- package/corpus/templates/crm/app/hooks/use-navigation-state.ts +0 -60
- package/corpus/templates/crm/app/i18n/en-US.ts +0 -89
- package/corpus/templates/crm/app/i18n/index.ts +0 -34
- package/corpus/templates/crm/app/lib/dashboard.ts +0 -13
- package/corpus/templates/crm/app/lib/navigation.ts +0 -54
- package/corpus/templates/crm/app/lib/tab-id.ts +0 -1
- package/corpus/templates/crm/app/lib/types.ts +0 -172
- package/corpus/templates/crm/app/lib/utils.ts +0 -1
- package/corpus/templates/crm/app/root.tsx +0 -91
- package/corpus/templates/crm/app/routes/_index.tsx +0 -26
- package/corpus/templates/crm/app/routes/accounts.tsx +0 -41
- package/corpus/templates/crm/app/routes/agent.tsx +0 -5
- package/corpus/templates/crm/app/routes/ask.tsx +0 -53
- package/corpus/templates/crm/app/routes/dashboard.tsx +0 -118
- package/corpus/templates/crm/app/routes/opportunities.tsx +0 -41
- package/corpus/templates/crm/app/routes/people.tsx +0 -41
- package/corpus/templates/crm/app/routes/proposals.tsx +0 -266
- package/corpus/templates/crm/app/routes/records.$recordId.tsx +0 -35
- package/corpus/templates/crm/app/routes/settings.tsx +0 -63
- package/corpus/templates/crm/app/routes/setup.tsx +0 -308
- package/corpus/templates/crm/app/routes/tasks.tsx +0 -252
- package/corpus/templates/crm/app/routes/views.tsx +0 -333
- package/corpus/templates/crm/app/routes.ts +0 -17
- package/corpus/templates/crm/app/vite-env.d.ts +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-agent-native-crm.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-clips-call-evidence-review-recipe.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-find-and-review-evidence-grounded-call-signals-w.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-manage-keyword-and-smart-call-signal-trackers-fr.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-delegated-local-crm-automation.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-native-sql.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboard.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboards-now-install-correctly-from-the-crm-actio.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-salesforce-connection.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-22-crm-field-validation-now-explains-which-fields-cannot-be-edi.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-22-fixed-hubspot-contact-syncs-missing-records-updated-after-th.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-22-fixed-pipeline-dashboard-panels-so-their-opportunity-data-lo.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +0 -6
- package/corpus/templates/crm/components.json +0 -20
- package/corpus/templates/crm/docs/architecture/crm-contract.md +0 -180
- package/corpus/templates/crm/learnings.defaults.md +0 -5
- package/corpus/templates/crm/package.json +0 -59
- package/corpus/templates/crm/public/favicon.svg +0 -1
- package/corpus/templates/crm/public/icon-180.svg +0 -1
- package/corpus/templates/crm/public/manifest.json +0 -11
- package/corpus/templates/crm/react-router.config.ts +0 -7
- package/corpus/templates/crm/server/crm/adapter.ts +0 -32
- package/corpus/templates/crm/server/crm/crm-field-firewall.ts +0 -64
- package/corpus/templates/crm/server/crm/crm-mirror.ts +0 -711
- package/corpus/templates/crm/server/crm/hubspot-adapter.ts +0 -1146
- package/corpus/templates/crm/server/crm/native-adapter.ts +0 -1715
- package/corpus/templates/crm/server/crm/read-through.ts +0 -207
- package/corpus/templates/crm/server/crm/salesforce-adapter.ts +0 -1255
- package/corpus/templates/crm/server/db/crm-store.ts +0 -1170
- package/corpus/templates/crm/server/db/index.ts +0 -169
- package/corpus/templates/crm/server/db/schema.ts +0 -441
- package/corpus/templates/crm/server/lib/intelligence/default-detectors.ts +0 -65
- package/corpus/templates/crm/server/lib/intelligence/evidence.ts +0 -105
- package/corpus/templates/crm/server/lib/intelligence/keyword-detector.ts +0 -100
- package/corpus/templates/crm/server/lib/intelligence/smart-detector.ts +0 -144
- package/corpus/templates/crm/server/lib/intelligence/summary.ts +0 -141
- package/corpus/templates/crm/server/lib/provider-api.ts +0 -64
- package/corpus/templates/crm/server/middleware/auth.ts +0 -4
- package/corpus/templates/crm/server/plugins/agent-chat.ts +0 -68
- package/corpus/templates/crm/server/plugins/auth.ts +0 -14
- package/corpus/templates/crm/server/plugins/core-routes.ts +0 -17
- package/corpus/templates/crm/server/plugins/db.ts +0 -454
- package/corpus/templates/crm/server/routes/[...page].get.ts +0 -5
- package/corpus/templates/crm/shared/crm-automation-recipes.ts +0 -132
- package/corpus/templates/crm/shared/crm-contract.ts +0 -254
- package/corpus/templates/crm/shared/crm-sales-config.ts +0 -63
- package/corpus/templates/crm/ssr-entry.ts +0 -11
- package/corpus/templates/crm/tsconfig.json +0 -24
- package/corpus/templates/crm/vite.config.ts +0 -15
- package/corpus/templates/crm/vitest.config.ts +0 -5
- package/dist/observability/hosted-model-experiment.d.ts +0 -39
- package/dist/observability/hosted-model-experiment.d.ts.map +0 -1
- package/dist/observability/hosted-model-experiment.js +0 -90
- package/dist/observability/hosted-model-experiment.js.map +0 -1
- package/src/observability/hosted-model-experiment.ts +0 -118
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createHash, randomUUID } from "node:crypto";
|
|
2
2
|
|
|
3
|
+
import { parseA2AAgentActivityPart } from "../a2a/activity.js";
|
|
3
4
|
import {
|
|
4
5
|
A2ATaskTimeoutError,
|
|
5
6
|
callAgent,
|
|
@@ -271,8 +272,15 @@ export async function run(
|
|
|
271
272
|
: undefined;
|
|
272
273
|
|
|
273
274
|
if (action) {
|
|
275
|
+
const agentCallId = randomUUID();
|
|
276
|
+
const startedAt = Date.now();
|
|
274
277
|
if (context?.send) {
|
|
275
|
-
context.send({
|
|
278
|
+
context.send({
|
|
279
|
+
type: "agent_call",
|
|
280
|
+
agent: agent.name,
|
|
281
|
+
status: "start",
|
|
282
|
+
agentCallId,
|
|
283
|
+
});
|
|
276
284
|
}
|
|
277
285
|
try {
|
|
278
286
|
const output = await invokeReadOnlyAppAction(
|
|
@@ -281,10 +289,24 @@ export async function run(
|
|
|
281
289
|
input as Record<string, unknown>,
|
|
282
290
|
buildDelegationCorrelation(context, selfAppId, randomUUID()),
|
|
283
291
|
);
|
|
292
|
+
if (context?.send && output) {
|
|
293
|
+
context.send({
|
|
294
|
+
type: "agent_call_text",
|
|
295
|
+
agent: agent.name,
|
|
296
|
+
text: output,
|
|
297
|
+
agentCallId,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
284
300
|
return output;
|
|
285
301
|
} finally {
|
|
286
302
|
if (context?.send) {
|
|
287
|
-
context.send({
|
|
303
|
+
context.send({
|
|
304
|
+
type: "agent_call",
|
|
305
|
+
agent: agent.name,
|
|
306
|
+
status: "done",
|
|
307
|
+
agentCallId,
|
|
308
|
+
durationMs: Date.now() - startedAt,
|
|
309
|
+
});
|
|
288
310
|
}
|
|
289
311
|
}
|
|
290
312
|
}
|
|
@@ -363,6 +385,7 @@ export async function run(
|
|
|
363
385
|
|
|
364
386
|
let responseText = "";
|
|
365
387
|
let lastSentLength = 0;
|
|
388
|
+
const agentCallId = randomUUID();
|
|
366
389
|
const existingContinuationText = taskId
|
|
367
390
|
? null
|
|
368
391
|
: await formatExistingIntegrationContinuationIfRetry(agent, message);
|
|
@@ -372,6 +395,7 @@ export async function run(
|
|
|
372
395
|
type: "agent_call",
|
|
373
396
|
agent: agent.name,
|
|
374
397
|
status: "start",
|
|
398
|
+
agentCallId,
|
|
375
399
|
});
|
|
376
400
|
|
|
377
401
|
const emitNewText = (newText: string) => {
|
|
@@ -380,6 +404,7 @@ export async function run(
|
|
|
380
404
|
type: "agent_call_text",
|
|
381
405
|
agent: agent.name,
|
|
382
406
|
text: newText.slice(lastSentLength),
|
|
407
|
+
agentCallId,
|
|
383
408
|
});
|
|
384
409
|
lastSentLength = newText.length;
|
|
385
410
|
}
|
|
@@ -395,9 +420,10 @@ export async function run(
|
|
|
395
420
|
// time we get to the sync fallback, Lambda is dead and the second fetch
|
|
396
421
|
// errors out as "fetch failed". Async+poll has its own short fetches
|
|
397
422
|
// with their own budgets, so it works reliably across hosts. The
|
|
398
|
-
// trade-off is
|
|
399
|
-
//
|
|
400
|
-
//
|
|
423
|
+
// trade-off is that cross-app activity arrives at the poll cadence rather
|
|
424
|
+
// than token-by-token. Agent Native peers attach their current reasoning,
|
|
425
|
+
// tool status, and response preview to each task checkpoint, and the
|
|
426
|
+
// receiver's full response still surfaces below.
|
|
401
427
|
//
|
|
402
428
|
// That trade-off has a second-order cost: callAgent()'s poll (see
|
|
403
429
|
// A2AClient.sendAndWait in a2a/client.ts) can legitimately run for
|
|
@@ -450,8 +476,22 @@ export async function run(
|
|
|
450
476
|
]);
|
|
451
477
|
const callStartedAt = Date.now();
|
|
452
478
|
let lastProgressEmitAt = callStartedAt;
|
|
479
|
+
let lastActivitySequence = -1;
|
|
453
480
|
const onRemotePollUpdate = (task: Task) => {
|
|
454
481
|
const state = task?.status?.state;
|
|
482
|
+
const parts = task.status?.message?.parts;
|
|
483
|
+
const snapshot = Array.isArray(parts)
|
|
484
|
+
? parts.map(parseA2AAgentActivityPart).find((value) => value !== null)
|
|
485
|
+
: undefined;
|
|
486
|
+
if (snapshot && snapshot.sequence > lastActivitySequence) {
|
|
487
|
+
lastActivitySequence = snapshot.sequence;
|
|
488
|
+
context.send!({
|
|
489
|
+
type: "agent_call_activity",
|
|
490
|
+
agent: agent.name,
|
|
491
|
+
agentCallId,
|
|
492
|
+
snapshot,
|
|
493
|
+
});
|
|
494
|
+
}
|
|
455
495
|
if (!state || !ACTIVELY_WORKING_STATES.has(state)) return;
|
|
456
496
|
const now = Date.now();
|
|
457
497
|
if (now - lastProgressEmitAt < PROGRESS_MIN_INTERVAL_MS) return;
|
|
@@ -462,6 +502,7 @@ export async function run(
|
|
|
462
502
|
agent: agent.name,
|
|
463
503
|
state,
|
|
464
504
|
elapsedSeconds: Math.round((now - callStartedAt) / 1000),
|
|
505
|
+
agentCallId,
|
|
465
506
|
...(detail ? { detail } : {}),
|
|
466
507
|
});
|
|
467
508
|
};
|
|
@@ -549,6 +590,8 @@ export async function run(
|
|
|
549
590
|
type: "agent_call",
|
|
550
591
|
agent: agent.name,
|
|
551
592
|
status: "done",
|
|
593
|
+
agentCallId,
|
|
594
|
+
durationMs: Date.now() - callStartedAt,
|
|
552
595
|
});
|
|
553
596
|
|
|
554
597
|
return responseText || "(empty response)";
|
|
@@ -718,7 +761,7 @@ async function enqueueIntegrationContinuationIfPossible(
|
|
|
718
761
|
const MAX_PROGRESS_DETAIL_CHARS = 200;
|
|
719
762
|
function extractRemoteProgressDetail(task: Task): string | undefined {
|
|
720
763
|
const parts = task.status?.message?.parts;
|
|
721
|
-
if (!parts) return undefined;
|
|
764
|
+
if (!Array.isArray(parts)) return undefined;
|
|
722
765
|
const text = parts
|
|
723
766
|
.filter((p): p is { type: "text"; text: string } => p.type === "text")
|
|
724
767
|
.map((p) => p.text)
|
|
@@ -13,6 +13,11 @@ import {
|
|
|
13
13
|
type H3Event,
|
|
14
14
|
} from "h3";
|
|
15
15
|
|
|
16
|
+
import {
|
|
17
|
+
applyA2AAgentActivityEvent,
|
|
18
|
+
buildA2AAgentActivityPart,
|
|
19
|
+
createA2AAgentActivityState,
|
|
20
|
+
} from "../a2a/activity.js";
|
|
16
21
|
import {
|
|
17
22
|
appendA2AArtifactLinks,
|
|
18
23
|
buildA2ARecoverableArtifactMessage,
|
|
@@ -400,6 +405,8 @@ export function createSerializedA2ATaskStatusWriter(
|
|
|
400
405
|
};
|
|
401
406
|
}
|
|
402
407
|
|
|
408
|
+
const A2A_ACTIVITY_CHECKPOINT_MIN_INTERVAL_MS = 2_000;
|
|
409
|
+
|
|
403
410
|
export async function resolveA2ARecoverableArtifactSecret(
|
|
404
411
|
orgId: string | null | undefined = getRequestOrgId(),
|
|
405
412
|
): Promise<string | undefined> {
|
|
@@ -1656,10 +1663,36 @@ export function createAgentChatPlugin(
|
|
|
1656
1663
|
const a2aEvents: AgentChatEvent[] = [];
|
|
1657
1664
|
const a2aToolResults: A2AToolResultSummary[] = [];
|
|
1658
1665
|
let lastRecoverableArtifactText = "";
|
|
1666
|
+
let activityState = createA2AAgentActivityState();
|
|
1667
|
+
let lastActivityCheckpointAt = 0;
|
|
1659
1668
|
const recoverableArtifactSecret =
|
|
1660
1669
|
await resolveA2ARecoverableArtifactSecret();
|
|
1661
1670
|
const recoverableArtifactStatusWriter =
|
|
1662
1671
|
createSerializedA2ATaskStatusWriter(context.taskId);
|
|
1672
|
+
const activityStatusMessage = (): A2AMessage => ({
|
|
1673
|
+
role: "agent",
|
|
1674
|
+
...(lastRecoverableArtifactText
|
|
1675
|
+
? { metadata: { agentNativeRecoverableArtifacts: true } }
|
|
1676
|
+
: {}),
|
|
1677
|
+
parts: [
|
|
1678
|
+
buildA2AAgentActivityPart(activityState),
|
|
1679
|
+
...(lastRecoverableArtifactText
|
|
1680
|
+
? [{ type: "text" as const, text: lastRecoverableArtifactText }]
|
|
1681
|
+
: []),
|
|
1682
|
+
],
|
|
1683
|
+
});
|
|
1684
|
+
const checkpointActivity = (force = false) => {
|
|
1685
|
+
const now = Date.now();
|
|
1686
|
+
if (
|
|
1687
|
+
!force &&
|
|
1688
|
+
now - lastActivityCheckpointAt <
|
|
1689
|
+
A2A_ACTIVITY_CHECKPOINT_MIN_INTERVAL_MS
|
|
1690
|
+
) {
|
|
1691
|
+
return;
|
|
1692
|
+
}
|
|
1693
|
+
lastActivityCheckpointAt = now;
|
|
1694
|
+
recoverableArtifactStatusWriter.enqueue(activityStatusMessage());
|
|
1695
|
+
};
|
|
1663
1696
|
const controller = new AbortController();
|
|
1664
1697
|
const correlation = sanitizeA2ACorrelationMetadata(context.metadata);
|
|
1665
1698
|
const telemetryThreadId =
|
|
@@ -1697,6 +1730,12 @@ export function createAgentChatPlugin(
|
|
|
1697
1730
|
turnId: context.taskId,
|
|
1698
1731
|
send: (event) => {
|
|
1699
1732
|
a2aEvents.push(event);
|
|
1733
|
+
const nextActivityState = applyA2AAgentActivityEvent(
|
|
1734
|
+
activityState,
|
|
1735
|
+
event,
|
|
1736
|
+
);
|
|
1737
|
+
const activityChanged = nextActivityState !== activityState;
|
|
1738
|
+
activityState = nextActivityState;
|
|
1700
1739
|
if (event.type === "tool_start") {
|
|
1701
1740
|
console.log(`[A2A] Tool call: ${event.tool}`);
|
|
1702
1741
|
} else if (event.type === "tool_done") {
|
|
@@ -1727,22 +1766,20 @@ export function createAgentChatPlugin(
|
|
|
1727
1766
|
recoverableArtifactText !== lastRecoverableArtifactText
|
|
1728
1767
|
) {
|
|
1729
1768
|
lastRecoverableArtifactText = recoverableArtifactText;
|
|
1730
|
-
recoverableArtifactStatusWriter.enqueue({
|
|
1731
|
-
role: "agent",
|
|
1732
|
-
metadata: { agentNativeRecoverableArtifacts: true },
|
|
1733
|
-
parts: [
|
|
1734
|
-
{
|
|
1735
|
-
type: "text",
|
|
1736
|
-
text: recoverableArtifactText,
|
|
1737
|
-
},
|
|
1738
|
-
],
|
|
1739
|
-
});
|
|
1740
1769
|
}
|
|
1741
1770
|
} else if (event.type === "error") {
|
|
1742
1771
|
console.error(`[A2A] Error: ${event.error}`);
|
|
1743
1772
|
} else if (event.type === "done") {
|
|
1744
1773
|
console.log(`[A2A] Done. Events: ${a2aEvents.length}`);
|
|
1745
1774
|
}
|
|
1775
|
+
if (activityChanged) {
|
|
1776
|
+
checkpointActivity(
|
|
1777
|
+
event.type === "tool_start" ||
|
|
1778
|
+
event.type === "tool_done" ||
|
|
1779
|
+
event.type === "error" ||
|
|
1780
|
+
event.type === "done",
|
|
1781
|
+
);
|
|
1782
|
+
}
|
|
1746
1783
|
},
|
|
1747
1784
|
signal: controller.signal,
|
|
1748
1785
|
},
|
|
@@ -1779,6 +1816,7 @@ export function createAgentChatPlugin(
|
|
|
1779
1816
|
|
|
1780
1817
|
// The continuation can observe terminal output immediately, so make
|
|
1781
1818
|
// its latest mutation checkpoint durable first.
|
|
1819
|
+
checkpointActivity(true);
|
|
1782
1820
|
await recoverableArtifactStatusWriter.flush();
|
|
1783
1821
|
|
|
1784
1822
|
const approval = [...a2aEvents]
|
|
@@ -1817,6 +1855,7 @@ export function createAgentChatPlugin(
|
|
|
1817
1855
|
},
|
|
1818
1856
|
},
|
|
1819
1857
|
parts: [
|
|
1858
|
+
buildA2AAgentActivityPart(activityState),
|
|
1820
1859
|
{
|
|
1821
1860
|
type: "text" as const,
|
|
1822
1861
|
text:
|
|
@@ -1851,6 +1890,7 @@ export function createAgentChatPlugin(
|
|
|
1851
1890
|
yield {
|
|
1852
1891
|
role: "agent" as const,
|
|
1853
1892
|
parts: [
|
|
1893
|
+
buildA2AAgentActivityPart(activityState),
|
|
1854
1894
|
{
|
|
1855
1895
|
type: "text" as const,
|
|
1856
1896
|
text: finalText || "(no response)",
|
|
@@ -201,7 +201,10 @@ export function resolveRealtimeVoiceReasoningEffort(
|
|
|
201
201
|
): "minimal" | "low" | "medium" {
|
|
202
202
|
const normalized = value?.trim().toLowerCase();
|
|
203
203
|
return normalized &&
|
|
204
|
-
Object.
|
|
204
|
+
Object.prototype.hasOwnProperty.call(
|
|
205
|
+
REALTIME_VOICE_REASONING_EFFORT,
|
|
206
|
+
normalized,
|
|
207
|
+
)
|
|
205
208
|
? REALTIME_VOICE_REASONING_EFFORT[
|
|
206
209
|
normalized as keyof typeof REALTIME_VOICE_REASONING_EFFORT
|
|
207
210
|
]
|
|
@@ -195,6 +195,22 @@ for await (const update of client.stream({
|
|
|
195
195
|
}
|
|
196
196
|
```
|
|
197
197
|
|
|
198
|
+
### Agent activity in delegated chat
|
|
199
|
+
|
|
200
|
+
Agent Native peers attach a bounded `data` part with
|
|
201
|
+
`kind: "agent-native/agent-activity"` to in-progress and terminal task status
|
|
202
|
+
messages. It contains the same user-visible reasoning summaries shown in the
|
|
203
|
+
receiving app, tool names and completion states, elapsed time, and progressive
|
|
204
|
+
response text. It never includes tool inputs, tool results, credentials, or
|
|
205
|
+
hidden provider reasoning.
|
|
206
|
+
|
|
207
|
+
`call-agent` reads this optional part while it polls an asynchronous task and
|
|
208
|
+
renders the remote work as a nested agent run. Unknown A2A peers do not need to
|
|
209
|
+
implement the extension: their ordinary status and final text still render in
|
|
210
|
+
the same nested block. Treat activity data as untrusted presentation content;
|
|
211
|
+
never use it for identity, authorization, approval, routing, or artifact
|
|
212
|
+
validation.
|
|
213
|
+
|
|
198
214
|
### Carrying explicit chat authorization
|
|
199
215
|
|
|
200
216
|
When the authenticated caller has an exact consequential action that the user
|
package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md
CHANGED
|
@@ -57,11 +57,13 @@ action before requesting microphone permission.
|
|
|
57
57
|
controls contain only settings and the separate end-session action.
|
|
58
58
|
- The orb's compact waveform stays visible for the full session and reflects
|
|
59
59
|
actual microphone or assistant audio activity. At silence it rests at its
|
|
60
|
-
baseline instead of turning into a loading spinner.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
baseline instead of turning into a loading spinner. Once connected, a soft,
|
|
61
|
+
slowly rotating blue glow marks the live session; brighten and speed up the
|
|
62
|
+
glow while the agent is working, and keep it static under reduced motion.
|
|
63
|
+
While connecting, show a distinct compact spinner; when the session becomes
|
|
64
|
+
live, the assistant gives one brief spoken greeting so readiness is
|
|
65
|
+
unambiguous. Do not apply a text-sized `max_output_tokens` cap to that audio
|
|
66
|
+
greeting because audio tokens can truncate it mid-sentence.
|
|
65
67
|
- The orb settings cog opens in place without ending voice mode or navigating
|
|
66
68
|
away. Nested pickers must not dismiss the settings popover. Language and
|
|
67
69
|
intelligence update the active Realtime session; the microphone picker swaps
|
|
@@ -42,7 +42,7 @@ export const CLI_REGISTRY: Record<string, CliEntry> = {
|
|
|
42
42
|
|
|
43
43
|
/** Check if a command name is in the CLI_REGISTRY allowlist */
|
|
44
44
|
export function isAllowedCommand(cmd: string): boolean {
|
|
45
|
-
return Object.
|
|
45
|
+
return Object.prototype.hasOwnProperty.call(CLI_REGISTRY, cmd);
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
/** Check if a CLI command exists on PATH (safe — no shell interpolation) */
|
|
@@ -732,7 +732,6 @@ function findCorePackageRoot(cwd: string): string | null {
|
|
|
732
732
|
const candidates = [
|
|
733
733
|
path.resolve(cwd, "../../packages/core"), // templates/<name>/
|
|
734
734
|
path.resolve(cwd, "../core"), // packages/<name>/
|
|
735
|
-
path.resolve(cwd, "node_modules/@agent-native/core"),
|
|
736
735
|
];
|
|
737
736
|
for (const candidate of candidates) {
|
|
738
737
|
try {
|
|
@@ -2315,6 +2314,165 @@ function portExposer(): Plugin {
|
|
|
2315
2314
|
};
|
|
2316
2315
|
}
|
|
2317
2316
|
|
|
2317
|
+
function isNitroEnvironmentUnavailable(error: unknown): boolean {
|
|
2318
|
+
const candidate = error as {
|
|
2319
|
+
name?: unknown;
|
|
2320
|
+
status?: unknown;
|
|
2321
|
+
statusCode?: unknown;
|
|
2322
|
+
message?: unknown;
|
|
2323
|
+
};
|
|
2324
|
+
return (
|
|
2325
|
+
candidate?.name === "NitroViteError" &&
|
|
2326
|
+
(candidate.status === 503 || candidate.statusCode === 503) &&
|
|
2327
|
+
typeof candidate.message === "string" &&
|
|
2328
|
+
/Vite environment .+ is unavailable/.test(candidate.message)
|
|
2329
|
+
);
|
|
2330
|
+
}
|
|
2331
|
+
|
|
2332
|
+
type NitroModuleNode = {
|
|
2333
|
+
id: string | null;
|
|
2334
|
+
ssrError?: Error | null;
|
|
2335
|
+
transformResult: unknown | null;
|
|
2336
|
+
};
|
|
2337
|
+
|
|
2338
|
+
type NitroModuleGraph = {
|
|
2339
|
+
idToModuleMap: Map<string, NitroModuleNode>;
|
|
2340
|
+
};
|
|
2341
|
+
|
|
2342
|
+
const NITRO_STARTUP_SETTLE_MS = 1_000;
|
|
2343
|
+
const NITRO_STARTUP_TIMEOUT_MS = 30_000;
|
|
2344
|
+
|
|
2345
|
+
function nitroModuleGraphSignature(environment: unknown): string | null {
|
|
2346
|
+
const graph = (environment as { moduleGraph?: NitroModuleGraph } | undefined)
|
|
2347
|
+
?.moduleGraph;
|
|
2348
|
+
if (!graph) return null;
|
|
2349
|
+
|
|
2350
|
+
const modules = [...graph.idToModuleMap.values()];
|
|
2351
|
+
const entry = modules.find((module) =>
|
|
2352
|
+
module.id
|
|
2353
|
+
?.replaceAll("\\", "/")
|
|
2354
|
+
.endsWith("/nitro/dist/runtime/internal/vite/dev-entry.mjs"),
|
|
2355
|
+
);
|
|
2356
|
+
if (!entry?.transformResult && !entry?.ssrError) return null;
|
|
2357
|
+
|
|
2358
|
+
let transformed = 0;
|
|
2359
|
+
let errors = 0;
|
|
2360
|
+
for (const module of modules) {
|
|
2361
|
+
if (module.transformResult) transformed += 1;
|
|
2362
|
+
if (module.ssrError) errors += 1;
|
|
2363
|
+
}
|
|
2364
|
+
return `${modules.length}:${transformed}:${errors}`;
|
|
2365
|
+
}
|
|
2366
|
+
|
|
2367
|
+
function isHtmlDocumentRequest(req: IncomingMessage): boolean {
|
|
2368
|
+
return (
|
|
2369
|
+
(req.method === "GET" || req.method === "HEAD") &&
|
|
2370
|
+
(req.headers.accept ?? "").includes("text/html")
|
|
2371
|
+
);
|
|
2372
|
+
}
|
|
2373
|
+
|
|
2374
|
+
function sendNitroStartingResponse(
|
|
2375
|
+
req: IncomingMessage,
|
|
2376
|
+
res: ServerResponse,
|
|
2377
|
+
): void {
|
|
2378
|
+
res.statusCode = 503;
|
|
2379
|
+
res.setHeader("cache-control", "no-store");
|
|
2380
|
+
res.setHeader("content-type", "text/html; charset=utf-8");
|
|
2381
|
+
res.setHeader("retry-after", "1");
|
|
2382
|
+
if (req.method === "HEAD") {
|
|
2383
|
+
res.end();
|
|
2384
|
+
return;
|
|
2385
|
+
}
|
|
2386
|
+
res.end(
|
|
2387
|
+
'<!doctype html><html><head><meta charset="utf-8"><meta http-equiv="refresh" content="0.25"><title>Starting…</title></head><body></body></html>',
|
|
2388
|
+
);
|
|
2389
|
+
}
|
|
2390
|
+
|
|
2391
|
+
function nitroStartupGate(
|
|
2392
|
+
options: {
|
|
2393
|
+
now?: () => number;
|
|
2394
|
+
settleMs?: number;
|
|
2395
|
+
timeoutMs?: number;
|
|
2396
|
+
} = {},
|
|
2397
|
+
): Plugin {
|
|
2398
|
+
return {
|
|
2399
|
+
name: "agent-native-nitro-startup-gate",
|
|
2400
|
+
apply: "serve",
|
|
2401
|
+
enforce: "pre",
|
|
2402
|
+
configureServer(server) {
|
|
2403
|
+
const now = options.now ?? Date.now;
|
|
2404
|
+
const settleMs = options.settleMs ?? NITRO_STARTUP_SETTLE_MS;
|
|
2405
|
+
const timeoutMs = options.timeoutMs ?? NITRO_STARTUP_TIMEOUT_MS;
|
|
2406
|
+
const startedAt = now();
|
|
2407
|
+
let graphSignature: string | null = null;
|
|
2408
|
+
let graphStableAt: number | undefined;
|
|
2409
|
+
let startupComplete = false;
|
|
2410
|
+
|
|
2411
|
+
server.middlewares.use((req, res, next) => {
|
|
2412
|
+
if (startupComplete || !isHtmlDocumentRequest(req)) {
|
|
2413
|
+
next();
|
|
2414
|
+
return;
|
|
2415
|
+
}
|
|
2416
|
+
|
|
2417
|
+
const timestamp = now();
|
|
2418
|
+
if (timestamp - startedAt >= timeoutMs) {
|
|
2419
|
+
startupComplete = true;
|
|
2420
|
+
next();
|
|
2421
|
+
return;
|
|
2422
|
+
}
|
|
2423
|
+
|
|
2424
|
+
const nextGraphSignature = nitroModuleGraphSignature(
|
|
2425
|
+
server.environments?.nitro,
|
|
2426
|
+
);
|
|
2427
|
+
if (nextGraphSignature) {
|
|
2428
|
+
if (nextGraphSignature !== graphSignature) {
|
|
2429
|
+
graphSignature = nextGraphSignature;
|
|
2430
|
+
graphStableAt = timestamp;
|
|
2431
|
+
} else if (
|
|
2432
|
+
graphStableAt !== undefined &&
|
|
2433
|
+
timestamp - graphStableAt >= settleMs
|
|
2434
|
+
) {
|
|
2435
|
+
startupComplete = true;
|
|
2436
|
+
next();
|
|
2437
|
+
return;
|
|
2438
|
+
}
|
|
2439
|
+
} else {
|
|
2440
|
+
graphSignature = null;
|
|
2441
|
+
graphStableAt = undefined;
|
|
2442
|
+
}
|
|
2443
|
+
|
|
2444
|
+
sendNitroStartingResponse(req, res);
|
|
2445
|
+
});
|
|
2446
|
+
},
|
|
2447
|
+
};
|
|
2448
|
+
}
|
|
2449
|
+
|
|
2450
|
+
function nitroStartupRecovery(): Plugin {
|
|
2451
|
+
return {
|
|
2452
|
+
name: "agent-native-nitro-startup-recovery",
|
|
2453
|
+
apply: "serve",
|
|
2454
|
+
configureServer(server) {
|
|
2455
|
+
server.middlewares.use(function nitroStartupErrorRecovery(
|
|
2456
|
+
error: unknown,
|
|
2457
|
+
req: IncomingMessage,
|
|
2458
|
+
res: ServerResponse,
|
|
2459
|
+
next: (error?: unknown) => void,
|
|
2460
|
+
) {
|
|
2461
|
+
if (
|
|
2462
|
+
!isNitroEnvironmentUnavailable(error) ||
|
|
2463
|
+
!isHtmlDocumentRequest(req) ||
|
|
2464
|
+
res.headersSent
|
|
2465
|
+
) {
|
|
2466
|
+
next(error);
|
|
2467
|
+
return;
|
|
2468
|
+
}
|
|
2469
|
+
|
|
2470
|
+
sendNitroStartingResponse(req, res);
|
|
2471
|
+
});
|
|
2472
|
+
},
|
|
2473
|
+
};
|
|
2474
|
+
}
|
|
2475
|
+
|
|
2318
2476
|
/**
|
|
2319
2477
|
* Silence benign connection-reset noise from Vite's dev middleware.
|
|
2320
2478
|
* Fires when a browser closes/reloads/navigates mid-request — the peer has
|
|
@@ -2693,6 +2851,7 @@ function createAgentNativePlugins(
|
|
|
2693
2851
|
embedDevFrameHeaders(),
|
|
2694
2852
|
baseRedirectGuard(),
|
|
2695
2853
|
portExposer(),
|
|
2854
|
+
nitroStartupGate(),
|
|
2696
2855
|
silenceConnectionResets(),
|
|
2697
2856
|
rolldownInputFix(),
|
|
2698
2857
|
// Nitro Vite plugin for dev-mode API route serving and HMR.
|
|
@@ -2702,6 +2861,9 @@ function createAgentNativePlugins(
|
|
|
2702
2861
|
: includeNitro
|
|
2703
2862
|
? [nitroPlugin]
|
|
2704
2863
|
: []),
|
|
2864
|
+
// Nitro can reject the first document request while its Vite environment
|
|
2865
|
+
// is still importing. This error handler must follow Nitro's middleware.
|
|
2866
|
+
nitroStartupRecovery(),
|
|
2705
2867
|
includeReactTransform ? createReactTransformPlugin() : null,
|
|
2706
2868
|
createDesignSystemThemePlugin(options.designSystemTheme),
|
|
2707
2869
|
createTailwindPlugin(options),
|
|
@@ -3096,5 +3258,8 @@ export {
|
|
|
3096
3258
|
getDefaultOptimizeDeps as _getDefaultOptimizeDeps,
|
|
3097
3259
|
findCorePackageRoot as _findCorePackageRoot,
|
|
3098
3260
|
getReactRouterAliases as _getReactRouterAliases,
|
|
3261
|
+
nitroStartupGate as _nitroStartupGate,
|
|
3262
|
+
nitroStartupRecovery as _nitroStartupRecovery,
|
|
3263
|
+
nitroModuleGraphSignature as _nitroModuleGraphSignature,
|
|
3099
3264
|
debounceNitroFullReloadHotUpdate as _debounceNitroFullReloadHotUpdate,
|
|
3100
3265
|
};
|
|
@@ -23,6 +23,18 @@ async function fetchWithAuth(url: string, options?: RequestInit) {
|
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
async function responseError(res: Response, fallback: string): Promise<Error> {
|
|
27
|
+
try {
|
|
28
|
+
const body = (await res.json()) as { error?: unknown };
|
|
29
|
+
if (typeof body.error === "string" && body.error.trim()) {
|
|
30
|
+
return new Error(body.error.trim());
|
|
31
|
+
}
|
|
32
|
+
} catch {
|
|
33
|
+
// Keep the status fallback when the server did not return JSON.
|
|
34
|
+
}
|
|
35
|
+
return new Error(`${fallback}: ${res.status}`);
|
|
36
|
+
}
|
|
37
|
+
|
|
26
38
|
export function useDashboardViews(dashboardId: string | undefined) {
|
|
27
39
|
const queryClient = useQueryClient();
|
|
28
40
|
const queryKey = ["dashboard-views", dashboardId];
|
|
@@ -53,7 +65,7 @@ export function useDashboardViews(dashboardId: string | undefined) {
|
|
|
53
65
|
body: JSON.stringify(view),
|
|
54
66
|
},
|
|
55
67
|
);
|
|
56
|
-
if (!res.ok) throw
|
|
68
|
+
if (!res.ok) throw await responseError(res, "Save failed");
|
|
57
69
|
},
|
|
58
70
|
onSettled: () => {
|
|
59
71
|
queryClient.invalidateQueries({ queryKey });
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
} from "@tabler/icons-react";
|
|
8
8
|
import { useMemo, useState } from "react";
|
|
9
9
|
import { useSearchParams } from "react-router";
|
|
10
|
+
import { toast } from "sonner";
|
|
10
11
|
|
|
11
12
|
import { ResourceLoadError } from "@/components/ResourceLoadError";
|
|
12
13
|
import {
|
|
@@ -147,6 +148,15 @@ export function ViewsMenu({ dashboardId, canEdit = true }: ViewsMenuProps) {
|
|
|
147
148
|
});
|
|
148
149
|
setViewName("");
|
|
149
150
|
setSaveDialogOpen(false);
|
|
151
|
+
} catch (error) {
|
|
152
|
+
toast.error(
|
|
153
|
+
t("sqlDashboard.saveFailedWithMessage", {
|
|
154
|
+
message:
|
|
155
|
+
error instanceof Error
|
|
156
|
+
? error.message
|
|
157
|
+
: t("sqlDashboard.saveFailed"),
|
|
158
|
+
}),
|
|
159
|
+
);
|
|
150
160
|
} finally {
|
|
151
161
|
setSavingView(false);
|
|
152
162
|
}
|