@agent-native/core 0.97.0 → 0.98.1
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 +56 -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 +6 -2
- package/corpus/core/scripts/finalize-build.mjs +63 -3
- package/corpus/core/scripts/materialize-source-corpus.mjs +101 -15
- package/corpus/core/src/action-change-marker.ts +8 -1
- 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/changelog/parse.ts +8 -3
- 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 +8 -8
- package/corpus/core/src/client/AssistantChat.tsx +83 -39
- package/corpus/core/src/client/CommandMenu.tsx +16 -5
- package/corpus/core/src/client/FeedbackButton.tsx +2 -2
- package/corpus/core/src/client/analytics.ts +29 -0
- package/corpus/core/src/client/app-providers.tsx +18 -5
- package/corpus/core/src/client/blocks/library/wireframe-kit.tsx +16 -2
- package/corpus/core/src/client/chat/tool-call-display.tsx +3 -3
- package/corpus/core/src/client/chat-model-groups.ts +28 -0
- package/corpus/core/src/client/composer/PastedTextChip.tsx +1 -1
- package/corpus/core/src/client/composer/RealtimeVoiceMode.tsx +523 -68
- package/corpus/core/src/client/composer/TiptapComposer.tsx +47 -30
- package/corpus/core/src/client/composer/VoiceButton.tsx +22 -5
- package/corpus/core/src/client/composer/index.ts +5 -0
- package/corpus/core/src/client/composer/useRealtimeVoiceMode.tsx +1271 -35
- 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 +5 -13
- package/corpus/core/src/client/progress/RunsTray.tsx +23 -4
- package/corpus/core/src/client/settings/SecretsSection.tsx +387 -266
- package/corpus/core/src/client/settings/SettingsPanel.tsx +117 -38
- 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/use-action.ts +12 -0
- package/corpus/core/src/client/use-agent-chat-home-handoff.ts +8 -1
- package/corpus/core/src/client/use-agent-engine-configured.ts +17 -3
- package/corpus/core/src/client/use-db-sync.ts +84 -34
- package/corpus/core/src/client/use-pausing-interval.ts +14 -4
- 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/scope-store.ts +1 -1
- package/corpus/core/src/integrations/usage-budget-store.ts +1 -1
- 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 +51 -1
- package/corpus/core/src/mcp/oauth-token.ts +6 -1
- package/corpus/core/src/mcp-client/workspace-servers.ts +4 -4
- 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/crypto.ts +28 -8
- package/corpus/core/src/secrets/storage.ts +67 -3
- package/corpus/core/src/server/action-change.ts +5 -1
- package/corpus/core/src/server/action-routes.ts +8 -0
- 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/poll.ts +1 -0
- package/corpus/core/src/server/realtime-voice.ts +335 -14
- 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 +17 -16
- package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/core/src/templates/default/.agents/skills/real-time-sync/SKILL.md +2 -2
- 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/real-time-sync/SKILL.md +2 -2
- package/corpus/core/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +7 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +39 -9
- 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 +135 -3
- 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/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +10 -5
- package/corpus/templates/analytics/AGENTS.md +15 -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/navigate.ts +59 -5
- 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 +7 -29
- package/corpus/templates/analytics/app/components/ProviderCorpusJobNotifier.tsx +20 -3
- package/corpus/templates/analytics/app/components/ResourceLoadError.tsx +42 -0
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +2 -1
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +85 -70
- package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -1
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +128 -95
- package/corpus/templates/analytics/app/components/layout/SidebarLoadError.tsx +24 -0
- package/corpus/templates/analytics/app/global.css +19 -20
- 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/lib/provider-corpus-job-sync.ts +26 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +41 -343
- 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/pages/monitoring/ErrorsPanel.tsx +38 -7
- package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +1 -1
- package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +3 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +333 -272
- package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +72 -17
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +297 -108
- package/corpus/templates/analytics/app/root.tsx +40 -8
- package/corpus/templates/analytics/app/routes/_index.tsx +14 -2
- package/corpus/templates/analytics/changelog/2026-06-24-first-party-signup-and-pageview-panels-now-honor-dashboard-filters.md +2 -1
- package/corpus/templates/analytics/changelog/2026-06-25-referrer-dashboard-panels-show-external-domains.md +2 -1
- package/corpus/templates/analytics/changelog/2026-07-03-agent-llm-observability-dashboard.md +1 -1
- package/corpus/templates/analytics/changelog/2026-07-06-mobile-chat-header-is-more-compact-and-the-menu-button-opens-navigation.md +1 -0
- package/corpus/templates/analytics/changelog/2026-07-08-dashboard-history-and-chat-context.md +1 -0
- package/corpus/templates/analytics/changelog/2026-07-08-settings-are-cleaner-searchable-and-alerts-have-their-own-tab.md +1 -0
- package/corpus/templates/analytics/changelog/2026-07-08-sidebar-sections-stay-collapsed-until-opened.md +1 -0
- 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-analytics-no-longer-repeatedly-restarts-background-requests-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-analytics-only-asks-for-replay-storage-when-you-enable-sessi.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-charts-now-show-their-loading-skeleton-while-refreshing.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-realtime-voice-now-shows-a-clear-connection-indicator-comple.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-replay-event-counts-stay-hidden-until-recordings-finish-load.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-replay-storage-key-mismatches-show-actionable-setup-guidance.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-replay-timelines-group-continuous-scrolling-and-dev-tools-co.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-session-filters-now-stay-compact-in-a-settings-menu-at-mediu.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-session-replay-console-errors-now-link-to-matching-issues-or.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-session-replays-load-large-recordings-faster-and-surface-fai.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-session-replays-preserve-recorded-styles-and-viewport-layout.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-session-replays-stay-centered-instead-of-clipping-wide-recor.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/package.json +1 -1
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +37 -1
- package/corpus/templates/analytics/server/handlers/session-replay.ts +57 -0
- 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 +20 -4
- package/corpus/templates/analytics/server/lib/session-replay-agent-context.ts +12 -0
- package/corpus/templates/analytics/server/lib/session-replay.ts +208 -2
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +11 -39
- package/corpus/templates/analytics/server/plugins/onboarding.ts +7 -79
- package/corpus/templates/analytics/server/routes/api/session-replay/recordings/[recordingId]/chunks.get.ts +1 -0
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/assets/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/templates/assets/app/components/create/RecentDraftsSection.tsx +30 -4
- package/corpus/templates/assets/app/global.css +4 -4
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +0 -1
- package/corpus/templates/assets/app/routes/library.tsx +49 -6
- 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/brain/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/templates/brain/app/global.css +5 -5
- package/corpus/templates/brain/app/root.tsx +0 -3
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/calendar/.agents/skills/real-time-sync/SKILL.md +2 -2
- 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/app/root.tsx +1 -0
- 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/chat/.agents/skills/real-time-sync/SKILL.md +2 -2
- 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/hooks/use-auto-title.ts +74 -8
- package/corpus/templates/clips/app/hooks/use-library.ts +12 -25
- 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.settings._index.tsx +20 -22
- 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-generated-titles-no-longer-cause-continuous-background-refreshes.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-s3-storage-setup-stays-collapsed-until-you-choose-it-as-the-.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/.agents/skills/real-time-sync/SKILL.md +2 -2
- 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/hooks/use-comments.ts +0 -1
- 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-comments-now-update-from-live-collaboration-events-without-c.md +6 -0
- 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/Header.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/.agents/skills/real-time-sync/SKILL.md +2 -2
- 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/layout/AppLayout.tsx +1 -2
- 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/root.tsx +0 -3
- 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/.agents/skills/real-time-sync/SKILL.md +2 -2
- 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/hooks/use-compose-state.ts +1 -0
- package/corpus/templates/mail/app/root.tsx +9 -22
- 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/.agents/skills/real-time-sync/SKILL.md +2 -2
- 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/hooks/use-navigation-state.ts +5 -2
- package/corpus/templates/plan/app/hooks/use-plans.ts +6 -13
- 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 +157 -31
- 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/changelog/2026-07-11-plan-refreshes-only-when-content-changes.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 +37 -11
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +2 -2
- package/corpus/templates/slides/app/components/editor/GenerateSlidesDialog.tsx +2 -2
- package/corpus/templates/slides/app/components/layout/Header.tsx +1 -1
- 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 +10 -0
- package/corpus/templates/slides/app/hooks/use-slide-comments.ts +7 -31
- 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-comments-now-update-from-live-collaboration-events-without-c.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-change-marker.d.ts +1 -0
- package/dist/action-change-marker.d.ts.map +1 -1
- package/dist/action-change-marker.js +7 -1
- package/dist/action-change-marker.js.map +1 -1
- 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/changelog/parse.d.ts +4 -2
- package/dist/changelog/parse.d.ts.map +1 -1
- package/dist/changelog/parse.js +5 -3
- package/dist/changelog/parse.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 +6 -5
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +7 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +62 -40
- package/dist/client/AssistantChat.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/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +26 -0
- package/dist/client/analytics.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/blocks/library/wireframe-kit.d.ts +2 -0
- package/dist/client/blocks/library/wireframe-kit.d.ts.map +1 -1
- package/dist/client/blocks/library/wireframe-kit.js +9 -2
- package/dist/client/blocks/library/wireframe-kit.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/chat-model-groups.d.ts.map +1 -1
- package/dist/client/chat-model-groups.js +24 -0
- package/dist/client/chat-model-groups.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 +40 -2
- package/dist/client/composer/RealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.js +186 -35
- package/dist/client/composer/RealtimeVoiceMode.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +4 -0
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +48 -30
- 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/index.d.ts +2 -2
- package/dist/client/composer/index.d.ts.map +1 -1
- package/dist/client/composer/index.js +1 -1
- package/dist/client/composer/index.js.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.d.ts +104 -2
- package/dist/client/composer/useRealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.js +1015 -35
- 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 +1 -3
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -6
- package/dist/client/index.js.map +1 -1
- package/dist/client/progress/RunsTray.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.js +17 -4
- package/dist/client/progress/RunsTray.js.map +1 -1
- package/dist/client/settings/SecretsSection.d.ts +2 -3
- package/dist/client/settings/SecretsSection.d.ts.map +1 -1
- package/dist/client/settings/SecretsSection.js +46 -22
- package/dist/client/settings/SecretsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts +9 -0
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +46 -12
- package/dist/client/settings/SettingsPanel.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/use-action.d.ts +2 -0
- package/dist/client/use-action.d.ts.map +1 -1
- package/dist/client/use-action.js +10 -0
- package/dist/client/use-action.js.map +1 -1
- package/dist/client/use-agent-chat-home-handoff.d.ts +2 -0
- package/dist/client/use-agent-chat-home-handoff.d.ts.map +1 -1
- package/dist/client/use-agent-chat-home-handoff.js +7 -1
- package/dist/client/use-agent-chat-home-handoff.js.map +1 -1
- package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
- package/dist/client/use-agent-engine-configured.js +17 -3
- package/dist/client/use-agent-engine-configured.js.map +1 -1
- package/dist/client/use-db-sync.d.ts +8 -2
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +57 -32
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/client/use-pausing-interval.d.ts.map +1 -1
- package/dist/client/use-pausing-interval.js +16 -4
- package/dist/client/use-pausing-interval.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/scope-store.js +1 -1
- package/dist/integrations/scope-store.js.map +1 -1
- package/dist/integrations/usage-budget-store.js +1 -1
- package/dist/integrations/usage-budget-store.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 +47 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +48 -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/mcp-client/workspace-servers.js +4 -4
- package/dist/mcp-client/workspace-servers.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +5 -5
- 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/resources/handlers.d.ts +1 -1
- package/dist/secrets/crypto.d.ts +7 -6
- package/dist/secrets/crypto.d.ts.map +1 -1
- package/dist/secrets/crypto.js +30 -11
- package/dist/secrets/crypto.js.map +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- 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/action-change.d.ts +1 -0
- package/dist/server/action-change.d.ts.map +1 -1
- package/dist/server/action-change.js +4 -1
- package/dist/server/action-change.js.map +1 -1
- package/dist/server/action-routes.d.ts.map +1 -1
- package/dist/server/action-routes.js +5 -0
- package/dist/server/action-routes.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-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/poll.d.ts.map +1 -1
- package/dist/server/poll.js +1 -0
- package/dist/server/poll.js.map +1 -1
- package/dist/server/realtime-voice.d.ts +10 -0
- package/dist/server/realtime-voice.d.ts.map +1 -1
- package/dist/server/realtime-voice.js +249 -15
- 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 +17 -16
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +2 -2
- 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/real-time-sync/SKILL.md +2 -2
- package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +7 -3
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +39 -9
- 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 +111 -3
- 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 +7 -3
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +2 -2
- 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/real-time-sync/SKILL.md +2 -2
- package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +7 -3
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +39 -9
- 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
|
@@ -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;
|
|
@@ -272,15 +272,19 @@ import {
|
|
|
272
272
|
import { planDocumentTitle } from "@/lib/plan-document-title";
|
|
273
273
|
import {
|
|
274
274
|
fetchLocalPlanBridgeBundle,
|
|
275
|
+
localNetworkAccessPermissionState,
|
|
275
276
|
localPlanBridgeQueryKey,
|
|
276
277
|
localPlanBridgeRetryDelay,
|
|
277
278
|
localPlanRoutePath,
|
|
278
279
|
localPlanRouteUrl,
|
|
279
280
|
mergeLocalBridgeComments,
|
|
280
281
|
shouldRetryLocalPlanBridgeBundle,
|
|
282
|
+
shouldShowLocalPlanLoadError,
|
|
281
283
|
shouldShowPlanLoadError,
|
|
282
284
|
updateLocalPlanBridgeComments,
|
|
285
|
+
LocalPlanBridgePermissionError,
|
|
283
286
|
type LocalPlanBundle,
|
|
287
|
+
type LocalNetworkAccessPermissionState,
|
|
284
288
|
type PlanBundleWithHtml,
|
|
285
289
|
type PlanCommentItem,
|
|
286
290
|
} from "@/lib/plan-local-bridge";
|
|
@@ -2014,7 +2018,6 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
2014
2018
|
// Ref that signals the 3-second poll to pause while a comment mutation is
|
|
2015
2019
|
// in-flight. Prevents poll-driven cache replacement from evicting optimistic
|
|
2016
2020
|
// comments before the server write commits (Issue 4a).
|
|
2017
|
-
const commentMutationPendingRef = useRef(false);
|
|
2018
2021
|
const { session, isLoading: sessionLoading } = useSession();
|
|
2019
2022
|
const localPlanMode = Boolean(localPlanSlug);
|
|
2020
2023
|
const routeSearchParams = useMemo(
|
|
@@ -2028,12 +2031,39 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
2028
2031
|
? routeSearchParams.get("path")
|
|
2029
2032
|
: null;
|
|
2030
2033
|
const routeSelectedId = params.id;
|
|
2034
|
+
const [localNetworkPermission, setLocalNetworkPermission] =
|
|
2035
|
+
useState<LocalNetworkAccessPermissionState>(
|
|
2036
|
+
localPlanBridgeUrl ? "checking" : "unsupported",
|
|
2037
|
+
);
|
|
2038
|
+
const [localBridgeConnectionRequested, setLocalBridgeConnectionRequested] =
|
|
2039
|
+
useState(false);
|
|
2040
|
+
const checkLocalNetworkPermission = useCallback(async () => {
|
|
2041
|
+
if (!localPlanBridgeUrl) {
|
|
2042
|
+
setLocalNetworkPermission("unsupported");
|
|
2043
|
+
return;
|
|
2044
|
+
}
|
|
2045
|
+
setLocalNetworkPermission("checking");
|
|
2046
|
+
setLocalBridgeConnectionRequested(false);
|
|
2047
|
+
const state = await localNetworkAccessPermissionState();
|
|
2048
|
+
setLocalNetworkPermission(state);
|
|
2049
|
+
}, [localPlanBridgeUrl]);
|
|
2050
|
+
useEffect(() => {
|
|
2051
|
+
void checkLocalNetworkPermission();
|
|
2052
|
+
}, [checkLocalNetworkPermission]);
|
|
2053
|
+
const localBridgeFetchEnabled = Boolean(
|
|
2054
|
+
localPlanMode &&
|
|
2055
|
+
localPlanSlug &&
|
|
2056
|
+
localPlanBridgeUrl &&
|
|
2057
|
+
(localNetworkPermission === "granted" ||
|
|
2058
|
+
localNetworkPermission === "unsupported" ||
|
|
2059
|
+
localBridgeConnectionRequested),
|
|
2060
|
+
);
|
|
2031
2061
|
const localPlanBridgeQuery = useQuery<LocalPlanBundle>({
|
|
2032
2062
|
queryKey: localPlanBridgeQueryKey(
|
|
2033
2063
|
localPlanSlug ?? "",
|
|
2034
2064
|
localPlanBridgeUrl ?? "",
|
|
2035
2065
|
),
|
|
2036
|
-
enabled:
|
|
2066
|
+
enabled: localBridgeFetchEnabled,
|
|
2037
2067
|
refetchOnWindowFocus: false,
|
|
2038
2068
|
retry: shouldRetryLocalPlanBridgeBundle,
|
|
2039
2069
|
retryDelay: localPlanBridgeRetryDelay,
|
|
@@ -2068,6 +2098,11 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
2068
2098
|
const localPlanError = localPlanBridgeUrl
|
|
2069
2099
|
? localPlanBridgeQuery.error
|
|
2070
2100
|
: localPlanQuery.error;
|
|
2101
|
+
useEffect(() => {
|
|
2102
|
+
if (!(localPlanError instanceof LocalPlanBridgePermissionError)) return;
|
|
2103
|
+
setLocalNetworkPermission(localPlanError.permissionState);
|
|
2104
|
+
setLocalBridgeConnectionRequested(false);
|
|
2105
|
+
}, [localPlanError]);
|
|
2071
2106
|
const localPlanLoading = localPlanBridgeUrl
|
|
2072
2107
|
? localPlanBridgeQuery.isLoading
|
|
2073
2108
|
: localPlanQuery.isLoading;
|
|
@@ -2181,10 +2216,7 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
2181
2216
|
const immersiveReader = Boolean(
|
|
2182
2217
|
selectedId && (planFullscreen || prototypeOnly),
|
|
2183
2218
|
);
|
|
2184
|
-
const planQuery = usePlan(
|
|
2185
|
-
localPlanMode ? undefined : selectedId,
|
|
2186
|
-
commentMutationPendingRef,
|
|
2187
|
-
);
|
|
2219
|
+
const planQuery = usePlan(localPlanMode ? undefined : selectedId);
|
|
2188
2220
|
const bundle = localPlanMode ? localPlanData : planQuery.data;
|
|
2189
2221
|
const localPlanBundle =
|
|
2190
2222
|
localPlanMode && bundle && "localOnly" in bundle
|
|
@@ -2225,13 +2257,30 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
2225
2257
|
accessStatusPaused: planAccessStatusQuery.isPaused,
|
|
2226
2258
|
accessDenied: Boolean(planAccessStatus && !planAccessStatus.hasAccess),
|
|
2227
2259
|
});
|
|
2228
|
-
const showLocalPlanLoadError =
|
|
2260
|
+
const showLocalPlanLoadError = shouldShowLocalPlanLoadError({
|
|
2261
|
+
localPlanMode,
|
|
2262
|
+
hasBundle: Boolean(bundle),
|
|
2263
|
+
hasBridgeUrl: Boolean(localPlanBridgeUrl),
|
|
2264
|
+
bridgeFetchEnabled: localBridgeFetchEnabled,
|
|
2265
|
+
error: localPlanError,
|
|
2266
|
+
loading: localPlanLoading,
|
|
2267
|
+
fetching: localPlanFetching,
|
|
2268
|
+
permissionState: localNetworkPermission,
|
|
2269
|
+
});
|
|
2270
|
+
const showLocalPlanConnection = Boolean(
|
|
2229
2271
|
localPlanMode &&
|
|
2272
|
+
localPlanBridgeUrl &&
|
|
2230
2273
|
!bundle &&
|
|
2231
|
-
|
|
2274
|
+
!localBridgeConnectionRequested &&
|
|
2275
|
+
(localNetworkPermission === "prompt" ||
|
|
2276
|
+
localNetworkPermission === "denied"),
|
|
2232
2277
|
);
|
|
2233
2278
|
const showInitialPlanSkeleton = Boolean(
|
|
2234
|
-
selectedId &&
|
|
2279
|
+
selectedId &&
|
|
2280
|
+
!bundle &&
|
|
2281
|
+
!showPlanLoadError &&
|
|
2282
|
+
!showLocalPlanLoadError &&
|
|
2283
|
+
!showLocalPlanConnection,
|
|
2235
2284
|
);
|
|
2236
2285
|
const requestPlanAccessMutation = useRequestPlanAccess();
|
|
2237
2286
|
const [accessRequestSentPlanId, setAccessRequestSentPlanId] = useState<
|
|
@@ -4497,8 +4546,7 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4497
4546
|
};
|
|
4498
4547
|
clearPendingDocumentRestore();
|
|
4499
4548
|
pendingDocumentRestoreRef.current = documentStateRef.current;
|
|
4500
|
-
|
|
4501
|
-
// Await the cancel so an in-flight 3s poll can't resolve *after* our
|
|
4549
|
+
// Await the cancel so an in-flight sync refresh can't resolve *after* our
|
|
4502
4550
|
// optimistic write and revert it (the "comment lagged / didn't stick"
|
|
4503
4551
|
// symptom). cancelQueries reverts outstanding fetches before we patch.
|
|
4504
4552
|
await queryClient.cancelQueries({ queryKey: selectedPlanQueryKey });
|
|
@@ -4535,9 +4583,6 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4535
4583
|
setInlineCommentPosition(
|
|
4536
4584
|
getPositionFromAnchor(anchor) ?? capturedPosition,
|
|
4537
4585
|
);
|
|
4538
|
-
})
|
|
4539
|
-
.finally(() => {
|
|
4540
|
-
commentMutationPendingRef.current = false;
|
|
4541
4586
|
});
|
|
4542
4587
|
};
|
|
4543
4588
|
|
|
@@ -4553,7 +4598,6 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4553
4598
|
annotation.anchor.resolutionTarget,
|
|
4554
4599
|
),
|
|
4555
4600
|
};
|
|
4556
|
-
commentMutationPendingRef.current = true;
|
|
4557
4601
|
void writeComments(
|
|
4558
4602
|
[
|
|
4559
4603
|
{
|
|
@@ -4576,9 +4620,6 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4576
4620
|
})
|
|
4577
4621
|
.catch(() => {
|
|
4578
4622
|
// The mutation hook surfaces the failure toast; just clear pending.
|
|
4579
|
-
})
|
|
4580
|
-
.finally(() => {
|
|
4581
|
-
commentMutationPendingRef.current = false;
|
|
4582
4623
|
});
|
|
4583
4624
|
};
|
|
4584
4625
|
|
|
@@ -4616,8 +4657,7 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4616
4657
|
createdAt: now,
|
|
4617
4658
|
updatedAt: now,
|
|
4618
4659
|
};
|
|
4619
|
-
|
|
4620
|
-
// Await the cancel so an in-flight 3s poll can't resolve *after* our
|
|
4660
|
+
// Await the cancel so an in-flight sync refresh can't resolve *after* our
|
|
4621
4661
|
// optimistic write and revert it (the "comment lagged / didn't stick"
|
|
4622
4662
|
// symptom). cancelQueries reverts outstanding fetches before we patch.
|
|
4623
4663
|
await queryClient.cancelQueries({ queryKey: selectedPlanQueryKey });
|
|
@@ -4656,8 +4696,6 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4656
4696
|
current ? removePlanCommentFromBundle(current, replyId) : current,
|
|
4657
4697
|
);
|
|
4658
4698
|
throw new Error("Could not send reply. Try again.");
|
|
4659
|
-
} finally {
|
|
4660
|
-
commentMutationPendingRef.current = false;
|
|
4661
4699
|
}
|
|
4662
4700
|
};
|
|
4663
4701
|
|
|
@@ -4676,8 +4714,7 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4676
4714
|
// popover update without waiting for the server round-trip (Issue 3).
|
|
4677
4715
|
const prevBundle =
|
|
4678
4716
|
queryClient.getQueryData<PlanBundleWithHtml>(selectedPlanQueryKey);
|
|
4679
|
-
|
|
4680
|
-
// Await the cancel so an in-flight 3s poll can't resolve *after* our
|
|
4717
|
+
// Await the cancel so an in-flight sync refresh can't resolve *after* our
|
|
4681
4718
|
// optimistic write and revert it (the "comment lagged / didn't stick"
|
|
4682
4719
|
// symptom). cancelQueries reverts outstanding fetches before we patch.
|
|
4683
4720
|
await queryClient.cancelQueries({ queryKey: selectedPlanQueryKey });
|
|
@@ -4724,9 +4761,6 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4724
4761
|
if (prevBundle !== undefined) {
|
|
4725
4762
|
queryClient.setQueryData(selectedPlanQueryKey, prevBundle);
|
|
4726
4763
|
}
|
|
4727
|
-
})
|
|
4728
|
-
.finally(() => {
|
|
4729
|
-
commentMutationPendingRef.current = false;
|
|
4730
4764
|
});
|
|
4731
4765
|
};
|
|
4732
4766
|
|
|
@@ -4749,8 +4783,7 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4749
4783
|
const prevBundle =
|
|
4750
4784
|
queryClient.getQueryData<PlanBundleWithHtml>(selectedPlanQueryKey);
|
|
4751
4785
|
const commentId = request.commentId;
|
|
4752
|
-
|
|
4753
|
-
// Await the cancel so an in-flight 3s poll can't resolve *after* our
|
|
4786
|
+
// Await the cancel so an in-flight sync refresh can't resolve *after* our
|
|
4754
4787
|
// optimistic write and revert it (the "comment lagged / didn't stick"
|
|
4755
4788
|
// symptom). cancelQueries reverts outstanding fetches before we patch.
|
|
4756
4789
|
await queryClient.cancelQueries({ queryKey: selectedPlanQueryKey });
|
|
@@ -4773,8 +4806,6 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4773
4806
|
queryClient.setQueryData(selectedPlanQueryKey, prevBundle);
|
|
4774
4807
|
}
|
|
4775
4808
|
setDeleteCommentRequest(request);
|
|
4776
|
-
} finally {
|
|
4777
|
-
commentMutationPendingRef.current = false;
|
|
4778
4809
|
}
|
|
4779
4810
|
};
|
|
4780
4811
|
|
|
@@ -4844,6 +4875,8 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4844
4875
|
<PlansOverview
|
|
4845
4876
|
plans={plans}
|
|
4846
4877
|
isLoading={sessionLoading || plansQuery.isLoading}
|
|
4878
|
+
isError={plansQuery.isError}
|
|
4879
|
+
onRetry={() => void plansQuery.refetch()}
|
|
4847
4880
|
viewerEmail={session?.email ?? null}
|
|
4848
4881
|
onCreate={requestCreatePlan}
|
|
4849
4882
|
canCreate={Boolean(session)}
|
|
@@ -4857,6 +4890,14 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4857
4890
|
}
|
|
4858
4891
|
onSignIn={() => openSignIn()}
|
|
4859
4892
|
/>
|
|
4893
|
+
) : showLocalPlanConnection ? (
|
|
4894
|
+
<LocalPlanConnection
|
|
4895
|
+
permissionState={
|
|
4896
|
+
localNetworkPermission === "denied" ? "denied" : "prompt"
|
|
4897
|
+
}
|
|
4898
|
+
onConnect={() => setLocalBridgeConnectionRequested(true)}
|
|
4899
|
+
onRetry={() => void checkLocalNetworkPermission()}
|
|
4900
|
+
/>
|
|
4860
4901
|
) : showLocalPlanLoadError ? (
|
|
4861
4902
|
<LocalPlanLoadError
|
|
4862
4903
|
error={localPlanError}
|
|
@@ -6663,6 +6704,66 @@ function LocalPlanLoadError({
|
|
|
6663
6704
|
);
|
|
6664
6705
|
}
|
|
6665
6706
|
|
|
6707
|
+
function LocalPlanConnection({
|
|
6708
|
+
permissionState,
|
|
6709
|
+
onConnect,
|
|
6710
|
+
onRetry,
|
|
6711
|
+
}: {
|
|
6712
|
+
permissionState: "prompt" | "denied";
|
|
6713
|
+
onConnect: () => void;
|
|
6714
|
+
onRetry: () => void;
|
|
6715
|
+
}) {
|
|
6716
|
+
const t = useT();
|
|
6717
|
+
const denied = permissionState === "denied";
|
|
6718
|
+
return (
|
|
6719
|
+
<div className="flex min-h-0 flex-1 items-center justify-center px-6 py-12">
|
|
6720
|
+
<div className="w-full max-w-xl rounded-xl border border-border bg-background p-6 shadow-sm">
|
|
6721
|
+
<div className="flex items-center gap-3">
|
|
6722
|
+
<div className="flex size-10 items-center justify-center rounded-lg bg-muted text-muted-foreground">
|
|
6723
|
+
<IconLink className="size-5" />
|
|
6724
|
+
</div>
|
|
6725
|
+
<div>
|
|
6726
|
+
<h1 className="text-lg font-semibold tracking-tight">
|
|
6727
|
+
{t(
|
|
6728
|
+
denied
|
|
6729
|
+
? "plansPage.localPlanConnection.deniedTitle"
|
|
6730
|
+
: "plansPage.localPlanConnection.promptTitle",
|
|
6731
|
+
)}
|
|
6732
|
+
</h1>
|
|
6733
|
+
<p className="mt-1 text-sm text-muted-foreground">
|
|
6734
|
+
{t(
|
|
6735
|
+
denied
|
|
6736
|
+
? "plansPage.localPlanConnection.deniedMessage"
|
|
6737
|
+
: "plansPage.localPlanConnection.promptMessage",
|
|
6738
|
+
)}
|
|
6739
|
+
</p>
|
|
6740
|
+
</div>
|
|
6741
|
+
</div>
|
|
6742
|
+
<div className="mt-5 flex flex-wrap gap-2">
|
|
6743
|
+
<Button
|
|
6744
|
+
type="button"
|
|
6745
|
+
variant={denied ? "outline" : "default"}
|
|
6746
|
+
onClick={denied ? onRetry : onConnect}
|
|
6747
|
+
>
|
|
6748
|
+
{denied ? <IconRefresh /> : <IconLink />}
|
|
6749
|
+
{t(
|
|
6750
|
+
denied
|
|
6751
|
+
? "plansPage.localPlanConnection.checkAgain"
|
|
6752
|
+
: "plansPage.localPlanConnection.connect",
|
|
6753
|
+
)}
|
|
6754
|
+
</Button>
|
|
6755
|
+
<Button asChild type="button" variant="ghost">
|
|
6756
|
+
<Link to="/plans">
|
|
6757
|
+
<IconArrowLeft className="rtl:-scale-x-100" />
|
|
6758
|
+
{t("plansPage.overview.title")}
|
|
6759
|
+
</Link>
|
|
6760
|
+
</Button>
|
|
6761
|
+
</div>
|
|
6762
|
+
</div>
|
|
6763
|
+
</div>
|
|
6764
|
+
);
|
|
6765
|
+
}
|
|
6766
|
+
|
|
6666
6767
|
function PlanLoadError({
|
|
6667
6768
|
error,
|
|
6668
6769
|
planId,
|
|
@@ -7374,6 +7475,8 @@ type OverviewFilter = "all" | "plans" | "recaps" | "archived" | "deleted";
|
|
|
7374
7475
|
function PlansOverview({
|
|
7375
7476
|
plans,
|
|
7376
7477
|
isLoading,
|
|
7478
|
+
isError,
|
|
7479
|
+
onRetry,
|
|
7377
7480
|
viewerEmail,
|
|
7378
7481
|
onCreate,
|
|
7379
7482
|
canCreate,
|
|
@@ -7384,6 +7487,8 @@ function PlansOverview({
|
|
|
7384
7487
|
}: {
|
|
7385
7488
|
plans: PlanSummary[];
|
|
7386
7489
|
isLoading: boolean;
|
|
7490
|
+
isError: boolean;
|
|
7491
|
+
onRetry: () => void;
|
|
7387
7492
|
viewerEmail?: string | null;
|
|
7388
7493
|
onCreate: () => void;
|
|
7389
7494
|
canCreate: boolean;
|
|
@@ -7400,6 +7505,27 @@ function PlansOverview({
|
|
|
7400
7505
|
if (isLoading) {
|
|
7401
7506
|
return <PlansOverviewSkeleton />;
|
|
7402
7507
|
}
|
|
7508
|
+
if (isError) {
|
|
7509
|
+
return (
|
|
7510
|
+
<div className="flex min-h-0 flex-1 items-center justify-center bg-muted/20 p-6">
|
|
7511
|
+
<div className="flex max-w-sm flex-col items-center gap-3 text-center">
|
|
7512
|
+
<IconAlertTriangle className="size-7 text-destructive/70" />
|
|
7513
|
+
<div>
|
|
7514
|
+
<h1 className="font-medium">
|
|
7515
|
+
{t("plansPage.loadError.didNotLoadTitle")}
|
|
7516
|
+
</h1>
|
|
7517
|
+
<p className="mt-1 text-sm text-muted-foreground">
|
|
7518
|
+
{t("plansPage.loadError.genericMessage")}
|
|
7519
|
+
</p>
|
|
7520
|
+
</div>
|
|
7521
|
+
<Button type="button" variant="outline" onClick={onRetry}>
|
|
7522
|
+
<IconRefresh className="size-4" />
|
|
7523
|
+
{t("plansPage.loadError.retry")}
|
|
7524
|
+
</Button>
|
|
7525
|
+
</div>
|
|
7526
|
+
</div>
|
|
7527
|
+
);
|
|
7528
|
+
}
|
|
7403
7529
|
if (plans.length === 0) {
|
|
7404
7530
|
return <EmptyPlan onCreate={onCreate} canCreate={canCreate} />;
|
|
7405
7531
|
}
|