@agent-native/core 0.97.0 → 0.98.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +32 -0
- package/corpus/core/docs/content/authentication.mdx +3 -3
- package/corpus/core/docs/content/doctor.mdx +170 -0
- package/corpus/core/docs/content/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ar-SA/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/ar-SA/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ar-SA/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/security.mdx +2 -0
- package/corpus/core/docs/content/locales/de-DE/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/de-DE/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/security.mdx +2 -0
- package/corpus/core/docs/content/locales/es-ES/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/es-ES/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/es-ES/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/security.mdx +2 -0
- package/corpus/core/docs/content/locales/fr-FR/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/fr-FR/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/security.mdx +2 -0
- package/corpus/core/docs/content/locales/hi-IN/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/hi-IN/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/hi-IN/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/security.mdx +2 -0
- package/corpus/core/docs/content/locales/ja-JP/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/ja-JP/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ja-JP/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/security.mdx +2 -0
- package/corpus/core/docs/content/locales/ko-KR/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/ko-KR/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ko-KR/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/security.mdx +2 -0
- package/corpus/core/docs/content/locales/pt-BR/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/pt-BR/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/pt-BR/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/security.mdx +2 -0
- package/corpus/core/docs/content/locales/zh-CN/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-CN/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/zh-CN/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/security.mdx +2 -0
- package/corpus/core/docs/content/locales/zh-TW/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-TW/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/zh-TW/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/security.mdx +2 -0
- package/corpus/core/docs/content/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/security.mdx +2 -0
- package/corpus/core/package.json +5 -1
- package/corpus/core/scripts/finalize-build.mjs +63 -3
- package/corpus/core/scripts/materialize-source-corpus.mjs +101 -15
- package/corpus/core/src/action.ts +42 -0
- package/corpus/core/src/agent/engine/builder-engine.ts +3 -0
- package/corpus/core/src/agent/engine/context-directives-transform.ts +69 -0
- package/corpus/core/src/agent/engine/continuation-dispatch-retry.ts +168 -0
- package/corpus/core/src/agent/engine/tool-call-journal-seed.ts +85 -0
- package/corpus/core/src/agent/production-agent.ts +129 -244
- package/corpus/core/src/cli/doctor.ts +9 -3
- package/corpus/core/src/cli/plan-local.ts +10 -2
- package/corpus/core/src/cli/skills-content/assets-skill.ts +83 -0
- package/corpus/core/src/cli/skills-content/canvas.ts +153 -0
- package/corpus/core/src/cli/skills-content/connection.ts +52 -0
- package/corpus/core/src/cli/skills-content/content-skill.ts +109 -0
- package/corpus/core/src/cli/skills-content/design-exploration-skill.ts +118 -0
- package/corpus/core/src/cli/skills-content/design-visual-edit-skill.ts +228 -0
- package/corpus/core/src/cli/skills-content/document-quality.ts +196 -0
- package/corpus/core/src/cli/skills-content/exemplar.ts +69 -0
- package/corpus/core/src/cli/skills-content/help.ts +77 -0
- package/corpus/core/src/cli/skills-content/index.ts +22 -0
- package/corpus/core/src/cli/skills-content/local-files.ts +95 -0
- package/corpus/core/src/cli/skills-content/plan-setup-auth.ts +80 -0
- package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +470 -0
- package/corpus/core/src/cli/skills-content/visual-recap-skill.ts +547 -0
- package/corpus/core/src/cli/skills-content/visualize-repo-skill.ts +93 -0
- package/corpus/core/src/cli/skills-content/wireframe.ts +349 -0
- package/corpus/core/src/cli/skills.ts +27 -2733
- package/corpus/core/src/client/AgentPanel.tsx +6 -5
- package/corpus/core/src/client/CommandMenu.tsx +16 -5
- package/corpus/core/src/client/FeedbackButton.tsx +2 -2
- package/corpus/core/src/client/app-providers.tsx +18 -5
- package/corpus/core/src/client/chat/tool-call-display.tsx +3 -3
- package/corpus/core/src/client/composer/PastedTextChip.tsx +1 -1
- package/corpus/core/src/client/composer/RealtimeVoiceMode.tsx +143 -45
- package/corpus/core/src/client/composer/TiptapComposer.tsx +1 -1
- package/corpus/core/src/client/composer/VoiceButton.tsx +21 -5
- package/corpus/core/src/client/composer/useRealtimeVoiceMode.tsx +107 -10
- package/corpus/core/src/client/context-xray/ContextXRayPanel.tsx +5 -2
- package/corpus/core/src/client/extensions/ExtensionEditor.tsx +37 -4
- package/corpus/core/src/client/extensions/ExtensionQueryErrorState.tsx +47 -0
- package/corpus/core/src/client/extensions/ExtensionSlot.tsx +39 -10
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +44 -6
- package/corpus/core/src/client/extensions/ExtensionsListPage.tsx +12 -3
- package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +49 -11
- package/corpus/core/src/client/index.ts +0 -13
- package/corpus/core/src/client/progress/RunsTray.tsx +10 -3
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +7 -0
- package/corpus/core/src/client/settings/useBuilderStatus.ts +6 -0
- package/corpus/core/src/client/tool-cells/EditCell.tsx +19 -16
- package/corpus/core/src/client/tool-cells/FilesChangedSummary.tsx +26 -23
- package/corpus/core/src/client/tool-cells/WriteCell.tsx +19 -16
- package/corpus/core/src/client/visual-style-controls.tsx +1 -1
- package/corpus/core/src/deploy/build.ts +36 -14
- package/corpus/core/src/integrations/google-docs-poller.ts +23 -2
- package/corpus/core/src/integrations/plugin.ts +10 -0
- package/corpus/core/src/integrations/webhook-handler.ts +27 -2
- package/corpus/core/src/jobs/scheduler.ts +28 -2
- package/corpus/core/src/localization/default-messages.ts +8 -1
- package/corpus/core/src/mcp/oauth-token.ts +6 -1
- package/corpus/core/src/observability/routes.ts +36 -0
- package/corpus/core/src/observability/sentiment.ts +261 -0
- package/corpus/core/src/observability/store.ts +23 -0
- package/corpus/core/src/observability/traces.ts +49 -63
- package/corpus/core/src/observability/tracking-identity.ts +55 -0
- package/corpus/core/src/observability/types.ts +13 -0
- package/corpus/core/src/secrets/storage.ts +67 -3
- package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +199 -0
- package/corpus/core/src/server/agent-chat/browser-team-tools.ts +510 -0
- package/corpus/core/src/server/agent-chat/context-tools.ts +595 -0
- package/corpus/core/src/server/agent-chat/framework-prompts.ts +470 -0
- package/corpus/core/src/server/agent-chat/lazy-fs.ts +11 -0
- package/corpus/core/src/server/agent-chat/mcp-glue.ts +91 -0
- package/corpus/core/src/server/agent-chat/plugin-options.ts +350 -0
- package/corpus/core/src/server/agent-chat/process-run-failure.ts +62 -0
- package/corpus/core/src/server/agent-chat/prompt-resources.ts +688 -0
- package/corpus/core/src/server/agent-chat/recurring-jobs-runtime.ts +80 -0
- package/corpus/core/src/server/agent-chat/request-surface.ts +71 -0
- package/corpus/core/src/server/agent-chat/run-code-tools.ts +67 -0
- package/corpus/core/src/server/agent-chat/script-entries.ts +779 -0
- package/corpus/core/src/server/agent-chat/shared-thread.ts +301 -0
- package/corpus/core/src/server/agent-chat/skill-frontmatter.ts +41 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +364 -4182
- package/corpus/core/src/server/agent-teams.ts +26 -3
- package/corpus/core/src/server/auth.ts +55 -57
- package/corpus/core/src/server/credential-provider.ts +22 -25
- package/corpus/core/src/server/edge.ts +1 -0
- package/corpus/core/src/server/onboarding-html.ts +1 -16
- package/corpus/core/src/server/realtime-voice.ts +40 -5
- package/corpus/core/src/server/request-origin.ts +6 -2
- package/corpus/core/src/server/ssr-handler.ts +55 -2
- package/corpus/core/src/sharing/access.ts +155 -11
- package/corpus/core/src/sharing/registry.ts +7 -0
- package/corpus/core/src/styles/agent-native.css +15 -14
- package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +6 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
- package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
- package/corpus/core/src/templates/workspace-core/src/server/index.ts +4 -2
- package/corpus/core/src/testing.ts +26 -0
- package/corpus/core/src/triggers/dispatcher.ts +23 -2
- package/corpus/core/src/vite/client.ts +126 -2
- package/corpus/core/tsconfig.cli.json +1 -1
- package/corpus/core/tsconfig.json +5 -1
- package/corpus/templates/analytics/.agents/skills/bigquery/SKILL.md +2 -2
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/analytics/AGENTS.md +19 -6
- package/corpus/templates/analytics/actions/install-dashboard-template.ts +79 -43
- package/corpus/templates/analytics/actions/list-explorer-dashboards.ts +3 -3
- package/corpus/templates/analytics/actions/list-sql-dashboards.ts +8 -3
- package/corpus/templates/analytics/actions/rename-analysis.ts +8 -2
- package/corpus/templates/analytics/actions/rename-dashboard.ts +8 -7
- package/corpus/templates/analytics/actions/view-screen.ts +4 -23
- package/corpus/templates/analytics/app/components/ResourceLoadError.tsx +42 -0
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +85 -70
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +107 -89
- package/corpus/templates/analytics/app/components/layout/SidebarLoadError.tsx +24 -0
- package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +15 -5
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +4 -0
- package/corpus/templates/analytics/app/i18n-data.ts +40 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +6 -2
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/SqlPreview.tsx +36 -20
- package/corpus/templates/analytics/app/pages/adhoc/explorer/index.tsx +34 -20
- package/corpus/templates/analytics/app/pages/adhoc/explorer/use-explorer-config.ts +42 -41
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +43 -36
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +11 -2
- package/corpus/templates/analytics/app/root.tsx +13 -1
- package/corpus/templates/analytics/app/routes/_index.tsx +14 -2
- package/corpus/templates/analytics/changelog/2026-07-03-agent-llm-observability-dashboard.md +1 -1
- package/corpus/templates/analytics/changelog/2026-07-11-agent-feedback-sentiment-dashboard.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-analytics-chats-now-start-faster-by-loading-metric-definitio.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-command-and-sql-previews-now-respond-without-lag.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-command-search-now-reports-loading-failures-and-lets-you-ret.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-dashboard-navigation-now-loads-faster-and-reports-request-fa.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-inferred-message-sentiment-dashboard.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-microphone-settings-from-realtime-voice-mode-now-open-the-vo.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-more-dashboard-edit-paths-are-now-safe-against-simultaneous-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-renaming-a-dashboard-is-now-safe-against-simultaneous-agent-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-renaming-an-analysis-is-now-safe-against-simultaneous-edits.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-workspace-mounted-analytics-now-opens-ask-reliably-and-route.md +6 -0
- package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +37 -3
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +339 -1
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +1 -24
- package/corpus/templates/analytics/server/lib/dashboard-seeds.ts +0 -5
- package/corpus/templates/analytics/server/lib/dashboards-store.ts +289 -20
- package/corpus/templates/analytics/server/lib/data-dictionary-context.ts +106 -34
- package/corpus/templates/analytics/server/lib/demo-dashboards.ts +4 -1
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +11 -39
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/assets/app/components/create/RecentDraftsSection.tsx +30 -4
- package/corpus/templates/assets/app/routes/library.tsx +49 -5
- package/corpus/templates/assets/changelog/2026-07-11-library-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/calendar/.env.example +5 -0
- package/corpus/templates/calendar/app/components/calendar/EventCard.tsx +2 -2
- package/corpus/templates/calendar/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/calendar/app/i18n-data.ts +20 -0
- package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +37 -1
- package/corpus/templates/calendar/app/pages/BookingsList.tsx +20 -3
- package/corpus/templates/calendar/changelog/2026-07-11-booking-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-11-event-cards-give-subtle-press-feedback-and-smoother-hover.md +6 -0
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/clips/actions/decline-invite.ts +8 -0
- package/corpus/templates/clips/app/components/library/folder-tree.tsx +209 -187
- package/corpus/templates/clips/app/components/meetings/meeting-card.tsx +2 -2
- package/corpus/templates/clips/app/components/player/reactions-tray.tsx +17 -5
- package/corpus/templates/clips/app/components/player/scrubber.tsx +5 -3
- package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +2 -2
- package/corpus/templates/clips/app/components/workspace/insights-hub.tsx +119 -95
- package/corpus/templates/clips/app/global.css +45 -0
- package/corpus/templates/clips/app/root.tsx +4 -0
- package/corpus/templates/clips/app/routes/_app.notifications.tsx +23 -2
- package/corpus/templates/clips/app/routes/_app.trash.tsx +24 -2
- package/corpus/templates/clips/changelog/2026-07-11-controls-and-folders-now-move-more-smoothly.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-declining-an-invitation-now-requires-being-its-recipient.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-recording-overlays-are-lighter-weight-and-no-longer-cause-pa.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-workspace-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/overlay.css +34 -5
- package/corpus/templates/clips/chrome-extension/src/styles.css +2 -2
- package/corpus/templates/clips/desktop/src/styles.css +71 -26
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/content/actions/move-document.ts +34 -18
- package/corpus/templates/content/app/components/QueryErrorState.tsx +39 -0
- package/corpus/templates/content/app/components/editor/LinkHoverPreview.tsx +1 -1
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +225 -1435
- package/corpus/templates/content/app/components/editor/database/GalleryView.tsx +368 -0
- package/corpus/templates/content/app/components/editor/database/ListView.tsx +353 -0
- package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +580 -0
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +11 -2
- package/corpus/templates/content/app/global.css +19 -19
- package/corpus/templates/content/app/root.tsx +2 -2
- package/corpus/templates/content/app/routes/_app._index.tsx +11 -1
- package/corpus/templates/content/changelog/2026-07-11-document-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-editor-toggle-feedback-now-feels-more-responsive.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-moving-documents-at-the-same-time-no-longer-scrambles-their-.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-public-document-chats-now-start-faster-while-keeping-full-do.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-reopening-a-comment-now-uses-consistent-permissions-everywhe.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-sidebar-resizing-now-tracks-your-cursor-instantly-instead-of.md +6 -0
- package/corpus/templates/content/server/lib/public-documents.ts +47 -10
- package/corpus/templates/content/server/routes/api/comments/[id].patch.ts +24 -24
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/design/app/components/QueryErrorState.tsx +24 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +1 -1
- package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +5 -2
- package/corpus/templates/design/app/components/design/EditPanel.tsx +326 -319
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +198 -193
- package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +11 -4
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +1 -1
- package/corpus/templates/design/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/design/app/pages/DesignSystems.tsx +7 -1
- package/corpus/templates/design/app/pages/Index.tsx +14 -2
- package/corpus/templates/design/app/pages/Present.tsx +16 -3
- package/corpus/templates/design/app/pages/Templates.tsx +10 -4
- package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +484 -0
- package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +378 -0
- package/corpus/templates/design/app/pages/design-editor/design-data-geometry-utils.ts +138 -0
- package/corpus/templates/design/app/pages/design-editor/dom-utils.ts +15 -0
- package/corpus/templates/design/app/pages/design-editor/generation-prompt-directives.ts +180 -0
- package/corpus/templates/design/app/pages/design-editor/html-layer-positioning.ts +226 -0
- package/corpus/templates/design/app/pages/design-editor/png-export-render.ts +348 -0
- package/corpus/templates/design/app/pages/design-editor/screen-command-utils.ts +160 -0
- package/corpus/templates/design/app/pages/design-editor/text-edit-utils.ts +238 -0
- package/corpus/templates/design/app/pages/design-editor/tool-state.ts +23 -1
- package/corpus/templates/design/app/pages/design-editor/types.ts +25 -0
- package/corpus/templates/design/app/root.tsx +10 -1
- package/corpus/templates/design/changelog/2026-07-11-canvas-context-menus-now-open-without-motion-jitter.md +6 -0
- package/corpus/templates/design/changelog/2026-07-11-design-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/design/changelog/2026-07-11-inspector-tooltips-appear-instantly-as-you-sweep-across-icon.md +6 -0
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/dispatch/app/i18n/zh-TW.ts +10 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +123 -0
- package/corpus/templates/dispatch/app/routes/integrations.tsx +163 -144
- package/corpus/templates/dispatch/changelog/2026-07-11-dispatch-mcp-connections-now-start-with-safer-app-access-and.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-11-overview-and-chat-now-share-a-cleaner-more-stable-flow.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-11-query-errors-now-show-a-retry-option.md +6 -0
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +3 -3
- package/corpus/templates/forms/app/root.tsx +34 -8
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/macros/app/components/DailyProgress.tsx +25 -5
- package/corpus/templates/macros/app/components/QueryErrorState.tsx +31 -0
- package/corpus/templates/macros/app/components/WeightTracker.tsx +5 -1
- package/corpus/templates/macros/app/components/ui/button.tsx +1 -1
- package/corpus/templates/macros/app/components/ui/progress.tsx +1 -1
- package/corpus/templates/macros/app/components/ui/tabs.tsx +1 -1
- package/corpus/templates/macros/app/i18n/ar-SA.ts +2 -0
- package/corpus/templates/macros/app/i18n/de-DE.ts +2 -0
- package/corpus/templates/macros/app/i18n/en-US.ts +2 -0
- package/corpus/templates/macros/app/i18n/es-ES.ts +2 -0
- package/corpus/templates/macros/app/i18n/fr-FR.ts +2 -0
- package/corpus/templates/macros/app/i18n/hi-IN.ts +2 -0
- package/corpus/templates/macros/app/i18n/ja-JP.ts +2 -0
- package/corpus/templates/macros/app/i18n/ko-KR.ts +2 -0
- package/corpus/templates/macros/app/i18n/pt-BR.ts +2 -0
- package/corpus/templates/macros/app/i18n/zh-CN.ts +2 -0
- package/corpus/templates/macros/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/macros/app/routes/_index.tsx +22 -12
- package/corpus/templates/macros/app/routes/analytics.tsx +31 -10
- package/corpus/templates/macros/changelog/2026-07-11-daily-tracking-now-loads-and-updates-more-quickly.md +6 -0
- package/corpus/templates/macros/changelog/2026-07-11-data-load-failures-now-show-a-clear-error-with-a-retry-actio.md +6 -0
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/mail/.env.example +16 -11
- package/corpus/templates/mail/actions/list-emails.ts +39 -35
- package/corpus/templates/mail/app/components/email/ComposeModal.tsx +58 -6
- package/corpus/templates/mail/app/components/email/EmailListItem.tsx +35 -2
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +113 -104
- package/corpus/templates/mail/app/root.tsx +8 -10
- package/corpus/templates/mail/changelog/2026-07-11-compose-and-navigation-motion-now-feel-faster-and-smoother.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-11-swipe-to-archive-or-snooze-now-responds-to-quick-flicks-not-.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-11-the-assistant-now-sees-the-same-inbox-you-do-snoozed-mail-st.md +6 -0
- package/corpus/templates/mail/server/handlers/emails.ts +25 -69
- package/corpus/templates/mail/server/lib/list-inbox-emails.ts +169 -0
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/plan/.env.example +4 -0
- package/corpus/templates/plan/actions/create-plan-design.ts +89 -81
- package/corpus/templates/plan/actions/create-prototype-plan.ts +72 -59
- package/corpus/templates/plan/actions/create-ui-plan.ts +70 -55
- package/corpus/templates/plan/actions/create-visual-plan.ts +65 -51
- package/corpus/templates/plan/actions/update-local-plan-folder.ts +43 -30
- package/corpus/templates/plan/actions/update-visual-plan.ts +81 -64
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +17 -0
- package/corpus/templates/plan/app/components/ui/tabs.tsx +1 -1
- package/corpus/templates/plan/app/i18n/ar-SA.ts +10 -0
- package/corpus/templates/plan/app/i18n/de-DE.ts +10 -0
- package/corpus/templates/plan/app/i18n/en-US.ts +10 -0
- package/corpus/templates/plan/app/i18n/es-ES.ts +10 -0
- package/corpus/templates/plan/app/i18n/fr-FR.ts +10 -0
- package/corpus/templates/plan/app/i18n/hi-IN.ts +10 -0
- package/corpus/templates/plan/app/i18n/ja-JP.ts +10 -0
- package/corpus/templates/plan/app/i18n/ko-KR.ts +10 -0
- package/corpus/templates/plan/app/i18n/pt-BR.ts +10 -0
- package/corpus/templates/plan/app/i18n/zh-CN.ts +10 -0
- package/corpus/templates/plan/app/i18n/zh-TW.ts +10 -0
- package/corpus/templates/plan/app/lib/plan-local-bridge.ts +80 -1
- package/corpus/templates/plan/app/pages/PlansPage.tsx +152 -4
- package/corpus/templates/plan/app/root.tsx +11 -0
- package/corpus/templates/plan/changelog/2026-07-11-local-plans-now-explain-and-recover-from-browser-permission-.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-11-plan-edits-now-save-atomically-and-can-no-longer-partially-a.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-11-plan-lists-now-show-a-clear-error-with-a-retry-action-when-t.md +6 -0
- package/corpus/templates/plan/shared/plan-content.ts +546 -260
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/slides/actions/delete-slide-comment.ts +49 -0
- package/corpus/templates/slides/actions/update-slide-comment.ts +93 -0
- package/corpus/templates/slides/actions/view-screen.ts +14 -6
- package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +33 -10
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/GenerateSlidesDialog.tsx +2 -2
- package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +4 -2
- package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +4 -3
- package/corpus/templates/slides/app/context/DeckContext.tsx +9 -0
- package/corpus/templates/slides/app/i18n/ar-SA.ts +6 -0
- package/corpus/templates/slides/app/i18n/de-DE.ts +6 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +6 -0
- package/corpus/templates/slides/app/i18n/es-ES.ts +6 -0
- package/corpus/templates/slides/app/i18n/fr-FR.ts +6 -0
- package/corpus/templates/slides/app/i18n/hi-IN.ts +6 -0
- package/corpus/templates/slides/app/i18n/ja-JP.ts +6 -0
- package/corpus/templates/slides/app/i18n/ko-KR.ts +6 -0
- package/corpus/templates/slides/app/i18n/pt-BR.ts +6 -0
- package/corpus/templates/slides/app/i18n/zh-CN.ts +5 -0
- package/corpus/templates/slides/app/i18n/zh-TW.ts +5 -0
- package/corpus/templates/slides/app/pages/DesignSystems.tsx +23 -2
- package/corpus/templates/slides/app/pages/Index.tsx +29 -1
- package/corpus/templates/slides/changelog/2026-07-11-comment-load-failures-now-show-a-retry-action-instead-of-say.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-comment-pins-now-clear-with-a-faster-smoother-confirmation.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-deck-and-design-system-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-editor-toggles-and-toolbar-menus-now-animate-smoothly.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-the-assistant-can-now-resolve-reopen-and-delete-slide-commen.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-viewing-slides-no-longer-loads-every-deck-s-full-contents-in.md +6 -0
- package/corpus/templates/slides/server/routes/api/comments/[id].delete.ts +29 -48
- package/corpus/templates/slides/server/routes/api/comments/[id].patch.ts +29 -65
- package/dist/action.d.ts +23 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +13 -0
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +3 -0
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/context-directives-transform.d.ts +25 -0
- package/dist/agent/engine/context-directives-transform.d.ts.map +1 -0
- package/dist/agent/engine/context-directives-transform.js +53 -0
- package/dist/agent/engine/context-directives-transform.js.map +1 -0
- package/dist/agent/engine/continuation-dispatch-retry.d.ts +40 -0
- package/dist/agent/engine/continuation-dispatch-retry.d.ts.map +1 -0
- package/dist/agent/engine/continuation-dispatch-retry.js +109 -0
- package/dist/agent/engine/continuation-dispatch-retry.js.map +1 -0
- package/dist/agent/engine/tool-call-journal-seed.d.ts +46 -0
- package/dist/agent/engine/tool-call-journal-seed.d.ts.map +1 -0
- package/dist/agent/engine/tool-call-journal-seed.js +60 -0
- package/dist/agent/engine/tool-call-journal-seed.js.map +1 -0
- package/dist/agent/production-agent.d.ts +7 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +102 -222
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +7 -3
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/plan-local.d.ts.map +1 -1
- package/dist/cli/plan-local.js +8 -2
- package/dist/cli/plan-local.js.map +1 -1
- package/dist/cli/skills-content/assets-skill.d.ts +2 -0
- package/dist/cli/skills-content/assets-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/assets-skill.js +84 -0
- package/dist/cli/skills-content/assets-skill.js.map +1 -0
- package/dist/cli/skills-content/canvas.d.ts +4 -0
- package/dist/cli/skills-content/canvas.d.ts.map +1 -0
- package/dist/cli/skills-content/canvas.js +152 -0
- package/dist/cli/skills-content/canvas.js.map +1 -0
- package/dist/cli/skills-content/connection.d.ts +2 -0
- package/dist/cli/skills-content/connection.d.ts.map +1 -0
- package/dist/cli/skills-content/connection.js +53 -0
- package/dist/cli/skills-content/connection.js.map +1 -0
- package/dist/cli/skills-content/content-skill.d.ts +2 -0
- package/dist/cli/skills-content/content-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/content-skill.js +110 -0
- package/dist/cli/skills-content/content-skill.js.map +1 -0
- package/dist/cli/skills-content/design-exploration-skill.d.ts +2 -0
- package/dist/cli/skills-content/design-exploration-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/design-exploration-skill.js +119 -0
- package/dist/cli/skills-content/design-exploration-skill.js.map +1 -0
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts +2 -0
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/design-visual-edit-skill.js +229 -0
- package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -0
- package/dist/cli/skills-content/document-quality.d.ts +4 -0
- package/dist/cli/skills-content/document-quality.d.ts.map +1 -0
- package/dist/cli/skills-content/document-quality.js +195 -0
- package/dist/cli/skills-content/document-quality.js.map +1 -0
- package/dist/cli/skills-content/exemplar.d.ts +4 -0
- package/dist/cli/skills-content/exemplar.d.ts.map +1 -0
- package/dist/cli/skills-content/exemplar.js +68 -0
- package/dist/cli/skills-content/exemplar.js.map +1 -0
- package/dist/cli/skills-content/help.d.ts +2 -0
- package/dist/cli/skills-content/help.d.ts.map +1 -0
- package/dist/cli/skills-content/help.js +78 -0
- package/dist/cli/skills-content/help.js.map +1 -0
- package/dist/cli/skills-content/index.d.ts +23 -0
- package/dist/cli/skills-content/index.d.ts.map +1 -0
- package/dist/cli/skills-content/index.js +23 -0
- package/dist/cli/skills-content/index.js.map +1 -0
- package/dist/cli/skills-content/local-files.d.ts +2 -0
- package/dist/cli/skills-content/local-files.d.ts.map +1 -0
- package/dist/cli/skills-content/local-files.js +96 -0
- package/dist/cli/skills-content/local-files.js.map +1 -0
- package/dist/cli/skills-content/plan-setup-auth.d.ts +9 -0
- package/dist/cli/skills-content/plan-setup-auth.d.ts.map +1 -0
- package/dist/cli/skills-content/plan-setup-auth.js +81 -0
- package/dist/cli/skills-content/plan-setup-auth.js.map +1 -0
- package/dist/cli/skills-content/visual-plan-skill.d.ts +2 -0
- package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/visual-plan-skill.js +471 -0
- package/dist/cli/skills-content/visual-plan-skill.js.map +1 -0
- package/dist/cli/skills-content/visual-recap-skill.d.ts +2 -0
- package/dist/cli/skills-content/visual-recap-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/visual-recap-skill.js +548 -0
- package/dist/cli/skills-content/visual-recap-skill.js.map +1 -0
- package/dist/cli/skills-content/visualize-repo-skill.d.ts +2 -0
- package/dist/cli/skills-content/visualize-repo-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/visualize-repo-skill.js +94 -0
- package/dist/cli/skills-content/visualize-repo-skill.js.map +1 -0
- package/dist/cli/skills-content/wireframe.d.ts +4 -0
- package/dist/cli/skills-content/wireframe.d.ts.map +1 -0
- package/dist/cli/skills-content/wireframe.js +347 -0
- package/dist/cli/skills-content/wireframe.js.map +1 -0
- package/dist/cli/skills.d.ts +2 -10
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +2 -2710
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +4 -2
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +15 -3
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/FeedbackButton.js +2 -2
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/app-providers.d.ts +13 -5
- package/dist/client/app-providers.d.ts.map +1 -1
- package/dist/client/app-providers.js +9 -6
- package/dist/client/app-providers.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +4 -0
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +3 -3
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/composer/PastedTextChip.js +1 -1
- package/dist/client/composer/PastedTextChip.js.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts +3 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.js +35 -14
- package/dist/client/composer/RealtimeVoiceMode.js.map +1 -1
- package/dist/client/composer/TiptapComposer.js +1 -1
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/VoiceButton.d.ts +2 -0
- package/dist/client/composer/VoiceButton.d.ts.map +1 -1
- package/dist/client/composer/VoiceButton.js +9 -3
- package/dist/client/composer/VoiceButton.js.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.d.ts +5 -0
- package/dist/client/composer/useRealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.js +91 -12
- package/dist/client/composer/useRealtimeVoiceMode.js.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.js +4 -1
- package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
- package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionEditor.js +15 -5
- package/dist/client/extensions/ExtensionEditor.js.map +1 -1
- package/dist/client/extensions/ExtensionQueryErrorState.d.ts +8 -0
- package/dist/client/extensions/ExtensionQueryErrorState.d.ts.map +1 -0
- package/dist/client/extensions/ExtensionQueryErrorState.js +11 -0
- package/dist/client/extensions/ExtensionQueryErrorState.js.map +1 -0
- package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionSlot.js +17 -7
- package/dist/client/extensions/ExtensionSlot.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +17 -7
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.js +5 -3
- package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +21 -8
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/index.d.ts +0 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +0 -5
- package/dist/client/index.js.map +1 -1
- package/dist/client/progress/RunsTray.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.js +7 -3
- package/dist/client/progress/RunsTray.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +4 -0
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +2 -0
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +4 -0
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/tool-cells/EditCell.d.ts.map +1 -1
- package/dist/client/tool-cells/EditCell.js +2 -1
- package/dist/client/tool-cells/EditCell.js.map +1 -1
- package/dist/client/tool-cells/FilesChangedSummary.d.ts.map +1 -1
- package/dist/client/tool-cells/FilesChangedSummary.js +2 -1
- package/dist/client/tool-cells/FilesChangedSummary.js.map +1 -1
- package/dist/client/tool-cells/WriteCell.d.ts.map +1 -1
- package/dist/client/tool-cells/WriteCell.js +2 -1
- package/dist/client/tool-cells/WriteCell.js.map +1 -1
- package/dist/client/visual-style-controls.js +1 -1
- package/dist/client/visual-style-controls.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +36 -14
- package/dist/deploy/build.js.map +1 -1
- package/dist/integrations/google-docs-poller.d.ts +7 -0
- package/dist/integrations/google-docs-poller.d.ts.map +1 -1
- package/dist/integrations/google-docs-poller.js +13 -3
- package/dist/integrations/google-docs-poller.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +10 -0
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/webhook-handler.d.ts +11 -0
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +16 -4
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +12 -0
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +13 -3
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/localization/default-messages.d.ts +7 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +8 -1
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp/oauth-token.d.ts +1 -1
- package/dist/mcp/oauth-token.d.ts.map +1 -1
- package/dist/mcp/oauth-token.js +6 -1
- package/dist/mcp/oauth-token.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts.map +1 -1
- package/dist/observability/routes.js +32 -0
- package/dist/observability/routes.js.map +1 -1
- package/dist/observability/sentiment.d.ts +42 -0
- package/dist/observability/sentiment.d.ts.map +1 -0
- package/dist/observability/sentiment.js +196 -0
- package/dist/observability/sentiment.js.map +1 -0
- package/dist/observability/store.d.ts +5 -0
- package/dist/observability/store.d.ts.map +1 -1
- package/dist/observability/store.js +17 -0
- package/dist/observability/store.js.map +1 -1
- package/dist/observability/traces.d.ts +2 -0
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +42 -57
- package/dist/observability/traces.js.map +1 -1
- package/dist/observability/tracking-identity.d.ts +3 -0
- package/dist/observability/tracking-identity.d.ts.map +1 -0
- package/dist/observability/tracking-identity.js +51 -0
- package/dist/observability/tracking-identity.js.map +1 -0
- package/dist/observability/types.d.ts +10 -0
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js +3 -0
- package/dist/observability/types.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/storage.d.ts +6 -0
- package/dist/secrets/storage.d.ts.map +1 -1
- package/dist/secrets/storage.js +61 -3
- package/dist/secrets/storage.js.map +1 -1
- package/dist/server/agent-chat/action-filters-a2a.d.ts +50 -0
- package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -0
- package/dist/server/agent-chat/action-filters-a2a.js +127 -0
- package/dist/server/agent-chat/action-filters-a2a.js.map +1 -0
- package/dist/server/agent-chat/browser-team-tools.d.ts +21 -0
- package/dist/server/agent-chat/browser-team-tools.d.ts.map +1 -0
- package/dist/server/agent-chat/browser-team-tools.js +417 -0
- package/dist/server/agent-chat/browser-team-tools.js.map +1 -0
- package/dist/server/agent-chat/context-tools.d.ts +33 -0
- package/dist/server/agent-chat/context-tools.d.ts.map +1 -0
- package/dist/server/agent-chat/context-tools.js +520 -0
- package/dist/server/agent-chat/context-tools.js.map +1 -0
- package/dist/server/agent-chat/framework-prompts.d.ts +65 -0
- package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -0
- package/dist/server/agent-chat/framework-prompts.js +403 -0
- package/dist/server/agent-chat/framework-prompts.js.map +1 -0
- package/dist/server/agent-chat/lazy-fs.d.ts +2 -0
- package/dist/server/agent-chat/lazy-fs.d.ts.map +1 -0
- package/dist/server/agent-chat/lazy-fs.js +11 -0
- package/dist/server/agent-chat/lazy-fs.js.map +1 -0
- package/dist/server/agent-chat/mcp-glue.d.ts +9 -0
- package/dist/server/agent-chat/mcp-glue.d.ts.map +1 -0
- package/dist/server/agent-chat/mcp-glue.js +63 -0
- package/dist/server/agent-chat/mcp-glue.js.map +1 -0
- package/dist/server/agent-chat/plugin-options.d.ts +322 -0
- package/dist/server/agent-chat/plugin-options.d.ts.map +1 -0
- package/dist/server/agent-chat/plugin-options.js +2 -0
- package/dist/server/agent-chat/plugin-options.js.map +1 -0
- package/dist/server/agent-chat/process-run-failure.d.ts +12 -0
- package/dist/server/agent-chat/process-run-failure.d.ts.map +1 -0
- package/dist/server/agent-chat/process-run-failure.js +24 -0
- package/dist/server/agent-chat/process-run-failure.js.map +1 -0
- package/dist/server/agent-chat/prompt-resources.d.ts +28 -0
- package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -0
- package/dist/server/agent-chat/prompt-resources.js +514 -0
- package/dist/server/agent-chat/prompt-resources.js.map +1 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.d.ts +5 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.d.ts.map +1 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.js +53 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.js.map +1 -0
- package/dist/server/agent-chat/request-surface.d.ts +8 -0
- package/dist/server/agent-chat/request-surface.d.ts.map +1 -0
- package/dist/server/agent-chat/request-surface.js +56 -0
- package/dist/server/agent-chat/request-surface.js.map +1 -0
- package/dist/server/agent-chat/run-code-tools.d.ts +17 -0
- package/dist/server/agent-chat/run-code-tools.d.ts.map +1 -0
- package/dist/server/agent-chat/run-code-tools.js +55 -0
- package/dist/server/agent-chat/run-code-tools.js.map +1 -0
- package/dist/server/agent-chat/script-entries.d.ts +47 -0
- package/dist/server/agent-chat/script-entries.d.ts.map +1 -0
- package/dist/server/agent-chat/script-entries.js +633 -0
- package/dist/server/agent-chat/script-entries.js.map +1 -0
- package/dist/server/agent-chat/shared-thread.d.ts +33 -0
- package/dist/server/agent-chat/shared-thread.d.ts.map +1 -0
- package/dist/server/agent-chat/shared-thread.js +242 -0
- package/dist/server/agent-chat/shared-thread.js.map +1 -0
- package/dist/server/agent-chat/skill-frontmatter.d.ts +7 -0
- package/dist/server/agent-chat/skill-frontmatter.d.ts.map +1 -0
- package/dist/server/agent-chat/skill-frontmatter.js +26 -0
- package/dist/server/agent-chat/skill-frontmatter.js.map +1 -0
- package/dist/server/agent-chat-plugin.d.ts +45 -486
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +173 -3005
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/agent-teams.d.ts +10 -0
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +13 -3
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +50 -52
- package/dist/server/auth.js.map +1 -1
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +22 -21
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/edge.d.ts +1 -0
- package/dist/server/edge.d.ts.map +1 -1
- package/dist/server/edge.js +1 -0
- package/dist/server/edge.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +1 -16
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/realtime-voice.d.ts +3 -0
- package/dist/server/realtime-voice.d.ts.map +1 -1
- package/dist/server/realtime-voice.js +29 -5
- package/dist/server/realtime-voice.js.map +1 -1
- package/dist/server/request-origin.d.ts.map +1 -1
- package/dist/server/request-origin.js +6 -3
- package/dist/server/request-origin.js.map +1 -1
- package/dist/server/ssr-handler.d.ts.map +1 -1
- package/dist/server/ssr-handler.js +47 -2
- package/dist/server/ssr-handler.js.map +1 -1
- package/dist/sharing/access.d.ts +63 -3
- package/dist/sharing/access.d.ts.map +1 -1
- package/dist/sharing/access.js +53 -15
- package/dist/sharing/access.js.map +1 -1
- package/dist/sharing/registry.d.ts +7 -0
- package/dist/sharing/registry.d.ts.map +1 -1
- package/dist/sharing/registry.js.map +1 -1
- package/dist/styles/agent-native.css +15 -14
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/dist/templates/default/app/i18n/ar-SA.ts +6 -0
- package/dist/templates/default/app/i18n/de-DE.ts +6 -0
- package/dist/templates/default/app/i18n/en-US.ts +6 -0
- package/dist/templates/default/app/i18n/es-ES.ts +6 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +6 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +6 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +6 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +6 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +6 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +6 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +6 -0
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
- package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
- package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
- package/dist/templates/workspace-core/src/server/index.ts +4 -2
- package/dist/testing.d.ts +16 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +16 -0
- package/dist/testing.js.map +1 -0
- package/dist/triggers/dispatcher.d.ts +7 -0
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +13 -3
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/vite/client.d.ts +16 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +105 -2
- package/dist/vite/client.js.map +1 -1
- package/docs/content/authentication.mdx +3 -3
- package/docs/content/doctor.mdx +170 -0
- package/docs/content/external-agents.mdx +8 -7
- package/docs/content/locales/ar-SA/authentication.mdx +2 -2
- package/docs/content/locales/ar-SA/external-agents.mdx +8 -7
- package/docs/content/locales/ar-SA/mcp-protocol.mdx +1 -1
- package/docs/content/locales/ar-SA/security.mdx +2 -0
- package/docs/content/locales/de-DE/authentication.mdx +1 -1
- package/docs/content/locales/de-DE/external-agents.mdx +8 -7
- package/docs/content/locales/de-DE/mcp-protocol.mdx +1 -1
- package/docs/content/locales/de-DE/security.mdx +2 -0
- package/docs/content/locales/es-ES/authentication.mdx +2 -2
- package/docs/content/locales/es-ES/external-agents.mdx +8 -7
- package/docs/content/locales/es-ES/mcp-protocol.mdx +1 -1
- package/docs/content/locales/es-ES/security.mdx +2 -0
- package/docs/content/locales/fr-FR/authentication.mdx +1 -1
- package/docs/content/locales/fr-FR/external-agents.mdx +8 -7
- package/docs/content/locales/fr-FR/mcp-protocol.mdx +1 -1
- package/docs/content/locales/fr-FR/security.mdx +2 -0
- package/docs/content/locales/hi-IN/authentication.mdx +2 -2
- package/docs/content/locales/hi-IN/external-agents.mdx +8 -7
- package/docs/content/locales/hi-IN/mcp-protocol.mdx +1 -1
- package/docs/content/locales/hi-IN/security.mdx +2 -0
- package/docs/content/locales/ja-JP/authentication.mdx +2 -2
- package/docs/content/locales/ja-JP/external-agents.mdx +8 -7
- package/docs/content/locales/ja-JP/mcp-protocol.mdx +1 -1
- package/docs/content/locales/ja-JP/security.mdx +2 -0
- package/docs/content/locales/ko-KR/authentication.mdx +2 -2
- package/docs/content/locales/ko-KR/external-agents.mdx +8 -7
- package/docs/content/locales/ko-KR/mcp-protocol.mdx +1 -1
- package/docs/content/locales/ko-KR/security.mdx +2 -0
- package/docs/content/locales/pt-BR/authentication.mdx +2 -2
- package/docs/content/locales/pt-BR/external-agents.mdx +8 -7
- package/docs/content/locales/pt-BR/mcp-protocol.mdx +1 -1
- package/docs/content/locales/pt-BR/security.mdx +2 -0
- package/docs/content/locales/zh-CN/authentication.mdx +2 -2
- package/docs/content/locales/zh-CN/external-agents.mdx +8 -7
- package/docs/content/locales/zh-CN/mcp-protocol.mdx +1 -1
- package/docs/content/locales/zh-CN/security.mdx +2 -0
- package/docs/content/locales/zh-TW/authentication.mdx +2 -2
- package/docs/content/locales/zh-TW/external-agents.mdx +8 -7
- package/docs/content/locales/zh-TW/mcp-protocol.mdx +1 -1
- package/docs/content/locales/zh-TW/security.mdx +2 -0
- package/docs/content/mcp-protocol.mdx +1 -1
- package/docs/content/security.mdx +2 -0
- package/package.json +6 -2
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/src/templates/default/app/i18n/ar-SA.ts +6 -0
- package/src/templates/default/app/i18n/de-DE.ts +6 -0
- package/src/templates/default/app/i18n/en-US.ts +6 -0
- package/src/templates/default/app/i18n/es-ES.ts +6 -0
- package/src/templates/default/app/i18n/fr-FR.ts +6 -0
- package/src/templates/default/app/i18n/hi-IN.ts +6 -0
- package/src/templates/default/app/i18n/ja-JP.ts +6 -0
- package/src/templates/default/app/i18n/ko-KR.ts +6 -0
- package/src/templates/default/app/i18n/pt-BR.ts +6 -0
- package/src/templates/default/app/i18n/zh-CN.ts +6 -0
- package/src/templates/default/app/i18n/zh-TW.ts +6 -0
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
- package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
- package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
- package/src/templates/workspace-core/src/server/index.ts +4 -2
- package/corpus/core/src/client/ProductionAgentPanel.tsx +0 -9
- package/corpus/core/src/client/auth-redirect-url.ts +0 -23
- package/corpus/core/src/client/useProductionAgent.ts +0 -253
- package/corpus/core/src/shared/auth-redirect-url.ts +0 -1
- package/corpus/templates/analytics/app/pages/Index.tsx +0 -16
- package/corpus/templates/analytics/seeds/dashboards/agent-observability-llm.json +0 -173
- package/dist/client/ProductionAgentPanel.d.ts +0 -6
- package/dist/client/ProductionAgentPanel.d.ts.map +0 -1
- package/dist/client/ProductionAgentPanel.js +0 -6
- package/dist/client/ProductionAgentPanel.js.map +0 -1
- package/dist/client/auth-redirect-url.d.ts +0 -2
- package/dist/client/auth-redirect-url.d.ts.map +0 -1
- package/dist/client/auth-redirect-url.js +0 -19
- package/dist/client/auth-redirect-url.js.map +0 -1
- package/dist/client/useProductionAgent.d.ts +0 -24
- package/dist/client/useProductionAgent.d.ts.map +0 -1
- package/dist/client/useProductionAgent.js +0 -179
- package/dist/client/useProductionAgent.js.map +0 -1
- package/dist/shared/auth-redirect-url.d.ts +0 -2
- package/dist/shared/auth-redirect-url.d.ts.map +0 -1
- package/dist/shared/auth-redirect-url.js +0 -2
- package/dist/shared/auth-redirect-url.js.map +0 -1
|
@@ -15,6 +15,8 @@ import {
|
|
|
15
15
|
import { normalizePlanContent } from "../server/plan-content.js";
|
|
16
16
|
import { referencedBlockIdsForPlanComments } from "../server/plan-mdx.js";
|
|
17
17
|
import {
|
|
18
|
+
agentPlanContentPatchesSchema,
|
|
19
|
+
agentPlanContentSchema,
|
|
18
20
|
applyPlanContentPatches,
|
|
19
21
|
planContentPatchesSchema,
|
|
20
22
|
planContentSchema,
|
|
@@ -22,41 +24,52 @@ import {
|
|
|
22
24
|
} from "../shared/plan-content.js";
|
|
23
25
|
import type { PlanKind } from "../shared/types.js";
|
|
24
26
|
|
|
27
|
+
const CONTENT_DESCRIPTION =
|
|
28
|
+
"Full structured content replacement. Prefer contentPatches for targeted edits.";
|
|
29
|
+
const CONTENT_PATCHES_DESCRIPTION =
|
|
30
|
+
"Targeted structured content edits addressed by stable block/prototype/canvas ids.";
|
|
31
|
+
|
|
32
|
+
// Named so `agentInputSchema` below can `.extend()` it with compact
|
|
33
|
+
// `content`/`contentPatches` fields instead of duplicating every other key.
|
|
34
|
+
const updateLocalPlanFolderSchema = z.object({
|
|
35
|
+
slug: z
|
|
36
|
+
.string()
|
|
37
|
+
.min(1)
|
|
38
|
+
.regex(/^[A-Za-z0-9._-]+$/)
|
|
39
|
+
.describe("Folder name under PLAN_LOCAL_DIR, for example checkout-review."),
|
|
40
|
+
path: z
|
|
41
|
+
.string()
|
|
42
|
+
.optional()
|
|
43
|
+
.describe(
|
|
44
|
+
"Optional repo-relative folder path, for example plans/checkout-review.",
|
|
45
|
+
),
|
|
46
|
+
title: z.string().optional().describe("Plan title."),
|
|
47
|
+
brief: z
|
|
48
|
+
.string()
|
|
49
|
+
.optional()
|
|
50
|
+
.describe("One-line plan summary shown under the title."),
|
|
51
|
+
kind: localPlanKindSchema.optional(),
|
|
52
|
+
content: planContentSchema.optional().describe(CONTENT_DESCRIPTION),
|
|
53
|
+
contentPatches: planContentPatchesSchema
|
|
54
|
+
.optional()
|
|
55
|
+
.default([])
|
|
56
|
+
.describe(CONTENT_PATCHES_DESCRIPTION),
|
|
57
|
+
note: z.string().optional().describe("Short audit note for callers."),
|
|
58
|
+
});
|
|
59
|
+
|
|
25
60
|
export default defineAction({
|
|
26
61
|
description:
|
|
27
62
|
"Update a DB-free local Agent-Native Plan MDX folder from PLAN_LOCAL_DIR or an optional repo-relative path. Applies the same structured contentPatches used by update-visual-plan, writes plan.mdx/canvas.mdx/prototype.mdx back to the same local folder, and never writes to the database.",
|
|
28
|
-
schema:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
),
|
|
36
|
-
path: z
|
|
37
|
-
.string()
|
|
38
|
-
.optional()
|
|
39
|
-
.describe(
|
|
40
|
-
"Optional repo-relative folder path, for example plans/checkout-review.",
|
|
41
|
-
),
|
|
42
|
-
title: z.string().optional().describe("Plan title."),
|
|
43
|
-
brief: z
|
|
44
|
-
.string()
|
|
45
|
-
.optional()
|
|
46
|
-
.describe("One-line plan summary shown under the title."),
|
|
47
|
-
kind: localPlanKindSchema.optional(),
|
|
48
|
-
content: planContentSchema
|
|
49
|
-
.optional()
|
|
50
|
-
.describe(
|
|
51
|
-
"Full structured content replacement. Prefer contentPatches for targeted edits.",
|
|
52
|
-
),
|
|
53
|
-
contentPatches: planContentPatchesSchema
|
|
63
|
+
schema: updateLocalPlanFolderSchema,
|
|
64
|
+
// ADVERTISED-ONLY: same shape, but `content`/`contentPatches` swap the deep
|
|
65
|
+
// per-block-type union for a compact `type`-enum stand-in. Runtime
|
|
66
|
+
// validation always runs the full schema above — see the `actions` skill.
|
|
67
|
+
agentInputSchema: updateLocalPlanFolderSchema.extend({
|
|
68
|
+
content: agentPlanContentSchema.optional().describe(CONTENT_DESCRIPTION),
|
|
69
|
+
contentPatches: agentPlanContentPatchesSchema
|
|
54
70
|
.optional()
|
|
55
71
|
.default([])
|
|
56
|
-
.describe(
|
|
57
|
-
"Targeted structured content edits addressed by stable block/prototype/canvas ids.",
|
|
58
|
-
),
|
|
59
|
-
note: z.string().optional().describe("Short audit note for callers."),
|
|
72
|
+
.describe(CONTENT_PATCHES_DESCRIPTION),
|
|
60
73
|
}),
|
|
61
74
|
requiresAuth: false,
|
|
62
75
|
publicAgent: {
|
|
@@ -49,6 +49,8 @@ import {
|
|
|
49
49
|
sectionInputSchema,
|
|
50
50
|
} from "../server/plans.js";
|
|
51
51
|
import {
|
|
52
|
+
agentPlanContentPatchesSchema,
|
|
53
|
+
agentPlanContentSchema,
|
|
52
54
|
applyPlanContentPatches,
|
|
53
55
|
planContentPatchesSchema,
|
|
54
56
|
planContentSchema,
|
|
@@ -403,67 +405,81 @@ function contentPatchDetails(input: {
|
|
|
403
405
|
});
|
|
404
406
|
}
|
|
405
407
|
|
|
408
|
+
const CONTENT_DESCRIPTION =
|
|
409
|
+
"Full structured content replacement. Prefer contentPatches for targeted edits; use this only for broad restructuring.";
|
|
410
|
+
const CONTENT_PATCHES_DESCRIPTION =
|
|
411
|
+
"Targeted structured content edits addressed by stable id. For live plans this is the preferred edit path; patch-visual-plan-source is only for exported MDX folders. Supported ops: set-metadata for title/brief, set-prototype / remove-prototype / update-prototype-screen / patch-prototype-html for live prototype surfaces; update-block / replace-block, update-rich-text, patch-wireframe-html, patch-diagram-html, update-wireframe-node, replace-wireframe-screen, update-canvas-frame, update-canvas-annotation / append-canvas-annotation, append-block / remove-block, update-custom-html.";
|
|
412
|
+
|
|
413
|
+
// Named so `agentInputSchema` below can `.extend()` it with compact
|
|
414
|
+
// `content`/`contentPatches` fields instead of duplicating every other key.
|
|
415
|
+
const updateVisualPlanSchema = z.object({
|
|
416
|
+
planId: z.string().describe("Plan ID"),
|
|
417
|
+
title: z.string().optional().describe("Plan title."),
|
|
418
|
+
brief: z
|
|
419
|
+
.string()
|
|
420
|
+
.optional()
|
|
421
|
+
.describe("One-line plan summary shown under the title."),
|
|
422
|
+
status: planStatusSchema
|
|
423
|
+
.optional()
|
|
424
|
+
.describe(
|
|
425
|
+
'Plan status. Setting "approved" also records approvedAt timestamp.',
|
|
426
|
+
),
|
|
427
|
+
currentFocus: z
|
|
428
|
+
.string()
|
|
429
|
+
.optional()
|
|
430
|
+
.describe("Current agent focus label shown in the review surface."),
|
|
431
|
+
html: z
|
|
432
|
+
.string()
|
|
433
|
+
.optional()
|
|
434
|
+
.describe(
|
|
435
|
+
"Legacy: a standalone HTML document. Setting this NULLS structured content — blocks, contentPatches, inline editing, and MDX round-trip all stop working for this plan. Only for preserving a pre-existing HTML artifact; never author new plans this way.",
|
|
436
|
+
),
|
|
437
|
+
content: planContentSchema.optional().describe(CONTENT_DESCRIPTION),
|
|
438
|
+
contentPatches: planContentPatchesSchema
|
|
439
|
+
.optional()
|
|
440
|
+
.default([])
|
|
441
|
+
.describe(CONTENT_PATCHES_DESCRIPTION),
|
|
442
|
+
markdown: z
|
|
443
|
+
.string()
|
|
444
|
+
.optional()
|
|
445
|
+
.describe("Legacy markdown source. Prefer content blocks."),
|
|
446
|
+
sections: z
|
|
447
|
+
.array(sectionInputSchema)
|
|
448
|
+
.optional()
|
|
449
|
+
.default([])
|
|
450
|
+
.describe("Legacy section array. Prefer content blocks."),
|
|
451
|
+
comments: z
|
|
452
|
+
.array(commentInputSchema)
|
|
453
|
+
.optional()
|
|
454
|
+
.default([])
|
|
455
|
+
.describe(
|
|
456
|
+
"Legacy comment array. Prefer reply-to-plan-comment / resolve-plan-comment for new comments.",
|
|
457
|
+
),
|
|
458
|
+
consumedCommentIds: z
|
|
459
|
+
.array(z.string())
|
|
460
|
+
.optional()
|
|
461
|
+
.default([])
|
|
462
|
+
.describe("Prefer consume-plan-feedback for marking feedback consumed."),
|
|
463
|
+
note: z
|
|
464
|
+
.string()
|
|
465
|
+
.optional()
|
|
466
|
+
.describe("Short label saved as the version-history snapshot label."),
|
|
467
|
+
});
|
|
468
|
+
|
|
406
469
|
export default defineAction({
|
|
407
470
|
description:
|
|
408
471
|
"Update an Agent-Native Plan's structured content blocks, prototype screens, sections, comments, or status. Prefer contentPatches for targeted edits. Use full content only for broad restructuring. Works on plans and recaps alike when you have editor access; with viewer access (common on PR recaps published by CI) only comment-only calls succeed — to change a recap you cannot edit, publish a replacement with create-visual-recap instead of retrying this call.",
|
|
409
|
-
schema:
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
.optional()
|
|
418
|
-
.describe(
|
|
419
|
-
'Plan status. Setting "approved" also records approvedAt timestamp.',
|
|
420
|
-
),
|
|
421
|
-
currentFocus: z
|
|
422
|
-
.string()
|
|
423
|
-
.optional()
|
|
424
|
-
.describe("Current agent focus label shown in the review surface."),
|
|
425
|
-
html: z
|
|
426
|
-
.string()
|
|
427
|
-
.optional()
|
|
428
|
-
.describe(
|
|
429
|
-
"Legacy: a standalone HTML document. Setting this NULLS structured content — blocks, contentPatches, inline editing, and MDX round-trip all stop working for this plan. Only for preserving a pre-existing HTML artifact; never author new plans this way.",
|
|
430
|
-
),
|
|
431
|
-
content: planContentSchema
|
|
432
|
-
.optional()
|
|
433
|
-
.describe(
|
|
434
|
-
"Full structured content replacement. Prefer contentPatches for targeted edits; use this only for broad restructuring.",
|
|
435
|
-
),
|
|
436
|
-
contentPatches: planContentPatchesSchema
|
|
472
|
+
schema: updateVisualPlanSchema,
|
|
473
|
+
// ADVERTISED-ONLY: same top-level shape, but `content`/`contentPatches`
|
|
474
|
+
// swap the deep per-block-type union for a compact `type`-enum stand-in.
|
|
475
|
+
// Runtime validation always runs the full schema above — see the `actions`
|
|
476
|
+
// skill.
|
|
477
|
+
agentInputSchema: updateVisualPlanSchema.extend({
|
|
478
|
+
content: agentPlanContentSchema.optional().describe(CONTENT_DESCRIPTION),
|
|
479
|
+
contentPatches: agentPlanContentPatchesSchema
|
|
437
480
|
.optional()
|
|
438
481
|
.default([])
|
|
439
|
-
.describe(
|
|
440
|
-
"Targeted structured content edits addressed by stable id. For live plans this is the preferred edit path; patch-visual-plan-source is only for exported MDX folders. Supported ops: set-metadata for title/brief, set-prototype / remove-prototype / update-prototype-screen / patch-prototype-html for live prototype surfaces; update-block / replace-block, update-rich-text, patch-wireframe-html, patch-diagram-html, update-wireframe-node, replace-wireframe-screen, update-canvas-frame, update-canvas-annotation / append-canvas-annotation, append-block / remove-block, update-custom-html.",
|
|
441
|
-
),
|
|
442
|
-
markdown: z
|
|
443
|
-
.string()
|
|
444
|
-
.optional()
|
|
445
|
-
.describe("Legacy markdown source. Prefer content blocks."),
|
|
446
|
-
sections: z
|
|
447
|
-
.array(sectionInputSchema)
|
|
448
|
-
.optional()
|
|
449
|
-
.default([])
|
|
450
|
-
.describe("Legacy section array. Prefer content blocks."),
|
|
451
|
-
comments: z
|
|
452
|
-
.array(commentInputSchema)
|
|
453
|
-
.optional()
|
|
454
|
-
.default([])
|
|
455
|
-
.describe(
|
|
456
|
-
"Legacy comment array. Prefer reply-to-plan-comment / resolve-plan-comment for new comments.",
|
|
457
|
-
),
|
|
458
|
-
consumedCommentIds: z
|
|
459
|
-
.array(z.string())
|
|
460
|
-
.optional()
|
|
461
|
-
.default([])
|
|
462
|
-
.describe("Prefer consume-plan-feedback for marking feedback consumed."),
|
|
463
|
-
note: z
|
|
464
|
-
.string()
|
|
465
|
-
.optional()
|
|
466
|
-
.describe("Short label saved as the version-history snapshot label."),
|
|
482
|
+
.describe(CONTENT_PATCHES_DESCRIPTION),
|
|
467
483
|
}),
|
|
468
484
|
publicAgent: {
|
|
469
485
|
expose: true,
|
|
@@ -774,13 +790,14 @@ export default defineAction({
|
|
|
774
790
|
});
|
|
775
791
|
}
|
|
776
792
|
|
|
777
|
-
//
|
|
778
|
-
// (
|
|
779
|
-
//
|
|
780
|
-
//
|
|
781
|
-
//
|
|
782
|
-
//
|
|
783
|
-
|
|
793
|
+
// Async transactions are safe on every driver here: better-sqlite3's
|
|
794
|
+
// normally-sync-only transaction() is patched to support async callbacks
|
|
795
|
+
// in packages/core/src/db/create-get-db.ts (patchBetterSqliteTransactions,
|
|
796
|
+
// wired into createGetDb for local sqlite urls), matching libsql/Postgres.
|
|
797
|
+
// See restore-plan-version.ts for the same pattern. The leading
|
|
798
|
+
// optimistic-lock UPDATE still guards concurrent writes; a thrown error
|
|
799
|
+
// (e.g. the zero-rows-affected conflict below) rolls back the whole block.
|
|
800
|
+
await db.transaction(async (tx) => {
|
|
784
801
|
// guard:allow-unscoped -- gated above by editor access, or by public
|
|
785
802
|
// viewer access plus new-open-human-comment / canvas-review-markup validation.
|
|
786
803
|
//
|
|
@@ -959,7 +976,7 @@ export default defineAction({
|
|
|
959
976
|
createdBy: onlyReviewerCommentWork ? "human" : "agent",
|
|
960
977
|
createdAt: now,
|
|
961
978
|
});
|
|
962
|
-
})
|
|
979
|
+
});
|
|
963
980
|
|
|
964
981
|
// Make an agent content edit visible on the plan-presence doc: light the AI
|
|
965
982
|
// avatar in the header PresenceBar and glow the patched block(s) for ~6s.
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
IconMessageCircle,
|
|
27
27
|
IconPin,
|
|
28
28
|
IconPlus,
|
|
29
|
+
IconRefresh,
|
|
29
30
|
IconSettings,
|
|
30
31
|
} from "@tabler/icons-react";
|
|
31
32
|
import {
|
|
@@ -494,6 +495,22 @@ function PlansSidebarSection({ collapsed }: { collapsed: boolean }) {
|
|
|
494
495
|
<Skeleton key={item} className="h-8 rounded-md bg-sidebar-accent" />
|
|
495
496
|
))}
|
|
496
497
|
</div>
|
|
498
|
+
) : plansQuery.isError ? (
|
|
499
|
+
<div className="grid gap-2 rounded-md border border-sidebar-border/70 p-2">
|
|
500
|
+
<p className="text-xs leading-5 text-sidebar-foreground/65">
|
|
501
|
+
{t("plansPage.loadError.didNotLoadTitle")}
|
|
502
|
+
</p>
|
|
503
|
+
<Button
|
|
504
|
+
type="button"
|
|
505
|
+
variant="outline"
|
|
506
|
+
size="sm"
|
|
507
|
+
className="h-7 justify-center text-xs"
|
|
508
|
+
onClick={() => void plansQuery.refetch()}
|
|
509
|
+
>
|
|
510
|
+
<IconRefresh className="size-3.5" />
|
|
511
|
+
{t("plansPage.loadError.retry")}
|
|
512
|
+
</Button>
|
|
513
|
+
</div>
|
|
497
514
|
) : plans.length === 0 ? (
|
|
498
515
|
<p className="px-2 py-1.5 text-xs leading-5 text-sidebar-foreground/55">
|
|
499
516
|
{t("sidebar.noPlans")}
|
|
@@ -27,7 +27,7 @@ const TabsTrigger = React.forwardRef<
|
|
|
27
27
|
<TabsPrimitive.Trigger
|
|
28
28
|
ref={ref}
|
|
29
29
|
className={cn(
|
|
30
|
-
"inline-flex items-center justify-center whitespace-nowrap rounded-sm border border-transparent px-3 py-1.5 text-sm font-medium ring-offset-background transition-
|
|
30
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded-sm border border-transparent px-3 py-1.5 text-sm font-medium ring-offset-background transition-[color,background-color,box-shadow] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground",
|
|
31
31
|
className,
|
|
32
32
|
)}
|
|
33
33
|
{...props}
|
|
@@ -434,6 +434,16 @@ const messages = {
|
|
|
434
434
|
title: "لم يتم العثور على الخطة المحلية",
|
|
435
435
|
message: 'تعذرت قراءة مجلد الخطة المحلية "{{slug}}".',
|
|
436
436
|
},
|
|
437
|
+
localPlanConnection: {
|
|
438
|
+
promptTitle: "الاتصال بهذه الخطة المحلية",
|
|
439
|
+
promptMessage:
|
|
440
|
+
"تظل هذه الخطة على جهازك. يحتاج Plan إلى إذن المتصفح لقراءتها من الجسر المحلي.",
|
|
441
|
+
deniedTitle: "تم حظر الوصول إلى الشبكة المحلية",
|
|
442
|
+
deniedMessage:
|
|
443
|
+
"افتح إعدادات الموقع في متصفحك لـ Plan، واسمح بالوصول إلى الشبكة المحلية، ثم تحقق مرة أخرى.",
|
|
444
|
+
connect: "الاتصال بالخطة المحلية",
|
|
445
|
+
checkAgain: "التحقق مرة أخرى",
|
|
446
|
+
},
|
|
437
447
|
overview: {
|
|
438
448
|
title: "يخطط",
|
|
439
449
|
documentCount_other: "{{count}} المستندات",
|
|
@@ -448,6 +448,16 @@ const messages = {
|
|
|
448
448
|
title: "Lokaler Plan nicht gefunden",
|
|
449
449
|
message: "Der lokale Planordner „{{slug}}“ konnte nicht gelesen werden.",
|
|
450
450
|
},
|
|
451
|
+
localPlanConnection: {
|
|
452
|
+
promptTitle: "Mit diesem lokalen Plan verbinden",
|
|
453
|
+
promptMessage:
|
|
454
|
+
"Dieser Plan bleibt auf deinem Computer. Plan benötigt die Berechtigung des Browsers, um ihn über die lokale Verbindung zu lesen.",
|
|
455
|
+
deniedTitle: "Der Zugriff auf das lokale Netzwerk ist blockiert",
|
|
456
|
+
deniedMessage:
|
|
457
|
+
"Öffne die Website-Einstellungen deines Browsers für Plan, erlaube den Zugriff auf das lokale Netzwerk und prüfe es dann erneut.",
|
|
458
|
+
connect: "Mit lokalem Plan verbinden",
|
|
459
|
+
checkAgain: "Erneut prüfen",
|
|
460
|
+
},
|
|
451
461
|
overview: {
|
|
452
462
|
title: "planen",
|
|
453
463
|
documentCount_other: "{{count}} Dokumente",
|
|
@@ -433,6 +433,16 @@ const messages = {
|
|
|
433
433
|
title: "Local plan not found",
|
|
434
434
|
message: 'The local plan folder "{{slug}}" could not be read.',
|
|
435
435
|
},
|
|
436
|
+
localPlanConnection: {
|
|
437
|
+
promptTitle: "Connect to this local plan",
|
|
438
|
+
promptMessage:
|
|
439
|
+
"This plan stays on your computer. Plan needs browser permission to read it from the local bridge.",
|
|
440
|
+
deniedTitle: "Local network access is blocked",
|
|
441
|
+
deniedMessage:
|
|
442
|
+
"Open your browser's site settings for Plan, allow local network access, then check again.",
|
|
443
|
+
connect: "Connect to local plan",
|
|
444
|
+
checkAgain: "Check again",
|
|
445
|
+
},
|
|
436
446
|
overview: {
|
|
437
447
|
title: "Plans",
|
|
438
448
|
documentCount_one: "{{count}} document",
|
|
@@ -500,6 +500,16 @@ const messages = {
|
|
|
500
500
|
message: 'No se pudo leer la carpeta del plan local "{{slug}}".',
|
|
501
501
|
title: "Plan local no encontrado",
|
|
502
502
|
},
|
|
503
|
+
localPlanConnection: {
|
|
504
|
+
promptTitle: "Conectarse a este plan local",
|
|
505
|
+
promptMessage:
|
|
506
|
+
"Este plan permanece en tu ordenador. Plan necesita permiso del navegador para leerlo desde el puente local.",
|
|
507
|
+
deniedTitle: "El acceso a la red local está bloqueado",
|
|
508
|
+
deniedMessage:
|
|
509
|
+
"Abre la configuración del sitio de Plan en el navegador, permite el acceso a la red local y vuelve a comprobarlo.",
|
|
510
|
+
connect: "Conectarse al plan local",
|
|
511
|
+
checkAgain: "Comprobar de nuevo",
|
|
512
|
+
},
|
|
503
513
|
loggedOut: {
|
|
504
514
|
copied: "copiado",
|
|
505
515
|
copy: "Copiar",
|
|
@@ -502,6 +502,16 @@ const messages = {
|
|
|
502
502
|
message: 'Le dossier du plan local "{{slug}}" n\'a pas pu être lu.',
|
|
503
503
|
title: "Plan local introuvable",
|
|
504
504
|
},
|
|
505
|
+
localPlanConnection: {
|
|
506
|
+
promptTitle: "Se connecter à ce plan local",
|
|
507
|
+
promptMessage:
|
|
508
|
+
"Ce plan reste sur votre ordinateur. Plan a besoin de l’autorisation du navigateur pour le lire depuis le pont local.",
|
|
509
|
+
deniedTitle: "L’accès au réseau local est bloqué",
|
|
510
|
+
deniedMessage:
|
|
511
|
+
"Ouvrez les paramètres du site de Plan dans votre navigateur, autorisez l’accès au réseau local, puis vérifiez à nouveau.",
|
|
512
|
+
connect: "Se connecter au plan local",
|
|
513
|
+
checkAgain: "Vérifier à nouveau",
|
|
514
|
+
},
|
|
505
515
|
loggedOut: {
|
|
506
516
|
copied: "Copié",
|
|
507
517
|
copy: "Copie",
|
|
@@ -431,6 +431,16 @@ const messages = {
|
|
|
431
431
|
title: "स्थानीय योजना नहीं मिली",
|
|
432
432
|
message: 'स्थानीय योजना फ़ोल्डर "{{slug}}" पढ़ा नहीं जा सका।',
|
|
433
433
|
},
|
|
434
|
+
localPlanConnection: {
|
|
435
|
+
promptTitle: "इस स्थानीय योजना से कनेक्ट करें",
|
|
436
|
+
promptMessage:
|
|
437
|
+
"यह योजना आपके कंप्यूटर पर ही रहती है। इसे स्थानीय ब्रिज से पढ़ने के लिए Plan को ब्राउज़र की अनुमति चाहिए।",
|
|
438
|
+
deniedTitle: "स्थानीय नेटवर्क की पहुँच अवरुद्ध है",
|
|
439
|
+
deniedMessage:
|
|
440
|
+
"अपने ब्राउज़र में Plan की साइट सेटिंग खोलें, स्थानीय नेटवर्क की पहुँच की अनुमति दें और फिर दोबारा जाँचें।",
|
|
441
|
+
connect: "स्थानीय योजना से कनेक्ट करें",
|
|
442
|
+
checkAgain: "फिर से जाँचें",
|
|
443
|
+
},
|
|
434
444
|
overview: {
|
|
435
445
|
title: "योजना",
|
|
436
446
|
documentCount_other: "{{count}} दस्तावेज़",
|
|
@@ -443,6 +443,16 @@ const messages = {
|
|
|
443
443
|
title: "ローカルプランが見つかりません",
|
|
444
444
|
message: "ローカル プラン フォルダー「{{slug}}」を読み取れませんでした。",
|
|
445
445
|
},
|
|
446
|
+
localPlanConnection: {
|
|
447
|
+
promptTitle: "このローカルプランに接続",
|
|
448
|
+
promptMessage:
|
|
449
|
+
"このプランはコンピューター上に保存されています。ローカルブリッジから読み取るには、Plan にブラウザーの許可が必要です。",
|
|
450
|
+
deniedTitle: "ローカルネットワークへのアクセスがブロックされています",
|
|
451
|
+
deniedMessage:
|
|
452
|
+
"ブラウザーで Plan のサイト設定を開き、ローカルネットワークへのアクセスを許可してから、もう一度確認してください。",
|
|
453
|
+
connect: "ローカルプランに接続",
|
|
454
|
+
checkAgain: "もう一度確認",
|
|
455
|
+
},
|
|
446
456
|
overview: {
|
|
447
457
|
title: "计划",
|
|
448
458
|
documentCount_other: "{{count}} 个文档",
|
|
@@ -432,6 +432,16 @@ const messages = {
|
|
|
432
432
|
title: "지역 계획을 찾을 수 없습니다.",
|
|
433
433
|
message: '로컬 계획 폴더 "{{slug}}"을(를) 읽을 수 없습니다.',
|
|
434
434
|
},
|
|
435
|
+
localPlanConnection: {
|
|
436
|
+
promptTitle: "이 로컬 계획에 연결",
|
|
437
|
+
promptMessage:
|
|
438
|
+
"이 계획은 컴퓨터에 그대로 보관됩니다. 로컬 브리지에서 읽으려면 Plan에 브라우저 권한이 필요합니다.",
|
|
439
|
+
deniedTitle: "로컬 네트워크 접근이 차단되었습니다",
|
|
440
|
+
deniedMessage:
|
|
441
|
+
"브라우저에서 Plan의 사이트 설정을 열고 로컬 네트워크 접근을 허용한 다음 다시 확인하세요.",
|
|
442
|
+
connect: "로컬 계획에 연결",
|
|
443
|
+
checkAgain: "다시 확인",
|
|
444
|
+
},
|
|
435
445
|
overview: {
|
|
436
446
|
title: "计划",
|
|
437
447
|
documentCount_other: "{{count}} 个文档",
|
|
@@ -445,6 +445,16 @@ const messages = {
|
|
|
445
445
|
title: "Plano local não encontrado",
|
|
446
446
|
message: 'A pasta do plano local "{{slug}}" não pôde ser lida.',
|
|
447
447
|
},
|
|
448
|
+
localPlanConnection: {
|
|
449
|
+
promptTitle: "Conectar a este plano local",
|
|
450
|
+
promptMessage:
|
|
451
|
+
"Este plano permanece no seu computador. O Plan precisa da permissão do navegador para lê-lo pela ponte local.",
|
|
452
|
+
deniedTitle: "O acesso à rede local está bloqueado",
|
|
453
|
+
deniedMessage:
|
|
454
|
+
"Abra as configurações do site do Plan no navegador, permita o acesso à rede local e verifique novamente.",
|
|
455
|
+
connect: "Conectar ao plano local",
|
|
456
|
+
checkAgain: "Verificar novamente",
|
|
457
|
+
},
|
|
448
458
|
overview: {
|
|
449
459
|
title: "plano",
|
|
450
460
|
documentCount_other: "{{count}} documentos",
|
|
@@ -468,6 +468,16 @@ const messages = {
|
|
|
468
468
|
message: "无法读取本地计划文件夹“{{slug}}”。",
|
|
469
469
|
title: "未找到本地计划",
|
|
470
470
|
},
|
|
471
|
+
localPlanConnection: {
|
|
472
|
+
promptTitle: "连接到此本地计划",
|
|
473
|
+
promptMessage:
|
|
474
|
+
"此计划保留在你的电脑上。Plan 需要浏览器权限才能通过本地桥接读取它。",
|
|
475
|
+
deniedTitle: "本地网络访问已被阻止",
|
|
476
|
+
deniedMessage:
|
|
477
|
+
"打开浏览器中 Plan 的网站设置,允许访问本地网络,然后再次检查。",
|
|
478
|
+
connect: "连接到本地计划",
|
|
479
|
+
checkAgain: "再次检查",
|
|
480
|
+
},
|
|
471
481
|
loggedOut: {
|
|
472
482
|
copied: "已复制",
|
|
473
483
|
copy: "复制",
|
|
@@ -468,6 +468,16 @@ const messages = {
|
|
|
468
468
|
message: "無法讀取本機計畫資料夾“{{slug}}”。",
|
|
469
469
|
title: "未找到本機計畫",
|
|
470
470
|
},
|
|
471
|
+
localPlanConnection: {
|
|
472
|
+
promptTitle: "連線至此本機計畫",
|
|
473
|
+
promptMessage:
|
|
474
|
+
"此計畫會保留在你的電腦上。Plan 需要瀏覽器權限,才能透過本機橋接讀取它。",
|
|
475
|
+
deniedTitle: "本機網路存取已遭封鎖",
|
|
476
|
+
deniedMessage:
|
|
477
|
+
"開啟瀏覽器中 Plan 的網站設定,允許存取本機網路,然後再次檢查。",
|
|
478
|
+
connect: "連線至本機計畫",
|
|
479
|
+
checkAgain: "再次檢查",
|
|
480
|
+
},
|
|
471
481
|
loggedOut: {
|
|
472
482
|
copied: "已複製",
|
|
473
483
|
copy: "複製",
|
|
@@ -46,6 +46,53 @@ type LocalPlanBridgeCommentUpdate = {
|
|
|
46
46
|
deletedCommentIds?: string[];
|
|
47
47
|
};
|
|
48
48
|
|
|
49
|
+
export type LocalNetworkAccessPermissionState =
|
|
50
|
+
| "checking"
|
|
51
|
+
| "prompt"
|
|
52
|
+
| "granted"
|
|
53
|
+
| "denied"
|
|
54
|
+
| "unsupported";
|
|
55
|
+
|
|
56
|
+
export class LocalPlanBridgePermissionError extends Error {
|
|
57
|
+
readonly permissionState: "prompt" | "denied";
|
|
58
|
+
|
|
59
|
+
constructor(permissionState: "prompt" | "denied") {
|
|
60
|
+
super(
|
|
61
|
+
permissionState === "denied"
|
|
62
|
+
? "Local network access is blocked for this site. Open your browser's site settings for Plan, allow local network access, then retry."
|
|
63
|
+
: "Plan needs permission to connect to the local plan on this computer. Allow local network access in your browser, then retry.",
|
|
64
|
+
);
|
|
65
|
+
this.name = "LocalPlanBridgePermissionError";
|
|
66
|
+
this.permissionState = permissionState;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export async function localNetworkAccessPermissionState(): Promise<
|
|
71
|
+
Exclude<LocalNetworkAccessPermissionState, "checking">
|
|
72
|
+
> {
|
|
73
|
+
if (typeof navigator === "undefined" || !navigator.permissions?.query) {
|
|
74
|
+
return "unsupported";
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
// Chrome 145 split this permission into local-network and
|
|
78
|
+
// loopback-network, but keeps the Chrome 142 alias working for queries.
|
|
79
|
+
const status = await navigator.permissions.query({
|
|
80
|
+
name: "local-network-access",
|
|
81
|
+
} as unknown as PermissionDescriptor);
|
|
82
|
+
if (
|
|
83
|
+
status.state === "granted" ||
|
|
84
|
+
status.state === "denied" ||
|
|
85
|
+
status.state === "prompt"
|
|
86
|
+
) {
|
|
87
|
+
return status.state;
|
|
88
|
+
}
|
|
89
|
+
} catch {
|
|
90
|
+
// Browsers without Local Network Access expose Permissions but reject the
|
|
91
|
+
// Chrome-specific permission name. Fall through to the legacy fetch path.
|
|
92
|
+
}
|
|
93
|
+
return "unsupported";
|
|
94
|
+
}
|
|
95
|
+
|
|
49
96
|
function assertLocalBridgeUrl(value: string): string {
|
|
50
97
|
let url: URL;
|
|
51
98
|
try {
|
|
@@ -92,6 +139,7 @@ export function shouldRetryLocalPlanBridgeBundle(
|
|
|
92
139
|
failureCount: number,
|
|
93
140
|
error: unknown,
|
|
94
141
|
) {
|
|
142
|
+
if (error instanceof LocalPlanBridgePermissionError) return false;
|
|
95
143
|
const message = error instanceof Error ? error.message : String(error ?? "");
|
|
96
144
|
if (
|
|
97
145
|
message.includes("Local plan bridge URL") ||
|
|
@@ -107,6 +155,28 @@ export function localPlanBridgeRetryDelay(attemptIndex: number) {
|
|
|
107
155
|
return Math.min(500 * 2 ** attemptIndex, 2_500);
|
|
108
156
|
}
|
|
109
157
|
|
|
158
|
+
export function shouldShowLocalPlanLoadError(input: {
|
|
159
|
+
localPlanMode: boolean;
|
|
160
|
+
hasBundle: boolean;
|
|
161
|
+
hasBridgeUrl: boolean;
|
|
162
|
+
bridgeFetchEnabled: boolean;
|
|
163
|
+
error: unknown;
|
|
164
|
+
loading: boolean;
|
|
165
|
+
fetching: boolean;
|
|
166
|
+
permissionState: LocalNetworkAccessPermissionState;
|
|
167
|
+
}): boolean {
|
|
168
|
+
if (!input.localPlanMode || input.hasBundle) return false;
|
|
169
|
+
if (input.hasBridgeUrl && !input.bridgeFetchEnabled) return false;
|
|
170
|
+
if (
|
|
171
|
+
input.error instanceof LocalPlanBridgePermissionError &&
|
|
172
|
+
(input.permissionState === "granted" ||
|
|
173
|
+
input.permissionState === "unsupported")
|
|
174
|
+
) {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
return Boolean(input.error) || (!input.loading && !input.fetching);
|
|
178
|
+
}
|
|
179
|
+
|
|
110
180
|
/**
|
|
111
181
|
* Decide whether the hosted-plan render should surface the retryable load
|
|
112
182
|
* error card instead of the initial skeleton.
|
|
@@ -342,7 +412,16 @@ export async function fetchLocalPlanBridgeBundle(
|
|
|
342
412
|
fallbackSlug: string,
|
|
343
413
|
): Promise<LocalPlanBundle> {
|
|
344
414
|
const safeUrl = assertLocalBridgeUrl(bridgeUrl);
|
|
345
|
-
|
|
415
|
+
let response: Response;
|
|
416
|
+
try {
|
|
417
|
+
response = await fetch(safeUrl, { cache: "no-store" });
|
|
418
|
+
} catch (error) {
|
|
419
|
+
const permissionState = await localNetworkAccessPermissionState();
|
|
420
|
+
if (permissionState === "prompt" || permissionState === "denied") {
|
|
421
|
+
throw new LocalPlanBridgePermissionError(permissionState);
|
|
422
|
+
}
|
|
423
|
+
throw error;
|
|
424
|
+
}
|
|
346
425
|
const payload = (await response
|
|
347
426
|
.json()
|
|
348
427
|
.catch(() => null)) as LocalPlanBridgePayload | null;
|