@agent-native/core 0.108.0 → 0.109.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +25 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/client.ts +162 -17
- package/corpus/core/src/a2a/correlation.ts +50 -0
- package/corpus/core/src/a2a/handlers.ts +200 -14
- package/corpus/core/src/a2a/index.ts +7 -1
- package/corpus/core/src/a2a/invoke.ts +77 -1
- package/corpus/core/src/a2a/server.ts +13 -1
- package/corpus/core/src/a2a/task-store.ts +146 -6
- package/corpus/core/src/a2a/types.ts +32 -0
- package/corpus/core/src/action.ts +5 -2
- package/corpus/core/src/agent/production-agent.ts +33 -4
- package/corpus/core/src/client/AssistantChat.tsx +648 -603
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +31 -4
- package/corpus/core/src/client/agent-chat-adapter.ts +23 -37
- package/corpus/core/src/client/agent-sidebar-state.ts +4 -0
- package/corpus/core/src/client/analytics.ts +84 -0
- package/corpus/core/src/client/chat/message-components.tsx +94 -22
- package/corpus/core/src/client/chat/tool-call-display.tsx +170 -47
- package/corpus/core/src/client/chat/use-agent-chat-lifecycle-tracking.ts +74 -0
- package/corpus/core/src/client/chat-thread-url.ts +11 -0
- package/corpus/core/src/client/error-capture.ts +12 -0
- package/corpus/core/src/client/extensions/ExtensionSlot.tsx +37 -1
- package/corpus/core/src/client/index.ts +2 -0
- package/corpus/core/src/client/route-chunk-recovery.ts +20 -8
- package/corpus/core/src/client/session-replay.ts +31 -0
- package/corpus/core/src/client/use-run-stuck-detection.ts +27 -1
- package/corpus/core/src/db/client.ts +55 -0
- package/corpus/core/src/extensions/actions.ts +2 -14
- package/corpus/core/src/extensions/store.ts +1 -1
- package/corpus/core/src/localization/default-messages.ts +3 -0
- package/corpus/core/src/mcp/build-server.ts +2 -2
- package/corpus/core/src/observability/traces.ts +172 -19
- package/corpus/core/src/progress/actions.ts +4 -2
- package/corpus/core/src/provider-api/index.ts +205 -105
- package/corpus/core/src/scripts/call-agent.ts +190 -19
- package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +112 -25
- package/corpus/core/src/server/agent-chat-plugin.ts +136 -4
- package/corpus/core/src/styles/agent-conversation.css +7 -0
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +19 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +19 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +19 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +19 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +49 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +7 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +1 -1
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +29 -10
- package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +54 -23
- package/corpus/templates/analytics/.builder/skills/apollo/SKILL.md +19 -41
- package/corpus/templates/analytics/.builder/skills/commonroom/SKILL.md +20 -35
- package/corpus/templates/analytics/.builder/skills/github/SKILL.md +23 -67
- package/corpus/templates/analytics/.builder/skills/pylon/SKILL.md +25 -43
- package/corpus/templates/analytics/AGENTS.md +22 -13
- package/corpus/templates/analytics/actions/account-deep-dive.ts +1 -0
- package/corpus/templates/analytics/actions/configure-gong-native-insights.ts +29 -0
- package/corpus/templates/analytics/actions/content-calendar-schema.ts +8 -4
- package/corpus/templates/analytics/actions/content-calendar.ts +12 -4
- package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +2 -1
- package/corpus/templates/analytics/actions/gong-calls.ts +113 -22
- package/corpus/templates/analytics/actions/gong-native-insights.ts +166 -0
- package/corpus/templates/analytics/actions/hubspot-deals.ts +190 -46
- package/corpus/templates/analytics/actions/pylon-issues.ts +123 -0
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +1 -1
- package/corpus/templates/analytics/actions/slack-messages.ts +179 -27
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +48 -152
- package/corpus/templates/analytics/app/components/ui/chart.tsx +1 -1
- package/corpus/templates/analytics/app/hooks/use-chart-tooltip-flip.ts +21 -6
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +13 -0
- package/corpus/templates/analytics/app/i18n-data.ts +134 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +181 -30
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +6 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +4 -3
- package/corpus/templates/analytics/changelog/2026-07-17-analytics-now-includes-a-default-alert-for-spikes-in-stuck-agent-chats.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-dashboard-editors-can-add-shared-extensions-or-opt-into-per-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-dashboard-extensions-show-a-loading-skeleton.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-errors-now-group-repeat-failures-consistently-and-keep-priva.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-gong-transcript-reviews-now-batch-bounded-call-windows-for-f.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-hubspot-deal-filters-now-run-in-hubspot-before-paging-result.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-notion-content-calendars-now-discover-the-matching-database-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-pylon-dashboard-reads-now-use-the-paginated-issue-search-api.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-slack-reads-no-longer-join-channels-and-report-pagination-coverage.md +6 -0
- package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +23 -14
- package/corpus/templates/analytics/docs/schemas/tracked-events.md +5 -1
- package/corpus/templates/analytics/server/handlers/notion.ts +14 -3
- package/corpus/templates/analytics/server/handlers/slack.ts +182 -29
- package/corpus/templates/analytics/server/jobs/analytics-alerts.ts +3 -3
- package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +2 -6
- package/corpus/templates/analytics/server/lib/analytics-alerts.ts +209 -87
- package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +6 -2
- package/corpus/templates/analytics/server/lib/error-capture.ts +75 -8
- package/corpus/templates/analytics/server/lib/gong-native-policy.ts +72 -0
- package/corpus/templates/analytics/server/lib/gong.ts +54 -66
- package/corpus/templates/analytics/server/lib/hubspot.ts +40 -3
- package/corpus/templates/analytics/server/lib/notion.ts +83 -8
- package/corpus/templates/analytics/server/lib/real-data-actions.ts +4 -0
- package/corpus/templates/analytics/server/lib/slack.ts +242 -90
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +3 -3
- package/corpus/templates/analytics/server/routes/api/pylon/accounts.get.ts +42 -1
- package/corpus/templates/analytics/server/routes/api/pylon/issues.get.ts +71 -1
- package/corpus/templates/analytics/server/routes/api/test-connection.post.ts +44 -4
- package/corpus/templates/clips/actions/finalize-recording.ts +541 -62
- package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +19 -1
- package/corpus/templates/clips/app/components/library/create-folder-dialog.tsx +123 -0
- package/corpus/templates/clips/app/components/library/library-grid.tsx +42 -4
- package/corpus/templates/clips/app/components/library/recording-card.tsx +30 -0
- package/corpus/templates/clips/app/components/player/playback-comment-overlay.tsx +17 -2
- package/corpus/templates/clips/app/components/player/video-player.tsx +14 -2
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +2 -2
- package/corpus/templates/clips/app/entry.client.tsx +6 -1
- package/corpus/templates/clips/app/i18n/ar-SA.ts +12 -1
- package/corpus/templates/clips/app/i18n/de-DE.ts +12 -1
- package/corpus/templates/clips/app/i18n/en-US.ts +12 -1
- package/corpus/templates/clips/app/i18n/es-ES.ts +11 -1
- package/corpus/templates/clips/app/i18n/fr-FR.ts +11 -1
- package/corpus/templates/clips/app/i18n/hi-IN.ts +10 -1
- package/corpus/templates/clips/app/i18n/ja-JP.ts +12 -1
- package/corpus/templates/clips/app/i18n/ko-KR.ts +11 -1
- package/corpus/templates/clips/app/i18n/pt-BR.ts +11 -1
- package/corpus/templates/clips/app/i18n/zh-CN.ts +11 -1
- package/corpus/templates/clips/app/i18n/zh-TW.ts +11 -1
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +72 -1
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +1 -1
- package/corpus/templates/clips/app/routes/record.tsx +3 -3
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +6 -3
- package/corpus/templates/clips/changelog/2026-07-17-choose-which-workspace-receives-new-clips-recordings-and-des.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-17-clips-now-retries-storage-verification-in-the-background-ins.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-17-create-folders-directly-from-the-move-menu.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-17-failed-desktop-uploads-now-offer-a-direct-way-to-reopen-clip.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-17-fixed-broken-thumbnail-icons-appearing-over-playable-clip-em.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-17-playback-comments-stay-readable-at-faster-playback-speeds.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/finalize-recovery.ts +3 -0
- package/corpus/templates/clips/chrome-extension/src/offscreen.ts +3 -3
- package/corpus/templates/clips/desktop/src/app.tsx +19 -7
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +111 -13
- package/corpus/templates/clips/desktop/src/lib/upload-verification.ts +16 -7
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +2 -4
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +32 -15
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +45 -18
- package/corpus/templates/clips/server/jobs/media-verification.ts +130 -0
- package/corpus/templates/clips/server/lib/builder-media-compression.ts +15 -0
- package/corpus/templates/clips/server/lib/media-verification-state.ts +38 -0
- package/corpus/templates/clips/server/lib/player-thumbnail-url.ts +31 -0
- package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +10 -3
- package/corpus/templates/clips/server/plugins/auth.ts +5 -5
- package/corpus/templates/clips/server/plugins/calendar-jobs.ts +2 -0
- package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +12 -2
- package/corpus/templates/clips/server/routes/api/public-recording.get.ts +6 -1
- package/corpus/templates/clips/server/routes/api/thumbnail/[recordingId].get.ts +340 -0
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +24 -7
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +91 -7
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/status.get.ts +14 -0
- package/corpus/templates/clips/shared/finalize-recovery.ts +61 -2
- package/corpus/templates/clips/shared/share-meta.ts +1 -1
- package/corpus/templates/content/app/entry.client.tsx +6 -1
- package/corpus/templates/dispatch/AGENTS.md +5 -0
- package/corpus/templates/dispatch/changelog/2026-07-17-apps-page-links-to-other-available-apps.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-17-curated-template-remixes.md +6 -0
- package/corpus/templates/mail/app/entry.client.tsx +6 -1
- package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +11 -7
- package/corpus/templates/slides/.env.example +0 -1
- package/corpus/templates/slides/AGENTS.md +4 -0
- package/corpus/templates/slides/DEVELOPING.md +2 -2
- package/corpus/templates/slides/actions/index-design-system-with-builder.ts +1 -1
- package/corpus/templates/slides/actions/logo-config.ts +6 -7
- package/corpus/templates/slides/actions/search-images.ts +11 -39
- package/corpus/templates/slides/actions/search-logos.ts +5 -52
- package/corpus/templates/slides/app/components/editor/ImageSearchPanel.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/LogoSearchPanel.tsx +16 -26
- package/corpus/templates/slides/app/entry.client.tsx +6 -1
- package/corpus/templates/slides/server/lib/media-search-providers.ts +216 -0
- package/corpus/templates/slides/server/register-secrets.ts +30 -0
- package/dist/a2a/client.d.ts +47 -1
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +94 -12
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/correlation.d.ts +10 -0
- package/dist/a2a/correlation.d.ts.map +1 -0
- package/dist/a2a/correlation.js +40 -0
- package/dist/a2a/correlation.js.map +1 -0
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +147 -15
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/index.d.ts +4 -4
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +2 -2
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/invoke.d.ts +29 -2
- package/dist/a2a/invoke.d.ts.map +1 -1
- package/dist/a2a/invoke.js +33 -1
- package/dist/a2a/invoke.js.map +1 -1
- package/dist/a2a/server.d.ts.map +1 -1
- package/dist/a2a/server.js +14 -1
- package/dist/a2a/server.js.map +1 -1
- package/dist/a2a/task-store.d.ts +12 -1
- package/dist/a2a/task-store.d.ts.map +1 -1
- package/dist/a2a/task-store.js +96 -6
- package/dist/a2a/task-store.js.map +1 -1
- package/dist/a2a/types.d.ts +27 -0
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/a2a/types.js.map +1 -1
- package/dist/action.d.ts +5 -2
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js.map +1 -1
- package/dist/agent/production-agent.d.ts +14 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +19 -3
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +14 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +158 -136
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +27 -4
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +21 -39
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-sidebar-state.d.ts +1 -0
- package/dist/client/agent-sidebar-state.d.ts.map +1 -1
- package/dist/client/agent-sidebar-state.js +4 -0
- package/dist/client/agent-sidebar-state.js.map +1 -1
- package/dist/client/analytics.d.ts +14 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +67 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +8 -0
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +62 -19
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +6 -0
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +83 -14
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts +8 -0
- package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts.map +1 -0
- package/dist/client/chat/use-agent-chat-lifecycle-tracking.js +51 -0
- package/dist/client/chat/use-agent-chat-lifecycle-tracking.js.map +1 -0
- package/dist/client/chat-thread-url.d.ts +2 -0
- package/dist/client/chat-thread-url.d.ts.map +1 -0
- package/dist/client/chat-thread-url.js +12 -0
- package/dist/client/chat-thread-url.js.map +1 -0
- package/dist/client/error-capture.d.ts.map +1 -1
- package/dist/client/error-capture.js +7 -0
- package/dist/client/error-capture.js.map +1 -1
- package/dist/client/extensions/ExtensionSlot.d.ts +3 -1
- package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionSlot.js +28 -3
- package/dist/client/extensions/ExtensionSlot.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/route-chunk-recovery.d.ts.map +1 -1
- package/dist/client/route-chunk-recovery.js +14 -9
- package/dist/client/route-chunk-recovery.js.map +1 -1
- package/dist/client/session-replay.d.ts +15 -0
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +20 -0
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
- package/dist/client/use-run-stuck-detection.js +25 -1
- package/dist/client/use-run-stuck-detection.js.map +1 -1
- package/dist/db/client.d.ts +7 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +33 -0
- package/dist/db/client.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +2 -10
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/store.js +1 -1
- package/dist/extensions/store.js.map +1 -1
- package/dist/localization/default-messages.d.ts +3 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +3 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp/build-server.d.ts +2 -0
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +2 -2
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +5 -5
- package/dist/observability/traces.d.ts +9 -0
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +137 -19
- package/dist/observability/traces.js.map +1 -1
- package/dist/progress/actions.d.ts.map +1 -1
- package/dist/progress/actions.js +3 -2
- package/dist/progress/actions.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +91 -8
- package/dist/provider-api/index.js.map +1 -1
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +140 -17
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/agent-chat/action-filters-a2a.d.ts +24 -2
- package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -1
- package/dist/server/agent-chat/action-filters-a2a.js +62 -7
- package/dist/server/agent-chat/action-filters-a2a.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +118 -5
- 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/transcribe-voice.d.ts +1 -1
- package/dist/styles/agent-conversation.css +7 -0
- package/dist/templates/default/app/i18n/ar-SA.ts +20 -0
- package/dist/templates/default/app/i18n/de-DE.ts +20 -0
- package/dist/templates/default/app/i18n/en-US.ts +20 -0
- package/dist/templates/default/app/i18n/es-ES.ts +20 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +21 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +19 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +20 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +19 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +20 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +19 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +19 -0
- package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +49 -0
- package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +7 -1
- package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
- package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +1 -1
- package/package.json +1 -1
- package/src/templates/default/app/i18n/ar-SA.ts +20 -0
- package/src/templates/default/app/i18n/de-DE.ts +20 -0
- package/src/templates/default/app/i18n/en-US.ts +20 -0
- package/src/templates/default/app/i18n/es-ES.ts +20 -0
- package/src/templates/default/app/i18n/fr-FR.ts +21 -0
- package/src/templates/default/app/i18n/hi-IN.ts +19 -0
- package/src/templates/default/app/i18n/ja-JP.ts +20 -0
- package/src/templates/default/app/i18n/ko-KR.ts +19 -0
- package/src/templates/default/app/i18n/pt-BR.ts +20 -0
- package/src/templates/default/app/i18n/zh-CN.ts +19 -0
- package/src/templates/default/app/i18n/zh-TW.ts +19 -0
- package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +49 -0
- package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +7 -1
- package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
- package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +1 -1
- package/corpus/templates/analytics/server/handlers/github.ts +0 -200
- package/corpus/templates/analytics/server/handlers/pylon.ts +0 -43
- package/corpus/templates/analytics/server/lib/apollo.ts +0 -167
- package/corpus/templates/analytics/server/lib/commonroom.ts +0 -149
- package/corpus/templates/analytics/server/lib/github.ts +0 -660
- package/corpus/templates/analytics/server/lib/mixpanel.ts +0 -156
- package/corpus/templates/analytics/server/lib/posthog.ts +0 -194
- package/corpus/templates/analytics/server/lib/pylon.ts +0 -109
- package/corpus/templates/analytics/server/routes/api/github/graphql.post.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/issue.get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/org-prs.get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/pr.get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/prs.get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/search.get.ts +0 -1
- package/corpus/templates/slides/actions/fetch-logos.ts +0 -90
- package/corpus/templates/slides/actions/image-search.ts +0 -64
- package/corpus/templates/slides/actions/import-github.ts +0 -182
- package/corpus/templates/slides/actions/logo-lookup.ts +0 -113
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import crypto from "crypto";
|
|
2
2
|
|
|
3
3
|
import { getDbExec, intType, isPostgres } from "../db/client.js";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
ensureTableExists,
|
|
6
|
+
ensureColumnExists,
|
|
7
|
+
ensureIndexExists,
|
|
8
|
+
} from "../db/ddl-guard.js";
|
|
5
9
|
import type { Task, Message, TaskState, Artifact } from "./types.js";
|
|
6
10
|
|
|
7
11
|
let _initPromise: Promise<void> | undefined;
|
|
12
|
+
export const MAX_A2A_IDEMPOTENCY_KEY_CHARS = 128;
|
|
13
|
+
const A2A_IDEMPOTENCY_INDEX = "idx_a2a_tasks_owner_scope_idempotency";
|
|
14
|
+
export const A2A_PERSONAL_OWNER_SCOPE = "__personal__";
|
|
8
15
|
|
|
9
16
|
async function ensureTable(): Promise<void> {
|
|
10
17
|
if (!_initPromise) {
|
|
@@ -20,10 +27,16 @@ async function ensureTable(): Promise<void> {
|
|
|
20
27
|
history TEXT NOT NULL DEFAULT '[]',
|
|
21
28
|
artifacts TEXT NOT NULL DEFAULT '[]',
|
|
22
29
|
metadata TEXT,
|
|
30
|
+
owner_email TEXT,
|
|
31
|
+
owner_scope TEXT NOT NULL DEFAULT '',
|
|
32
|
+
idempotency_key TEXT,
|
|
23
33
|
created_at ${intType()} NOT NULL,
|
|
24
34
|
updated_at ${intType()} NOT NULL
|
|
25
35
|
)
|
|
26
36
|
`;
|
|
37
|
+
const createIdempotencyIndexSql =
|
|
38
|
+
`CREATE UNIQUE INDEX IF NOT EXISTS ${A2A_IDEMPOTENCY_INDEX} ` +
|
|
39
|
+
`ON a2a_tasks(owner_email, owner_scope, idempotency_key)`;
|
|
27
40
|
const createApprovalsSql = `
|
|
28
41
|
CREATE TABLE IF NOT EXISTS a2a_approvals (
|
|
29
42
|
id TEXT PRIMARY KEY,
|
|
@@ -57,6 +70,20 @@ async function ensureTable(): Promise<void> {
|
|
|
57
70
|
"owner_email",
|
|
58
71
|
`ALTER TABLE a2a_tasks ADD COLUMN IF NOT EXISTS owner_email TEXT`,
|
|
59
72
|
);
|
|
73
|
+
await ensureColumnExists(
|
|
74
|
+
"a2a_tasks",
|
|
75
|
+
"owner_scope",
|
|
76
|
+
`ALTER TABLE a2a_tasks ADD COLUMN IF NOT EXISTS owner_scope TEXT NOT NULL DEFAULT ''`,
|
|
77
|
+
);
|
|
78
|
+
await ensureColumnExists(
|
|
79
|
+
"a2a_tasks",
|
|
80
|
+
"idempotency_key",
|
|
81
|
+
`ALTER TABLE a2a_tasks ADD COLUMN IF NOT EXISTS idempotency_key TEXT`,
|
|
82
|
+
);
|
|
83
|
+
await ensureIndexExists(
|
|
84
|
+
A2A_IDEMPOTENCY_INDEX,
|
|
85
|
+
createIdempotencyIndexSql,
|
|
86
|
+
);
|
|
60
87
|
await ensureTableExists("a2a_approvals", createApprovalsSql);
|
|
61
88
|
return;
|
|
62
89
|
}
|
|
@@ -69,6 +96,13 @@ async function ensureTable(): Promise<void> {
|
|
|
69
96
|
// have NULL owner_email and remain accessible to legacy callers via
|
|
70
97
|
// the legacy-token apiKeyEnv path; new rows are scoped from this point
|
|
71
98
|
// forward.
|
|
99
|
+
try {
|
|
100
|
+
await client.execute(
|
|
101
|
+
`ALTER TABLE a2a_tasks ADD COLUMN owner_scope TEXT NOT NULL DEFAULT ''`,
|
|
102
|
+
);
|
|
103
|
+
} catch {
|
|
104
|
+
// Column already exists — expected on every restart after first run.
|
|
105
|
+
}
|
|
72
106
|
try {
|
|
73
107
|
await client.execute(
|
|
74
108
|
`ALTER TABLE a2a_tasks ADD COLUMN owner_email TEXT`,
|
|
@@ -76,6 +110,14 @@ async function ensureTable(): Promise<void> {
|
|
|
76
110
|
} catch {
|
|
77
111
|
// Column already exists — expected on every restart after first run.
|
|
78
112
|
}
|
|
113
|
+
try {
|
|
114
|
+
await client.execute(
|
|
115
|
+
`ALTER TABLE a2a_tasks ADD COLUMN idempotency_key TEXT`,
|
|
116
|
+
);
|
|
117
|
+
} catch {
|
|
118
|
+
// Column already exists — expected on every restart after first run.
|
|
119
|
+
}
|
|
120
|
+
await client.execute(createIdempotencyIndexSql);
|
|
79
121
|
await client.execute(createApprovalsSql);
|
|
80
122
|
})().catch((err) => {
|
|
81
123
|
// Retry init on the next call after a failed startup.
|
|
@@ -320,7 +362,10 @@ export async function pauseProcessingA2ATask(
|
|
|
320
362
|
return task;
|
|
321
363
|
}
|
|
322
364
|
|
|
323
|
-
function taskFromRow(row: any): Task & {
|
|
365
|
+
function taskFromRow(row: any): Task & {
|
|
366
|
+
ownerEmail?: string | null;
|
|
367
|
+
ownerScope?: string | null;
|
|
368
|
+
} {
|
|
324
369
|
return {
|
|
325
370
|
id: row.id as string,
|
|
326
371
|
contextId: (row.context_id as string) || undefined,
|
|
@@ -335,6 +380,7 @@ function taskFromRow(row: any): Task & { ownerEmail?: string | null } {
|
|
|
335
380
|
artifacts: JSON.parse(row.artifacts as string),
|
|
336
381
|
metadata: row.metadata ? JSON.parse(row.metadata as string) : undefined,
|
|
337
382
|
ownerEmail: (row.owner_email as string | null) ?? null,
|
|
383
|
+
ownerScope: (row.owner_scope as string | null) ?? null,
|
|
338
384
|
};
|
|
339
385
|
}
|
|
340
386
|
|
|
@@ -356,6 +402,7 @@ export async function createTask(
|
|
|
356
402
|
contextId?: string,
|
|
357
403
|
metadata?: Record<string, unknown>,
|
|
358
404
|
ownerEmail?: string | null,
|
|
405
|
+
ownerScope?: string | null,
|
|
359
406
|
): Promise<Task> {
|
|
360
407
|
await ensureTable();
|
|
361
408
|
const client = getDbExec();
|
|
@@ -373,7 +420,7 @@ export async function createTask(
|
|
|
373
420
|
};
|
|
374
421
|
|
|
375
422
|
await client.execute({
|
|
376
|
-
sql: `INSERT INTO a2a_tasks (id, context_id, status_state, status_timestamp, history, artifacts, metadata, owner_email, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
423
|
+
sql: `INSERT INTO a2a_tasks (id, context_id, status_state, status_timestamp, history, artifacts, metadata, owner_email, owner_scope, idempotency_key, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
377
424
|
args: [
|
|
378
425
|
id,
|
|
379
426
|
contextId ?? null,
|
|
@@ -383,6 +430,8 @@ export async function createTask(
|
|
|
383
430
|
"[]",
|
|
384
431
|
metadata ? JSON.stringify(metadata) : null,
|
|
385
432
|
ownerEmail ?? null,
|
|
433
|
+
ownerScope ?? "",
|
|
434
|
+
null,
|
|
386
435
|
now,
|
|
387
436
|
now,
|
|
388
437
|
],
|
|
@@ -391,6 +440,87 @@ export async function createTask(
|
|
|
391
440
|
return task;
|
|
392
441
|
}
|
|
393
442
|
|
|
443
|
+
export async function createOrReuseTask(
|
|
444
|
+
message: Message,
|
|
445
|
+
contextId: string | undefined,
|
|
446
|
+
metadata: Record<string, unknown> | undefined,
|
|
447
|
+
ownerEmail: string | null,
|
|
448
|
+
ownerScope: string | null,
|
|
449
|
+
idempotencyKey: string | undefined,
|
|
450
|
+
): Promise<{ task: Task; reused: boolean }> {
|
|
451
|
+
if (!ownerEmail || !idempotencyKey) {
|
|
452
|
+
return {
|
|
453
|
+
task: await createTask(
|
|
454
|
+
message,
|
|
455
|
+
contextId,
|
|
456
|
+
metadata,
|
|
457
|
+
ownerEmail,
|
|
458
|
+
ownerScope,
|
|
459
|
+
),
|
|
460
|
+
reused: false,
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
if (idempotencyKey.length > MAX_A2A_IDEMPOTENCY_KEY_CHARS) {
|
|
464
|
+
throw new Error("A2A idempotency key is too long");
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
await ensureTable();
|
|
468
|
+
const client = getDbExec();
|
|
469
|
+
const normalizedOwner = ownerEmail.trim().toLowerCase();
|
|
470
|
+
const normalizedScope =
|
|
471
|
+
ownerScope?.trim().toLowerCase() || A2A_PERSONAL_OWNER_SCOPE;
|
|
472
|
+
|
|
473
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
474
|
+
const id = crypto.randomUUID();
|
|
475
|
+
const now = Date.now();
|
|
476
|
+
const timestamp = new Date().toISOString();
|
|
477
|
+
await client.execute({
|
|
478
|
+
sql: `INSERT INTO a2a_tasks (id, context_id, status_state, status_timestamp, history, artifacts, metadata, owner_email, owner_scope, idempotency_key, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(owner_email, owner_scope, idempotency_key) DO NOTHING`,
|
|
479
|
+
args: [
|
|
480
|
+
id,
|
|
481
|
+
contextId ?? null,
|
|
482
|
+
"submitted",
|
|
483
|
+
timestamp,
|
|
484
|
+
JSON.stringify([message]),
|
|
485
|
+
"[]",
|
|
486
|
+
metadata ? JSON.stringify(metadata) : null,
|
|
487
|
+
normalizedOwner,
|
|
488
|
+
normalizedScope,
|
|
489
|
+
idempotencyKey,
|
|
490
|
+
now,
|
|
491
|
+
now,
|
|
492
|
+
],
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
const { rows } = await client.execute({
|
|
496
|
+
sql: `SELECT * FROM a2a_tasks WHERE owner_email = ? AND owner_scope = ? AND idempotency_key = ?`,
|
|
497
|
+
args: [normalizedOwner, normalizedScope, idempotencyKey],
|
|
498
|
+
});
|
|
499
|
+
if (rows.length === 0) {
|
|
500
|
+
throw new Error("A2A idempotent task insert could not be verified");
|
|
501
|
+
}
|
|
502
|
+
const task = taskFromRow(rows[0]);
|
|
503
|
+
const reused = task.id !== id;
|
|
504
|
+
if (
|
|
505
|
+
reused &&
|
|
506
|
+
(task.status.state === "failed" || task.status.state === "canceled")
|
|
507
|
+
) {
|
|
508
|
+
await client.execute({
|
|
509
|
+
sql: `UPDATE a2a_tasks SET idempotency_key = NULL, updated_at = ? WHERE id = ? AND idempotency_key = ? AND status_state IN ('failed', 'canceled')`,
|
|
510
|
+
args: [Date.now(), task.id, idempotencyKey],
|
|
511
|
+
});
|
|
512
|
+
continue;
|
|
513
|
+
}
|
|
514
|
+
return { task, reused };
|
|
515
|
+
}
|
|
516
|
+
throw new Error("A2A terminal task idempotency key could not be released");
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
export interface A2ATaskOwnership {
|
|
520
|
+
ownerEmail: string | null;
|
|
521
|
+
ownerScope: string | null;
|
|
522
|
+
}
|
|
523
|
+
|
|
394
524
|
/**
|
|
395
525
|
* Fetch the verified owner email recorded against a task at creation time.
|
|
396
526
|
* Returns null when the task has no owner (legacy rows or unauthenticated
|
|
@@ -400,15 +530,25 @@ export async function createTask(
|
|
|
400
530
|
* verified caller's email must match `owner_email` to read or cancel.
|
|
401
531
|
*/
|
|
402
532
|
export async function getTaskOwner(id: string): Promise<string | null> {
|
|
533
|
+
return (await getTaskOwnership(id)).ownerEmail;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
export async function getTaskOwnership(id: string): Promise<A2ATaskOwnership> {
|
|
403
537
|
await ensureTable();
|
|
404
538
|
const client = getDbExec();
|
|
405
539
|
const { rows } = await client.execute({
|
|
406
|
-
sql: `SELECT owner_email FROM a2a_tasks WHERE id = ?`,
|
|
540
|
+
sql: `SELECT owner_email, owner_scope FROM a2a_tasks WHERE id = ?`,
|
|
407
541
|
args: [id],
|
|
408
542
|
});
|
|
409
|
-
if (rows.length === 0) return null;
|
|
543
|
+
if (rows.length === 0) return { ownerEmail: null, ownerScope: null };
|
|
410
544
|
const ownerEmail = (rows[0] as any).owner_email;
|
|
411
|
-
|
|
545
|
+
const ownerScope = (rows[0] as any).owner_scope;
|
|
546
|
+
return {
|
|
547
|
+
ownerEmail:
|
|
548
|
+
typeof ownerEmail === "string" && ownerEmail ? ownerEmail : null,
|
|
549
|
+
ownerScope:
|
|
550
|
+
typeof ownerScope === "string" && ownerScope ? ownerScope : null,
|
|
551
|
+
};
|
|
412
552
|
}
|
|
413
553
|
|
|
414
554
|
/**
|
|
@@ -132,6 +132,19 @@ export interface A2AApprovedAction {
|
|
|
132
132
|
input: unknown;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Telemetry-only cross-app correlation. Receivers must never use these
|
|
137
|
+
* caller-supplied values for identity, ownership, org scoping, access, or
|
|
138
|
+
* approval decisions.
|
|
139
|
+
*/
|
|
140
|
+
export interface A2ACorrelationMetadata {
|
|
141
|
+
callerApp?: string;
|
|
142
|
+
callerThreadId?: string;
|
|
143
|
+
parentRunId?: string;
|
|
144
|
+
parentTurnId?: string;
|
|
145
|
+
invocationId?: string;
|
|
146
|
+
}
|
|
147
|
+
|
|
135
148
|
// --- Framework config ---
|
|
136
149
|
|
|
137
150
|
export interface A2AHandlerContext {
|
|
@@ -164,6 +177,19 @@ export interface A2AApprovalExecution {
|
|
|
164
177
|
callId: string;
|
|
165
178
|
}
|
|
166
179
|
|
|
180
|
+
/** One explicitly exposed read-only app action invoked without an agent loop. */
|
|
181
|
+
export interface A2AReadOnlyActionInvocation {
|
|
182
|
+
action: string;
|
|
183
|
+
input: Record<string, unknown>;
|
|
184
|
+
invocationId: string;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export interface A2AReadOnlyActionResult {
|
|
188
|
+
action: string;
|
|
189
|
+
status: "completed" | "failed";
|
|
190
|
+
output: string;
|
|
191
|
+
}
|
|
192
|
+
|
|
167
193
|
export type A2AHandler = (
|
|
168
194
|
message: Message,
|
|
169
195
|
context: A2AHandlerContext,
|
|
@@ -171,6 +197,8 @@ export type A2AHandler = (
|
|
|
171
197
|
|
|
172
198
|
export interface A2AConfig {
|
|
173
199
|
name: string;
|
|
200
|
+
/** Canonical receiver app id used only for telemetry attribution. */
|
|
201
|
+
appId?: string;
|
|
174
202
|
description: string;
|
|
175
203
|
version?: string;
|
|
176
204
|
skills: AgentSkill[];
|
|
@@ -186,4 +214,8 @@ export interface A2AConfig {
|
|
|
186
214
|
status: "completed" | "failed";
|
|
187
215
|
output: string;
|
|
188
216
|
}>;
|
|
217
|
+
/** Execute an explicitly exposed read-only action without starting a model. */
|
|
218
|
+
executeReadOnlyAction?: (
|
|
219
|
+
invocation: A2AReadOnlyActionInvocation,
|
|
220
|
+
) => Promise<Pick<A2AReadOnlyActionResult, "status" | "output">>;
|
|
189
221
|
}
|
|
@@ -24,8 +24,9 @@ import type { ActionAuditConfig } from "./audit/types.js";
|
|
|
24
24
|
* `callAction` (tagged with the `X-Request-Source` header).
|
|
25
25
|
* - `"cli"` — `pnpm action <name>` (the CLI runner).
|
|
26
26
|
* - `"mcp"` — an external agent over the MCP `tools/call` endpoint.
|
|
27
|
-
* - `"a2a"` — a direct,
|
|
28
|
-
* still runs through the agent loop and
|
|
27
|
+
* - `"a2a"` — a direct, explicitly exposed read-only A2A action dispatch.
|
|
28
|
+
* Natural-language A2A delegation still runs through the agent loop and its
|
|
29
|
+
* selected actions are attributed as `"tool"`.
|
|
29
30
|
*/
|
|
30
31
|
export type ActionCaller = "tool" | "http" | "frontend" | "cli" | "mcp" | "a2a";
|
|
31
32
|
|
|
@@ -96,6 +97,8 @@ export interface ActionRunContext {
|
|
|
96
97
|
* every human/programmatic surface.
|
|
97
98
|
*/
|
|
98
99
|
threadId?: string;
|
|
100
|
+
/** Concrete execution id for this agent-loop attempt. */
|
|
101
|
+
runId?: string;
|
|
99
102
|
turnId?: string;
|
|
100
103
|
}
|
|
101
104
|
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from "h3";
|
|
9
9
|
import type { EventHandler as H3EventHandler } from "h3";
|
|
10
10
|
|
|
11
|
-
import { isAgentActionStopError } from "../action.js";
|
|
11
|
+
import { isAgentActionStopError, type ActionCaller } from "../action.js";
|
|
12
12
|
import { readAppState } from "../application-state/script-helpers.js";
|
|
13
13
|
import { isReadOnlyShellCommand } from "../coding-tools/index.js";
|
|
14
14
|
import { extensionIdFromPathname } from "../extensions/path.js";
|
|
@@ -2479,6 +2479,11 @@ export interface ExecuteAgentToolCallOptions {
|
|
|
2479
2479
|
signal?: AbortSignal;
|
|
2480
2480
|
ownerEmail?: string | null;
|
|
2481
2481
|
orgId?: string | null;
|
|
2482
|
+
/** Audit/action attribution for this externally selected call. */
|
|
2483
|
+
caller?: ActionCaller;
|
|
2484
|
+
networkProtocol?: "a2a" | "mcp" | "provider-api";
|
|
2485
|
+
networkId?: string;
|
|
2486
|
+
networkPeer?: string;
|
|
2482
2487
|
threadId?: string;
|
|
2483
2488
|
turnId?: string;
|
|
2484
2489
|
approvedToolCalls?: string[];
|
|
@@ -2573,6 +2578,10 @@ export async function executeAgentToolCall(
|
|
|
2573
2578
|
signal,
|
|
2574
2579
|
ownerEmail: options.ownerEmail,
|
|
2575
2580
|
orgId: options.orgId,
|
|
2581
|
+
actionCaller: options.caller,
|
|
2582
|
+
networkProtocol: options.networkProtocol,
|
|
2583
|
+
networkId: options.networkId,
|
|
2584
|
+
networkPeer: options.networkPeer,
|
|
2576
2585
|
executionMode: "act",
|
|
2577
2586
|
maxIterations: 2,
|
|
2578
2587
|
threadId: options.threadId,
|
|
@@ -3152,6 +3161,14 @@ export async function runAgentLoop(opts: {
|
|
|
3152
3161
|
signal: AbortSignal;
|
|
3153
3162
|
ownerEmail?: string | null;
|
|
3154
3163
|
orgId?: string | null;
|
|
3164
|
+
/** Action invocation attribution. Defaults to the normal agent tool loop. */
|
|
3165
|
+
actionCaller?: ActionCaller;
|
|
3166
|
+
/** Concrete execution id used for cross-app trace correlation. */
|
|
3167
|
+
runId?: string;
|
|
3168
|
+
/** Verified/telemetry-only delegated lineage supplied by the transport. */
|
|
3169
|
+
networkProtocol?: "a2a" | "mcp" | "provider-api";
|
|
3170
|
+
networkId?: string;
|
|
3171
|
+
networkPeer?: string;
|
|
3155
3172
|
/**
|
|
3156
3173
|
* Attachments submitted with this turn (pasted text, files, images), passed
|
|
3157
3174
|
* through to each tool's `ActionRunContext.attachments` so actions can
|
|
@@ -4102,6 +4119,7 @@ export async function runAgentLoop(opts: {
|
|
|
4102
4119
|
requestedActionStop ??= {
|
|
4103
4120
|
message:
|
|
4104
4121
|
`Stopped because ${toolCall.name} failed ${count} times with the same arguments and error. ` +
|
|
4122
|
+
`Last error: ${sanitizedResult} ` +
|
|
4105
4123
|
"Fix the underlying issue or change the arguments before retrying.",
|
|
4106
4124
|
errorCode: "repeated_identical_tool_error",
|
|
4107
4125
|
};
|
|
@@ -4208,7 +4226,10 @@ export async function runAgentLoop(opts: {
|
|
|
4208
4226
|
await actionEntry.needsApproval(toolCall.input, {
|
|
4209
4227
|
userEmail: getRequestUserEmail(),
|
|
4210
4228
|
orgId: getRequestOrgId() ?? null,
|
|
4211
|
-
caller: "tool",
|
|
4229
|
+
caller: opts.actionCaller ?? "tool",
|
|
4230
|
+
networkProtocol: opts.networkProtocol,
|
|
4231
|
+
networkId: opts.networkId,
|
|
4232
|
+
networkPeer: opts.networkPeer,
|
|
4212
4233
|
}),
|
|
4213
4234
|
)
|
|
4214
4235
|
: actionEntry.needsApproval === true;
|
|
@@ -4242,7 +4263,10 @@ export async function runAgentLoop(opts: {
|
|
|
4242
4263
|
args: toolCall.input,
|
|
4243
4264
|
ctx: {
|
|
4244
4265
|
actionName: toolCall.name,
|
|
4245
|
-
caller: "tool",
|
|
4266
|
+
caller: opts.actionCaller ?? "tool",
|
|
4267
|
+
networkProtocol: opts.networkProtocol,
|
|
4268
|
+
networkId: opts.networkId,
|
|
4269
|
+
networkPeer: opts.networkPeer,
|
|
4246
4270
|
userEmail: getRequestUserEmail(),
|
|
4247
4271
|
orgId: getRequestOrgId() ?? null,
|
|
4248
4272
|
...(opts.threadId ? { threadId: opts.threadId } : {}),
|
|
@@ -4638,13 +4662,17 @@ export async function runAgentLoop(opts: {
|
|
|
4638
4662
|
send,
|
|
4639
4663
|
userEmail: actionUserEmail ?? undefined,
|
|
4640
4664
|
orgId: actionOrgId,
|
|
4641
|
-
caller: "tool"
|
|
4665
|
+
caller: opts.actionCaller ?? "tool",
|
|
4666
|
+
networkProtocol: opts.networkProtocol,
|
|
4667
|
+
networkId: opts.networkId,
|
|
4668
|
+
networkPeer: opts.networkPeer,
|
|
4642
4669
|
attachments: opts.attachments,
|
|
4643
4670
|
signal,
|
|
4644
4671
|
// Audit attribution: the action name + the agent thread/turn that
|
|
4645
4672
|
// triggered this call, so a mutation can be traced to its run.
|
|
4646
4673
|
actionName: toolCall.name,
|
|
4647
4674
|
...(opts.threadId ? { threadId: opts.threadId } : {}),
|
|
4675
|
+
...(opts.runId ? { runId: opts.runId } : {}),
|
|
4648
4676
|
...(opts.turnId ? { turnId: opts.turnId } : {}),
|
|
4649
4677
|
};
|
|
4650
4678
|
const requestContext = getRequestContext();
|
|
@@ -7998,6 +8026,7 @@ export function createProductionAgentHandler(
|
|
|
7998
8026
|
const agentLoopOpts = {
|
|
7999
8027
|
engine,
|
|
8000
8028
|
model: effectiveModel,
|
|
8029
|
+
runId,
|
|
8001
8030
|
systemPrompt: requestSystemPrompt,
|
|
8002
8031
|
tools: requestTools,
|
|
8003
8032
|
availableTools: availableRequestTools,
|