@agent-native/core 0.169.1 → 0.170.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-native.eject.json +4 -1
- package/bin/agent-native.js +23 -5
- package/corpus/README.md +1 -1
- package/corpus/templates/analytics/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +1 -1
- package/corpus/templates/analytics/app/i18n-data.ts +28 -0
- package/corpus/templates/analytics/app/pages/Agents.tsx +25 -1
- package/corpus/templates/analytics/app/routes/$.tsx +10 -0
- package/corpus/templates/analytics/app/routes.ts +3 -1
- package/corpus/templates/analytics/changelog/2026-08-22-fixed-the-agent-native-templates-first-party-dashboard-panel.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-22-org-admin-panels-no-longer-report-a-database-error-as-a-per.md +9 -0
- package/corpus/templates/analytics/changelog/2026-08-22-slack-requests-report-invalid-inputs.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-22-unknown-analytics-links-now-return-a-real-not-found-status.md +6 -0
- package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +2 -1
- package/corpus/templates/analytics/docs/schemas/tracked-events.md +2 -0
- package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +29 -7
- package/corpus/templates/analytics/server/handlers/slack.ts +59 -5
- package/corpus/templates/analytics/server/lib/db-admin-connections.ts +11 -6
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +132 -2
- package/corpus/templates/analytics/server/lib/slack.ts +4 -2
- package/corpus/templates/analytics/vitest.config.ts +6 -1
- package/corpus/templates/assets/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/assets/app/routes/library.tsx +5 -3
- package/corpus/templates/assets/app/routes.ts +3 -1
- package/corpus/templates/assets/changelog/2026-08-22-library-page-loads-again-instead-of-crashing-on-open.md +6 -0
- package/corpus/templates/assets/vitest.config.ts +6 -1
- package/corpus/templates/brain/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/brain/app/components/ui/pointer-lock.ts +1 -0
- package/corpus/templates/brain/app/routes/sources.tsx +8 -3
- package/corpus/templates/brain/changelog/2026-08-22-tuning-or-adding-a-source-no-longer-leaves-the-sources-page.md +6 -0
- package/corpus/templates/brain/vitest.config.ts +1 -0
- package/corpus/templates/calendar/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/calendar/actions/list-booking-links.ts +83 -4
- package/corpus/templates/calendar/actions/update-booking-link.ts +4 -3
- package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +11 -3
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +1 -1
- package/corpus/templates/calendar/app/components/calendar/GoogleConnectBanner.tsx +103 -44
- package/corpus/templates/calendar/app/components/calendar/OutOfOfficeEvent.tsx +28 -24
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +9 -2
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +47 -58
- package/corpus/templates/calendar/app/hooks/use-booking-links.ts +5 -1
- package/corpus/templates/calendar/app/lib/event-layout.ts +52 -26
- package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +126 -98
- package/corpus/templates/calendar/app/pages/CalendarView.tsx +1 -0
- package/corpus/templates/calendar/app/pages/Settings.tsx +88 -81
- package/corpus/templates/calendar/app/routes.ts +3 -1
- package/corpus/templates/calendar/changelog/2026-08-22-booking-link-visibility-respects-shared-access.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-22-clicking-an-out-of-office-event-s-marker-no-longer-creates-a.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-22-event-detail-views-now-show-your-calendar-timezone.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-22-google-calendar-can-now-connect-with-the-shared-google-oauth.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-22-overlapping-events-now-show-each-others-boundaries.md +6 -0
- package/corpus/templates/calendar/changelog/2026-08-22-public-booking-pages-now-offer-time-slots-from-the-host-s-we.md +6 -0
- package/corpus/templates/calendar/server/handlers/bookings.ts +5 -7
- package/corpus/templates/calendar/server/handlers/google-auth.ts +10 -2
- package/corpus/templates/calendar/server/lib/google-calendar.ts +139 -14
- package/corpus/templates/calendar/server/onboarding.ts +85 -0
- package/corpus/templates/calendar/server/plugins/agent-chat.ts +2 -0
- package/corpus/templates/calendar/shared/api.ts +9 -1
- package/corpus/templates/chat/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/chat/app/routes.ts +3 -1
- package/corpus/templates/chat/vitest.config.ts +8 -0
- package/corpus/templates/clips/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/clips/actions/get-meeting.ts +9 -4
- package/corpus/templates/clips/actions/list-recordings.ts +16 -3
- package/corpus/templates/clips/actions/search-meetings.ts +1 -0
- package/corpus/templates/clips/actions/view-screen.ts +8 -1
- package/corpus/templates/clips/app/components/meetings/meeting-history-row.tsx +32 -1
- package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +1 -1
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +29 -1
- package/corpus/templates/clips/app/i18n/en-US.ts +5 -0
- package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +33 -4
- package/corpus/templates/clips/app/routes/_app.meetings._index.tsx +1 -0
- package/corpus/templates/clips/app/routes/access-request.approve.tsx +16 -9
- package/corpus/templates/clips/app/routes/embed.$shareId.tsx +17 -7
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +17 -7
- package/corpus/templates/clips/changelog/2026-08-21-camera-bubble-black-circle.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-22-screen-recordings-respect-the-microphone-toggle.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-22-the-recordings-library-no-longer-fails-right-after-server-start.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-23-the-agent-can-see-your-library-right-after-server-start.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/background.ts +1 -2
- package/corpus/templates/clips/chrome-extension/src/native-transcription.ts +39 -7
- package/corpus/templates/clips/chrome-extension/src/offscreen.ts +21 -25
- package/corpus/templates/clips/desktop/src/app.tsx +53 -24
- package/corpus/templates/clips/desktop/src/lib/bubble-playback.ts +68 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +3 -0
- package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +72 -14
- package/corpus/templates/clips/desktop/src/lib/updater.ts +8 -3
- package/corpus/templates/clips/desktop/src/overlays/bubble.tsx +162 -20
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +43 -6
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +150 -13
- package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +12 -0
- package/corpus/templates/clips/server/lib/calendar-event-meetings.ts +28 -3
- package/corpus/templates/clips/server/lib/emails.ts +17 -33
- package/corpus/templates/content/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +140 -15
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +12 -14
- package/corpus/templates/content/app/components/ui/pointer-lock.ts +1 -0
- package/corpus/templates/content/app/hooks/use-content-database.ts +18 -2
- package/corpus/templates/content/app/hooks/use-local-storage.ts +38 -22
- package/corpus/templates/content/app/i18n-data.ts +25 -0
- package/corpus/templates/content/app/routes.ts +3 -1
- package/corpus/templates/content/changelog/2026-08-22-code-blocks-inserted-from-the-slash-menu-no-longer-get-stuck.md +6 -0
- package/corpus/templates/content/changelog/2026-08-22-the-sidebar-page-tree-no-longer-flashes-empty-after-creating-a-page.md +6 -0
- package/corpus/templates/content/docs/solutions/2026-08-21-content-mermaid-rendering-shape.md +233 -0
- package/corpus/templates/content/server/plugins/agent-chat.ts +9 -2
- package/corpus/templates/content/vitest.config.ts +7 -1
- package/corpus/templates/crm/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/design/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +1383 -88
- package/corpus/templates/design/actions/generate-design.ts +98 -47
- package/corpus/templates/design/actions/get-design-system.ts +6 -1
- package/corpus/templates/design/actions/refresh-design-system-with-builder.ts +146 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +70 -26
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +284 -136
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +2057 -141
- package/corpus/templates/design/app/components/design/editor/DesignBottomToolbar.tsx +6 -2
- package/corpus/templates/design/app/components/design/editor/DesignWorkspaceRail.tsx +4 -4
- package/corpus/templates/design/app/components/design/keyboard-shortcuts.ts +10 -1
- package/corpus/templates/design/app/components/design/multi-screen/alt-hover-measurement.ts +19 -2
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +9 -2
- package/corpus/templates/design/app/components/layout/Header.tsx +15 -0
- package/corpus/templates/design/app/components/layout/Layout.tsx +7 -2
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +11 -4
- package/corpus/templates/design/app/i18n-data.ts +1 -0
- package/corpus/templates/design/app/i18n-keyboard-shortcuts.ts +12 -0
- package/corpus/templates/design/app/lib/design-system-data.ts +68 -0
- package/corpus/templates/design/app/pages/DesignEditor.tsx +77 -35
- package/corpus/templates/design/app/pages/DesignSystems.tsx +136 -42
- package/corpus/templates/design/app/pages/Index.tsx +2 -0
- package/corpus/templates/design/app/pages/Templates.tsx +0 -10
- package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +10 -0
- package/corpus/templates/design/app/pages/design-editor/collab-sync.ts +50 -0
- package/corpus/templates/design/app/pages/design-editor/commands/apply-design-editor-command.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/apply-file-content-update.ts +10 -8
- package/corpus/templates/design/app/pages/design-editor/commands/apply-local-content-update.ts +6 -6
- package/corpus/templates/design/app/pages/design-editor/commands/apply-pending-visual-styles-with-agent.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/commit-visual-styles.ts +18 -7
- package/corpus/templates/design/app/pages/design-editor/commands/escape-hotkey.ts +4 -90
- package/corpus/templates/design/app/pages/design-editor/commands/layer-marquee-selection-change.ts +2 -1
- package/corpus/templates/design/app/pages/design-editor/commands/layer-selection-change.ts +4 -3
- package/corpus/templates/design/app/pages/design-editor/commands/screen-element-select.ts +12 -2
- package/corpus/templates/design/app/pages/design-editor/commands/screen-visual-style-change.ts +9 -2
- package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-move-semantic-handoff.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-semantic-handoff.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-state-semantic-handoff.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/start-sidebar-resize.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/editor-state.ts +11 -1
- package/corpus/templates/design/app/pages/design-editor/effects/adopt-db-file-content.ts +11 -19
- package/corpus/templates/design/app/pages/design-editor/effects/observe-collab-text.ts +6 -6
- package/corpus/templates/design/app/pages/design-editor/effects/publish-agent-selection-context.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/effects/seed-collab-content.ts +12 -15
- package/corpus/templates/design/app/pages/design-editor/selection-state.ts +5 -59
- package/corpus/templates/design/app/pages/design-editor/tool-state.ts +8 -0
- package/corpus/templates/design/app/pages/design-editor/types.ts +3 -3
- package/corpus/templates/design/app/routes.ts +3 -1
- package/corpus/templates/design/changelog/2026-08-20-canvas-edits-patch-the-frame-instead-of-rebuilding-it.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-builder-design-system-imports-reconcile-after-indexing.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-draw-mode-needs-shift-y.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-eyedropper-shortcut.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-figma-style-alignment-guides-and-snapping.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-group-transforms-keep-the-selection.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-inspector-fields-keep-focus-on-enter.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-pen-alt-keeps-the-incoming-handle.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-pen-on-the-board-creates-one-vector.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-scale-a-multi-selection-from-the-group-handles.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-scale-resizes-text-with-the-object.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-selecting-another-object-keeps-the-scale-tool-armed.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-the-shape-tool-remembers-the-shape-you-picked.md +6 -0
- package/corpus/templates/design/changelog/2026-08-21-vectors-drawn-in-a-frame-land-where-you-drew-them.md +6 -0
- package/corpus/templates/design/changelog/2026-08-22-multi-screen-generation-no-longer-loses-a-saved-screens-layo.md +6 -0
- package/corpus/templates/design/changelog/2026-08-22-rename-and-search-fields-are-labeled-for-screen-readers.md +6 -0
- package/corpus/templates/design/package.json +2 -0
- package/corpus/templates/design/server/lib/builder-design-system-proxy.ts +311 -0
- package/corpus/templates/design/shared/canvas-math.ts +612 -206
- package/corpus/templates/design/shared/pen-path.ts +37 -0
- package/corpus/templates/design/vitest.config.ts +7 -1
- package/corpus/templates/dispatch/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/dispatch/actions/list-workspace-connections.ts +34 -3
- package/corpus/templates/dispatch/app/routes/integrations.tsx +55 -21
- package/corpus/templates/dispatch/app/routes.ts +3 -1
- package/corpus/templates/factory/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/factory/.env.example +2 -7
- package/corpus/templates/factory/AGENTS.md +3 -0
- package/corpus/templates/factory/README.md +5 -3
- package/corpus/templates/factory/actions/create-factory.ts +16 -3
- package/corpus/templates/factory/actions/get-slack-feedback-context.ts +2 -0
- package/corpus/templates/factory/actions/get-triage-item.ts +2 -0
- package/corpus/templates/factory/actions/list-factory-audit.ts +116 -36
- package/corpus/templates/factory/actions/list-factory-automations.ts +2 -1
- package/corpus/templates/factory/actions/list-triage-items.ts +22 -19
- package/corpus/templates/factory/actions/run-factory-automation.ts +7 -3
- package/corpus/templates/factory/actions/save-factory-automation.ts +5 -2
- package/corpus/templates/factory/actions/save-triage-config.ts +2 -8
- package/corpus/templates/factory/actions/start-builder-for-item.ts +21 -0
- package/corpus/templates/factory/app/components/factory/FactoryAuditView.tsx +229 -297
- package/corpus/templates/factory/app/components/factory/FactorySettingsView.tsx +397 -247
- package/corpus/templates/factory/app/components/factory/FactorySourceSettingsGroup.tsx +33 -0
- package/corpus/templates/factory/app/components/factory/NewFactoryForm.tsx +202 -162
- package/corpus/templates/factory/app/i18n/en-US.ts +32 -4
- package/corpus/templates/factory/app/routes/factory.tsx +84 -11
- package/corpus/templates/factory/app/routes.ts +3 -1
- package/corpus/templates/factory/changelog/2026-08-21-activity-runs-use-automation-display-names.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-21-create-and-settings-source-cards.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-21-keep-automations-visible-while-running.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-21-nested-factory-automations-can-poll.md +6 -0
- package/corpus/templates/factory/changelog/2026-08-21-settings-sticky-unsaved-bar.md +6 -0
- package/corpus/templates/factory/server/connectors/credentials.ts +10 -5
- package/corpus/templates/factory/server/lib/factory-audit-report.ts +412 -0
- package/corpus/templates/factory/server/lib/factory-config-reconcile.ts +321 -0
- package/corpus/templates/factory/server/lib/factory-scope.ts +25 -2
- package/corpus/templates/factory/server/lib/require-factory-automation.ts +13 -4
- package/corpus/templates/factory/server/plugins/factory-migrations.ts +148 -4
- package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +4 -6
- package/corpus/templates/factory/vitest.config.ts +17 -2
- package/corpus/templates/forms/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/forms/app/routes/_app.settings.tsx +4 -1
- package/corpus/templates/forms/changelog/2026-08-22-the-extensions-link-now-opens-the-extensions-tab-instead-o.md +6 -0
- package/corpus/templates/forms/server/lib/public-form-ssr.ts +11 -1
- package/corpus/templates/forms/vitest.config.ts +1 -0
- package/corpus/templates/macros/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/macros/app/routes.ts +3 -1
- package/corpus/templates/macros/vitest.config.ts +6 -1
- package/corpus/templates/mail/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/mail/actions/manage-gmail-filters.ts +10 -2
- package/corpus/templates/mail/app/components/GoogleConnectBanner.tsx +100 -37
- package/corpus/templates/mail/app/components/email/IntegrationsSidebar.tsx +14 -2
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +66 -36
- package/corpus/templates/mail/app/hooks/use-google-auth.ts +2 -0
- package/corpus/templates/mail/app/lib/google-oauth-setup.ts +17 -0
- package/corpus/templates/mail/app/pages/InboxPage.tsx +69 -9
- package/corpus/templates/mail/app/routes/$.tsx +9 -0
- package/corpus/templates/mail/app/routes/$view.$threadId.tsx +23 -1
- package/corpus/templates/mail/app/routes/$view.tsx +47 -1
- package/corpus/templates/mail/app/routes.ts +3 -1
- package/corpus/templates/mail/changelog/2026-08-22-gmail-can-now-connect-with-the-shared-google-oauth.md +6 -0
- package/corpus/templates/mail/changelog/2026-08-22-gmail-filters-now-shows-the-real-error.md +6 -0
- package/corpus/templates/mail/changelog/2026-08-22-unknown-mail-urls-now-show-the-404-page.md +6 -0
- package/corpus/templates/mail/server/handlers/google-auth.ts +11 -2
- package/corpus/templates/mail/server/lib/google-auth.ts +92 -12
- package/corpus/templates/mail/server/onboarding.ts +66 -18
- package/corpus/templates/mail/vitest.config.ts +6 -1
- package/corpus/templates/plan/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/plan/app/routes/settings.tsx +4 -1
- package/corpus/templates/plan/app/routes.ts +3 -1
- package/corpus/templates/plan/changelog/2026-08-22-the-extensions-link-now-opens-the-extensions-tab-instead-o.md +6 -0
- package/corpus/templates/plan/netlify.toml +1 -1
- package/corpus/templates/slides/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/slides/actions/patch-deck.ts +79 -10
- package/corpus/templates/slides/actions/update-slide.ts +11 -1
- package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +14 -4
- package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +10 -52
- package/corpus/templates/slides/app/components/editor/GoogleDocImportHint.tsx +8 -53
- package/corpus/templates/slides/app/components/editor/GoogleDriveConnectionCta.tsx +9 -75
- package/corpus/templates/slides/app/components/editor/GoogleSlidesReferenceImport.tsx +8 -60
- package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +10 -2
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +19 -7
- package/corpus/templates/slides/app/lib/sanitize-slide-html.ts +49 -36
- package/corpus/templates/slides/app/routes/access-request.approve.tsx +16 -9
- package/corpus/templates/slides/app/routes.ts +3 -1
- package/corpus/templates/slides/changelog/2026-08-22-already-uploaded-chat-images-are-no-longer-dropped.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-22-google-drive-and-slides-can-now-connect-with-the-shared-google-oauth.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-22-multi-slide-repairs-now-report-slides-that-still-overflow.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-22-update-slide-now-reports-which-batched-edit-was-skipped.md +6 -0
- package/corpus/templates/slides/server/handlers/google-docs-auth.ts +52 -1
- package/corpus/templates/slides/server/lib/chat-attachments.ts +29 -3
- package/corpus/templates/slides/server/lib/google-docs-oauth.ts +66 -16
- package/corpus/templates/slides/server/lib/slide-content-patch.ts +13 -2
- package/corpus/templates/slides/server/plugins/agent-chat.ts +5 -2
- package/corpus/templates/slides/tsconfig.json +5 -0
- package/corpus/templates/slides/vitest.config.ts +6 -1
- package/corpus/templates/tasks/.agents/skills/secrets/SKILL.md +11 -4
- package/corpus/templates/tasks/app/routes/settings.tsx +4 -1
- package/corpus/templates/tasks/app/routes.ts +3 -1
- package/corpus/templates/tasks/changelog/2026-08-22-the-extensions-link-now-opens-the-extensions-tab-instead-o.md +6 -0
- package/corpus/templates/tasks/vitest.config.ts +7 -1
- package/dist/action.d.ts +91 -0
- package/dist/action.js +50 -0
- package/dist/agent/abort-reasons.d.ts +38 -0
- package/dist/agent/abort-reasons.js +49 -0
- package/dist/agent/engine/ai-sdk-engine.js +8 -5
- package/dist/agent/engine/anthropic-engine.js +7 -5
- package/dist/agent/engine/first-event-timeout.d.ts +42 -17
- package/dist/agent/engine/first-event-timeout.js +67 -25
- package/dist/agent/production-agent.d.ts +23 -0
- package/dist/agent/production-agent.js +107 -102
- package/dist/agent/run-loop-with-resume.d.ts +2 -28
- package/dist/agent/run-loop-with-resume.js +25 -40
- package/dist/agent/run-manager.js +5 -4
- package/dist/agent/run-store.d.ts +55 -0
- package/dist/agent/run-store.js +124 -1
- package/dist/agent/tool-search.js +2 -1
- package/dist/agent/types.d.ts +9 -4
- package/dist/app-config/configuration-error.d.ts +11 -0
- package/dist/app-config/configuration-error.js +14 -0
- package/dist/app-config/index.d.ts +1 -0
- package/dist/app-config/index.js +1 -0
- package/dist/app-config/integrations.d.ts +1 -0
- package/dist/app-config/integrations.js +10 -0
- package/dist/app-config/plugins.d.ts +34 -0
- package/dist/app-config/plugins.js +39 -0
- package/dist/app-config/run-lifecycle-invariants.d.ts +18 -9
- package/dist/app-config/run-lifecycle-invariants.js +18 -25
- package/dist/app-config/schema.d.ts +16 -0
- package/dist/app-config/schema.js +2 -0
- package/dist/chat-threads/schema-migrations.js +20 -0
- package/dist/chat-threads/store.js +21 -4
- package/dist/cli/native-dependencies.d.ts +4 -0
- package/dist/cli/native-dependencies.js +15 -0
- package/dist/client/EnvironmentBadge.d.ts +1 -1
- package/dist/client/EnvironmentBadge.js +40 -5
- package/dist/client/MultiTabAssistantChat.d.ts +1 -1
- package/dist/client/MultiTabAssistantChat.js +35 -14
- package/dist/client/agent-chat/index.d.ts +1 -1
- package/dist/client/agent-chat/index.js +1 -1
- package/dist/client/agent-page/use-jobs.d.ts +2 -1
- package/dist/client/agent-page/use-jobs.js +3 -5
- package/dist/client/agent-sidebar-state.js +3 -1
- package/dist/client/blocks/library/code-tabs.js +5 -0
- package/dist/client/blocks/library/code.js +1 -0
- package/dist/client/chat-first/apps-rail.js +2 -2
- package/dist/client/chat-model-groups.d.ts +12 -0
- package/dist/client/chat-model-groups.js +3 -2
- package/dist/client/integrations/GoogleProductLogo.d.ts +5 -0
- package/dist/client/integrations/GoogleProductLogo.js +45 -0
- package/dist/client/integrations/index.d.ts +2 -0
- package/dist/client/integrations/index.js +2 -0
- package/dist/client/integrations/workspace-provider-oauth.d.ts +8 -0
- package/dist/client/integrations/workspace-provider-oauth.js +13 -0
- package/dist/client/resources/mcp-integration-catalog.js +0 -29
- package/dist/client/settings/SettingsTabsPage.js +10 -6
- package/dist/client/sharing/ShareButton.js +11 -2
- package/dist/client/use-chat-models.d.ts +6 -0
- package/dist/client/use-chat-models.js +10 -0
- package/dist/client/use-db-sync.js +27 -9
- package/dist/connections/catalog.d.ts +111 -9
- package/dist/connections/catalog.js +86 -30
- package/dist/db/create-get-db.js +18 -0
- package/dist/db/ddl-guard.d.ts +0 -4
- package/dist/db/ddl-guard.js +46 -0
- package/dist/deploy/build.d.ts +19 -0
- package/dist/deploy/build.js +190 -16
- package/dist/deploy/function-bundle.d.ts +45 -0
- package/dist/deploy/function-bundle.js +337 -0
- package/dist/deploy/workspace-deploy.js +19 -1
- package/dist/eject/workspace-connections.js +4 -0
- package/dist/email-catalog/registry.d.ts +4 -0
- package/dist/email-catalog/registry.js +79 -14
- package/dist/extensions/content-patch.js +14 -2
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/integrations/plugin.d.ts +10 -0
- package/dist/integrations/plugin.js +40 -6
- package/dist/jobs/actions/run-automation-now.d.ts +2 -1
- package/dist/jobs/actions/run-automation-now.js +11 -5
- package/dist/jobs/frontmatter.js +53 -2
- package/dist/jobs/run-now.d.ts +11 -1
- package/dist/jobs/run-now.js +42 -7
- package/dist/jobs/scheduler.d.ts +1 -0
- package/dist/jobs/scheduler.js +2 -1
- package/dist/localization/core-messages/ar-SA.js +3 -0
- package/dist/localization/core-messages/de-DE.js +3 -0
- package/dist/localization/core-messages/en-US.d.ts +3 -0
- package/dist/localization/core-messages/en-US.js +3 -0
- package/dist/localization/core-messages/es-ES.js +3 -0
- package/dist/localization/core-messages/fr-FR.js +3 -0
- package/dist/localization/core-messages/hi-IN.js +3 -0
- package/dist/localization/core-messages/ja-JP.js +3 -0
- package/dist/localization/core-messages/ko-KR.js +3 -0
- package/dist/localization/core-messages/pt-BR.js +3 -0
- package/dist/localization/core-messages/zh-CN.js +3 -0
- package/dist/localization/core-messages/zh-TW.js +3 -0
- package/dist/localization/core-messages.d.ts +3 -0
- package/dist/localization/default-messages.d.ts +2 -5
- package/dist/localization/default-messages.js +2 -5
- package/dist/mcp/build-server.d.ts +9 -0
- package/dist/mcp/build-server.js +37 -8
- package/dist/mcp-client/oauth-client.d.ts +7 -0
- package/dist/mcp-client/oauth-client.js +12 -1
- package/dist/oauth-tokens/index.d.ts +1 -1
- package/dist/oauth-tokens/index.js +1 -1
- package/dist/oauth-tokens/lifecycle.d.ts +11 -0
- package/dist/oauth-tokens/lifecycle.js +17 -0
- package/dist/oauth-tokens/store.js +7 -0
- package/dist/observability/posthog-ai.d.ts +15 -1
- package/dist/observability/posthog-ai.js +24 -12
- package/dist/observability/routes.d.ts +3 -3
- package/dist/observability/traces.js +158 -28
- package/dist/onboarding/app-profile.js +2 -2
- package/dist/onboarding/plugin.js +10 -2
- package/dist/onboarding/types.d.ts +2 -0
- package/dist/provider-api/actions/custom-provider-registration.d.ts +1 -1
- package/dist/provider-api/actions/provider-api.d.ts +2 -2
- package/dist/provider-api/index.js +2 -0
- package/dist/resources/store.js +13 -4
- package/dist/scripts/agent-engines/list-agent-engines.js +29 -3
- package/dist/secrets/register-framework-secrets.js +1 -1
- package/dist/server/action-discovery.js +5 -0
- package/dist/server/agent-chat/action-filters-a2a.d.ts +27 -3
- package/dist/server/agent-chat/action-filters-a2a.js +48 -9
- package/dist/server/agent-chat-plugin.js +36 -9
- package/dist/server/agent-discovery.js +43 -20
- package/dist/server/auth.js +18 -16
- package/dist/server/beta-opt-out-html.js +45 -4
- package/dist/server/better-auth-instance.d.ts +2 -1
- package/dist/server/better-auth-instance.js +23 -7
- package/dist/server/builder-design-systems.d.ts +4 -1
- package/dist/server/builder-design-systems.js +87 -6
- package/dist/server/builder-oauth.d.ts +1 -7
- package/dist/server/builder-oauth.js +80 -163
- package/dist/server/core-routes-plugin.d.ts +29 -0
- package/dist/server/core-routes-plugin.js +100 -20
- package/dist/server/default-plugins.d.ts +18 -0
- package/dist/server/default-plugins.js +22 -0
- package/dist/server/edge.d.ts +1 -0
- package/dist/server/edge.js +1 -0
- package/dist/server/framework-request-handler.js +31 -3
- package/dist/server/google-oauth.d.ts +3 -0
- package/dist/server/google-oauth.js +3 -0
- package/dist/server/index.d.ts +4 -4
- package/dist/server/index.js +3 -3
- package/dist/server/onboarding-html.js +37 -3
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/server/workspace-provider-oauth.d.ts +6 -1
- package/dist/server/workspace-provider-oauth.js +72 -20
- package/dist/shared/agent-sidebar-url.d.ts +1 -0
- package/dist/shared/agent-sidebar-url.js +1 -0
- package/dist/shared/environment-lanes.d.ts +2 -0
- package/dist/shared/environment-lanes.js +3 -1
- package/dist/shared/index.d.ts +3 -1
- package/dist/shared/index.js +3 -1
- package/dist/shared/surface-visibility.d.ts +31 -0
- package/dist/shared/surface-visibility.js +57 -0
- package/dist/templates/chat/.agents/skills/secrets/SKILL.md +11 -4
- package/dist/templates/chat/app/routes.ts +3 -1
- package/dist/templates/chat/vitest.config.ts +8 -0
- package/dist/templates/default/.agents/skills/secrets/SKILL.md +11 -4
- package/dist/templates/default/app/routes.ts +3 -1
- package/dist/templates/headless/.agents/skills/secrets/SKILL.md +11 -4
- package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +11 -4
- package/dist/tracking/registry.d.ts +11 -0
- package/dist/tracking/registry.js +5 -2
- package/dist/triggers/actions.js +10 -3
- package/dist/usage/store.js +23 -3
- package/dist/user-profile/actions/get-auth-methods.js +18 -5
- package/dist/vite/client.js +24 -5
- package/docs/content/actions-access-control.mdx +43 -4
- package/docs/content/actions-defining.mdx +16 -0
- package/docs/content/template-clips-capture-everywhere.mdx +29 -30
- package/docs/content/template-clips-developers.mdx +4 -4
- package/docs/content/template-clips.mdx +3 -1
- package/package.json +2 -2
- package/src/eject/workspace-connections.ts +4 -0
- package/src/templates/chat/.agents/skills/secrets/SKILL.md +11 -4
- package/src/templates/chat/app/routes.ts +3 -1
- package/src/templates/chat/vitest.config.ts +8 -0
- package/src/templates/default/.agents/skills/secrets/SKILL.md +11 -4
- package/src/templates/default/app/routes.ts +3 -1
- package/src/templates/headless/.agents/skills/secrets/SKILL.md +11 -4
- package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +11 -4
|
@@ -3,6 +3,7 @@ import { getRequestHeader } from "h3";
|
|
|
3
3
|
import { createRemoteJWKSet, jwtVerify } from "jose";
|
|
4
4
|
import { AGENT_BACKGROUND_PROCESSOR_FIELD, AGENT_BACKGROUND_PROCESSOR_INTEGRATION, isInBackgroundFunctionRuntime, } from "../agent/durable-background.js";
|
|
5
5
|
import { abortRun } from "../agent/run-manager.js";
|
|
6
|
+
import { AppConfigurationError, getAppConfig } from "../app-config/index.js";
|
|
6
7
|
import { isServerlessRuntime } from "../db/client.js";
|
|
7
8
|
import { getOrgContext, resolveOrgIdForEmail } from "../org/context.js";
|
|
8
9
|
import { loadResourcesForPrompt } from "../server/agent-chat-plugin.js";
|
|
@@ -229,6 +230,28 @@ export const BUILT_IN_INTEGRATION_ADAPTER_IDS = Object.freeze(BUILT_IN_INTEGRATI
|
|
|
229
230
|
export function createBuiltInIntegrationAdapters() {
|
|
230
231
|
return BUILT_IN_INTEGRATION_ADAPTER_FACTORIES.map(({ create }) => create());
|
|
231
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* Narrow the adapter set to `integrations.platforms`, when a deployment
|
|
235
|
+
* declares one.
|
|
236
|
+
*
|
|
237
|
+
* A configured name that matches no adapter throws instead of being ignored:
|
|
238
|
+
* the whole point of the allow-list is that the operator knows which platforms
|
|
239
|
+
* are live, and silently mounting a set nobody named — or mounting nothing
|
|
240
|
+
* because of a typo — is the failure this switch is supposed to prevent.
|
|
241
|
+
*/
|
|
242
|
+
export function applyConfiguredPlatformAllowList(adapters) {
|
|
243
|
+
const allowed = getAppConfig().integrations.platforms;
|
|
244
|
+
if (!allowed)
|
|
245
|
+
return adapters;
|
|
246
|
+
const available = new Set(adapters.map((adapter) => adapter.platform));
|
|
247
|
+
const unknown = allowed.filter((platform) => !available.has(platform));
|
|
248
|
+
if (unknown.length > 0) {
|
|
249
|
+
throw new AppConfigurationError(`[agent-native] integrations.platforms names ${unknown.join(", ")}, which no mounted adapter provides. ` +
|
|
250
|
+
`Available: ${[...available].join(", ") || "(none)"}.`);
|
|
251
|
+
}
|
|
252
|
+
const allowedSet = new Set(allowed);
|
|
253
|
+
return adapters.filter((adapter) => allowedSet.has(adapter.platform));
|
|
254
|
+
}
|
|
232
255
|
const INTEGRATION_SYSTEM_PROMPT = `You are an AI agent responding via a messaging platform integration (Slack, Microsoft Teams, Discord interactions, Telegram, WhatsApp, etc.).
|
|
233
256
|
|
|
234
257
|
You have the same capabilities as the web chat agent. Use your tools to help the user.
|
|
@@ -573,8 +596,8 @@ export function createIntegrationsPlugin(options) {
|
|
|
573
596
|
}
|
|
574
597
|
return async (nitroApp) => {
|
|
575
598
|
markDefaultPluginProvided(nitroApp, "integrations");
|
|
576
|
-
const adapters = options?.adapters ??
|
|
577
|
-
mergeIntegrationAdapters(createBuiltInIntegrationAdapters(), options?.adapterOverrides);
|
|
599
|
+
const adapters = applyConfiguredPlatformAllowList(options?.adapters ??
|
|
600
|
+
mergeIntegrationAdapters(createBuiltInIntegrationAdapters(), options?.adapterOverrides));
|
|
578
601
|
const adapterMap = new Map();
|
|
579
602
|
for (const adapter of adapters) {
|
|
580
603
|
adapterMap.set(adapter.platform, adapter);
|
|
@@ -619,6 +642,17 @@ export function createIntegrationsPlugin(options) {
|
|
|
619
642
|
const initialToolNames = Object.keys(localActions);
|
|
620
643
|
const h3 = getH3App(nitroApp);
|
|
621
644
|
const P = `${FRAMEWORK_ROUTE_PREFIX}/integrations`;
|
|
645
|
+
// Routes mounted under a platform's own name rather than reached through
|
|
646
|
+
// the `/:platform/...` catch-all. The catch-all 404s a platform the
|
|
647
|
+
// allow-list dropped because it resolves an adapter first; these are
|
|
648
|
+
// registered by literal path, so they would outlive the platform they
|
|
649
|
+
// belong to unless the same allow-list gates the registration.
|
|
650
|
+
const allowedPlatforms = getAppConfig().integrations.platforms;
|
|
651
|
+
const mountForPlatform = (platform, path, handler) => {
|
|
652
|
+
if (allowedPlatforms && !allowedPlatforms.includes(platform))
|
|
653
|
+
return;
|
|
654
|
+
h3.use(path, handler);
|
|
655
|
+
};
|
|
622
656
|
async function enqueueSystemNotice(event, incoming, text, opts) {
|
|
623
657
|
if (!text.trim())
|
|
624
658
|
return;
|
|
@@ -1921,7 +1955,7 @@ export function createIntegrationsPlugin(options) {
|
|
|
1921
1955
|
return { ok: true, continuationId };
|
|
1922
1956
|
}));
|
|
1923
1957
|
// ─── Slack native action controls ─────────────────────────────
|
|
1924
|
-
|
|
1958
|
+
mountForPlatform("slack", `${P}/slack/interactions`, defineEventHandler(async (event) => {
|
|
1925
1959
|
if (getMethod(event) !== "POST") {
|
|
1926
1960
|
setResponseStatus(event, 405);
|
|
1927
1961
|
return { error: "Method not allowed" };
|
|
@@ -2195,7 +2229,7 @@ export function createIntegrationsPlugin(options) {
|
|
|
2195
2229
|
return { error: "unsupported memory action" };
|
|
2196
2230
|
}));
|
|
2197
2231
|
// ─── Managed Slack OAuth ──────────────────────────────────────
|
|
2198
|
-
|
|
2232
|
+
mountForPlatform("slack", `${P}/slack/manifest`, defineEventHandler(async (event) => {
|
|
2199
2233
|
if (getMethod(event) !== "GET") {
|
|
2200
2234
|
setResponseStatus(event, 405);
|
|
2201
2235
|
return { error: "Method not allowed" };
|
|
@@ -2216,7 +2250,7 @@ export function createIntegrationsPlugin(options) {
|
|
|
2216
2250
|
interactivityRequestUrl,
|
|
2217
2251
|
});
|
|
2218
2252
|
}));
|
|
2219
|
-
|
|
2253
|
+
mountForPlatform("slack", `${P}/slack/oauth/install`, defineEventHandler(async (event) => {
|
|
2220
2254
|
if (getMethod(event) !== "GET") {
|
|
2221
2255
|
setResponseStatus(event, 405);
|
|
2222
2256
|
return { error: "Method not allowed" };
|
|
@@ -2270,7 +2304,7 @@ export function createIntegrationsPlugin(options) {
|
|
|
2270
2304
|
return sendRedirect(event, buildSlackAuthorizeUrl({ clientId, redirectUri, state }), 302);
|
|
2271
2305
|
});
|
|
2272
2306
|
}));
|
|
2273
|
-
|
|
2307
|
+
mountForPlatform("slack", `${P}/slack/oauth/callback`, defineEventHandler(async (event) => {
|
|
2274
2308
|
if (getMethod(event) !== "GET") {
|
|
2275
2309
|
setResponseStatus(event, 405);
|
|
2276
2310
|
return { error: "Method not allowed" };
|
|
@@ -2,13 +2,18 @@ import { z } from "zod";
|
|
|
2
2
|
import { defineAction } from "../../action.js";
|
|
3
3
|
import { queueAutomationRunNow } from "../run-now.js";
|
|
4
4
|
export default defineAction({
|
|
5
|
-
description: "Run one personal or organization automation immediately. This is an explicit send/run action and may perform the automation's real side effects.",
|
|
5
|
+
description: "Run one personal or organization automation immediately. This is an explicit send/run action and may perform the automation's real side effects. Pass a flat `name` or a nested `path` such as jobs/factories/<id>/factory-slack-feedback.md — not both.",
|
|
6
6
|
agentTool: false,
|
|
7
|
-
schema: z
|
|
8
|
-
|
|
7
|
+
schema: z
|
|
8
|
+
.object({
|
|
9
|
+
name: z.string().min(1).optional(),
|
|
10
|
+
path: z.string().min(1).optional(),
|
|
9
11
|
scope: z.enum(["personal", "organization"]).default("personal"),
|
|
12
|
+
})
|
|
13
|
+
.refine((value) => Boolean(value.name) !== Boolean(value.path), {
|
|
14
|
+
message: "Specify either an automation name or a path, not both.",
|
|
10
15
|
}),
|
|
11
|
-
run: async ({ name, scope }, ctx) => {
|
|
16
|
+
run: async ({ name, path, scope }, ctx) => {
|
|
12
17
|
if (!ctx?.userEmail)
|
|
13
18
|
throw new Error("Not authenticated.");
|
|
14
19
|
return queueAutomationRunNow({
|
|
@@ -16,7 +21,8 @@ export default defineAction({
|
|
|
16
21
|
orgId: ctx.orgId,
|
|
17
22
|
appId: ctx.appId,
|
|
18
23
|
scope,
|
|
19
|
-
name,
|
|
24
|
+
...(path ? { path } : { name }),
|
|
25
|
+
requestHeaders: ctx.requestHeaders,
|
|
20
26
|
});
|
|
21
27
|
},
|
|
22
28
|
});
|
package/dist/jobs/frontmatter.js
CHANGED
|
@@ -20,6 +20,44 @@ const FRONTMATTER_RE = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n)?([\s\S]*)$/;
|
|
|
20
20
|
const DELEGATED_POLICY_ID_RE = /^[a-z0-9][a-z0-9._:-]{0,127}$/i;
|
|
21
21
|
const EXECUTION_ID_RE = /^[a-z0-9][a-z0-9._:-]{0,127}$/i;
|
|
22
22
|
const REMOTE_ID_RE = /^[a-z0-9][a-z0-9@+._:/-]{0,511}$/i;
|
|
23
|
+
const EXTRA_FRONTMATTER_LINES = Symbol("extraFrontmatterLines");
|
|
24
|
+
const KNOWN_FRONTMATTER_FIELDS = new Set([
|
|
25
|
+
"schedule",
|
|
26
|
+
"enabled",
|
|
27
|
+
"timezone",
|
|
28
|
+
"createdBy",
|
|
29
|
+
"orgId",
|
|
30
|
+
"runAs",
|
|
31
|
+
"lastRun",
|
|
32
|
+
"lastCheck",
|
|
33
|
+
"lastStatus",
|
|
34
|
+
"lastError",
|
|
35
|
+
"nextRun",
|
|
36
|
+
"originScopeId",
|
|
37
|
+
"deliveryPlatform",
|
|
38
|
+
"deliveryDestination",
|
|
39
|
+
"deliveryThreadRef",
|
|
40
|
+
"deliveryTenantId",
|
|
41
|
+
"model",
|
|
42
|
+
"maxIterations",
|
|
43
|
+
"maxRunInputTokens",
|
|
44
|
+
"mcpTools",
|
|
45
|
+
"triggerType",
|
|
46
|
+
"event",
|
|
47
|
+
"condition",
|
|
48
|
+
"mode",
|
|
49
|
+
"domain",
|
|
50
|
+
"appId",
|
|
51
|
+
"executionHostId",
|
|
52
|
+
"executionEngine",
|
|
53
|
+
"executionCwd",
|
|
54
|
+
"remoteRequestId",
|
|
55
|
+
"remoteCommandId",
|
|
56
|
+
"remoteRunId",
|
|
57
|
+
"remoteAutomationRunId",
|
|
58
|
+
"remoteAdvanceSchedule",
|
|
59
|
+
"delegatedPolicyId",
|
|
60
|
+
]);
|
|
23
61
|
function assertBoundedFrontmatterValue(value, label, pattern) {
|
|
24
62
|
if (value === undefined)
|
|
25
63
|
return;
|
|
@@ -216,11 +254,23 @@ export function parseJobResource(content) {
|
|
|
216
254
|
};
|
|
217
255
|
}
|
|
218
256
|
const meta = { schedule: "", enabled: true };
|
|
257
|
+
const extraLines = [];
|
|
219
258
|
for (const line of match[1].split(/\r?\n/)) {
|
|
220
259
|
const colonIdx = line.indexOf(":");
|
|
221
|
-
if (colonIdx === -1)
|
|
260
|
+
if (colonIdx === -1) {
|
|
261
|
+
if (line.trim())
|
|
262
|
+
extraLines.push(line);
|
|
222
263
|
continue;
|
|
223
|
-
|
|
264
|
+
}
|
|
265
|
+
const key = line.slice(0, colonIdx).trim();
|
|
266
|
+
if (!KNOWN_FRONTMATTER_FIELDS.has(key)) {
|
|
267
|
+
extraLines.push(line);
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
parseKnownField(meta, key, line.slice(colonIdx + 1));
|
|
271
|
+
}
|
|
272
|
+
if (extraLines.length) {
|
|
273
|
+
meta[EXTRA_FRONTMATTER_LINES] = extraLines;
|
|
224
274
|
}
|
|
225
275
|
return {
|
|
226
276
|
meta,
|
|
@@ -307,6 +357,7 @@ export function buildJobResourceContent(meta, body) {
|
|
|
307
357
|
if (meta.mcpTools?.length) {
|
|
308
358
|
lines.push(`mcpTools: ${JSON.stringify(meta.mcpTools)}`);
|
|
309
359
|
}
|
|
360
|
+
lines.push(...(meta[EXTRA_FRONTMATTER_LINES] ?? []));
|
|
310
361
|
lines.push("---", "", body);
|
|
311
362
|
return lines.join("\n");
|
|
312
363
|
}
|
package/dist/jobs/run-now.d.ts
CHANGED
|
@@ -4,7 +4,16 @@ export interface RunAutomationNowInput {
|
|
|
4
4
|
orgId?: string | null;
|
|
5
5
|
appId?: string | null;
|
|
6
6
|
scope: AutomationScope;
|
|
7
|
-
|
|
7
|
+
/** Inbound request headers used to dispatch back to this exact local host. */
|
|
8
|
+
requestHeaders?: Headers;
|
|
9
|
+
/** Flat automation name, resolved as `jobs/<name>.md`. */
|
|
10
|
+
name?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Full resource path for an automation the caller already resolved. Required
|
|
13
|
+
* for automations nested under `jobs/` (e.g. per-factory jobs), whose names
|
|
14
|
+
* contain a slash and cannot round-trip through `name`.
|
|
15
|
+
*/
|
|
16
|
+
path?: string;
|
|
8
17
|
}
|
|
9
18
|
export interface QueuedAutomationRun {
|
|
10
19
|
queued: true;
|
|
@@ -19,4 +28,5 @@ export declare function queueAutomationRunNow(input: RunAutomationNowInput): Pro
|
|
|
19
28
|
*/
|
|
20
29
|
export declare function redispatchUnclaimedAutomationRuns(options?: {
|
|
21
30
|
appId?: string | null;
|
|
31
|
+
requestHeaders?: Headers;
|
|
22
32
|
}): Promise<number>;
|
package/dist/jobs/run-now.js
CHANGED
|
@@ -5,11 +5,12 @@ import { organizationResourceOwner, resourceGetByPath, } from "../resources/stor
|
|
|
5
5
|
import { fireInternalDispatch } from "../server/self-dispatch.js";
|
|
6
6
|
import { parseJobResource } from "./frontmatter.js";
|
|
7
7
|
import { listUnclaimedAutomationRuns, startAutomationRun, } from "./run-history.js";
|
|
8
|
-
async function dispatchAutomationRun(historyId) {
|
|
8
|
+
async function dispatchAutomationRun(historyId, requestHeaders) {
|
|
9
9
|
const dispatchPath = resolveAgentChatProcessRunDispatchPath();
|
|
10
10
|
await fireInternalDispatch({
|
|
11
11
|
path: dispatchPath,
|
|
12
12
|
taskId: historyId,
|
|
13
|
+
...(requestHeaders ? { event: { headers: requestHeaders } } : {}),
|
|
13
14
|
body: {
|
|
14
15
|
[AGENT_CHAT_BACKGROUND_RUN_FIELD]: {
|
|
15
16
|
runId: historyId,
|
|
@@ -23,6 +24,9 @@ async function dispatchAutomationRun(historyId) {
|
|
|
23
24
|
: {}),
|
|
24
25
|
});
|
|
25
26
|
}
|
|
27
|
+
function automationName(path) {
|
|
28
|
+
return path.replace(/^jobs\//, "").replace(/\.md$/, "");
|
|
29
|
+
}
|
|
26
30
|
function ownerForScope(input) {
|
|
27
31
|
if (input.scope === "personal")
|
|
28
32
|
return input.userEmail.trim().toLowerCase();
|
|
@@ -31,15 +35,43 @@ function ownerForScope(input) {
|
|
|
31
35
|
}
|
|
32
36
|
return organizationResourceOwner(input.orgId);
|
|
33
37
|
}
|
|
34
|
-
|
|
35
|
-
|
|
38
|
+
/**
|
|
39
|
+
* One place decides which resource a run-now request means. Callers that
|
|
40
|
+
* already hold the resource pass `path`; callers that only know a flat slug
|
|
41
|
+
* pass `name`. Accepting both at once would let two disagreeing identifiers
|
|
42
|
+
* silently pick a winner.
|
|
43
|
+
*/
|
|
44
|
+
function resolveAutomationTarget(input) {
|
|
45
|
+
const path = input.path?.trim();
|
|
46
|
+
const name = input.name?.trim();
|
|
47
|
+
if (path && name) {
|
|
48
|
+
throw Object.assign(new Error("Specify either an automation name or a path, not both."), { statusCode: 400 });
|
|
49
|
+
}
|
|
50
|
+
if (path) {
|
|
51
|
+
const segments = path.split("/");
|
|
52
|
+
const valid = segments[0] === "jobs" &&
|
|
53
|
+
segments.length > 1 &&
|
|
54
|
+
path.endsWith(".md") &&
|
|
55
|
+
!path.includes("\\") &&
|
|
56
|
+
segments.every((segment) => segment && segment !== "." && segment !== "..");
|
|
57
|
+
if (!valid) {
|
|
58
|
+
throw Object.assign(new Error("A valid automation path is required."), {
|
|
59
|
+
statusCode: 400,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return { path, name: automationName(path) };
|
|
63
|
+
}
|
|
36
64
|
if (!name || name.includes("/") || name.endsWith(".md")) {
|
|
37
65
|
throw Object.assign(new Error("A valid automation name is required."), {
|
|
38
66
|
statusCode: 400,
|
|
39
67
|
});
|
|
40
68
|
}
|
|
69
|
+
return { path: `jobs/${name}.md`, name };
|
|
70
|
+
}
|
|
71
|
+
export async function queueAutomationRunNow(input) {
|
|
72
|
+
const { path, name } = resolveAutomationTarget(input);
|
|
41
73
|
const owner = ownerForScope(input);
|
|
42
|
-
const resource = await resourceGetByPath(owner,
|
|
74
|
+
const resource = await resourceGetByPath(owner, path);
|
|
43
75
|
if (!resource) {
|
|
44
76
|
throw Object.assign(new Error(`Automation "${name}" not found.`), {
|
|
45
77
|
statusCode: 404,
|
|
@@ -56,7 +88,10 @@ export async function queueAutomationRunNow(input) {
|
|
|
56
88
|
}
|
|
57
89
|
// A manual-run request is a guaranteed app request even on hosts without a
|
|
58
90
|
// durable timer. Use it to recover older rows before adding the new one.
|
|
59
|
-
await redispatchUnclaimedAutomationRuns({
|
|
91
|
+
await redispatchUnclaimedAutomationRuns({
|
|
92
|
+
appId: input.appId,
|
|
93
|
+
requestHeaders: input.requestHeaders,
|
|
94
|
+
}).catch((error) => {
|
|
60
95
|
console.warn("[automations] Could not sweep queued runs before run-now:", error);
|
|
61
96
|
});
|
|
62
97
|
const historyId = await startAutomationRun({
|
|
@@ -69,7 +104,7 @@ export async function queueAutomationRunNow(input) {
|
|
|
69
104
|
dispatchPending: true,
|
|
70
105
|
});
|
|
71
106
|
try {
|
|
72
|
-
await dispatchAutomationRun(historyId);
|
|
107
|
+
await dispatchAutomationRun(historyId, input.requestHeaders);
|
|
73
108
|
}
|
|
74
109
|
catch (error) {
|
|
75
110
|
const message = error instanceof Error ? error.message : "Background dispatch failed";
|
|
@@ -88,7 +123,7 @@ export async function redispatchUnclaimedAutomationRuns(options) {
|
|
|
88
123
|
let attempted = 0;
|
|
89
124
|
for (const run of runs) {
|
|
90
125
|
try {
|
|
91
|
-
await dispatchAutomationRun(run.id);
|
|
126
|
+
await dispatchAutomationRun(run.id, options?.requestHeaders);
|
|
92
127
|
attempted += 1;
|
|
93
128
|
}
|
|
94
129
|
catch (error) {
|
package/dist/jobs/scheduler.d.ts
CHANGED
|
@@ -38,6 +38,7 @@ interface JobExecutionResult {
|
|
|
38
38
|
/** Execute one stored automation without changing its scheduled next run. */
|
|
39
39
|
export declare function runJobNow(owner: string, name: string, deps: SchedulerDeps, options?: {
|
|
40
40
|
historyId?: string;
|
|
41
|
+
path?: string;
|
|
41
42
|
}): Promise<JobExecutionResult>;
|
|
42
43
|
/** Process a durable run-now history row exactly once in the background worker. */
|
|
43
44
|
export declare function runQueuedAutomation(historyId: string, deps: SchedulerDeps): Promise<{
|
package/dist/jobs/scheduler.js
CHANGED
|
@@ -553,7 +553,7 @@ async function executeJob(resource, meta, body, deps, now, options = {}) {
|
|
|
553
553
|
}
|
|
554
554
|
/** Execute one stored automation without changing its scheduled next run. */
|
|
555
555
|
export async function runJobNow(owner, name, deps, options = {}) {
|
|
556
|
-
const path = `jobs/${name}.md`;
|
|
556
|
+
const path = options.path ?? `jobs/${name}.md`;
|
|
557
557
|
const resource = await resourceGetByPath(owner, path);
|
|
558
558
|
if (!resource)
|
|
559
559
|
throw new Error(`Automation "${name}" not found.`);
|
|
@@ -581,6 +581,7 @@ export async function runQueuedAutomation(historyId, deps) {
|
|
|
581
581
|
}
|
|
582
582
|
const result = await runJobNow(queued.owner, queued.automation, deps, {
|
|
583
583
|
historyId,
|
|
584
|
+
path: queued.path,
|
|
584
585
|
});
|
|
585
586
|
return {
|
|
586
587
|
skipped: false,
|
|
@@ -31,6 +31,8 @@ const messages = {
|
|
|
31
31
|
"aboutAgentNative.copyDiagnostics": "نسخ بيانات التشخيص",
|
|
32
32
|
"aboutAgentNative.unknown": "غير معروف",
|
|
33
33
|
"common.agent": "الوكيل",
|
|
34
|
+
"agentPanel.mode": "الوضع",
|
|
35
|
+
"agentPanel.uiMode": "واجهة المستخدم",
|
|
34
36
|
"common.cancel": "إلغاء",
|
|
35
37
|
"common.collapse": "طي",
|
|
36
38
|
"common.connect": "اتصال",
|
|
@@ -463,6 +465,7 @@ const messages = {
|
|
|
463
465
|
"share.linkCanStillOpen": "لا يزال بإمكان من لديه الرابط فتحه.",
|
|
464
466
|
"share.loading": "جارٍ التحميل...",
|
|
465
467
|
"share.loadMore": "تحميل المزيد",
|
|
468
|
+
"share.loadFailed": "تعذّر تحميل إعدادات المشاركة.",
|
|
466
469
|
"share.loadPeopleFailed": "تعذّر تحميل الأشخاص.",
|
|
467
470
|
"share.noAccess": "لا أحد لديه صلاحية الوصول حتى الآن.",
|
|
468
471
|
"share.noMatches": "لا توجد نتائج مطابقة.",
|
|
@@ -31,6 +31,8 @@ const messages = {
|
|
|
31
31
|
"aboutAgentNative.copyDiagnostics": "Diagnosedaten kopieren",
|
|
32
32
|
"aboutAgentNative.unknown": "Unbekannt",
|
|
33
33
|
"common.agent": "Agent",
|
|
34
|
+
"agentPanel.mode": "Modus",
|
|
35
|
+
"agentPanel.uiMode": "Benutzeroberfläche",
|
|
34
36
|
"common.cancel": "Abbrechen",
|
|
35
37
|
"common.collapse": "Einklappen",
|
|
36
38
|
"common.connect": "Verbinden",
|
|
@@ -498,6 +500,7 @@ const messages = {
|
|
|
498
500
|
"share.linkCanStillOpen": "Personen mit dem Link können dies weiterhin öffnen.",
|
|
499
501
|
"share.loading": "Laden...",
|
|
500
502
|
"share.loadMore": "Mehr laden",
|
|
503
|
+
"share.loadFailed": "Freigabeeinstellungen konnten nicht geladen werden.",
|
|
501
504
|
"share.loadPeopleFailed": "Es konnten keine Personen geladen werden.",
|
|
502
505
|
"share.noAccess": "Noch hat niemand Zugriff.",
|
|
503
506
|
"share.noMatches": "Keine Übereinstimmungen.",
|
|
@@ -31,6 +31,8 @@ declare const messages: {
|
|
|
31
31
|
readonly "aboutAgentNative.copyDiagnostics": "Copy diagnostics";
|
|
32
32
|
readonly "aboutAgentNative.unknown": "Unknown";
|
|
33
33
|
readonly "common.agent": "Agent";
|
|
34
|
+
readonly "agentPanel.mode": "Mode";
|
|
35
|
+
readonly "agentPanel.uiMode": "UI";
|
|
34
36
|
readonly "common.cancel": "Cancel";
|
|
35
37
|
readonly "common.collapse": "Collapse";
|
|
36
38
|
readonly "common.connect": "Connect";
|
|
@@ -447,6 +449,7 @@ declare const messages: {
|
|
|
447
449
|
readonly "share.linkCanStillOpen": "People with the link can still open this.";
|
|
448
450
|
readonly "share.loading": "Loading...";
|
|
449
451
|
readonly "share.loadMore": "Load more";
|
|
452
|
+
readonly "share.loadFailed": "Couldn't load sharing settings.";
|
|
450
453
|
readonly "share.loadPeopleFailed": "Could not load people.";
|
|
451
454
|
readonly "share.noAccess": "No one has access yet.";
|
|
452
455
|
readonly "share.noMatches": "No matches.";
|
|
@@ -31,6 +31,8 @@ const messages = {
|
|
|
31
31
|
"aboutAgentNative.copyDiagnostics": "Copy diagnostics",
|
|
32
32
|
"aboutAgentNative.unknown": "Unknown",
|
|
33
33
|
"common.agent": "Agent",
|
|
34
|
+
"agentPanel.mode": "Mode",
|
|
35
|
+
"agentPanel.uiMode": "UI",
|
|
34
36
|
"common.cancel": "Cancel",
|
|
35
37
|
"common.collapse": "Collapse",
|
|
36
38
|
"common.connect": "Connect",
|
|
@@ -447,6 +449,7 @@ const messages = {
|
|
|
447
449
|
"share.linkCanStillOpen": "People with the link can still open this.",
|
|
448
450
|
"share.loading": "Loading...",
|
|
449
451
|
"share.loadMore": "Load more",
|
|
452
|
+
"share.loadFailed": "Couldn't load sharing settings.",
|
|
450
453
|
"share.loadPeopleFailed": "Could not load people.",
|
|
451
454
|
"share.noAccess": "No one has access yet.",
|
|
452
455
|
"share.noMatches": "No matches.",
|
|
@@ -31,6 +31,8 @@ const messages = {
|
|
|
31
31
|
"aboutAgentNative.copyDiagnostics": "Copiar diagnóstico",
|
|
32
32
|
"aboutAgentNative.unknown": "Desconocida",
|
|
33
33
|
"common.agent": "Agente",
|
|
34
|
+
"agentPanel.mode": "Modo",
|
|
35
|
+
"agentPanel.uiMode": "Interfaz de usuario",
|
|
34
36
|
"common.cancel": "Cancelar",
|
|
35
37
|
"common.collapse": "Contraer",
|
|
36
38
|
"common.connect": "Conectar",
|
|
@@ -505,6 +507,7 @@ const messages = {
|
|
|
505
507
|
"share.linkCanStillOpen": "Las personas con el enlace aún pueden abrirlo.",
|
|
506
508
|
"share.loading": "Cargando...",
|
|
507
509
|
"share.loadMore": "Cargar más",
|
|
510
|
+
"share.loadFailed": "No se pudo cargar la configuración de uso compartido.",
|
|
508
511
|
"share.loadPeopleFailed": "No se pudieron cargar las personas.",
|
|
509
512
|
"share.noAccess": "Nadie tiene acceso todavía.",
|
|
510
513
|
"share.noMatches": "Sin coincidencias.",
|
|
@@ -31,6 +31,8 @@ const messages = {
|
|
|
31
31
|
"aboutAgentNative.copyDiagnostics": "Copier les diagnostics",
|
|
32
32
|
"aboutAgentNative.unknown": "Inconnue",
|
|
33
33
|
"common.agent": "Agent",
|
|
34
|
+
"agentPanel.mode": "Mode",
|
|
35
|
+
"agentPanel.uiMode": "Interface utilisateur",
|
|
34
36
|
"common.cancel": "Annuler",
|
|
35
37
|
"common.collapse": "Réduire",
|
|
36
38
|
"common.connect": "Connecter",
|
|
@@ -505,6 +507,7 @@ const messages = {
|
|
|
505
507
|
"share.linkCanStillOpen": "Les personnes disposant du lien peuvent toujours l'ouvrir.",
|
|
506
508
|
"share.loading": "Chargement...",
|
|
507
509
|
"share.loadMore": "Afficher plus",
|
|
510
|
+
"share.loadFailed": "Impossible de charger les paramètres de partage.",
|
|
508
511
|
"share.loadPeopleFailed": "Impossible de charger des personnes.",
|
|
509
512
|
"share.noAccess": "Personne n'y a encore accès.",
|
|
510
513
|
"share.noMatches": "Aucun résultat.",
|
|
@@ -31,6 +31,8 @@ const messages = {
|
|
|
31
31
|
"aboutAgentNative.copyDiagnostics": "डायग्नोस्टिक कॉपी करें",
|
|
32
32
|
"aboutAgentNative.unknown": "अज्ञात",
|
|
33
33
|
"common.agent": "एजेंट",
|
|
34
|
+
"agentPanel.mode": "मोड",
|
|
35
|
+
"agentPanel.uiMode": "यूआई",
|
|
34
36
|
"common.cancel": "रद्द करें",
|
|
35
37
|
"common.collapse": "समेटें",
|
|
36
38
|
"common.connect": "कनेक्ट करें",
|
|
@@ -447,6 +449,7 @@ const messages = {
|
|
|
447
449
|
"share.linkCanStillOpen": "लिंक वाले लोग इसे फिर भी खोल सकते हैं।",
|
|
448
450
|
"share.loading": "लोड हो रहा है...",
|
|
449
451
|
"share.loadMore": "और लोड करें",
|
|
452
|
+
"share.loadFailed": "साझाकरण सेटिंग्स लोड नहीं की जा सकीं।",
|
|
450
453
|
"share.loadPeopleFailed": "लोगों को लोड नहीं किया जा सका।",
|
|
451
454
|
"share.noAccess": "अभी किसी के पास एक्सेस नहीं है।",
|
|
452
455
|
"share.noMatches": "कोई मिलान नहीं मिला।",
|
|
@@ -31,6 +31,8 @@ const messages = {
|
|
|
31
31
|
"aboutAgentNative.copyDiagnostics": "診断情報をコピー",
|
|
32
32
|
"aboutAgentNative.unknown": "不明",
|
|
33
33
|
"common.agent": "エージェント",
|
|
34
|
+
"agentPanel.mode": "モード",
|
|
35
|
+
"agentPanel.uiMode": "UI",
|
|
34
36
|
"common.cancel": "キャンセル",
|
|
35
37
|
"common.collapse": "折りたたむ",
|
|
36
38
|
"common.connect": "接続",
|
|
@@ -442,6 +444,7 @@ const messages = {
|
|
|
442
444
|
"share.hideInSearch": "検索結果に表示しない",
|
|
443
445
|
"share.linkCanStillOpen": "リンクを知っているユーザーは引き続き開くことができます。",
|
|
444
446
|
"share.loadMore": "さらに読み込む",
|
|
447
|
+
"share.loadFailed": "共有設定を読み込めませんでした。",
|
|
445
448
|
"share.loadPeopleFailed": "ユーザーを読み込めませんでした。",
|
|
446
449
|
"share.loading": "読み込み中...",
|
|
447
450
|
"share.noAccess": "アクセスできるユーザーはまだいません。",
|
|
@@ -31,6 +31,8 @@ const messages = {
|
|
|
31
31
|
"aboutAgentNative.copyDiagnostics": "진단 정보 복사",
|
|
32
32
|
"aboutAgentNative.unknown": "알 수 없음",
|
|
33
33
|
"common.agent": "에이전트",
|
|
34
|
+
"agentPanel.mode": "모드",
|
|
35
|
+
"agentPanel.uiMode": "UI",
|
|
34
36
|
"common.cancel": "취소",
|
|
35
37
|
"common.collapse": "접기",
|
|
36
38
|
"common.connect": "연결",
|
|
@@ -442,6 +444,7 @@ const messages = {
|
|
|
442
444
|
"share.hideInSearch": "검색에서 숨기기",
|
|
443
445
|
"share.linkCanStillOpen": "링크가 있는 사용자는 계속 열 수 있습니다.",
|
|
444
446
|
"share.loadMore": "더 불러오기",
|
|
447
|
+
"share.loadFailed": "공유 설정을 불러올 수 없습니다.",
|
|
445
448
|
"share.loadPeopleFailed": "사용자를 불러올 수 없습니다.",
|
|
446
449
|
"share.loading": "불러오는 중...",
|
|
447
450
|
"share.noAccess": "아직 접근 권한이 있는 사용자가 없습니다.",
|
|
@@ -31,6 +31,8 @@ const messages = {
|
|
|
31
31
|
"aboutAgentNative.copyDiagnostics": "Copiar diagnósticos",
|
|
32
32
|
"aboutAgentNative.unknown": "Desconhecida",
|
|
33
33
|
"common.agent": "Agente",
|
|
34
|
+
"agentPanel.mode": "Modo",
|
|
35
|
+
"agentPanel.uiMode": "Interface",
|
|
34
36
|
"common.cancel": "Cancelar",
|
|
35
37
|
"common.collapse": "Recolher",
|
|
36
38
|
"common.connect": "Conectar",
|
|
@@ -505,6 +507,7 @@ const messages = {
|
|
|
505
507
|
"share.linkCanStillOpen": "Pessoas com o link ainda podem abrir isto.",
|
|
506
508
|
"share.loading": "Carregando...",
|
|
507
509
|
"share.loadMore": "Ver mais",
|
|
510
|
+
"share.loadFailed": "Não foi possível carregar as configurações de compartilhamento.",
|
|
508
511
|
"share.loadPeopleFailed": "Não foi possível carregar pessoas.",
|
|
509
512
|
"share.noAccess": "Ninguém tem acesso ainda.",
|
|
510
513
|
"share.noMatches": "Nenhuma correspondência.",
|
|
@@ -31,6 +31,8 @@ const messages = {
|
|
|
31
31
|
"aboutAgentNative.copyDiagnostics": "复制诊断信息",
|
|
32
32
|
"aboutAgentNative.unknown": "未知",
|
|
33
33
|
"common.agent": "智能体",
|
|
34
|
+
"agentPanel.mode": "模式",
|
|
35
|
+
"agentPanel.uiMode": "界面",
|
|
34
36
|
"common.cancel": "取消",
|
|
35
37
|
"common.collapse": "收起",
|
|
36
38
|
"common.connect": "连接",
|
|
@@ -442,6 +444,7 @@ const messages = {
|
|
|
442
444
|
"share.hideInSearch": "在搜索中隐藏",
|
|
443
445
|
"share.linkCanStillOpen": "拥有链接的人员仍可打开此内容。",
|
|
444
446
|
"share.loadMore": "加载更多",
|
|
447
|
+
"share.loadFailed": "无法加载共享设置。",
|
|
445
448
|
"share.loadPeopleFailed": "无法加载人员。",
|
|
446
449
|
"share.loading": "正在加载...",
|
|
447
450
|
"share.noAccess": "尚无任何人拥有访问权限。",
|
|
@@ -31,6 +31,8 @@ const messages = {
|
|
|
31
31
|
"aboutAgentNative.copyDiagnostics": "複製診斷資訊",
|
|
32
32
|
"aboutAgentNative.unknown": "未知",
|
|
33
33
|
"common.agent": "代理",
|
|
34
|
+
"agentPanel.mode": "模式",
|
|
35
|
+
"agentPanel.uiMode": "介面",
|
|
34
36
|
"common.cancel": "取消",
|
|
35
37
|
"common.collapse": "收合",
|
|
36
38
|
"common.connect": "連線",
|
|
@@ -442,6 +444,7 @@ const messages = {
|
|
|
442
444
|
"share.hideInSearch": "在搜尋中隱藏",
|
|
443
445
|
"share.linkCanStillOpen": "擁有連結的人員仍可開啟這個項目。",
|
|
444
446
|
"share.loadMore": "載入更多",
|
|
447
|
+
"share.loadFailed": "無法載入分享設定。",
|
|
445
448
|
"share.loadPeopleFailed": "無法載入人員。",
|
|
446
449
|
"share.loading": "載入中...",
|
|
447
450
|
"share.noAccess": "尚無任何人擁有存取權。",
|
|
@@ -33,6 +33,8 @@ export declare const englishAgentChatMessages: {
|
|
|
33
33
|
readonly "aboutAgentNative.copyDiagnostics": "Copy diagnostics";
|
|
34
34
|
readonly "aboutAgentNative.unknown": "Unknown";
|
|
35
35
|
readonly "common.agent": "Agent";
|
|
36
|
+
readonly "agentPanel.mode": "Mode";
|
|
37
|
+
readonly "agentPanel.uiMode": "UI";
|
|
36
38
|
readonly "common.cancel": "Cancel";
|
|
37
39
|
readonly "common.collapse": "Collapse";
|
|
38
40
|
readonly "common.connect": "Connect";
|
|
@@ -449,6 +451,7 @@ export declare const englishAgentChatMessages: {
|
|
|
449
451
|
readonly "share.linkCanStillOpen": "People with the link can still open this.";
|
|
450
452
|
readonly "share.loading": "Loading...";
|
|
451
453
|
readonly "share.loadMore": "Load more";
|
|
454
|
+
readonly "share.loadFailed": "Couldn't load sharing settings.";
|
|
452
455
|
readonly "share.loadPeopleFailed": "Could not load people.";
|
|
453
456
|
readonly "share.noAccess": "No one has access yet.";
|
|
454
457
|
readonly "share.noMatches": "No matches.";
|
|
@@ -422,6 +422,8 @@ declare const messages: {
|
|
|
422
422
|
downloadDesktop: string;
|
|
423
423
|
chatMode: string;
|
|
424
424
|
chat: string;
|
|
425
|
+
mode: string;
|
|
426
|
+
uiMode: string;
|
|
425
427
|
cliTerminalMode: string;
|
|
426
428
|
cli: string;
|
|
427
429
|
workspaceMode: string;
|
|
@@ -1126,11 +1128,6 @@ declare const messages: {
|
|
|
1126
1128
|
useCase: string;
|
|
1127
1129
|
setupNote: string;
|
|
1128
1130
|
};
|
|
1129
|
-
googleWorkspace: {
|
|
1130
|
-
description: string;
|
|
1131
|
-
useCase: string;
|
|
1132
|
-
setupNote: string;
|
|
1133
|
-
};
|
|
1134
1131
|
gitlab: {
|
|
1135
1132
|
description: string;
|
|
1136
1133
|
useCase: string;
|
|
@@ -428,6 +428,8 @@ const messages = {
|
|
|
428
428
|
downloadDesktop: "Download Desktop",
|
|
429
429
|
chatMode: "Chat mode",
|
|
430
430
|
chat: "Chat",
|
|
431
|
+
mode: "Mode",
|
|
432
|
+
uiMode: "UI",
|
|
431
433
|
cliTerminalMode: "CLI terminal mode",
|
|
432
434
|
cli: "CLI",
|
|
433
435
|
workspaceMode: "Files, agents, skills, and tasks",
|
|
@@ -1132,11 +1134,6 @@ const messages = {
|
|
|
1132
1134
|
useCase: "Observability, metrics, logs, traces, dashboards",
|
|
1133
1135
|
setupNote: "Grafana Cloud MCP is in public preview and requires Grafana Cloud Assistant MCP access. It is hosted Grafana Cloud only; self-hosted Grafana needs the local MCP server.",
|
|
1134
1136
|
},
|
|
1135
|
-
googleWorkspace: {
|
|
1136
|
-
description: "Search Google Workspace data through its remote MCP server.",
|
|
1137
|
-
useCase: "Workspace search across Gmail, Drive, Calendar, Chat, Docs, Sheets, Slides",
|
|
1138
|
-
setupNote: "Google Workspace MCP is in Developer Preview. Enable the relevant Google Workspace and MCP APIs, configure an OAuth consent screen and client, then authorize the products you want to use.",
|
|
1139
|
-
},
|
|
1140
1137
|
gitlab: {
|
|
1141
1138
|
description: "Read and manage GitLab projects, issues, and merge requests.",
|
|
1142
1139
|
useCase: "Repositories, issues, merge requests, CI/CD, code analytics",
|