@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
|
@@ -121,6 +121,12 @@ export interface ActionRunContext {
|
|
|
121
121
|
/** Concrete execution id for this agent-loop attempt. */
|
|
122
122
|
runId?: string;
|
|
123
123
|
turnId?: string;
|
|
124
|
+
/**
|
|
125
|
+
* Stable key for this exact tool call when the agent loop accepted a human
|
|
126
|
+
* approval grant. This is trusted loop metadata; action input can never set
|
|
127
|
+
* it.
|
|
128
|
+
*/
|
|
129
|
+
approvedToolCallKey?: string;
|
|
124
130
|
}
|
|
125
131
|
|
|
126
132
|
/**
|
|
@@ -196,6 +202,39 @@ export interface PublicAgentActionConfig {
|
|
|
196
202
|
description?: string;
|
|
197
203
|
}
|
|
198
204
|
|
|
205
|
+
export type ActionPlanModeEffect = "read" | "write" | "unknown";
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Declares how an action behaves in Plan mode.
|
|
209
|
+
*
|
|
210
|
+
* A fixed `"read"` effect makes the action callable while planning. Mixed
|
|
211
|
+
* tools can classify each call from its arguments; only a returned `"read"`
|
|
212
|
+
* is allowed. Classifier errors and `"unknown"` fail closed.
|
|
213
|
+
*/
|
|
214
|
+
export interface ActionPlanModeConfig<TInput = unknown> {
|
|
215
|
+
effect: ActionPlanModeEffect | ((args: TInput) => ActionPlanModeEffect);
|
|
216
|
+
/**
|
|
217
|
+
* Optional argument values advertised and accepted in Plan mode. This keeps
|
|
218
|
+
* mixed-tool schemas focused on their read variants while the runtime gate
|
|
219
|
+
* independently rechecks every invocation.
|
|
220
|
+
*/
|
|
221
|
+
allowedValues?: Record<string, readonly string[]>;
|
|
222
|
+
/**
|
|
223
|
+
* Optional Plan-mode input-property allowlist. Other properties are hidden
|
|
224
|
+
* from the advertised schema and rejected by the runtime gate.
|
|
225
|
+
*/
|
|
226
|
+
allowedProperties?: readonly string[];
|
|
227
|
+
/** Properties required by the Plan-mode schema. */
|
|
228
|
+
requiredProperties?: readonly string[];
|
|
229
|
+
/**
|
|
230
|
+
* Properties hidden and rejected in Plan mode (for example persistence or
|
|
231
|
+
* notification options on an otherwise read-only request).
|
|
232
|
+
*/
|
|
233
|
+
omittedProperties?: readonly string[];
|
|
234
|
+
/** Additional Plan-mode guidance appended to the tool description. */
|
|
235
|
+
description?: string;
|
|
236
|
+
}
|
|
237
|
+
|
|
199
238
|
/** A deep link an external agent (MCP / A2A) can surface to the user so they
|
|
200
239
|
* can open the produced/listed resource in the running app UI. */
|
|
201
240
|
export interface ActionDeepLink {
|
|
@@ -413,6 +452,9 @@ interface DefineActionWithSchema<
|
|
|
413
452
|
* must not run during Plan mode because they perform substantive work
|
|
414
453
|
* rather than lightweight inspection. Defaults to allowed when read-only. */
|
|
415
454
|
allowInPlanMode?: boolean;
|
|
455
|
+
/** First-class Plan-mode effect policy. Prefer this over `readOnly` for
|
|
456
|
+
* mixed tools whose effect depends on their arguments. */
|
|
457
|
+
planMode?: ActionPlanModeConfig<StandardSchemaV1.InferInput<TSchema>>;
|
|
416
458
|
/** If true, the agent may execute this action concurrently with other
|
|
417
459
|
* read-only or parallel-safe tool calls emitted in the same model turn.
|
|
418
460
|
* Only set this for mutating actions that are internally concurrency-safe
|
|
@@ -567,6 +609,9 @@ interface DefineActionWithParams<
|
|
|
567
609
|
/** Set false for read-only tools that should stay available in Act mode but
|
|
568
610
|
* must not run during Plan mode. See the schema overload above. */
|
|
569
611
|
allowInPlanMode?: boolean;
|
|
612
|
+
/** First-class Plan-mode effect policy. Prefer this over `readOnly` for
|
|
613
|
+
* mixed tools whose effect depends on their arguments. */
|
|
614
|
+
planMode?: ActionPlanModeConfig<InferParams<TParams>>;
|
|
570
615
|
/** If true, the agent may execute this action concurrently with other
|
|
571
616
|
* read-only or parallel-safe tool calls emitted in the same model turn. */
|
|
572
617
|
parallelSafe?: boolean;
|
|
@@ -639,6 +684,7 @@ export interface ActionDefinition<TInput, TReturn> {
|
|
|
639
684
|
readonly agentTool?: boolean;
|
|
640
685
|
readonly readOnly?: boolean;
|
|
641
686
|
readonly allowInPlanMode?: boolean;
|
|
687
|
+
readonly planMode?: ActionPlanModeConfig<TInput>;
|
|
642
688
|
readonly parallelSafe?: boolean;
|
|
643
689
|
readonly dedupe?: boolean;
|
|
644
690
|
readonly toolCallable?: boolean;
|
|
@@ -900,6 +946,15 @@ export function defineAction(options: any) {
|
|
|
900
946
|
...(typeof options.allowInPlanMode === "boolean"
|
|
901
947
|
? { allowInPlanMode: options.allowInPlanMode }
|
|
902
948
|
: {}),
|
|
949
|
+
...(options.planMode &&
|
|
950
|
+
typeof options.planMode === "object" &&
|
|
951
|
+
!Array.isArray(options.planMode) &&
|
|
952
|
+
(typeof options.planMode.effect === "function" ||
|
|
953
|
+
options.planMode.effect === "read" ||
|
|
954
|
+
options.planMode.effect === "write" ||
|
|
955
|
+
options.planMode.effect === "unknown")
|
|
956
|
+
? { planMode: options.planMode }
|
|
957
|
+
: {}),
|
|
903
958
|
...(typeof parallelSafe === "boolean" ? { parallelSafe } : {}),
|
|
904
959
|
...(typeof dedupe === "boolean" ? { dedupe } : {}),
|
|
905
960
|
...(typeof toolCallable === "boolean" ? { toolCallable } : {}),
|
|
@@ -720,9 +720,9 @@ async function* parseJsonlStream(
|
|
|
720
720
|
Boolean(explicitErrMsg) &&
|
|
721
721
|
!isCredentialAuthError &&
|
|
722
722
|
isBuilderCredentialAuthError(String(errMsg));
|
|
723
|
-
//
|
|
724
|
-
//
|
|
725
|
-
//
|
|
723
|
+
// Providers can report a bare "Connection error." or AI SDK's
|
|
724
|
+
// retry-wrapped "Cannot connect to API" without a gateway code.
|
|
725
|
+
// Tag both as network errors so retries can recover the turn.
|
|
726
726
|
const isProviderConnectionError =
|
|
727
727
|
typeof explicitErrMsg === "string" &&
|
|
728
728
|
isProviderConnectionErrorMessage(String(explicitErrMsg));
|
|
@@ -1138,7 +1138,11 @@ function isBuilderGatewayNetworkError(err: unknown): boolean {
|
|
|
1138
1138
|
}
|
|
1139
1139
|
|
|
1140
1140
|
function isProviderConnectionErrorMessage(message: string): boolean {
|
|
1141
|
-
|
|
1141
|
+
const normalized = message.trim().toLowerCase();
|
|
1142
|
+
return (
|
|
1143
|
+
normalized === "connection error." ||
|
|
1144
|
+
normalized.includes("cannot connect to api:")
|
|
1145
|
+
);
|
|
1142
1146
|
}
|
|
1143
1147
|
|
|
1144
1148
|
function captureBuilderGatewayTransportError(
|
|
@@ -184,6 +184,7 @@ import {
|
|
|
184
184
|
} from "./tool-result-images.js";
|
|
185
185
|
import {
|
|
186
186
|
createToolSearchEntry,
|
|
187
|
+
searchToolRegistry,
|
|
187
188
|
TOOL_SEARCH_ACTION_NAME,
|
|
188
189
|
} from "./tool-search.js";
|
|
189
190
|
import type {
|
|
@@ -604,6 +605,9 @@ export interface ActionEntry {
|
|
|
604
605
|
* Plan mode. Use for tools that perform substantive work even without
|
|
605
606
|
* mutating state. */
|
|
606
607
|
allowInPlanMode?: boolean;
|
|
608
|
+
/** First-class Plan-mode effect policy. Mixed tools should classify each
|
|
609
|
+
* invocation so read variants remain available while writes fail closed. */
|
|
610
|
+
planMode?: import("../action.js").ActionPlanModeConfig<any>;
|
|
607
611
|
/** If true, this action can run concurrently with other same-turn
|
|
608
612
|
* read-only/parallel-safe tool calls. Only use for actions that handle
|
|
609
613
|
* their own write ordering and idempotency. */
|
|
@@ -666,7 +670,7 @@ export const PLAN_MODE_SYSTEM_PROMPT = `## Plan Mode Active
|
|
|
666
670
|
You are in Plan mode. This turn is for research, clarification, and a proposed approach only.
|
|
667
671
|
|
|
668
672
|
Hard rules:
|
|
669
|
-
- Use only read-only tools. Do not edit files, write resources, run mutating bash commands, mutate SQL rows, navigate the UI, send notifications, create jobs, create tools,
|
|
673
|
+
- Use only read-only tools. Do not edit files, write resources, run mutating bash commands, mutate SQL rows, navigate the UI, send notifications, create jobs, create tools, send messages or tasks to external agents, or change external systems.
|
|
670
674
|
- If a needed detail is unclear, ask a concise clarifying question before proposing a plan.
|
|
671
675
|
- When ready, present a concrete plan with the files/tools you expect to touch, the intended changes, validation steps, and notable risks.
|
|
672
676
|
- Do not treat approval as implicit while Plan mode is still active. Tell the user to switch to Act mode with the mode selector or /act before implementation.`;
|
|
@@ -677,18 +681,6 @@ const PLAN_MODE_BLOCKED_READONLY_TOOLS = new Set([
|
|
|
677
681
|
"set-url-path",
|
|
678
682
|
]);
|
|
679
683
|
|
|
680
|
-
const PLAN_MODE_ALLOWED_ACTIONS: Record<string, readonly string[]> = {
|
|
681
|
-
resources: ["list", "read"],
|
|
682
|
-
"chat-history": ["search"],
|
|
683
|
-
"agent-teams": ["status", "read-result", "list"],
|
|
684
|
-
"manage-jobs": ["list"],
|
|
685
|
-
"manage-automations": ["list-events", "list"],
|
|
686
|
-
"manage-notifications": ["list"],
|
|
687
|
-
"manage-progress": ["list"],
|
|
688
|
-
"manage-agent-engine": ["list"],
|
|
689
|
-
};
|
|
690
|
-
|
|
691
|
-
const PLAN_MODE_WEB_REQUEST_METHODS = new Set(["GET", "HEAD"]);
|
|
692
684
|
const SOURCE_SWEEP_AGENT_TEAM_ALLOWED_ACTIONS = [
|
|
693
685
|
"status",
|
|
694
686
|
"read-result",
|
|
@@ -704,49 +696,85 @@ function getToolAction(name: string, args: unknown): string {
|
|
|
704
696
|
return String(raw ?? "").toLowerCase();
|
|
705
697
|
}
|
|
706
698
|
|
|
707
|
-
function
|
|
708
|
-
const raw =
|
|
709
|
-
args && typeof args === "object" && "method" in args
|
|
710
|
-
? (args as Record<string, unknown>).method
|
|
711
|
-
: undefined;
|
|
712
|
-
return String(raw ?? "GET").toUpperCase();
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
function restrictActionEnum(
|
|
699
|
+
function projectPlanModeParameters(
|
|
716
700
|
parameters: ActionTool["parameters"] | undefined,
|
|
717
|
-
|
|
701
|
+
planMode: import("../action.js").ActionPlanModeConfig<any> | undefined,
|
|
718
702
|
): ActionTool["parameters"] | undefined {
|
|
719
|
-
if (!parameters) return parameters;
|
|
720
|
-
const
|
|
721
|
-
|
|
703
|
+
if (!parameters || !planMode) return parameters;
|
|
704
|
+
const allowedProperties = planMode.allowedProperties
|
|
705
|
+
? new Set(planMode.allowedProperties)
|
|
706
|
+
: undefined;
|
|
707
|
+
const omittedProperties = new Set(planMode.omittedProperties ?? []);
|
|
708
|
+
const properties = Object.fromEntries(
|
|
709
|
+
Object.entries(parameters.properties).filter(
|
|
710
|
+
([key]) =>
|
|
711
|
+
(!allowedProperties || allowedProperties.has(key)) &&
|
|
712
|
+
!omittedProperties.has(key),
|
|
713
|
+
),
|
|
714
|
+
) as typeof parameters.properties;
|
|
715
|
+
let changed = false;
|
|
716
|
+
for (const [key, values] of Object.entries(planMode.allowedValues ?? {})) {
|
|
717
|
+
const parameter = properties[key];
|
|
718
|
+
if (!parameter) continue;
|
|
719
|
+
properties[key] = { ...parameter, enum: [...values] };
|
|
720
|
+
changed = true;
|
|
721
|
+
}
|
|
722
|
+
if (
|
|
723
|
+
!changed &&
|
|
724
|
+
!allowedProperties &&
|
|
725
|
+
omittedProperties.size === 0 &&
|
|
726
|
+
(planMode.requiredProperties?.length ?? 0) === 0
|
|
727
|
+
) {
|
|
728
|
+
return parameters;
|
|
729
|
+
}
|
|
730
|
+
const required = Array.from(
|
|
731
|
+
new Set([
|
|
732
|
+
...(parameters.required?.filter((key) => key in properties) ?? []),
|
|
733
|
+
...(planMode.requiredProperties?.filter((key) => key in properties) ??
|
|
734
|
+
[]),
|
|
735
|
+
]),
|
|
736
|
+
);
|
|
722
737
|
return {
|
|
723
738
|
...parameters,
|
|
724
|
-
properties
|
|
725
|
-
|
|
726
|
-
action: {
|
|
727
|
-
...actionParam,
|
|
728
|
-
enum: [...allowedActions],
|
|
729
|
-
},
|
|
730
|
-
},
|
|
739
|
+
properties,
|
|
740
|
+
...(required.length > 0 ? { required } : {}),
|
|
731
741
|
};
|
|
732
742
|
}
|
|
733
743
|
|
|
734
|
-
function
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
const
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
744
|
+
function matchesPlanModeInputPolicy(
|
|
745
|
+
input: unknown,
|
|
746
|
+
planMode: import("../action.js").ActionPlanModeConfig<any>,
|
|
747
|
+
): boolean {
|
|
748
|
+
const hasPropertyPolicy =
|
|
749
|
+
planMode.allowedProperties !== undefined ||
|
|
750
|
+
(planMode.omittedProperties?.length ?? 0) > 0 ||
|
|
751
|
+
planMode.allowedValues !== undefined;
|
|
752
|
+
if (!hasPropertyPolicy) return true;
|
|
753
|
+
if (!input || typeof input !== "object" || Array.isArray(input)) {
|
|
754
|
+
return false;
|
|
755
|
+
}
|
|
756
|
+
const values = input as Record<string, unknown>;
|
|
757
|
+
const allowedProperties = planMode.allowedProperties
|
|
758
|
+
? new Set(planMode.allowedProperties)
|
|
759
|
+
: undefined;
|
|
760
|
+
const omittedProperties = new Set(planMode.omittedProperties ?? []);
|
|
761
|
+
if (
|
|
762
|
+
Object.keys(values).some(
|
|
763
|
+
(key) =>
|
|
764
|
+
(allowedProperties && !allowedProperties.has(key)) ||
|
|
765
|
+
omittedProperties.has(key),
|
|
766
|
+
)
|
|
767
|
+
) {
|
|
768
|
+
return false;
|
|
769
|
+
}
|
|
770
|
+
return Object.entries(planMode.allowedValues ?? {}).every(
|
|
771
|
+
([key, allowed]) => {
|
|
772
|
+
const value = values[key];
|
|
773
|
+
return (
|
|
774
|
+
value == null || (typeof value === "string" && allowed.includes(value))
|
|
775
|
+
);
|
|
748
776
|
},
|
|
749
|
-
|
|
777
|
+
);
|
|
750
778
|
}
|
|
751
779
|
|
|
752
780
|
function planModeBlockedMessage(toolName: string, reason?: string): string {
|
|
@@ -765,17 +793,23 @@ export function isPlanModeToolCallAllowed(
|
|
|
765
793
|
if (entry.allowInPlanMode === false) return false;
|
|
766
794
|
if (PLAN_MODE_BLOCKED_READONLY_TOOLS.has(name)) return false;
|
|
767
795
|
|
|
768
|
-
if (name === "web-request") {
|
|
769
|
-
return PLAN_MODE_WEB_REQUEST_METHODS.has(getWebRequestMethod(input));
|
|
770
|
-
}
|
|
771
|
-
|
|
772
796
|
if (name === "bash") {
|
|
773
797
|
return isPlanModeReadOnlyBashCall(input);
|
|
774
798
|
}
|
|
775
799
|
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
800
|
+
if (entry.planMode) {
|
|
801
|
+
if (!matchesPlanModeInputPolicy(input, entry.planMode)) {
|
|
802
|
+
return false;
|
|
803
|
+
}
|
|
804
|
+
try {
|
|
805
|
+
const effect =
|
|
806
|
+
typeof entry.planMode.effect === "function"
|
|
807
|
+
? entry.planMode.effect(input)
|
|
808
|
+
: entry.planMode.effect;
|
|
809
|
+
return effect === "read";
|
|
810
|
+
} catch {
|
|
811
|
+
return false;
|
|
812
|
+
}
|
|
779
813
|
}
|
|
780
814
|
|
|
781
815
|
return entry.readOnly === true;
|
|
@@ -791,45 +825,35 @@ function isPlanModeReadOnlyBashCall(input: unknown): boolean {
|
|
|
791
825
|
function createPlanModeGuardedAction(
|
|
792
826
|
name: string,
|
|
793
827
|
entry: ActionEntry,
|
|
794
|
-
allowedActions: readonly string[],
|
|
795
828
|
): ActionEntry {
|
|
829
|
+
const allowedValues = entry.planMode?.allowedValues;
|
|
830
|
+
const allowedDescription = allowedValues
|
|
831
|
+
? Object.entries(allowedValues)
|
|
832
|
+
.map(
|
|
833
|
+
([key, values]) =>
|
|
834
|
+
`\`${key}\`: ${values.map((value) => `"${value}"`).join(", ")}`,
|
|
835
|
+
)
|
|
836
|
+
.join("; ")
|
|
837
|
+
: "";
|
|
838
|
+
const guidance =
|
|
839
|
+
entry.planMode?.description ??
|
|
840
|
+
(allowedDescription
|
|
841
|
+
? `only these argument values are available: ${allowedDescription}.`
|
|
842
|
+
: "only calls classified as read-only are available.");
|
|
796
843
|
return {
|
|
797
844
|
...entry,
|
|
798
845
|
readOnly: true,
|
|
799
846
|
tool: {
|
|
800
847
|
...entry.tool,
|
|
801
|
-
description:
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
},
|
|
807
|
-
run: async (args, context) => {
|
|
808
|
-
const action = getToolAction(name, args);
|
|
809
|
-
if (!allowedActions.includes(action)) {
|
|
810
|
-
return planModeBlockedMessage(
|
|
811
|
-
name,
|
|
812
|
-
`action="${action || "(missing)"}"`,
|
|
813
|
-
);
|
|
814
|
-
}
|
|
815
|
-
return entry.run(args, context);
|
|
816
|
-
},
|
|
817
|
-
};
|
|
818
|
-
}
|
|
819
|
-
|
|
820
|
-
function createPlanModeWebRequestAction(entry: ActionEntry): ActionEntry {
|
|
821
|
-
return {
|
|
822
|
-
...entry,
|
|
823
|
-
readOnly: true,
|
|
824
|
-
tool: {
|
|
825
|
-
...entry.tool,
|
|
826
|
-
description: `${entry.tool.description}\n\nPlan mode: only GET and HEAD requests are allowed.`,
|
|
827
|
-
parameters: restrictWebRequestMethods(entry.tool.parameters),
|
|
848
|
+
description: `${entry.tool.description}\n\nPlan mode: ${guidance}`,
|
|
849
|
+
parameters: projectPlanModeParameters(
|
|
850
|
+
entry.tool.parameters,
|
|
851
|
+
entry.planMode,
|
|
852
|
+
),
|
|
828
853
|
},
|
|
829
854
|
run: async (args, context) => {
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
return planModeBlockedMessage("web-request", `method="${method}"`);
|
|
855
|
+
if (!isPlanModeToolCallAllowed(name, args, entry)) {
|
|
856
|
+
return planModeBlockedMessage(name, "call is not read-only");
|
|
833
857
|
}
|
|
834
858
|
return entry.run(args, context);
|
|
835
859
|
},
|
|
@@ -894,23 +918,24 @@ export function createPlanModeActionRegistry(
|
|
|
894
918
|
continue;
|
|
895
919
|
}
|
|
896
920
|
|
|
897
|
-
const allowedActions = PLAN_MODE_ALLOWED_ACTIONS[name];
|
|
898
|
-
if (allowedActions) {
|
|
899
|
-
filtered[name] = createPlanModeGuardedAction(name, entry, allowedActions);
|
|
900
|
-
continue;
|
|
901
|
-
}
|
|
902
|
-
|
|
903
|
-
if (name === "web-request") {
|
|
904
|
-
filtered[name] = createPlanModeWebRequestAction(entry);
|
|
905
|
-
continue;
|
|
906
|
-
}
|
|
907
|
-
|
|
908
921
|
if (name === "bash") {
|
|
909
922
|
filtered[name] = createPlanModeBashAction(entry);
|
|
910
923
|
continue;
|
|
911
924
|
}
|
|
912
925
|
|
|
913
|
-
if (entry.
|
|
926
|
+
if (entry.planMode) {
|
|
927
|
+
if (typeof entry.planMode.effect === "function") {
|
|
928
|
+
filtered[name] = createPlanModeGuardedAction(name, entry);
|
|
929
|
+
} else if (entry.planMode.effect === "read") {
|
|
930
|
+
filtered[name] = createPlanModeGuardedAction(name, entry);
|
|
931
|
+
} else {
|
|
932
|
+
filtered[name] = createPlanModeBlockedAction(
|
|
933
|
+
name,
|
|
934
|
+
entry,
|
|
935
|
+
"write or unknown effect",
|
|
936
|
+
);
|
|
937
|
+
}
|
|
938
|
+
} else if (entry.readOnly === true) {
|
|
914
939
|
filtered[name] = entry;
|
|
915
940
|
} else {
|
|
916
941
|
filtered[name] = createPlanModeBlockedAction(
|
|
@@ -2963,6 +2988,40 @@ export function filterInitialEngineTools(
|
|
|
2963
2988
|
return tools.filter((tool) => names.has(tool.name));
|
|
2964
2989
|
}
|
|
2965
2990
|
|
|
2991
|
+
export function preloadPlanModeEngineTools(options: {
|
|
2992
|
+
request: string;
|
|
2993
|
+
registry: Record<string, ActionEntry>;
|
|
2994
|
+
initialTools: EngineTool[];
|
|
2995
|
+
availableTools: EngineTool[];
|
|
2996
|
+
limit?: number;
|
|
2997
|
+
}): EngineTool[] {
|
|
2998
|
+
const query = options.request.trim();
|
|
2999
|
+
if (!query) return options.initialTools;
|
|
3000
|
+
|
|
3001
|
+
const activeNames = new Set(options.initialTools.map((tool) => tool.name));
|
|
3002
|
+
const preloadLimit = Math.max(0, Math.min(options.limit ?? 3, 5));
|
|
3003
|
+
if (preloadLimit === 0) return options.initialTools;
|
|
3004
|
+
|
|
3005
|
+
const ranked = searchToolRegistry(
|
|
3006
|
+
options.registry,
|
|
3007
|
+
{ query, limit: 25, includeSchemas: true },
|
|
3008
|
+
{ defaultLimit: 25, maxLimit: 25 },
|
|
3009
|
+
);
|
|
3010
|
+
const preloadNames = ranked.results
|
|
3011
|
+
.filter(
|
|
3012
|
+
(result) =>
|
|
3013
|
+
result.callable &&
|
|
3014
|
+
result.planAvailability !== "act-only" &&
|
|
3015
|
+
!activeNames.has(result.name),
|
|
3016
|
+
)
|
|
3017
|
+
.slice(0, preloadLimit)
|
|
3018
|
+
.map((result) => result.name);
|
|
3019
|
+
if (preloadNames.length === 0) return options.initialTools;
|
|
3020
|
+
|
|
3021
|
+
for (const name of preloadNames) activeNames.add(name);
|
|
3022
|
+
return options.availableTools.filter((tool) => activeNames.has(tool.name));
|
|
3023
|
+
}
|
|
3024
|
+
|
|
2966
3025
|
export function buildFirstRequestPayloadDetail(input: {
|
|
2967
3026
|
isFirstRequest: boolean;
|
|
2968
3027
|
systemPrompt: string;
|
|
@@ -2988,6 +3047,10 @@ const DEFAULT_INITIAL_TOOL_NAMES = new Set([
|
|
|
2988
3047
|
"docs-search",
|
|
2989
3048
|
"get-framework-context",
|
|
2990
3049
|
"read-attachment",
|
|
3050
|
+
// A pasted public URL is already a complete read target. Keep the generic
|
|
3051
|
+
// GET/HEAD tool on the first request so agents can inspect self-describing
|
|
3052
|
+
// pages without needing an app-specific connector or a tool-search turn.
|
|
3053
|
+
"web-request",
|
|
2991
3054
|
// The `<available-apps>` prompt block names these two BY NAME on the same
|
|
2992
3055
|
// request, and "which app should I use for this?" is answered on turn one or
|
|
2993
3056
|
// not at all. Omitting them made the model read the instruction, find no
|
|
@@ -3012,7 +3075,9 @@ function extractToolSearchResultNames(value: unknown): string[] {
|
|
|
3012
3075
|
const names: string[] = [];
|
|
3013
3076
|
for (const item of result.results) {
|
|
3014
3077
|
if (!item || typeof item !== "object") continue;
|
|
3015
|
-
const
|
|
3078
|
+
const record = item as Record<string, unknown>;
|
|
3079
|
+
if (record.callable === false) continue;
|
|
3080
|
+
const name = record.name;
|
|
3016
3081
|
if (typeof name === "string" && name.trim()) names.push(name);
|
|
3017
3082
|
}
|
|
3018
3083
|
return names;
|
|
@@ -5346,6 +5411,7 @@ export async function runAgentLoop(opts: {
|
|
|
5346
5411
|
// Audit attribution: the action name + the agent thread/turn that
|
|
5347
5412
|
// triggered this call, so a mutation can be traced to its run.
|
|
5348
5413
|
actionName: toolCall.name,
|
|
5414
|
+
...(wasApproved ? { approvedToolCallKey: approvalKey } : {}),
|
|
5349
5415
|
...(opts.threadId ? { threadId: opts.threadId } : {}),
|
|
5350
5416
|
...(opts.runId ? { runId: opts.runId } : {}),
|
|
5351
5417
|
...(opts.turnId ? { turnId: opts.turnId } : {}),
|
|
@@ -7875,10 +7941,19 @@ export function createProductionAgentHandler(
|
|
|
7875
7941
|
? createPlanModeActionRegistry(resolvedActions)
|
|
7876
7942
|
: resolvedActions;
|
|
7877
7943
|
const availableRequestTools = getEngineTools(requestActions);
|
|
7878
|
-
const
|
|
7944
|
+
const initialRequestTools = filterInitialEngineTools(
|
|
7879
7945
|
availableRequestTools,
|
|
7880
7946
|
options.initialToolNames,
|
|
7881
7947
|
);
|
|
7948
|
+
const requestTools =
|
|
7949
|
+
requestMode === "plan"
|
|
7950
|
+
? preloadPlanModeEngineTools({
|
|
7951
|
+
request: requestMessage,
|
|
7952
|
+
registry: requestActions,
|
|
7953
|
+
initialTools: initialRequestTools,
|
|
7954
|
+
availableTools: availableRequestTools,
|
|
7955
|
+
})
|
|
7956
|
+
: initialRequestTools;
|
|
7882
7957
|
// System sections are emitted by the prompt builder once per request. Tool
|
|
7883
7958
|
// schemas become known just after prompt setup, so append their measured
|
|
7884
7959
|
// contribution here and reuse the immutable result for every loop pass.
|
|
@@ -25,6 +25,10 @@ type ToolSearchResult = {
|
|
|
25
25
|
source?: string;
|
|
26
26
|
description: string;
|
|
27
27
|
score: number;
|
|
28
|
+
/** Whether this result can be loaded and called in the current registry. */
|
|
29
|
+
callable: boolean;
|
|
30
|
+
/** How the action behaves while the agent is in Plan mode. */
|
|
31
|
+
planAvailability: "read" | "conditional" | "act-only";
|
|
28
32
|
parameters: ToolParameterSummary[];
|
|
29
33
|
inputSchema?: unknown;
|
|
30
34
|
};
|
|
@@ -129,6 +133,8 @@ export function searchToolRegistry(
|
|
|
129
133
|
name,
|
|
130
134
|
kind: parseMcpToolName(name) ? ("mcp" as const) : ("action" as const),
|
|
131
135
|
score: 0,
|
|
136
|
+
callable: registry[name]?.allowInPlanMode !== false,
|
|
137
|
+
planAvailability: getPlanAvailability(name, registry[name]),
|
|
132
138
|
description:
|
|
133
139
|
"Already returned by an earlier identical tool-search call.",
|
|
134
140
|
parameters: [],
|
|
@@ -152,6 +158,8 @@ export function searchToolRegistry(
|
|
|
152
158
|
const parsedMcp = parseMcpToolName(name);
|
|
153
159
|
const kind = parsedMcp ? "mcp" : "action";
|
|
154
160
|
const source = parsedMcp?.serverId;
|
|
161
|
+
const callable = entry.allowInPlanMode !== false;
|
|
162
|
+
const planAvailability = getPlanAvailability(name, entry);
|
|
155
163
|
|
|
156
164
|
if (listAll) {
|
|
157
165
|
candidates.push({
|
|
@@ -160,6 +168,8 @@ export function searchToolRegistry(
|
|
|
160
168
|
...(source ? { source } : {}),
|
|
161
169
|
description: truncate(description, 140),
|
|
162
170
|
score: 0,
|
|
171
|
+
callable,
|
|
172
|
+
planAvailability,
|
|
163
173
|
parameters: [],
|
|
164
174
|
});
|
|
165
175
|
continue;
|
|
@@ -184,6 +194,8 @@ export function searchToolRegistry(
|
|
|
184
194
|
...(source ? { source } : {}),
|
|
185
195
|
description,
|
|
186
196
|
score,
|
|
197
|
+
callable,
|
|
198
|
+
planAvailability,
|
|
187
199
|
parameters,
|
|
188
200
|
...(includeSchemas ? { inputSchema: entry.tool.parameters ?? {} } : {}),
|
|
189
201
|
});
|
|
@@ -218,6 +230,30 @@ export function searchToolRegistry(
|
|
|
218
230
|
return result;
|
|
219
231
|
}
|
|
220
232
|
|
|
233
|
+
const PLAN_MODE_BLOCKED_DISCOVERY_TOOLS = new Set([
|
|
234
|
+
"refresh-screen",
|
|
235
|
+
"set-search-params",
|
|
236
|
+
"set-url-path",
|
|
237
|
+
]);
|
|
238
|
+
|
|
239
|
+
function getPlanAvailability(
|
|
240
|
+
name: string,
|
|
241
|
+
entry: ActionEntry | undefined,
|
|
242
|
+
): ToolSearchResult["planAvailability"] {
|
|
243
|
+
if (!entry || entry.allowInPlanMode === false) return "act-only";
|
|
244
|
+
if (PLAN_MODE_BLOCKED_DISCOVERY_TOOLS.has(name)) return "act-only";
|
|
245
|
+
if (name === "bash") return "conditional";
|
|
246
|
+
if (typeof entry.planMode?.effect === "function") return "conditional";
|
|
247
|
+
if (entry.planMode?.effect === "read") return "read";
|
|
248
|
+
if (
|
|
249
|
+
entry.planMode?.effect === "write" ||
|
|
250
|
+
entry.planMode?.effect === "unknown"
|
|
251
|
+
) {
|
|
252
|
+
return "act-only";
|
|
253
|
+
}
|
|
254
|
+
return entry.readOnly === true ? "read" : "act-only";
|
|
255
|
+
}
|
|
256
|
+
|
|
221
257
|
function normalizeToolSearchCacheKey(options: {
|
|
222
258
|
query: string;
|
|
223
259
|
limit: number;
|