@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
|
@@ -23,6 +23,10 @@ import {
|
|
|
23
23
|
isLoopbackAddress,
|
|
24
24
|
isTrustedLocalRuntime,
|
|
25
25
|
} from "../a2a/auth-policy.js";
|
|
26
|
+
import {
|
|
27
|
+
sanitizeA2ACorrelationId,
|
|
28
|
+
sanitizeA2ACorrelationMetadata,
|
|
29
|
+
} from "../a2a/correlation.js";
|
|
26
30
|
import { applyAgentTextEventToBuffer } from "../a2a/response-text.js";
|
|
27
31
|
import {
|
|
28
32
|
createA2AApproval,
|
|
@@ -115,6 +119,7 @@ import {
|
|
|
115
119
|
type ForkThreadSourceSnapshot,
|
|
116
120
|
} from "../chat-threads/store.js";
|
|
117
121
|
import { createDbAdminAgentTools } from "../db-admin/agent-tools.js";
|
|
122
|
+
import { isTransientDatabaseError } from "../db/client.js";
|
|
118
123
|
import {
|
|
119
124
|
verifyInternalToken,
|
|
120
125
|
extractBearerToken,
|
|
@@ -185,6 +190,55 @@ import {
|
|
|
185
190
|
export { handleSharedThreadRequest };
|
|
186
191
|
export type { SharedThreadRouteDependencies };
|
|
187
192
|
|
|
193
|
+
function withTransientDatabaseFallback(
|
|
194
|
+
route: string,
|
|
195
|
+
handler: (event: H3Event) => unknown,
|
|
196
|
+
) {
|
|
197
|
+
return defineEventHandler(async (event) => {
|
|
198
|
+
try {
|
|
199
|
+
return await handler(event);
|
|
200
|
+
} catch (error) {
|
|
201
|
+
if (!isTransientDatabaseError(error)) throw error;
|
|
202
|
+
|
|
203
|
+
const method = getMethod(event);
|
|
204
|
+
const retrySafe = method === "GET" || method === "HEAD";
|
|
205
|
+
|
|
206
|
+
const databaseError = error as {
|
|
207
|
+
code?: unknown;
|
|
208
|
+
cause?: { code?: unknown };
|
|
209
|
+
};
|
|
210
|
+
captureError(new Error("Transient database failure in agent chat"), {
|
|
211
|
+
route,
|
|
212
|
+
method,
|
|
213
|
+
tags: {
|
|
214
|
+
source: "agent-chat",
|
|
215
|
+
failureClass: "transient-database",
|
|
216
|
+
},
|
|
217
|
+
extra: {
|
|
218
|
+
databaseErrorName: error instanceof Error ? error.name : typeof error,
|
|
219
|
+
databaseErrorCode:
|
|
220
|
+
typeof databaseError.code === "string"
|
|
221
|
+
? databaseError.code
|
|
222
|
+
: undefined,
|
|
223
|
+
databaseCauseCode:
|
|
224
|
+
typeof databaseError.cause?.code === "string"
|
|
225
|
+
? databaseError.cause.code
|
|
226
|
+
: undefined,
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
setResponseStatus(event, 503);
|
|
230
|
+
if (retrySafe) setResponseHeader(event, "Retry-After", "2");
|
|
231
|
+
return {
|
|
232
|
+
error: retrySafe
|
|
233
|
+
? "The database is temporarily unavailable. Please retry."
|
|
234
|
+
: "The database became unavailable while processing this request. Refresh before deciding whether to retry.",
|
|
235
|
+
code: "database_unavailable",
|
|
236
|
+
retryable: retrySafe,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
|
|
188
242
|
// Lazy fs — loaded via dynamic import() on first use.
|
|
189
243
|
// This avoids require() which bundlers convert to createRequire(import.meta.url)
|
|
190
244
|
// that crashes on CF Workers where import.meta.url is undefined.
|
|
@@ -210,6 +264,7 @@ import {
|
|
|
210
264
|
createA2AEngineToolSurface,
|
|
211
265
|
filterAgentTools,
|
|
212
266
|
filterPublicAgentActions,
|
|
267
|
+
filterDirectA2AActions,
|
|
213
268
|
filterReadOnlyActions,
|
|
214
269
|
resolveInitialToolNames,
|
|
215
270
|
runA2AAgentLoop,
|
|
@@ -1208,6 +1263,7 @@ export function createAgentChatPlugin(
|
|
|
1208
1263
|
|
|
1209
1264
|
const { mountA2A } = await import("../a2a/server.js");
|
|
1210
1265
|
mountA2A(nitroApp, {
|
|
1266
|
+
appId: options?.appId,
|
|
1211
1267
|
name: options?.appId
|
|
1212
1268
|
? options.appId.charAt(0).toUpperCase() + options.appId.slice(1)
|
|
1213
1269
|
: "Agent",
|
|
@@ -1216,6 +1272,38 @@ export function createAgentChatPlugin(
|
|
|
1216
1272
|
publicSkillsOnly: true,
|
|
1217
1273
|
streaming: true,
|
|
1218
1274
|
durableBackgroundRuns: options?.durableBackgroundRuns,
|
|
1275
|
+
executeReadOnlyAction: async ({ action, input, invocationId }) => {
|
|
1276
|
+
const actions = filterDirectA2AActions(
|
|
1277
|
+
mcpFullActions ?? allScripts,
|
|
1278
|
+
options ?? {},
|
|
1279
|
+
);
|
|
1280
|
+
const entry = actions[action];
|
|
1281
|
+
if (!entry) {
|
|
1282
|
+
return {
|
|
1283
|
+
status: "failed" as const,
|
|
1284
|
+
output: "Unknown or unavailable read-only action",
|
|
1285
|
+
};
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
const result = await executeAgentToolCall({
|
|
1289
|
+
actions: { [action]: entry },
|
|
1290
|
+
name: action,
|
|
1291
|
+
input,
|
|
1292
|
+
callId: `a2a-action-${invocationId}`,
|
|
1293
|
+
ownerEmail: getRequestUserEmail(),
|
|
1294
|
+
orgId: getRequestOrgId() ?? null,
|
|
1295
|
+
caller: "a2a",
|
|
1296
|
+
networkProtocol: "a2a",
|
|
1297
|
+
networkId: invocationId,
|
|
1298
|
+
});
|
|
1299
|
+
if (result.status === "approval_required") {
|
|
1300
|
+
return {
|
|
1301
|
+
status: "failed" as const,
|
|
1302
|
+
output: "Read-only action unexpectedly requires approval",
|
|
1303
|
+
};
|
|
1304
|
+
}
|
|
1305
|
+
return { status: result.status, output: result.output };
|
|
1306
|
+
},
|
|
1219
1307
|
executeApproval: async (approval) => {
|
|
1220
1308
|
const result = await executeAgentToolCall({
|
|
1221
1309
|
actions: mcpFullActions ?? allScripts,
|
|
@@ -1543,6 +1631,11 @@ export function createAgentChatPlugin(
|
|
|
1543
1631
|
const recoverableArtifactStatusWriter =
|
|
1544
1632
|
createSerializedA2ATaskStatusWriter(context.taskId);
|
|
1545
1633
|
const controller = new AbortController();
|
|
1634
|
+
const correlation = sanitizeA2ACorrelationMetadata(context.metadata);
|
|
1635
|
+
const telemetryThreadId =
|
|
1636
|
+
sanitizeA2ACorrelationId(context.contextId) ??
|
|
1637
|
+
correlation.callerThreadId ??
|
|
1638
|
+
context.taskId;
|
|
1546
1639
|
|
|
1547
1640
|
console.log(
|
|
1548
1641
|
`[A2A] Starting agent loop: ${a2aToolSurface.tools.length}/${a2aToolSurface.availableTools.length} initial tools, prompt ${systemPrompt.length} chars`,
|
|
@@ -1567,6 +1660,11 @@ export function createAgentChatPlugin(
|
|
|
1567
1660
|
toolCallCacheKey(approved.tool, approved.input),
|
|
1568
1661
|
),
|
|
1569
1662
|
executionMode: "act",
|
|
1663
|
+
runId: context.taskId,
|
|
1664
|
+
networkProtocol: "a2a",
|
|
1665
|
+
networkId: context.taskId,
|
|
1666
|
+
threadId: context.taskId,
|
|
1667
|
+
turnId: context.taskId,
|
|
1570
1668
|
send: (event) => {
|
|
1571
1669
|
a2aEvents.push(event);
|
|
1572
1670
|
if (event.type === "tool_start") {
|
|
@@ -1627,6 +1725,26 @@ export function createAgentChatPlugin(
|
|
|
1627
1725
|
options?.durableBackgroundRuns === true &&
|
|
1628
1726
|
isInBackgroundFunctionRuntime(),
|
|
1629
1727
|
},
|
|
1728
|
+
{
|
|
1729
|
+
telemetry: {
|
|
1730
|
+
runId: context.taskId,
|
|
1731
|
+
threadId: telemetryThreadId,
|
|
1732
|
+
userId: userEmail,
|
|
1733
|
+
delegation: {
|
|
1734
|
+
protocol: "a2a",
|
|
1735
|
+
taskId: context.taskId,
|
|
1736
|
+
...(correlation.callerApp
|
|
1737
|
+
? { callerApp: correlation.callerApp }
|
|
1738
|
+
: {}),
|
|
1739
|
+
...(correlation.parentRunId
|
|
1740
|
+
? { parentRunId: correlation.parentRunId }
|
|
1741
|
+
: {}),
|
|
1742
|
+
...(correlation.parentTurnId
|
|
1743
|
+
? { parentTurnId: correlation.parentTurnId }
|
|
1744
|
+
: {}),
|
|
1745
|
+
},
|
|
1746
|
+
},
|
|
1747
|
+
},
|
|
1630
1748
|
);
|
|
1631
1749
|
|
|
1632
1750
|
// The continuation can observe terminal output immediately, so make
|
|
@@ -1783,6 +1901,7 @@ export function createAgentChatPlugin(
|
|
|
1783
1901
|
: {}),
|
|
1784
1902
|
askAgent: async (message: string) => {
|
|
1785
1903
|
const ownerEmail = getRequestUserEmail();
|
|
1904
|
+
const mcpRunId = crypto.randomUUID();
|
|
1786
1905
|
const { getOwnerActiveApiKey } =
|
|
1787
1906
|
await import("../agent/production-agent.js");
|
|
1788
1907
|
const ownerApiKey = ownerEmail
|
|
@@ -1911,9 +2030,14 @@ export function createAgentChatPlugin(
|
|
|
1911
2030
|
},
|
|
1912
2031
|
],
|
|
1913
2032
|
actions: mcpActions,
|
|
1914
|
-
ownerEmail
|
|
2033
|
+
ownerEmail,
|
|
1915
2034
|
orgId: getRequestOrgId() ?? null,
|
|
1916
2035
|
executionMode: "act",
|
|
2036
|
+
runId: mcpRunId,
|
|
2037
|
+
networkProtocol: "mcp",
|
|
2038
|
+
networkId: mcpRunId,
|
|
2039
|
+
threadId: mcpRunId,
|
|
2040
|
+
turnId: mcpRunId,
|
|
1917
2041
|
send: (event) => {
|
|
1918
2042
|
accumulatedText = applyAgentTextEventToBuffer(
|
|
1919
2043
|
accumulatedText,
|
|
@@ -1931,6 +2055,14 @@ export function createAgentChatPlugin(
|
|
|
1931
2055
|
options?.durableBackgroundRuns === true &&
|
|
1932
2056
|
isInBackgroundFunctionRuntime(),
|
|
1933
2057
|
},
|
|
2058
|
+
{
|
|
2059
|
+
telemetry: {
|
|
2060
|
+
runId: mcpRunId,
|
|
2061
|
+
threadId: mcpRunId,
|
|
2062
|
+
userId: ownerEmail ?? null,
|
|
2063
|
+
delegation: { protocol: "mcp" },
|
|
2064
|
+
},
|
|
2065
|
+
},
|
|
1934
2066
|
);
|
|
1935
2067
|
|
|
1936
2068
|
return accumulatedText || "(no response)";
|
|
@@ -4203,7 +4335,7 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
|
|
|
4203
4335
|
// GET /runs/active?threadId=X — check if there's an active run for a thread
|
|
4204
4336
|
getH3App(nitroApp).use(
|
|
4205
4337
|
`${routePath}/runs`,
|
|
4206
|
-
|
|
4338
|
+
withTransientDatabaseFallback(`${routePath}/runs`, async (event) => {
|
|
4207
4339
|
// Auth check — ensure the user is authenticated
|
|
4208
4340
|
const owner = await getOwnerFromEvent(event);
|
|
4209
4341
|
|
|
@@ -4722,7 +4854,7 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
|
|
|
4722
4854
|
`${getOrigin(event)}${routePath}/shared/${encodeURIComponent(token)}`;
|
|
4723
4855
|
getH3App(nitroApp).use(
|
|
4724
4856
|
`${routePath}/threads`,
|
|
4725
|
-
|
|
4857
|
+
withTransientDatabaseFallback(`${routePath}/threads`, async (event) => {
|
|
4726
4858
|
const owner = await getOwnerFromEvent(event);
|
|
4727
4859
|
const orgId = await getOrgIdFromEvent(event);
|
|
4728
4860
|
const method = getMethod(event);
|
|
@@ -5352,7 +5484,7 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
|
|
|
5352
5484
|
// earlier-mounted handlers (mode, save-key, files, skills, mentions, threads) handle them.
|
|
5353
5485
|
getH3App(nitroApp).use(
|
|
5354
5486
|
routePath,
|
|
5355
|
-
|
|
5487
|
+
withTransientDatabaseFallback(routePath, async (event) => {
|
|
5356
5488
|
// Skip sub-path requests — they're handled by earlier-mounted handlers
|
|
5357
5489
|
const url = event.node?.req?.url || event.path || "";
|
|
5358
5490
|
const afterBase = url.slice(
|
|
@@ -502,6 +502,13 @@
|
|
|
502
502
|
opacity 150ms ease-out;
|
|
503
503
|
}
|
|
504
504
|
|
|
505
|
+
@starting-style {
|
|
506
|
+
.agent-chat-collapse[data-state="open"] {
|
|
507
|
+
grid-template-rows: 0fr;
|
|
508
|
+
opacity: 0;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
505
512
|
.agent-chat-collapse[data-state="closed"] {
|
|
506
513
|
grid-template-rows: 0fr;
|
|
507
514
|
opacity: 0;
|
|
@@ -80,12 +80,32 @@ const messages = {
|
|
|
80
80
|
'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
|
|
81
81
|
appsInWorkspace: "Apps in {{workspace}}",
|
|
82
82
|
workspaceApps: "تطبيقات مساحة العمل",
|
|
83
|
+
otherApps: "تطبيقات أخرى",
|
|
84
|
+
otherAppsDescription: "افتح التطبيقات الأخرى المتاحة لك.",
|
|
85
|
+
availableCount: "{{count}} متاح",
|
|
83
86
|
activeCount: "{{count}} active",
|
|
84
87
|
hiddenCount: "{{count}} hidden",
|
|
85
88
|
createApp: "إنشاء التطبيق",
|
|
86
89
|
templates: "القوالب",
|
|
87
90
|
checkingTemplates: "التحقق من القوالب المتاحة",
|
|
88
91
|
templatesAvailable: "{{count}} available to scaffold",
|
|
92
|
+
curatedTemplates: "قوالب منسقة",
|
|
93
|
+
curatedTemplatesDescription:
|
|
94
|
+
"ابدأ من شكل تطبيق تمت مراجعته، ثم اجعله خاصًا بك.",
|
|
95
|
+
remix: "إعادة المزج",
|
|
96
|
+
remixTemplate: "إعادة مزج {{name}}",
|
|
97
|
+
remixAppIdLabel: "معرّف التطبيق الجديد",
|
|
98
|
+
remixStarted: "بدأت إعادة مزج {{name}}",
|
|
99
|
+
viewLiveApp: "عرض التطبيق المباشر",
|
|
100
|
+
alreadyInWorkspace: "موجود بالفعل في مساحة العمل",
|
|
101
|
+
remixAppIdDescription:
|
|
102
|
+
"اختر معرّفًا آمنًا لعنوان URL لتطبيق مساحة العمل الجديد.",
|
|
103
|
+
integrationSetup: "إعداد التكامل",
|
|
104
|
+
source: "المصدر",
|
|
105
|
+
remixing: "جارٍ إعادة المزج…",
|
|
106
|
+
remixSuccess: "بدأت إعادة مزج القالب.",
|
|
107
|
+
remixError: "تعذرت إعادة مزج هذا القالب",
|
|
108
|
+
appIdRequired: "معرّف التطبيق مطلوب.",
|
|
89
109
|
hide: "إخفاء",
|
|
90
110
|
show: "Show",
|
|
91
111
|
hiddenApps: "التطبيقات المخفية",
|
|
@@ -79,12 +79,32 @@ const messages = {
|
|
|
79
79
|
'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
|
|
80
80
|
appsInWorkspace: "Apps in {{workspace}}",
|
|
81
81
|
workspaceApps: "Workspace-Apps",
|
|
82
|
+
otherApps: "Andere Apps",
|
|
83
|
+
otherAppsDescription: "Andere für dich verfügbare Apps öffnen.",
|
|
84
|
+
availableCount: "{{count}} verfügbar",
|
|
82
85
|
activeCount: "{{count}} active",
|
|
83
86
|
hiddenCount: "{{count}} hidden",
|
|
84
87
|
createApp: "App erstellen",
|
|
85
88
|
templates: "Vorlagen",
|
|
86
89
|
checkingTemplates: "Überprüfen verfügbarer Vorlagen",
|
|
87
90
|
templatesAvailable: "{{count}} available to scaffold",
|
|
91
|
+
curatedTemplates: "Kuratierte Vorlagen",
|
|
92
|
+
curatedTemplatesDescription:
|
|
93
|
+
"Starte mit einer geprüften App-Struktur und passe sie an.",
|
|
94
|
+
remix: "Remix",
|
|
95
|
+
remixTemplate: "{{name}} remixen",
|
|
96
|
+
remixAppIdLabel: "Neue App-ID",
|
|
97
|
+
remixStarted: "Remix für {{name}} gestartet",
|
|
98
|
+
viewLiveApp: "Live-App öffnen",
|
|
99
|
+
alreadyInWorkspace: "Bereits im Workspace",
|
|
100
|
+
remixAppIdDescription:
|
|
101
|
+
"Wähle eine URL-sichere ID für die neue Workspace-App.",
|
|
102
|
+
integrationSetup: "Integration einrichten",
|
|
103
|
+
source: "Quelle",
|
|
104
|
+
remixing: "Remix wird erstellt…",
|
|
105
|
+
remixSuccess: "Template-Remix gestartet.",
|
|
106
|
+
remixError: "Dieses Template konnte nicht geremixt werden",
|
|
107
|
+
appIdRequired: "App-ID ist erforderlich.",
|
|
88
108
|
hide: "Ausblenden",
|
|
89
109
|
show: "Show",
|
|
90
110
|
hiddenApps: "Versteckte Apps",
|
|
@@ -77,12 +77,32 @@ const messages = {
|
|
|
77
77
|
'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
|
|
78
78
|
appsInWorkspace: "Apps in {{workspace}}",
|
|
79
79
|
workspaceApps: "Workspace apps",
|
|
80
|
+
otherApps: "Other apps",
|
|
81
|
+
otherAppsDescription: "Open other apps available to you.",
|
|
82
|
+
availableCount: "{{count}} available",
|
|
80
83
|
activeCount: "{{count}} active",
|
|
81
84
|
hiddenCount: "{{count}} hidden",
|
|
82
85
|
createApp: "Create app",
|
|
83
86
|
templates: "Templates",
|
|
84
87
|
checkingTemplates: "Checking available templates",
|
|
85
88
|
templatesAvailable: "{{count}} available to scaffold",
|
|
89
|
+
curatedTemplates: "Curated templates",
|
|
90
|
+
curatedTemplatesDescription:
|
|
91
|
+
"Start from a reviewed app shape, then make it your own.",
|
|
92
|
+
remix: "Remix",
|
|
93
|
+
remixTemplate: "Remix {{name}}",
|
|
94
|
+
remixAppIdLabel: "New app id",
|
|
95
|
+
remixStarted: "Started {{name}} remix",
|
|
96
|
+
viewLiveApp: "View live app",
|
|
97
|
+
alreadyInWorkspace: "Already in workspace",
|
|
98
|
+
remixAppIdDescription:
|
|
99
|
+
"Choose the URL-safe id for the new workspace app.",
|
|
100
|
+
integrationSetup: "Integration setup",
|
|
101
|
+
source: "Source",
|
|
102
|
+
remixing: "Remixing…",
|
|
103
|
+
remixSuccess: "Template remix started.",
|
|
104
|
+
remixError: "Could not remix this template",
|
|
105
|
+
appIdRequired: "App ID is required.",
|
|
86
106
|
hide: "Hide",
|
|
87
107
|
show: "Show",
|
|
88
108
|
hiddenApps: "Hidden apps",
|
|
@@ -79,12 +79,32 @@ const messages = {
|
|
|
79
79
|
'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
|
|
80
80
|
appsInWorkspace: "Apps in {{workspace}}",
|
|
81
81
|
workspaceApps: "Aplicaciones de espacio de trabajo",
|
|
82
|
+
otherApps: "Otras aplicaciones",
|
|
83
|
+
otherAppsDescription: "Abre otras aplicaciones disponibles para ti.",
|
|
84
|
+
availableCount: "{{count}} disponibles",
|
|
82
85
|
activeCount: "{{count}} active",
|
|
83
86
|
hiddenCount: "{{count}} hidden",
|
|
84
87
|
createApp: "Crear aplicación",
|
|
85
88
|
templates: "Plantillas",
|
|
86
89
|
checkingTemplates: "Comprobando plantillas disponibles",
|
|
87
90
|
templatesAvailable: "{{count}} available to scaffold",
|
|
91
|
+
curatedTemplates: "Plantillas seleccionadas",
|
|
92
|
+
curatedTemplatesDescription:
|
|
93
|
+
"Empieza con una estructura de aplicación revisada y hazla tuya.",
|
|
94
|
+
remix: "Reutilizar",
|
|
95
|
+
remixTemplate: "Reutilizar {{name}}",
|
|
96
|
+
remixAppIdLabel: "Nuevo ID de aplicación",
|
|
97
|
+
remixStarted: "Se inició la reutilización de {{name}}",
|
|
98
|
+
viewLiveApp: "Ver aplicación en vivo",
|
|
99
|
+
alreadyInWorkspace: "Ya está en el espacio de trabajo",
|
|
100
|
+
remixAppIdDescription:
|
|
101
|
+
"Elige un ID seguro para URL para la nueva aplicación.",
|
|
102
|
+
integrationSetup: "Configuración de integración",
|
|
103
|
+
source: "Origen",
|
|
104
|
+
remixing: "Reutilizando…",
|
|
105
|
+
remixSuccess: "Se inició la reutilización de la plantilla.",
|
|
106
|
+
remixError: "No se pudo reutilizar esta plantilla",
|
|
107
|
+
appIdRequired: "El ID de aplicación es obligatorio.",
|
|
88
108
|
hide: "Ocultar",
|
|
89
109
|
show: "Show",
|
|
90
110
|
hiddenApps: "Aplicaciones ocultas",
|
|
@@ -80,12 +80,33 @@ const messages = {
|
|
|
80
80
|
'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
|
|
81
81
|
appsInWorkspace: "Apps in {{workspace}}",
|
|
82
82
|
workspaceApps: "Applications d'espace de travail",
|
|
83
|
+
otherApps: "Autres applications",
|
|
84
|
+
otherAppsDescription:
|
|
85
|
+
"Ouvrez les autres applications qui vous sont accessibles.",
|
|
86
|
+
availableCount: "{{count}} disponibles",
|
|
83
87
|
activeCount: "{{count}} active",
|
|
84
88
|
hiddenCount: "{{count}} hidden",
|
|
85
89
|
createApp: "Créer une application",
|
|
86
90
|
templates: "Modèles",
|
|
87
91
|
checkingTemplates: "Vérification des modèles disponibles",
|
|
88
92
|
templatesAvailable: "{{count}} available to scaffold",
|
|
93
|
+
curatedTemplates: "Modèles sélectionnés",
|
|
94
|
+
curatedTemplatesDescription:
|
|
95
|
+
"Partez d’une structure d’application vérifiée et personnalisez-la.",
|
|
96
|
+
remix: "Remixer",
|
|
97
|
+
remixTemplate: "Remixer {{name}}",
|
|
98
|
+
remixAppIdLabel: "Nouvel identifiant d’application",
|
|
99
|
+
remixStarted: "Remix de {{name}} lancé",
|
|
100
|
+
viewLiveApp: "Voir l’application en direct",
|
|
101
|
+
alreadyInWorkspace: "Déjà dans l’espace de travail",
|
|
102
|
+
remixAppIdDescription:
|
|
103
|
+
"Choisissez un identifiant compatible avec l’URL pour la nouvelle application.",
|
|
104
|
+
integrationSetup: "Configuration de l’intégration",
|
|
105
|
+
source: "Source",
|
|
106
|
+
remixing: "Remix en cours…",
|
|
107
|
+
remixSuccess: "Le remix du modèle a démarré.",
|
|
108
|
+
remixError: "Impossible de remixer ce modèle",
|
|
109
|
+
appIdRequired: "L’identifiant de l’application est requis.",
|
|
89
110
|
hide: "Masquer",
|
|
90
111
|
show: "Show",
|
|
91
112
|
hiddenApps: "Applications cachées",
|
|
@@ -75,12 +75,31 @@ const messages = {
|
|
|
75
75
|
'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
|
|
76
76
|
appsInWorkspace: "Apps in {{workspace}}",
|
|
77
77
|
workspaceApps: "कार्यक्षेत्र ऐप्स",
|
|
78
|
+
otherApps: "अन्य ऐप्स",
|
|
79
|
+
otherAppsDescription: "आपके लिए उपलब्ध अन्य ऐप्स खोलें।",
|
|
80
|
+
availableCount: "{{count}} उपलब्ध",
|
|
78
81
|
activeCount: "{{count}} active",
|
|
79
82
|
hiddenCount: "{{count}} hidden",
|
|
80
83
|
createApp: "ऐप बनाएं",
|
|
81
84
|
templates: "टेम्पलेट",
|
|
82
85
|
checkingTemplates: "उपलब्ध टेम्प्लेट की जाँच करना",
|
|
83
86
|
templatesAvailable: "{{count}} available to scaffold",
|
|
87
|
+
curatedTemplates: "चयनित टेम्पलेट",
|
|
88
|
+
curatedTemplatesDescription:
|
|
89
|
+
"समीक्षित ऐप संरचना से शुरू करें और इसे अपने अनुसार बनाएं।",
|
|
90
|
+
remix: "रीमिक्स",
|
|
91
|
+
remixTemplate: "{{name}} रीमिक्स करें",
|
|
92
|
+
remixAppIdLabel: "नया ऐप आईडी",
|
|
93
|
+
remixStarted: "{{name}} रीमिक्स शुरू हुआ",
|
|
94
|
+
viewLiveApp: "लाइव ऐप देखें",
|
|
95
|
+
alreadyInWorkspace: "वर्कस्पेस में पहले से मौजूद",
|
|
96
|
+
remixAppIdDescription: "नए वर्कस्पेस ऐप के लिए URL-सुरक्षित आईडी चुनें।",
|
|
97
|
+
integrationSetup: "इंटीग्रेशन सेटअप",
|
|
98
|
+
source: "स्रोत",
|
|
99
|
+
remixing: "रीमिक्स हो रहा है…",
|
|
100
|
+
remixSuccess: "टेम्पलेट रीमिक्स शुरू हुआ।",
|
|
101
|
+
remixError: "यह टेम्पलेट रीमिक्स नहीं हो सका",
|
|
102
|
+
appIdRequired: "ऐप आईडी आवश्यक है।",
|
|
84
103
|
hide: "छिपाएं",
|
|
85
104
|
show: "Show",
|
|
86
105
|
hiddenApps: "छुपे हुए ऐप्स",
|
|
@@ -77,12 +77,32 @@ const messages = {
|
|
|
77
77
|
'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
|
|
78
78
|
appsInWorkspace: "Apps in {{workspace}}",
|
|
79
79
|
workspaceApps: "ワークスペースアプリ",
|
|
80
|
+
otherApps: "その他のアプリ",
|
|
81
|
+
otherAppsDescription: "利用できるその他のアプリを開きます。",
|
|
82
|
+
availableCount: "{{count}}件利用可能",
|
|
80
83
|
activeCount: "{{count}} active",
|
|
81
84
|
hiddenCount: "{{count}} hidden",
|
|
82
85
|
createApp: "アプリの作成",
|
|
83
86
|
templates: "テンプレート",
|
|
84
87
|
checkingTemplates: "利用可能なテンプレートを確認する",
|
|
85
88
|
templatesAvailable: "{{count}} available to scaffold",
|
|
89
|
+
curatedTemplates: "厳選テンプレート",
|
|
90
|
+
curatedTemplatesDescription:
|
|
91
|
+
"レビュー済みのアプリ構成をベースに、自分用にカスタマイズできます。",
|
|
92
|
+
remix: "リミックス",
|
|
93
|
+
remixTemplate: "{{name}} をリミックス",
|
|
94
|
+
remixAppIdLabel: "新しいアプリ ID",
|
|
95
|
+
remixStarted: "{{name}} のリミックスを開始しました",
|
|
96
|
+
viewLiveApp: "ライブアプリを見る",
|
|
97
|
+
alreadyInWorkspace: "ワークスペースに追加済み",
|
|
98
|
+
remixAppIdDescription:
|
|
99
|
+
"新しいワークスペースアプリの URL セーフな ID を選択してください。",
|
|
100
|
+
integrationSetup: "連携の設定",
|
|
101
|
+
source: "提供元",
|
|
102
|
+
remixing: "リミックス中…",
|
|
103
|
+
remixSuccess: "テンプレートのリミックスを開始しました。",
|
|
104
|
+
remixError: "このテンプレートをリミックスできませんでした",
|
|
105
|
+
appIdRequired: "アプリ ID は必須です。",
|
|
86
106
|
hide: "非表示",
|
|
87
107
|
show: "Show",
|
|
88
108
|
hiddenApps: "隠しアプリ",
|
|
@@ -76,12 +76,31 @@ const messages = {
|
|
|
76
76
|
'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
|
|
77
77
|
appsInWorkspace: "Apps in {{workspace}}",
|
|
78
78
|
workspaceApps: "작업 공간 앱",
|
|
79
|
+
otherApps: "기타 앱",
|
|
80
|
+
otherAppsDescription: "사용할 수 있는 다른 앱을 엽니다.",
|
|
81
|
+
availableCount: "{{count}}개 사용 가능",
|
|
79
82
|
activeCount: "{{count}} active",
|
|
80
83
|
hiddenCount: "{{count}} hidden",
|
|
81
84
|
createApp: "앱 만들기",
|
|
82
85
|
templates: "템플릿",
|
|
83
86
|
checkingTemplates: "사용 가능한 템플릿 확인 중",
|
|
84
87
|
templatesAvailable: "{{count}} available to scaffold",
|
|
88
|
+
curatedTemplates: "엄선된 템플릿",
|
|
89
|
+
curatedTemplatesDescription:
|
|
90
|
+
"검토된 앱 구조에서 시작해 나만의 앱으로 만들어 보세요.",
|
|
91
|
+
remix: "리믹스",
|
|
92
|
+
remixTemplate: "{{name}} 리믹스",
|
|
93
|
+
remixAppIdLabel: "새 앱 ID",
|
|
94
|
+
remixStarted: "{{name}} 리믹스를 시작했습니다",
|
|
95
|
+
viewLiveApp: "라이브 앱 보기",
|
|
96
|
+
alreadyInWorkspace: "워크스페이스에 이미 있음",
|
|
97
|
+
remixAppIdDescription: "새 워크스페이스 앱의 URL 안전 ID를 선택하세요.",
|
|
98
|
+
integrationSetup: "연동 설정",
|
|
99
|
+
source: "소스",
|
|
100
|
+
remixing: "리믹스 중…",
|
|
101
|
+
remixSuccess: "템플릿 리믹스를 시작했습니다.",
|
|
102
|
+
remixError: "이 템플릿을 리믹스할 수 없습니다",
|
|
103
|
+
appIdRequired: "앱 ID가 필요합니다.",
|
|
85
104
|
hide: "숨기기",
|
|
86
105
|
show: "Show",
|
|
87
106
|
hiddenApps: "숨겨진 앱",
|
|
@@ -80,12 +80,32 @@ const messages = {
|
|
|
80
80
|
'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
|
|
81
81
|
appsInWorkspace: "Apps in {{workspace}}",
|
|
82
82
|
workspaceApps: "Aplicativos de espaço de trabalho",
|
|
83
|
+
otherApps: "Outros aplicativos",
|
|
84
|
+
otherAppsDescription: "Abra outros aplicativos disponíveis para você.",
|
|
85
|
+
availableCount: "{{count}} disponíveis",
|
|
83
86
|
activeCount: "{{count}} active",
|
|
84
87
|
hiddenCount: "{{count}} hidden",
|
|
85
88
|
createApp: "Criar aplicativo",
|
|
86
89
|
templates: "Modelos",
|
|
87
90
|
checkingTemplates: "Verificando modelos disponíveis",
|
|
88
91
|
templatesAvailable: "{{count}} available to scaffold",
|
|
92
|
+
curatedTemplates: "Modelos selecionados",
|
|
93
|
+
curatedTemplatesDescription:
|
|
94
|
+
"Comece com uma estrutura de app revisada e personalize-a.",
|
|
95
|
+
remix: "Remixar",
|
|
96
|
+
remixTemplate: "Remixar {{name}}",
|
|
97
|
+
remixAppIdLabel: "Novo ID do app",
|
|
98
|
+
remixStarted: "Remix de {{name}} iniciado",
|
|
99
|
+
viewLiveApp: "Ver app ao vivo",
|
|
100
|
+
alreadyInWorkspace: "Já está no workspace",
|
|
101
|
+
remixAppIdDescription:
|
|
102
|
+
"Escolha um ID seguro para URL para o novo app do workspace.",
|
|
103
|
+
integrationSetup: "Configuração da integração",
|
|
104
|
+
source: "Origem",
|
|
105
|
+
remixing: "Remixando…",
|
|
106
|
+
remixSuccess: "Remix do modelo iniciado.",
|
|
107
|
+
remixError: "Não foi possível remixar este modelo",
|
|
108
|
+
appIdRequired: "O ID do app é obrigatório.",
|
|
89
109
|
hide: "Ocultar",
|
|
90
110
|
show: "Show",
|
|
91
111
|
hiddenApps: "Aplicativos ocultos",
|
|
@@ -73,12 +73,31 @@ const messages = {
|
|
|
73
73
|
'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
|
|
74
74
|
appsInWorkspace: "Apps in {{workspace}}",
|
|
75
75
|
workspaceApps: "工作区应用程序",
|
|
76
|
+
otherApps: "其他应用",
|
|
77
|
+
otherAppsDescription: "打开你可以使用的其他应用。",
|
|
78
|
+
availableCount: "可用 {{count}} 个",
|
|
76
79
|
activeCount: "{{count}} active",
|
|
77
80
|
hiddenCount: "{{count}} hidden",
|
|
78
81
|
createApp: "创建应用程序",
|
|
79
82
|
templates: "模板",
|
|
80
83
|
checkingTemplates: "检查可用模板",
|
|
81
84
|
templatesAvailable: "{{count}} available to scaffold",
|
|
85
|
+
curatedTemplates: "精选模板",
|
|
86
|
+
curatedTemplatesDescription:
|
|
87
|
+
"从经过审核的应用结构开始,然后打造属于你的应用。",
|
|
88
|
+
remix: "再创作",
|
|
89
|
+
remixTemplate: "再创作 {{name}}",
|
|
90
|
+
remixAppIdLabel: "新应用 ID",
|
|
91
|
+
remixStarted: "已开始再创作 {{name}}",
|
|
92
|
+
viewLiveApp: "查看在线应用",
|
|
93
|
+
alreadyInWorkspace: "已在工作区中",
|
|
94
|
+
remixAppIdDescription: "为新的工作区应用选择一个 URL 安全的 ID。",
|
|
95
|
+
integrationSetup: "集成设置",
|
|
96
|
+
source: "来源",
|
|
97
|
+
remixing: "正在再创作…",
|
|
98
|
+
remixSuccess: "已开始再创作模板。",
|
|
99
|
+
remixError: "无法再创作此模板",
|
|
100
|
+
appIdRequired: "应用 ID 是必填项。",
|
|
82
101
|
hide: "隐藏",
|
|
83
102
|
show: "Show",
|
|
84
103
|
hiddenApps: "隐藏的应用程序",
|
|
@@ -73,12 +73,31 @@ const messages = {
|
|
|
73
73
|
"「{{workspace}}」工作區中的應用程式。每個應用程式都會在此工作區下取得自己的路由,並共用資料庫、驗證與代理聊天。",
|
|
74
74
|
appsInWorkspace: "{{workspace}} 中的應用程式",
|
|
75
75
|
workspaceApps: "工作區應用程式",
|
|
76
|
+
otherApps: "其他應用程式",
|
|
77
|
+
otherAppsDescription: "開啟你可以使用的其他應用程式。",
|
|
78
|
+
availableCount: "可用 {{count}} 個",
|
|
76
79
|
activeCount: "{{count}} 個作用中",
|
|
77
80
|
hiddenCount: "{{count}} 個已隱藏",
|
|
78
81
|
createApp: "建立應用程式",
|
|
79
82
|
templates: "範本",
|
|
80
83
|
checkingTemplates: "檢查可用範本",
|
|
81
84
|
templatesAvailable: "{{count}} 個可用於產生架構",
|
|
85
|
+
curatedTemplates: "精選範本",
|
|
86
|
+
curatedTemplatesDescription:
|
|
87
|
+
"從經過審核的應用程式結構開始,打造屬於你的應用程式。",
|
|
88
|
+
remix: "重新混搭",
|
|
89
|
+
remixTemplate: "重新混搭 {{name}}",
|
|
90
|
+
remixAppIdLabel: "新應用程式 ID",
|
|
91
|
+
remixStarted: "已開始重新混搭 {{name}}",
|
|
92
|
+
viewLiveApp: "查看線上應用程式",
|
|
93
|
+
alreadyInWorkspace: "已在工作區中",
|
|
94
|
+
remixAppIdDescription: "為新的工作區應用程式選擇 URL 安全的 ID。",
|
|
95
|
+
integrationSetup: "整合設定",
|
|
96
|
+
source: "來源",
|
|
97
|
+
remixing: "正在重新混搭…",
|
|
98
|
+
remixSuccess: "已開始重新混搭範本。",
|
|
99
|
+
remixError: "無法重新混搭此範本",
|
|
100
|
+
appIdRequired: "應用程式 ID 為必填項目。",
|
|
82
101
|
hide: "隱藏",
|
|
83
102
|
show: "Show",
|
|
84
103
|
hiddenApps: "隱藏的應用程式",
|