@agent-native/core 0.97.0 → 0.98.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +32 -0
- package/corpus/core/docs/content/authentication.mdx +3 -3
- package/corpus/core/docs/content/doctor.mdx +170 -0
- package/corpus/core/docs/content/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ar-SA/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/ar-SA/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ar-SA/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/security.mdx +2 -0
- package/corpus/core/docs/content/locales/de-DE/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/de-DE/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/security.mdx +2 -0
- package/corpus/core/docs/content/locales/es-ES/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/es-ES/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/es-ES/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/security.mdx +2 -0
- package/corpus/core/docs/content/locales/fr-FR/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/fr-FR/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/security.mdx +2 -0
- package/corpus/core/docs/content/locales/hi-IN/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/hi-IN/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/hi-IN/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/security.mdx +2 -0
- package/corpus/core/docs/content/locales/ja-JP/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/ja-JP/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ja-JP/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/security.mdx +2 -0
- package/corpus/core/docs/content/locales/ko-KR/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/ko-KR/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ko-KR/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/security.mdx +2 -0
- package/corpus/core/docs/content/locales/pt-BR/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/pt-BR/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/pt-BR/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/security.mdx +2 -0
- package/corpus/core/docs/content/locales/zh-CN/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-CN/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/zh-CN/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/security.mdx +2 -0
- package/corpus/core/docs/content/locales/zh-TW/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-TW/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/zh-TW/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/security.mdx +2 -0
- package/corpus/core/docs/content/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/security.mdx +2 -0
- package/corpus/core/package.json +5 -1
- package/corpus/core/scripts/finalize-build.mjs +63 -3
- package/corpus/core/scripts/materialize-source-corpus.mjs +101 -15
- package/corpus/core/src/action.ts +42 -0
- package/corpus/core/src/agent/engine/builder-engine.ts +3 -0
- package/corpus/core/src/agent/engine/context-directives-transform.ts +69 -0
- package/corpus/core/src/agent/engine/continuation-dispatch-retry.ts +168 -0
- package/corpus/core/src/agent/engine/tool-call-journal-seed.ts +85 -0
- package/corpus/core/src/agent/production-agent.ts +129 -244
- package/corpus/core/src/cli/doctor.ts +9 -3
- package/corpus/core/src/cli/plan-local.ts +10 -2
- package/corpus/core/src/cli/skills-content/assets-skill.ts +83 -0
- package/corpus/core/src/cli/skills-content/canvas.ts +153 -0
- package/corpus/core/src/cli/skills-content/connection.ts +52 -0
- package/corpus/core/src/cli/skills-content/content-skill.ts +109 -0
- package/corpus/core/src/cli/skills-content/design-exploration-skill.ts +118 -0
- package/corpus/core/src/cli/skills-content/design-visual-edit-skill.ts +228 -0
- package/corpus/core/src/cli/skills-content/document-quality.ts +196 -0
- package/corpus/core/src/cli/skills-content/exemplar.ts +69 -0
- package/corpus/core/src/cli/skills-content/help.ts +77 -0
- package/corpus/core/src/cli/skills-content/index.ts +22 -0
- package/corpus/core/src/cli/skills-content/local-files.ts +95 -0
- package/corpus/core/src/cli/skills-content/plan-setup-auth.ts +80 -0
- package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +470 -0
- package/corpus/core/src/cli/skills-content/visual-recap-skill.ts +547 -0
- package/corpus/core/src/cli/skills-content/visualize-repo-skill.ts +93 -0
- package/corpus/core/src/cli/skills-content/wireframe.ts +349 -0
- package/corpus/core/src/cli/skills.ts +27 -2733
- package/corpus/core/src/client/AgentPanel.tsx +6 -5
- package/corpus/core/src/client/CommandMenu.tsx +16 -5
- package/corpus/core/src/client/FeedbackButton.tsx +2 -2
- package/corpus/core/src/client/app-providers.tsx +18 -5
- package/corpus/core/src/client/chat/tool-call-display.tsx +3 -3
- package/corpus/core/src/client/composer/PastedTextChip.tsx +1 -1
- package/corpus/core/src/client/composer/RealtimeVoiceMode.tsx +143 -45
- package/corpus/core/src/client/composer/TiptapComposer.tsx +1 -1
- package/corpus/core/src/client/composer/VoiceButton.tsx +21 -5
- package/corpus/core/src/client/composer/useRealtimeVoiceMode.tsx +107 -10
- package/corpus/core/src/client/context-xray/ContextXRayPanel.tsx +5 -2
- package/corpus/core/src/client/extensions/ExtensionEditor.tsx +37 -4
- package/corpus/core/src/client/extensions/ExtensionQueryErrorState.tsx +47 -0
- package/corpus/core/src/client/extensions/ExtensionSlot.tsx +39 -10
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +44 -6
- package/corpus/core/src/client/extensions/ExtensionsListPage.tsx +12 -3
- package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +49 -11
- package/corpus/core/src/client/index.ts +0 -13
- package/corpus/core/src/client/progress/RunsTray.tsx +10 -3
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +7 -0
- package/corpus/core/src/client/settings/useBuilderStatus.ts +6 -0
- package/corpus/core/src/client/tool-cells/EditCell.tsx +19 -16
- package/corpus/core/src/client/tool-cells/FilesChangedSummary.tsx +26 -23
- package/corpus/core/src/client/tool-cells/WriteCell.tsx +19 -16
- package/corpus/core/src/client/visual-style-controls.tsx +1 -1
- package/corpus/core/src/deploy/build.ts +36 -14
- package/corpus/core/src/integrations/google-docs-poller.ts +23 -2
- package/corpus/core/src/integrations/plugin.ts +10 -0
- package/corpus/core/src/integrations/webhook-handler.ts +27 -2
- package/corpus/core/src/jobs/scheduler.ts +28 -2
- package/corpus/core/src/localization/default-messages.ts +8 -1
- package/corpus/core/src/mcp/oauth-token.ts +6 -1
- package/corpus/core/src/observability/routes.ts +36 -0
- package/corpus/core/src/observability/sentiment.ts +261 -0
- package/corpus/core/src/observability/store.ts +23 -0
- package/corpus/core/src/observability/traces.ts +49 -63
- package/corpus/core/src/observability/tracking-identity.ts +55 -0
- package/corpus/core/src/observability/types.ts +13 -0
- package/corpus/core/src/secrets/storage.ts +67 -3
- package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +199 -0
- package/corpus/core/src/server/agent-chat/browser-team-tools.ts +510 -0
- package/corpus/core/src/server/agent-chat/context-tools.ts +595 -0
- package/corpus/core/src/server/agent-chat/framework-prompts.ts +470 -0
- package/corpus/core/src/server/agent-chat/lazy-fs.ts +11 -0
- package/corpus/core/src/server/agent-chat/mcp-glue.ts +91 -0
- package/corpus/core/src/server/agent-chat/plugin-options.ts +350 -0
- package/corpus/core/src/server/agent-chat/process-run-failure.ts +62 -0
- package/corpus/core/src/server/agent-chat/prompt-resources.ts +688 -0
- package/corpus/core/src/server/agent-chat/recurring-jobs-runtime.ts +80 -0
- package/corpus/core/src/server/agent-chat/request-surface.ts +71 -0
- package/corpus/core/src/server/agent-chat/run-code-tools.ts +67 -0
- package/corpus/core/src/server/agent-chat/script-entries.ts +779 -0
- package/corpus/core/src/server/agent-chat/shared-thread.ts +301 -0
- package/corpus/core/src/server/agent-chat/skill-frontmatter.ts +41 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +364 -4182
- package/corpus/core/src/server/agent-teams.ts +26 -3
- package/corpus/core/src/server/auth.ts +55 -57
- package/corpus/core/src/server/credential-provider.ts +22 -25
- package/corpus/core/src/server/edge.ts +1 -0
- package/corpus/core/src/server/onboarding-html.ts +1 -16
- package/corpus/core/src/server/realtime-voice.ts +40 -5
- package/corpus/core/src/server/request-origin.ts +6 -2
- package/corpus/core/src/server/ssr-handler.ts +55 -2
- package/corpus/core/src/sharing/access.ts +155 -11
- package/corpus/core/src/sharing/registry.ts +7 -0
- package/corpus/core/src/styles/agent-native.css +15 -14
- package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +6 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
- package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
- package/corpus/core/src/templates/workspace-core/src/server/index.ts +4 -2
- package/corpus/core/src/testing.ts +26 -0
- package/corpus/core/src/triggers/dispatcher.ts +23 -2
- package/corpus/core/src/vite/client.ts +126 -2
- package/corpus/core/tsconfig.cli.json +1 -1
- package/corpus/core/tsconfig.json +5 -1
- package/corpus/templates/analytics/.agents/skills/bigquery/SKILL.md +2 -2
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/analytics/AGENTS.md +19 -6
- package/corpus/templates/analytics/actions/install-dashboard-template.ts +79 -43
- package/corpus/templates/analytics/actions/list-explorer-dashboards.ts +3 -3
- package/corpus/templates/analytics/actions/list-sql-dashboards.ts +8 -3
- package/corpus/templates/analytics/actions/rename-analysis.ts +8 -2
- package/corpus/templates/analytics/actions/rename-dashboard.ts +8 -7
- package/corpus/templates/analytics/actions/view-screen.ts +4 -23
- package/corpus/templates/analytics/app/components/ResourceLoadError.tsx +42 -0
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +85 -70
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +107 -89
- package/corpus/templates/analytics/app/components/layout/SidebarLoadError.tsx +24 -0
- package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +15 -5
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +4 -0
- package/corpus/templates/analytics/app/i18n-data.ts +40 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +6 -2
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/SqlPreview.tsx +36 -20
- package/corpus/templates/analytics/app/pages/adhoc/explorer/index.tsx +34 -20
- package/corpus/templates/analytics/app/pages/adhoc/explorer/use-explorer-config.ts +42 -41
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +43 -36
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +11 -2
- package/corpus/templates/analytics/app/root.tsx +13 -1
- package/corpus/templates/analytics/app/routes/_index.tsx +14 -2
- package/corpus/templates/analytics/changelog/2026-07-03-agent-llm-observability-dashboard.md +1 -1
- package/corpus/templates/analytics/changelog/2026-07-11-agent-feedback-sentiment-dashboard.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-analytics-chats-now-start-faster-by-loading-metric-definitio.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-command-and-sql-previews-now-respond-without-lag.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-command-search-now-reports-loading-failures-and-lets-you-ret.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-dashboard-navigation-now-loads-faster-and-reports-request-fa.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-inferred-message-sentiment-dashboard.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-microphone-settings-from-realtime-voice-mode-now-open-the-vo.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-more-dashboard-edit-paths-are-now-safe-against-simultaneous-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-renaming-a-dashboard-is-now-safe-against-simultaneous-agent-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-renaming-an-analysis-is-now-safe-against-simultaneous-edits.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-workspace-mounted-analytics-now-opens-ask-reliably-and-route.md +6 -0
- package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +37 -3
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +339 -1
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +1 -24
- package/corpus/templates/analytics/server/lib/dashboard-seeds.ts +0 -5
- package/corpus/templates/analytics/server/lib/dashboards-store.ts +289 -20
- package/corpus/templates/analytics/server/lib/data-dictionary-context.ts +106 -34
- package/corpus/templates/analytics/server/lib/demo-dashboards.ts +4 -1
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +11 -39
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/assets/app/components/create/RecentDraftsSection.tsx +30 -4
- package/corpus/templates/assets/app/routes/library.tsx +49 -5
- package/corpus/templates/assets/changelog/2026-07-11-library-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/calendar/.env.example +5 -0
- package/corpus/templates/calendar/app/components/calendar/EventCard.tsx +2 -2
- package/corpus/templates/calendar/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/calendar/app/i18n-data.ts +20 -0
- package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +37 -1
- package/corpus/templates/calendar/app/pages/BookingsList.tsx +20 -3
- package/corpus/templates/calendar/changelog/2026-07-11-booking-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-11-event-cards-give-subtle-press-feedback-and-smoother-hover.md +6 -0
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/clips/actions/decline-invite.ts +8 -0
- package/corpus/templates/clips/app/components/library/folder-tree.tsx +209 -187
- package/corpus/templates/clips/app/components/meetings/meeting-card.tsx +2 -2
- package/corpus/templates/clips/app/components/player/reactions-tray.tsx +17 -5
- package/corpus/templates/clips/app/components/player/scrubber.tsx +5 -3
- package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +2 -2
- package/corpus/templates/clips/app/components/workspace/insights-hub.tsx +119 -95
- package/corpus/templates/clips/app/global.css +45 -0
- package/corpus/templates/clips/app/root.tsx +4 -0
- package/corpus/templates/clips/app/routes/_app.notifications.tsx +23 -2
- package/corpus/templates/clips/app/routes/_app.trash.tsx +24 -2
- package/corpus/templates/clips/changelog/2026-07-11-controls-and-folders-now-move-more-smoothly.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-declining-an-invitation-now-requires-being-its-recipient.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-recording-overlays-are-lighter-weight-and-no-longer-cause-pa.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-workspace-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/overlay.css +34 -5
- package/corpus/templates/clips/chrome-extension/src/styles.css +2 -2
- package/corpus/templates/clips/desktop/src/styles.css +71 -26
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/content/actions/move-document.ts +34 -18
- package/corpus/templates/content/app/components/QueryErrorState.tsx +39 -0
- package/corpus/templates/content/app/components/editor/LinkHoverPreview.tsx +1 -1
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +225 -1435
- package/corpus/templates/content/app/components/editor/database/GalleryView.tsx +368 -0
- package/corpus/templates/content/app/components/editor/database/ListView.tsx +353 -0
- package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +580 -0
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +11 -2
- package/corpus/templates/content/app/global.css +19 -19
- package/corpus/templates/content/app/root.tsx +2 -2
- package/corpus/templates/content/app/routes/_app._index.tsx +11 -1
- package/corpus/templates/content/changelog/2026-07-11-document-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-editor-toggle-feedback-now-feels-more-responsive.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-moving-documents-at-the-same-time-no-longer-scrambles-their-.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-public-document-chats-now-start-faster-while-keeping-full-do.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-reopening-a-comment-now-uses-consistent-permissions-everywhe.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-sidebar-resizing-now-tracks-your-cursor-instantly-instead-of.md +6 -0
- package/corpus/templates/content/server/lib/public-documents.ts +47 -10
- package/corpus/templates/content/server/routes/api/comments/[id].patch.ts +24 -24
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/design/app/components/QueryErrorState.tsx +24 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +1 -1
- package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +5 -2
- package/corpus/templates/design/app/components/design/EditPanel.tsx +326 -319
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +198 -193
- package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +11 -4
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +1 -1
- package/corpus/templates/design/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/design/app/pages/DesignSystems.tsx +7 -1
- package/corpus/templates/design/app/pages/Index.tsx +14 -2
- package/corpus/templates/design/app/pages/Present.tsx +16 -3
- package/corpus/templates/design/app/pages/Templates.tsx +10 -4
- package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +484 -0
- package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +378 -0
- package/corpus/templates/design/app/pages/design-editor/design-data-geometry-utils.ts +138 -0
- package/corpus/templates/design/app/pages/design-editor/dom-utils.ts +15 -0
- package/corpus/templates/design/app/pages/design-editor/generation-prompt-directives.ts +180 -0
- package/corpus/templates/design/app/pages/design-editor/html-layer-positioning.ts +226 -0
- package/corpus/templates/design/app/pages/design-editor/png-export-render.ts +348 -0
- package/corpus/templates/design/app/pages/design-editor/screen-command-utils.ts +160 -0
- package/corpus/templates/design/app/pages/design-editor/text-edit-utils.ts +238 -0
- package/corpus/templates/design/app/pages/design-editor/tool-state.ts +23 -1
- package/corpus/templates/design/app/pages/design-editor/types.ts +25 -0
- package/corpus/templates/design/app/root.tsx +10 -1
- package/corpus/templates/design/changelog/2026-07-11-canvas-context-menus-now-open-without-motion-jitter.md +6 -0
- package/corpus/templates/design/changelog/2026-07-11-design-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/design/changelog/2026-07-11-inspector-tooltips-appear-instantly-as-you-sweep-across-icon.md +6 -0
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/dispatch/app/i18n/zh-TW.ts +10 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +123 -0
- package/corpus/templates/dispatch/app/routes/integrations.tsx +163 -144
- package/corpus/templates/dispatch/changelog/2026-07-11-dispatch-mcp-connections-now-start-with-safer-app-access-and.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-11-overview-and-chat-now-share-a-cleaner-more-stable-flow.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-11-query-errors-now-show-a-retry-option.md +6 -0
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +3 -3
- package/corpus/templates/forms/app/root.tsx +34 -8
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/macros/app/components/DailyProgress.tsx +25 -5
- package/corpus/templates/macros/app/components/QueryErrorState.tsx +31 -0
- package/corpus/templates/macros/app/components/WeightTracker.tsx +5 -1
- package/corpus/templates/macros/app/components/ui/button.tsx +1 -1
- package/corpus/templates/macros/app/components/ui/progress.tsx +1 -1
- package/corpus/templates/macros/app/components/ui/tabs.tsx +1 -1
- package/corpus/templates/macros/app/i18n/ar-SA.ts +2 -0
- package/corpus/templates/macros/app/i18n/de-DE.ts +2 -0
- package/corpus/templates/macros/app/i18n/en-US.ts +2 -0
- package/corpus/templates/macros/app/i18n/es-ES.ts +2 -0
- package/corpus/templates/macros/app/i18n/fr-FR.ts +2 -0
- package/corpus/templates/macros/app/i18n/hi-IN.ts +2 -0
- package/corpus/templates/macros/app/i18n/ja-JP.ts +2 -0
- package/corpus/templates/macros/app/i18n/ko-KR.ts +2 -0
- package/corpus/templates/macros/app/i18n/pt-BR.ts +2 -0
- package/corpus/templates/macros/app/i18n/zh-CN.ts +2 -0
- package/corpus/templates/macros/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/macros/app/routes/_index.tsx +22 -12
- package/corpus/templates/macros/app/routes/analytics.tsx +31 -10
- package/corpus/templates/macros/changelog/2026-07-11-daily-tracking-now-loads-and-updates-more-quickly.md +6 -0
- package/corpus/templates/macros/changelog/2026-07-11-data-load-failures-now-show-a-clear-error-with-a-retry-actio.md +6 -0
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/mail/.env.example +16 -11
- package/corpus/templates/mail/actions/list-emails.ts +39 -35
- package/corpus/templates/mail/app/components/email/ComposeModal.tsx +58 -6
- package/corpus/templates/mail/app/components/email/EmailListItem.tsx +35 -2
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +113 -104
- package/corpus/templates/mail/app/root.tsx +8 -10
- package/corpus/templates/mail/changelog/2026-07-11-compose-and-navigation-motion-now-feel-faster-and-smoother.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-11-swipe-to-archive-or-snooze-now-responds-to-quick-flicks-not-.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-11-the-assistant-now-sees-the-same-inbox-you-do-snoozed-mail-st.md +6 -0
- package/corpus/templates/mail/server/handlers/emails.ts +25 -69
- package/corpus/templates/mail/server/lib/list-inbox-emails.ts +169 -0
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/plan/.env.example +4 -0
- package/corpus/templates/plan/actions/create-plan-design.ts +89 -81
- package/corpus/templates/plan/actions/create-prototype-plan.ts +72 -59
- package/corpus/templates/plan/actions/create-ui-plan.ts +70 -55
- package/corpus/templates/plan/actions/create-visual-plan.ts +65 -51
- package/corpus/templates/plan/actions/update-local-plan-folder.ts +43 -30
- package/corpus/templates/plan/actions/update-visual-plan.ts +81 -64
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +17 -0
- package/corpus/templates/plan/app/components/ui/tabs.tsx +1 -1
- package/corpus/templates/plan/app/i18n/ar-SA.ts +10 -0
- package/corpus/templates/plan/app/i18n/de-DE.ts +10 -0
- package/corpus/templates/plan/app/i18n/en-US.ts +10 -0
- package/corpus/templates/plan/app/i18n/es-ES.ts +10 -0
- package/corpus/templates/plan/app/i18n/fr-FR.ts +10 -0
- package/corpus/templates/plan/app/i18n/hi-IN.ts +10 -0
- package/corpus/templates/plan/app/i18n/ja-JP.ts +10 -0
- package/corpus/templates/plan/app/i18n/ko-KR.ts +10 -0
- package/corpus/templates/plan/app/i18n/pt-BR.ts +10 -0
- package/corpus/templates/plan/app/i18n/zh-CN.ts +10 -0
- package/corpus/templates/plan/app/i18n/zh-TW.ts +10 -0
- package/corpus/templates/plan/app/lib/plan-local-bridge.ts +80 -1
- package/corpus/templates/plan/app/pages/PlansPage.tsx +152 -4
- package/corpus/templates/plan/app/root.tsx +11 -0
- package/corpus/templates/plan/changelog/2026-07-11-local-plans-now-explain-and-recover-from-browser-permission-.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-11-plan-edits-now-save-atomically-and-can-no-longer-partially-a.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-11-plan-lists-now-show-a-clear-error-with-a-retry-action-when-t.md +6 -0
- package/corpus/templates/plan/shared/plan-content.ts +546 -260
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/slides/actions/delete-slide-comment.ts +49 -0
- package/corpus/templates/slides/actions/update-slide-comment.ts +93 -0
- package/corpus/templates/slides/actions/view-screen.ts +14 -6
- package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +33 -10
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/GenerateSlidesDialog.tsx +2 -2
- package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +4 -2
- package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +4 -3
- package/corpus/templates/slides/app/context/DeckContext.tsx +9 -0
- package/corpus/templates/slides/app/i18n/ar-SA.ts +6 -0
- package/corpus/templates/slides/app/i18n/de-DE.ts +6 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +6 -0
- package/corpus/templates/slides/app/i18n/es-ES.ts +6 -0
- package/corpus/templates/slides/app/i18n/fr-FR.ts +6 -0
- package/corpus/templates/slides/app/i18n/hi-IN.ts +6 -0
- package/corpus/templates/slides/app/i18n/ja-JP.ts +6 -0
- package/corpus/templates/slides/app/i18n/ko-KR.ts +6 -0
- package/corpus/templates/slides/app/i18n/pt-BR.ts +6 -0
- package/corpus/templates/slides/app/i18n/zh-CN.ts +5 -0
- package/corpus/templates/slides/app/i18n/zh-TW.ts +5 -0
- package/corpus/templates/slides/app/pages/DesignSystems.tsx +23 -2
- package/corpus/templates/slides/app/pages/Index.tsx +29 -1
- package/corpus/templates/slides/changelog/2026-07-11-comment-load-failures-now-show-a-retry-action-instead-of-say.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-comment-pins-now-clear-with-a-faster-smoother-confirmation.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-deck-and-design-system-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-editor-toggles-and-toolbar-menus-now-animate-smoothly.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-the-assistant-can-now-resolve-reopen-and-delete-slide-commen.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-viewing-slides-no-longer-loads-every-deck-s-full-contents-in.md +6 -0
- package/corpus/templates/slides/server/routes/api/comments/[id].delete.ts +29 -48
- package/corpus/templates/slides/server/routes/api/comments/[id].patch.ts +29 -65
- package/dist/action.d.ts +23 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +13 -0
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +3 -0
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/context-directives-transform.d.ts +25 -0
- package/dist/agent/engine/context-directives-transform.d.ts.map +1 -0
- package/dist/agent/engine/context-directives-transform.js +53 -0
- package/dist/agent/engine/context-directives-transform.js.map +1 -0
- package/dist/agent/engine/continuation-dispatch-retry.d.ts +40 -0
- package/dist/agent/engine/continuation-dispatch-retry.d.ts.map +1 -0
- package/dist/agent/engine/continuation-dispatch-retry.js +109 -0
- package/dist/agent/engine/continuation-dispatch-retry.js.map +1 -0
- package/dist/agent/engine/tool-call-journal-seed.d.ts +46 -0
- package/dist/agent/engine/tool-call-journal-seed.d.ts.map +1 -0
- package/dist/agent/engine/tool-call-journal-seed.js +60 -0
- package/dist/agent/engine/tool-call-journal-seed.js.map +1 -0
- package/dist/agent/production-agent.d.ts +7 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +102 -222
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +7 -3
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/plan-local.d.ts.map +1 -1
- package/dist/cli/plan-local.js +8 -2
- package/dist/cli/plan-local.js.map +1 -1
- package/dist/cli/skills-content/assets-skill.d.ts +2 -0
- package/dist/cli/skills-content/assets-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/assets-skill.js +84 -0
- package/dist/cli/skills-content/assets-skill.js.map +1 -0
- package/dist/cli/skills-content/canvas.d.ts +4 -0
- package/dist/cli/skills-content/canvas.d.ts.map +1 -0
- package/dist/cli/skills-content/canvas.js +152 -0
- package/dist/cli/skills-content/canvas.js.map +1 -0
- package/dist/cli/skills-content/connection.d.ts +2 -0
- package/dist/cli/skills-content/connection.d.ts.map +1 -0
- package/dist/cli/skills-content/connection.js +53 -0
- package/dist/cli/skills-content/connection.js.map +1 -0
- package/dist/cli/skills-content/content-skill.d.ts +2 -0
- package/dist/cli/skills-content/content-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/content-skill.js +110 -0
- package/dist/cli/skills-content/content-skill.js.map +1 -0
- package/dist/cli/skills-content/design-exploration-skill.d.ts +2 -0
- package/dist/cli/skills-content/design-exploration-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/design-exploration-skill.js +119 -0
- package/dist/cli/skills-content/design-exploration-skill.js.map +1 -0
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts +2 -0
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/design-visual-edit-skill.js +229 -0
- package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -0
- package/dist/cli/skills-content/document-quality.d.ts +4 -0
- package/dist/cli/skills-content/document-quality.d.ts.map +1 -0
- package/dist/cli/skills-content/document-quality.js +195 -0
- package/dist/cli/skills-content/document-quality.js.map +1 -0
- package/dist/cli/skills-content/exemplar.d.ts +4 -0
- package/dist/cli/skills-content/exemplar.d.ts.map +1 -0
- package/dist/cli/skills-content/exemplar.js +68 -0
- package/dist/cli/skills-content/exemplar.js.map +1 -0
- package/dist/cli/skills-content/help.d.ts +2 -0
- package/dist/cli/skills-content/help.d.ts.map +1 -0
- package/dist/cli/skills-content/help.js +78 -0
- package/dist/cli/skills-content/help.js.map +1 -0
- package/dist/cli/skills-content/index.d.ts +23 -0
- package/dist/cli/skills-content/index.d.ts.map +1 -0
- package/dist/cli/skills-content/index.js +23 -0
- package/dist/cli/skills-content/index.js.map +1 -0
- package/dist/cli/skills-content/local-files.d.ts +2 -0
- package/dist/cli/skills-content/local-files.d.ts.map +1 -0
- package/dist/cli/skills-content/local-files.js +96 -0
- package/dist/cli/skills-content/local-files.js.map +1 -0
- package/dist/cli/skills-content/plan-setup-auth.d.ts +9 -0
- package/dist/cli/skills-content/plan-setup-auth.d.ts.map +1 -0
- package/dist/cli/skills-content/plan-setup-auth.js +81 -0
- package/dist/cli/skills-content/plan-setup-auth.js.map +1 -0
- package/dist/cli/skills-content/visual-plan-skill.d.ts +2 -0
- package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/visual-plan-skill.js +471 -0
- package/dist/cli/skills-content/visual-plan-skill.js.map +1 -0
- package/dist/cli/skills-content/visual-recap-skill.d.ts +2 -0
- package/dist/cli/skills-content/visual-recap-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/visual-recap-skill.js +548 -0
- package/dist/cli/skills-content/visual-recap-skill.js.map +1 -0
- package/dist/cli/skills-content/visualize-repo-skill.d.ts +2 -0
- package/dist/cli/skills-content/visualize-repo-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/visualize-repo-skill.js +94 -0
- package/dist/cli/skills-content/visualize-repo-skill.js.map +1 -0
- package/dist/cli/skills-content/wireframe.d.ts +4 -0
- package/dist/cli/skills-content/wireframe.d.ts.map +1 -0
- package/dist/cli/skills-content/wireframe.js +347 -0
- package/dist/cli/skills-content/wireframe.js.map +1 -0
- package/dist/cli/skills.d.ts +2 -10
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +2 -2710
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +4 -2
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +15 -3
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/FeedbackButton.js +2 -2
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/app-providers.d.ts +13 -5
- package/dist/client/app-providers.d.ts.map +1 -1
- package/dist/client/app-providers.js +9 -6
- package/dist/client/app-providers.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +4 -0
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +3 -3
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/composer/PastedTextChip.js +1 -1
- package/dist/client/composer/PastedTextChip.js.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts +3 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.js +35 -14
- package/dist/client/composer/RealtimeVoiceMode.js.map +1 -1
- package/dist/client/composer/TiptapComposer.js +1 -1
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/VoiceButton.d.ts +2 -0
- package/dist/client/composer/VoiceButton.d.ts.map +1 -1
- package/dist/client/composer/VoiceButton.js +9 -3
- package/dist/client/composer/VoiceButton.js.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.d.ts +5 -0
- package/dist/client/composer/useRealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.js +91 -12
- package/dist/client/composer/useRealtimeVoiceMode.js.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.js +4 -1
- package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
- package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionEditor.js +15 -5
- package/dist/client/extensions/ExtensionEditor.js.map +1 -1
- package/dist/client/extensions/ExtensionQueryErrorState.d.ts +8 -0
- package/dist/client/extensions/ExtensionQueryErrorState.d.ts.map +1 -0
- package/dist/client/extensions/ExtensionQueryErrorState.js +11 -0
- package/dist/client/extensions/ExtensionQueryErrorState.js.map +1 -0
- package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionSlot.js +17 -7
- package/dist/client/extensions/ExtensionSlot.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +17 -7
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.js +5 -3
- package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +21 -8
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/index.d.ts +0 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +0 -5
- package/dist/client/index.js.map +1 -1
- package/dist/client/progress/RunsTray.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.js +7 -3
- package/dist/client/progress/RunsTray.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +4 -0
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +2 -0
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +4 -0
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/tool-cells/EditCell.d.ts.map +1 -1
- package/dist/client/tool-cells/EditCell.js +2 -1
- package/dist/client/tool-cells/EditCell.js.map +1 -1
- package/dist/client/tool-cells/FilesChangedSummary.d.ts.map +1 -1
- package/dist/client/tool-cells/FilesChangedSummary.js +2 -1
- package/dist/client/tool-cells/FilesChangedSummary.js.map +1 -1
- package/dist/client/tool-cells/WriteCell.d.ts.map +1 -1
- package/dist/client/tool-cells/WriteCell.js +2 -1
- package/dist/client/tool-cells/WriteCell.js.map +1 -1
- package/dist/client/visual-style-controls.js +1 -1
- package/dist/client/visual-style-controls.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +36 -14
- package/dist/deploy/build.js.map +1 -1
- package/dist/integrations/google-docs-poller.d.ts +7 -0
- package/dist/integrations/google-docs-poller.d.ts.map +1 -1
- package/dist/integrations/google-docs-poller.js +13 -3
- package/dist/integrations/google-docs-poller.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +10 -0
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/webhook-handler.d.ts +11 -0
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +16 -4
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +12 -0
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +13 -3
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/localization/default-messages.d.ts +7 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +8 -1
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp/oauth-token.d.ts +1 -1
- package/dist/mcp/oauth-token.d.ts.map +1 -1
- package/dist/mcp/oauth-token.js +6 -1
- package/dist/mcp/oauth-token.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts.map +1 -1
- package/dist/observability/routes.js +32 -0
- package/dist/observability/routes.js.map +1 -1
- package/dist/observability/sentiment.d.ts +42 -0
- package/dist/observability/sentiment.d.ts.map +1 -0
- package/dist/observability/sentiment.js +196 -0
- package/dist/observability/sentiment.js.map +1 -0
- package/dist/observability/store.d.ts +5 -0
- package/dist/observability/store.d.ts.map +1 -1
- package/dist/observability/store.js +17 -0
- package/dist/observability/store.js.map +1 -1
- package/dist/observability/traces.d.ts +2 -0
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +42 -57
- package/dist/observability/traces.js.map +1 -1
- package/dist/observability/tracking-identity.d.ts +3 -0
- package/dist/observability/tracking-identity.d.ts.map +1 -0
- package/dist/observability/tracking-identity.js +51 -0
- package/dist/observability/tracking-identity.js.map +1 -0
- package/dist/observability/types.d.ts +10 -0
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js +3 -0
- package/dist/observability/types.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/storage.d.ts +6 -0
- package/dist/secrets/storage.d.ts.map +1 -1
- package/dist/secrets/storage.js +61 -3
- package/dist/secrets/storage.js.map +1 -1
- package/dist/server/agent-chat/action-filters-a2a.d.ts +50 -0
- package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -0
- package/dist/server/agent-chat/action-filters-a2a.js +127 -0
- package/dist/server/agent-chat/action-filters-a2a.js.map +1 -0
- package/dist/server/agent-chat/browser-team-tools.d.ts +21 -0
- package/dist/server/agent-chat/browser-team-tools.d.ts.map +1 -0
- package/dist/server/agent-chat/browser-team-tools.js +417 -0
- package/dist/server/agent-chat/browser-team-tools.js.map +1 -0
- package/dist/server/agent-chat/context-tools.d.ts +33 -0
- package/dist/server/agent-chat/context-tools.d.ts.map +1 -0
- package/dist/server/agent-chat/context-tools.js +520 -0
- package/dist/server/agent-chat/context-tools.js.map +1 -0
- package/dist/server/agent-chat/framework-prompts.d.ts +65 -0
- package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -0
- package/dist/server/agent-chat/framework-prompts.js +403 -0
- package/dist/server/agent-chat/framework-prompts.js.map +1 -0
- package/dist/server/agent-chat/lazy-fs.d.ts +2 -0
- package/dist/server/agent-chat/lazy-fs.d.ts.map +1 -0
- package/dist/server/agent-chat/lazy-fs.js +11 -0
- package/dist/server/agent-chat/lazy-fs.js.map +1 -0
- package/dist/server/agent-chat/mcp-glue.d.ts +9 -0
- package/dist/server/agent-chat/mcp-glue.d.ts.map +1 -0
- package/dist/server/agent-chat/mcp-glue.js +63 -0
- package/dist/server/agent-chat/mcp-glue.js.map +1 -0
- package/dist/server/agent-chat/plugin-options.d.ts +322 -0
- package/dist/server/agent-chat/plugin-options.d.ts.map +1 -0
- package/dist/server/agent-chat/plugin-options.js +2 -0
- package/dist/server/agent-chat/plugin-options.js.map +1 -0
- package/dist/server/agent-chat/process-run-failure.d.ts +12 -0
- package/dist/server/agent-chat/process-run-failure.d.ts.map +1 -0
- package/dist/server/agent-chat/process-run-failure.js +24 -0
- package/dist/server/agent-chat/process-run-failure.js.map +1 -0
- package/dist/server/agent-chat/prompt-resources.d.ts +28 -0
- package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -0
- package/dist/server/agent-chat/prompt-resources.js +514 -0
- package/dist/server/agent-chat/prompt-resources.js.map +1 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.d.ts +5 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.d.ts.map +1 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.js +53 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.js.map +1 -0
- package/dist/server/agent-chat/request-surface.d.ts +8 -0
- package/dist/server/agent-chat/request-surface.d.ts.map +1 -0
- package/dist/server/agent-chat/request-surface.js +56 -0
- package/dist/server/agent-chat/request-surface.js.map +1 -0
- package/dist/server/agent-chat/run-code-tools.d.ts +17 -0
- package/dist/server/agent-chat/run-code-tools.d.ts.map +1 -0
- package/dist/server/agent-chat/run-code-tools.js +55 -0
- package/dist/server/agent-chat/run-code-tools.js.map +1 -0
- package/dist/server/agent-chat/script-entries.d.ts +47 -0
- package/dist/server/agent-chat/script-entries.d.ts.map +1 -0
- package/dist/server/agent-chat/script-entries.js +633 -0
- package/dist/server/agent-chat/script-entries.js.map +1 -0
- package/dist/server/agent-chat/shared-thread.d.ts +33 -0
- package/dist/server/agent-chat/shared-thread.d.ts.map +1 -0
- package/dist/server/agent-chat/shared-thread.js +242 -0
- package/dist/server/agent-chat/shared-thread.js.map +1 -0
- package/dist/server/agent-chat/skill-frontmatter.d.ts +7 -0
- package/dist/server/agent-chat/skill-frontmatter.d.ts.map +1 -0
- package/dist/server/agent-chat/skill-frontmatter.js +26 -0
- package/dist/server/agent-chat/skill-frontmatter.js.map +1 -0
- package/dist/server/agent-chat-plugin.d.ts +45 -486
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +173 -3005
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/agent-teams.d.ts +10 -0
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +13 -3
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +50 -52
- package/dist/server/auth.js.map +1 -1
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +22 -21
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/edge.d.ts +1 -0
- package/dist/server/edge.d.ts.map +1 -1
- package/dist/server/edge.js +1 -0
- package/dist/server/edge.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +1 -16
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/realtime-voice.d.ts +3 -0
- package/dist/server/realtime-voice.d.ts.map +1 -1
- package/dist/server/realtime-voice.js +29 -5
- package/dist/server/realtime-voice.js.map +1 -1
- package/dist/server/request-origin.d.ts.map +1 -1
- package/dist/server/request-origin.js +6 -3
- package/dist/server/request-origin.js.map +1 -1
- package/dist/server/ssr-handler.d.ts.map +1 -1
- package/dist/server/ssr-handler.js +47 -2
- package/dist/server/ssr-handler.js.map +1 -1
- package/dist/sharing/access.d.ts +63 -3
- package/dist/sharing/access.d.ts.map +1 -1
- package/dist/sharing/access.js +53 -15
- package/dist/sharing/access.js.map +1 -1
- package/dist/sharing/registry.d.ts +7 -0
- package/dist/sharing/registry.d.ts.map +1 -1
- package/dist/sharing/registry.js.map +1 -1
- package/dist/styles/agent-native.css +15 -14
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/dist/templates/default/app/i18n/ar-SA.ts +6 -0
- package/dist/templates/default/app/i18n/de-DE.ts +6 -0
- package/dist/templates/default/app/i18n/en-US.ts +6 -0
- package/dist/templates/default/app/i18n/es-ES.ts +6 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +6 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +6 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +6 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +6 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +6 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +6 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +6 -0
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
- package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
- package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
- package/dist/templates/workspace-core/src/server/index.ts +4 -2
- package/dist/testing.d.ts +16 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +16 -0
- package/dist/testing.js.map +1 -0
- package/dist/triggers/dispatcher.d.ts +7 -0
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +13 -3
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/vite/client.d.ts +16 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +105 -2
- package/dist/vite/client.js.map +1 -1
- package/docs/content/authentication.mdx +3 -3
- package/docs/content/doctor.mdx +170 -0
- package/docs/content/external-agents.mdx +8 -7
- package/docs/content/locales/ar-SA/authentication.mdx +2 -2
- package/docs/content/locales/ar-SA/external-agents.mdx +8 -7
- package/docs/content/locales/ar-SA/mcp-protocol.mdx +1 -1
- package/docs/content/locales/ar-SA/security.mdx +2 -0
- package/docs/content/locales/de-DE/authentication.mdx +1 -1
- package/docs/content/locales/de-DE/external-agents.mdx +8 -7
- package/docs/content/locales/de-DE/mcp-protocol.mdx +1 -1
- package/docs/content/locales/de-DE/security.mdx +2 -0
- package/docs/content/locales/es-ES/authentication.mdx +2 -2
- package/docs/content/locales/es-ES/external-agents.mdx +8 -7
- package/docs/content/locales/es-ES/mcp-protocol.mdx +1 -1
- package/docs/content/locales/es-ES/security.mdx +2 -0
- package/docs/content/locales/fr-FR/authentication.mdx +1 -1
- package/docs/content/locales/fr-FR/external-agents.mdx +8 -7
- package/docs/content/locales/fr-FR/mcp-protocol.mdx +1 -1
- package/docs/content/locales/fr-FR/security.mdx +2 -0
- package/docs/content/locales/hi-IN/authentication.mdx +2 -2
- package/docs/content/locales/hi-IN/external-agents.mdx +8 -7
- package/docs/content/locales/hi-IN/mcp-protocol.mdx +1 -1
- package/docs/content/locales/hi-IN/security.mdx +2 -0
- package/docs/content/locales/ja-JP/authentication.mdx +2 -2
- package/docs/content/locales/ja-JP/external-agents.mdx +8 -7
- package/docs/content/locales/ja-JP/mcp-protocol.mdx +1 -1
- package/docs/content/locales/ja-JP/security.mdx +2 -0
- package/docs/content/locales/ko-KR/authentication.mdx +2 -2
- package/docs/content/locales/ko-KR/external-agents.mdx +8 -7
- package/docs/content/locales/ko-KR/mcp-protocol.mdx +1 -1
- package/docs/content/locales/ko-KR/security.mdx +2 -0
- package/docs/content/locales/pt-BR/authentication.mdx +2 -2
- package/docs/content/locales/pt-BR/external-agents.mdx +8 -7
- package/docs/content/locales/pt-BR/mcp-protocol.mdx +1 -1
- package/docs/content/locales/pt-BR/security.mdx +2 -0
- package/docs/content/locales/zh-CN/authentication.mdx +2 -2
- package/docs/content/locales/zh-CN/external-agents.mdx +8 -7
- package/docs/content/locales/zh-CN/mcp-protocol.mdx +1 -1
- package/docs/content/locales/zh-CN/security.mdx +2 -0
- package/docs/content/locales/zh-TW/authentication.mdx +2 -2
- package/docs/content/locales/zh-TW/external-agents.mdx +8 -7
- package/docs/content/locales/zh-TW/mcp-protocol.mdx +1 -1
- package/docs/content/locales/zh-TW/security.mdx +2 -0
- package/docs/content/mcp-protocol.mdx +1 -1
- package/docs/content/security.mdx +2 -0
- package/package.json +6 -2
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/src/templates/default/app/i18n/ar-SA.ts +6 -0
- package/src/templates/default/app/i18n/de-DE.ts +6 -0
- package/src/templates/default/app/i18n/en-US.ts +6 -0
- package/src/templates/default/app/i18n/es-ES.ts +6 -0
- package/src/templates/default/app/i18n/fr-FR.ts +6 -0
- package/src/templates/default/app/i18n/hi-IN.ts +6 -0
- package/src/templates/default/app/i18n/ja-JP.ts +6 -0
- package/src/templates/default/app/i18n/ko-KR.ts +6 -0
- package/src/templates/default/app/i18n/pt-BR.ts +6 -0
- package/src/templates/default/app/i18n/zh-CN.ts +6 -0
- package/src/templates/default/app/i18n/zh-TW.ts +6 -0
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
- package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
- package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
- package/src/templates/workspace-core/src/server/index.ts +4 -2
- package/corpus/core/src/client/ProductionAgentPanel.tsx +0 -9
- package/corpus/core/src/client/auth-redirect-url.ts +0 -23
- package/corpus/core/src/client/useProductionAgent.ts +0 -253
- package/corpus/core/src/shared/auth-redirect-url.ts +0 -1
- package/corpus/templates/analytics/app/pages/Index.tsx +0 -16
- package/corpus/templates/analytics/seeds/dashboards/agent-observability-llm.json +0 -173
- package/dist/client/ProductionAgentPanel.d.ts +0 -6
- package/dist/client/ProductionAgentPanel.d.ts.map +0 -1
- package/dist/client/ProductionAgentPanel.js +0 -6
- package/dist/client/ProductionAgentPanel.js.map +0 -1
- package/dist/client/auth-redirect-url.d.ts +0 -2
- package/dist/client/auth-redirect-url.d.ts.map +0 -1
- package/dist/client/auth-redirect-url.js +0 -19
- package/dist/client/auth-redirect-url.js.map +0 -1
- package/dist/client/useProductionAgent.d.ts +0 -24
- package/dist/client/useProductionAgent.d.ts.map +0 -1
- package/dist/client/useProductionAgent.js +0 -179
- package/dist/client/useProductionAgent.js.map +0 -1
- package/dist/shared/auth-redirect-url.d.ts +0 -2
- package/dist/shared/auth-redirect-url.d.ts.map +0 -1
- package/dist/shared/auth-redirect-url.js +0 -2
- package/dist/shared/auth-redirect-url.js.map +0 -1
|
@@ -48,7 +48,7 @@ Default to Apple/Linear-level restraint: make the primary workflow obvious, then
|
|
|
48
48
|
|
|
49
49
|
- **Typography**: Use the product's existing type system first. For net-new public pages, choose characterful but readable type and keep sizing appropriate to the surface.
|
|
50
50
|
- **Color and theme**: Use semantic tokens and CSS variables. Avoid one-note palettes and default purple/blue gradients unless the brand demands them.
|
|
51
|
-
- **Motion**: Prefer purposeful transitions and small state changes. Use CSS transitions/keyframes unless the app already uses a motion library.
|
|
51
|
+
- **Motion**: Prefer purposeful transitions and small state changes. Use CSS transitions/keyframes unless the app already uses a motion library. Never `transition-all` — list the properties that actually change (e.g. `transition-[opacity,transform]`). Use the shared easing tokens defined in `packages/core/src/styles/agent-native.css` instead of hand-typing curves: `var(--ease-drawer)` (260ms, drawers/app chrome), `var(--ease-collapse)` (200ms, expand/collapse), `var(--ease-out-strong)` (snappy entrances) — in Tailwind, `ease-[var(--ease-collapse)]`. Enter/exit with ease-out, never `ease-in`. Overlays that zoom in must set the Radix origin var (e.g. `origin-[--radix-popover-content-transform-origin]`). Animate `transform`/`opacity`, not width/height/padding/box-shadow. Gate looping or large-movement animations with `motion-reduce:`. Command palettes and keyboard-triggered actions get no animation.
|
|
52
52
|
- **Composition**: Match the workflow. Operational apps should be dense and scannable; marketing or portfolio pages can be more immersive.
|
|
53
53
|
- **Visual assets**: Websites, games, and object-focused pages need real or generated media when images help users understand the subject.
|
|
54
54
|
- **Responsive fit**: Text must not overflow buttons, cards, tabs, sidebars, or fixed-format tools. Use stable dimensions for boards, grids, toolbars, and counters.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { getRequestUserEmail } from "@agent-native/core/server/request-context";
|
|
3
|
+
import { assertAccess } from "@agent-native/core/sharing";
|
|
4
|
+
import { and, eq } from "drizzle-orm";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
|
|
7
|
+
import { getDb, schema } from "../server/db/index.js";
|
|
8
|
+
|
|
9
|
+
export default defineAction({
|
|
10
|
+
description:
|
|
11
|
+
"Delete a slide comment. Authors can delete their own comments; otherwise editor access is required.",
|
|
12
|
+
schema: z.object({
|
|
13
|
+
id: z.string().describe("Comment ID"),
|
|
14
|
+
deckId: z.string().optional().describe("Deck ID"),
|
|
15
|
+
}),
|
|
16
|
+
run: async (args) => {
|
|
17
|
+
const db = getDb();
|
|
18
|
+
const [comment] = await db
|
|
19
|
+
.select({
|
|
20
|
+
deckId: schema.slideComments.deckId,
|
|
21
|
+
authorEmail: schema.slideComments.authorEmail,
|
|
22
|
+
})
|
|
23
|
+
.from(schema.slideComments)
|
|
24
|
+
.where(eq(schema.slideComments.id, args.id))
|
|
25
|
+
.limit(1);
|
|
26
|
+
|
|
27
|
+
if (!comment || (args.deckId && comment.deckId !== args.deckId)) {
|
|
28
|
+
throw new Error(`Comment not found: ${args.id}`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const userEmail = getRequestUserEmail();
|
|
32
|
+
if (comment.authorEmail === userEmail) {
|
|
33
|
+
await assertAccess("deck", comment.deckId, "viewer");
|
|
34
|
+
} else {
|
|
35
|
+
await assertAccess("deck", comment.deckId, "editor");
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
await db
|
|
39
|
+
.delete(schema.slideComments)
|
|
40
|
+
.where(
|
|
41
|
+
and(
|
|
42
|
+
eq(schema.slideComments.id, args.id),
|
|
43
|
+
eq(schema.slideComments.deckId, comment.deckId),
|
|
44
|
+
),
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
return { ok: true };
|
|
48
|
+
},
|
|
49
|
+
});
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { getRequestUserEmail } from "@agent-native/core/server/request-context";
|
|
3
|
+
import { assertAccess } from "@agent-native/core/sharing";
|
|
4
|
+
import { and, eq } from "drizzle-orm";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
|
|
7
|
+
import { getDb, schema } from "../server/db/index.js";
|
|
8
|
+
|
|
9
|
+
export default defineAction({
|
|
10
|
+
description:
|
|
11
|
+
"Update a slide comment. Resolving or reopening a comment applies to the full thread.",
|
|
12
|
+
schema: z.object({
|
|
13
|
+
id: z.string().describe("Comment ID"),
|
|
14
|
+
deckId: z.string().optional().describe("Deck ID"),
|
|
15
|
+
content: z.string().optional().describe("New comment text"),
|
|
16
|
+
resolved: z.coerce.boolean().optional().describe("Resolved state"),
|
|
17
|
+
}),
|
|
18
|
+
run: async (args) => {
|
|
19
|
+
const db = getDb();
|
|
20
|
+
const [comment] = await db
|
|
21
|
+
.select({
|
|
22
|
+
deckId: schema.slideComments.deckId,
|
|
23
|
+
threadId: schema.slideComments.threadId,
|
|
24
|
+
authorEmail: schema.slideComments.authorEmail,
|
|
25
|
+
})
|
|
26
|
+
.from(schema.slideComments)
|
|
27
|
+
.where(eq(schema.slideComments.id, args.id))
|
|
28
|
+
.limit(1);
|
|
29
|
+
|
|
30
|
+
if (!comment || (args.deckId && comment.deckId !== args.deckId)) {
|
|
31
|
+
throw new Error(`Comment not found: ${args.id}`);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const userEmail = getRequestUserEmail();
|
|
35
|
+
// Resolving or reopening changes state for the whole thread (every
|
|
36
|
+
// author's comments), not just the caller's own row, so it always
|
|
37
|
+
// requires editor access — matching content's update-comment action.
|
|
38
|
+
if (
|
|
39
|
+
args.resolved === true ||
|
|
40
|
+
args.resolved === false ||
|
|
41
|
+
comment.authorEmail !== userEmail
|
|
42
|
+
) {
|
|
43
|
+
await assertAccess("deck", comment.deckId, "editor");
|
|
44
|
+
} else {
|
|
45
|
+
await assertAccess("deck", comment.deckId, "viewer");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const updatedAt = new Date().toISOString();
|
|
49
|
+
|
|
50
|
+
if (args.resolved === true) {
|
|
51
|
+
await db
|
|
52
|
+
.update(schema.slideComments)
|
|
53
|
+
.set({ resolved: true, updatedAt })
|
|
54
|
+
.where(
|
|
55
|
+
and(
|
|
56
|
+
eq(schema.slideComments.deckId, comment.deckId),
|
|
57
|
+
eq(schema.slideComments.threadId, comment.threadId),
|
|
58
|
+
),
|
|
59
|
+
);
|
|
60
|
+
return { ok: true, resolved: true };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (args.resolved === false) {
|
|
64
|
+
await db
|
|
65
|
+
.update(schema.slideComments)
|
|
66
|
+
.set({ resolved: false, updatedAt })
|
|
67
|
+
.where(
|
|
68
|
+
and(
|
|
69
|
+
eq(schema.slideComments.deckId, comment.deckId),
|
|
70
|
+
eq(schema.slideComments.threadId, comment.threadId),
|
|
71
|
+
),
|
|
72
|
+
);
|
|
73
|
+
return { ok: true, resolved: false };
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Both resolve and reopen return early above, so only content edits remain.
|
|
77
|
+
if (args.content === undefined) {
|
|
78
|
+
return { ok: true };
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
await db
|
|
82
|
+
.update(schema.slideComments)
|
|
83
|
+
.set({ content: args.content, updatedAt })
|
|
84
|
+
.where(
|
|
85
|
+
and(
|
|
86
|
+
eq(schema.slideComments.id, args.id),
|
|
87
|
+
eq(schema.slideComments.deckId, comment.deckId),
|
|
88
|
+
),
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
return { ok: true };
|
|
92
|
+
},
|
|
93
|
+
});
|
|
@@ -222,8 +222,16 @@ export default defineAction({
|
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
// ─── List view: user is on the deck list ─────────────────────────────
|
|
225
|
+
// Project only the columns this summary reads. `decks.data` holds each
|
|
226
|
+
// deck's entire slide JSON and can be large — never select it for a
|
|
227
|
+
// plain list. Mirrors the light-mode projection in list-decks.ts; call
|
|
228
|
+
// list-decks or open a specific deck for slide counts / content.
|
|
225
229
|
const rows = await db
|
|
226
|
-
.select(
|
|
230
|
+
.select({
|
|
231
|
+
id: schema.decks.id,
|
|
232
|
+
title: schema.decks.title,
|
|
233
|
+
ownerEmail: schema.decks.ownerEmail,
|
|
234
|
+
})
|
|
227
235
|
.from(schema.decks)
|
|
228
236
|
.where(accessFilter(schema.decks, schema.deckShares))
|
|
229
237
|
.orderBy(desc(schema.decks.updatedAt));
|
|
@@ -257,12 +265,12 @@ export default defineAction({
|
|
|
257
265
|
lines.push(`(no decks — use create-deck to make one)`);
|
|
258
266
|
} else {
|
|
259
267
|
for (const row of filteredRows) {
|
|
260
|
-
|
|
261
|
-
const slideCount = Array.isArray(data?.slides) ? data.slides.length : 0;
|
|
262
|
-
lines.push(
|
|
263
|
-
`- id=${row.id} title="${row.title ?? data?.title ?? "(untitled)"}" slides=${slideCount}`,
|
|
264
|
-
);
|
|
268
|
+
lines.push(`- id=${row.id} title="${row.title ?? "(untitled)"}"`);
|
|
265
269
|
}
|
|
270
|
+
lines.push(``);
|
|
271
|
+
lines.push(
|
|
272
|
+
`(slide counts omitted here for performance — call list-decks or open a deck to see slide content)`,
|
|
273
|
+
);
|
|
266
274
|
}
|
|
267
275
|
return lines.join("\n");
|
|
268
276
|
},
|
|
@@ -5,6 +5,8 @@ import {
|
|
|
5
5
|
IconTrash,
|
|
6
6
|
IconMessageCircle,
|
|
7
7
|
IconChevronDown,
|
|
8
|
+
IconAlertTriangle,
|
|
9
|
+
IconRefresh,
|
|
8
10
|
} from "@tabler/icons-react";
|
|
9
11
|
import { useState, useRef, useEffect } from "react";
|
|
10
12
|
|
|
@@ -435,13 +437,15 @@ export function SlideCommentsPanel({
|
|
|
435
437
|
onClose,
|
|
436
438
|
}: SlideCommentsPanelProps) {
|
|
437
439
|
const t = useT();
|
|
438
|
-
const
|
|
440
|
+
const commentsQuery = useSlideComments(deckId, slideId);
|
|
441
|
+
const threads = commentsQuery.data ?? [];
|
|
439
442
|
const [showResolved, setShowResolved] = useState(false);
|
|
440
443
|
const [addingComment, setAddingComment] = useState(false);
|
|
441
444
|
|
|
442
445
|
const activeThreads = threads.filter((t) => !t.resolved);
|
|
443
446
|
const resolvedThreads = threads.filter((t) => t.resolved);
|
|
444
447
|
const visibleThreads = showResolved ? threads : activeThreads;
|
|
448
|
+
const showLoadError = commentsQuery.isError && threads.length === 0;
|
|
445
449
|
|
|
446
450
|
// When pending comment arrives, cancel any manual "add comment" mode
|
|
447
451
|
useEffect(() => {
|
|
@@ -504,15 +508,33 @@ export function SlideCommentsPanel({
|
|
|
504
508
|
/>
|
|
505
509
|
)}
|
|
506
510
|
|
|
511
|
+
{showLoadError && (
|
|
512
|
+
<div className="flex flex-col items-center gap-2 rounded-lg border border-dashed border-destructive/30 bg-destructive/5 px-3 py-8 text-center">
|
|
513
|
+
<IconAlertTriangle className="size-5 text-destructive/70" />
|
|
514
|
+
<p className="text-xs text-muted-foreground">
|
|
515
|
+
{t("comments.loadFailed")}
|
|
516
|
+
</p>
|
|
517
|
+
<button
|
|
518
|
+
type="button"
|
|
519
|
+
onClick={() => void commentsQuery.refetch()}
|
|
520
|
+
className="inline-flex h-7 items-center gap-1.5 rounded-md border border-border bg-background px-2.5 text-xs font-medium text-foreground transition-colors hover:bg-accent"
|
|
521
|
+
>
|
|
522
|
+
<IconRefresh className="size-3.5" />
|
|
523
|
+
{t("comments.retry")}
|
|
524
|
+
</button>
|
|
525
|
+
</div>
|
|
526
|
+
)}
|
|
527
|
+
|
|
507
528
|
{/* Thread list */}
|
|
508
|
-
{
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
529
|
+
{!showLoadError &&
|
|
530
|
+
visibleThreads.map((thread) => (
|
|
531
|
+
<ThreadCard
|
|
532
|
+
key={thread.threadId}
|
|
533
|
+
thread={thread}
|
|
534
|
+
deckId={deckId ?? ""}
|
|
535
|
+
slideId={slideId ?? ""}
|
|
536
|
+
/>
|
|
537
|
+
))}
|
|
516
538
|
|
|
517
539
|
{/* Resolved toggle */}
|
|
518
540
|
{resolvedThreads.length > 0 && (
|
|
@@ -527,7 +549,8 @@ export function SlideCommentsPanel({
|
|
|
527
549
|
)}
|
|
528
550
|
|
|
529
551
|
{/* Empty state */}
|
|
530
|
-
{!
|
|
552
|
+
{!showLoadError &&
|
|
553
|
+
!showInput &&
|
|
531
554
|
visibleThreads.length === 0 &&
|
|
532
555
|
(deckId && slideId ? (
|
|
533
556
|
<button
|
|
@@ -215,7 +215,7 @@ function SortableSlideThumb({
|
|
|
215
215
|
aria-label={t("editorSidebar.selectSlide", { number: index + 1 })}
|
|
216
216
|
aria-current={isActive ? "true" : undefined}
|
|
217
217
|
data-slide-thumbnail-id={slide.id}
|
|
218
|
-
className={`w-full text-left flex items-start gap-2 p-2 rounded-lg transition-
|
|
218
|
+
className={`w-full text-left flex items-start gap-2 p-2 rounded-lg transition-[background-color,box-shadow] duration-150 ${
|
|
219
219
|
isActive ? "bg-accent ring-1 ring-[#609FF8]/50" : "hover:bg-accent"
|
|
220
220
|
} focus:outline-none`}
|
|
221
221
|
>
|
|
@@ -203,7 +203,7 @@ function ToolbarPopover({
|
|
|
203
203
|
return createPortal(
|
|
204
204
|
<div
|
|
205
205
|
ref={menuRef}
|
|
206
|
-
className="fixed rounded-lg border border-border bg-popover shadow-xl z-[200] max-h-[80vh] overflow-y-auto"
|
|
206
|
+
className="fixed rounded-lg border border-border bg-popover shadow-xl z-[200] max-h-[80vh] overflow-y-auto animate-in fade-in-0 zoom-in-95 duration-150 origin-top-left"
|
|
207
207
|
style={{ top: rect.bottom + 4, left, width: Math.min(width, vw - 16) }}
|
|
208
208
|
>
|
|
209
209
|
{children}
|
|
@@ -153,8 +153,8 @@ export default function GenerateSlidesDialog({
|
|
|
153
153
|
}`}
|
|
154
154
|
>
|
|
155
155
|
<div
|
|
156
|
-
className={`absolute top-0.5 w-4 h-4 rounded-full bg-white transition-transform ${
|
|
157
|
-
includeImages ? "
|
|
156
|
+
className={`absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white transition-transform duration-150 ${
|
|
157
|
+
includeImages ? "translate-x-[16px]" : "translate-x-0"
|
|
158
158
|
}`}
|
|
159
159
|
/>
|
|
160
160
|
</button>
|
|
@@ -515,8 +515,10 @@ export default function PresentationView({
|
|
|
515
515
|
<div
|
|
516
516
|
className="h-full bg-[#609FF8]"
|
|
517
517
|
style={{
|
|
518
|
-
|
|
519
|
-
|
|
518
|
+
transform: `scaleX(${(currentIndex + 1) / safeSlides.length})`,
|
|
519
|
+
transformOrigin: "left",
|
|
520
|
+
transition: "transform 0.3s cubic-bezier(0.2, 0, 0, 1)",
|
|
521
|
+
width: "100%",
|
|
520
522
|
}}
|
|
521
523
|
/>
|
|
522
524
|
</div>
|
|
@@ -271,8 +271,9 @@ export function CanvasCommentPins({
|
|
|
271
271
|
console.error("[CanvasCommentPins] failed to send to agent:", err);
|
|
272
272
|
}
|
|
273
273
|
updatePin(pin.id, { submitted: true });
|
|
274
|
-
//
|
|
275
|
-
|
|
274
|
+
// Keep the acknowledgement visible just long enough to register, without
|
|
275
|
+
// making a routine submit feel delayed.
|
|
276
|
+
setTimeout(() => removePin(pin.id), 220);
|
|
276
277
|
};
|
|
277
278
|
|
|
278
279
|
if (!active && pins.length === 0) return null;
|
|
@@ -313,7 +314,7 @@ export function CanvasCommentPins({
|
|
|
313
314
|
className={cn(
|
|
314
315
|
"fixed z-[55]",
|
|
315
316
|
pin.submitted &&
|
|
316
|
-
"transition-
|
|
317
|
+
"-translate-y-2 opacity-0 transition-[transform,opacity] duration-200 ease-out motion-reduce:translate-y-0 motion-reduce:duration-150",
|
|
317
318
|
)}
|
|
318
319
|
style={{ left, top }}
|
|
319
320
|
>
|
|
@@ -134,6 +134,7 @@ export interface Deck {
|
|
|
134
134
|
interface DeckContextType {
|
|
135
135
|
decks: Deck[];
|
|
136
136
|
loading: boolean;
|
|
137
|
+
loadError: boolean;
|
|
137
138
|
createDeck: (
|
|
138
139
|
title?: string,
|
|
139
140
|
options?: { noDefaultSlides?: boolean; designSystemId?: string | null },
|
|
@@ -949,6 +950,7 @@ export const defaultSlideContent: Record<SlideLayout, string> = {
|
|
|
949
950
|
export function DeckProvider({ children }: { children: ReactNode }) {
|
|
950
951
|
const [decks, setDecks] = useState<Deck[]>([]);
|
|
951
952
|
const [loading, setLoading] = useState(true);
|
|
953
|
+
const [loadError, setLoadError] = useState(false);
|
|
952
954
|
const decksRef = useRef<Deck[]>([]);
|
|
953
955
|
|
|
954
956
|
// Per-user inverse-op undo/redo. `canUndo`/`canRedo` are React state kept in
|
|
@@ -1111,6 +1113,7 @@ export function DeckProvider({ children }: { children: ReactNode }) {
|
|
|
1111
1113
|
// A null result means the fetch failed (network error or non-2xx). Skip
|
|
1112
1114
|
// the diff so we don't wipe local state on a transient failure.
|
|
1113
1115
|
if (fresh === null) return;
|
|
1116
|
+
setLoadError(false);
|
|
1114
1117
|
const pending = pendingCreateIdsRef.current;
|
|
1115
1118
|
const currentDecks = decksRef.current;
|
|
1116
1119
|
const currentIds = new Set(currentDecks.map((d) => d.id));
|
|
@@ -1231,10 +1234,14 @@ export function DeckProvider({ children }: { children: ReactNode }) {
|
|
|
1231
1234
|
requestedOpenDeckId !== currentOpenDeckIdFromWindow() ||
|
|
1232
1235
|
loaded === null
|
|
1233
1236
|
) {
|
|
1237
|
+
if (requestId === deckBaselineRequestIdRef.current) {
|
|
1238
|
+
setLoadError(loaded === null);
|
|
1239
|
+
}
|
|
1234
1240
|
return;
|
|
1235
1241
|
}
|
|
1236
1242
|
lastExternalUpdateRef.current = Date.now();
|
|
1237
1243
|
resetDeckBaseline(loaded);
|
|
1244
|
+
setLoadError(false);
|
|
1238
1245
|
}, [resetDeckBaseline]);
|
|
1239
1246
|
|
|
1240
1247
|
// Load decks from API on mount
|
|
@@ -1255,6 +1262,7 @@ export function DeckProvider({ children }: { children: ReactNode }) {
|
|
|
1255
1262
|
const initial = loaded ?? [];
|
|
1256
1263
|
lastExternalUpdateRef.current = Date.now(); // Don't save initial load back
|
|
1257
1264
|
resetDeckBaseline(initial);
|
|
1265
|
+
setLoadError(loaded === null);
|
|
1258
1266
|
setLoading(false);
|
|
1259
1267
|
});
|
|
1260
1268
|
}, [resetDeckBaseline]);
|
|
@@ -2012,6 +2020,7 @@ export function DeckProvider({ children }: { children: ReactNode }) {
|
|
|
2012
2020
|
value={{
|
|
2013
2021
|
decks,
|
|
2014
2022
|
loading,
|
|
2023
|
+
loadError,
|
|
2015
2024
|
createDeck,
|
|
2016
2025
|
ensureDeckPersisted,
|
|
2017
2026
|
duplicateDeck,
|
|
@@ -331,6 +331,8 @@ const messages = {
|
|
|
331
331
|
hideResolved: "إخفاء المحلول",
|
|
332
332
|
showResolved: "إظهار {{count}} محلولة",
|
|
333
333
|
noCommentsYet: "لا توجد تعليقات بعد",
|
|
334
|
+
loadFailed: "تعذر تحميل التعليقات",
|
|
335
|
+
retry: "إعادة المحاولة",
|
|
334
336
|
clickToAddComment: "انقر لإضافة تعليق",
|
|
335
337
|
selectSlideToAdd: "حدد شريحة لإضافة تعليق",
|
|
336
338
|
},
|
|
@@ -561,6 +563,10 @@ const messages = {
|
|
|
561
563
|
chooseAnotherFile: "اختيار ملف آخر",
|
|
562
564
|
},
|
|
563
565
|
home: {
|
|
566
|
+
loadFailed: "تعذر تحميل المحتوى",
|
|
567
|
+
loadFailedDescription:
|
|
568
|
+
"لا يزال المحتوى المحفوظ متاحًا. تحقق من الاتصال وأعد المحاولة.",
|
|
569
|
+
retry: "إعادة المحاولة",
|
|
564
570
|
decksTitle: "العروض",
|
|
565
571
|
newDeck: "عرض جديد",
|
|
566
572
|
deckLengthQuestion: "ما طول هذا العرض؟",
|
|
@@ -334,6 +334,8 @@ const messages = {
|
|
|
334
334
|
hideResolved: "Gelöste ausblenden",
|
|
335
335
|
showResolved: "{{count}} gelöste anzeigen",
|
|
336
336
|
noCommentsYet: "Noch keine Kommentare",
|
|
337
|
+
loadFailed: "Kommentare konnten nicht geladen werden",
|
|
338
|
+
retry: "Erneut versuchen",
|
|
337
339
|
clickToAddComment: "Klicken, um einen Kommentar hinzuzufügen",
|
|
338
340
|
selectSlideToAdd: "Wähle eine Folie aus, um einen hinzuzufügen",
|
|
339
341
|
},
|
|
@@ -555,6 +557,10 @@ const messages = {
|
|
|
555
557
|
chooseAnotherFile: "Andere Datei wählen",
|
|
556
558
|
},
|
|
557
559
|
home: {
|
|
560
|
+
loadFailed: "Inhalte konnten nicht geladen werden",
|
|
561
|
+
loadFailedDescription:
|
|
562
|
+
"Ihre gespeicherten Inhalte sind weiterhin verfügbar. Prüfen Sie die Verbindung und versuchen Sie es erneut.",
|
|
563
|
+
retry: "Erneut versuchen",
|
|
558
564
|
decksTitle: "Decks",
|
|
559
565
|
newDeck: "Neues Deck",
|
|
560
566
|
deckLengthQuestion: "Wie lang soll dieses Deck sein?",
|
|
@@ -329,6 +329,8 @@ const messages = {
|
|
|
329
329
|
hideResolved: "Hide resolved",
|
|
330
330
|
showResolved: "Show {{count}} resolved",
|
|
331
331
|
noCommentsYet: "No comments yet",
|
|
332
|
+
loadFailed: "Couldn't load comments",
|
|
333
|
+
retry: "Retry",
|
|
332
334
|
clickToAddComment: "Click to add a comment",
|
|
333
335
|
selectSlideToAdd: "Select a slide to add one",
|
|
334
336
|
},
|
|
@@ -545,6 +547,10 @@ const messages = {
|
|
|
545
547
|
chooseAnotherFile: "Choose another file",
|
|
546
548
|
},
|
|
547
549
|
home: {
|
|
550
|
+
loadFailed: "Couldn't load your content",
|
|
551
|
+
loadFailedDescription:
|
|
552
|
+
"Your saved content is still available. Check the connection and try again.",
|
|
553
|
+
retry: "Retry",
|
|
548
554
|
decksTitle: "Decks",
|
|
549
555
|
newDeck: "New Deck",
|
|
550
556
|
deckLengthQuestion: "How long should this deck be?",
|
|
@@ -336,6 +336,8 @@ const messages = {
|
|
|
336
336
|
hideResolved: "Ocultar resueltos",
|
|
337
337
|
showResolved: "Mostrar {{count}} resueltos",
|
|
338
338
|
noCommentsYet: "Aún no hay comentarios",
|
|
339
|
+
loadFailed: "No se pudieron cargar los comentarios",
|
|
340
|
+
retry: "Reintentar",
|
|
339
341
|
clickToAddComment: "Haz clic para añadir un comentario",
|
|
340
342
|
selectSlideToAdd: "Selecciona una diapositiva para añadir uno",
|
|
341
343
|
},
|
|
@@ -561,6 +563,10 @@ const messages = {
|
|
|
561
563
|
chooseAnotherFile: "Elegir otro archivo",
|
|
562
564
|
},
|
|
563
565
|
home: {
|
|
566
|
+
loadFailed: "No se pudo cargar el contenido",
|
|
567
|
+
loadFailedDescription:
|
|
568
|
+
"El contenido guardado sigue disponible. Comprueba la conexión e inténtalo de nuevo.",
|
|
569
|
+
retry: "Reintentar",
|
|
564
570
|
decksTitle: "Decks",
|
|
565
571
|
newDeck: "Nuevo deck",
|
|
566
572
|
deckLengthQuestion: "¿Qué longitud debe tener este deck?",
|
|
@@ -340,6 +340,8 @@ const messages = {
|
|
|
340
340
|
hideResolved: "Masquer les résolus",
|
|
341
341
|
showResolved: "Afficher {{count}} résolus",
|
|
342
342
|
noCommentsYet: "Aucun commentaire pour le moment",
|
|
343
|
+
loadFailed: "Impossible de charger les commentaires",
|
|
344
|
+
retry: "Réessayer",
|
|
343
345
|
clickToAddComment: "Cliquez pour ajouter un commentaire",
|
|
344
346
|
selectSlideToAdd: "Sélectionnez une diapositive pour en ajouter un",
|
|
345
347
|
},
|
|
@@ -565,6 +567,10 @@ const messages = {
|
|
|
565
567
|
chooseAnotherFile: "Choisir un autre fichier",
|
|
566
568
|
},
|
|
567
569
|
home: {
|
|
570
|
+
loadFailed: "Impossible de charger votre contenu",
|
|
571
|
+
loadFailedDescription:
|
|
572
|
+
"Votre contenu enregistré est toujours disponible. Vérifiez la connexion et réessayez.",
|
|
573
|
+
retry: "Réessayer",
|
|
568
574
|
decksTitle: "Decks",
|
|
569
575
|
newDeck: "Nouveau deck",
|
|
570
576
|
deckLengthQuestion: "Quelle longueur doit faire ce deck ?",
|
|
@@ -327,6 +327,8 @@ const messages = {
|
|
|
327
327
|
hideResolved: "हल किए गए छिपाएं",
|
|
328
328
|
showResolved: "{{count}} हल किए गए दिखाएं",
|
|
329
329
|
noCommentsYet: "अभी कोई टिप्पणी नहीं",
|
|
330
|
+
loadFailed: "टिप्पणियाँ लोड नहीं हो सकीं",
|
|
331
|
+
retry: "फिर कोशिश करें",
|
|
330
332
|
clickToAddComment: "टिप्पणी जोड़ने के लिए क्लिक करें",
|
|
331
333
|
selectSlideToAdd: "एक टिप्पणी जोड़ने के लिए स्लाइड चुनें",
|
|
332
334
|
},
|
|
@@ -539,6 +541,10 @@ const messages = {
|
|
|
539
541
|
chooseAnotherFile: "दूसरी फ़ाइल चुनें",
|
|
540
542
|
},
|
|
541
543
|
home: {
|
|
544
|
+
loadFailed: "आपका कॉन्टेंट लोड नहीं हो सका",
|
|
545
|
+
loadFailedDescription:
|
|
546
|
+
"आपका सहेजा गया कॉन्टेंट अभी भी उपलब्ध है। कनेक्शन जाँचें और फिर कोशिश करें।",
|
|
547
|
+
retry: "फिर कोशिश करें",
|
|
542
548
|
decksTitle: "डेक",
|
|
543
549
|
newDeck: "नया डेक",
|
|
544
550
|
deckLengthQuestion: "यह डेक कितना लंबा होना चाहिए?",
|
|
@@ -331,6 +331,8 @@ const messages = {
|
|
|
331
331
|
hideResolved: "解決済みを非表示",
|
|
332
332
|
showResolved: "{{count}} 件の解決済みを表示",
|
|
333
333
|
noCommentsYet: "まだコメントはありません",
|
|
334
|
+
loadFailed: "コメントを読み込めませんでした",
|
|
335
|
+
retry: "再試行",
|
|
334
336
|
clickToAddComment: "クリックしてコメントを追加",
|
|
335
337
|
selectSlideToAdd: "追加するにはスライドを選択してください",
|
|
336
338
|
},
|
|
@@ -541,6 +543,10 @@ const messages = {
|
|
|
541
543
|
chooseAnotherFile: "別のファイルを選択",
|
|
542
544
|
},
|
|
543
545
|
home: {
|
|
546
|
+
loadFailed: "コンテンツを読み込めませんでした",
|
|
547
|
+
loadFailedDescription:
|
|
548
|
+
"保存済みのコンテンツはそのままです。接続を確認して再試行してください。",
|
|
549
|
+
retry: "再試行",
|
|
544
550
|
decksTitle: "デッキ",
|
|
545
551
|
newDeck: "新しいデッキ",
|
|
546
552
|
deckLengthQuestion: "このデッキの長さはどれくらいにしますか?",
|
|
@@ -329,6 +329,8 @@ const messages = {
|
|
|
329
329
|
hideResolved: "해결됨 숨기기",
|
|
330
330
|
showResolved: "해결됨 {{count}}개 표시",
|
|
331
331
|
noCommentsYet: "아직 댓글 없음",
|
|
332
|
+
loadFailed: "댓글을 불러올 수 없습니다",
|
|
333
|
+
retry: "다시 시도",
|
|
332
334
|
clickToAddComment: "클릭하여 댓글 추가",
|
|
333
335
|
selectSlideToAdd: "추가하려면 슬라이드를 선택하세요",
|
|
334
336
|
},
|
|
@@ -536,6 +538,10 @@ const messages = {
|
|
|
536
538
|
chooseAnotherFile: "다른 파일 선택",
|
|
537
539
|
},
|
|
538
540
|
home: {
|
|
541
|
+
loadFailed: "콘텐츠를 불러올 수 없습니다",
|
|
542
|
+
loadFailedDescription:
|
|
543
|
+
"저장된 콘텐츠는 그대로 있습니다. 연결을 확인하고 다시 시도하세요.",
|
|
544
|
+
retry: "다시 시도",
|
|
539
545
|
decksTitle: "덱",
|
|
540
546
|
newDeck: "새 덱",
|
|
541
547
|
deckLengthQuestion: "이 덱은 얼마나 길어야 하나요?",
|
|
@@ -331,6 +331,8 @@ const messages = {
|
|
|
331
331
|
hideResolved: "Ocultar resolvidos",
|
|
332
332
|
showResolved: "Mostrar {{count}} resolvidos",
|
|
333
333
|
noCommentsYet: "Ainda não há comentários",
|
|
334
|
+
loadFailed: "Não foi possível carregar os comentários",
|
|
335
|
+
retry: "Tentar novamente",
|
|
334
336
|
clickToAddComment: "Clique para adicionar um comentário",
|
|
335
337
|
selectSlideToAdd: "Selecione um slide para adicionar um",
|
|
336
338
|
},
|
|
@@ -556,6 +558,10 @@ const messages = {
|
|
|
556
558
|
chooseAnotherFile: "Escolher outro arquivo",
|
|
557
559
|
},
|
|
558
560
|
home: {
|
|
561
|
+
loadFailed: "Não foi possível carregar seu conteúdo",
|
|
562
|
+
loadFailedDescription:
|
|
563
|
+
"Seu conteúdo salvo continua disponível. Verifique a conexão e tente novamente.",
|
|
564
|
+
retry: "Tentar novamente",
|
|
559
565
|
decksTitle: "Decks",
|
|
560
566
|
newDeck: "Novo deck",
|
|
561
567
|
deckLengthQuestion: "Qual deve ser o tamanho deste deck?",
|
|
@@ -325,6 +325,8 @@ const messages = {
|
|
|
325
325
|
hideResolved: "隐藏已解决",
|
|
326
326
|
showResolved: "显示 {{count}} 条已解决",
|
|
327
327
|
noCommentsYet: "还没有评论",
|
|
328
|
+
loadFailed: "无法加载评论",
|
|
329
|
+
retry: "重试",
|
|
328
330
|
clickToAddComment: "点击添加评论",
|
|
329
331
|
selectSlideToAdd: "选择幻灯片以添加评论",
|
|
330
332
|
},
|
|
@@ -531,6 +533,9 @@ const messages = {
|
|
|
531
533
|
chooseAnotherFile: "选择其他文件",
|
|
532
534
|
},
|
|
533
535
|
home: {
|
|
536
|
+
loadFailed: "无法加载内容",
|
|
537
|
+
loadFailedDescription: "您保存的内容仍然可用。请检查连接并重试。",
|
|
538
|
+
retry: "重试",
|
|
534
539
|
decksTitle: "幻灯片",
|
|
535
540
|
newDeck: "新建幻灯片",
|
|
536
541
|
deckLengthQuestion: "这份幻灯片需要多长?",
|
|
@@ -320,6 +320,8 @@ const messages = {
|
|
|
320
320
|
hideResolved: "隱藏已解決",
|
|
321
321
|
showResolved: "顯示 {{count}} 條已解決",
|
|
322
322
|
noCommentsYet: "還沒有評論",
|
|
323
|
+
loadFailed: "無法載入評論",
|
|
324
|
+
retry: "重試",
|
|
323
325
|
clickToAddComment: "點選新增評論",
|
|
324
326
|
selectSlideToAdd: "選取幻燈片以新增評論",
|
|
325
327
|
},
|
|
@@ -526,6 +528,9 @@ const messages = {
|
|
|
526
528
|
chooseAnotherFile: "選取其他檔案",
|
|
527
529
|
},
|
|
528
530
|
home: {
|
|
531
|
+
loadFailed: "無法載入內容",
|
|
532
|
+
loadFailedDescription: "您儲存的內容仍然可用。請檢查連線並重試。",
|
|
533
|
+
retry: "重試",
|
|
529
534
|
decksTitle: "幻燈片",
|
|
530
535
|
newDeck: "新建幻燈片",
|
|
531
536
|
deckLengthQuestion: "這份幻燈片需要多長?",
|