@agent-native/core 0.92.11 → 0.93.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 +45 -0
- package/corpus/core/docs/content/automation-connectors.mdx +80 -0
- package/corpus/core/docs/content/extensions.mdx +8 -0
- package/corpus/core/docs/content/locales/ar-SA/extensions.mdx +8 -0
- package/corpus/core/docs/content/locales/ar-SA/messaging.mdx +84 -15
- package/corpus/core/docs/content/locales/ar-SA/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/de-DE/extensions.mdx +10 -0
- package/corpus/core/docs/content/locales/de-DE/messaging.mdx +92 -15
- package/corpus/core/docs/content/locales/de-DE/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/de-DE/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/es-ES/extensions.mdx +10 -0
- package/corpus/core/docs/content/locales/es-ES/messaging.mdx +91 -15
- package/corpus/core/docs/content/locales/es-ES/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/es-ES/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/fr-FR/extensions.mdx +10 -0
- package/corpus/core/docs/content/locales/fr-FR/messaging.mdx +91 -15
- package/corpus/core/docs/content/locales/fr-FR/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/hi-IN/extensions.mdx +8 -0
- package/corpus/core/docs/content/locales/hi-IN/messaging.mdx +81 -15
- package/corpus/core/docs/content/locales/hi-IN/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/ja-JP/extensions.mdx +9 -0
- package/corpus/core/docs/content/locales/ja-JP/messaging.mdx +81 -15
- package/corpus/core/docs/content/locales/ja-JP/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/ko-KR/extensions.mdx +8 -0
- package/corpus/core/docs/content/locales/ko-KR/messaging.mdx +80 -15
- package/corpus/core/docs/content/locales/ko-KR/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/pt-BR/extensions.mdx +9 -0
- package/corpus/core/docs/content/locales/pt-BR/messaging.mdx +88 -15
- package/corpus/core/docs/content/locales/pt-BR/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/zh-CN/extensions.mdx +6 -0
- package/corpus/core/docs/content/locales/zh-CN/messaging.mdx +78 -15
- package/corpus/core/docs/content/locales/zh-CN/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/zh-TW/extensions.mdx +6 -0
- package/corpus/core/docs/content/locales/zh-TW/messaging.mdx +78 -15
- package/corpus/core/docs/content/locales/zh-TW/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +1 -0
- package/corpus/core/docs/content/messaging.mdx +227 -45
- package/corpus/core/docs/content/template-clips.mdx +3 -0
- package/corpus/core/docs/content/template-design.mdx +4 -0
- package/corpus/core/package.json +5 -1
- package/corpus/core/src/a2a/artifact-response.ts +131 -2
- package/corpus/core/src/a2a/client.ts +10 -0
- package/corpus/core/src/a2a/handlers.ts +40 -76
- package/corpus/core/src/a2a/types.ts +2 -0
- package/corpus/core/src/agent/durable-background.ts +24 -0
- package/corpus/core/src/agent/production-agent.ts +48 -5
- package/corpus/core/src/agent/run-manager.ts +171 -20
- package/corpus/core/src/agent/run-store.ts +297 -42
- package/corpus/core/src/agent/types.ts +23 -0
- package/corpus/core/src/audit/record.ts +31 -0
- package/corpus/core/src/audit/store.ts +69 -3
- package/corpus/core/src/audit/types.ts +13 -0
- package/corpus/core/src/automation/index.ts +802 -0
- package/corpus/core/src/cli/create.ts +12 -5
- package/corpus/core/src/cli/design-connect.ts +596 -36
- package/corpus/core/src/client/AgentPanel.tsx +51 -6
- package/corpus/core/src/client/AssistantChat.tsx +274 -147
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +3 -0
- package/corpus/core/src/client/RunStuckBanner.tsx +69 -20
- package/corpus/core/src/client/agent-chat-adapter.ts +110 -17
- package/corpus/core/src/client/automation.ts +22 -0
- package/corpus/core/src/client/chat/run-recovery.tsx +67 -50
- package/corpus/core/src/client/composer/TiptapComposer.tsx +8 -0
- package/corpus/core/src/client/index.ts +30 -0
- package/corpus/core/src/client/integrations/api.ts +295 -0
- package/corpus/core/src/client/integrations/index.ts +26 -0
- package/corpus/core/src/client/transcription/use-live-transcription.ts +68 -5
- package/corpus/core/src/client/use-run-stuck-detection.ts +41 -3
- package/corpus/core/src/deploy/build.ts +59 -3
- package/corpus/core/src/deploy/workspace-deploy.ts +37 -2
- package/corpus/core/src/file-upload/types.ts +2 -0
- package/corpus/core/src/index.ts +37 -0
- package/corpus/core/src/integrations/a2a-continuations-store.ts +6 -4
- package/corpus/core/src/integrations/adapters/discord.ts +362 -0
- package/corpus/core/src/integrations/adapters/index.ts +29 -0
- package/corpus/core/src/integrations/adapters/microsoft-teams.ts +411 -0
- package/corpus/core/src/integrations/adapters/slack.ts +861 -27
- package/corpus/core/src/integrations/adapters/telegram.ts +54 -15
- package/corpus/core/src/integrations/adapters/whatsapp.ts +41 -17
- package/corpus/core/src/integrations/catalog.ts +571 -0
- package/corpus/core/src/integrations/controls-store.ts +187 -0
- package/corpus/core/src/integrations/index.ts +100 -0
- package/corpus/core/src/integrations/installations-store.ts +677 -0
- package/corpus/core/src/integrations/integration-memory.ts +187 -0
- package/corpus/core/src/integrations/pending-tasks-retry-job.ts +6 -6
- package/corpus/core/src/integrations/pending-tasks-store.ts +83 -5
- package/corpus/core/src/integrations/plugin.ts +685 -47
- package/corpus/core/src/integrations/scope-store.ts +498 -0
- package/corpus/core/src/integrations/slack-manifest.ts +78 -0
- package/corpus/core/src/integrations/slack-oauth.ts +343 -0
- package/corpus/core/src/integrations/types.ts +179 -0
- package/corpus/core/src/integrations/usage-budget-store.ts +906 -0
- package/corpus/core/src/integrations/webhook-handler.ts +562 -51
- package/corpus/core/src/jobs/scheduler.ts +100 -2
- package/corpus/core/src/jobs/tools.ts +45 -9
- package/corpus/core/src/provider-api/index.ts +72 -1
- package/corpus/core/src/resources/handlers.ts +88 -14
- package/corpus/core/src/resources/script-helpers.ts +36 -7
- package/corpus/core/src/resources/store.ts +59 -52
- package/corpus/core/src/scripts/call-agent.ts +107 -1
- package/corpus/core/src/server/agent-chat-plugin.ts +294 -119
- package/corpus/core/src/server/auth.ts +10 -14
- package/corpus/core/src/server/builder-design-systems.ts +16 -1
- package/corpus/core/src/server/edge.ts +18 -0
- package/corpus/core/src/server/index.ts +26 -0
- package/corpus/core/src/server/request-context.ts +18 -0
- package/corpus/core/src/server/social-og-image.ts +3 -2
- package/corpus/core/src/styles/agent-native.css +62 -44
- package/corpus/core/src/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/core/src/templates/default/AGENTS.md +7 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/core/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
- package/corpus/core/src/templates/workspace-core/AGENTS.md +3 -2
- package/corpus/core/src/usage/store.ts +37 -2
- package/corpus/templates/analytics/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/analytics/.agents/skills/provider-api/SKILL.md +23 -0
- package/corpus/templates/analytics/.builder/skills/provider-api/SKILL.md +15 -0
- package/corpus/templates/analytics/actions/save-monitor.ts +25 -2
- package/corpus/templates/analytics/app/lib/data-sources.ts +28 -0
- package/corpus/templates/analytics/changelog/2026-07-10-agent-created-uptime-monitors-now-return-a-direct-link-to-th.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-dashboard-email-reports-still-arrive-when-screenshot-capture-temporarily-fails.md +6 -0
- package/corpus/templates/analytics/server/jobs/dashboard-report.ts +3 -7
- package/corpus/templates/analytics/server/lib/credential-keys.ts +12 -0
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +5 -1
- package/corpus/templates/analytics/server/lib/provider-credentials.ts +2 -0
- package/corpus/templates/analytics/server/routes/api/test-connection.post.ts +16 -0
- package/corpus/templates/assets/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/brain/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/calendar/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/calendar/app/components/calendar/CommandPalette.tsx +98 -108
- package/corpus/templates/calendar/app/components/calendar/EventAttendeesSection.tsx +97 -90
- package/corpus/templates/calendar/changelog/2026-07-10-event-guest-details-and-option-menus-now-use-valid-accessibl.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-10-natural-language-event-phrases-stay-available-as-quick-creat.md +6 -0
- package/corpus/templates/chat/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/chat/changelog/2026-07-10-chat-now-makes-ai-connection-setup-clear-without-shifting-th.md +6 -0
- package/corpus/templates/clips/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/clips/.agents/skills/recording/SKILL.md +17 -1
- package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +8 -0
- package/corpus/templates/clips/AGENTS.md +8 -3
- package/corpus/templates/clips/actions/finalize-recording.ts +63 -23
- package/corpus/templates/clips/actions/get-recording-player-data.ts +6 -2
- package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +72 -9
- package/corpus/templates/clips/actions/list-recordings.ts +19 -3
- package/corpus/templates/clips/actions/navigate.ts +2 -0
- package/corpus/templates/clips/actions/reprocess-recording.ts +20 -6
- package/corpus/templates/clips/actions/request-transcript.ts +16 -31
- package/corpus/templates/clips/actions/view-screen.ts +57 -5
- package/corpus/templates/clips/app/components/layout/Header.tsx +1 -0
- package/corpus/templates/clips/app/components/library/empty-state.tsx +2 -0
- package/corpus/templates/clips/app/components/library/library-grid.tsx +69 -42
- package/corpus/templates/clips/app/components/library/library-layout.tsx +15 -1
- package/corpus/templates/clips/app/components/library/recording-card.tsx +81 -68
- package/corpus/templates/clips/app/components/library/search-bar.tsx +4 -3
- package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +9 -3
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +1 -1
- package/corpus/templates/clips/app/components/player/transcript-panel.tsx +27 -5
- package/corpus/templates/clips/app/hooks/use-library.ts +1 -1
- package/corpus/templates/clips/app/hooks/use-navigation-state.ts +10 -2
- package/corpus/templates/clips/app/hooks/use-player-shortcuts.ts +1 -0
- package/corpus/templates/clips/app/i18n/ar-SA.ts +7 -1
- package/corpus/templates/clips/app/i18n/de-DE.ts +7 -1
- package/corpus/templates/clips/app/i18n/en-US.ts +7 -1
- package/corpus/templates/clips/app/i18n/es-ES.ts +7 -1
- package/corpus/templates/clips/app/i18n/fr-FR.ts +7 -1
- package/corpus/templates/clips/app/i18n/hi-IN.ts +7 -1
- package/corpus/templates/clips/app/i18n/ja-JP.ts +7 -1
- package/corpus/templates/clips/app/i18n/ko-KR.ts +7 -1
- package/corpus/templates/clips/app/i18n/pt-BR.ts +7 -1
- package/corpus/templates/clips/app/i18n/zh-CN.ts +8 -1
- package/corpus/templates/clips/app/i18n/zh-TW.ts +8 -1
- package/corpus/templates/clips/app/lib/recording-visibility.ts +70 -0
- package/corpus/templates/clips/app/routes/_app.shared.tsx +20 -0
- package/corpus/templates/clips/app/routes/download.tsx +24 -8
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +115 -2
- package/corpus/templates/clips/app/routes/record.tsx +62 -0
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +25 -16
- package/corpus/templates/clips/changelog/2026-07-10-clips-desktop-is-now-available-for-linux-with-appimage-debia.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-clips-downloads-updates-sooner-in-the-background-and-offers-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-clips-shared-with-you-now-appear-in-a-searchable-shared-with.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-clips-with-missing-mobile-video-frames-can-be-repaired-witho.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-fixed-copying-agent-responses-and-transcript-text-from-recor.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-mobile-camera-recordings-pause-while-backgrounded.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-mp4-downloads-now-show-progress-immediately-after-the-option.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-recording-pages-now-open-as-soon-as-you-stop-with-a-share-li.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-recordings-now-seek-smoothly-downloads-use-the-correct-file-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-s3-compatible-storage-now-saves-hosted-recordings-without-re.md +6 -0
- package/corpus/templates/clips/desktop/README.md +22 -6
- package/corpus/templates/clips/desktop/package.json +1 -1
- package/corpus/templates/clips/desktop/src/app.tsx +32 -19
- package/corpus/templates/clips/desktop/src/components/ReadinessPanel.tsx +15 -9
- package/corpus/templates/clips/desktop/src/lib/finalization-guard.ts +22 -0
- package/corpus/templates/clips/desktop/src/lib/permissions.ts +3 -1
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +97 -120
- package/corpus/templates/clips/desktop/src/lib/updater.ts +26 -4
- package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +4 -8
- package/corpus/templates/clips/desktop/src-tauri/Cargo.toml +1 -1
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +2 -2
- package/corpus/templates/clips/desktop/src-tauri/src/permission_status.rs +11 -7
- package/corpus/templates/clips/desktop/src-tauri/tauri.linux.conf.json +11 -0
- package/corpus/templates/clips/netlify.toml +3 -0
- package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +106 -0
- package/corpus/templates/clips/server/lib/public-agent-context.ts +9 -1
- package/corpus/templates/clips/server/lib/resumable-upload-provider.ts +52 -0
- package/corpus/templates/clips/server/lib/s3-upload-provider.ts +433 -85
- package/corpus/templates/clips/server/lib/video-remux.ts +114 -0
- package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +109 -0
- package/corpus/templates/clips/server/routes/api/clips-updater.json.get.ts +22 -11
- package/corpus/templates/clips/server/routes/api/public-recording.get.ts +4 -2
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +47 -5
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +10 -2
- package/corpus/templates/clips/shared/share-loader-response.ts +12 -0
- package/corpus/templates/clips/shared/transcript-status.ts +40 -0
- package/corpus/templates/content/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/content/.agents/skills/content/SKILL.md +57 -5
- package/corpus/templates/content/AGENTS.md +65 -55
- package/corpus/templates/content/actions/_builder-cms-read-client.ts +92 -23
- package/corpus/templates/content/actions/_database-source-utils.ts +207 -41
- package/corpus/templates/content/actions/_property-utils.ts +30 -2
- package/corpus/templates/content/actions/add-content-database-source-field-property.ts +316 -121
- package/corpus/templates/content/actions/attach-content-database-source.ts +41 -17
- package/corpus/templates/content/actions/change-content-database-source-role.ts +46 -8
- package/corpus/templates/content/actions/submit-content-database-form.ts +497 -0
- package/corpus/templates/content/actions/suggest-source-join-key.ts +8 -1
- package/corpus/templates/content/actions/update-content-database-view.ts +8 -1
- package/corpus/templates/content/actions/view-screen.ts +4 -1
- package/corpus/templates/content/agent-native.app-skill.json +1 -1
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +250 -64
- package/corpus/templates/content/app/components/editor/database/FormView.tsx +460 -0
- package/corpus/templates/content/app/components/editor/database/navigation-state.ts +3 -0
- package/corpus/templates/content/app/components/editor/database/settings.tsx +30 -37
- package/corpus/templates/content/app/components/editor/database/shared.tsx +2 -0
- package/corpus/templates/content/app/components/editor/database/view-config.ts +29 -1
- package/corpus/templates/content/app/components/ui/textarea.tsx +1 -0
- package/corpus/templates/content/app/hooks/use-content-database.ts +22 -0
- package/corpus/templates/content/app/i18n/zh-TW.ts +21 -0
- package/corpus/templates/content/app/i18n-data.ts +225 -0
- package/corpus/templates/content/changelog/2026-07-09-builder-source-refreshes-now-keep-mapped-fields-such-as-topi.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-builder-backed-properties-now-load-current-source-values-as-.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-builder-database-refreshes-now-stay-explicit-and-accurate.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-database-form-views-now-collect-ordered-required-answers-and.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-database-tables-now-use-a-quieter-more-compact-layout-with-c.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-slack-intake-routes-to-content-database-forms.md +6 -0
- package/corpus/templates/content/parity/matrix.md +1 -0
- package/corpus/templates/content/parity/matrix.ts +18 -0
- package/corpus/templates/content/shared/api.ts +28 -1
- package/corpus/templates/content/shared/database-form.ts +53 -0
- package/corpus/templates/design/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +26 -0
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +85 -12
- package/corpus/templates/design/AGENTS.md +72 -18
- package/corpus/templates/design/DESIGN.md +1 -1
- package/corpus/templates/design/DEVELOPING.md +1 -1
- package/corpus/templates/design/FIGMA_INTEROPERABILITY.md +116 -0
- package/corpus/templates/design/actions/create-design-from-template.ts +220 -0
- package/corpus/templates/design/actions/create-design-system.ts +92 -16
- package/corpus/templates/design/actions/delete-design-template.ts +28 -0
- package/corpus/templates/design/actions/delete-file.ts +7 -0
- package/corpus/templates/design/actions/edit-design.ts +3 -0
- package/corpus/templates/design/actions/export-design-as-figma-svg.ts +137 -5
- package/corpus/templates/design/actions/export-pdf.ts +1 -1
- package/corpus/templates/design/actions/generate-design.ts +3 -0
- package/corpus/templates/design/actions/get-design-snapshot.ts +9 -0
- package/corpus/templates/design/actions/get-figma-connection-status.ts +26 -0
- package/corpus/templates/design/actions/get-figma-design-context.ts +138 -0
- package/corpus/templates/design/actions/get-figma-styles.ts +2 -2
- package/corpus/templates/design/actions/import-figma-clipboard.ts +112 -16
- package/corpus/templates/design/actions/import-figma-frame.ts +15 -4
- package/corpus/templates/design/actions/index-design-system-with-builder.ts +4 -0
- package/corpus/templates/design/actions/list-design-templates.ts +118 -0
- package/corpus/templates/design/actions/navigate.ts +16 -2
- package/corpus/templates/design/actions/provider-api-request.ts +11 -1
- package/corpus/templates/design/actions/save-design-as-template.ts +156 -0
- package/corpus/templates/design/actions/set-active-breakpoint.ts +13 -4
- package/corpus/templates/design/actions/take-design-screenshot.ts +73 -3
- package/corpus/templates/design/actions/update-file.ts +39 -22
- package/corpus/templates/design/actions/view-screen.ts +36 -1
- package/corpus/templates/design/actions/write-local-file.ts +50 -38
- package/corpus/templates/design/app/components/design/AutoLayoutSuggestionDialog.tsx +151 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +20 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +251 -22
- package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +3 -3
- package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +384 -9
- package/corpus/templates/design/app/components/design/EditPanel.tsx +105 -32
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +58 -28
- package/corpus/templates/design/app/components/design/TweaksPanel.tsx +6 -0
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +539 -53
- package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +40 -0
- package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +1 -0
- package/corpus/templates/design/app/components/design/code-workbench/explorer/ExplorerView.tsx +1 -0
- package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +5 -1
- package/corpus/templates/design/app/components/design/code-workbench/workspace/create-providers.ts +2 -0
- package/corpus/templates/design/app/components/design/code-workbench/workspace/localhost-provider.ts +3 -1
- package/corpus/templates/design/app/components/design/code-workbench/workspace/types.ts +2 -0
- package/corpus/templates/design/app/components/design/edit-panel/element-identity.ts +19 -0
- package/corpus/templates/design/app/components/design/edit-panel/frame-presets-panel.tsx +1 -0
- package/corpus/templates/design/app/components/design/edit-panel/interaction-state-helpers.ts +27 -0
- package/corpus/templates/design/app/components/design/inspector/InteractionStatePanel.tsx +137 -81
- package/corpus/templates/design/app/components/design/inspector/frame-size-presets.ts +25 -5
- package/corpus/templates/design/app/components/design/multi-screen/chrome-transitions.ts +1 -1
- package/corpus/templates/design/app/components/design/multi-screen/frame-geometry.ts +220 -3
- package/corpus/templates/design/app/components/design/multi-screen/overview-layout.ts +13 -0
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +22 -1
- package/corpus/templates/design/app/components/design/types.ts +4 -0
- package/corpus/templates/design/app/components/design-system/ProductionDesignSystemShowcase.tsx +208 -0
- package/corpus/templates/design/app/components/editor/FigmaLinkComposerBubble.tsx +321 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +24 -4
- package/corpus/templates/design/app/components/layout/Layout.tsx +16 -2
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -0
- package/corpus/templates/design/app/components/templates/TemplatePreview.tsx +72 -0
- package/corpus/templates/design/app/global.css +2 -35
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +10 -0
- package/corpus/templates/design/app/i18n/zh-TW.ts +127 -5
- package/corpus/templates/design/app/i18n-breakpoints.ts +209 -0
- package/corpus/templates/design/app/i18n-data.ts +1317 -59
- package/corpus/templates/design/app/i18n-template-feature.ts +458 -0
- package/corpus/templates/design/app/lib/design-clipboard.ts +202 -0
- package/corpus/templates/design/app/lib/design-file-upload.ts +87 -0
- package/corpus/templates/design/app/lib/design-import.ts +168 -11
- package/corpus/templates/design/app/lib/desktop-design-preview.ts +423 -0
- package/corpus/templates/design/app/lib/figma-clipboard.ts +74 -8
- package/corpus/templates/design/app/lib/figma-connection.ts +161 -0
- package/corpus/templates/design/app/lib/figma-svg-copy.ts +814 -22
- package/corpus/templates/design/app/lib/figma-url.ts +77 -0
- package/corpus/templates/design/app/lib/pending-generation.ts +35 -0
- package/corpus/templates/design/app/pages/DesignSystems.tsx +236 -177
- package/corpus/templates/design/app/pages/Index.tsx +38 -0
- package/corpus/templates/design/app/pages/Templates.tsx +498 -0
- package/corpus/templates/design/app/pages/design-editor/auto-layout-suggestion.ts +328 -0
- package/corpus/templates/design/app/pages/design-editor/clone-idrefs.ts +113 -0
- package/corpus/templates/design/app/pages/design-editor/created-screen-navigation.ts +55 -0
- package/corpus/templates/design/app/pages/design-editor/editor-session.ts +32 -0
- package/corpus/templates/design/app/pages/design-editor/editor-state.ts +49 -2
- package/corpus/templates/design/app/pages/design-editor/export-capture.ts +296 -0
- package/corpus/templates/design/app/pages/design-editor/history.ts +101 -2
- package/corpus/templates/design/app/pages/design-editor/layout-operations.ts +28 -1
- package/corpus/templates/design/app/pages/design-editor/overview-camera.ts +34 -0
- package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +202 -6
- package/corpus/templates/design/app/pages/design-editor/pending-structure-verification.ts +92 -0
- package/corpus/templates/design/app/pages/design-editor/save-failure.ts +58 -0
- package/corpus/templates/design/app/routes/templates.tsx +4 -6
- package/corpus/templates/design/changelog/2026-07-10-app-workspaces-now-use-clean-borderless-main-surfaces-throug.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-ask-chat-what-s-in-a-figma-file-or-frame-structure-screensho.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-canvas-edits-now-reject-malformed-html-before-it-can-corrupt.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-complex-designs-now-export-as-valid-secure-svgs-and-crisp-ra.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-complex-figma-masks-arcs-rich-text-transformed-images-and-ad.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-copied-layers-paste-across-designs-and-browser-tabs.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-copy-and-download-editable-figma-svg.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-copying-design-text-now-pastes-readable-text-into-other-apps.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-deleted-screens-can-be-restored-with-undo-and-removed-again-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-design-changes-now-save-before-switching-apps-and-retry-when.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-design-stays-usable-on-phones-by-keeping-editor-panels-and-f.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-download-all-screens-as-one-multi-page-pdf-from-the-overview.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-duplicated-layers-now-keep-labels-aria-relationships-fragmen.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fig-import-results-stay-compact.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-figma-imports-now-load-real-fonts-fix-rotated-gradient-dashe.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-figma-links-in-chat-and-the-import-tab-now-offer-secure-one-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-cmd-z-not-restoring-content-after-an-agent-driven-desi.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-download-pdf-being-unreachable-from-the-export-panel-e.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-dragging-a-layer-out-of-an-auto-layout-row-column-no-l.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-figma-svg-export-text-wrapping-sizing-and-inner-layer.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-hiding-or-locking-one-layer-no-longer-hides-or-blocks-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-png-screenshots-of-tall-screens-being-cropped-to-one-v.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-png-svg-exports-capturing-broken-layout-when-webfonts-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-frame-tool-now-offers-standard-ad-unit-size-presets-medium-r.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-full-view-controls-stay-within-their-frame-instead-of-coveri.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-hover-focus-focus-visible-pressed-and-disabled-states-now-pr.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-layer-drops-now-land-in-the-intended-grid-row-stay-visually-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-local-code-workspaces-now-keep-unsaved-edits-across-panel-sw.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-local-visual-editing-now-keeps-authenticated-sessions-shared.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-long-running-agent-work-no-longer-shows-a-premature-stuck-wa.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-managed-figma-connections-are-recognized-automatically.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-new-designs-can-open-directly-in-the-editor-without-a-pr.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-new-screens-are-selected-and-revealed-immediately.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-new-text-layers-undo-as-one-safe-creation.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-preview-and-apply-inferred-auto-layout-without-changing-yo.md +5 -0
- package/corpus/templates/design/changelog/2026-07-10-print-pdf-exports-and-paper-size-presets-letter-a4-now-match.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-responsive-frame-editing.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-reusable-design-templates.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-screen-overview-frames-now-use-a-clearer-interact-action-wit.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-start-designs-from-source-linked-material-3-carbon-or-primer.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-tweaks-guidance.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-uploaded-fig-files-can-now-become-editable-design-screens-wi.md +6 -0
- package/corpus/templates/design/e2e/helpers.ts +3 -3
- package/corpus/templates/design/package.json +2 -0
- package/corpus/templates/design/scripts/qa-figma-stress-import.ts +96 -0
- package/corpus/templates/design/server/db/index.ts +10 -0
- package/corpus/templates/design/server/db/schema.ts +44 -0
- package/corpus/templates/design/server/handlers/import-design-file.ts +114 -80
- package/corpus/templates/design/server/handlers/index-design-system-with-builder.ts +19 -6
- package/corpus/templates/design/server/lib/design-export.ts +240 -3
- package/corpus/templates/design/server/lib/design-template-data.ts +89 -0
- package/corpus/templates/design/server/lib/design-to-figma-svg.ts +250 -26
- package/corpus/templates/design/server/lib/fig-file-decoder.ts +839 -0
- package/corpus/templates/design/server/lib/fig-file-import.ts +287 -0
- package/corpus/templates/design/server/lib/fig-file-limits.ts +3 -0
- package/corpus/templates/design/server/lib/fig-file-to-html.ts +2568 -0
- package/corpus/templates/design/server/lib/figma-design-context.ts +359 -0
- package/corpus/templates/design/server/lib/figma-node-import.ts +478 -22
- package/corpus/templates/design/server/lib/figma-node-to-html.ts +554 -29
- package/corpus/templates/design/server/lib/local-figma-qa-upload.ts +112 -0
- package/corpus/templates/design/server/lib/verify-write-grant.ts +16 -2
- package/corpus/templates/design/server/lib/visible-clipboard-html.ts +13 -3
- package/corpus/templates/design/server/plugins/agent-chat.ts +7 -0
- package/corpus/templates/design/server/plugins/db.ts +42 -0
- package/corpus/templates/design/server/plugins/local-figma-qa-upload.ts +7 -0
- package/corpus/templates/design/server/register-secrets.ts +8 -8
- package/corpus/templates/design/server/routes/api/qa-figma-import-assets/[assetId].get.ts +46 -0
- package/corpus/templates/design/server/source-workspace.ts +104 -12
- package/corpus/templates/design/shared/code-layer.ts +105 -28
- package/corpus/templates/design/shared/design-system-templates.ts +301 -0
- package/corpus/templates/design/shared/design-template-presets.ts +195 -0
- package/corpus/templates/design/shared/figma-url.ts +8 -0
- package/corpus/templates/design/shared/html-integrity.ts +306 -0
- package/corpus/templates/design/shared/interaction-states.ts +318 -23
- package/corpus/templates/design/shared/locked-layers.ts +151 -0
- package/corpus/templates/dispatch/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/dispatch/app/i18n/zh-TW.ts +48 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +536 -1
- package/corpus/templates/dispatch/changelog/2026-07-10-connect-slack-workspaces-with-oauth-and-manage-channel-ident.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-10-microsoft-teams-bots-and-discord-slash-commands-can-now-conn.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-10-slack-and-telegram-now-route-uptime-monitor-requests-to-anal.md +6 -0
- package/corpus/templates/forms/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/forms/.agents/skills/form-publishing/SKILL.md +7 -0
- package/corpus/templates/forms/AGENTS.md +4 -0
- package/corpus/templates/forms/actions/create-form.ts +44 -7
- package/corpus/templates/forms/actions/lib/assert-publishable-form.ts +38 -0
- package/corpus/templates/forms/actions/patch-form-fields.ts +4 -0
- package/corpus/templates/forms/actions/update-form.ts +2 -36
- package/corpus/templates/forms/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/forms/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/forms/app/i18n/en-US.ts +3 -0
- package/corpus/templates/forms/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/forms/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/forms/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/forms/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/forms/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/forms/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/forms/app/i18n/zh-CN.ts +2 -0
- package/corpus/templates/forms/app/i18n/zh-TW.ts +3 -0
- package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +17 -0
- package/corpus/templates/forms/changelog/2026-07-10-agent-created-published-forms-now-return-the-anonymous-publi.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-10-published-forms-can-no-longer-be-edited-into-an-unusable-emp.md +6 -0
- package/corpus/templates/forms/server/handlers/submissions.ts +4 -3
- package/corpus/templates/forms/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/forms/shared/types.ts +5 -0
- package/corpus/templates/mail/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +2 -2
- package/corpus/templates/mail/changelog/2026-07-10-mail-navigation-now-uses-a-clean-borderless-drawer.md +6 -0
- package/corpus/templates/plan/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/plan/app/lib/plan-local-bridge.ts +4 -1
- package/corpus/templates/plan/changelog/2026-07-10-local-plans-now-keep-valid-content-visible-when-one-generate.md +6 -0
- package/corpus/templates/plan/server/lib/local-plan-files.ts +4 -1
- package/corpus/templates/slides/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/dist/a2a/artifact-response.d.ts.map +1 -1
- package/dist/a2a/artifact-response.js +88 -2
- package/dist/a2a/artifact-response.js.map +1 -1
- package/dist/a2a/client.d.ts +9 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +1 -0
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +24 -69
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/types.d.ts +2 -0
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/a2a/types.js.map +1 -1
- package/dist/agent/durable-background.d.ts +11 -0
- package/dist/agent/durable-background.d.ts.map +1 -1
- package/dist/agent/durable-background.js +17 -0
- package/dist/agent/durable-background.js.map +1 -1
- package/dist/agent/production-agent.d.ts +5 -3
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +34 -8
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +44 -2
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +124 -18
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +109 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +274 -37
- package/dist/agent/run-store.js.map +1 -1
- package/dist/agent/types.d.ts +22 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/audit/record.d.ts.map +1 -1
- package/dist/audit/record.js +29 -0
- package/dist/audit/record.js.map +1 -1
- package/dist/audit/store.d.ts.map +1 -1
- package/dist/audit/store.js +62 -3
- package/dist/audit/store.js.map +1 -1
- package/dist/audit/types.d.ts +13 -0
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/types.js.map +1 -1
- package/dist/automation/index.d.ts +193 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js +464 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +10 -3
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/design-connect.d.ts.map +1 -1
- package/dist/cli/design-connect.js +492 -35
- package/dist/cli/design-connect.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +7 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +32 -8
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +15 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +115 -47
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +1 -1
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/RunStuckBanner.d.ts +14 -1
- package/dist/client/RunStuckBanner.d.ts.map +1 -1
- package/dist/client/RunStuckBanner.js +35 -7
- package/dist/client/RunStuckBanner.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +4 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +97 -16
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/automation.d.ts +14 -0
- package/dist/client/automation.d.ts.map +1 -0
- package/dist/client/automation.js +9 -0
- package/dist/client/automation.js.map +1 -0
- package/dist/client/chat/run-recovery.d.ts +4 -0
- package/dist/client/chat/run-recovery.d.ts.map +1 -1
- package/dist/client/chat/run-recovery.js +12 -10
- package/dist/client/chat/run-recovery.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +8 -0
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/integrations/api.d.ts +115 -0
- package/dist/client/integrations/api.d.ts.map +1 -0
- package/dist/client/integrations/api.js +123 -0
- package/dist/client/integrations/api.js.map +1 -0
- package/dist/client/integrations/index.d.ts +1 -0
- package/dist/client/integrations/index.d.ts.map +1 -1
- package/dist/client/integrations/index.js +1 -0
- package/dist/client/integrations/index.js.map +1 -1
- package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
- package/dist/client/transcription/use-live-transcription.js +59 -5
- package/dist/client/transcription/use-live-transcription.js.map +1 -1
- package/dist/client/use-run-stuck-detection.d.ts +16 -1
- package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
- package/dist/client/use-run-stuck-detection.js +23 -4
- package/dist/client/use-run-stuck-detection.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +49 -4
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/workspace-deploy.d.ts.map +1 -1
- package/dist/deploy/workspace-deploy.js +31 -2
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/file-upload/types.d.ts +2 -0
- package/dist/file-upload/types.d.ts.map +1 -1
- package/dist/file-upload/types.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
- package/dist/integrations/a2a-continuations-store.js +6 -4
- package/dist/integrations/a2a-continuations-store.js.map +1 -1
- package/dist/integrations/adapters/discord.d.ts +3 -0
- package/dist/integrations/adapters/discord.d.ts.map +1 -0
- package/dist/integrations/adapters/discord.js +261 -0
- package/dist/integrations/adapters/discord.js.map +1 -0
- package/dist/integrations/adapters/index.d.ts +4 -0
- package/dist/integrations/adapters/index.d.ts.map +1 -0
- package/dist/integrations/adapters/index.js +26 -0
- package/dist/integrations/adapters/index.js.map +1 -0
- package/dist/integrations/adapters/microsoft-teams.d.ts +5 -0
- package/dist/integrations/adapters/microsoft-teams.d.ts.map +1 -0
- package/dist/integrations/adapters/microsoft-teams.js +295 -0
- package/dist/integrations/adapters/microsoft-teams.js.map +1 -0
- package/dist/integrations/adapters/slack.d.ts +8 -2
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +736 -27
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/adapters/telegram.d.ts +0 -2
- package/dist/integrations/adapters/telegram.d.ts.map +1 -1
- package/dist/integrations/adapters/telegram.js +49 -15
- package/dist/integrations/adapters/telegram.js.map +1 -1
- package/dist/integrations/adapters/whatsapp.d.ts +0 -2
- package/dist/integrations/adapters/whatsapp.d.ts.map +1 -1
- package/dist/integrations/adapters/whatsapp.js +40 -17
- package/dist/integrations/adapters/whatsapp.js.map +1 -1
- package/dist/integrations/catalog.d.ts +75 -0
- package/dist/integrations/catalog.d.ts.map +1 -0
- package/dist/integrations/catalog.js +451 -0
- package/dist/integrations/catalog.js.map +1 -0
- package/dist/integrations/controls-store.d.ts +44 -0
- package/dist/integrations/controls-store.d.ts.map +1 -0
- package/dist/integrations/controls-store.js +129 -0
- package/dist/integrations/controls-store.js.map +1 -0
- package/dist/integrations/index.d.ts +13 -1
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +9 -0
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/installations-store.d.ts +112 -0
- package/dist/integrations/installations-store.d.ts.map +1 -0
- package/dist/integrations/installations-store.js +493 -0
- package/dist/integrations/installations-store.js.map +1 -0
- package/dist/integrations/integration-memory.d.ts +24 -0
- package/dist/integrations/integration-memory.d.ts.map +1 -0
- package/dist/integrations/integration-memory.js +136 -0
- package/dist/integrations/integration-memory.js.map +1 -0
- package/dist/integrations/pending-tasks-retry-job.d.ts.map +1 -1
- package/dist/integrations/pending-tasks-retry-job.js +6 -5
- package/dist/integrations/pending-tasks-retry-job.js.map +1 -1
- package/dist/integrations/pending-tasks-store.d.ts +17 -0
- package/dist/integrations/pending-tasks-store.d.ts.map +1 -1
- package/dist/integrations/pending-tasks-store.js +71 -5
- package/dist/integrations/pending-tasks-store.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +520 -35
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/scope-store.d.ts +65 -0
- package/dist/integrations/scope-store.d.ts.map +1 -0
- package/dist/integrations/scope-store.js +361 -0
- package/dist/integrations/scope-store.js.map +1 -0
- package/dist/integrations/slack-manifest.d.ts +66 -0
- package/dist/integrations/slack-manifest.d.ts.map +1 -0
- package/dist/integrations/slack-manifest.js +70 -0
- package/dist/integrations/slack-manifest.js.map +1 -0
- package/dist/integrations/slack-oauth.d.ts +99 -0
- package/dist/integrations/slack-oauth.d.ts.map +1 -0
- package/dist/integrations/slack-oauth.js +226 -0
- package/dist/integrations/slack-oauth.js.map +1 -0
- package/dist/integrations/types.d.ts +144 -0
- package/dist/integrations/types.d.ts.map +1 -1
- package/dist/integrations/types.js +16 -1
- package/dist/integrations/types.js.map +1 -1
- package/dist/integrations/usage-budget-store.d.ts +84 -0
- package/dist/integrations/usage-budget-store.d.ts.map +1 -0
- package/dist/integrations/usage-budget-store.js +650 -0
- package/dist/integrations/usage-budget-store.js.map +1 -0
- package/dist/integrations/webhook-handler.d.ts +4 -0
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +415 -47
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +6 -0
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +83 -4
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/jobs/tools.d.ts.map +1 -1
- package/dist/jobs/tools.js +43 -11
- package/dist/jobs/tools.js.map +1 -1
- package/dist/provider-api/index.d.ts +4 -4
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +72 -1
- package/dist/provider-api/index.js.map +1 -1
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +57 -15
- package/dist/resources/handlers.js.map +1 -1
- package/dist/resources/script-helpers.d.ts.map +1 -1
- package/dist/resources/script-helpers.js +34 -8
- package/dist/resources/script-helpers.js.map +1 -1
- package/dist/resources/store.d.ts +10 -0
- package/dist/resources/store.d.ts.map +1 -1
- package/dist/resources/store.js +54 -47
- package/dist/resources/store.js.map +1 -1
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +106 -1
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +15 -4
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +248 -113
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +10 -14
- package/dist/server/auth.js.map +1 -1
- package/dist/server/builder-design-systems.d.ts +3 -1
- package/dist/server/builder-design-systems.d.ts.map +1 -1
- package/dist/server/builder-design-systems.js +9 -2
- package/dist/server/builder-design-systems.js.map +1 -1
- package/dist/server/edge.d.ts +1 -1
- package/dist/server/edge.d.ts.map +1 -1
- package/dist/server/edge.js +1 -1
- package/dist/server/edge.js.map +1 -1
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/request-context.d.ts +18 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/social-og-image.d.ts.map +1 -1
- package/dist/server/social-og-image.js +3 -2
- package/dist/server/social-og-image.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/styles/agent-native.css +62 -44
- package/dist/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/dist/templates/default/AGENTS.md +7 -3
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
- package/dist/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
- package/dist/templates/workspace-core/AGENTS.md +3 -2
- package/dist/usage/store.d.ts +7 -0
- package/dist/usage/store.d.ts.map +1 -1
- package/dist/usage/store.js +24 -3
- package/dist/usage/store.js.map +1 -1
- package/docs/content/automation-connectors.mdx +80 -0
- package/docs/content/extensions.mdx +8 -0
- package/docs/content/locales/ar-SA/extensions.mdx +8 -0
- package/docs/content/locales/ar-SA/messaging.mdx +84 -15
- package/docs/content/locales/ar-SA/template-clips.mdx +1 -0
- package/docs/content/locales/ar-SA/template-design.mdx +1 -0
- package/docs/content/locales/de-DE/extensions.mdx +10 -0
- package/docs/content/locales/de-DE/messaging.mdx +92 -15
- package/docs/content/locales/de-DE/template-clips.mdx +1 -0
- package/docs/content/locales/de-DE/template-design.mdx +1 -0
- package/docs/content/locales/es-ES/extensions.mdx +10 -0
- package/docs/content/locales/es-ES/messaging.mdx +91 -15
- package/docs/content/locales/es-ES/template-clips.mdx +1 -0
- package/docs/content/locales/es-ES/template-design.mdx +1 -0
- package/docs/content/locales/fr-FR/extensions.mdx +10 -0
- package/docs/content/locales/fr-FR/messaging.mdx +91 -15
- package/docs/content/locales/fr-FR/template-clips.mdx +1 -0
- package/docs/content/locales/fr-FR/template-design.mdx +1 -0
- package/docs/content/locales/hi-IN/extensions.mdx +8 -0
- package/docs/content/locales/hi-IN/messaging.mdx +81 -15
- package/docs/content/locales/hi-IN/template-clips.mdx +1 -0
- package/docs/content/locales/hi-IN/template-design.mdx +1 -0
- package/docs/content/locales/ja-JP/extensions.mdx +9 -0
- package/docs/content/locales/ja-JP/messaging.mdx +81 -15
- package/docs/content/locales/ja-JP/template-clips.mdx +1 -0
- package/docs/content/locales/ja-JP/template-design.mdx +1 -0
- package/docs/content/locales/ko-KR/extensions.mdx +8 -0
- package/docs/content/locales/ko-KR/messaging.mdx +80 -15
- package/docs/content/locales/ko-KR/template-clips.mdx +1 -0
- package/docs/content/locales/ko-KR/template-design.mdx +1 -0
- package/docs/content/locales/pt-BR/extensions.mdx +9 -0
- package/docs/content/locales/pt-BR/messaging.mdx +88 -15
- package/docs/content/locales/pt-BR/template-clips.mdx +1 -0
- package/docs/content/locales/pt-BR/template-design.mdx +1 -0
- package/docs/content/locales/zh-CN/extensions.mdx +6 -0
- package/docs/content/locales/zh-CN/messaging.mdx +78 -15
- package/docs/content/locales/zh-CN/template-clips.mdx +1 -0
- package/docs/content/locales/zh-CN/template-design.mdx +1 -0
- package/docs/content/locales/zh-TW/extensions.mdx +6 -0
- package/docs/content/locales/zh-TW/messaging.mdx +78 -15
- package/docs/content/locales/zh-TW/template-clips.mdx +1 -0
- package/docs/content/locales/zh-TW/template-design.mdx +1 -0
- package/docs/content/messaging.mdx +227 -45
- package/docs/content/template-clips.mdx +3 -0
- package/docs/content/template-design.mdx +4 -0
- package/package.json +5 -1
- package/src/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/src/templates/default/AGENTS.md +7 -3
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
- package/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
- package/src/templates/workspace-core/AGENTS.md +3 -2
|
@@ -46,6 +46,53 @@ export interface SeekableResult {
|
|
|
46
46
|
changed: boolean;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Build the ffmpeg command used by the explicit sparse-timeline repair path.
|
|
51
|
+
* The `fps` filter emits a constant frame rate, duplicating the most recent
|
|
52
|
+
* decoded frame across timestamp gaps while audio is mapped through and
|
|
53
|
+
* transcoded independently. H.264/AAC plus faststart gives mobile browsers a
|
|
54
|
+
* broadly playable result.
|
|
55
|
+
*/
|
|
56
|
+
export function timelineNormalizationFfmpegArgs(
|
|
57
|
+
inputPath: string,
|
|
58
|
+
outputPath: string,
|
|
59
|
+
): string[] {
|
|
60
|
+
return [
|
|
61
|
+
"-hide_banner",
|
|
62
|
+
"-loglevel",
|
|
63
|
+
"error",
|
|
64
|
+
"-nostdin",
|
|
65
|
+
"-y",
|
|
66
|
+
"-fflags",
|
|
67
|
+
"+genpts",
|
|
68
|
+
"-i",
|
|
69
|
+
inputPath,
|
|
70
|
+
"-map",
|
|
71
|
+
"0:v:0",
|
|
72
|
+
"-map",
|
|
73
|
+
"0:a?",
|
|
74
|
+
"-vf",
|
|
75
|
+
"fps=30",
|
|
76
|
+
"-c:v",
|
|
77
|
+
"libx264",
|
|
78
|
+
"-preset",
|
|
79
|
+
"veryfast",
|
|
80
|
+
"-crf",
|
|
81
|
+
"23",
|
|
82
|
+
"-pix_fmt",
|
|
83
|
+
"yuv420p",
|
|
84
|
+
"-c:a",
|
|
85
|
+
"aac",
|
|
86
|
+
"-b:a",
|
|
87
|
+
"128k",
|
|
88
|
+
"-movflags",
|
|
89
|
+
"+faststart",
|
|
90
|
+
"-f",
|
|
91
|
+
"mp4",
|
|
92
|
+
outputPath,
|
|
93
|
+
];
|
|
94
|
+
}
|
|
95
|
+
|
|
49
96
|
function ffmpegCommand(): string {
|
|
50
97
|
if (process.env.FFMPEG_PATH) return process.env.FFMPEG_PATH;
|
|
51
98
|
return resolveFfmpegStaticPath() ?? "ffmpeg";
|
|
@@ -273,6 +320,73 @@ export async function remuxWebmToSeekable(
|
|
|
273
320
|
}
|
|
274
321
|
}
|
|
275
322
|
|
|
323
|
+
/**
|
|
324
|
+
* Normalize sparse or discontinuous video timestamps into a constant-frame-
|
|
325
|
+
* rate, faststart MP4. This is intentionally a full transcode rather than the
|
|
326
|
+
* normal lossless seekability repair: the fps filter must synthesize duplicate
|
|
327
|
+
* frames through source gaps so browsers keep advancing while continuous audio
|
|
328
|
+
* plays.
|
|
329
|
+
*
|
|
330
|
+
* Best-effort and non-destructive. Any missing ffmpeg support, decode/encode
|
|
331
|
+
* failure, invalid output, or audio-track loss returns the original bytes with
|
|
332
|
+
* `changed: false`; callers must not replace stored media in that case.
|
|
333
|
+
*/
|
|
334
|
+
export async function normalizeTimelineToMp4(input: {
|
|
335
|
+
mediaBytes: Uint8Array;
|
|
336
|
+
videoFormat: VideoFormat;
|
|
337
|
+
}): Promise<SeekableResult> {
|
|
338
|
+
const unchanged: SeekableResult = {
|
|
339
|
+
bytes: input.mediaBytes,
|
|
340
|
+
changed: false,
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
if (input.mediaBytes.byteLength === 0) return unchanged;
|
|
344
|
+
if (!isFfmpegAvailable()) return unchanged;
|
|
345
|
+
|
|
346
|
+
const dir = await mkdtemp(join(tmpdir(), "clips-timeline-normalize-"));
|
|
347
|
+
const inputPath = join(dir, `input.${input.videoFormat}`);
|
|
348
|
+
const outputPath = join(dir, "output.mp4");
|
|
349
|
+
|
|
350
|
+
try {
|
|
351
|
+
const inputHasAudio = await probeHasAudioStream(
|
|
352
|
+
input.mediaBytes,
|
|
353
|
+
input.videoFormat,
|
|
354
|
+
);
|
|
355
|
+
await writeFile(inputPath, input.mediaBytes);
|
|
356
|
+
await withRemuxSlot(() =>
|
|
357
|
+
runFfmpeg(timelineNormalizationFfmpegArgs(inputPath, outputPath)),
|
|
358
|
+
);
|
|
359
|
+
|
|
360
|
+
const info = await stat(outputPath).catch(() => null);
|
|
361
|
+
if (!info || info.size === 0) return unchanged;
|
|
362
|
+
|
|
363
|
+
const out = new Uint8Array(await readFile(outputPath));
|
|
364
|
+
if (!hasPlayableMp4Metadata(out)) return unchanged;
|
|
365
|
+
|
|
366
|
+
if (inputHasAudio === true) {
|
|
367
|
+
const outputHasAudio = await probeHasAudioStream(out, "mp4");
|
|
368
|
+
if (outputHasAudio !== true) {
|
|
369
|
+
console.warn(
|
|
370
|
+
"[video-remux] timeline normalization dropped or could not verify audio; keeping original",
|
|
371
|
+
);
|
|
372
|
+
return unchanged;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
return { bytes: out, changed: true };
|
|
377
|
+
} catch (err) {
|
|
378
|
+
console.warn(
|
|
379
|
+
"[video-remux] timeline normalization failed, keeping original",
|
|
380
|
+
{
|
|
381
|
+
err: err instanceof Error ? err.message : String(err),
|
|
382
|
+
},
|
|
383
|
+
);
|
|
384
|
+
return unchanged;
|
|
385
|
+
} finally {
|
|
386
|
+
await rm(dir, { recursive: true, force: true }).catch(() => {});
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
276
390
|
/**
|
|
277
391
|
* Make an MP4 start-playable by moving its `moov` atom ahead of `mdat`. Pure
|
|
278
392
|
* TypeScript — no ffmpeg. Returns the original bytes when already faststarted
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import {
|
|
2
|
+
runWithRequestContext,
|
|
3
|
+
verifyScopedAgentAccessToken,
|
|
4
|
+
} from "@agent-native/core/server";
|
|
5
|
+
import { eq } from "drizzle-orm";
|
|
6
|
+
import {
|
|
7
|
+
defineEventHandler,
|
|
8
|
+
readBody,
|
|
9
|
+
setResponseStatus,
|
|
10
|
+
type H3Event,
|
|
11
|
+
} from "h3";
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
|
|
14
|
+
import { ensureRecordingSeekable } from "../../../../actions/lib/ensure-seekable-video.js";
|
|
15
|
+
import requestTranscript from "../../../../actions/request-transcript.js";
|
|
16
|
+
import { getDb, schema } from "../../../db/index.js";
|
|
17
|
+
import {
|
|
18
|
+
dispatchPostFinalizeJob,
|
|
19
|
+
POST_FINALIZE_JOB_TOKEN_KIND,
|
|
20
|
+
postFinalizeJobResourceId,
|
|
21
|
+
} from "../../../lib/post-finalize-dispatch.js";
|
|
22
|
+
|
|
23
|
+
const bodySchema = z.object({
|
|
24
|
+
recordingId: z.string().min(1).max(200),
|
|
25
|
+
kind: z.enum(["seekable", "transcript"]),
|
|
26
|
+
token: z.string().min(1),
|
|
27
|
+
delayMs: z.number().int().min(0).max(30_000).optional(),
|
|
28
|
+
retryAttempt: z.number().int().min(1).max(10).optional(),
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
export default defineEventHandler(async (event: H3Event) => {
|
|
32
|
+
const parsed = bodySchema.safeParse(await readBody(event).catch(() => null));
|
|
33
|
+
if (!parsed.success) {
|
|
34
|
+
setResponseStatus(event, 400);
|
|
35
|
+
return { ok: false, error: "Invalid post-finalize job" };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const { recordingId, kind, token, delayMs, retryAttempt } = parsed.data;
|
|
39
|
+
const verified = verifyScopedAgentAccessToken(token, {
|
|
40
|
+
resourceKind: POST_FINALIZE_JOB_TOKEN_KIND,
|
|
41
|
+
resourceId: postFinalizeJobResourceId(recordingId, kind),
|
|
42
|
+
});
|
|
43
|
+
if (!verified.ok) {
|
|
44
|
+
setResponseStatus(event, 401);
|
|
45
|
+
return { ok: false, error: "Invalid or expired post-finalize job token" };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const [recording] = await getDb()
|
|
49
|
+
.select({
|
|
50
|
+
id: schema.recordings.id,
|
|
51
|
+
ownerEmail: schema.recordings.ownerEmail,
|
|
52
|
+
orgId: schema.recordings.orgId,
|
|
53
|
+
status: schema.recordings.status,
|
|
54
|
+
})
|
|
55
|
+
.from(schema.recordings)
|
|
56
|
+
.where(eq(schema.recordings.id, recordingId))
|
|
57
|
+
.limit(1);
|
|
58
|
+
if (!recording) {
|
|
59
|
+
setResponseStatus(event, 404);
|
|
60
|
+
return { ok: false, error: "Recording not found" };
|
|
61
|
+
}
|
|
62
|
+
if (recording.status !== "ready") {
|
|
63
|
+
return {
|
|
64
|
+
ok: true,
|
|
65
|
+
recordingId,
|
|
66
|
+
kind,
|
|
67
|
+
skipped: true,
|
|
68
|
+
reason: `recording-${recording.status}`,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return runWithRequestContext(
|
|
73
|
+
{
|
|
74
|
+
userEmail: recording.ownerEmail,
|
|
75
|
+
orgId: recording.orgId ?? undefined,
|
|
76
|
+
},
|
|
77
|
+
async () => {
|
|
78
|
+
if (delayMs) {
|
|
79
|
+
await new Promise<void>((resolve) => setTimeout(resolve, delayMs));
|
|
80
|
+
await dispatchPostFinalizeJob({
|
|
81
|
+
recordingId,
|
|
82
|
+
kind,
|
|
83
|
+
retryAttempt,
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
ok: true,
|
|
87
|
+
recordingId,
|
|
88
|
+
kind,
|
|
89
|
+
retryAttempt,
|
|
90
|
+
dispatchedAfterMs: delayMs,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
if (kind === "seekable") {
|
|
94
|
+
const result = await ensureRecordingSeekable({
|
|
95
|
+
recordingId,
|
|
96
|
+
ownerEmail: recording.ownerEmail,
|
|
97
|
+
});
|
|
98
|
+
return { ok: true, kind, result };
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const result = await requestTranscript.run({
|
|
102
|
+
recordingId,
|
|
103
|
+
force: true,
|
|
104
|
+
retryAttempt,
|
|
105
|
+
});
|
|
106
|
+
return { ok: true, kind, result };
|
|
107
|
+
},
|
|
108
|
+
);
|
|
109
|
+
});
|
|
@@ -15,13 +15,14 @@ const GITHUB_MANIFEST_URL =
|
|
|
15
15
|
const CACHE_TTL_MS = 5 * 60_000;
|
|
16
16
|
|
|
17
17
|
// Tauri throws a red-banner error if the requesting client's target triple is
|
|
18
|
-
// missing from `platforms`. We ship Universal
|
|
19
|
-
// must always carry
|
|
20
|
-
// so no client sees a hard error.
|
|
21
|
-
const REQUIRED_PLATFORM_KEYS = [
|
|
18
|
+
// missing from `platforms`. We ship Universal macOS, Windows, and Linux, so the
|
|
19
|
+
// manifest must always carry all targets — if upstream is incomplete, fall
|
|
20
|
+
// back to inert so no client sees a hard error.
|
|
21
|
+
export const REQUIRED_PLATFORM_KEYS = [
|
|
22
22
|
"darwin-aarch64",
|
|
23
23
|
"darwin-x86_64",
|
|
24
24
|
"windows-x86_64",
|
|
25
|
+
"linux-x86_64",
|
|
25
26
|
];
|
|
26
27
|
|
|
27
28
|
const INERT_PLATFORM = {
|
|
@@ -29,7 +30,7 @@ const INERT_PLATFORM = {
|
|
|
29
30
|
signature: "updates-disabled",
|
|
30
31
|
};
|
|
31
32
|
|
|
32
|
-
const INERT_MANIFEST = {
|
|
33
|
+
export const INERT_MANIFEST = {
|
|
33
34
|
version: "0.0.0",
|
|
34
35
|
notes:
|
|
35
36
|
"Automatic updates are temporarily unavailable. Download the latest Clips installer from https://clips.agent-native.com/download.",
|
|
@@ -42,6 +43,8 @@ const INERT_MANIFEST = {
|
|
|
42
43
|
"windows-x86_64-nsis": INERT_PLATFORM,
|
|
43
44
|
"windows-x86_64-msi": INERT_PLATFORM,
|
|
44
45
|
"windows-x86_64": INERT_PLATFORM,
|
|
46
|
+
"linux-x86_64-appimage": INERT_PLATFORM,
|
|
47
|
+
"linux-x86_64": INERT_PLATFORM,
|
|
45
48
|
},
|
|
46
49
|
};
|
|
47
50
|
|
|
@@ -62,7 +65,7 @@ function isManifestLike(value: unknown): value is Record<string, unknown> {
|
|
|
62
65
|
return !!obj.platforms && typeof obj.platforms === "object";
|
|
63
66
|
}
|
|
64
67
|
|
|
65
|
-
function hasAllRequiredPlatforms(value: unknown): boolean {
|
|
68
|
+
export function hasAllRequiredPlatforms(value: unknown): boolean {
|
|
66
69
|
if (!isManifestLike(value)) return false;
|
|
67
70
|
const platforms = value.platforms as Record<string, unknown> | undefined;
|
|
68
71
|
if (!platforms || typeof platforms !== "object") return false;
|
|
@@ -101,11 +104,11 @@ async function getManifest(): Promise<unknown> {
|
|
|
101
104
|
cache = { data, ts: Date.now() };
|
|
102
105
|
return data;
|
|
103
106
|
} catch {
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
|
|
107
|
-
cache
|
|
108
|
-
return
|
|
107
|
+
// A validation or network failure may serve the last good manifest (or
|
|
108
|
+
// inert fallback), but it must not make that fallback fresh again.
|
|
109
|
+
// Otherwise an incomplete release manifest can indefinitely extend the
|
|
110
|
+
// stale cache window on every failed refresh.
|
|
111
|
+
return cache?.data ?? INERT_MANIFEST;
|
|
109
112
|
} finally {
|
|
110
113
|
inFlight = null;
|
|
111
114
|
}
|
|
@@ -113,6 +116,14 @@ async function getManifest(): Promise<unknown> {
|
|
|
113
116
|
return inFlight;
|
|
114
117
|
}
|
|
115
118
|
|
|
119
|
+
export const __clipsUpdaterTest = {
|
|
120
|
+
getManifest,
|
|
121
|
+
reset() {
|
|
122
|
+
cache = null;
|
|
123
|
+
inFlight = null;
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
|
|
116
127
|
export default defineEventHandler(async (event) => {
|
|
117
128
|
const manifest = await getManifest();
|
|
118
129
|
setResponseHeaders(event, {
|
|
@@ -39,6 +39,7 @@ import {
|
|
|
39
39
|
normalizeTranscriptSegments,
|
|
40
40
|
parseTranscriptSegments,
|
|
41
41
|
} from "../../../shared/transcript-segments.js";
|
|
42
|
+
import { resolveTranscriptPresentation } from "../../../shared/transcript-status.js";
|
|
42
43
|
import { getDb, schema } from "../../db/index.js";
|
|
43
44
|
import { resolvePlayerVideoUrl } from "../../lib/player-video-url.js";
|
|
44
45
|
import {
|
|
@@ -382,6 +383,7 @@ export default defineEventHandler(async (event) => {
|
|
|
382
383
|
// Don't leak the URL (which now carries a short-lived token) into the
|
|
383
384
|
// Referer of any outbound link the share page renders.
|
|
384
385
|
setResponseHeader(event, "Referrer-Policy", "no-referrer");
|
|
386
|
+
const transcriptPresentation = resolveTranscriptPresentation(transcript);
|
|
385
387
|
|
|
386
388
|
return {
|
|
387
389
|
recording: {
|
|
@@ -418,10 +420,10 @@ export default defineEventHandler(async (event) => {
|
|
|
418
420
|
agentContextUrl,
|
|
419
421
|
transcript: transcript
|
|
420
422
|
? {
|
|
421
|
-
status:
|
|
423
|
+
status: transcriptPresentation.status,
|
|
422
424
|
language: transcript.language,
|
|
423
425
|
fullText: transcript.fullText,
|
|
424
|
-
failureReason:
|
|
426
|
+
failureReason: transcriptPresentation.failureReason,
|
|
425
427
|
segments: transcriptSegments,
|
|
426
428
|
}
|
|
427
429
|
: null,
|
|
@@ -26,7 +26,11 @@ import {
|
|
|
26
26
|
getEventOwnerContext,
|
|
27
27
|
ownerEmailMatches,
|
|
28
28
|
} from "../../../../lib/recordings.js";
|
|
29
|
-
import {
|
|
29
|
+
import {
|
|
30
|
+
deleteResumableSession,
|
|
31
|
+
getResumableSession,
|
|
32
|
+
} from "../../../../lib/resumable-session.js";
|
|
33
|
+
import { resolveResumableUploadProvider } from "../../../../lib/resumable-upload-provider.js";
|
|
30
34
|
|
|
31
35
|
export default defineEventHandler(async (event: H3Event) => {
|
|
32
36
|
const recordingId = getRouterParam(event, "recordingId");
|
|
@@ -74,11 +78,19 @@ export default defineEventHandler(async (event: H3Event) => {
|
|
|
74
78
|
const preserveRecoveryState =
|
|
75
79
|
isStoredButUnservableFinalizeError(failureReason) ||
|
|
76
80
|
isStoredButUnservableFinalizeError(existing.failureReason);
|
|
81
|
+
const resumableSession = preserveRecoveryState
|
|
82
|
+
? null
|
|
83
|
+
: await getResumableSession(recordingId).catch(() => null);
|
|
77
84
|
|
|
78
85
|
// Already a terminal failure (e.g. a duplicate/retried abort call, or
|
|
79
|
-
// finalize's own failChunkAssembly already flipped it) — no-op
|
|
80
|
-
//
|
|
81
|
-
|
|
86
|
+
// finalize's own failChunkAssembly already flipped it) — no-op unless a
|
|
87
|
+
// prior provider cleanup failure intentionally retained a resumable
|
|
88
|
+
// session for this retry.
|
|
89
|
+
if (
|
|
90
|
+
existing.status === "failed" &&
|
|
91
|
+
!preserveRecoveryState &&
|
|
92
|
+
!resumableSession
|
|
93
|
+
) {
|
|
82
94
|
return { ok: true, recordingId, alreadyFailed: true, chunksCleared: 0 };
|
|
83
95
|
}
|
|
84
96
|
|
|
@@ -111,7 +123,37 @@ export default defineEventHandler(async (event: H3Event) => {
|
|
|
111
123
|
? 0
|
|
112
124
|
: await deleteAppStateByPrefix(`recording-chunks-${recordingId}-`);
|
|
113
125
|
if (!preserveRecoveryState) {
|
|
114
|
-
|
|
126
|
+
if (resumableSession) {
|
|
127
|
+
const provider = await resolveResumableUploadProvider(
|
|
128
|
+
resumableSession.providerId,
|
|
129
|
+
).catch(() => null);
|
|
130
|
+
let providerCleanupSucceeded = false;
|
|
131
|
+
try {
|
|
132
|
+
if (!provider?.resumable?.abortSession) {
|
|
133
|
+
throw new Error(
|
|
134
|
+
`Resumable upload provider ${resumableSession.providerId} cannot abort this session`,
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
await provider.resumable.abortSession({
|
|
138
|
+
sessionId: resumableSession.sessionId,
|
|
139
|
+
meta: resumableSession.meta,
|
|
140
|
+
});
|
|
141
|
+
providerCleanupSucceeded = true;
|
|
142
|
+
} catch (err) {
|
|
143
|
+
console.warn(
|
|
144
|
+
"[abort] resumable upload provider cleanup failed:",
|
|
145
|
+
err instanceof Error ? err.message : String(err),
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
// Keep the provider handle when cleanup fails so a later abort/cleanup
|
|
149
|
+
// retry can still address the multipart upload. Deleting it here would
|
|
150
|
+
// permanently orphan the provider-side session.
|
|
151
|
+
if (providerCleanupSucceeded) {
|
|
152
|
+
await deleteResumableSession(recordingId).catch(() => {});
|
|
153
|
+
}
|
|
154
|
+
} else {
|
|
155
|
+
await deleteResumableSession(recordingId).catch(() => {});
|
|
156
|
+
}
|
|
115
157
|
}
|
|
116
158
|
await writeAppState("refresh-signal", { ts: Date.now() });
|
|
117
159
|
|
|
@@ -17,7 +17,6 @@ import {
|
|
|
17
17
|
readAppState,
|
|
18
18
|
writeAppState,
|
|
19
19
|
} from "@agent-native/core/application-state";
|
|
20
|
-
import { getActiveFileUploadProvider } from "@agent-native/core/file-upload";
|
|
21
20
|
import { runWithRequestContext } from "@agent-native/core/server";
|
|
22
21
|
import { track } from "@agent-native/core/tracking";
|
|
23
22
|
import { normalizeChunkUploadNumber } from "@shared/recording-core.js";
|
|
@@ -51,6 +50,7 @@ import {
|
|
|
51
50
|
setResumableSession,
|
|
52
51
|
type StoredResumableSession,
|
|
53
52
|
} from "../../../../lib/resumable-session.js";
|
|
53
|
+
import { resolveResumableUploadProvider } from "../../../../lib/resumable-upload-provider.js";
|
|
54
54
|
import { isStreamingUploadDisabled } from "../../../../lib/streaming-upload-mode.js";
|
|
55
55
|
import {
|
|
56
56
|
allowsSqlRecordingChunkScratch,
|
|
@@ -696,7 +696,9 @@ async function handleResumableChunk(
|
|
|
696
696
|
query: Record<string, unknown>,
|
|
697
697
|
ownerEmail: string,
|
|
698
698
|
) {
|
|
699
|
-
const uploadProvider =
|
|
699
|
+
const uploadProvider = await resolveResumableUploadProvider(
|
|
700
|
+
session.providerId,
|
|
701
|
+
);
|
|
700
702
|
if (!uploadProvider?.resumable) {
|
|
701
703
|
setResponseStatus(event, 502);
|
|
702
704
|
return { ok: false, error: "Upload storage is not configured" };
|
|
@@ -738,6 +740,12 @@ async function handleResumableChunk(
|
|
|
738
740
|
error: `Resumable session close failed (${closeRes.status})`,
|
|
739
741
|
};
|
|
740
742
|
}
|
|
743
|
+
if (closeRes.updatedMeta) {
|
|
744
|
+
await setResumableSession(recordingId, {
|
|
745
|
+
...session,
|
|
746
|
+
meta: { ...session.meta, ...closeRes.updatedMeta },
|
|
747
|
+
});
|
|
748
|
+
}
|
|
741
749
|
} else {
|
|
742
750
|
// Idempotent replay guard: a client retry (after a lost response) can
|
|
743
751
|
// re-send a chunk we already committed. Re-PUTing it at the new offset
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { data } from "react-router";
|
|
2
|
+
|
|
3
|
+
export const PRIVATE_SHARE_RESPONSE_HEADERS = {
|
|
4
|
+
"Cache-Control": "private, max-age=0, no-store",
|
|
5
|
+
"Referrer-Policy": "no-referrer",
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export function privateShareLoaderData<T>(payload: T) {
|
|
9
|
+
return data(payload, {
|
|
10
|
+
headers: PRIVATE_SHARE_RESPONSE_HEADERS,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export const STALE_PENDING_TRANSCRIPT_MS = 5 * 60 * 1000;
|
|
2
|
+
|
|
3
|
+
export const STALE_PENDING_TRANSCRIPT_REASON =
|
|
4
|
+
"Transcription stopped before it finished. Retry transcription to start a fresh attempt.";
|
|
5
|
+
|
|
6
|
+
export function resolveTranscriptPresentation(
|
|
7
|
+
transcript:
|
|
8
|
+
| {
|
|
9
|
+
status?: string | null;
|
|
10
|
+
updatedAt?: string | null;
|
|
11
|
+
failureReason?: string | null;
|
|
12
|
+
}
|
|
13
|
+
| null
|
|
14
|
+
| undefined,
|
|
15
|
+
nowMs = Date.now(),
|
|
16
|
+
): {
|
|
17
|
+
status: string | null;
|
|
18
|
+
failureReason: string | null;
|
|
19
|
+
stalePending: boolean;
|
|
20
|
+
} {
|
|
21
|
+
const status = transcript?.status ?? null;
|
|
22
|
+
const failureReason = transcript?.failureReason ?? null;
|
|
23
|
+
if (status !== "pending") {
|
|
24
|
+
return { status, failureReason, stalePending: false };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const updatedAtMs = Date.parse(transcript?.updatedAt ?? "");
|
|
28
|
+
const stalePending =
|
|
29
|
+
!Number.isFinite(updatedAtMs) ||
|
|
30
|
+
nowMs - updatedAtMs >= STALE_PENDING_TRANSCRIPT_MS;
|
|
31
|
+
if (!stalePending) {
|
|
32
|
+
return { status, failureReason, stalePending: false };
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
status: "failed",
|
|
37
|
+
failureReason: failureReason || STALE_PENDING_TRANSCRIPT_REASON,
|
|
38
|
+
stalePending: true,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
@@ -11,11 +11,14 @@ metadata:
|
|
|
11
11
|
|
|
12
12
|
# Capture Learnings
|
|
13
13
|
|
|
14
|
-
This is background knowledge, not a slash command. **
|
|
14
|
+
This is background knowledge, not a slash command. **Organization learnings and your personal memory index are loaded at the start of every conversation, including Slack/integration turns.** Capture durable context proactively when you learn something worth remembering.
|
|
15
15
|
|
|
16
16
|
## How to Read & Write Memories
|
|
17
17
|
|
|
18
|
-
Memories are stored as **resources** in the SQL database
|
|
18
|
+
Memories are stored as **resources** in the SQL database, not as files on disk.
|
|
19
|
+
|
|
20
|
+
- **Team/organization knowledge:** shared `LEARNINGS.md`. Read it first, merge the new fact, then write the full updated file with the `resources` tool using `scope: "shared"`. Shared scope resolves to the active organization; it must never leak to another organization in the same deployment.
|
|
21
|
+
- **Personal knowledge:** `memory/MEMORY.md` plus `memory/<name>.md`, written with `save-memory`.
|
|
19
22
|
|
|
20
23
|
- **Save a memory:** `save-memory --name <name> --type <type> --description "..." --content "..."`
|
|
21
24
|
- **Read a memory:** `resource-read --path memory/<name>.md`
|
|
@@ -33,6 +36,14 @@ Memories are stored as **resources** in the SQL database (personal scope), not a
|
|
|
33
36
|
|
|
34
37
|
## When to Capture
|
|
35
38
|
|
|
39
|
+
### Team and organization knowledge (`LEARNINGS.md`, shared scope)
|
|
40
|
+
- Canonical destinations and workflows (for example, which Content database receives a type of Slack request)
|
|
41
|
+
- Required intake fields, ownership, prioritization conventions, metric definitions, and approved terminology
|
|
42
|
+
- Durable external references that the whole team needs, including the canonical page/database URL
|
|
43
|
+
- Corrections or decisions that should affect every organization member's future Slack and app conversations
|
|
44
|
+
|
|
45
|
+
Store the fact and a concise provenance link when available. Do not paste full private conversations, customer data, credentials, or secrets into learnings. Put stable always-on policy in shared `AGENTS.md`; put learned facts and evolving conventions in shared `LEARNINGS.md`.
|
|
46
|
+
|
|
36
47
|
### User Preferences & Memory (`user`)
|
|
37
48
|
- **Tone and style** — "I prefer casual tone", "don't use emojis", "keep replies short"
|
|
38
49
|
- **Personal context** — contacts, relationships, habits ("my wife's email is...", "I'm in PST timezone")
|
|
@@ -58,19 +69,21 @@ Memories are stored as **resources** in the SQL database (personal scope), not a
|
|
|
58
69
|
- Things obvious from reading the code
|
|
59
70
|
- Standard language/framework behavior
|
|
60
71
|
- Temporary debugging notes
|
|
61
|
-
- Anything already in AGENTS.md or skills
|
|
72
|
+
- Anything already in AGENTS.md, shared LEARNINGS.md, or skills
|
|
62
73
|
- Ephemeral task details (use tasks/plans instead)
|
|
63
74
|
|
|
64
75
|
## Key Rules
|
|
65
76
|
|
|
66
|
-
1. **Save proactively — don't ask permission.** When you learn something, save it immediately.
|
|
67
|
-
2. **
|
|
68
|
-
3. **
|
|
69
|
-
4. **
|
|
70
|
-
5. **
|
|
77
|
+
1. **Save proactively — don't ask permission.** When you learn something durable, save it immediately at the correct scope.
|
|
78
|
+
2. **Choose scope by audience.** Organization workflow or reference → shared `LEARNINGS.md`; one person's preference/context → personal memory.
|
|
79
|
+
3. **One memory per topic** — e.g. `coding-style`, `project-alpha`, not one giant dump
|
|
80
|
+
4. **Read before updating** — if a memory exists, read it first and merge, don't overwrite
|
|
81
|
+
5. **Keep descriptions concise** — the index is loaded every conversation
|
|
82
|
+
6. **Memories are SQL-backed** — they persist across sessions and are not in git; still minimize sensitive content
|
|
71
83
|
|
|
72
84
|
## Graduation
|
|
73
85
|
|
|
74
86
|
When a memory is referenced repeatedly, it may belong in AGENTS.md or a skill:
|
|
75
|
-
- Saving a memory is lightweight (auto-apply, personal scope)
|
|
87
|
+
- Saving a personal memory is lightweight (auto-apply, personal scope)
|
|
88
|
+
- Shared LEARNINGS.md is the lightweight organization knowledge layer
|
|
76
89
|
- Updating AGENTS.md or a skill is heavier (affects all users/agents)
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
name: content
|
|
3
3
|
description: >-
|
|
4
4
|
Use Content for repo-backed Markdown/MDX docs, blogs, resources, rich
|
|
5
|
-
document editing,
|
|
6
|
-
|
|
5
|
+
document editing, Notion-style databases and boards, structured intake
|
|
6
|
+
forms, local components, shareable copies, and Content local-file workspaces.
|
|
7
|
+
Prefer Content actions over raw filesystem writes when available.
|
|
7
8
|
metadata:
|
|
8
9
|
visibility: exported
|
|
9
10
|
---
|
|
@@ -12,9 +13,11 @@ metadata:
|
|
|
12
13
|
|
|
13
14
|
Use the Content app when a workflow is about authoring, editing, reviewing, or
|
|
14
15
|
publishing Markdown/MDX documents: docs sites, blogs, resource libraries,
|
|
15
|
-
marketing pages, internal notes, and local MDX components. Content
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
marketing pages, internal notes, and local MDX components. Also use Content for
|
|
17
|
+
Notion-style databases, tables, boards, structured request intake, and forms
|
|
18
|
+
whose submissions become database row pages. Content gives the agent a document
|
|
19
|
+
tree, a rich editor, structured database properties and views, normal document
|
|
20
|
+
actions, and an optional local-file source of truth.
|
|
18
21
|
|
|
19
22
|
## Choose The Path
|
|
20
23
|
|
|
@@ -26,6 +29,10 @@ local-file source of truth.
|
|
|
26
29
|
- Use `pull-document` or `get-document` before editing a page. Use
|
|
27
30
|
`edit-document` for precise find/replace changes and `update-document` for
|
|
28
31
|
full rewrites or new content.
|
|
32
|
+
- Use `list-documents` or `search-documents` to find an existing database by
|
|
33
|
+
its exact title, then inspect it with `get-content-database` before creating
|
|
34
|
+
or submitting anything. Do not create a second database when the canonical
|
|
35
|
+
one already exists.
|
|
29
36
|
- In Local File Mode, Content actions read and write the repo files declared in
|
|
30
37
|
`agent-native.json`; SQL remains cache/history/search glue, not the source of
|
|
31
38
|
truth for those pages.
|
|
@@ -49,6 +56,51 @@ pnpm action share-local-file-document '{"id":"local-file:..."}'
|
|
|
49
56
|
Run `refresh-list` after create/update/delete operations when you need the open
|
|
50
57
|
Content UI sidebar to repaint immediately.
|
|
51
58
|
|
|
59
|
+
## Database And Intake Workflows
|
|
60
|
+
|
|
61
|
+
Content databases are one available capability for structured team queues,
|
|
62
|
+
tables, boards, and intake forms. Select Content when workspace instructions or
|
|
63
|
+
app-capability discovery identify it as the owner of the workflow. Do not route
|
|
64
|
+
from a department or subject word alone, and do not embed an organization's
|
|
65
|
+
queue name, destination ID, schema, required fields, or owner in this reusable
|
|
66
|
+
skill. If workspace instructions assign the workflow to another app, follow
|
|
67
|
+
those instructions.
|
|
68
|
+
|
|
69
|
+
For a named intake workflow:
|
|
70
|
+
|
|
71
|
+
1. Read the loaded workspace instruction/resource first. It may identify the
|
|
72
|
+
owning app, canonical database ID or title, form view, and intake policy.
|
|
73
|
+
Treat that live instruction as authoritative instead of applying defaults
|
|
74
|
+
from this skill.
|
|
75
|
+
2. Once Content is selected, find the canonical database by the instructed ID
|
|
76
|
+
or exact title with `list-documents` or `search-documents`; inspect it with
|
|
77
|
+
`get-content-database` and, when available,
|
|
78
|
+
`get-content-database-form`. Preserve its database and document IDs. Never
|
|
79
|
+
guess IDs or create a duplicate queue.
|
|
80
|
+
3. Read the current property/form schema and required fields before asking the
|
|
81
|
+
user anything. Ask only for required values that are actually missing.
|
|
82
|
+
4. You may infer low-risk values from the request, sender identity, and source
|
|
83
|
+
context, but state proposed values and confirm any uncertain or consequential
|
|
84
|
+
inference. Never invent a value for a field marked required.
|
|
85
|
+
5. Preserve a provided `Source Slack thread` URL verbatim in the matching URL
|
|
86
|
+
or source field. It is request provenance; never replace it with an invented
|
|
87
|
+
Slack URL.
|
|
88
|
+
6. Submit exactly once with `submit-content-database-form` when that action is
|
|
89
|
+
available. Prefer it over piecemeal writes because it validates required
|
|
90
|
+
fields and verifies the saved row. Fall back to `add-database-item` only
|
|
91
|
+
when the database has no form contract and all required values have already
|
|
92
|
+
been confirmed.
|
|
93
|
+
7. Treat submission as complete only when the successful result includes a
|
|
94
|
+
`createdDocumentId` and verification. Return the exact `url` or `urlPath`
|
|
95
|
+
from the result. The canonical Content row route is `/page/<createdDocumentId>`;
|
|
96
|
+
never invent a different path, slug, ID, or host.
|
|
97
|
+
|
|
98
|
+
When the user supplies a complete description in one message, do not force a
|
|
99
|
+
questionnaire: extract the matching fields, show only genuinely uncertain
|
|
100
|
+
inferences for confirmation, then submit once. When required information is
|
|
101
|
+
missing, keep the clarification in the originating thread and retain earlier
|
|
102
|
+
answers as context.
|
|
103
|
+
|
|
52
104
|
## Local File Mode
|
|
53
105
|
|
|
54
106
|
Install into an existing repo with:
|