@agent-native/core 0.103.1 → 0.104.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +30 -0
- package/corpus/core/package.json +9 -2
- package/corpus/core/src/agent/engine/credential-errors.ts +2 -2
- package/corpus/core/src/agent/production-agent.ts +30 -0
- package/corpus/core/src/agent/run-store.ts +12 -2
- package/corpus/core/src/cli/create.ts +1 -0
- package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +30 -11
- package/corpus/core/src/cli/templates-meta.ts +4 -3
- package/corpus/core/src/client/AgentAskPopover.tsx +89 -0
- package/corpus/core/src/client/AgentChatHome.tsx +4 -0
- package/corpus/core/src/client/AgentPanel.tsx +321 -223
- package/corpus/core/src/client/AssistantChat.tsx +6 -10
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +53 -372
- package/corpus/core/src/client/agent-chat-adapter.ts +13 -1
- package/corpus/core/src/client/agent-page/AgentContextTab.tsx +133 -149
- package/corpus/core/src/client/agent-page/AgentEmptyState.tsx +44 -0
- package/corpus/core/src/client/agent-page/AgentJobsTab.tsx +153 -82
- package/corpus/core/src/client/agent-page/AgentTabFrame.tsx +39 -0
- package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +368 -356
- package/corpus/core/src/client/agent-page/types.ts +1 -1
- package/corpus/core/src/client/analytics.ts +51 -5
- package/corpus/core/src/client/chat/run-recovery.tsx +12 -4
- package/corpus/core/src/client/composer/PromptComposer.tsx +5 -15
- package/corpus/core/src/client/composer/TiptapComposer.tsx +32 -3
- package/corpus/core/src/client/dynamic-suggestions.ts +3 -3
- package/corpus/core/src/client/index.ts +16 -1
- package/corpus/core/src/client/resources/ResourceTree.tsx +249 -38
- package/corpus/core/src/client/resources/ResourcesPanel.tsx +307 -140
- package/corpus/core/src/client/session-replay.ts +158 -5
- package/corpus/core/src/client/settings/AutomationsSection.tsx +30 -10
- package/corpus/core/src/client/settings/SettingsPanel.tsx +3 -2
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +2 -0
- package/corpus/core/src/client/settings/agent-settings-search.ts +2 -2
- package/corpus/core/src/client/use-chat-threads.ts +2 -0
- package/corpus/core/src/connections/catalog.ts +49 -7
- package/corpus/core/src/db/index.ts +6 -1
- package/corpus/core/src/extensions/actions.ts +106 -16
- package/corpus/core/src/extensions/content-patch.ts +22 -0
- package/corpus/core/src/extensions/routes.ts +18 -0
- package/corpus/core/src/extensions/store.ts +8 -0
- package/corpus/core/src/index.ts +3 -0
- package/corpus/core/src/ingestion/docx.ts +158 -0
- package/corpus/core/src/ingestion/figma-node-to-html.ts +1860 -0
- package/corpus/core/src/ingestion/figma.ts +548 -0
- package/corpus/core/src/ingestion/index.ts +107 -0
- package/corpus/core/src/ingestion/media.ts +264 -0
- package/corpus/core/src/ingestion/notion.ts +121 -0
- package/corpus/core/src/ingestion/office.ts +214 -0
- package/corpus/core/src/ingestion/orchestration.ts +160 -0
- package/corpus/core/src/ingestion/pptx.ts +333 -0
- package/corpus/core/src/ingestion/selection.ts +81 -0
- package/corpus/core/src/ingestion/website.ts +151 -0
- package/corpus/core/src/integrations/plugin.ts +45 -37
- package/corpus/core/src/localization/default-messages.ts +35 -12
- package/corpus/core/src/observability/hosted-model-experiment.ts +118 -0
- package/corpus/core/src/observability/traces.ts +5 -3
- package/corpus/core/src/provider-api/index.ts +452 -8
- package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +18 -1
- package/corpus/core/src/search-utils/index.ts +112 -0
- package/corpus/core/src/secrets/register-framework-secrets.ts +61 -0
- package/corpus/core/src/server/action-discovery.ts +33 -8
- package/corpus/core/src/server/agent-chat/framework-prompts.ts +2 -2
- package/corpus/core/src/server/agent-chat/prompt-resources.ts +144 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +6 -0
- package/corpus/core/src/server/core-routes-plugin.ts +12 -0
- package/corpus/core/src/server/index.ts +30 -0
- package/corpus/core/src/server/workspace-provider-oauth.ts +583 -0
- package/corpus/core/src/styles/agent-native.css +9 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +3 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
- package/corpus/core/src/templates/workspace-root/.env.example +12 -0
- package/corpus/core/src/workspace-connections/index.ts +6 -0
- package/corpus/core/src/workspace-connections/lifecycle.ts +43 -0
- package/corpus/core/src/workspace-connections/store.ts +16 -0
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +46 -3
- package/corpus/templates/analytics/AGENTS.md +9 -0
- package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +120 -6
- package/corpus/templates/analytics/actions/mutate-dashboard.ts +92 -30
- package/corpus/templates/analytics/actions/update-dashboard.ts +5 -5
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +313 -220
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -2
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +9 -6
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +90 -64
- package/corpus/templates/analytics/app/i18n-data.ts +3 -3
- package/corpus/templates/analytics/app/lib/dashboard-list-loading.ts +25 -0
- package/corpus/templates/analytics/app/lib/item-popularity.ts +13 -4
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/pivot.ts +8 -3
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +1 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +15 -3
- package/corpus/templates/analytics/changelog/2026-07-16-dashboard-filter-defaults-can-now-be-changed-reliably-withou.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-16-dashboard-lists-load-in-one-stable-order-without-popping-bet.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-16-fixed-dashboard-filter-dropdown-text-alignment.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-16-recurring-signed-in-users-can-now-be-viewed-as-weekly-bars-b.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-16-the-analytics-agent-can-now-duplicate-a-chart-and-place-the-.md +6 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +41 -1
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +1 -1
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +47 -1
- package/corpus/templates/analytics/server/lib/session-replay.ts +68 -0
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/analytics/server/routes/sessions/lookup.get.ts +47 -0
- package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +16 -9
- package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +86 -0
- package/corpus/templates/assets/AGENTS.md +10 -0
- package/corpus/templates/assets/actions/create-generation-session.ts +59 -1
- package/corpus/templates/assets/actions/edit-image.ts +2 -0
- package/corpus/templates/assets/actions/generate-asset.ts +52 -0
- package/corpus/templates/assets/actions/generate-image-batch.ts +55 -0
- package/corpus/templates/assets/actions/generate-image.ts +219 -1
- package/corpus/templates/assets/actions/open-asset-picker.ts +14 -0
- package/corpus/templates/assets/actions/refine-image.ts +3 -0
- package/corpus/templates/assets/actions/restyle-image.ts +2 -0
- package/corpus/templates/assets/agent-native.app-skill.json +4 -0
- package/corpus/templates/assets/app/components/layout/Layout.tsx +2 -0
- package/corpus/templates/assets/app/i18n/zh-TW.ts +3 -0
- package/corpus/templates/assets/app/i18n-data.ts +29 -13
- package/corpus/templates/assets/app/routes/agent.tsx +7 -1
- package/corpus/templates/assets/app/routes/library.tsx +9 -0
- package/corpus/templates/assets/app/routes/settings.tsx +3 -0
- package/corpus/templates/assets/changelog/2026-07-16-creative-context-library.md +6 -0
- package/corpus/templates/assets/package.json +1 -0
- package/corpus/templates/assets/server/lib/image-processing.ts +1 -22
- package/corpus/templates/assets/server/plugins/creative-context.ts +205 -0
- package/corpus/templates/brain/app/i18n-data.ts +3 -3
- package/corpus/templates/brain/app/lib/brain.ts +1 -1
- package/corpus/templates/brain/server/lib/search.ts +17 -67
- package/corpus/templates/calendar/app/i18n-data.ts +3 -3
- package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +19 -18
- package/corpus/templates/chat/app/i18n/en-US.ts +3 -3
- package/corpus/templates/chat/app/lib/agent-page.tsx +10 -1
- package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +1 -1
- package/corpus/templates/clips/AGENTS.md +4 -0
- package/corpus/templates/clips/actions/cleanup-transcript.ts +35 -4
- package/corpus/templates/clips/actions/create-meeting.ts +6 -2
- package/corpus/templates/clips/actions/create-organization.ts +3 -2
- package/corpus/templates/clips/actions/create-recording.ts +4 -1
- package/corpus/templates/clips/actions/finalize-recording.ts +44 -7
- package/corpus/templates/clips/actions/import-loom-recording.ts +4 -1
- package/corpus/templates/clips/actions/lib/create-recording-schema.ts +2 -2
- package/corpus/templates/clips/actions/list-meetings.ts +23 -5
- package/corpus/templates/clips/actions/list-organization-state.ts +1 -1
- package/corpus/templates/clips/actions/remove-silences.ts +10 -1
- package/corpus/templates/clips/actions/request-transcript.ts +53 -11
- package/corpus/templates/clips/actions/search-recordings-utils.ts +7 -0
- package/corpus/templates/clips/actions/search-recordings.ts +5 -8
- package/corpus/templates/clips/actions/set-organization-branding.ts +2 -2
- package/corpus/templates/clips/actions/stitch-recordings.ts +10 -5
- package/corpus/templates/clips/actions/update-ai-request-status.ts +38 -0
- package/corpus/templates/clips/app/components/editor/editor-layout.tsx +3 -4
- package/corpus/templates/clips/app/components/editor/editor-selection.ts +19 -0
- package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +10 -10
- package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +1 -2
- package/corpus/templates/clips/app/components/library/library-grid.tsx +101 -93
- package/corpus/templates/clips/app/components/player/video-player.tsx +11 -0
- package/corpus/templates/clips/app/components/workspace/branding-editor.tsx +53 -1
- package/corpus/templates/clips/app/i18n/ar-SA.ts +7 -1
- package/corpus/templates/clips/app/i18n/de-DE.ts +7 -1
- package/corpus/templates/clips/app/i18n/en-US.ts +10 -4
- package/corpus/templates/clips/app/i18n/es-ES.ts +7 -1
- package/corpus/templates/clips/app/i18n/fr-FR.ts +7 -1
- package/corpus/templates/clips/app/i18n/hi-IN.ts +7 -1
- package/corpus/templates/clips/app/i18n/ja-JP.ts +7 -1
- package/corpus/templates/clips/app/i18n/ko-KR.ts +7 -1
- package/corpus/templates/clips/app/i18n/pt-BR.ts +7 -1
- package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -1
- package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -1
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +5 -9
- package/corpus/templates/clips/app/routes/_app.settings.organization.tsx +6 -2
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +129 -27
- package/corpus/templates/clips/app/routes/record.tsx +23 -2
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +6 -2
- package/corpus/templates/clips/changelog/2026-07-16-authorized-viewers-can-open-shared-private-clips-without-a-m.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-camera-bubble-hover-controls-appear-above-the-face.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-chrome-extension-recovers-stale-recorder-state.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-clips-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-clips-search-now-matches-recording-content-without-requiring.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-declined-meetings-no-longer-show-desktop-reminders.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-failed-desktop-saves-now-show-their-local-recovery-copy.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-long-desktop-clips-now-preserve-complete-playback-synced-aud.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-long-recording-lists-keep-stitch-and-library-actions-visible.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-organization-admins-can-choose-new-recording-visibility.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-remove-silences-now-shows-queued-active-completed-and-failed.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-settings-no-longer-repeats-the-builder-connection-status-in-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-transcripts-now-appear-from-native-browser-speech-sooner-wit.md +6 -0
- package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -1
- package/corpus/templates/clips/chrome-extension/src/background.ts +73 -1
- package/corpus/templates/clips/chrome-extension/src/native-recording-state.ts +32 -0
- package/corpus/templates/clips/chrome-extension/src/native-transcription.ts +248 -0
- package/corpus/templates/clips/chrome-extension/src/offscreen.ts +106 -0
- package/corpus/templates/clips/desktop/src/app.tsx +66 -28
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +335 -285
- package/corpus/templates/clips/desktop/src/lib/single-flight.ts +7 -0
- package/corpus/templates/clips/desktop/src/lib/upload-verification.ts +51 -0
- package/corpus/templates/clips/desktop/src/overlays/bubble.tsx +2 -2
- package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +10 -2
- package/corpus/templates/clips/desktop/src/styles.css +13 -11
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +8 -9
- package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +1 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +88 -13
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +13 -2
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +241 -6
- package/corpus/templates/clips/server/db/schema.ts +2 -2
- package/corpus/templates/clips/server/lib/builder-media-compression.ts +64 -67
- package/corpus/templates/clips/server/lib/calendar-event-classification.ts +19 -0
- package/corpus/templates/clips/server/lib/google-calendar-client.ts +1 -0
- package/corpus/templates/clips/server/lib/recordings.ts +40 -1
- package/corpus/templates/clips/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/clips/server/plugins/db.ts +2 -2
- package/corpus/templates/clips/server/routes/api/auth/google-calendar.get.ts +1 -1
- package/corpus/templates/clips/server/routes/api/public-recording.get.ts +14 -5
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +51 -1
- package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +1 -64
- package/corpus/templates/clips/shared/media-worker-contract.ts +32 -15
- package/corpus/templates/content/.agents/skills/content/SKILL.md +16 -0
- package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +85 -0
- package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +8 -0
- package/corpus/templates/content/AGENTS.md +9 -0
- package/corpus/templates/content/actions/create-document.ts +94 -0
- package/corpus/templates/content/actions/edit-document.ts +144 -4
- package/corpus/templates/content/actions/update-document.ts +138 -0
- package/corpus/templates/content/agent-native.app-skill.json +4 -0
- package/corpus/templates/content/app/components/layout/Layout.tsx +2 -0
- package/corpus/templates/content/app/i18n/zh-TW.ts +3 -0
- package/corpus/templates/content/app/i18n-data.ts +13 -4
- package/corpus/templates/content/app/routes/_app.agent.tsx +2 -1
- package/corpus/templates/content/app/routes/_app.settings.tsx +3 -0
- package/corpus/templates/content/changelog/2026-07-16-creative-context-library.md +6 -0
- package/corpus/templates/content/package.json +1 -0
- package/corpus/templates/content/server/plugins/creative-context.ts +31 -0
- package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +116 -0
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +16 -0
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -0
- package/corpus/templates/design/AGENTS.md +6 -0
- package/corpus/templates/design/actions/clone-creative-context-design.ts +176 -0
- package/corpus/templates/design/actions/edit-design.ts +128 -0
- package/corpus/templates/design/actions/generate-design.ts +278 -14
- package/corpus/templates/design/actions/generate-screens.ts +42 -1
- package/corpus/templates/design/agent-native.app-skill.json +4 -0
- package/corpus/templates/design/app/components/layout/Layout.tsx +7 -3
- package/corpus/templates/design/app/i18n/zh-TW.ts +3 -0
- package/corpus/templates/design/app/i18n-data.ts +10 -4
- package/corpus/templates/design/app/routes/agent.tsx +2 -1
- package/corpus/templates/design/app/routes/settings.tsx +3 -0
- package/corpus/templates/design/changelog/2026-07-16-creative-context-library.md +6 -0
- package/corpus/templates/design/changelog/2026-07-16-design-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
- package/corpus/templates/design/package.json +1 -0
- package/corpus/templates/design/server/lib/figma-design-context.ts +5 -335
- package/corpus/templates/design/server/lib/figma-node-to-html.ts +1 -1859
- package/corpus/templates/design/server/lib/import-design-files.ts +6 -8
- package/corpus/templates/design/server/plugins/creative-context.ts +31 -0
- package/corpus/templates/design/shared/generation-session.ts +7 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +3 -3
- package/corpus/templates/forms/app/i18n/en-US.ts +3 -3
- package/corpus/templates/macros/app/i18n/en-US.ts +3 -3
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +35 -5
- package/corpus/templates/mail/app/i18n/en-US.ts +3 -3
- package/corpus/templates/mail/changelog/2026-07-16-mail-previews-now-expand-to-show-the-full-message-without-an.md +6 -0
- package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +30 -11
- package/corpus/templates/plan/AGENTS.md +21 -1
- package/corpus/templates/plan/actions/get-visual-plan.ts +1 -1
- package/corpus/templates/plan/actions/patch-visual-plan-source.ts +161 -0
- package/corpus/templates/plan/actions/read-visual-plan-source.ts +1 -1
- package/corpus/templates/plan/actions/update-visual-plan.ts +126 -10
- package/corpus/templates/plan/app/hooks/use-plans.ts +2 -0
- package/corpus/templates/plan/app/i18n/en-US.ts +3 -3
- package/corpus/templates/plan/app/pages/PlansPage.tsx +65 -62
- package/corpus/templates/plan/changelog/2026-07-16-local-plan-previews-now-load-annotations-containing-html-lik.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-16-plan-agents-now-prevent-stale-edits-from-overwriting-newer-p.md +6 -0
- package/corpus/templates/plan/server/plan-mdx.ts +75 -2
- package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +21 -4
- package/corpus/templates/slides/.agents/skills/creative-context/SKILL.md +122 -0
- package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +11 -0
- package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +12 -3
- package/corpus/templates/slides/AGENTS.md +6 -0
- package/corpus/templates/slides/actions/add-slide.ts +230 -14
- package/corpus/templates/slides/actions/clone-context-slide.ts +302 -0
- package/corpus/templates/slides/actions/create-deck.ts +130 -0
- package/corpus/templates/slides/actions/extract-pdf.ts +6 -2
- package/corpus/templates/slides/actions/import-file.ts +5 -4
- package/corpus/templates/slides/actions/patch-deck.ts +200 -10
- package/corpus/templates/slides/actions/update-slide.ts +208 -15
- package/corpus/templates/slides/app/components/layout/Layout.tsx +2 -0
- package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +16 -1
- package/corpus/templates/slides/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/slides/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +6 -3
- package/corpus/templates/slides/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/slides/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/slides/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/slides/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/slides/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/slides/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/slides/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/slides/app/i18n/zh-TW.ts +3 -0
- package/corpus/templates/slides/app/lib/validate-native-slide-html.ts +176 -0
- package/corpus/templates/slides/app/routes/agent.tsx +7 -1
- package/corpus/templates/slides/app/routes/settings.tsx +3 -0
- package/corpus/templates/slides/changelog/2026-07-16-creative-context-library.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-16-google-slides-native-cloning.md +6 -0
- package/corpus/templates/slides/package.json +1 -0
- package/corpus/templates/slides/server/handlers/import/docx-parser.ts +4 -85
- package/corpus/templates/slides/server/handlers/import/pptx-parser.ts +7 -421
- package/corpus/templates/slides/server/plugins/creative-context.ts +166 -0
- package/dist/agent/engine/credential-errors.d.ts +1 -1
- package/dist/agent/engine/credential-errors.d.ts.map +1 -1
- package/dist/agent/engine/credential-errors.js +2 -2
- package/dist/agent/engine/credential-errors.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +25 -0
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +12 -2
- package/dist/agent/run-store.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +1 -0
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/skills-content/visual-plan-skill.d.ts +1 -1
- package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/visual-plan-skill.js +30 -11
- package/dist/cli/skills-content/visual-plan-skill.js.map +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +4 -3
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/client/AgentAskPopover.d.ts +11 -0
- package/dist/client/AgentAskPopover.d.ts.map +1 -0
- package/dist/client/AgentAskPopover.js +30 -0
- package/dist/client/AgentAskPopover.js.map +1 -0
- package/dist/client/AgentChatHome.d.ts +1 -1
- package/dist/client/AgentChatHome.d.ts.map +1 -1
- package/dist/client/AgentChatHome.js +2 -2
- package/dist/client/AgentChatHome.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +9 -19
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +119 -80
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +4 -4
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts +3 -9
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +49 -189
- 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 +12 -1
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-page/AgentContextTab.d.ts.map +1 -1
- package/dist/client/agent-page/AgentContextTab.js +26 -28
- package/dist/client/agent-page/AgentContextTab.js.map +1 -1
- package/dist/client/agent-page/AgentEmptyState.d.ts +13 -0
- package/dist/client/agent-page/AgentEmptyState.d.ts.map +1 -0
- package/dist/client/agent-page/AgentEmptyState.js +6 -0
- package/dist/client/agent-page/AgentEmptyState.js.map +1 -0
- package/dist/client/agent-page/AgentJobsTab.d.ts +1 -1
- package/dist/client/agent-page/AgentJobsTab.d.ts.map +1 -1
- package/dist/client/agent-page/AgentJobsTab.js +90 -58
- package/dist/client/agent-page/AgentJobsTab.js.map +1 -1
- package/dist/client/agent-page/AgentTabFrame.d.ts +12 -0
- package/dist/client/agent-page/AgentTabFrame.d.ts.map +1 -0
- package/dist/client/agent-page/AgentTabFrame.js +7 -0
- package/dist/client/agent-page/AgentTabFrame.js.map +1 -0
- package/dist/client/agent-page/AgentTabsPage.d.ts +9 -1
- package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
- package/dist/client/agent-page/AgentTabsPage.js +135 -99
- package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
- package/dist/client/agent-page/types.d.ts +1 -1
- package/dist/client/agent-page/types.d.ts.map +1 -1
- package/dist/client/agent-page/types.js.map +1 -1
- package/dist/client/analytics.d.ts +10 -3
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +37 -2
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/chat/run-recovery.d.ts.map +1 -1
- package/dist/client/chat/run-recovery.js +10 -3
- package/dist/client/chat/run-recovery.js.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +2 -2
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +15 -3
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/dynamic-suggestions.js +3 -3
- package/dist/client/dynamic-suggestions.js.map +1 -1
- package/dist/client/index.d.ts +4 -3
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/resources/ResourceTree.d.ts +5 -1
- package/dist/client/resources/ResourceTree.d.ts.map +1 -1
- package/dist/client/resources/ResourceTree.js +74 -5
- package/dist/client/resources/ResourceTree.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts +11 -2
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +105 -31
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/session-replay.d.ts +28 -0
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +122 -8
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/settings/AutomationsSection.d.ts +3 -1
- package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
- package/dist/client/settings/AutomationsSection.js +16 -6
- package/dist/client/settings/AutomationsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +3 -3
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts +2 -0
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/settings/agent-settings-search.js +2 -2
- package/dist/client/settings/agent-settings-search.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts +2 -0
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/connections/catalog.d.ts +41 -7
- package/dist/connections/catalog.d.ts.map +1 -1
- package/dist/connections/catalog.js +40 -7
- package/dist/connections/catalog.js.map +1 -1
- package/dist/db/index.d.ts +2 -2
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +2 -2
- package/dist/db/index.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +85 -15
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/content-patch.d.ts +4 -0
- package/dist/extensions/content-patch.d.ts.map +1 -1
- package/dist/extensions/content-patch.js +18 -0
- package/dist/extensions/content-patch.js.map +1 -1
- package/dist/extensions/routes.d.ts.map +1 -1
- package/dist/extensions/routes.js +14 -0
- package/dist/extensions/routes.js.map +1 -1
- package/dist/extensions/store.d.ts +1 -0
- package/dist/extensions/store.d.ts.map +1 -1
- package/dist/extensions/store.js +4 -1
- package/dist/extensions/store.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ingestion/docx.d.ts +16 -0
- package/dist/ingestion/docx.d.ts.map +1 -0
- package/dist/ingestion/docx.js +129 -0
- package/dist/ingestion/docx.js.map +1 -0
- package/dist/ingestion/figma-node-to-html.d.ts +304 -0
- package/dist/ingestion/figma-node-to-html.d.ts.map +1 -0
- package/dist/ingestion/figma-node-to-html.js +1292 -0
- package/dist/ingestion/figma-node-to-html.js.map +1 -0
- package/dist/ingestion/figma.d.ts +115 -0
- package/dist/ingestion/figma.d.ts.map +1 -0
- package/dist/ingestion/figma.js +399 -0
- package/dist/ingestion/figma.js.map +1 -0
- package/dist/ingestion/index.d.ts +11 -0
- package/dist/ingestion/index.d.ts.map +1 -0
- package/dist/ingestion/index.js +11 -0
- package/dist/ingestion/index.js.map +1 -0
- package/dist/ingestion/media.d.ts +36 -0
- package/dist/ingestion/media.d.ts.map +1 -0
- package/dist/ingestion/media.js +178 -0
- package/dist/ingestion/media.js.map +1 -0
- package/dist/ingestion/notion.d.ts +12 -0
- package/dist/ingestion/notion.d.ts.map +1 -0
- package/dist/ingestion/notion.js +104 -0
- package/dist/ingestion/notion.js.map +1 -0
- package/dist/ingestion/office.d.ts +45 -0
- package/dist/ingestion/office.d.ts.map +1 -0
- package/dist/ingestion/office.js +141 -0
- package/dist/ingestion/office.js.map +1 -0
- package/dist/ingestion/orchestration.d.ts +52 -0
- package/dist/ingestion/orchestration.d.ts.map +1 -0
- package/dist/ingestion/orchestration.js +89 -0
- package/dist/ingestion/orchestration.js.map +1 -0
- package/dist/ingestion/pptx.d.ts +28 -0
- package/dist/ingestion/pptx.d.ts.map +1 -0
- package/dist/ingestion/pptx.js +255 -0
- package/dist/ingestion/pptx.js.map +1 -0
- package/dist/ingestion/selection.d.ts +20 -0
- package/dist/ingestion/selection.d.ts.map +1 -0
- package/dist/ingestion/selection.js +52 -0
- package/dist/ingestion/selection.js.map +1 -0
- package/dist/ingestion/website.d.ts +27 -0
- package/dist/ingestion/website.d.ts.map +1 -0
- package/dist/ingestion/website.js +100 -0
- package/dist/ingestion/website.js.map +1 -0
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +32 -27
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/localization/default-messages.d.ts +22 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +31 -9
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/observability/hosted-model-experiment.d.ts +39 -0
- package/dist/observability/hosted-model-experiment.d.ts.map +1 -0
- package/dist/observability/hosted-model-experiment.js +90 -0
- package/dist/observability/hosted-model-experiment.js.map +1 -0
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +5 -3
- package/dist/observability/traces.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/index.d.ts +35 -4
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +339 -8
- package/dist/provider-api/index.js.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +18 -1
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/search-utils/index.d.ts +12 -0
- package/dist/search-utils/index.d.ts.map +1 -0
- package/dist/search-utils/index.js +95 -0
- package/dist/search-utils/index.js.map +1 -0
- package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
- package/dist/secrets/register-framework-secrets.js +57 -0
- package/dist/secrets/register-framework-secrets.js.map +1 -1
- package/dist/server/action-discovery.d.ts +8 -0
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +26 -9
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-chat/framework-prompts.js +2 -2
- package/dist/server/agent-chat/framework-prompts.js.map +1 -1
- package/dist/server/agent-chat/prompt-resources.d.ts +19 -0
- package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -1
- package/dist/server/agent-chat/prompt-resources.js +95 -0
- package/dist/server/agent-chat/prompt-resources.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +7 -0
- 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/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +5 -0
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/index.d.ts +5 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +5 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/workspace-provider-oauth.d.ts +48 -0
- package/dist/server/workspace-provider-oauth.d.ts.map +1 -0
- package/dist/server/workspace-provider-oauth.js +415 -0
- package/dist/server/workspace-provider-oauth.js.map +1 -0
- package/dist/styles/agent-native.css +9 -0
- package/dist/templates/chat/app/i18n/en-US.ts +3 -3
- package/dist/templates/chat/app/lib/agent-page.tsx +10 -1
- package/dist/templates/default/app/i18n/en-US.ts +3 -3
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
- package/dist/templates/workspace-root/.env.example +12 -0
- package/dist/workspace-connections/index.d.ts +1 -0
- package/dist/workspace-connections/index.d.ts.map +1 -1
- package/dist/workspace-connections/index.js +1 -0
- package/dist/workspace-connections/index.js.map +1 -1
- package/dist/workspace-connections/lifecycle.d.ts +16 -0
- package/dist/workspace-connections/lifecycle.d.ts.map +1 -0
- package/dist/workspace-connections/lifecycle.js +14 -0
- package/dist/workspace-connections/lifecycle.js.map +1 -0
- package/dist/workspace-connections/store.d.ts.map +1 -1
- package/dist/workspace-connections/store.js +16 -0
- package/dist/workspace-connections/store.js.map +1 -1
- package/package.json +10 -3
- package/src/templates/chat/app/i18n/en-US.ts +3 -3
- package/src/templates/chat/app/lib/agent-page.spec.tsx +10 -1
- package/src/templates/chat/app/lib/agent-page.tsx +10 -1
- package/src/templates/default/app/i18n/en-US.ts +3 -3
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
- package/src/templates/workspace-root/.env.example +12 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { extractCssColors, rankColorSamples } from "./media.js";
|
|
2
|
+
|
|
3
|
+
export interface WebsiteAsset {
|
|
4
|
+
url: string;
|
|
5
|
+
kind: "image" | "video" | "audio" | "font" | "stylesheet" | "script";
|
|
6
|
+
role?: "logo" | "open-graph";
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface WebsiteDesignTokens {
|
|
10
|
+
colors: string[];
|
|
11
|
+
typography: Array<{
|
|
12
|
+
family: string;
|
|
13
|
+
size: string;
|
|
14
|
+
weight: string;
|
|
15
|
+
lineHeight: string;
|
|
16
|
+
letterSpacing: string;
|
|
17
|
+
}>;
|
|
18
|
+
spacing: string[];
|
|
19
|
+
radii: string[];
|
|
20
|
+
cssVariables: Record<string, string>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface WebsiteExtraction {
|
|
24
|
+
title: string;
|
|
25
|
+
text: string;
|
|
26
|
+
assets: WebsiteAsset[];
|
|
27
|
+
internalLinks: string[];
|
|
28
|
+
designTokens: WebsiteDesignTokens;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function extractStaticWebsiteContext(
|
|
32
|
+
html: string,
|
|
33
|
+
baseUrl: string,
|
|
34
|
+
): WebsiteExtraction {
|
|
35
|
+
const title = decodeEntities(
|
|
36
|
+
html.match(/<title\b[^>]*>([\s\S]*?)<\/title>/i)?.[1] ?? "",
|
|
37
|
+
).trim();
|
|
38
|
+
const assets = new Map<string, WebsiteAsset>();
|
|
39
|
+
const links = new Set<string>();
|
|
40
|
+
for (const match of html.matchAll(
|
|
41
|
+
/<(img|video|audio|script|link)\b[^>]*(?:src|href)=["']([^"']+)["'][^>]*>/gi,
|
|
42
|
+
)) {
|
|
43
|
+
const tag = match[1].toLowerCase();
|
|
44
|
+
const url = resolveUrl(match[2], baseUrl);
|
|
45
|
+
if (!url) continue;
|
|
46
|
+
const kind =
|
|
47
|
+
tag === "link"
|
|
48
|
+
? /icon/i.test(match[0])
|
|
49
|
+
? "image"
|
|
50
|
+
: /font/i.test(match[0])
|
|
51
|
+
? "font"
|
|
52
|
+
: "stylesheet"
|
|
53
|
+
: tag === "img"
|
|
54
|
+
? "image"
|
|
55
|
+
: tag;
|
|
56
|
+
if (
|
|
57
|
+
(
|
|
58
|
+
["image", "video", "audio", "font", "stylesheet", "script"] as string[]
|
|
59
|
+
).includes(kind)
|
|
60
|
+
) {
|
|
61
|
+
const role =
|
|
62
|
+
/(?:alt|class|id|rel)=["'][^"']*(?:logo|wordmark|brandmark|icon)[^"']*["']/i.test(
|
|
63
|
+
match[0],
|
|
64
|
+
)
|
|
65
|
+
? "logo"
|
|
66
|
+
: undefined;
|
|
67
|
+
assets.set(url, {
|
|
68
|
+
url,
|
|
69
|
+
kind: kind as WebsiteAsset["kind"],
|
|
70
|
+
...(role ? { role } : {}),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
for (const match of html.matchAll(
|
|
75
|
+
/<meta\b[^>]*(?:property|name)=["'](?:og:image(?::url)?|twitter:image)["'][^>]*content=["']([^"']+)["'][^>]*>|<meta\b[^>]*content=["']([^"']+)["'][^>]*(?:property|name)=["'](?:og:image(?::url)?|twitter:image)["'][^>]*>/gi,
|
|
76
|
+
)) {
|
|
77
|
+
const url = resolveUrl(match[1] ?? match[2], baseUrl);
|
|
78
|
+
if (url) assets.set(url, { url, kind: "image", role: "open-graph" });
|
|
79
|
+
}
|
|
80
|
+
for (const match of html.matchAll(/<a\b[^>]*href=["']([^"']+)["'][^>]*>/gi)) {
|
|
81
|
+
const url = resolveUrl(match[1], baseUrl);
|
|
82
|
+
if (url && new URL(url).origin === new URL(baseUrl).origin) links.add(url);
|
|
83
|
+
}
|
|
84
|
+
const styleText = [...html.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style>/gi)]
|
|
85
|
+
.map((match) => match[1])
|
|
86
|
+
.join("\n");
|
|
87
|
+
const cssVariables = Object.fromEntries(
|
|
88
|
+
[...styleText.matchAll(/(--[\w-]+)\s*:\s*([^;}{]+)/g)].map((match) => [
|
|
89
|
+
match[1],
|
|
90
|
+
match[2].trim(),
|
|
91
|
+
]),
|
|
92
|
+
);
|
|
93
|
+
return {
|
|
94
|
+
title,
|
|
95
|
+
text: htmlToText(html),
|
|
96
|
+
assets: [...assets.values()],
|
|
97
|
+
internalLinks: [...links],
|
|
98
|
+
designTokens: {
|
|
99
|
+
colors: rankColorSamples(extractCssColors(styleText)),
|
|
100
|
+
typography: [],
|
|
101
|
+
spacing: uniqueMatches(
|
|
102
|
+
styleText,
|
|
103
|
+
/(?:margin|padding|gap)\s*:\s*([^;}{]+)/gi,
|
|
104
|
+
),
|
|
105
|
+
radii: uniqueMatches(styleText, /border-radius\s*:\s*([^;}{]+)/gi),
|
|
106
|
+
cssVariables,
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function uniqueMatches(value: string, pattern: RegExp): string[] {
|
|
112
|
+
return [
|
|
113
|
+
...new Set([...value.matchAll(pattern)].map((match) => match[1].trim())),
|
|
114
|
+
].slice(0, 100);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function htmlToText(html: string): string {
|
|
118
|
+
return decodeEntities(
|
|
119
|
+
html
|
|
120
|
+
.replace(/<!--[\s\S]*?-->/g, " ")
|
|
121
|
+
.replace(/<(script|style|noscript|template)\b[^>]*>[\s\S]*?<\/\1>/gi, " ")
|
|
122
|
+
.replace(/<\s*br\s*\/?\s*>/gi, "\n")
|
|
123
|
+
.replace(/<\/(p|div|li|h[1-6]|section|article|main)>/gi, "\n")
|
|
124
|
+
.replace(/<[^>]+>/g, " "),
|
|
125
|
+
)
|
|
126
|
+
.replace(/[\t ]+/g, " ")
|
|
127
|
+
.replace(/ *\n */g, "\n")
|
|
128
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
129
|
+
.trim();
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function resolveUrl(value: string, baseUrl: string): string | null {
|
|
133
|
+
try {
|
|
134
|
+
const url = new URL(decodeEntities(value), baseUrl);
|
|
135
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") return null;
|
|
136
|
+
url.hash = "";
|
|
137
|
+
return url.href;
|
|
138
|
+
} catch {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function decodeEntities(value: string): string {
|
|
144
|
+
return value
|
|
145
|
+
.replace(/ /gi, " ")
|
|
146
|
+
.replace(/&/gi, "&")
|
|
147
|
+
.replace(/</gi, "<")
|
|
148
|
+
.replace(/>/gi, ">")
|
|
149
|
+
.replace(/"/gi, '"')
|
|
150
|
+
.replace(/'|'/gi, "'");
|
|
151
|
+
}
|
|
@@ -2160,38 +2160,46 @@ export function createIntegrationsPlugin(
|
|
|
2160
2160
|
error: err instanceof Error ? err.message : "Slack access denied",
|
|
2161
2161
|
};
|
|
2162
2162
|
}
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2163
|
+
return await runWithRequestContext(
|
|
2164
|
+
{
|
|
2165
|
+
userEmail: session.email,
|
|
2166
|
+
orgId: org?.orgId ?? session.orgId ?? undefined,
|
|
2167
|
+
},
|
|
2168
|
+
async () => {
|
|
2169
|
+
const clientId = await resolveSecret("SLACK_CLIENT_ID");
|
|
2170
|
+
const clientSecret = await resolveSecret("SLACK_CLIENT_SECRET");
|
|
2171
|
+
const signingSecret = await resolveSecret("SLACK_SIGNING_SECRET");
|
|
2172
|
+
if (!clientId || !clientSecret || !signingSecret) {
|
|
2173
|
+
setResponseStatus(event, 503);
|
|
2174
|
+
return {
|
|
2175
|
+
error:
|
|
2176
|
+
"Slack OAuth is not configured. Add the Slack client id, client secret, and signing secret first.",
|
|
2177
|
+
};
|
|
2178
|
+
}
|
|
2179
|
+
const redirectUri = resolveOAuthRedirectUri(
|
|
2180
|
+
event,
|
|
2181
|
+
`${P}/slack/oauth/callback`,
|
|
2182
|
+
);
|
|
2183
|
+
if (!redirectUri) {
|
|
2184
|
+
setResponseStatus(event, 400);
|
|
2185
|
+
return { error: "Slack OAuth redirect URL is not allowed." };
|
|
2186
|
+
}
|
|
2187
|
+
const query = getQuery(event);
|
|
2188
|
+
const state = encodeOAuthState({
|
|
2189
|
+
redirectUri,
|
|
2190
|
+
owner: session.email,
|
|
2191
|
+
orgId: org?.orgId ?? session.orgId ?? undefined,
|
|
2192
|
+
app: "agent-native:slack",
|
|
2193
|
+
addAccount: true,
|
|
2194
|
+
returnUrl:
|
|
2195
|
+
typeof query.return === "string" ? query.return : "/messaging",
|
|
2196
|
+
});
|
|
2197
|
+
return sendRedirect(
|
|
2198
|
+
event,
|
|
2199
|
+
buildSlackAuthorizeUrl({ clientId, redirectUri, state }),
|
|
2200
|
+
302,
|
|
2201
|
+
);
|
|
2202
|
+
},
|
|
2195
2203
|
);
|
|
2196
2204
|
}),
|
|
2197
2205
|
);
|
|
@@ -2239,17 +2247,17 @@ export function createIntegrationsPlugin(
|
|
|
2239
2247
|
orgId: org?.orgId ?? session.orgId ?? null,
|
|
2240
2248
|
orgRole: org?.role ?? null,
|
|
2241
2249
|
});
|
|
2242
|
-
const clientId = await resolveSecret("SLACK_CLIENT_ID");
|
|
2243
|
-
const clientSecret = await resolveSecret("SLACK_CLIENT_SECRET");
|
|
2244
|
-
if (!clientId || !clientSecret) {
|
|
2245
|
-
return oauthErrorPage("Slack OAuth is not configured.");
|
|
2246
|
-
}
|
|
2247
2250
|
return await runWithRequestContext(
|
|
2248
2251
|
{
|
|
2249
2252
|
userEmail: access.ownerEmail,
|
|
2250
2253
|
orgId: access.orgId ?? undefined,
|
|
2251
2254
|
},
|
|
2252
2255
|
async () => {
|
|
2256
|
+
const clientId = await resolveSecret("SLACK_CLIENT_ID");
|
|
2257
|
+
const clientSecret = await resolveSecret("SLACK_CLIENT_SECRET");
|
|
2258
|
+
if (!clientId || !clientSecret) {
|
|
2259
|
+
return oauthErrorPage("Slack OAuth is not configured.");
|
|
2260
|
+
}
|
|
2253
2261
|
const oauth = await exchangeSlackOAuthCode({
|
|
2254
2262
|
code,
|
|
2255
2263
|
clientId,
|
|
@@ -23,10 +23,10 @@ const messages = {
|
|
|
23
23
|
languageDescription:
|
|
24
24
|
"Choose the interface language. This preference is saved for your account.",
|
|
25
25
|
languageLabel: "Interface language",
|
|
26
|
-
agentTitle: "Agent
|
|
26
|
+
agentTitle: "Agent workspace",
|
|
27
27
|
agentDescription:
|
|
28
|
-
"Open the agent
|
|
29
|
-
openAgentSettings: "Open agent
|
|
28
|
+
"Open the agent workspace for model, API keys, automations, voice, and other agent controls.",
|
|
29
|
+
openAgentSettings: "Open agent workspace",
|
|
30
30
|
workspaceTitle: "Workspace",
|
|
31
31
|
workspaceDescription: "Manage team access and shared workspace resources.",
|
|
32
32
|
openTeamSettings: "Open team settings",
|
|
@@ -212,6 +212,17 @@ const messages = {
|
|
|
212
212
|
"Run this app locally with pnpm dev or use Builder.io to access the CLI terminal.",
|
|
213
213
|
toggleAgent: "Toggle agent",
|
|
214
214
|
openFullView: "Open full view",
|
|
215
|
+
askAgent: "Ask the agent",
|
|
216
|
+
askAgentTitle: "Ask the agent",
|
|
217
|
+
askAgentPlaceholder: "Tell the agent what you want to do…",
|
|
218
|
+
connectAi: "Connect AI",
|
|
219
|
+
builderOrOwnKeys:
|
|
220
|
+
"Use Builder.io (free credits), or add your own provider keys.",
|
|
221
|
+
connectBuilderIo: "Connect Builder.io",
|
|
222
|
+
connectingBuilder: "Connecting Builder.io…",
|
|
223
|
+
builderModelCredits: "Free credits for Claude, OpenAI & Gemini",
|
|
224
|
+
addOwnKeys: "Add your own keys",
|
|
225
|
+
configureProviderKeys: "Configure Anthropic, OpenAI, or another provider",
|
|
215
226
|
checkingAiConnection: "Checking AI connection...",
|
|
216
227
|
voiceMode: {
|
|
217
228
|
entryButtonLabel: "Use microphone",
|
|
@@ -220,9 +231,9 @@ const messages = {
|
|
|
220
231
|
"Voice mode keeps listening while the agent navigates and takes actions.",
|
|
221
232
|
setupTitle: "Set up voice mode",
|
|
222
233
|
setupDescription:
|
|
223
|
-
"Connect Builder to use managed voice with free credits, or
|
|
224
|
-
connectBuilder: "Connect Builder",
|
|
225
|
-
useOpenAiKey: "
|
|
234
|
+
"Connect Builder.io to use managed voice with free credits, or add your own keys.",
|
|
235
|
+
connectBuilder: "Connect Builder.io",
|
|
236
|
+
useOpenAiKey: "Add your own keys",
|
|
226
237
|
startWithOpenAiKey: "Start with OpenAI key",
|
|
227
238
|
start: "Start voice mode",
|
|
228
239
|
keepDictating: "Keep dictating",
|
|
@@ -351,9 +362,19 @@ const messages = {
|
|
|
351
362
|
organizationMemberNote: "You can manage jobs you created.",
|
|
352
363
|
loading: "Loading…",
|
|
353
364
|
recurringLoadError: "Could not load recurring jobs.",
|
|
365
|
+
organizationEmptyTitle: "No organization jobs yet",
|
|
366
|
+
organizationEmptyDescription:
|
|
367
|
+
"Describe a shared job for this organization.",
|
|
368
|
+
recurringEmptyTitle: "No recurring jobs yet",
|
|
369
|
+
recurringEmptyDescription: "Describe what should run and when.",
|
|
370
|
+
organizationCreateTitle: "Create an organization job",
|
|
371
|
+
recurringCreateTitle: "Create a recurring job",
|
|
372
|
+
organizationPrompt:
|
|
373
|
+
"Create a shared organization job that runs on a schedule and does this: ",
|
|
374
|
+
recurringPrompt:
|
|
375
|
+
"Create a recurring job that runs on a schedule and does this: every morning, summarize my inbox.",
|
|
354
376
|
organizationEmpty: "No organization jobs yet.",
|
|
355
|
-
recurringEmpty:
|
|
356
|
-
"No recurring jobs yet. Ask the agent: “every morning, summarize my inbox”.",
|
|
377
|
+
recurringEmpty: "No recurring jobs yet.",
|
|
357
378
|
enabled: "Enabled",
|
|
358
379
|
paused: "Paused",
|
|
359
380
|
disabled: "Disabled",
|
|
@@ -370,6 +391,10 @@ const messages = {
|
|
|
370
391
|
"Automations are personal today, so none are shown in the organization view.",
|
|
371
392
|
automationsDescription:
|
|
372
393
|
"Event-triggered and scheduled agent tasks managed from one place.",
|
|
394
|
+
automationsEmptyTitle: "No automations yet",
|
|
395
|
+
automationsEmptyDescription: "Describe what should happen and when.",
|
|
396
|
+
automationsCreateTitle: "Create an automation",
|
|
397
|
+
automationPrompt: "Create an automation that does this: ",
|
|
373
398
|
automationsPersonalOnly: "Automations are personal today.",
|
|
374
399
|
deleteRecurringTitle: "Delete recurring job?",
|
|
375
400
|
deleteRecurringDescription:
|
|
@@ -378,8 +403,7 @@ const messages = {
|
|
|
378
403
|
recurringDetails: "Recurring job details",
|
|
379
404
|
instructions: "Instructions",
|
|
380
405
|
automationsLoadError: "Could not load automations.",
|
|
381
|
-
automationsEmpty:
|
|
382
|
-
"No automations yet. Ask the agent to set up an event-triggered or scheduled task.",
|
|
406
|
+
automationsEmpty: "No automations yet.",
|
|
383
407
|
automationEventTrigger: "On {{event}}",
|
|
384
408
|
automationScheduleTrigger: "Scheduled task",
|
|
385
409
|
deleteAutomationTitle: "Delete automation?",
|
|
@@ -397,8 +421,7 @@ const messages = {
|
|
|
397
421
|
personal: "Personal",
|
|
398
422
|
organization: "Organization",
|
|
399
423
|
fireTestEvent: "Fire test event",
|
|
400
|
-
automationsEmptySettings:
|
|
401
|
-
'No automations yet. Click "New automation" or ask the agent to set one up.',
|
|
424
|
+
automationsEmptySettings: "Describe what should happen and when.",
|
|
402
425
|
},
|
|
403
426
|
share: {
|
|
404
427
|
titleWithResource: 'Share "{{title}}"',
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
export const HOSTED_DEFAULT_MODEL_EXPERIMENT_ID =
|
|
2
|
+
"hosted-default-model-sonnet-5-vs-gpt-5-6-luna-2026-07";
|
|
3
|
+
|
|
4
|
+
export const HOSTED_DEFAULT_MODEL_CONTROL = {
|
|
5
|
+
id: "sonnet-5",
|
|
6
|
+
model: "claude-sonnet-5",
|
|
7
|
+
weight: 80,
|
|
8
|
+
} as const;
|
|
9
|
+
|
|
10
|
+
export const HOSTED_DEFAULT_MODEL_TREATMENT = {
|
|
11
|
+
id: "gpt-5-6-luna",
|
|
12
|
+
model: "gpt-5-6-luna",
|
|
13
|
+
weight: 20,
|
|
14
|
+
} as const;
|
|
15
|
+
|
|
16
|
+
export interface HostedDefaultModelExperimentAssignment {
|
|
17
|
+
experimentId: string;
|
|
18
|
+
variantId: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface HostedDefaultModelExperimentResolution {
|
|
22
|
+
model: string;
|
|
23
|
+
assignment: HostedDefaultModelExperimentAssignment;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
type HostedExperimentEnv = Record<string, string | undefined>;
|
|
27
|
+
|
|
28
|
+
const FIRST_PARTY_HOST_SUFFIX = ".agent-native.com";
|
|
29
|
+
const ENABLED_VALUES = new Set(["1", "true", "on", "yes"]);
|
|
30
|
+
const DISABLED_VALUES = new Set(["0", "false", "off", "no"]);
|
|
31
|
+
|
|
32
|
+
function hostnameFromUrl(value: string | undefined): string | null {
|
|
33
|
+
const trimmed = value?.trim();
|
|
34
|
+
if (!trimmed) return null;
|
|
35
|
+
try {
|
|
36
|
+
const url = /^[a-z][a-z0-9+.-]*:\/\//i.test(trimmed)
|
|
37
|
+
? new URL(trimmed)
|
|
38
|
+
: new URL(`https://${trimmed}`);
|
|
39
|
+
return url.hostname.toLowerCase();
|
|
40
|
+
} catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The rollout is automatic only on first-party hosted app domains. Operators
|
|
47
|
+
* can explicitly enable or disable it for preview and emergency rollback.
|
|
48
|
+
*/
|
|
49
|
+
export function isHostedDefaultModelExperimentEnabled(
|
|
50
|
+
env: HostedExperimentEnv = process.env,
|
|
51
|
+
): boolean {
|
|
52
|
+
const override =
|
|
53
|
+
env.AGENT_NATIVE_HOSTED_MODEL_EXPERIMENT?.trim().toLowerCase();
|
|
54
|
+
if (override && DISABLED_VALUES.has(override)) return false;
|
|
55
|
+
if (override && ENABLED_VALUES.has(override)) return true;
|
|
56
|
+
|
|
57
|
+
const hostnames = [
|
|
58
|
+
env.APP_URL,
|
|
59
|
+
env.BETTER_AUTH_URL,
|
|
60
|
+
env.URL,
|
|
61
|
+
env.DEPLOY_URL,
|
|
62
|
+
env.VERCEL_PROJECT_PRODUCTION_URL,
|
|
63
|
+
env.VERCEL_URL,
|
|
64
|
+
]
|
|
65
|
+
.map(hostnameFromUrl)
|
|
66
|
+
.filter((hostname): hostname is string => Boolean(hostname));
|
|
67
|
+
|
|
68
|
+
return hostnames.some(
|
|
69
|
+
(hostname) =>
|
|
70
|
+
hostname === "agent-native.com" ||
|
|
71
|
+
hostname.endsWith(FIRST_PARTY_HOST_SUFFIX),
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Stable cross-app bucket: the same authenticated user receives the same
|
|
77
|
+
* variant in every hosted template for the life of this experiment id.
|
|
78
|
+
*/
|
|
79
|
+
export function hostedDefaultModelExperimentBucket(userId: string): number {
|
|
80
|
+
const input = `${HOSTED_DEFAULT_MODEL_EXPERIMENT_ID}:${userId.trim().toLowerCase()}`;
|
|
81
|
+
let hash = 0x811c9dc5;
|
|
82
|
+
for (let index = 0; index < input.length; index++) {
|
|
83
|
+
hash ^= input.charCodeAt(index);
|
|
84
|
+
hash = Math.imul(hash, 0x01000193);
|
|
85
|
+
}
|
|
86
|
+
return (hash >>> 0) % 100;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function resolveHostedDefaultModelExperiment(args: {
|
|
90
|
+
userId: string | null | undefined;
|
|
91
|
+
engineName: string;
|
|
92
|
+
isDefaultModelSelection: boolean;
|
|
93
|
+
supportedModels?: readonly string[];
|
|
94
|
+
env?: HostedExperimentEnv;
|
|
95
|
+
}): HostedDefaultModelExperimentResolution | null {
|
|
96
|
+
const userId = args.userId?.trim();
|
|
97
|
+
if (!userId) return null;
|
|
98
|
+
if (args.engineName !== "builder") return null;
|
|
99
|
+
if (!args.isDefaultModelSelection) return null;
|
|
100
|
+
if (!isHostedDefaultModelExperimentEnabled(args.env)) return null;
|
|
101
|
+
|
|
102
|
+
const variant =
|
|
103
|
+
hostedDefaultModelExperimentBucket(userId) <
|
|
104
|
+
HOSTED_DEFAULT_MODEL_TREATMENT.weight
|
|
105
|
+
? HOSTED_DEFAULT_MODEL_TREATMENT
|
|
106
|
+
: HOSTED_DEFAULT_MODEL_CONTROL;
|
|
107
|
+
if (args.supportedModels && !args.supportedModels.includes(variant.model)) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return {
|
|
112
|
+
model: variant.model,
|
|
113
|
+
assignment: {
|
|
114
|
+
experimentId: HOSTED_DEFAULT_MODEL_EXPERIMENT_ID,
|
|
115
|
+
variantId: variant.id,
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
@@ -354,9 +354,11 @@ export async function instrumentAgentLoop(opts: {
|
|
|
354
354
|
toolCallCount++;
|
|
355
355
|
|
|
356
356
|
const isError =
|
|
357
|
-
typeof event.
|
|
358
|
-
|
|
359
|
-
event.result
|
|
357
|
+
typeof event.isError === "boolean"
|
|
358
|
+
? event.isError
|
|
359
|
+
: typeof event.result === "string" &&
|
|
360
|
+
(event.result.startsWith("Error") ||
|
|
361
|
+
event.result.startsWith("Error running "));
|
|
360
362
|
if (isError) failedTools++;
|
|
361
363
|
else successfulTools++;
|
|
362
364
|
|