@agent-native/core 0.130.2 → 0.131.2
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 +51 -0
- package/corpus/core/docs/content/agent-surfaces.mdx +4 -4
- package/corpus/core/docs/content/automations.mdx +61 -12
- package/corpus/core/docs/content/deployment.mdx +11 -4
- package/corpus/core/docs/content/extensions.mdx +39 -33
- package/corpus/core/docs/content/recurring-jobs.mdx +41 -19
- package/corpus/core/docs/content/template-dispatch-operations.mdx +19 -7
- package/corpus/core/package.json +3 -1
- package/corpus/core/src/action.ts +55 -0
- package/corpus/core/src/agent/engine/builder-engine.ts +8 -4
- package/corpus/core/src/agent/production-agent.ts +175 -100
- package/corpus/core/src/agent/tool-search.ts +36 -0
- package/corpus/core/src/automations/service.ts +506 -0
- package/corpus/core/src/browser-context/index.ts +392 -0
- package/corpus/core/src/client/AgentPanel.tsx +2 -1
- package/corpus/core/src/client/FeedbackButton.tsx +37 -4
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +21 -0
- package/corpus/core/src/client/agent-chat.ts +31 -3
- package/corpus/core/src/client/agent-page/AgentJobsTab.tsx +438 -310
- package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +4 -4
- package/corpus/core/src/client/agent-page/use-jobs.ts +7 -0
- package/corpus/core/src/client/analytics-session.ts +13 -0
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +67 -0
- package/corpus/core/src/client/settings/AutomationsSection.tsx +27 -499
- package/corpus/core/src/client/settings/SettingsPanel.tsx +32 -11
- package/corpus/core/src/client/settings/index.ts +2 -0
- package/corpus/core/src/client/use-agent-chat.ts +35 -3
- package/corpus/core/src/client/use-chat-threads.ts +8 -25
- package/corpus/core/src/deploy/build.ts +2 -0
- package/corpus/core/src/deploy/workspace-deploy.ts +2 -0
- package/corpus/core/src/extensions/actions.ts +115 -3
- package/corpus/core/src/extensions/fetch-tool.ts +11 -0
- package/corpus/core/src/extensions/routes.ts +16 -1
- package/corpus/core/src/extensions/web-content.ts +96 -1
- package/corpus/core/src/integrations/computer-supervision.ts +33 -1
- package/corpus/core/src/integrations/index.ts +6 -0
- package/corpus/core/src/integrations/integration-durable-dispatch-config.ts +10 -0
- package/corpus/core/src/integrations/integration-durable-dispatch.ts +4 -0
- package/corpus/core/src/integrations/plugin.ts +94 -41
- package/corpus/core/src/integrations/remote-browser-actions.ts +621 -0
- package/corpus/core/src/jobs/actions/list-recurring-jobs.ts +5 -7
- package/corpus/core/src/jobs/actions/manage-recurring-job.ts +3 -7
- package/corpus/core/src/jobs/background-automation-runner.ts +437 -0
- package/corpus/core/src/jobs/frontmatter.ts +308 -0
- package/corpus/core/src/jobs/scheduler.ts +89 -598
- package/corpus/core/src/jobs/tools.ts +22 -3
- package/corpus/core/src/localization/default-messages.ts +45 -45
- package/corpus/core/src/mcp-client/index.ts +6 -0
- package/corpus/core/src/notifications/actions.ts +5 -0
- package/corpus/core/src/progress/actions.ts +5 -0
- package/corpus/core/src/provider-api/actions/github-repo-files.ts +11 -0
- package/corpus/core/src/provider-api/actions/provider-api.ts +13 -0
- package/corpus/core/src/server/action-discovery.ts +7 -0
- package/corpus/core/src/server/agent-chat/browser-team-tools.ts +126 -3
- package/corpus/core/src/server/agent-chat/framework-prompts.ts +7 -11
- package/corpus/core/src/server/agent-chat/plugin-options.ts +3 -3
- package/corpus/core/src/server/agent-chat/script-entries.ts +52 -1
- package/corpus/core/src/server/agent-chat-plugin.ts +25 -5
- package/corpus/core/src/server/attribution.ts +22 -0
- package/corpus/core/src/server/auth.ts +20 -6
- package/corpus/core/src/server/better-auth-instance.ts +10 -2
- package/corpus/core/src/server/core-routes-plugin.ts +10 -1
- package/corpus/core/src/server/csrf.ts +25 -0
- package/corpus/core/src/server/google-oauth.ts +21 -1
- package/corpus/core/src/server/onboarding-html.ts +18 -0
- package/corpus/core/src/server/prompts/framework-core-compact.ts +3 -3
- package/corpus/core/src/server/prompts/framework-core.ts +3 -3
- package/corpus/core/src/server/prompts/shared-rules.ts +3 -3
- package/corpus/core/src/settings/index.ts +1 -0
- package/corpus/core/src/shared/analytics-anonymous-id.ts +35 -0
- package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +26 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +28 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +27 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +28 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +28 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +25 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +27 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +27 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +27 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +24 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +24 -0
- package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +10 -7
- package/corpus/core/src/templates/workspace-core/.agents/skills/automations/SKILL.md +53 -8
- package/corpus/core/src/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +131 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +13 -4
- package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +23 -15
- package/corpus/core/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +33 -18
- package/corpus/core/src/tracking/providers.ts +1 -0
- package/corpus/core/src/tracking/registry.ts +2 -1
- package/corpus/core/src/tracking/types.ts +1 -0
- package/corpus/core/src/triggers/actions/list-automations.ts +43 -44
- package/corpus/core/src/triggers/actions/manage-automation.ts +17 -48
- package/corpus/core/src/triggers/actions.ts +218 -127
- package/corpus/core/src/triggers/dispatcher.ts +181 -367
- package/corpus/core/src/triggers/routes.ts +84 -27
- package/corpus/core/src/triggers/types.ts +9 -23
- package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/analytics/actions/install-dashboard-template.ts +13 -4
- package/corpus/templates/analytics/actions/rename-dashboard.ts +8 -3
- package/corpus/templates/analytics/actions/restore-dashboard-revision.ts +8 -3
- package/corpus/templates/analytics/actions/update-dashboard.ts +22 -5
- package/corpus/templates/analytics/app/components/dashboard/DashboardPanelSkeleton.tsx +7 -1
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +1 -82
- package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +4 -4
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +23 -13
- package/corpus/templates/analytics/app/global.css +21 -0
- package/corpus/templates/analytics/app/i18n-data.ts +165 -101
- package/corpus/templates/analytics/app/lib/custom-block-promotion.ts +62 -0
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +17 -2
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +3 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +77 -12
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-save-queue.ts +34 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +42 -26
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +15 -0
- package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +1 -1
- package/corpus/templates/analytics/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-the-dashboard.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-custom-dashboard-blocks-now-identify-one-off-agent-patches-a.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-dashboard-chart-deletions-now-save-in-order-so-removed-rows-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-dashboard-chart-loaders-are-easier-to-see-and-animate-more-s.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-plan-mode-can-now-query-connected-analytics-sources-while-ke.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-plan-mode-can-use-clips-as-read-only-prompt-context.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-signup-entry-pages-now-show-the-first-page-viewed-before-eac.md +6 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +26 -1
- package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +0 -33
- package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +13 -3
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +9 -1
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +44 -1
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +96 -16
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +18 -27
- package/corpus/templates/analytics/server/plugins/core-routes.ts +1 -0
- package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +4 -8
- package/corpus/templates/assets/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-the-workspace.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +3 -7
- package/corpus/templates/brain/app/root.tsx +0 -3
- package/corpus/templates/brain/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-ask-brain.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-29-extensions-are-no-longer-shown-as-a-default-command-menu-des.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +25 -5
- package/corpus/templates/calendar/AGENTS.md +5 -0
- package/corpus/templates/calendar/actions/create-event.ts +43 -13
- package/corpus/templates/calendar/actions/event-action-helpers.ts +131 -1
- package/corpus/templates/calendar/actions/manage-event-draft.ts +65 -2
- package/corpus/templates/calendar/app/components/calendar/CreateEventDialog.tsx +437 -258
- package/corpus/templates/calendar/app/components/calendar/DayView.tsx +19 -3
- package/corpus/templates/calendar/app/components/calendar/MonthView.tsx +24 -0
- package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +15 -2
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +1 -5
- package/corpus/templates/calendar/app/hooks/use-events.ts +44 -5
- package/corpus/templates/calendar/app/i18n-data.ts +50 -0
- package/corpus/templates/calendar/app/lib/all-day-layout.ts +9 -2
- package/corpus/templates/calendar/app/lib/event-form-initialization.ts +4 -8
- package/corpus/templates/calendar/app/lib/event-form-utils.ts +30 -8
- package/corpus/templates/calendar/app/lib/location-suggestions.ts +36 -0
- package/corpus/templates/calendar/app/lib/out-of-office.ts +87 -1
- package/corpus/templates/calendar/app/pages/CalendarView.tsx +68 -13
- package/corpus/templates/calendar/changelog/2026-07-26-out-of-office-events-now-default-to-full-days-with-a-ready.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-29-recent-calendar-locations-now-appear-as-address-suggestions-.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/calendar/server/lib/find-time.ts +29 -5
- package/corpus/templates/calendar/shared/api.ts +2 -0
- package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +1 -5
- package/corpus/templates/chat/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/clips/app/components/library/library-layout.tsx +1 -5
- package/corpus/templates/clips/changelog/2026-07-29-fixed-system-audio-recordings-picking-up-your-microphone-in-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-29-the-desktop-camera-preview-now-closes-after-a-recording-fin.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +14 -15
- package/corpus/templates/clips/desktop/src/lib/bubble-session.ts +11 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +9 -4
- package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +11 -0
- package/corpus/templates/clips/server/jobs/transactional-emails.ts +47 -23
- package/corpus/templates/clips/server/lib/transactional-email-store.ts +16 -6
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/content/.agents/skills/content-product-development/SKILL.md +103 -0
- package/corpus/templates/content/.agents/skills/content-product-development/references/verification.md +57 -0
- package/corpus/templates/content/AGENTS.md +2 -0
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -6
- package/corpus/templates/content/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/content/docs/product/README.md +115 -0
- package/corpus/templates/content/docs/product/architecture.md +98 -0
- package/corpus/templates/content/docs/product/capabilities/content.access.page-database.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.access.row-private.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.access.safe-aggregate.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.access.visibility-closure.md +79 -0
- package/corpus/templates/content/docs/product/capabilities/content.action.button.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.action-parity.md +73 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.audience-safe.md +91 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.automation.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.expression-authoring.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.presence.md +103 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.resource-consent.md +90 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.skill-catalog.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.api.cms.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.author.code.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.author.document-editor.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.author.footnotes.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.author.math.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.author.media.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.author.mermaid.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.automation.scheduled.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.capture.enrich.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.command.fabric.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.comment.page-owned.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.diff.ai-assist.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.diff.filtered-review.md +79 -0
- package/corpus/templates/content/docs/product/capabilities/content.diff.in-place.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.discussion.page.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.embed.host-grant.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.embed.mcp-app.md +69 -0
- package/corpus/templates/content/docs/product/capabilities/content.embed.surface.md +74 -0
- package/corpus/templates/content/docs/product/capabilities/content.event.committed.md +85 -0
- package/corpus/templates/content/docs/product/capabilities/content.expression.cached-result.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.expression.catalog.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.expression.language.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.feedback.signal.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.form.shared-engine.md +72 -0
- package/corpus/templates/content/docs/product/capabilities/content.history.queryable.md +79 -0
- package/corpus/templates/content/docs/product/capabilities/content.home.global.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.job.durable.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.knowledge.graph.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.knowledge.links.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.knowledge.search.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.layout.responsive.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.navigation.sidebar.md +86 -0
- package/corpus/templates/content/docs/product/capabilities/content.notification.source.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.block.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.blocks-field.md +79 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.database.md +92 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.multi-membership.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.page.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.reference.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.transclusion.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.organization.teams.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.portability.pdf-export.md +78 -0
- package/corpus/templates/content/docs/product/capabilities/content.portability.roundtrip.md +154 -0
- package/corpus/templates/content/docs/product/capabilities/content.portability.source-representation.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.portability.vault-export.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.presentation.mode.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.preset.catalog.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.property.actor.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.property.catalog.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.property.constraints.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.property.guarded-change.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.property.location.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.property.typed.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.publish.public.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.publish.reading.md +74 -0
- package/corpus/templates/content/docs/product/capabilities/content.query.object.md +114 -0
- package/corpus/templates/content/docs/product/capabilities/content.reader.documents.md +69 -0
- package/corpus/templates/content/docs/product/capabilities/content.reader.surface.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.relationship.edge.md +183 -0
- package/corpus/templates/content/docs/product/capabilities/content.renderer.artifact-block.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.renderer.custom-block.md +81 -0
- package/corpus/templates/content/docs/product/capabilities/content.renderer.graph.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.renderer.typed.md +92 -0
- package/corpus/templates/content/docs/product/capabilities/content.research.annotation.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.research.citation.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.review.code.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.revision.suggestions.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.rule.deterministic.md +79 -0
- package/corpus/templates/content/docs/product/capabilities/content.schedule.constraints.md +81 -0
- package/corpus/templates/content/docs/product/capabilities/content.security.private-vault.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.share.views.md +140 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.adapters.md +154 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.builder-codec.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.catalog.md +149 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.file-folder.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.local-bridge.md +156 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.local-project.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.page-link.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.row-union.md +69 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.spaces-files.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.sync-policy.md +161 -0
- package/corpus/templates/content/docs/product/capabilities/content.system.dependencies.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.system.my-tasks.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.system.project-status.md +77 -0
- package/corpus/templates/content/docs/product/capabilities/content.system.research-workspace.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.system.task-project.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.template.governance.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.template.graph.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.template.item-body.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.template.update.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.time.types.md +85 -0
- package/corpus/templates/content/docs/product/capabilities/content.version.branching.md +151 -0
- package/corpus/templates/content/docs/product/capabilities/content.version.field-history.md +103 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.canvas.md +94 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.chart.md +91 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.dynamic-create.md +137 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.fast-capture.md +82 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.graph.md +95 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.grouping-aggregation.md +83 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.map.md +77 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.personal-state.md +99 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.pivot.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.query.md +106 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.renderer-conformance.md +77 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.scale.md +77 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.source-query.md +159 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.timeline.md +86 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.tree.md +77 -0
- package/corpus/templates/content/docs/product/capabilities/content.workspace.multi-scope.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.workspace.session-restore.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.workspace.view-instance.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.workspace.working-set.md +77 -0
- package/corpus/templates/content/docs/product/chapters/content.chapter.capture-research.md +20 -0
- package/corpus/templates/content/docs/product/chapters/content.chapter.connected-sources.md +20 -0
- package/corpus/templates/content/docs/product/chapters/content.chapter.consensus.md +19 -0
- package/corpus/templates/content/docs/product/chapters/content.chapter.durable-home.md +21 -0
- package/corpus/templates/content/docs/product/chapters/content.chapter.publishing-portability.md +21 -0
- package/corpus/templates/content/docs/product/chapters/content.chapter.working-systems.md +27 -0
- package/corpus/templates/content/docs/product/encyclopedia.md +559 -0
- package/corpus/templates/content/docs/product/features/content.feature.bring-your-local-work.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.build-living-dashboards.md +34 -0
- package/corpus/templates/content/docs/product/features/content.feature.build-new-surfaces.md +33 -0
- package/corpus/templates/content/docs/product/features/content.feature.capture-into-action.md +34 -0
- package/corpus/templates/content/docs/product/features/content.feature.cite-what-you-found.md +34 -0
- package/corpus/templates/content/docs/product/features/content.feature.collaborate-in-context.md +59 -0
- package/corpus/templates/content/docs/product/features/content.feature.collect-structured-input.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.connect-your-sources.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.data-that-keeps-itself-right.md +45 -0
- package/corpus/templates/content/docs/product/features/content.feature.durable-foundations.md +48 -0
- package/corpus/templates/content/docs/product/features/content.feature.evolve-systems-safely.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.explore-alternatives-safely.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.find-your-place-again.md +40 -0
- package/corpus/templates/content/docs/product/features/content.feature.keep-your-private-vault-private.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.living-references.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.make-the-workspace-yours.md +40 -0
- package/corpus/templates/content/docs/product/features/content.feature.move-without-starting-over.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.plan-work-across-time.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.publish-with-confidence.md +43 -0
- package/corpus/templates/content/docs/product/features/content.feature.put-your-organizations-know-how-to-work.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.read-and-annotate-anything.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.review-changes-in-place.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.run-projects-your-way.md +44 -0
- package/corpus/templates/content/docs/product/features/content.feature.see-your-information-your-way.md +44 -0
- package/corpus/templates/content/docs/product/features/content.feature.share-how-your-organization-works.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.sketch-connections-keep-whats-true.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.take-the-whole-vault-with-you.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.trust-your-connected-sources.md +40 -0
- package/corpus/templates/content/docs/product/features/content.feature.understand-what-your-data-says.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.when-this-happens-that-follows.md +43 -0
- package/corpus/templates/content/docs/product/features/content.feature.work-across-every-workspace.md +37 -0
- package/corpus/templates/content/docs/product/features/content.feature.work-on-content-inside-another-application.md +37 -0
- package/corpus/templates/content/docs/product/roadmap.md +878 -0
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +1 -7
- package/corpus/templates/crm/app/i18n/en-US.ts +4 -0
- package/corpus/templates/crm/app/routes/settings.tsx +33 -8
- package/corpus/templates/crm/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +133 -63
- package/corpus/templates/design/.generated/bridge/embedded-wheel.generated.ts +19 -2
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +51 -14
- package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +41 -26
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +22 -4
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +216 -116
- package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +21 -2
- package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +5 -1
- package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbenchLoader.tsx +10 -2
- package/corpus/templates/design/app/components/design/code-workbench/code-workbench-shell.ts +2 -0
- package/corpus/templates/design/app/components/design/code-workbench/explorer/ExplorerView.tsx +60 -55
- package/corpus/templates/design/app/components/design/design-canvas/content-size-report.ts +88 -2
- package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +3 -2
- package/corpus/templates/design/app/components/design/types.ts +4 -0
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +1 -5
- package/corpus/templates/design/app/pages/design-editor/clipboard-layer-source.ts +28 -0
- package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +117 -0
- package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +3 -1
- package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +120 -74
- package/corpus/templates/design/app/pages/design-editor/pending-structure-verification.ts +11 -0
- package/corpus/templates/design/app/pages/design-editor/react-semantic-handoff.ts +2 -0
- package/corpus/templates/design/app/pages/design-editor/source-location.ts +1 -1
- package/corpus/templates/design/changelog/2026-07-29-copy-rendered-ui-between-live-local-apps-and-design-files-wh.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-design-boards-stay-dark-and-viewport-height-content-keeps-it.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-design-frames-no-longer-grow-continuously-when-their-content.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-the-code-panel-and-apply-design-update-control-now-use-clear.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-the-tools-panel-now-keeps-extension-creation-and-discovery-h.md +6 -0
- package/corpus/templates/design/shared/source-mode.ts +7 -1
- package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +171 -0
- package/corpus/templates/dispatch/app/routes/browser-chat.tsx +4 -0
- package/corpus/templates/dispatch/app/routes/browser-connect.tsx +4 -0
- package/corpus/templates/dispatch/changelog/2026-07-29-browser-chat-can-securely-connect-the-agent-native-chrome-ex.md +6 -0
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +1 -6
- package/corpus/templates/forms/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +1 -5
- package/corpus/templates/macros/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +1 -9
- package/corpus/templates/mail/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +3 -7
- package/corpus/templates/plan/app/pages/PlansPage.tsx +2 -2
- package/corpus/templates/plan/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-ask-plan.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-29-fixed-plan-pages-crashing-when-recent-activity-is-unavailabl.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +60 -4
- package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +20 -0
- package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +30 -1
- package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +3 -1
- package/corpus/templates/slides/AGENTS.md +22 -24
- package/corpus/templates/slides/actions/check-image-gen.ts +8 -2
- package/corpus/templates/slides/actions/create-deck.ts +4 -12
- package/corpus/templates/slides/actions/export-pptx.ts +25 -3
- package/corpus/templates/slides/actions/generate-image-api.ts +4 -2
- package/corpus/templates/slides/actions/generate-slides-ai.ts +1 -1
- package/corpus/templates/slides/actions/get-deck-reference-context.ts +136 -0
- package/corpus/templates/slides/actions/get-workspace-defaults.ts +55 -0
- package/corpus/templates/slides/actions/image-gen-status.ts +10 -1
- package/corpus/templates/slides/actions/import-file.ts +53 -38
- package/corpus/templates/slides/actions/list-decks.ts +2 -0
- package/corpus/templates/slides/actions/patch-deck.ts +2 -0
- package/corpus/templates/slides/actions/set-workspace-defaults.ts +50 -0
- package/corpus/templates/slides/actions/view-screen.ts +6 -0
- package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +1 -1
- package/corpus/templates/slides/app/components/deck/DeckCard.tsx +67 -3
- package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +40 -8
- package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +33 -8
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +6 -2
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +114 -128
- package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +2 -1
- package/corpus/templates/slides/app/components/editor/ImageGenPanel.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +1193 -267
- package/corpus/templates/slides/app/components/editor/SlideStyleInspector.tsx +302 -102
- package/corpus/templates/slides/app/components/editor/rich-text-selection.ts +270 -0
- package/corpus/templates/slides/app/components/editor/slide-escape-arbiter.ts +34 -0
- package/corpus/templates/slides/app/components/editor/slide-object-interactions.ts +368 -0
- package/corpus/templates/slides/app/components/editor/slide-presence.ts +13 -0
- package/corpus/templates/slides/app/components/layout/AgentWorkIndicator.tsx +23 -3
- package/corpus/templates/slides/app/components/layout/Layout.tsx +39 -6
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +1 -6
- package/corpus/templates/slides/app/components/layout/layout-route-policy.ts +23 -0
- package/corpus/templates/slides/app/components/visual-editor/DrawOverlay.tsx +0 -2
- package/corpus/templates/slides/app/context/DeckContext.tsx +2 -0
- package/corpus/templates/slides/app/global.css +60 -0
- package/corpus/templates/slides/app/hooks/use-agent-generating.ts +76 -5
- package/corpus/templates/slides/app/hooks/use-workspace-defaults.ts +26 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +38 -3
- package/corpus/templates/slides/app/lib/generation-state.ts +13 -3
- package/corpus/templates/slides/app/lib/slide-image-replacement.ts +27 -6
- package/corpus/templates/slides/app/lib/text-tool-shortcut.ts +62 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +197 -83
- package/corpus/templates/slides/app/pages/DesignSystems.tsx +95 -0
- package/corpus/templates/slides/app/pages/Index.tsx +348 -53
- package/corpus/templates/slides/changelog/2026-07-28-pick-an-existing-deck-as-a-style-reference-when-creating-a-n.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-ai-editing-status-is-now-quieter-and-only-shows-slide-presen.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-design-systems-and-reference-decks-are-easier-to-choose-toge.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-generated-decks-now-receive-a-concise-relevant-title-before-.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-new-deck-prompts-reuse-empty-chats.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-new-deck-setup-now-stays-in-the-editor-with-closable-style-a.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-selected-words-and-text-runs-can-now-be-styled-independently.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-slide-annotation-tools-are-clearer-and-escape-now-exits-anno.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-slide-editing-now-opens-with-the-app-navigation-collapsed-fo.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-slide-editing-stays-visually-clean-on-hover-without-a-canvas.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-slides-now-appear-one-by-one-while-ai-builds-a-deck-with-ste.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-text-boxes-now-select-move-duplicate-resize-and-style-like-a.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-untitled-decks-now-use-a-clearer-this-deck-label-in-the-agen.md +6 -0
- package/corpus/templates/slides/server/handlers/image-providers/builder.ts +305 -0
- package/corpus/templates/slides/server/handlers/image-providers/index.ts +6 -3
- package/corpus/templates/slides/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/slides/server/workspace-defaults.ts +169 -0
- package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/tasks/app/components/layout/Sidebar.tsx +31 -8
- package/corpus/templates/tasks/app/i18n/en-US.ts +7 -0
- package/corpus/templates/tasks/app/routes/settings.tsx +25 -2
- package/corpus/templates/tasks/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/toolkit/CHANGELOG.md +15 -0
- package/corpus/toolkit/README.md +2 -2
- package/corpus/toolkit/package.json +1 -1
- package/corpus/toolkit/src/app-shell/sidebar-footer-actions.tsx +0 -3
- package/corpus/toolkit/src/chat-history.css +1 -0
- package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +35 -14
- package/corpus/toolkit/src/composer/PromptComposer.tsx +6 -0
- package/corpus/toolkit/src/composer/TiptapComposer.tsx +11 -3
- package/corpus/toolkit/src/design-tweaks/visual-style-controls.tsx +64 -11
- package/dist/action.d.ts +44 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +9 -0
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/builder-engine.js +6 -4
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/production-agent.d.ts +11 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +131 -90
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/tool-search.d.ts +4 -0
- package/dist/agent/tool-search.d.ts.map +1 -1
- package/dist/agent/tool-search.js +30 -0
- package/dist/agent/tool-search.js.map +1 -1
- package/dist/automations/service.d.ts +85 -0
- package/dist/automations/service.d.ts.map +1 -0
- package/dist/automations/service.js +332 -0
- package/dist/automations/service.js.map +1 -0
- package/dist/browser-context/index.d.ts +579 -0
- package/dist/browser-context/index.d.ts.map +1 -0
- package/dist/browser-context/index.js +331 -0
- package/dist/browser-context/index.js.map +1 -0
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +1 -1
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/FeedbackButton.d.ts +6 -2
- package/dist/client/FeedbackButton.d.ts.map +1 -1
- package/dist/client/FeedbackButton.js +20 -3
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +19 -2
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat.d.ts +15 -0
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +13 -3
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/agent-page/AgentJobsTab.d.ts +1 -0
- package/dist/client/agent-page/AgentJobsTab.d.ts.map +1 -1
- package/dist/client/agent-page/AgentJobsTab.js +186 -98
- package/dist/client/agent-page/AgentJobsTab.js.map +1 -1
- package/dist/client/agent-page/AgentTabsPage.js +4 -4
- package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
- package/dist/client/agent-page/use-jobs.d.ts +7 -0
- package/dist/client/agent-page/use-jobs.d.ts.map +1 -1
- package/dist/client/agent-page/use-jobs.js.map +1 -1
- package/dist/client/analytics-session.d.ts.map +1 -1
- package/dist/client/analytics-session.js +13 -0
- package/dist/client/analytics-session.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +29 -6
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/settings/AutomationsSection.d.ts +0 -9
- package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
- package/dist/client/settings/AutomationsSection.js +9 -168
- package/dist/client/settings/AutomationsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts +9 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +19 -11
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/index.d.ts +1 -1
- package/dist/client/settings/index.d.ts.map +1 -1
- package/dist/client/settings/index.js +1 -1
- package/dist/client/settings/index.js.map +1 -1
- package/dist/client/use-agent-chat.d.ts.map +1 -1
- package/dist/client/use-agent-chat.js +20 -3
- package/dist/client/use-agent-chat.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +4 -17
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +2 -1
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/workspace-deploy.d.ts.map +1 -1
- package/dist/deploy/workspace-deploy.js +2 -1
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +82 -6
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/fetch-tool.d.ts.map +1 -1
- package/dist/extensions/fetch-tool.js +11 -0
- package/dist/extensions/fetch-tool.js.map +1 -1
- package/dist/extensions/routes.d.ts +5 -1
- package/dist/extensions/routes.d.ts.map +1 -1
- package/dist/extensions/routes.js +7 -1
- package/dist/extensions/routes.js.map +1 -1
- package/dist/extensions/web-content.d.ts +1 -0
- package/dist/extensions/web-content.d.ts.map +1 -1
- package/dist/extensions/web-content.js +82 -1
- package/dist/extensions/web-content.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/integrations/computer-supervision.d.ts.map +1 -1
- package/dist/integrations/computer-supervision.js +22 -1
- package/dist/integrations/computer-supervision.js.map +1 -1
- package/dist/integrations/index.d.ts +3 -2
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +3 -2
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/integration-durable-dispatch-config.d.ts +2 -0
- package/dist/integrations/integration-durable-dispatch-config.d.ts.map +1 -1
- package/dist/integrations/integration-durable-dispatch-config.js +4 -0
- package/dist/integrations/integration-durable-dispatch-config.js.map +1 -1
- package/dist/integrations/integration-durable-dispatch.d.ts +2 -2
- package/dist/integrations/integration-durable-dispatch.d.ts.map +1 -1
- package/dist/integrations/integration-durable-dispatch.js +2 -2
- package/dist/integrations/integration-durable-dispatch.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +84 -39
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/remote-browser-actions.d.ts +7 -0
- package/dist/integrations/remote-browser-actions.d.ts.map +1 -0
- package/dist/integrations/remote-browser-actions.js +482 -0
- package/dist/integrations/remote-browser-actions.js.map +1 -0
- package/dist/jobs/actions/list-recurring-jobs.d.ts.map +1 -1
- package/dist/jobs/actions/list-recurring-jobs.js +4 -6
- package/dist/jobs/actions/list-recurring-jobs.js.map +1 -1
- package/dist/jobs/actions/manage-recurring-job.js +3 -6
- package/dist/jobs/actions/manage-recurring-job.js.map +1 -1
- package/dist/jobs/background-automation-runner.d.ts +76 -0
- package/dist/jobs/background-automation-runner.d.ts.map +1 -0
- package/dist/jobs/background-automation-runner.js +288 -0
- package/dist/jobs/background-automation-runner.js.map +1 -0
- package/dist/jobs/frontmatter.d.ts +63 -0
- package/dist/jobs/frontmatter.d.ts.map +1 -0
- package/dist/jobs/frontmatter.js +216 -0
- package/dist/jobs/frontmatter.js.map +1 -0
- package/dist/jobs/scheduler.d.ts +6 -60
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +67 -484
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/jobs/tools.d.ts.map +1 -1
- package/dist/jobs/tools.js +24 -3
- package/dist/jobs/tools.js.map +1 -1
- package/dist/localization/default-messages.d.ts +28 -33
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +34 -39
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp-client/index.d.ts.map +1 -1
- package/dist/mcp-client/index.js +4 -0
- package/dist/mcp-client/index.js.map +1 -1
- package/dist/notifications/actions.d.ts.map +1 -1
- package/dist/notifications/actions.js +5 -0
- package/dist/notifications/actions.js.map +1 -1
- package/dist/notifications/routes.d.ts +6 -6
- package/dist/observability/routes.d.ts +3 -3
- package/dist/progress/actions.d.ts.map +1 -1
- package/dist/progress/actions.js +5 -0
- package/dist/progress/actions.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +14 -14
- package/dist/provider-api/actions/github-repo-files.d.ts.map +1 -1
- package/dist/provider-api/actions/github-repo-files.js +9 -0
- package/dist/provider-api/actions/github-repo-files.js.map +1 -1
- package/dist/provider-api/actions/provider-api.d.ts +16 -16
- package/dist/provider-api/actions/provider-api.d.ts.map +1 -1
- package/dist/provider-api/actions/provider-api.js +14 -0
- package/dist/provider-api/actions/provider-api.js.map +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +5 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-chat/browser-team-tools.d.ts.map +1 -1
- package/dist/server/agent-chat/browser-team-tools.js +90 -3
- package/dist/server/agent-chat/browser-team-tools.js.map +1 -1
- package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -1
- package/dist/server/agent-chat/framework-prompts.js +7 -11
- package/dist/server/agent-chat/framework-prompts.js.map +1 -1
- package/dist/server/agent-chat/plugin-options.d.ts +3 -3
- package/dist/server/agent-chat/plugin-options.js.map +1 -1
- package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
- package/dist/server/agent-chat/script-entries.js +43 -1
- package/dist/server/agent-chat/script-entries.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +24 -5
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/attribution.d.ts +6 -0
- package/dist/server/attribution.d.ts.map +1 -1
- package/dist/server/attribution.js +14 -14
- package/dist/server/attribution.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +5 -2
- package/dist/server/auth.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +2 -1
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +6 -3
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +7 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +3 -1
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/csrf.js +25 -0
- package/dist/server/csrf.js.map +1 -1
- package/dist/server/google-oauth.d.ts +3 -0
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +12 -1
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +18 -0
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/prompts/framework-core-compact.js +3 -3
- package/dist/server/prompts/framework-core-compact.js.map +1 -1
- package/dist/server/prompts/framework-core.js +3 -3
- package/dist/server/prompts/framework-core.js.map +1 -1
- package/dist/server/prompts/shared-rules.js +3 -3
- package/dist/server/prompts/shared-rules.js.map +1 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/settings/index.d.ts +1 -1
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +1 -1
- package/dist/settings/index.js.map +1 -1
- package/dist/shared/analytics-anonymous-id.d.ts +12 -0
- package/dist/shared/analytics-anonymous-id.d.ts.map +1 -0
- package/dist/shared/analytics-anonymous-id.js +29 -0
- package/dist/shared/analytics-anonymous-id.js.map +1 -0
- package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/dist/templates/chat/app/components/layout/Sidebar.tsx +1 -5
- package/dist/templates/chat/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/dist/templates/default/app/i18n/ar-SA.ts +26 -0
- package/dist/templates/default/app/i18n/de-DE.ts +28 -0
- package/dist/templates/default/app/i18n/en-US.ts +27 -0
- package/dist/templates/default/app/i18n/es-ES.ts +28 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +28 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +25 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +27 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +27 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +27 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +24 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +24 -0
- package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/agent-page/SKILL.md +10 -7
- package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +53 -8
- package/dist/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +131 -0
- package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +13 -4
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +23 -15
- package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +33 -18
- package/dist/tracking/providers.d.ts.map +1 -1
- package/dist/tracking/providers.js +1 -0
- package/dist/tracking/providers.js.map +1 -1
- package/dist/tracking/registry.d.ts +1 -0
- package/dist/tracking/registry.d.ts.map +1 -1
- package/dist/tracking/registry.js +1 -0
- package/dist/tracking/registry.js.map +1 -1
- package/dist/tracking/types.d.ts +1 -0
- package/dist/tracking/types.d.ts.map +1 -1
- package/dist/tracking/types.js.map +1 -1
- package/dist/triggers/actions/list-automations.d.ts +7 -0
- package/dist/triggers/actions/list-automations.d.ts.map +1 -1
- package/dist/triggers/actions/list-automations.js +29 -41
- package/dist/triggers/actions/list-automations.js.map +1 -1
- package/dist/triggers/actions/manage-automation.js +15 -33
- package/dist/triggers/actions/manage-automation.js.map +1 -1
- package/dist/triggers/actions.d.ts.map +1 -1
- package/dist/triggers/actions.js +184 -95
- package/dist/triggers/actions.js.map +1 -1
- package/dist/triggers/dispatcher.d.ts +3 -9
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +134 -304
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/triggers/routes.d.ts.map +1 -1
- package/dist/triggers/routes.js +76 -17
- package/dist/triggers/routes.js.map +1 -1
- package/dist/triggers/types.d.ts +4 -23
- package/dist/triggers/types.d.ts.map +1 -1
- package/dist/triggers/types.js.map +1 -1
- package/docs/content/agent-surfaces.mdx +4 -4
- package/docs/content/automations.mdx +61 -12
- package/docs/content/deployment.mdx +11 -4
- package/docs/content/extensions.mdx +39 -33
- package/docs/content/recurring-jobs.mdx +41 -19
- package/docs/content/template-dispatch-operations.mdx +19 -7
- package/package.json +4 -2
- package/src/action.ts +55 -0
- package/src/agent/engine/builder-engine.ts +8 -4
- package/src/agent/production-agent.ts +175 -100
- package/src/agent/tool-search.ts +36 -0
- package/src/automations/service.ts +506 -0
- package/src/browser-context/index.ts +392 -0
- package/src/client/AgentPanel.tsx +2 -1
- package/src/client/FeedbackButton.tsx +37 -4
- package/src/client/MultiTabAssistantChat.tsx +21 -0
- package/src/client/agent-chat.ts +31 -3
- package/src/client/agent-page/AgentJobsTab.tsx +438 -310
- package/src/client/agent-page/AgentTabsPage.tsx +4 -4
- package/src/client/agent-page/use-jobs.ts +7 -0
- package/src/client/analytics-session.ts +13 -0
- package/src/client/extensions/ExtensionViewer.tsx +67 -0
- package/src/client/settings/AutomationsSection.tsx +27 -499
- package/src/client/settings/SettingsPanel.tsx +32 -11
- package/src/client/settings/index.ts +2 -0
- package/src/client/use-agent-chat.ts +35 -3
- package/src/client/use-chat-threads.ts +8 -25
- package/src/deploy/build.ts +2 -0
- package/src/deploy/workspace-deploy.ts +2 -0
- package/src/extensions/actions.ts +115 -3
- package/src/extensions/fetch-tool.ts +11 -0
- package/src/extensions/routes.ts +16 -1
- package/src/extensions/web-content.ts +96 -1
- package/src/integrations/computer-supervision.ts +33 -1
- package/src/integrations/index.ts +6 -0
- package/src/integrations/integration-durable-dispatch-config.ts +10 -0
- package/src/integrations/integration-durable-dispatch.ts +4 -0
- package/src/integrations/plugin.ts +94 -41
- package/src/integrations/remote-browser-actions.ts +621 -0
- package/src/jobs/actions/list-recurring-jobs.ts +5 -7
- package/src/jobs/actions/manage-recurring-job.ts +3 -7
- package/src/jobs/background-automation-runner.ts +437 -0
- package/src/jobs/frontmatter.ts +308 -0
- package/src/jobs/scheduler.ts +89 -598
- package/src/jobs/tools.ts +22 -3
- package/src/localization/default-messages.ts +45 -45
- package/src/mcp-client/index.ts +6 -0
- package/src/notifications/actions.ts +5 -0
- package/src/progress/actions.ts +5 -0
- package/src/provider-api/actions/github-repo-files.ts +11 -0
- package/src/provider-api/actions/provider-api.ts +13 -0
- package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +4 -4
- package/src/server/action-discovery.ts +7 -0
- package/src/server/agent-chat/browser-team-tools.ts +126 -3
- package/src/server/agent-chat/framework-prompts.ts +7 -11
- package/src/server/agent-chat/plugin-options.ts +3 -3
- package/src/server/agent-chat/script-entries.ts +52 -1
- package/src/server/agent-chat-plugin.ts +25 -5
- package/src/server/attribution.ts +22 -0
- package/src/server/auth.ts +20 -6
- package/src/server/better-auth-instance.ts +10 -2
- package/src/server/core-routes-plugin.ts +10 -1
- package/src/server/csrf.ts +25 -0
- package/src/server/google-oauth.ts +21 -1
- package/src/server/onboarding-html.ts +18 -0
- package/src/server/prompts/framework-core-compact.ts +3 -3
- package/src/server/prompts/framework-core.ts +3 -3
- package/src/server/prompts/shared-rules.ts +3 -3
- package/src/settings/index.ts +1 -0
- package/src/shared/analytics-anonymous-id.ts +35 -0
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/src/templates/chat/app/components/layout/Sidebar.tsx +1 -5
- package/src/templates/chat/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/src/templates/default/app/i18n/ar-SA.ts +26 -0
- package/src/templates/default/app/i18n/de-DE.ts +28 -0
- package/src/templates/default/app/i18n/en-US.ts +27 -0
- package/src/templates/default/app/i18n/es-ES.ts +28 -0
- package/src/templates/default/app/i18n/fr-FR.ts +28 -0
- package/src/templates/default/app/i18n/hi-IN.ts +25 -0
- package/src/templates/default/app/i18n/ja-JP.ts +27 -0
- package/src/templates/default/app/i18n/ko-KR.ts +27 -0
- package/src/templates/default/app/i18n/pt-BR.ts +27 -0
- package/src/templates/default/app/i18n/zh-CN.ts +24 -0
- package/src/templates/default/app/i18n/zh-TW.ts +24 -0
- package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +10 -7
- package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +53 -8
- package/src/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +131 -0
- package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +13 -4
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +23 -15
- package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +33 -18
- package/src/tracking/providers.ts +1 -0
- package/src/tracking/registry.ts +2 -1
- package/src/tracking/types.ts +1 -0
- package/src/triggers/actions/list-automations.ts +43 -44
- package/src/triggers/actions/manage-automation.ts +17 -48
- package/src/triggers/actions.ts +218 -127
- package/src/triggers/dispatcher.ts +181 -367
- package/src/triggers/routes.ts +84 -27
- package/src/triggers/types.ts +9 -23
|
@@ -5,10 +5,18 @@ import {
|
|
|
5
5
|
type H3Event,
|
|
6
6
|
} from "h3";
|
|
7
7
|
|
|
8
|
+
import { canUpdateAutomationResource } from "../automations/service.js";
|
|
8
9
|
import { getDbExec } from "../db/client.js";
|
|
9
10
|
import { nextOccurrence, describeCron, isValidCron } from "../jobs/cron.js";
|
|
11
|
+
import {
|
|
12
|
+
buildJobResourceContent,
|
|
13
|
+
parseJobResource,
|
|
14
|
+
type JobFrontmatter,
|
|
15
|
+
} from "../jobs/frontmatter.js";
|
|
10
16
|
import { getOrgContext } from "../org/context.js";
|
|
11
17
|
import {
|
|
18
|
+
organizationIdFromResourceOwner,
|
|
19
|
+
organizationResourceOwner,
|
|
12
20
|
resourceGetByPath,
|
|
13
21
|
resourceListAllOwners,
|
|
14
22
|
resourcePut,
|
|
@@ -17,11 +25,7 @@ import {
|
|
|
17
25
|
} from "../resources/store.js";
|
|
18
26
|
import { getSession } from "../server/auth.js";
|
|
19
27
|
import { readBody } from "../server/h3-helpers.js";
|
|
20
|
-
import {
|
|
21
|
-
buildTriggerContent,
|
|
22
|
-
parseTriggerFrontmatter,
|
|
23
|
-
refreshEventSubscriptions,
|
|
24
|
-
} from "./dispatcher.js";
|
|
28
|
+
import { refreshEventSubscriptions } from "./dispatcher.js";
|
|
25
29
|
import type { TriggerFrontmatter } from "./types.js";
|
|
26
30
|
|
|
27
31
|
export interface AutomationRouteItem {
|
|
@@ -57,6 +61,14 @@ function automationName(path: string): string {
|
|
|
57
61
|
return path.replace(/^jobs\//, "").replace(/\.md$/, "");
|
|
58
62
|
}
|
|
59
63
|
|
|
64
|
+
function asTriggerFrontmatter(meta: JobFrontmatter): TriggerFrontmatter {
|
|
65
|
+
return {
|
|
66
|
+
...meta,
|
|
67
|
+
triggerType: meta.triggerType ?? "schedule",
|
|
68
|
+
mode: meta.mode ?? "agentic",
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
60
72
|
function normalizeAutomationPath(input: SetAutomationEnabledInput): string {
|
|
61
73
|
const rawPath = input.path ?? (input.name ? `jobs/${input.name}.md` : "");
|
|
62
74
|
const path = rawPath.replace(/^\/+/, "");
|
|
@@ -105,12 +117,33 @@ function nextRunForMeta(meta: TriggerFrontmatter): string | undefined {
|
|
|
105
117
|
async function currentUserCanUpdateAutomation(
|
|
106
118
|
event: H3Event,
|
|
107
119
|
userEmail: string,
|
|
108
|
-
|
|
120
|
+
resource: Resource,
|
|
109
121
|
meta: TriggerFrontmatter,
|
|
110
122
|
): Promise<boolean> {
|
|
123
|
+
const resourceOwner = resource.owner;
|
|
111
124
|
if (resourceOwner === userEmail) return true;
|
|
125
|
+
const resourceOrgId = organizationIdFromResourceOwner(resourceOwner);
|
|
126
|
+
if (resourceOrgId) {
|
|
127
|
+
try {
|
|
128
|
+
const org = await getOrgContext(event);
|
|
129
|
+
if (org.orgId !== resourceOrgId) return false;
|
|
130
|
+
return await canUpdateAutomationResource(
|
|
131
|
+
{ userEmail, orgId: resourceOrgId },
|
|
132
|
+
resource,
|
|
133
|
+
);
|
|
134
|
+
} catch {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
112
138
|
if (resourceOwner !== SHARED_OWNER) return false;
|
|
113
139
|
|
|
140
|
+
if (meta.orgId) {
|
|
141
|
+
const activeOrgId = await getOrgContext(event)
|
|
142
|
+
.then((context) => context.orgId)
|
|
143
|
+
.catch(() => null);
|
|
144
|
+
if (activeOrgId !== meta.orgId) return false;
|
|
145
|
+
}
|
|
146
|
+
|
|
114
147
|
if (
|
|
115
148
|
meta.createdBy &&
|
|
116
149
|
meta.createdBy.toLowerCase() === userEmail.toLowerCase()
|
|
@@ -145,7 +178,8 @@ async function resourceToAutomationItem(
|
|
|
145
178
|
userEmail: string,
|
|
146
179
|
resource: Resource,
|
|
147
180
|
): Promise<AutomationRouteItem> {
|
|
148
|
-
const
|
|
181
|
+
const parsed = parseJobResource(resource.content);
|
|
182
|
+
const meta = asTriggerFrontmatter(parsed.meta);
|
|
149
183
|
return {
|
|
150
184
|
id: resource.id,
|
|
151
185
|
name: automationName(resource.path),
|
|
@@ -154,7 +188,7 @@ async function resourceToAutomationItem(
|
|
|
154
188
|
canUpdate: await currentUserCanUpdateAutomation(
|
|
155
189
|
event,
|
|
156
190
|
userEmail,
|
|
157
|
-
resource
|
|
191
|
+
resource,
|
|
158
192
|
meta,
|
|
159
193
|
),
|
|
160
194
|
triggerType: meta.triggerType,
|
|
@@ -170,7 +204,7 @@ async function resourceToAutomationItem(
|
|
|
170
204
|
lastError: meta.lastError,
|
|
171
205
|
nextRun: nextRunForMeta(meta),
|
|
172
206
|
createdBy: meta.createdBy,
|
|
173
|
-
body,
|
|
207
|
+
body: parsed.body,
|
|
174
208
|
};
|
|
175
209
|
}
|
|
176
210
|
|
|
@@ -179,12 +213,27 @@ export async function listAutomationsForOwner(
|
|
|
179
213
|
userEmail: string,
|
|
180
214
|
): Promise<AutomationRouteItem[]> {
|
|
181
215
|
const allResources = await resourceListAllOwners("jobs/");
|
|
182
|
-
const
|
|
183
|
-
(
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
216
|
+
const activeOrgId = await getOrgContext(event)
|
|
217
|
+
.then((context) => context.orgId)
|
|
218
|
+
.catch(() => null);
|
|
219
|
+
const activeOrgOwner = activeOrgId
|
|
220
|
+
? organizationResourceOwner(activeOrgId)
|
|
221
|
+
: null;
|
|
222
|
+
const resources = allResources.filter((resource) => {
|
|
223
|
+
if (!resource.path.endsWith(".md") || resource.path.endsWith(".keep")) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
if (
|
|
227
|
+
resource.owner !== userEmail &&
|
|
228
|
+
resource.owner !== SHARED_OWNER &&
|
|
229
|
+
resource.owner !== activeOrgOwner
|
|
230
|
+
) {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
if (resource.owner !== SHARED_OWNER) return true;
|
|
234
|
+
const { meta } = parseJobResource(resource.content);
|
|
235
|
+
return !meta.orgId || meta.orgId === activeOrgId;
|
|
236
|
+
});
|
|
188
237
|
return Promise.all(
|
|
189
238
|
resources.map((resource) =>
|
|
190
239
|
resourceToAutomationItem(event, userEmail, resource),
|
|
@@ -204,18 +253,29 @@ export async function setAutomationEnabledForOwner(
|
|
|
204
253
|
}
|
|
205
254
|
|
|
206
255
|
const path = normalizeAutomationPath(input);
|
|
256
|
+
const activeOrgId = await getOrgContext(event)
|
|
257
|
+
.then((context) => context.orgId)
|
|
258
|
+
.catch(() => null);
|
|
259
|
+
const activeOrgOwner = activeOrgId
|
|
260
|
+
? organizationResourceOwner(activeOrgId)
|
|
261
|
+
: null;
|
|
207
262
|
const requestedOwner =
|
|
208
|
-
input.owner === SHARED_OWNER
|
|
263
|
+
input.owner === SHARED_OWNER
|
|
264
|
+
? SHARED_OWNER
|
|
265
|
+
: input.owner === activeOrgOwner
|
|
266
|
+
? activeOrgOwner
|
|
267
|
+
: userEmail;
|
|
209
268
|
const resource = await resourceGetByPath(requestedOwner, path);
|
|
210
269
|
if (!resource) {
|
|
211
270
|
throw Object.assign(new Error("Automation not found"), { statusCode: 404 });
|
|
212
271
|
}
|
|
213
272
|
|
|
214
|
-
const
|
|
273
|
+
const parsed = parseJobResource(resource.content);
|
|
274
|
+
const meta = asTriggerFrontmatter(parsed.meta);
|
|
215
275
|
const allowed = await currentUserCanUpdateAutomation(
|
|
216
276
|
event,
|
|
217
277
|
userEmail,
|
|
218
|
-
resource
|
|
278
|
+
resource,
|
|
219
279
|
meta,
|
|
220
280
|
);
|
|
221
281
|
if (!allowed) {
|
|
@@ -225,26 +285,23 @@ export async function setAutomationEnabledForOwner(
|
|
|
225
285
|
);
|
|
226
286
|
}
|
|
227
287
|
|
|
228
|
-
meta.enabled = input.enabled;
|
|
288
|
+
parsed.meta.enabled = input.enabled;
|
|
229
289
|
if (
|
|
230
|
-
meta.enabled &&
|
|
290
|
+
parsed.meta.enabled &&
|
|
231
291
|
meta.triggerType !== "event" &&
|
|
232
292
|
meta.schedule &&
|
|
233
293
|
isValidCron(meta.schedule)
|
|
234
294
|
) {
|
|
235
|
-
meta.nextRun = nextOccurrence(meta.schedule).toISOString();
|
|
295
|
+
parsed.meta.nextRun = nextOccurrence(meta.schedule).toISOString();
|
|
236
296
|
}
|
|
237
297
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
resource.path,
|
|
241
|
-
buildTriggerContent(meta, body),
|
|
242
|
-
);
|
|
298
|
+
const updatedContent = buildJobResourceContent(parsed.meta, parsed.body);
|
|
299
|
+
await resourcePut(resource.owner, resource.path, updatedContent);
|
|
243
300
|
await refreshEventSubscriptions();
|
|
244
301
|
|
|
245
302
|
return resourceToAutomationItem(event, userEmail, {
|
|
246
303
|
...resource,
|
|
247
|
-
content:
|
|
304
|
+
content: updatedContent,
|
|
248
305
|
});
|
|
249
306
|
}
|
|
250
307
|
|
|
@@ -6,15 +6,15 @@
|
|
|
6
6
|
* cron scheduler and dispatched by the event bus instead.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
import type {
|
|
10
|
+
JobExecutionMode,
|
|
11
|
+
JobFrontmatter,
|
|
12
|
+
JobTriggerType,
|
|
13
|
+
} from "../jobs/frontmatter.js";
|
|
14
|
+
|
|
15
|
+
export interface TriggerFrontmatter extends JobFrontmatter {
|
|
12
16
|
/** "schedule" = cron-based (legacy jobs). "event" = fires on bus event. */
|
|
13
|
-
triggerType:
|
|
14
|
-
/** For event triggers: the event name to subscribe to. */
|
|
15
|
-
event?: string;
|
|
16
|
-
/** Natural-language condition evaluated by Haiku before dispatch. */
|
|
17
|
-
condition?: string;
|
|
17
|
+
triggerType: JobTriggerType;
|
|
18
18
|
/**
|
|
19
19
|
* "agentic" = full runAgentLoop; the only mode `manage-automations` will
|
|
20
20
|
* define/update going forward. "deterministic" was removed from the
|
|
@@ -22,21 +22,7 @@ export interface TriggerFrontmatter {
|
|
|
22
22
|
* before the removal may still carry it, and the dispatcher's
|
|
23
23
|
* warn-and-skip branch keeps them inert by design — do not make them fire.
|
|
24
24
|
*/
|
|
25
|
-
mode:
|
|
26
|
-
/** Domain tag for filtering in per-template UIs. */
|
|
27
|
-
domain?: string;
|
|
28
|
-
/**
|
|
29
|
-
* Optional application-owned policy id carried into actions by the trusted
|
|
30
|
-
* trigger dispatcher. It is not model-supplied action input.
|
|
31
|
-
*/
|
|
32
|
-
delegatedPolicyId?: string;
|
|
33
|
-
createdBy?: string;
|
|
34
|
-
orgId?: string;
|
|
35
|
-
runAs?: "creator" | "shared";
|
|
36
|
-
lastRun?: string;
|
|
37
|
-
lastStatus?: "success" | "error" | "running" | "skipped";
|
|
38
|
-
lastError?: string;
|
|
39
|
-
nextRun?: string;
|
|
25
|
+
mode: JobExecutionMode;
|
|
40
26
|
}
|
|
41
27
|
|
|
42
28
|
export interface TriggerDispatchContext {
|
|
@@ -117,6 +117,11 @@ in the moment of agent use.
|
|
|
117
117
|
missing-secret states, OAuth grants, and provider connection health.
|
|
118
118
|
- **Agent UX kit**: sidebar, composer, staged context, mentions, voice, human
|
|
119
119
|
approval, generative UI, progress, and screen-state exposure.
|
|
120
|
+
- **Custom block kit**: optional extension creation, viewer chrome, slots, and
|
|
121
|
+
promotion affordances. Apps must opt in; Core keeps the sandbox, SQL storage,
|
|
122
|
+
access checks, and compatibility routes, while Toolkit owns reusable adoption
|
|
123
|
+
UI. Analytics may expose this as one-off **Custom Blocks**; durable behavior
|
|
124
|
+
should be promoted to app code.
|
|
120
125
|
- **Chat history kit**: presentational chat lists and recent-chat rails belong
|
|
121
126
|
in Toolkit; Core keeps thread persistence, agent execution, transport, and
|
|
122
127
|
page-to-sidebar handoff. Use Toolkit's `ChatHistoryRail` for the standard
|
|
@@ -28,12 +28,13 @@ import {
|
|
|
28
28
|
async function syncToCollab(
|
|
29
29
|
dashboardId: string,
|
|
30
30
|
config: Record<string, unknown>,
|
|
31
|
+
requestSource?: string,
|
|
31
32
|
): Promise<void> {
|
|
32
33
|
const docId = `dash-${dashboardId}`;
|
|
33
34
|
const configStr = JSON.stringify(config);
|
|
34
35
|
try {
|
|
35
36
|
if (await hasCollabState(docId)) {
|
|
36
|
-
await applyText(docId, configStr, "content",
|
|
37
|
+
await applyText(docId, configStr, "content", requestSource);
|
|
37
38
|
} else {
|
|
38
39
|
await seedFromText(docId, configStr);
|
|
39
40
|
}
|
|
@@ -137,7 +138,7 @@ export default defineAction({
|
|
|
137
138
|
height: 760,
|
|
138
139
|
}),
|
|
139
140
|
},
|
|
140
|
-
run: async (args) => {
|
|
141
|
+
run: async (args, actionContext) => {
|
|
141
142
|
const email = getRequestUserEmail();
|
|
142
143
|
if (!email) throw new Error("no authenticated user");
|
|
143
144
|
const ctx = { email, orgId: getRequestOrgId() || null };
|
|
@@ -242,7 +243,11 @@ export default defineAction({
|
|
|
242
243
|
return { kind: existing.kind, body: computed.mergedConfig };
|
|
243
244
|
},
|
|
244
245
|
);
|
|
245
|
-
await syncToCollab(
|
|
246
|
+
await syncToCollab(
|
|
247
|
+
targetId,
|
|
248
|
+
saved.config as Record<string, unknown>,
|
|
249
|
+
actionContext?.caller === "frontend" ? undefined : "agent",
|
|
250
|
+
);
|
|
246
251
|
savedTitle = saved.title;
|
|
247
252
|
}
|
|
248
253
|
|
|
@@ -315,7 +320,11 @@ export default defineAction({
|
|
|
315
320
|
dashboardConfig,
|
|
316
321
|
ctx,
|
|
317
322
|
);
|
|
318
|
-
await syncToCollab(
|
|
323
|
+
await syncToCollab(
|
|
324
|
+
dashboardId,
|
|
325
|
+
dashboardConfig,
|
|
326
|
+
actionContext?.caller === "frontend" ? undefined : "agent",
|
|
327
|
+
);
|
|
319
328
|
|
|
320
329
|
return {
|
|
321
330
|
templateId: entry.id,
|
|
@@ -22,12 +22,13 @@ function resolveScope() {
|
|
|
22
22
|
async function syncToCollab(
|
|
23
23
|
dashboardId: string,
|
|
24
24
|
config: Record<string, unknown>,
|
|
25
|
+
requestSource?: string,
|
|
25
26
|
): Promise<void> {
|
|
26
27
|
const docId = `dash-${dashboardId}`;
|
|
27
28
|
const configStr = JSON.stringify(config);
|
|
28
29
|
try {
|
|
29
30
|
if (await hasCollabState(docId)) {
|
|
30
|
-
await applyText(docId, configStr, "content",
|
|
31
|
+
await applyText(docId, configStr, "content", requestSource);
|
|
31
32
|
} else {
|
|
32
33
|
await seedFromText(docId, configStr);
|
|
33
34
|
}
|
|
@@ -42,7 +43,7 @@ export default defineAction({
|
|
|
42
43
|
id: z.string().describe("The dashboard ID to rename"),
|
|
43
44
|
name: z.string().describe("The new dashboard name"),
|
|
44
45
|
}),
|
|
45
|
-
run: async (args) => {
|
|
46
|
+
run: async (args, actionContext) => {
|
|
46
47
|
const name = args.name.trim();
|
|
47
48
|
if (!name) throw new Error("name is required");
|
|
48
49
|
|
|
@@ -53,7 +54,11 @@ export default defineAction({
|
|
|
53
54
|
const updated = await upsertDashboardWithRetry(args.id, ctx, (existing) => {
|
|
54
55
|
return { kind: existing.kind, body: { ...existing.config, name } };
|
|
55
56
|
});
|
|
56
|
-
await syncToCollab(
|
|
57
|
+
await syncToCollab(
|
|
58
|
+
args.id,
|
|
59
|
+
updated.config,
|
|
60
|
+
actionContext?.caller === "frontend" ? undefined : "agent",
|
|
61
|
+
);
|
|
57
62
|
return { id: updated.id, name: updated.title };
|
|
58
63
|
},
|
|
59
64
|
});
|
|
@@ -22,13 +22,14 @@ function resolveScope() {
|
|
|
22
22
|
async function syncToCollab(
|
|
23
23
|
dashboardId: string,
|
|
24
24
|
config: Record<string, unknown>,
|
|
25
|
+
requestSource?: string,
|
|
25
26
|
): Promise<void> {
|
|
26
27
|
const docId = `dash-${dashboardId}`;
|
|
27
28
|
const configStr = JSON.stringify(config);
|
|
28
29
|
try {
|
|
29
30
|
const exists = await hasCollabState(docId);
|
|
30
31
|
if (exists) {
|
|
31
|
-
await applyText(docId, configStr, "content",
|
|
32
|
+
await applyText(docId, configStr, "content", requestSource);
|
|
32
33
|
} else {
|
|
33
34
|
await seedFromText(docId, configStr);
|
|
34
35
|
}
|
|
@@ -49,7 +50,7 @@ export default defineAction({
|
|
|
49
50
|
.describe("The dashboard updatedAt value observed before this restore"),
|
|
50
51
|
}),
|
|
51
52
|
http: { method: "POST" },
|
|
52
|
-
run: async (args) => {
|
|
53
|
+
run: async (args, actionContext) => {
|
|
53
54
|
const restored = await restoreDashboardRevision(
|
|
54
55
|
args.dashboardId,
|
|
55
56
|
args.revisionId,
|
|
@@ -62,7 +63,11 @@ export default defineAction({
|
|
|
62
63
|
);
|
|
63
64
|
}
|
|
64
65
|
const { dashboard, snapshotRevisionId } = restored;
|
|
65
|
-
await syncToCollab(
|
|
66
|
+
await syncToCollab(
|
|
67
|
+
dashboard.id,
|
|
68
|
+
dashboard.config,
|
|
69
|
+
actionContext?.caller === "frontend" ? undefined : "agent",
|
|
70
|
+
);
|
|
66
71
|
return {
|
|
67
72
|
id: dashboard.id,
|
|
68
73
|
kind: dashboard.kind,
|
|
@@ -544,13 +544,14 @@ function opCanChangePanelSql(op: JsonOp): boolean {
|
|
|
544
544
|
async function syncToCollab(
|
|
545
545
|
dashboardId: string,
|
|
546
546
|
config: Record<string, unknown>,
|
|
547
|
+
requestSource?: string,
|
|
547
548
|
): Promise<void> {
|
|
548
549
|
const docId = `dash-${dashboardId}`;
|
|
549
550
|
const configStr = JSON.stringify(config);
|
|
550
551
|
try {
|
|
551
552
|
const exists = await hasCollabState(docId);
|
|
552
553
|
if (exists) {
|
|
553
|
-
await applyText(docId, configStr, "content",
|
|
554
|
+
await applyText(docId, configStr, "content", requestSource);
|
|
554
555
|
} else {
|
|
555
556
|
await seedFromText(docId, configStr);
|
|
556
557
|
}
|
|
@@ -559,6 +560,10 @@ async function syncToCollab(
|
|
|
559
560
|
}
|
|
560
561
|
}
|
|
561
562
|
|
|
563
|
+
function isAgentCaller(caller: string | undefined): boolean {
|
|
564
|
+
return caller === "tool" || caller === "mcp" || caller === "a2a";
|
|
565
|
+
}
|
|
566
|
+
|
|
562
567
|
// Reads + writes now go through the SQL-backed dashboards store, which
|
|
563
568
|
// lazy-migrates legacy settings keys on first access. See
|
|
564
569
|
// `server/lib/dashboards-store.ts`.
|
|
@@ -614,7 +619,7 @@ export default defineAction({
|
|
|
614
619
|
height: 680,
|
|
615
620
|
}),
|
|
616
621
|
},
|
|
617
|
-
run: async (args) => {
|
|
622
|
+
run: async (args, actionContext) => {
|
|
618
623
|
const dashboardId = resolveDashboardId(args);
|
|
619
624
|
const modeCount = [args.ops, args.panelOrder, args.config].filter(
|
|
620
625
|
(value) => value !== undefined,
|
|
@@ -638,7 +643,11 @@ export default defineAction({
|
|
|
638
643
|
const sqlError = await validatePanelSql(args.config);
|
|
639
644
|
if (sqlError) throw new Error(sqlError);
|
|
640
645
|
await upsertDashboard(dashboardId, "sql", args.config, ctx);
|
|
641
|
-
await syncToCollab(
|
|
646
|
+
await syncToCollab(
|
|
647
|
+
dashboardId,
|
|
648
|
+
args.config,
|
|
649
|
+
isAgentCaller(actionContext?.caller) ? "agent" : undefined,
|
|
650
|
+
);
|
|
642
651
|
const panelCount = countPanels(args.config);
|
|
643
652
|
return dashboardResult(
|
|
644
653
|
dashboardId,
|
|
@@ -667,7 +676,11 @@ export default defineAction({
|
|
|
667
676
|
},
|
|
668
677
|
);
|
|
669
678
|
const root = saved.config as Record<string, unknown>;
|
|
670
|
-
await syncToCollab(
|
|
679
|
+
await syncToCollab(
|
|
680
|
+
dashboardId,
|
|
681
|
+
root,
|
|
682
|
+
isAgentCaller(actionContext?.caller) ? "agent" : undefined,
|
|
683
|
+
);
|
|
671
684
|
return dashboardResult(
|
|
672
685
|
dashboardId,
|
|
673
686
|
root,
|
|
@@ -709,7 +722,11 @@ export default defineAction({
|
|
|
709
722
|
},
|
|
710
723
|
);
|
|
711
724
|
const root = saved.config as Record<string, unknown>;
|
|
712
|
-
await syncToCollab(
|
|
725
|
+
await syncToCollab(
|
|
726
|
+
dashboardId,
|
|
727
|
+
root,
|
|
728
|
+
isAgentCaller(actionContext?.caller) ? "agent" : undefined,
|
|
729
|
+
);
|
|
713
730
|
|
|
714
731
|
const panelCount = countPanels(root);
|
|
715
732
|
return dashboardResult(
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import type { ComponentProps } from "react";
|
|
2
2
|
|
|
3
3
|
import { Skeleton } from "@/components/ui/skeleton";
|
|
4
|
+
import { cn } from "@/lib/utils";
|
|
4
5
|
|
|
5
6
|
export function DashboardPanelSkeleton({
|
|
6
7
|
className,
|
|
7
8
|
...props
|
|
8
9
|
}: ComponentProps<typeof Skeleton>) {
|
|
9
|
-
return
|
|
10
|
+
return (
|
|
11
|
+
<Skeleton
|
|
12
|
+
{...props}
|
|
13
|
+
className={cn("analytics-dashboard-panel-skeleton", className)}
|
|
14
|
+
/>
|
|
15
|
+
);
|
|
10
16
|
}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { agentNativePath } from "@agent-native/core/client/api-path";
|
|
2
1
|
import { ChangelogDialog } from "@agent-native/core/client/changelog";
|
|
3
|
-
import { extensionPath } from "@agent-native/core/client/extensions";
|
|
4
2
|
import { callAction, useChangeVersions } from "@agent-native/core/client/hooks";
|
|
5
3
|
import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
|
|
6
4
|
import { useOrgRole } from "@agent-native/core/client/org";
|
|
@@ -75,12 +73,6 @@ interface ExplorerDashboard {
|
|
|
75
73
|
hiddenAt?: string | null;
|
|
76
74
|
}
|
|
77
75
|
|
|
78
|
-
interface ExtensionSearchItem {
|
|
79
|
-
id: string;
|
|
80
|
-
name: string;
|
|
81
|
-
description?: string;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
76
|
const defaultTools = [
|
|
85
77
|
{
|
|
86
78
|
id: "agents",
|
|
@@ -258,32 +250,6 @@ async function fetchSqlDashboards(
|
|
|
258
250
|
);
|
|
259
251
|
}
|
|
260
252
|
|
|
261
|
-
async function fetchExtensions(): Promise<ExtensionSearchItem[]> {
|
|
262
|
-
const res = await fetch(agentNativePath("/_agent-native/extensions"));
|
|
263
|
-
if (!res.ok) throw new Error(`Failed to load extensions (${res.status})`);
|
|
264
|
-
const data = await res.json();
|
|
265
|
-
return uniqueCommandItems(
|
|
266
|
-
(Array.isArray(data) ? data : [])
|
|
267
|
-
.filter((extension: any) => {
|
|
268
|
-
return (
|
|
269
|
-
extension &&
|
|
270
|
-
typeof extension.id === "string" &&
|
|
271
|
-
extension.id.length > 0 &&
|
|
272
|
-
typeof extension.name === "string" &&
|
|
273
|
-
extension.name.trim().length > 0
|
|
274
|
-
);
|
|
275
|
-
})
|
|
276
|
-
.map((extension: any) => ({
|
|
277
|
-
id: extension.id,
|
|
278
|
-
name: extension.name,
|
|
279
|
-
description:
|
|
280
|
-
typeof extension.description === "string"
|
|
281
|
-
? extension.description
|
|
282
|
-
: undefined,
|
|
283
|
-
})),
|
|
284
|
-
);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
253
|
function persistThemePreference(theme: "light" | "dark") {
|
|
288
254
|
callAction("set-theme", { theme }).catch(() => {});
|
|
289
255
|
}
|
|
@@ -334,33 +300,21 @@ export function CommandPalette() {
|
|
|
334
300
|
placeholderData: (prev) => prev,
|
|
335
301
|
});
|
|
336
302
|
|
|
337
|
-
const extensionsQuery = useQuery<ExtensionSearchItem[]>({
|
|
338
|
-
queryKey: ["extensions"],
|
|
339
|
-
queryFn: fetchExtensions,
|
|
340
|
-
staleTime: 30_000,
|
|
341
|
-
enabled: open,
|
|
342
|
-
placeholderData: (prev) => prev,
|
|
343
|
-
});
|
|
344
|
-
|
|
345
303
|
const savedCharts = savedChartsQuery.data ?? [];
|
|
346
304
|
const explorerDashboards = explorerDashboardsQuery.data ?? [];
|
|
347
305
|
const sqlDashboards = sqlDashboardsQuery.data ?? [];
|
|
348
|
-
const extensions = extensionsQuery.data ?? [];
|
|
349
306
|
const savedChartsLoading = savedChartsQuery.isLoading;
|
|
350
307
|
const explorerDashboardsLoading = explorerDashboardsQuery.isLoading;
|
|
351
308
|
const sqlDashboardsLoading = sqlDashboardsQuery.isLoading;
|
|
352
|
-
const extensionsLoading = extensionsQuery.isLoading;
|
|
353
309
|
const asyncGroupsErrored =
|
|
354
310
|
savedChartsQuery.isError ||
|
|
355
311
|
explorerDashboardsQuery.isError ||
|
|
356
|
-
sqlDashboardsQuery.isError
|
|
357
|
-
extensionsQuery.isError;
|
|
312
|
+
sqlDashboardsQuery.isError;
|
|
358
313
|
const retryAsyncGroups = () => {
|
|
359
314
|
void Promise.all([
|
|
360
315
|
savedChartsQuery.refetch(),
|
|
361
316
|
explorerDashboardsQuery.refetch(),
|
|
362
317
|
sqlDashboardsQuery.refetch(),
|
|
363
|
-
extensionsQuery.refetch(),
|
|
364
318
|
]);
|
|
365
319
|
};
|
|
366
320
|
|
|
@@ -400,7 +354,6 @@ export function CommandPalette() {
|
|
|
400
354
|
const asyncGroupsLoading =
|
|
401
355
|
(explorerDashboardsLoading && explorerDashboards.length === 0) ||
|
|
402
356
|
(sqlDashboardsLoading && sqlDashboards.length === 0) ||
|
|
403
|
-
(extensionsLoading && extensions.length === 0) ||
|
|
404
357
|
(savedChartsLoading && savedCharts.length === 0);
|
|
405
358
|
const showHiddenResults = searchQuery.trim().length > 0;
|
|
406
359
|
const visibleExplorerDashboards = showHiddenResults
|
|
@@ -517,32 +470,6 @@ export function CommandPalette() {
|
|
|
517
470
|
</CommandGroup>
|
|
518
471
|
)}
|
|
519
472
|
|
|
520
|
-
{extensions.length > 0 && (
|
|
521
|
-
<CommandGroup
|
|
522
|
-
key="extensions"
|
|
523
|
-
heading={t("commandPalette.groupExtensions")}
|
|
524
|
-
>
|
|
525
|
-
{extensions.map((extension) => (
|
|
526
|
-
<CommandItem
|
|
527
|
-
key={`extension-${extension.id}`}
|
|
528
|
-
value={`extension:${extension.id}:${extension.name}`}
|
|
529
|
-
onSelect={() =>
|
|
530
|
-
go(extensionPath(extension.id, extension.name))
|
|
531
|
-
}
|
|
532
|
-
keywords={commandPaletteKeywords(
|
|
533
|
-
extension.name,
|
|
534
|
-
extension.description,
|
|
535
|
-
"extension",
|
|
536
|
-
"tool",
|
|
537
|
-
)}
|
|
538
|
-
>
|
|
539
|
-
<IconTool className="me-2 h-4 w-4 text-muted-foreground" />
|
|
540
|
-
{extension.name}
|
|
541
|
-
</CommandItem>
|
|
542
|
-
))}
|
|
543
|
-
</CommandGroup>
|
|
544
|
-
)}
|
|
545
|
-
|
|
546
473
|
<CommandGroup
|
|
547
474
|
key="dashboards"
|
|
548
475
|
heading={t("commandPalette.groupDashboards")}
|
|
@@ -735,14 +662,6 @@ export function CommandPalette() {
|
|
|
735
662
|
/>
|
|
736
663
|
)}
|
|
737
664
|
|
|
738
|
-
{extensionsLoading && extensions.length === 0 && (
|
|
739
|
-
<CommandLoadingGroup
|
|
740
|
-
key="extensions-loading"
|
|
741
|
-
heading={t("commandPalette.groupExtensions")}
|
|
742
|
-
rows={3}
|
|
743
|
-
/>
|
|
744
|
-
)}
|
|
745
|
-
|
|
746
665
|
{savedChartsLoading && savedCharts.length === 0 && (
|
|
747
666
|
<CommandLoadingGroup
|
|
748
667
|
key="saved-charts-loading"
|
|
@@ -12,14 +12,14 @@ import {
|
|
|
12
12
|
|
|
13
13
|
const DASHBOARD_CONTEXT =
|
|
14
14
|
"The user wants to create a new analytics dashboard. " +
|
|
15
|
-
|
|
15
|
+
"DASHBOARD ARTIFACT RULE — Dashboards are the only user-facing Analytics artifact. Build with native dashboard panels and Data Programs first. A sandboxed extension is presented only as a dashboard-scoped Custom Block, never as a separate Analytics result. Create one only when the user explicitly wants a genuinely bespoke, one-off visualization or interaction for this dashboard and native panels cannot represent it faithfully. If the behavior should be reused across dashboards/users or added natively, call `connect-builder` instead. " +
|
|
16
16
|
"TEMPLATE FIRST — If the user names an existing dashboard as a template to clone/base this on, resolve its id first (use `list-sql-dashboards` if you only have a title), then call `get-sql-dashboard` with `includeConfig: true` immediately and inspect `panels[].chartType`. " +
|
|
17
|
-
'If
|
|
17
|
+
'If an explicitly named template already contains a `chartType: "extension"` Custom Block, call `get-extension` for that panel\'s `config.extensionId`, clone/adapt it with `create-extension` (apply the requested customer/org filters), then save a new dashboard via `update-dashboard` that embeds the cloned block. Preserve or add `config.customBlock` provenance with `authoredBy: "agent"`, `intent: "one-off"`, `scope: "dashboard"`, and a categorical `nativeGapReason`; never put prompt/customer text in that metadata. Do not rebuild an existing Custom Block as guessed SQL/BigQuery panels. ' +
|
|
18
18
|
"LARGE EXTENSION CLONE — Extension bodies can be very large (tens of thousands of characters). Call `get-extension` with `forceContent: true` exactly ONCE and reuse that body; a second same-run read intentionally omits `content` (you'll see `contentOmitted`), so don't treat that as the content being gone. Call `create-extension` / `update-extension` as NATIVE tools — they are mutating actions and cannot be invoked from `run-code`/`appAction`. For customer-specific clones, change only the small static config block (e.g. `ACCOUNT_USAGE_STATIC`) and prefer a focused `update-extension` edit over regenerating the whole HTML. Never shovel the full body through `run-code` or chat; if you stage it in a workspace scratch file, read it back with `workspaceRead` (which returns the whole file). " +
|
|
19
19
|
"REAL_DATA_REQUIRED: before presenting numbers or authoring new SQL that invents tables/columns/filters, run at least one real data-source query action; `data-source-status`, `list-data-dictionary`, `get-sql-dashboard`, `get-extension`, `update-dashboard`, `mutate-dashboard`, and dry-run validation do not count as data queries. It is OK to inspect a template, clone an extension shell, ask one clarifying question (org id / account filter), or report an exact unavailable/error result without running a data query, as long as you do not invent metrics. " +
|
|
20
20
|
"The `demo` source is reserved for the built-in Node Exporter demo and does not satisfy REAL_DATA_REQUIRED unless the user explicitly asks to work on that demo dashboard. " +
|
|
21
21
|
"If no source can answer, report the exact unavailable/error result instead of saving a dashboard with guessed schema or metrics. " +
|
|
22
|
-
"
|
|
22
|
+
"NATIVE PANELS — Create a SQL-driven dashboard by calling the `update-dashboard` action with `dashboardId` and `config`; use a Data Program first when reusable fetching or transformation is the missing layer. " +
|
|
23
23
|
"The config shape is: { name: string, panels: [{ id, title, sql, source, chartType, width, tab?, config? }] }. " +
|
|
24
24
|
"Each panel needs: id (unique string), title, sql (the query), source ('bigquery' | 'ga4' | 'amplitude' | 'first-party' | 'demo' | 'prometheus'), " +
|
|
25
25
|
"chartType ('line' | 'area' | 'bar' | 'metric' | 'table' | 'pie'), width (1 or 2). " +
|
|
@@ -29,7 +29,7 @@ const DASHBOARD_CONTEXT =
|
|
|
29
29
|
"For the built-in demo dashboard, source is 'demo' and sql uses the same Prometheus JSON descriptor shape as source 'prometheus': { promql, mode, range, step }. " +
|
|
30
30
|
"Call `data-source-status` if you need to see which data sources are connected. " +
|
|
31
31
|
"Refer to AGENTS.md, .agents/skills, the data dictionary, and connected data-source instructions for SQL patterns and table names. " +
|
|
32
|
-
"
|
|
32
|
+
"Do not create code files for an ordinary native dashboard. Use `connect-builder` only for an explicitly reusable/native code request. " +
|
|
33
33
|
"After saving, call the `navigate` action with view='adhoc' and dashboardId so the new dashboard opens immediately.";
|
|
34
34
|
|
|
35
35
|
export function NewDashboardDialog() {
|