@agent-native/core 0.90.2 → 0.90.3
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 +12 -0
- package/corpus/core/docs/content/agent-native-toolkit.mdx +87 -80
- package/corpus/core/docs/content/locales/ar-SA/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/de-DE/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/es-ES/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/fr-FR/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/hi-IN/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/ja-JP/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/ko-KR/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/pt-BR/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/zh-CN/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/locales/zh-TW/agent-native-toolkit.mdx +89 -80
- package/corpus/core/docs/content/toolkit-agent-ux.mdx +43 -0
- package/corpus/core/docs/content/toolkit-app-adapters.mdx +9 -0
- package/corpus/core/docs/content/toolkit-collaboration-ui.mdx +12 -0
- package/corpus/core/docs/content/toolkit-collaboration.mdx +74 -0
- package/corpus/core/docs/content/toolkit-command-navigation.mdx +106 -0
- package/corpus/core/docs/content/toolkit-comments-review.mdx +98 -0
- package/corpus/core/docs/content/toolkit-history.mdx +95 -0
- package/corpus/core/docs/content/toolkit-observability.mdx +41 -0
- package/corpus/core/docs/content/toolkit-org-team.mdx +80 -0
- package/corpus/core/docs/content/toolkit-resources.mdx +57 -0
- package/corpus/core/docs/content/toolkit-settings.mdx +65 -0
- package/corpus/core/docs/content/toolkit-setup-connections.mdx +109 -0
- package/corpus/core/docs/content/toolkit-sharing-ui.mdx +18 -6
- package/corpus/core/docs/content/toolkit-sharing.mdx +81 -0
- package/corpus/core/docs/content/toolkit-shell-hooks.mdx +9 -0
- package/corpus/core/docs/content/toolkit-ui.mdx +9 -0
- package/corpus/core/package.json +35 -1
- package/corpus/core/src/agent/engine/ai-sdk-engine.ts +19 -1
- package/corpus/core/src/agent/engine/anthropic-engine.ts +25 -1
- package/corpus/core/src/agent/engine/registry.ts +23 -16
- package/corpus/core/src/agent/production-agent.ts +37 -6
- package/corpus/core/src/client/command-navigation/index.ts +15 -0
- package/corpus/core/src/client/comments-review/index.ts +1 -0
- package/corpus/core/src/client/history/VersionHistoryPanel.tsx +145 -0
- package/corpus/core/src/client/history/index.ts +18 -0
- package/corpus/core/src/client/history/use-history.ts +86 -0
- package/corpus/core/src/client/index.ts +76 -9
- package/corpus/core/src/client/org/OrgSwitcher.tsx +6 -6
- package/corpus/core/src/client/org/RequireActiveOrg.tsx +2 -2
- package/corpus/core/src/client/org/TeamPage.tsx +3 -3
- package/corpus/core/src/client/org/hooks.ts +32 -0
- package/corpus/core/src/client/org/index.ts +30 -1
- package/corpus/core/src/client/org-team/index.ts +1 -0
- package/corpus/core/src/client/review/ReviewStatusBadge.tsx +39 -0
- package/corpus/core/src/client/review/ReviewThreadPanel.tsx +278 -0
- package/corpus/core/src/client/review/index.ts +25 -0
- package/corpus/core/src/client/review/use-review.ts +114 -0
- package/corpus/core/src/client/settings/index.ts +11 -1
- package/corpus/core/src/client/setup-connections/BuilderConnectCard.tsx +94 -0
- package/corpus/core/src/client/setup-connections/ProviderReadinessBadge.tsx +73 -0
- package/corpus/core/src/client/setup-connections/SetupConnectionsPage.tsx +94 -0
- package/corpus/core/src/client/setup-connections/index.ts +46 -0
- package/corpus/core/src/client/sharing/ShareButton.tsx +20 -14
- package/corpus/core/src/client/sharing/ShareDialog.tsx +3 -3
- package/corpus/core/src/command-navigation/actions.ts +100 -0
- package/corpus/core/src/command-navigation/index.ts +12 -0
- package/corpus/core/src/comments-review/index.ts +1 -0
- package/corpus/core/src/file-upload/builder.ts +24 -3
- package/corpus/core/src/file-upload/types.ts +3 -1
- package/corpus/core/src/history/actions/create-resource-version.ts +89 -0
- package/corpus/core/src/history/actions/get-resource-version.ts +60 -0
- package/corpus/core/src/history/actions/list-resource-history.ts +53 -0
- package/corpus/core/src/history/actions/list-resource-versions.ts +43 -0
- package/corpus/core/src/history/actions/restore-resource-version.ts +96 -0
- package/corpus/core/src/history/index.ts +27 -0
- package/corpus/core/src/history/registry.ts +99 -0
- package/corpus/core/src/history/store.ts +348 -0
- package/corpus/core/src/history/types.ts +69 -0
- package/corpus/core/src/index.ts +10 -0
- package/corpus/core/src/navigation/index.ts +170 -0
- package/corpus/core/src/org/index.ts +8 -0
- package/corpus/core/src/org/permissions.ts +30 -0
- package/corpus/core/src/org-team/index.ts +1 -0
- package/corpus/core/src/private-blob/registry.ts +1 -0
- package/corpus/core/src/review/actions/consume-review-feedback.ts +38 -0
- package/corpus/core/src/review/actions/create-review-comment.ts +107 -0
- package/corpus/core/src/review/actions/delete-review-comment.ts +55 -0
- package/corpus/core/src/review/actions/get-review-feedback.ts +54 -0
- package/corpus/core/src/review/actions/list-review-comments.ts +53 -0
- package/corpus/core/src/review/actions/reply-review-comment.ts +107 -0
- package/corpus/core/src/review/actions/resolve-review-thread.ts +60 -0
- package/corpus/core/src/review/actions/set-review-status.ts +58 -0
- package/corpus/core/src/review/index.ts +36 -0
- package/corpus/core/src/review/mentions.ts +44 -0
- package/corpus/core/src/review/registry.ts +99 -0
- package/corpus/core/src/review/store.ts +687 -0
- package/corpus/core/src/review/types.ts +97 -0
- package/corpus/core/src/server/action-discovery.ts +54 -0
- package/corpus/core/src/server/agent-engine-api-key-route.ts +5 -0
- package/corpus/core/src/server/credential-provider.ts +108 -0
- package/corpus/core/src/setup-connections/index.ts +89 -0
- package/corpus/core/src/setup-connections/onboarding.ts +47 -0
- package/corpus/core/src/transcription/builder-transcription.ts +9 -2
- package/corpus/core/src/vite/action-types-plugin.ts +52 -0
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +2 -1
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/analytics/app/global.css +22 -10
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +6 -1
- package/corpus/templates/analytics/app/i18n-data.ts +81 -13
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +2 -2
- package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +2 -2
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +528 -108
- package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +466 -183
- package/corpus/templates/analytics/changelog/2026-07-07-session-replays-load-sooner-show-clearer-activity-timelines-.md +6 -0
- package/corpus/templates/brain/app/routes/settings.tsx +2 -2
- package/corpus/templates/calendar/app/components/calendar/AttendeeAutocomplete.tsx +32 -6
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +120 -40
- package/corpus/templates/calendar/app/hooks/use-people.ts +55 -0
- package/corpus/templates/calendar/changelog/2026-07-07-guest-suggestions-now-find-coworkers-from-your-google-worksp.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-07-zoom-stays-selected-after-connecting-it-from-a-draft-event.md +6 -0
- package/corpus/templates/clips/actions/create-recording.ts +5 -1
- package/corpus/templates/clips/actions/finalize-recording.ts +140 -1
- package/corpus/templates/clips/actions/import-loom-recording.ts +1 -0
- package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +1 -0
- package/corpus/templates/clips/actions/request-transcript.ts +31 -0
- package/corpus/templates/clips/actions/set-thumbnail.ts +2 -0
- package/corpus/templates/clips/app/components/library/organization-switcher.tsx +2 -2
- package/corpus/templates/clips/app/components/player/scrubber-position.ts +9 -0
- package/corpus/templates/clips/app/components/player/scrubber.tsx +5 -2
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +69 -41
- package/corpus/templates/clips/app/components/player/video-player.tsx +38 -1
- package/corpus/templates/clips/app/components/sharing/share-ui.tsx +3 -3
- package/corpus/templates/clips/app/components/sharing/slack-share-hint.tsx +9 -19
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +9 -3
- package/corpus/templates/clips/app/routes/record.tsx +21 -12
- package/corpus/templates/clips/changelog/2026-07-02-recordings-now-wait-for-storage-media-to-serve-before-finishing.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-07-a-pending-app-update-no-longer-blocks-screen-recording-updat.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-07-chrome-extension-recordings-keep-audio-after-refreshing-tab.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-07-clip-playback-progress-now-starts-and-finishes-at-the-right-times.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-07-sharing-public-clips-now-stays-focused-on-the-normal-link-wi.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/background.ts +18 -0
- package/corpus/templates/clips/chrome-extension/src/offscreen.ts +23 -8
- package/corpus/templates/clips/desktop/src/app.tsx +40 -3
- package/corpus/templates/clips/desktop/src/hooks/useMediaDevices.ts +19 -7
- package/corpus/templates/clips/desktop/src/lib/permissions.ts +2 -0
- package/corpus/templates/clips/desktop/src/lib/updater.ts +25 -2
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +7 -0
- package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +1 -0
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +22 -5
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +8 -0
- package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +13 -6
- package/corpus/templates/clips/shared/finalize-recovery.ts +12 -0
- package/corpus/templates/content/actions/delete-document.ts +337 -52
- package/corpus/templates/content/changelog/2026-07-07-permanently-deleting-trashed-databases-now-finishes-reliably.md +6 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +2 -2
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +15 -1
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/anthropic-engine.js +20 -1
- package/dist/agent/engine/anthropic-engine.js.map +1 -1
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +22 -14
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +27 -7
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/client/command-navigation/index.d.ts +4 -0
- package/dist/client/command-navigation/index.d.ts.map +1 -0
- package/dist/client/command-navigation/index.js +4 -0
- package/dist/client/command-navigation/index.js.map +1 -0
- package/dist/client/comments-review/index.d.ts +2 -0
- package/dist/client/comments-review/index.d.ts.map +1 -0
- package/dist/client/comments-review/index.js +2 -0
- package/dist/client/comments-review/index.js.map +1 -0
- package/dist/client/history/VersionHistoryPanel.d.ts +18 -0
- package/dist/client/history/VersionHistoryPanel.d.ts.map +1 -0
- package/dist/client/history/VersionHistoryPanel.js +24 -0
- package/dist/client/history/VersionHistoryPanel.js.map +1 -0
- package/dist/client/history/index.d.ts +3 -0
- package/dist/client/history/index.d.ts.map +1 -0
- package/dist/client/history/index.js +3 -0
- package/dist/client/history/index.js.map +1 -0
- package/dist/client/history/use-history.d.ts +46 -0
- package/dist/client/history/use-history.d.ts.map +1 -0
- package/dist/client/history/use-history.js +18 -0
- package/dist/client/history/use-history.js.map +1 -0
- package/dist/client/index.d.ts +6 -4
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +6 -4
- package/dist/client/index.js.map +1 -1
- package/dist/client/org/OrgSwitcher.js +5 -5
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/RequireActiveOrg.js +2 -2
- package/dist/client/org/RequireActiveOrg.js.map +1 -1
- package/dist/client/org/TeamPage.js +3 -3
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/org/hooks.d.ts +12 -1
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/org/hooks.js +15 -0
- package/dist/client/org/hooks.js.map +1 -1
- package/dist/client/org/index.d.ts +4 -2
- package/dist/client/org/index.d.ts.map +1 -1
- package/dist/client/org/index.js +3 -1
- package/dist/client/org/index.js.map +1 -1
- package/dist/client/org-team/index.d.ts +2 -0
- package/dist/client/org-team/index.d.ts.map +1 -0
- package/dist/client/org-team/index.js +2 -0
- package/dist/client/org-team/index.js.map +1 -0
- package/dist/client/review/ReviewStatusBadge.d.ts +7 -0
- package/dist/client/review/ReviewStatusBadge.d.ts.map +1 -0
- package/dist/client/review/ReviewStatusBadge.js +19 -0
- package/dist/client/review/ReviewStatusBadge.js.map +1 -0
- package/dist/client/review/ReviewThreadPanel.d.ts +20 -0
- package/dist/client/review/ReviewThreadPanel.d.ts.map +1 -0
- package/dist/client/review/ReviewThreadPanel.js +84 -0
- package/dist/client/review/ReviewThreadPanel.js.map +1 -0
- package/dist/client/review/index.d.ts +4 -0
- package/dist/client/review/index.d.ts.map +1 -0
- package/dist/client/review/index.js +4 -0
- package/dist/client/review/index.js.map +1 -0
- package/dist/client/review/use-review.d.ts +68 -0
- package/dist/client/review/use-review.d.ts.map +1 -0
- package/dist/client/review/use-review.js +22 -0
- package/dist/client/review/use-review.js.map +1 -0
- package/dist/client/settings/index.d.ts +1 -1
- package/dist/client/settings/index.d.ts.map +1 -1
- package/dist/client/settings/index.js +1 -1
- package/dist/client/settings/index.js.map +1 -1
- package/dist/client/setup-connections/BuilderConnectCard.d.ts +9 -0
- package/dist/client/setup-connections/BuilderConnectCard.d.ts.map +1 -0
- package/dist/client/setup-connections/BuilderConnectCard.js +25 -0
- package/dist/client/setup-connections/BuilderConnectCard.js.map +1 -0
- package/dist/client/setup-connections/ProviderReadinessBadge.d.ts +8 -0
- package/dist/client/setup-connections/ProviderReadinessBadge.d.ts.map +1 -0
- package/dist/client/setup-connections/ProviderReadinessBadge.js +32 -0
- package/dist/client/setup-connections/ProviderReadinessBadge.js.map +1 -0
- package/dist/client/setup-connections/SetupConnectionsPage.d.ts +17 -0
- package/dist/client/setup-connections/SetupConnectionsPage.d.ts.map +1 -0
- package/dist/client/setup-connections/SetupConnectionsPage.js +10 -0
- package/dist/client/setup-connections/SetupConnectionsPage.js.map +1 -0
- package/dist/client/setup-connections/index.d.ts +7 -0
- package/dist/client/setup-connections/index.d.ts.map +1 -0
- package/dist/client/setup-connections/index.js +7 -0
- package/dist/client/setup-connections/index.js.map +1 -0
- package/dist/client/sharing/ShareButton.d.ts +4 -4
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +13 -7
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sharing/ShareDialog.js +3 -3
- package/dist/client/sharing/ShareDialog.js.map +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/command-navigation/actions.d.ts +25 -0
- package/dist/command-navigation/actions.d.ts.map +1 -0
- package/dist/command-navigation/actions.js +64 -0
- package/dist/command-navigation/actions.js.map +1 -0
- package/dist/command-navigation/index.d.ts +4 -0
- package/dist/command-navigation/index.d.ts.map +1 -0
- package/dist/command-navigation/index.js +4 -0
- package/dist/command-navigation/index.js.map +1 -0
- package/dist/comments-review/index.d.ts +2 -0
- package/dist/comments-review/index.d.ts.map +1 -0
- package/dist/comments-review/index.js +2 -0
- package/dist/comments-review/index.js.map +1 -0
- package/dist/file-upload/builder.d.ts.map +1 -1
- package/dist/file-upload/builder.js +18 -2
- package/dist/file-upload/builder.js.map +1 -1
- package/dist/file-upload/types.d.ts +3 -0
- package/dist/file-upload/types.d.ts.map +1 -1
- package/dist/file-upload/types.js.map +1 -1
- package/dist/history/actions/create-resource-version.d.ts +10 -0
- package/dist/history/actions/create-resource-version.d.ts.map +1 -0
- package/dist/history/actions/create-resource-version.js +65 -0
- package/dist/history/actions/create-resource-version.js.map +1 -0
- package/dist/history/actions/get-resource-version.d.ts +10 -0
- package/dist/history/actions/get-resource-version.d.ts.map +1 -0
- package/dist/history/actions/get-resource-version.js +38 -0
- package/dist/history/actions/get-resource-version.js.map +1 -0
- package/dist/history/actions/list-resource-history.d.ts +10 -0
- package/dist/history/actions/list-resource-history.d.ts.map +1 -0
- package/dist/history/actions/list-resource-history.js +45 -0
- package/dist/history/actions/list-resource-history.js.map +1 -0
- package/dist/history/actions/list-resource-versions.d.ts +10 -0
- package/dist/history/actions/list-resource-versions.d.ts.map +1 -0
- package/dist/history/actions/list-resource-versions.js +35 -0
- package/dist/history/actions/list-resource-versions.js.map +1 -0
- package/dist/history/actions/restore-resource-version.d.ts +11 -0
- package/dist/history/actions/restore-resource-version.d.ts.map +1 -0
- package/dist/history/actions/restore-resource-version.js +59 -0
- package/dist/history/actions/restore-resource-version.js.map +1 -0
- package/dist/history/index.d.ts +4 -0
- package/dist/history/index.d.ts.map +1 -0
- package/dist/history/index.js +3 -0
- package/dist/history/index.js.map +1 -0
- package/dist/history/registry.d.ts +10 -0
- package/dist/history/registry.d.ts.map +1 -0
- package/dist/history/registry.js +61 -0
- package/dist/history/registry.js.map +1 -0
- package/dist/history/store.d.ts +34 -0
- package/dist/history/store.d.ts.map +1 -0
- package/dist/history/store.js +265 -0
- package/dist/history/store.js.map +1 -0
- package/dist/history/types.d.ts +55 -0
- package/dist/history/types.d.ts.map +1 -0
- package/dist/history/types.js +2 -0
- package/dist/history/types.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/navigation/index.d.ts +53 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +105 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/org/index.d.ts +1 -0
- package/dist/org/index.d.ts.map +1 -1
- package/dist/org/index.js +1 -0
- package/dist/org/index.js.map +1 -1
- package/dist/org/permissions.d.ts +7 -0
- package/dist/org/permissions.d.ts.map +1 -0
- package/dist/org/permissions.js +21 -0
- package/dist/org/permissions.js.map +1 -0
- package/dist/org-team/index.d.ts +2 -0
- package/dist/org-team/index.d.ts.map +1 -0
- package/dist/org-team/index.js +2 -0
- package/dist/org-team/index.js.map +1 -0
- package/dist/private-blob/registry.d.ts.map +1 -1
- package/dist/private-blob/registry.js +1 -0
- package/dist/private-blob/registry.js.map +1 -1
- package/dist/resources/handlers.d.ts +2 -2
- package/dist/review/actions/consume-review-feedback.d.ts +9 -0
- package/dist/review/actions/consume-review-feedback.d.ts.map +1 -0
- package/dist/review/actions/consume-review-feedback.js +29 -0
- package/dist/review/actions/consume-review-feedback.js.map +1 -0
- package/dist/review/actions/create-review-comment.d.ts +18 -0
- package/dist/review/actions/create-review-comment.d.ts.map +1 -0
- package/dist/review/actions/create-review-comment.js +81 -0
- package/dist/review/actions/create-review-comment.js.map +1 -0
- package/dist/review/actions/delete-review-comment.d.ts +10 -0
- package/dist/review/actions/delete-review-comment.d.ts.map +1 -0
- package/dist/review/actions/delete-review-comment.js +45 -0
- package/dist/review/actions/delete-review-comment.js.map +1 -0
- package/dist/review/actions/get-review-feedback.d.ts +10 -0
- package/dist/review/actions/get-review-feedback.d.ts.map +1 -0
- package/dist/review/actions/get-review-feedback.js +45 -0
- package/dist/review/actions/get-review-feedback.js.map +1 -0
- package/dist/review/actions/list-review-comments.d.ts +13 -0
- package/dist/review/actions/list-review-comments.d.ts.map +1 -0
- package/dist/review/actions/list-review-comments.js +44 -0
- package/dist/review/actions/list-review-comments.js.map +1 -0
- package/dist/review/actions/reply-review-comment.d.ts +16 -0
- package/dist/review/actions/reply-review-comment.d.ts.map +1 -0
- package/dist/review/actions/reply-review-comment.js +84 -0
- package/dist/review/actions/reply-review-comment.js.map +1 -0
- package/dist/review/actions/resolve-review-thread.d.ts +11 -0
- package/dist/review/actions/resolve-review-thread.d.ts.map +1 -0
- package/dist/review/actions/resolve-review-thread.js +46 -0
- package/dist/review/actions/resolve-review-thread.js.map +1 -0
- package/dist/review/actions/set-review-status.d.ts +9 -0
- package/dist/review/actions/set-review-status.d.ts.map +1 -0
- package/dist/review/actions/set-review-status.js +43 -0
- package/dist/review/actions/set-review-status.js.map +1 -0
- package/dist/review/index.d.ts +5 -0
- package/dist/review/index.d.ts.map +1 -0
- package/dist/review/index.js +4 -0
- package/dist/review/index.js.map +1 -0
- package/dist/review/mentions.d.ts +4 -0
- package/dist/review/mentions.d.ts.map +1 -0
- package/dist/review/mentions.js +39 -0
- package/dist/review/mentions.js.map +1 -0
- package/dist/review/registry.d.ts +10 -0
- package/dist/review/registry.d.ts.map +1 -0
- package/dist/review/registry.js +61 -0
- package/dist/review/registry.js.map +1 -0
- package/dist/review/store.d.ts +63 -0
- package/dist/review/store.d.ts.map +1 -0
- package/dist/review/store.js +558 -0
- package/dist/review/store.js.map +1 -0
- package/dist/review/types.d.ts +77 -0
- package/dist/review/types.d.ts.map +1 -0
- package/dist/review/types.js +2 -0
- package/dist/review/types.js.map +1 -0
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +54 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts.map +1 -1
- package/dist/server/agent-engine-api-key-route.js +5 -0
- package/dist/server/agent-engine-api-key-route.js.map +1 -1
- package/dist/server/credential-provider.d.ts +26 -0
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +82 -0
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/setup-connections/index.d.ts +6 -0
- package/dist/setup-connections/index.d.ts.map +1 -0
- package/dist/setup-connections/index.js +6 -0
- package/dist/setup-connections/index.js.map +1 -0
- package/dist/setup-connections/onboarding.d.ts +14 -0
- package/dist/setup-connections/onboarding.d.ts.map +1 -0
- package/dist/setup-connections/onboarding.js +23 -0
- package/dist/setup-connections/onboarding.js.map +1 -0
- package/dist/transcription/builder-transcription.d.ts +1 -0
- package/dist/transcription/builder-transcription.d.ts.map +1 -1
- package/dist/transcription/builder-transcription.js +5 -2
- package/dist/transcription/builder-transcription.js.map +1 -1
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +52 -0
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/docs/content/agent-native-toolkit.mdx +87 -80
- package/docs/content/locales/ar-SA/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/de-DE/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/es-ES/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/fr-FR/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/hi-IN/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/ja-JP/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/ko-KR/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/pt-BR/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/zh-CN/agent-native-toolkit.mdx +89 -80
- package/docs/content/locales/zh-TW/agent-native-toolkit.mdx +89 -80
- package/docs/content/toolkit-agent-ux.mdx +43 -0
- package/docs/content/toolkit-app-adapters.mdx +9 -0
- package/docs/content/toolkit-collaboration-ui.mdx +12 -0
- package/docs/content/toolkit-collaboration.mdx +74 -0
- package/docs/content/toolkit-command-navigation.mdx +106 -0
- package/docs/content/toolkit-comments-review.mdx +98 -0
- package/docs/content/toolkit-history.mdx +95 -0
- package/docs/content/toolkit-observability.mdx +41 -0
- package/docs/content/toolkit-org-team.mdx +80 -0
- package/docs/content/toolkit-resources.mdx +57 -0
- package/docs/content/toolkit-settings.mdx +65 -0
- package/docs/content/toolkit-setup-connections.mdx +109 -0
- package/docs/content/toolkit-sharing-ui.mdx +18 -6
- package/docs/content/toolkit-sharing.mdx +81 -0
- package/docs/content/toolkit-shell-hooks.mdx +9 -0
- package/docs/content/toolkit-ui.mdx +9 -0
- package/package.json +36 -2
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export {
|
|
2
|
+
BuilderConnectCard,
|
|
3
|
+
type BuilderConnectCardProps,
|
|
4
|
+
} from "./BuilderConnectCard.js";
|
|
5
|
+
export {
|
|
6
|
+
ProviderReadinessBadge,
|
|
7
|
+
type ProviderReadinessBadgeProps,
|
|
8
|
+
} from "./ProviderReadinessBadge.js";
|
|
9
|
+
export {
|
|
10
|
+
SetupConnectionsPage,
|
|
11
|
+
type SetupConnectionsPageProps,
|
|
12
|
+
} from "./SetupConnectionsPage.js";
|
|
13
|
+
export {
|
|
14
|
+
OnboardingBanner,
|
|
15
|
+
OnboardingPanel,
|
|
16
|
+
SetupButton,
|
|
17
|
+
useOnboarding,
|
|
18
|
+
useOnboardingPreviewMode,
|
|
19
|
+
type OnboardingFormField,
|
|
20
|
+
type OnboardingMethod,
|
|
21
|
+
type OnboardingMethodBadge,
|
|
22
|
+
type OnboardingStep,
|
|
23
|
+
type OnboardingStepStatus,
|
|
24
|
+
type UseOnboardingResult,
|
|
25
|
+
} from "../onboarding/index.js";
|
|
26
|
+
export {
|
|
27
|
+
SecretsSection,
|
|
28
|
+
SettingsPanel,
|
|
29
|
+
SettingsTabsPage,
|
|
30
|
+
openBuilderConnectPopup,
|
|
31
|
+
useBuilderConnectFlow,
|
|
32
|
+
useBuilderStatus,
|
|
33
|
+
type BuilderConnectFlow,
|
|
34
|
+
type BuilderConnectFlowOptions,
|
|
35
|
+
type BuilderStatus,
|
|
36
|
+
type OpenBuilderConnectPopupOptions,
|
|
37
|
+
type SecretsSectionProps,
|
|
38
|
+
type SettingsPanelProps,
|
|
39
|
+
type SettingsTabItem,
|
|
40
|
+
type SettingsTabsPageProps,
|
|
41
|
+
} from "../settings/index.js";
|
|
42
|
+
export {
|
|
43
|
+
IntegrationsPanel,
|
|
44
|
+
useIntegrationStatus,
|
|
45
|
+
type IntegrationStatus,
|
|
46
|
+
} from "../integrations/index.js";
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as Select from "@radix-ui/react-select";
|
|
2
2
|
import {
|
|
3
3
|
IconLock,
|
|
4
|
-
IconBuilding,
|
|
5
4
|
IconWorld,
|
|
6
5
|
IconTrash,
|
|
7
6
|
IconCheck,
|
|
@@ -11,6 +10,7 @@ import {
|
|
|
11
10
|
IconSearch,
|
|
12
11
|
IconSearchOff,
|
|
13
12
|
IconShare3,
|
|
13
|
+
IconUsersGroup,
|
|
14
14
|
} from "@tabler/icons-react";
|
|
15
15
|
import { useQueryClient } from "@tanstack/react-query";
|
|
16
16
|
import {
|
|
@@ -46,11 +46,11 @@ export interface ShareButtonProps {
|
|
|
46
46
|
/** @deprecated No longer affects rendering — trigger always says
|
|
47
47
|
* "Share". Kept for callsite compatibility. */
|
|
48
48
|
variant?: "compact" | "label";
|
|
49
|
-
/** Optional trigger style. Defaults to the Google-Docs-style "Share" label
|
|
50
|
-
*
|
|
51
|
-
*
|
|
49
|
+
/** Optional trigger style. Defaults to the Google-Docs-style "Share" label
|
|
50
|
+
* with a leading visibility icon. "label-icon" is kept for callsites that
|
|
51
|
+
* want to explicitly opt into icon+label parity; "icon" is icon-only. */
|
|
52
52
|
trigger?: "label" | "icon" | "label-icon";
|
|
53
|
-
/** @deprecated
|
|
53
|
+
/** @deprecated No longer affects rendering — triggers show visibility state. */
|
|
54
54
|
hideTriggerIcon?: boolean;
|
|
55
55
|
/** Optional className applied to the trigger button. */
|
|
56
56
|
triggerClassName?: string;
|
|
@@ -197,7 +197,7 @@ const VIS_META: Record<
|
|
|
197
197
|
org: {
|
|
198
198
|
label: "Organization",
|
|
199
199
|
description: "Anyone in your organization can view",
|
|
200
|
-
Icon:
|
|
200
|
+
Icon: IconUsersGroup,
|
|
201
201
|
},
|
|
202
202
|
public: {
|
|
203
203
|
label: "Public",
|
|
@@ -356,10 +356,17 @@ export function ShareButton(props: ShareButtonProps) {
|
|
|
356
356
|
});
|
|
357
357
|
};
|
|
358
358
|
|
|
359
|
-
|
|
360
|
-
|
|
359
|
+
const triggerVisibility =
|
|
360
|
+
pendingVisibility ??
|
|
361
|
+
(sharesQuery.data
|
|
362
|
+
? ((sharesQuery.data.visibility as Visibility | null) ?? "private")
|
|
363
|
+
: null);
|
|
364
|
+
const triggerMeta = triggerVisibility
|
|
365
|
+
? visibilityMeta(triggerVisibility, props.visibilityCopy)
|
|
366
|
+
: null;
|
|
367
|
+
const TriggerIcon = triggerMeta?.Icon ?? IconShare3;
|
|
368
|
+
const triggerLabel = triggerMeta ? `Share (${triggerMeta.label})` : "Share";
|
|
361
369
|
const iconOnly = props.trigger === "icon";
|
|
362
|
-
const showLabelIcon = props.trigger === "label-icon";
|
|
363
370
|
|
|
364
371
|
return (
|
|
365
372
|
<Popover open={open} onOpenChange={handleOpenChange}>
|
|
@@ -370,11 +377,10 @@ export function ShareButton(props: ShareButtonProps) {
|
|
|
370
377
|
iconOnly ? BUTTON_GHOST_ICON : BUTTON_OUTLINE_SM,
|
|
371
378
|
props.triggerClassName,
|
|
372
379
|
)}
|
|
373
|
-
aria-label={
|
|
380
|
+
aria-label={triggerLabel}
|
|
381
|
+
title={triggerLabel}
|
|
374
382
|
>
|
|
375
|
-
{
|
|
376
|
-
<IconShare3 size={16} strokeWidth={1.75} />
|
|
377
|
-
) : null}
|
|
383
|
+
<TriggerIcon size={16} strokeWidth={1.75} />
|
|
378
384
|
{!iconOnly && <span>Share</span>}
|
|
379
385
|
</button>
|
|
380
386
|
</PopoverTrigger>
|
|
@@ -1663,7 +1669,7 @@ function Avatar({ label, org }: { label: string; org?: boolean }) {
|
|
|
1663
1669
|
aria-hidden
|
|
1664
1670
|
className="inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-muted text-[11px] font-semibold text-muted-foreground"
|
|
1665
1671
|
>
|
|
1666
|
-
{org ? <
|
|
1672
|
+
{org ? <IconUsersGroup size={14} strokeWidth={1.75} /> : initials(label)}
|
|
1667
1673
|
</span>
|
|
1668
1674
|
);
|
|
1669
1675
|
}
|
|
@@ -3,7 +3,6 @@ import {
|
|
|
3
3
|
IconX,
|
|
4
4
|
IconTrash,
|
|
5
5
|
IconLock,
|
|
6
|
-
IconBuilding,
|
|
7
6
|
IconWorld,
|
|
8
7
|
IconCheck,
|
|
9
8
|
IconCopy,
|
|
@@ -11,6 +10,7 @@ import {
|
|
|
11
10
|
IconMail,
|
|
12
11
|
IconCode,
|
|
13
12
|
IconChevronDown,
|
|
13
|
+
IconUsersGroup,
|
|
14
14
|
} from "@tabler/icons-react";
|
|
15
15
|
import { useEffect, useState, type ReactNode } from "react";
|
|
16
16
|
import { createPortal } from "react-dom";
|
|
@@ -117,7 +117,7 @@ const BUTTON_GHOST_ICON = cn(
|
|
|
117
117
|
|
|
118
118
|
const VIS_ICONS: Record<Visibility, typeof IconLock> = {
|
|
119
119
|
private: IconLock,
|
|
120
|
-
org:
|
|
120
|
+
org: IconUsersGroup,
|
|
121
121
|
public: IconWorld,
|
|
122
122
|
};
|
|
123
123
|
|
|
@@ -824,7 +824,7 @@ function Avatar({ label, org }: { label: string; org?: boolean }) {
|
|
|
824
824
|
className="inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-muted text-[11px] font-semibold text-muted-foreground"
|
|
825
825
|
>
|
|
826
826
|
{org ? (
|
|
827
|
-
<
|
|
827
|
+
<IconUsersGroup size={14} strokeWidth={1.75} />
|
|
828
828
|
) : (
|
|
829
829
|
(label.split("@")[0]?.[0] ?? label[0] ?? "?").toUpperCase()
|
|
830
830
|
)}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import { defineAction } from "../action.js";
|
|
4
|
+
import { readAppState, writeAppState } from "../application-state/index.js";
|
|
5
|
+
|
|
6
|
+
const navigateSchema = z
|
|
7
|
+
.object({
|
|
8
|
+
view: z.string().optional().describe("View name to navigate to"),
|
|
9
|
+
path: z.string().optional().describe("URL path to navigate to"),
|
|
10
|
+
})
|
|
11
|
+
.passthrough();
|
|
12
|
+
|
|
13
|
+
export interface CreateNavigateActionOptions {
|
|
14
|
+
description?: string;
|
|
15
|
+
stateKey?: string;
|
|
16
|
+
normalize?: (
|
|
17
|
+
args: z.infer<typeof navigateSchema>,
|
|
18
|
+
) => Record<string, unknown> | Promise<Record<string, unknown>>;
|
|
19
|
+
describeResult?: (
|
|
20
|
+
navigation: Record<string, unknown>,
|
|
21
|
+
args: z.infer<typeof navigateSchema>,
|
|
22
|
+
) => string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface CreateViewScreenActionOptions {
|
|
26
|
+
description?: string;
|
|
27
|
+
navigationStateKey?: string;
|
|
28
|
+
extraStateKeys?: string[];
|
|
29
|
+
describeResult?: (
|
|
30
|
+
screen: Record<string, unknown>,
|
|
31
|
+
) =>
|
|
32
|
+
| Record<string, unknown>
|
|
33
|
+
| string
|
|
34
|
+
| Promise<Record<string, unknown> | string>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function writeId(): string {
|
|
38
|
+
return `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function createNavigateAction(
|
|
42
|
+
options: CreateNavigateActionOptions = {},
|
|
43
|
+
) {
|
|
44
|
+
const stateKey = options.stateKey ?? "navigate";
|
|
45
|
+
return defineAction({
|
|
46
|
+
description:
|
|
47
|
+
options.description ??
|
|
48
|
+
"Navigate the UI to a specific view or path. Writes a navigate command to application state which the UI reads and auto-deletes.",
|
|
49
|
+
schema: navigateSchema,
|
|
50
|
+
http: false,
|
|
51
|
+
run: async (args) => {
|
|
52
|
+
if (!args.view && !args.path) {
|
|
53
|
+
throw new Error("At least --view or --path is required.");
|
|
54
|
+
}
|
|
55
|
+
const navigation = options.normalize
|
|
56
|
+
? await options.normalize(args)
|
|
57
|
+
: ({
|
|
58
|
+
...(args.view ? { view: args.view } : null),
|
|
59
|
+
...(args.path ? { path: args.path } : null),
|
|
60
|
+
} as Record<string, unknown>);
|
|
61
|
+
navigation._writeId = writeId();
|
|
62
|
+
await writeAppState(stateKey, navigation);
|
|
63
|
+
return (
|
|
64
|
+
options.describeResult?.(navigation, args) ??
|
|
65
|
+
`Navigating to ${String(args.view || args.path)}`
|
|
66
|
+
);
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function createViewScreenAction(
|
|
72
|
+
options: CreateViewScreenActionOptions = {},
|
|
73
|
+
) {
|
|
74
|
+
const navigationStateKey = options.navigationStateKey ?? "navigation";
|
|
75
|
+
return defineAction({
|
|
76
|
+
description:
|
|
77
|
+
options.description ??
|
|
78
|
+
"See what the user is currently looking at on screen. Returns the current navigation state.",
|
|
79
|
+
schema: z.object({}),
|
|
80
|
+
http: false,
|
|
81
|
+
readOnly: true,
|
|
82
|
+
run: async () => {
|
|
83
|
+
const screen: Record<string, unknown> = {};
|
|
84
|
+
const navigation = await readAppState(navigationStateKey);
|
|
85
|
+
if (navigation) screen.navigation = navigation;
|
|
86
|
+
|
|
87
|
+
for (const key of options.extraStateKeys ?? []) {
|
|
88
|
+
const value = await readAppState(key);
|
|
89
|
+
if (value !== null && value !== undefined) screen[key] = value;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (Object.keys(screen).length === 0) {
|
|
93
|
+
return "No application state found. Is the app running?";
|
|
94
|
+
}
|
|
95
|
+
return options.describeResult
|
|
96
|
+
? await options.describeResult(screen)
|
|
97
|
+
: screen;
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from "../navigation/index.js";
|
|
2
|
+
export * from "./actions.js";
|
|
3
|
+
export {
|
|
4
|
+
buildDeepLink,
|
|
5
|
+
toAbsoluteOpenUrl,
|
|
6
|
+
toDesktopOpenUrl,
|
|
7
|
+
toVsCodeOpenUrl,
|
|
8
|
+
DESKTOP_OPEN_URL,
|
|
9
|
+
OPEN_ROUTE_SUBPATH,
|
|
10
|
+
VSCODE_OPEN_URL,
|
|
11
|
+
type DeepLinkInput,
|
|
12
|
+
} from "../server/deep-link.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "../review/index.js";
|
|
@@ -60,6 +60,15 @@ function setSkipCompressionQueryParams(url: URL): void {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
function setRecordAssetQueryParam(
|
|
64
|
+
url: URL,
|
|
65
|
+
recordAsset: boolean | undefined,
|
|
66
|
+
): void {
|
|
67
|
+
if (recordAsset === false) {
|
|
68
|
+
url.searchParams.set("record", "false");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
63
72
|
async function assertOk(res: Response, label: string): Promise<void> {
|
|
64
73
|
if (!res.ok) {
|
|
65
74
|
const body = await res.text().catch(() => "");
|
|
@@ -111,7 +120,10 @@ async function uploadLargeFileViaSignedUrl(
|
|
|
111
120
|
privateKey,
|
|
112
121
|
assetId,
|
|
113
122
|
input.filename,
|
|
114
|
-
{
|
|
123
|
+
{
|
|
124
|
+
skipCompressionWait: input.skipCompressionWait,
|
|
125
|
+
recordAsset: input.recordAsset,
|
|
126
|
+
},
|
|
115
127
|
);
|
|
116
128
|
console.log(`[builder-upload] done [${assetId}]: ${url}`);
|
|
117
129
|
return { url, id, provider: "builder" };
|
|
@@ -165,20 +177,25 @@ async function completeBuilderUpload(
|
|
|
165
177
|
privateKey: string,
|
|
166
178
|
assetId: string,
|
|
167
179
|
filename: string | undefined,
|
|
168
|
-
options?: { skipCompressionWait?: boolean },
|
|
180
|
+
options?: { skipCompressionWait?: boolean; recordAsset?: boolean },
|
|
169
181
|
): Promise<{ url: string; id?: string }> {
|
|
170
182
|
const host = builderUploadHost();
|
|
171
183
|
const url = new URL("/api/v1/upload/complete", host);
|
|
172
184
|
if (options?.skipCompressionWait) {
|
|
173
185
|
setSkipCompressionQueryParams(url);
|
|
174
186
|
}
|
|
187
|
+
setRecordAssetQueryParam(url, options?.recordAsset);
|
|
175
188
|
const res = await fetchWithTimeout(url.toString(), {
|
|
176
189
|
method: "POST",
|
|
177
190
|
headers: {
|
|
178
191
|
Authorization: `Bearer ${privateKey}`,
|
|
179
192
|
"Content-Type": "application/json",
|
|
180
193
|
},
|
|
181
|
-
body: JSON.stringify({
|
|
194
|
+
body: JSON.stringify({
|
|
195
|
+
assetId,
|
|
196
|
+
name: filename,
|
|
197
|
+
...(options?.recordAsset === false ? { record: false } : {}),
|
|
198
|
+
}),
|
|
182
199
|
});
|
|
183
200
|
await assertOk(res, "Builder.io upload complete failed");
|
|
184
201
|
const json = (await res.json()) as { url?: string; id?: string };
|
|
@@ -273,6 +290,7 @@ export const builderFileUploadProvider: FileUploadProvider = {
|
|
|
273
290
|
if (input.skipCompressionWait) {
|
|
274
291
|
setSkipCompressionQueryParams(url);
|
|
275
292
|
}
|
|
293
|
+
setRecordAssetQueryParam(url, input.recordAsset);
|
|
276
294
|
|
|
277
295
|
const response = await uploadSmallFile(url, {
|
|
278
296
|
method: "POST",
|
|
@@ -414,6 +432,9 @@ export const builderFileUploadProvider: FileUploadProvider = {
|
|
|
414
432
|
skipCompressionWait:
|
|
415
433
|
options?.skipCompressionWait ||
|
|
416
434
|
session.meta.skipCompressionWait === true,
|
|
435
|
+
recordAsset:
|
|
436
|
+
options?.recordAsset ??
|
|
437
|
+
(session.meta.recordAsset === false ? false : undefined),
|
|
417
438
|
},
|
|
418
439
|
);
|
|
419
440
|
console.log(`[builder-resumable] upload complete: ${url}`);
|
|
@@ -18,6 +18,8 @@ export interface FileUploadInput {
|
|
|
18
18
|
ownerEmail?: string;
|
|
19
19
|
/** Builder.io upload hint: return after asset registration instead of waiting for server-side compression. */
|
|
20
20
|
skipCompressionWait?: boolean;
|
|
21
|
+
/** Builder.io upload hint: set false for internal artifacts that should not appear in the asset library. */
|
|
22
|
+
recordAsset?: boolean;
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
export interface FileUploadResult {
|
|
@@ -79,7 +81,7 @@ export interface FileUploadProvider {
|
|
|
79
81
|
completeSession(
|
|
80
82
|
session: ResumableUploadSession,
|
|
81
83
|
filename: string,
|
|
82
|
-
options?: { skipCompressionWait?: boolean },
|
|
84
|
+
options?: { skipCompressionWait?: boolean; recordAsset?: boolean },
|
|
83
85
|
): Promise<string>;
|
|
84
86
|
};
|
|
85
87
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import { defineAction } from "../../action.js";
|
|
4
|
+
import {
|
|
5
|
+
assertVersionedResourceAccess,
|
|
6
|
+
getVersionedResource,
|
|
7
|
+
normalizeHistoryVisibility,
|
|
8
|
+
} from "../registry.js";
|
|
9
|
+
import { insertResourceVersion } from "../store.js";
|
|
10
|
+
import type { HistoryActorKind, VersionedResourceContext } from "../types.js";
|
|
11
|
+
|
|
12
|
+
const schema = z.object({
|
|
13
|
+
resourceType: z.string().min(1),
|
|
14
|
+
resourceId: z.string().min(1),
|
|
15
|
+
title: z.string().optional(),
|
|
16
|
+
summary: z.string().optional(),
|
|
17
|
+
snapshot: z.unknown().optional(),
|
|
18
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
export default defineAction({
|
|
22
|
+
description: "Create a reusable version-history snapshot for a resource.",
|
|
23
|
+
schema,
|
|
24
|
+
run: async (args, ctx) => {
|
|
25
|
+
const actionCtx = ctx as VersionedResourceContext | undefined;
|
|
26
|
+
const access = await assertVersionedResourceAccess(
|
|
27
|
+
args.resourceType,
|
|
28
|
+
args.resourceId,
|
|
29
|
+
actionCtx,
|
|
30
|
+
"editor",
|
|
31
|
+
);
|
|
32
|
+
const registration = getVersionedResource(args.resourceType);
|
|
33
|
+
const snapshot =
|
|
34
|
+
args.snapshot !== undefined
|
|
35
|
+
? args.snapshot
|
|
36
|
+
: await registration?.getSnapshot?.({
|
|
37
|
+
resourceType: args.resourceType,
|
|
38
|
+
resourceId: args.resourceId,
|
|
39
|
+
ctx: actionCtx,
|
|
40
|
+
access,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
if (snapshot === undefined) {
|
|
44
|
+
throw new Error(
|
|
45
|
+
`No snapshot was provided and ${args.resourceType} has no getSnapshot history handler`,
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return insertResourceVersion({
|
|
50
|
+
resourceType: args.resourceType,
|
|
51
|
+
resourceId: args.resourceId,
|
|
52
|
+
createdBy: actionCtx?.userEmail ?? null,
|
|
53
|
+
actorKind: actorKindFromContext(actionCtx),
|
|
54
|
+
ownerEmail: access.ownerEmail ?? actionCtx?.userEmail ?? null,
|
|
55
|
+
orgId: access.orgId ?? actionCtx?.orgId ?? null,
|
|
56
|
+
visibility: normalizeHistoryVisibility(access.visibility),
|
|
57
|
+
title: args.title,
|
|
58
|
+
summary: args.summary,
|
|
59
|
+
snapshot,
|
|
60
|
+
metadata: args.metadata,
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
audit: {
|
|
64
|
+
target: (args, result) => {
|
|
65
|
+
const version = result as {
|
|
66
|
+
ownerEmail?: string | null;
|
|
67
|
+
orgId?: string | null;
|
|
68
|
+
visibility?: "private" | "org" | "public";
|
|
69
|
+
};
|
|
70
|
+
return {
|
|
71
|
+
type: args.resourceType,
|
|
72
|
+
id: args.resourceId,
|
|
73
|
+
ownerEmail: version.ownerEmail,
|
|
74
|
+
orgId: version.orgId,
|
|
75
|
+
visibility: version.visibility,
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
function actorKindFromContext(
|
|
82
|
+
ctx: VersionedResourceContext | undefined,
|
|
83
|
+
): HistoryActorKind {
|
|
84
|
+
const caller = typeof ctx?.caller === "string" ? ctx.caller : "";
|
|
85
|
+
if (caller === "agent" || caller === "tool") {
|
|
86
|
+
return "agent";
|
|
87
|
+
}
|
|
88
|
+
return ctx?.userEmail ? "human" : "system";
|
|
89
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import { defineAction } from "../../action.js";
|
|
4
|
+
import { assertVersionedResourceAccess } from "../registry.js";
|
|
5
|
+
import {
|
|
6
|
+
getResourceVersionById,
|
|
7
|
+
getResourceVersionByNumber,
|
|
8
|
+
} from "../store.js";
|
|
9
|
+
import type { VersionedResourceContext } from "../types.js";
|
|
10
|
+
|
|
11
|
+
const schema = z
|
|
12
|
+
.object({
|
|
13
|
+
id: z.string().optional(),
|
|
14
|
+
resourceType: z.string().min(1).optional(),
|
|
15
|
+
resourceId: z.string().min(1).optional(),
|
|
16
|
+
versionNumber: z.number().int().positive().optional(),
|
|
17
|
+
})
|
|
18
|
+
.refine(
|
|
19
|
+
(value) =>
|
|
20
|
+
value.id ||
|
|
21
|
+
(value.resourceType && value.resourceId && value.versionNumber),
|
|
22
|
+
{
|
|
23
|
+
message:
|
|
24
|
+
"Provide either id or resourceType, resourceId, and versionNumber",
|
|
25
|
+
},
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
export default defineAction({
|
|
29
|
+
description: "Read one version-history snapshot for a reusable resource.",
|
|
30
|
+
schema,
|
|
31
|
+
http: { method: "GET" },
|
|
32
|
+
readOnly: true,
|
|
33
|
+
parallelSafe: true,
|
|
34
|
+
run: async (args, ctx) => {
|
|
35
|
+
const actionCtx = ctx as VersionedResourceContext | undefined;
|
|
36
|
+
const scope = {
|
|
37
|
+
userEmail: actionCtx?.userEmail ?? null,
|
|
38
|
+
orgId: actionCtx?.orgId ?? null,
|
|
39
|
+
};
|
|
40
|
+
const version = args.id
|
|
41
|
+
? await getResourceVersionById(args.id, scope, { bypassScope: true })
|
|
42
|
+
: await getResourceVersionByNumber(
|
|
43
|
+
args.resourceType!,
|
|
44
|
+
args.resourceId!,
|
|
45
|
+
args.versionNumber!,
|
|
46
|
+
scope,
|
|
47
|
+
{ bypassScope: true },
|
|
48
|
+
);
|
|
49
|
+
if (!version) {
|
|
50
|
+
throw new Error("Resource version not found");
|
|
51
|
+
}
|
|
52
|
+
await assertVersionedResourceAccess(
|
|
53
|
+
version.resourceType,
|
|
54
|
+
version.resourceId,
|
|
55
|
+
actionCtx,
|
|
56
|
+
"viewer",
|
|
57
|
+
);
|
|
58
|
+
return { version };
|
|
59
|
+
},
|
|
60
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import { defineAction } from "../../action.js";
|
|
4
|
+
import { queryAuditEvents } from "../../audit/store.js";
|
|
5
|
+
import { assertVersionedResourceAccess } from "../registry.js";
|
|
6
|
+
import { queryResourceVersions } from "../store.js";
|
|
7
|
+
import type { VersionedResourceContext } from "../types.js";
|
|
8
|
+
|
|
9
|
+
const schema = z.object({
|
|
10
|
+
resourceType: z.string().min(1),
|
|
11
|
+
resourceId: z.string().min(1),
|
|
12
|
+
limit: z.number().int().positive().max(200).optional(),
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export default defineAction({
|
|
16
|
+
description: "List versions and audit events for a reusable resource.",
|
|
17
|
+
schema,
|
|
18
|
+
http: { method: "GET" },
|
|
19
|
+
readOnly: true,
|
|
20
|
+
parallelSafe: true,
|
|
21
|
+
run: async (args, ctx) => {
|
|
22
|
+
const actionCtx = ctx as VersionedResourceContext | undefined;
|
|
23
|
+
await assertVersionedResourceAccess(
|
|
24
|
+
args.resourceType,
|
|
25
|
+
args.resourceId,
|
|
26
|
+
actionCtx,
|
|
27
|
+
"viewer",
|
|
28
|
+
);
|
|
29
|
+
const scope = {
|
|
30
|
+
userEmail: actionCtx?.userEmail ?? null,
|
|
31
|
+
orgId: actionCtx?.orgId ?? null,
|
|
32
|
+
};
|
|
33
|
+
const auditScope = {
|
|
34
|
+
userEmail: actionCtx?.userEmail ?? undefined,
|
|
35
|
+
orgId: actionCtx?.orgId ?? undefined,
|
|
36
|
+
};
|
|
37
|
+
const [versions, auditEvents] = await Promise.all([
|
|
38
|
+
queryResourceVersions({
|
|
39
|
+
resourceType: args.resourceType,
|
|
40
|
+
resourceId: args.resourceId,
|
|
41
|
+
scope,
|
|
42
|
+
bypassScope: true,
|
|
43
|
+
limit: args.limit,
|
|
44
|
+
}),
|
|
45
|
+
queryAuditEvents(auditScope, {
|
|
46
|
+
targetType: args.resourceType,
|
|
47
|
+
targetId: args.resourceId,
|
|
48
|
+
limit: args.limit ?? 50,
|
|
49
|
+
}),
|
|
50
|
+
]);
|
|
51
|
+
return { versions, auditEvents };
|
|
52
|
+
},
|
|
53
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import { defineAction } from "../../action.js";
|
|
4
|
+
import { assertVersionedResourceAccess } from "../registry.js";
|
|
5
|
+
import { queryResourceVersions } from "../store.js";
|
|
6
|
+
import type { VersionedResourceContext } from "../types.js";
|
|
7
|
+
|
|
8
|
+
const schema = z.object({
|
|
9
|
+
resourceType: z.string().min(1),
|
|
10
|
+
resourceId: z.string().min(1),
|
|
11
|
+
limit: z.number().int().positive().max(200).optional(),
|
|
12
|
+
offset: z.number().int().nonnegative().optional(),
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export default defineAction({
|
|
16
|
+
description: "List version-history snapshots for a reusable resource.",
|
|
17
|
+
schema,
|
|
18
|
+
http: { method: "GET" },
|
|
19
|
+
readOnly: true,
|
|
20
|
+
parallelSafe: true,
|
|
21
|
+
run: async (args, ctx) => {
|
|
22
|
+
const actionCtx = ctx as VersionedResourceContext | undefined;
|
|
23
|
+
await assertVersionedResourceAccess(
|
|
24
|
+
args.resourceType,
|
|
25
|
+
args.resourceId,
|
|
26
|
+
actionCtx,
|
|
27
|
+
"viewer",
|
|
28
|
+
);
|
|
29
|
+
return {
|
|
30
|
+
versions: await queryResourceVersions({
|
|
31
|
+
resourceType: args.resourceType,
|
|
32
|
+
resourceId: args.resourceId,
|
|
33
|
+
scope: {
|
|
34
|
+
userEmail: actionCtx?.userEmail ?? null,
|
|
35
|
+
orgId: actionCtx?.orgId ?? null,
|
|
36
|
+
},
|
|
37
|
+
bypassScope: true,
|
|
38
|
+
limit: args.limit,
|
|
39
|
+
offset: args.offset,
|
|
40
|
+
}),
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
});
|