@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,3 +1,5 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
|
|
1
3
|
import Ajv, { type ValidateFunction } from "ajv";
|
|
2
4
|
import {
|
|
3
5
|
defineEventHandler,
|
|
@@ -8,6 +10,8 @@ import {
|
|
|
8
10
|
} from "h3";
|
|
9
11
|
import type { EventHandler as H3EventHandler } from "h3";
|
|
10
12
|
|
|
13
|
+
import { parseA2AAgentActivityPart } from "../a2a/activity.js";
|
|
14
|
+
import type { Task } from "../a2a/types.js";
|
|
11
15
|
import {
|
|
12
16
|
isAgentActionStopError,
|
|
13
17
|
type ActionAutomationContext,
|
|
@@ -1725,6 +1729,159 @@ export async function resolveSkillReferenceContent(
|
|
|
1725
1729
|
}
|
|
1726
1730
|
}
|
|
1727
1731
|
|
|
1732
|
+
export function createConnectedAgentReferenceEventRelay(input: {
|
|
1733
|
+
agent: string;
|
|
1734
|
+
send: (event: AgentChatEvent) => void;
|
|
1735
|
+
agentCallId?: string;
|
|
1736
|
+
now?: () => number;
|
|
1737
|
+
}) {
|
|
1738
|
+
const agentCallId = input.agentCallId ?? randomUUID();
|
|
1739
|
+
const now = input.now ?? Date.now;
|
|
1740
|
+
const startedAt = now();
|
|
1741
|
+
let lastActivitySequence = -1;
|
|
1742
|
+
let hasRichActivity = false;
|
|
1743
|
+
|
|
1744
|
+
const emitResponseText = (text: string) => {
|
|
1745
|
+
if (text) {
|
|
1746
|
+
input.send({
|
|
1747
|
+
type: "agent_call_text",
|
|
1748
|
+
agent: input.agent,
|
|
1749
|
+
text,
|
|
1750
|
+
agentCallId,
|
|
1751
|
+
});
|
|
1752
|
+
}
|
|
1753
|
+
};
|
|
1754
|
+
const observeActivity = (task: Task) => {
|
|
1755
|
+
const parts = task.status?.message?.parts;
|
|
1756
|
+
const snapshot = Array.isArray(parts)
|
|
1757
|
+
? parts.map(parseA2AAgentActivityPart).find((value) => value !== null)
|
|
1758
|
+
: undefined;
|
|
1759
|
+
if (snapshot) {
|
|
1760
|
+
hasRichActivity = true;
|
|
1761
|
+
}
|
|
1762
|
+
if (snapshot && snapshot.sequence > lastActivitySequence) {
|
|
1763
|
+
lastActivitySequence = snapshot.sequence;
|
|
1764
|
+
input.send({
|
|
1765
|
+
type: "agent_call_activity",
|
|
1766
|
+
agent: input.agent,
|
|
1767
|
+
agentCallId,
|
|
1768
|
+
snapshot,
|
|
1769
|
+
});
|
|
1770
|
+
}
|
|
1771
|
+
};
|
|
1772
|
+
const observePollUpdate = (task: Task) => {
|
|
1773
|
+
observeActivity(task);
|
|
1774
|
+
if (hasRichActivity) return;
|
|
1775
|
+
|
|
1776
|
+
const state = task.status?.state;
|
|
1777
|
+
if (
|
|
1778
|
+
state !== "submitted" &&
|
|
1779
|
+
state !== "working" &&
|
|
1780
|
+
state !== "processing"
|
|
1781
|
+
) {
|
|
1782
|
+
return;
|
|
1783
|
+
}
|
|
1784
|
+
const currentTime = now();
|
|
1785
|
+
const detail = extractConnectedAgentProgressDetail(task);
|
|
1786
|
+
input.send({
|
|
1787
|
+
type: "agent_call_progress",
|
|
1788
|
+
agent: input.agent,
|
|
1789
|
+
agentCallId,
|
|
1790
|
+
state,
|
|
1791
|
+
elapsedSeconds: Math.max(0, Math.round((currentTime - startedAt) / 1000)),
|
|
1792
|
+
...(detail ? { detail } : {}),
|
|
1793
|
+
});
|
|
1794
|
+
};
|
|
1795
|
+
|
|
1796
|
+
return {
|
|
1797
|
+
agentCallId,
|
|
1798
|
+
start() {
|
|
1799
|
+
input.send({
|
|
1800
|
+
type: "agent_call",
|
|
1801
|
+
agent: input.agent,
|
|
1802
|
+
status: "start",
|
|
1803
|
+
agentCallId,
|
|
1804
|
+
});
|
|
1805
|
+
},
|
|
1806
|
+
observeActivity,
|
|
1807
|
+
observePollUpdate,
|
|
1808
|
+
emitResponseText,
|
|
1809
|
+
finish(status: "done" | "error") {
|
|
1810
|
+
input.send({
|
|
1811
|
+
type: "agent_call",
|
|
1812
|
+
agent: input.agent,
|
|
1813
|
+
status,
|
|
1814
|
+
agentCallId,
|
|
1815
|
+
durationMs: Math.max(0, now() - startedAt),
|
|
1816
|
+
});
|
|
1817
|
+
},
|
|
1818
|
+
};
|
|
1819
|
+
}
|
|
1820
|
+
|
|
1821
|
+
type ConnectedAgentCall = typeof import("../a2a/client.js").callAgent;
|
|
1822
|
+
type ResolveConnectedAgentCallerAuth =
|
|
1823
|
+
typeof import("../a2a/caller-auth.js").resolveA2ACallerAuth;
|
|
1824
|
+
|
|
1825
|
+
export async function callConnectedAgentReference(input: {
|
|
1826
|
+
agent: string;
|
|
1827
|
+
path: string;
|
|
1828
|
+
message: string;
|
|
1829
|
+
send: (event: AgentChatEvent) => void;
|
|
1830
|
+
callAgent: ConnectedAgentCall;
|
|
1831
|
+
resolveCallerAuth: ResolveConnectedAgentCallerAuth;
|
|
1832
|
+
agentCallId?: string;
|
|
1833
|
+
now?: () => number;
|
|
1834
|
+
}): Promise<string> {
|
|
1835
|
+
const relay = createConnectedAgentReferenceEventRelay({
|
|
1836
|
+
agent: input.agent,
|
|
1837
|
+
send: input.send,
|
|
1838
|
+
agentCallId: input.agentCallId,
|
|
1839
|
+
now: input.now,
|
|
1840
|
+
});
|
|
1841
|
+
relay.start();
|
|
1842
|
+
try {
|
|
1843
|
+
const callerAuth = await input.resolveCallerAuth({
|
|
1844
|
+
includeGoogleToken: true,
|
|
1845
|
+
});
|
|
1846
|
+
const response = await input.callAgent(input.path, input.message, {
|
|
1847
|
+
async: true,
|
|
1848
|
+
apiKey: callerAuth.apiKey,
|
|
1849
|
+
metadata: callerAuth.metadata,
|
|
1850
|
+
userEmail: callerAuth.userEmail,
|
|
1851
|
+
orgDomain: callerAuth.orgDomain,
|
|
1852
|
+
orgSecret: callerAuth.orgSecret,
|
|
1853
|
+
onUpdate: relay.observePollUpdate,
|
|
1854
|
+
});
|
|
1855
|
+
const responseText =
|
|
1856
|
+
userFacingLlmCredentialError(response, { agentName: input.agent }) ??
|
|
1857
|
+
response;
|
|
1858
|
+
relay.emitResponseText(responseText);
|
|
1859
|
+
relay.finish("done");
|
|
1860
|
+
return responseText;
|
|
1861
|
+
} catch (error) {
|
|
1862
|
+
relay.finish("error");
|
|
1863
|
+
throw error;
|
|
1864
|
+
}
|
|
1865
|
+
}
|
|
1866
|
+
|
|
1867
|
+
const MAX_CONNECTED_AGENT_PROGRESS_DETAIL_CHARS = 200;
|
|
1868
|
+
function extractConnectedAgentProgressDetail(task: Task): string | undefined {
|
|
1869
|
+
const parts = task.status?.message?.parts;
|
|
1870
|
+
if (!Array.isArray(parts)) return undefined;
|
|
1871
|
+
const text = parts
|
|
1872
|
+
.filter(
|
|
1873
|
+
(part): part is { type: "text"; text: string } => part.type === "text",
|
|
1874
|
+
)
|
|
1875
|
+
.map((part) => part.text)
|
|
1876
|
+
.join(" ")
|
|
1877
|
+
.replace(/\s+/g, " ")
|
|
1878
|
+
.trim();
|
|
1879
|
+
if (!text) return undefined;
|
|
1880
|
+
return text.length > MAX_CONNECTED_AGENT_PROGRESS_DETAIL_CHARS
|
|
1881
|
+
? `${text.slice(0, MAX_CONNECTED_AGENT_PROGRESS_DETAIL_CHARS - 1)}…`
|
|
1882
|
+
: text;
|
|
1883
|
+
}
|
|
1884
|
+
|
|
1728
1885
|
async function enrichMessage(
|
|
1729
1886
|
message: string,
|
|
1730
1887
|
references: AgentChatReference[],
|
|
@@ -6700,22 +6857,6 @@ export function createProductionAgentHandler(
|
|
|
6700
6857
|
modelSelectionSource = "experiment";
|
|
6701
6858
|
}
|
|
6702
6859
|
}
|
|
6703
|
-
|
|
6704
|
-
if (modelSelectionSource === "default") {
|
|
6705
|
-
const { resolveHostedDefaultModelExperiment } =
|
|
6706
|
-
await import("../observability/hosted-model-experiment.js");
|
|
6707
|
-
const hostedExperiment = resolveHostedDefaultModelExperiment({
|
|
6708
|
-
userId: ownerEmail,
|
|
6709
|
-
engineName: engine.name,
|
|
6710
|
-
isDefaultModelSelection: true,
|
|
6711
|
-
supportedModels: engine.supportedModels,
|
|
6712
|
-
});
|
|
6713
|
-
if (hostedExperiment) {
|
|
6714
|
-
effectiveModel = hostedExperiment.model;
|
|
6715
|
-
experimentAssignments.push(hostedExperiment.assignment);
|
|
6716
|
-
modelSelectionSource = "experiment";
|
|
6717
|
-
}
|
|
6718
|
-
}
|
|
6719
6860
|
}
|
|
6720
6861
|
} catch {
|
|
6721
6862
|
// Experiments are best-effort. Model resolution must keep working if the
|
|
@@ -8015,97 +8156,23 @@ export function createProductionAgentHandler(
|
|
|
8015
8156
|
|
|
8016
8157
|
// Resolve connected agent @-mentions via A2A calls.
|
|
8017
8158
|
if (agentRefs.length > 0 && requestMode !== "plan") {
|
|
8018
|
-
const [{
|
|
8019
|
-
|
|
8020
|
-
|
|
8021
|
-
|
|
8022
|
-
]);
|
|
8159
|
+
const [{ callAgent }, { resolveA2ACallerAuth }] = await Promise.all([
|
|
8160
|
+
import("../a2a/client.js"),
|
|
8161
|
+
import("../a2a/caller-auth.js"),
|
|
8162
|
+
]);
|
|
8023
8163
|
const results = await Promise.allSettled(
|
|
8024
8164
|
agentRefs.map(async (ref) => {
|
|
8025
|
-
send({
|
|
8026
|
-
type: "agent_call",
|
|
8027
|
-
agent: ref.name,
|
|
8028
|
-
status: "start",
|
|
8029
|
-
});
|
|
8030
8165
|
try {
|
|
8031
|
-
const
|
|
8032
|
-
includeGoogleToken: true,
|
|
8033
|
-
});
|
|
8034
|
-
const a2aClient = new A2AClient(ref.path, callerAuth.apiKey, {
|
|
8035
|
-
...(callerAuth.apiKeyFallbacks
|
|
8036
|
-
? { fallbackApiKeys: callerAuth.apiKeyFallbacks }
|
|
8037
|
-
: {}),
|
|
8038
|
-
});
|
|
8039
|
-
const a2aMetadata = callerAuth.metadata;
|
|
8040
|
-
|
|
8041
|
-
let responseText = "";
|
|
8042
|
-
let lastSentLength = 0;
|
|
8043
|
-
|
|
8044
|
-
try {
|
|
8045
|
-
for await (const task of a2aClient.stream(
|
|
8046
|
-
{
|
|
8047
|
-
role: "user",
|
|
8048
|
-
parts: [
|
|
8049
|
-
{
|
|
8050
|
-
type: "text",
|
|
8051
|
-
text: enrichedMessage + screenContext,
|
|
8052
|
-
},
|
|
8053
|
-
],
|
|
8054
|
-
},
|
|
8055
|
-
Object.keys(a2aMetadata).length > 0
|
|
8056
|
-
? { metadata: a2aMetadata }
|
|
8057
|
-
: undefined,
|
|
8058
|
-
)) {
|
|
8059
|
-
const newText =
|
|
8060
|
-
task.status?.message?.parts
|
|
8061
|
-
?.filter(
|
|
8062
|
-
(p): p is { type: "text"; text: string } =>
|
|
8063
|
-
p.type === "text",
|
|
8064
|
-
)
|
|
8065
|
-
?.map((p) => p.text)
|
|
8066
|
-
?.join("") ?? "";
|
|
8067
|
-
|
|
8068
|
-
if (newText.length > lastSentLength) {
|
|
8069
|
-
send({
|
|
8070
|
-
type: "agent_call_text",
|
|
8071
|
-
agent: ref.name,
|
|
8072
|
-
text: newText.slice(lastSentLength),
|
|
8073
|
-
});
|
|
8074
|
-
lastSentLength = newText.length;
|
|
8075
|
-
}
|
|
8076
|
-
responseText = newText;
|
|
8077
|
-
}
|
|
8078
|
-
} catch {
|
|
8079
|
-
if (!responseText) {
|
|
8080
|
-
responseText = await callAgent(
|
|
8081
|
-
ref.path,
|
|
8082
|
-
enrichedMessage + screenContext,
|
|
8083
|
-
{
|
|
8084
|
-
apiKey: callerAuth.apiKey,
|
|
8085
|
-
userEmail: callerAuth.userEmail,
|
|
8086
|
-
orgDomain: callerAuth.orgDomain,
|
|
8087
|
-
orgSecret: callerAuth.orgSecret,
|
|
8088
|
-
},
|
|
8089
|
-
);
|
|
8090
|
-
}
|
|
8091
|
-
}
|
|
8092
|
-
responseText =
|
|
8093
|
-
userFacingLlmCredentialError(responseText, {
|
|
8094
|
-
agentName: ref.name,
|
|
8095
|
-
}) ?? responseText;
|
|
8096
|
-
|
|
8097
|
-
send({
|
|
8098
|
-
type: "agent_call",
|
|
8166
|
+
const responseText = await callConnectedAgentReference({
|
|
8099
8167
|
agent: ref.name,
|
|
8100
|
-
|
|
8168
|
+
path: ref.path,
|
|
8169
|
+
message: enrichedMessage + screenContext,
|
|
8170
|
+
send,
|
|
8171
|
+
callAgent,
|
|
8172
|
+
resolveCallerAuth: resolveA2ACallerAuth,
|
|
8101
8173
|
});
|
|
8102
8174
|
return `<agent-response name="${ref.name}" id="${ref.refId}">\n${responseText}\n</agent-response>`;
|
|
8103
8175
|
} catch (err: any) {
|
|
8104
|
-
send({
|
|
8105
|
-
type: "agent_call",
|
|
8106
|
-
agent: ref.name,
|
|
8107
|
-
status: "error",
|
|
8108
|
-
});
|
|
8109
8176
|
const message =
|
|
8110
8177
|
userFacingLlmCredentialError(err, {
|
|
8111
8178
|
agentName: ref.name,
|
package/src/agent/types.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { A2AAgentActivitySnapshot } from "../a2a/activity.js";
|
|
1
2
|
import type { ActionChatUIConfig } from "../action-ui.js";
|
|
2
3
|
import type { AgentMcpAppPayload } from "../mcp-client/app-result.js";
|
|
3
4
|
import type { ReasoningEffort } from "../shared/reasoning-effort.js";
|
|
@@ -273,6 +274,8 @@ export type AgentChatEvent =
|
|
|
273
274
|
type: "agent_call";
|
|
274
275
|
agent: string;
|
|
275
276
|
status: "start" | "done" | "error";
|
|
277
|
+
agentCallId?: string;
|
|
278
|
+
durationMs?: number;
|
|
276
279
|
}
|
|
277
280
|
| {
|
|
278
281
|
/**
|
|
@@ -296,8 +299,20 @@ export type AgentChatEvent =
|
|
|
296
299
|
elapsedSeconds: number;
|
|
297
300
|
/** Optional short text surfaced from the remote poll, when present. */
|
|
298
301
|
detail?: string;
|
|
302
|
+
agentCallId?: string;
|
|
303
|
+
}
|
|
304
|
+
| {
|
|
305
|
+
type: "agent_call_text";
|
|
306
|
+
agent: string;
|
|
307
|
+
text: string;
|
|
308
|
+
agentCallId?: string;
|
|
309
|
+
}
|
|
310
|
+
| {
|
|
311
|
+
type: "agent_call_activity";
|
|
312
|
+
agent: string;
|
|
313
|
+
snapshot: A2AAgentActivitySnapshot;
|
|
314
|
+
agentCallId?: string;
|
|
299
315
|
}
|
|
300
|
-
| { type: "agent_call_text"; agent: string; text: string }
|
|
301
316
|
| {
|
|
302
317
|
type: "agent_task";
|
|
303
318
|
taskId: string;
|
package/src/cli/index.ts
CHANGED
|
@@ -203,12 +203,12 @@ function parseScaffoldArgs(argv: string[]): {
|
|
|
203
203
|
// Track CLI usage (best-effort, non-blocking)
|
|
204
204
|
function trackCli(event: string, props?: Record<string, unknown>): void {
|
|
205
205
|
try {
|
|
206
|
-
import("../tracking/registry.js")
|
|
207
|
-
m.track(event, { command, ...props })
|
|
208
|
-
|
|
209
|
-
import("../tracking/providers.js")
|
|
210
|
-
m.registerBuiltinProviders()
|
|
211
|
-
|
|
206
|
+
void import("../tracking/registry.js")
|
|
207
|
+
.then((m) => m.track(event, { command, ...props }))
|
|
208
|
+
.catch(() => undefined);
|
|
209
|
+
void import("../tracking/providers.js")
|
|
210
|
+
.then((m) => m.registerBuiltinProviders())
|
|
211
|
+
.catch(() => undefined);
|
|
212
212
|
} catch {}
|
|
213
213
|
}
|
|
214
214
|
|
|
@@ -219,7 +219,9 @@ process.on("uncaughtException", (err) => {
|
|
|
219
219
|
console.error(` Send feedback: ${FEEDBACK_URL}\n`);
|
|
220
220
|
trackCli("cli.crash", { error: err.message });
|
|
221
221
|
Sentry.captureException(err);
|
|
222
|
-
Sentry.flush(2000)
|
|
222
|
+
void Sentry.flush(2000)
|
|
223
|
+
.catch(() => undefined)
|
|
224
|
+
.finally(() => process.exit(1));
|
|
223
225
|
});
|
|
224
226
|
|
|
225
227
|
process.on("unhandledRejection", (reason: any) => {
|
|
@@ -228,7 +230,9 @@ process.on("unhandledRejection", (reason: any) => {
|
|
|
228
230
|
console.error(` Send feedback: ${FEEDBACK_URL}\n`);
|
|
229
231
|
trackCli("cli.crash", { error: reason?.message ?? String(reason) });
|
|
230
232
|
Sentry.captureException(reason);
|
|
231
|
-
Sentry.flush(2000)
|
|
233
|
+
void Sentry.flush(2000)
|
|
234
|
+
.catch(() => undefined)
|
|
235
|
+
.finally(() => process.exit(1));
|
|
232
236
|
});
|
|
233
237
|
|
|
234
238
|
// Surface a self-heal hint when an interrupted `npx @agent-native/core@latest ...`
|
|
@@ -961,14 +965,18 @@ switch (command) {
|
|
|
961
965
|
}
|
|
962
966
|
|
|
963
967
|
case "setup-agents": {
|
|
964
|
-
import("./setup-agents.js")
|
|
968
|
+
import("./setup-agents.js")
|
|
969
|
+
.then((m) => m.runSetupAgents())
|
|
970
|
+
.catch(handleScaffoldImportError);
|
|
965
971
|
break;
|
|
966
972
|
}
|
|
967
973
|
|
|
968
974
|
case "info": {
|
|
969
975
|
// Print read-only info about an installable package (e.g. @agent-native/scheduling).
|
|
970
976
|
// Lists subpath exports, source paths in node_modules, and docs pointers.
|
|
971
|
-
import("./info.js")
|
|
977
|
+
import("./info.js")
|
|
978
|
+
.then((m) => m.runInfo(args[0]))
|
|
979
|
+
.catch(handleScaffoldImportError);
|
|
972
980
|
break;
|
|
973
981
|
}
|
|
974
982
|
|
|
@@ -438,8 +438,8 @@ export function transitionStoredMultiFrontierRun(
|
|
|
438
438
|
const isFullStoredRun = hasStoredRunTimestamps(candidate);
|
|
439
439
|
if (
|
|
440
440
|
!isFullStoredRun &&
|
|
441
|
-
(Object.
|
|
442
|
-
Object.
|
|
441
|
+
(Object.prototype.hasOwnProperty.call(candidate, "createdAt") ||
|
|
442
|
+
Object.prototype.hasOwnProperty.call(candidate, "updatedAt"))
|
|
443
443
|
) {
|
|
444
444
|
throw new Error("Invalid multi-frontier coordinator transition state.");
|
|
445
445
|
}
|
|
@@ -1056,7 +1056,9 @@ function isCompleteMultiFrontierRunState(
|
|
|
1056
1056
|
|
|
1057
1057
|
function normalizeStoredRunDefaults(value: unknown): unknown {
|
|
1058
1058
|
if (!value || typeof value !== "object" || Array.isArray(value)) return value;
|
|
1059
|
-
if (
|
|
1059
|
+
if (
|
|
1060
|
+
!Object.prototype.hasOwnProperty.call(value, "autoContinueAfterAgreement")
|
|
1061
|
+
) {
|
|
1060
1062
|
return { ...value, autoContinueAfterAgreement: false };
|
|
1061
1063
|
}
|
|
1062
1064
|
return value;
|
|
@@ -228,18 +228,6 @@ export const TEMPLATES: TemplateMeta[] = [
|
|
|
228
228
|
hidden: true,
|
|
229
229
|
core: false,
|
|
230
230
|
},
|
|
231
|
-
{
|
|
232
|
-
name: "crm",
|
|
233
|
-
label: "CRM",
|
|
234
|
-
hint: "Agent-native CRM companion with scoped HubSpot intelligence, workflows, and write proposals",
|
|
235
|
-
icon: "Users",
|
|
236
|
-
color: "#2563EB",
|
|
237
|
-
colorRgb: "37 99 235",
|
|
238
|
-
devPort: 8107,
|
|
239
|
-
hidden: true,
|
|
240
|
-
defaultMode: "dev",
|
|
241
|
-
core: false,
|
|
242
|
-
},
|
|
243
231
|
{
|
|
244
232
|
name: "macros",
|
|
245
233
|
label: "Macros",
|
package/src/cli/workspace-dev.ts
CHANGED
|
@@ -2673,7 +2673,7 @@ export function AgentChatSurface({
|
|
|
2673
2673
|
const defaultShowPageNewChatButton =
|
|
2674
2674
|
shouldDefaultAgentChatSurfacePageNewChatButton(mode, showTabBar);
|
|
2675
2675
|
|
|
2676
|
-
|
|
2676
|
+
const panel = (
|
|
2677
2677
|
<AgentPanel
|
|
2678
2678
|
{...props}
|
|
2679
2679
|
defaultMode={defaultMode}
|
|
@@ -2697,6 +2697,14 @@ export function AgentChatSurface({
|
|
|
2697
2697
|
}
|
|
2698
2698
|
/>
|
|
2699
2699
|
);
|
|
2700
|
+
|
|
2701
|
+
if (!pageMode) return panel;
|
|
2702
|
+
return (
|
|
2703
|
+
<>
|
|
2704
|
+
<URLSync browserTabId={props.browserTabId} />
|
|
2705
|
+
{panel}
|
|
2706
|
+
</>
|
|
2707
|
+
);
|
|
2700
2708
|
}
|
|
2701
2709
|
|
|
2702
2710
|
// ─── AgentSidebar — wraps content with a toggleable agent panel ─────────────
|
|
@@ -45,11 +45,9 @@ export interface RunStuckBannerProps {
|
|
|
45
45
|
* `chatHandle.hasInFlightWork()`. "No progress" for a stretch of time does
|
|
46
46
|
* not mean the run is dead: a long provider query or a cross-app `call
|
|
47
47
|
* agent` can legitimately emit nothing for minutes. When this returns
|
|
48
|
-
* true,
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* fresh on every render; omit to keep the unconditional Retry/Cancel
|
|
52
|
-
* behavior.
|
|
48
|
+
* true, the stuck warning is hidden — aborting would destroy real in-flight
|
|
49
|
+
* work and re-execute the same long call from scratch. Checked fresh on every
|
|
50
|
+
* render; omit to keep the unconditional Retry/Cancel behavior.
|
|
53
51
|
*/
|
|
54
52
|
hasInFlightWork?: () => boolean;
|
|
55
53
|
/**
|
|
@@ -191,9 +189,9 @@ export function RunStuckBanner({
|
|
|
191
189
|
const backgroundWorkerStillAlive = isFreshBackgroundWorker(state);
|
|
192
190
|
// A live tool call or sub-agent (A2A) call means "no progress" is not the
|
|
193
191
|
// same as "dead" — the process is genuinely still doing the user's work.
|
|
194
|
-
// Retry aborts the run, so
|
|
195
|
-
//
|
|
196
|
-
//
|
|
192
|
+
// Retry aborts the run, so the stuck warning stays out of the way while real
|
|
193
|
+
// work is in flight; see the `hasInFlightWork` prop doc comment. Re-checked
|
|
194
|
+
// on every render (the
|
|
197
195
|
// underlying source mutates in place as tool/agent-call events stream in),
|
|
198
196
|
// which is why this is a function prop rather than a plain boolean.
|
|
199
197
|
//
|
|
@@ -308,7 +306,18 @@ export function RunStuckBanner({
|
|
|
308
306
|
threadId,
|
|
309
307
|
]);
|
|
310
308
|
|
|
311
|
-
|
|
309
|
+
// A stale progress timestamp is not actionable while the server is still
|
|
310
|
+
// heartbeating or an unresolved tool/A2A call is known to be running. Keep
|
|
311
|
+
// those healthy long-running states in the chat's inline activity UI; the
|
|
312
|
+
// warning is reserved for runs that may actually need recovery.
|
|
313
|
+
if (
|
|
314
|
+
!state.isStuck ||
|
|
315
|
+
!state.runId ||
|
|
316
|
+
backgroundWorkerStillAlive ||
|
|
317
|
+
inFlightWork
|
|
318
|
+
) {
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
312
321
|
|
|
313
322
|
const handleCancel = async () => {
|
|
314
323
|
if (!state.runId || busy.type !== "none") return;
|
|
@@ -323,9 +332,9 @@ export function RunStuckBanner({
|
|
|
323
332
|
};
|
|
324
333
|
|
|
325
334
|
const handleRetry = async () => {
|
|
326
|
-
// Defense in depth:
|
|
327
|
-
// heartbeating or work is explicitly in flight
|
|
328
|
-
//
|
|
335
|
+
// Defense in depth: the banner is hidden while a background worker is
|
|
336
|
+
// still heartbeating or work is explicitly in flight. Guard the handler
|
|
337
|
+
// too so a render transition cannot abort a run the server says is alive.
|
|
329
338
|
if (
|
|
330
339
|
!state.runId ||
|
|
331
340
|
busy.type !== "none" ||
|
|
@@ -350,8 +359,6 @@ export function RunStuckBanner({
|
|
|
350
359
|
const stuckSeconds =
|
|
351
360
|
state.stuckSinceMs != null ? Math.floor(state.stuckSinceMs / 1000) : null;
|
|
352
361
|
|
|
353
|
-
const stillWorking = backgroundWorkerStillAlive || inFlightWork;
|
|
354
|
-
|
|
355
362
|
return (
|
|
356
363
|
<div
|
|
357
364
|
role="status"
|
|
@@ -368,51 +375,36 @@ export function RunStuckBanner({
|
|
|
368
375
|
/>
|
|
369
376
|
<div className="flex min-w-0 flex-1 flex-col gap-1.5">
|
|
370
377
|
<div className="leading-snug">
|
|
371
|
-
<span className="font-medium">
|
|
372
|
-
{stillWorking
|
|
373
|
-
? "The agent is still working."
|
|
374
|
-
: "This chat looks stuck."}
|
|
375
|
-
</span>{" "}
|
|
378
|
+
<span className="font-medium">This chat looks stuck.</span>{" "}
|
|
376
379
|
<span className="text-muted-foreground">
|
|
377
380
|
No progress
|
|
378
|
-
{stuckSeconds != null ? ` for ${stuckSeconds}s` : ""}.
|
|
379
|
-
|
|
380
|
-
? "It's waiting on a call to another app or a long tool — canceling will stop that work."
|
|
381
|
-
: backgroundWorkerStillAlive
|
|
382
|
-
? "The background worker is still alive; large updates can take a few minutes."
|
|
383
|
-
: "The agent may have hit a server timeout or lost its connection."}
|
|
381
|
+
{stuckSeconds != null ? ` for ${stuckSeconds}s` : ""}. The agent may
|
|
382
|
+
have hit a server timeout or lost its connection.
|
|
384
383
|
{autoRetry && busyType === "retry"
|
|
385
384
|
? " Retrying automatically now."
|
|
386
385
|
: ""}
|
|
387
386
|
</span>
|
|
388
387
|
</div>
|
|
389
388
|
<div className="flex flex-wrap items-center gap-2">
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
</button>
|
|
406
|
-
)}
|
|
389
|
+
<button
|
|
390
|
+
type="button"
|
|
391
|
+
onClick={handleRetry}
|
|
392
|
+
disabled={busyType !== "none"}
|
|
393
|
+
className="inline-flex h-7 cursor-pointer items-center gap-1.5 rounded-md bg-foreground px-2.5 text-[11px] font-medium text-background transition-colors hover:bg-foreground/90 disabled:cursor-not-allowed disabled:opacity-60"
|
|
394
|
+
>
|
|
395
|
+
{busyType === "retry" ? (
|
|
396
|
+
<IconLoader2
|
|
397
|
+
size={12}
|
|
398
|
+
className="animate-spin"
|
|
399
|
+
aria-hidden="true"
|
|
400
|
+
/>
|
|
401
|
+
) : null}
|
|
402
|
+
Retry
|
|
403
|
+
</button>
|
|
407
404
|
<button
|
|
408
405
|
type="button"
|
|
409
406
|
onClick={handleCancel}
|
|
410
407
|
disabled={busyType !== "none"}
|
|
411
|
-
title={
|
|
412
|
-
inFlightWork
|
|
413
|
-
? "Stop the in-progress run. Work that hasn't finished will be lost."
|
|
414
|
-
: undefined
|
|
415
|
-
}
|
|
416
408
|
className="inline-flex h-7 cursor-pointer items-center gap-1.5 rounded-md border border-border bg-background px-2.5 text-[11px] font-medium text-foreground transition-colors hover:bg-accent disabled:cursor-not-allowed disabled:opacity-60"
|
|
417
409
|
>
|
|
418
410
|
{busyType === "cancel" ? (
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
|
|
3
|
+
import { ACTION_CHAT_UI_INLINE_EXTENSION_RENDERER } from "../../action-ui.js";
|
|
4
|
+
import { cn } from "../utils.js";
|
|
5
|
+
import type { ToolRendererContext } from "./tool-render-registry.js";
|
|
6
|
+
|
|
7
|
+
export function ActionChatUiSurface({
|
|
8
|
+
context,
|
|
9
|
+
isBuiltinDataWidget,
|
|
10
|
+
children,
|
|
11
|
+
}: {
|
|
12
|
+
context: ToolRendererContext;
|
|
13
|
+
isBuiltinDataWidget: boolean;
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
}) {
|
|
16
|
+
if (!context.chatUI || isBuiltinDataWidget) return <>{children}</>;
|
|
17
|
+
|
|
18
|
+
const containsPaddedIframe =
|
|
19
|
+
context.chatUI.renderer === ACTION_CHAT_UI_INLINE_EXTENSION_RENDERER;
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<div
|
|
23
|
+
data-agent-native-custom-ui=""
|
|
24
|
+
className={cn(
|
|
25
|
+
"my-3 overflow-hidden rounded-lg border border-border bg-card text-card-foreground shadow-sm empty:hidden",
|
|
26
|
+
!containsPaddedIframe && "p-3",
|
|
27
|
+
)}
|
|
28
|
+
>
|
|
29
|
+
{children}
|
|
30
|
+
</div>
|
|
31
|
+
);
|
|
32
|
+
}
|