@agent-native/core 0.106.3 → 0.107.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +23 -0
- package/corpus/core/docs/content/integrations.mdx +597 -0
- package/corpus/core/docs/content/locales/ar-SA/mcp-clients.mdx +19 -1
- package/corpus/core/docs/content/locales/de-DE/mcp-clients.mdx +22 -1
- package/corpus/core/docs/content/locales/es-ES/mcp-clients.mdx +23 -1
- package/corpus/core/docs/content/locales/fr-FR/mcp-clients.mdx +23 -1
- package/corpus/core/docs/content/locales/hi-IN/mcp-clients.mdx +22 -1
- package/corpus/core/docs/content/locales/ja-JP/mcp-clients.mdx +21 -1
- package/corpus/core/docs/content/locales/ko-KR/mcp-clients.mdx +20 -1
- package/corpus/core/docs/content/locales/pt-BR/mcp-clients.mdx +22 -1
- package/corpus/core/docs/content/locales/zh-CN/mcp-clients.mdx +17 -1
- package/corpus/core/docs/content/locales/zh-TW/mcp-clients.mdx +17 -1
- package/corpus/core/docs/content/mcp-clients.mdx +51 -1
- package/corpus/core/docs/content/organizations-teams-permissions.mdx +413 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/production-agent.ts +19 -0
- package/corpus/core/src/agent/run-store.ts +98 -2
- package/corpus/core/src/client/AssistantChat.tsx +26 -1
- package/corpus/core/src/client/CommandMenu.tsx +5 -0
- package/corpus/core/src/client/active-run-state.ts +34 -0
- package/corpus/core/src/client/agent-chat-adapter.ts +4 -0
- package/corpus/core/src/client/chat/message-components.tsx +41 -0
- package/corpus/core/src/client/composer/TiptapComposer.tsx +45 -8
- package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +30 -11
- package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +270 -0
- package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +177 -40
- package/corpus/core/src/client/resources/mcp-integration-catalog.ts +478 -4
- package/corpus/core/src/client/resources/mcp-integration-logos.ts +108 -0
- package/corpus/core/src/client/sharing/ShareButton.tsx +30 -9
- package/corpus/core/src/client/use-agent-chat-home-handoff.ts +2 -2
- package/corpus/core/src/deploy/build.ts +32 -0
- package/corpus/core/src/extensions/html-shell.ts +33 -1
- package/corpus/core/src/ingestion/office.ts +1 -2
- package/corpus/core/src/ingestion/pptx.ts +2 -4
- package/corpus/core/src/localization/default-messages.ts +129 -1
- package/corpus/core/src/mcp/actions/call-mcp-tool.ts +1 -0
- package/corpus/core/src/secrets/register-framework-secrets.ts +28 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +29 -1
- package/corpus/core/src/server/index.ts +4 -0
- package/corpus/core/src/server/org-admin.ts +28 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +9 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/references/api.md +31 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +9 -0
- package/corpus/core/src/vite/client.ts +24 -0
- package/corpus/templates/analytics/.agents/skills/creative-context/SKILL.md +64 -0
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +29 -21
- package/corpus/templates/analytics/AGENTS.md +13 -0
- package/corpus/templates/analytics/actions/clone-creative-context-dashboard.ts +86 -0
- package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +1 -1
- package/corpus/templates/analytics/actions/update-dashboard.ts +6 -2
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +35 -7
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +3 -3
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +1 -0
- package/corpus/templates/analytics/app/i18n-data.ts +1 -0
- package/corpus/templates/analytics/app/pages/Ask.tsx +8 -4
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +11 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/extension-slot.ts +11 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +86 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +6 -0
- package/corpus/templates/analytics/app/routes/agent.tsx +7 -1
- package/corpus/templates/analytics/changelog/2026-07-17-dashboard-extension-boxes.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-library-now-flags-published-dashboards-with-newer-versions-a.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-resources-can-be-added-to-creative-context-from-their-action.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
- package/corpus/templates/analytics/package.json +1 -0
- package/corpus/templates/analytics/server/lib/agent-readable-resource-context.ts +8 -0
- package/corpus/templates/analytics/server/lib/native-creative-context.ts +158 -0
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/analytics/server/plugins/creative-context.ts +10 -0
- package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +12 -3
- package/corpus/templates/assets/AGENTS.md +5 -0
- package/corpus/templates/assets/actions/clone-creative-context-asset.ts +74 -0
- package/corpus/templates/assets/app/hooks/use-navigation-state.ts +2 -1
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +308 -178
- package/corpus/templates/assets/app/routes/library.tsx +5 -11
- package/corpus/templates/assets/changelog/2026-07-17-library-now-flags-published-assets-with-newer-versions-and-l.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
- package/corpus/templates/assets/server/lib/native-creative-context.ts +198 -0
- package/corpus/templates/assets/server/plugins/creative-context.ts +4 -0
- package/corpus/templates/brain/actions/provider-api-request.ts +1 -0
- package/corpus/templates/brain/app/hooks/use-navigation-state.ts +6 -1
- package/corpus/templates/brain/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
- package/corpus/templates/calendar/actions/provider-api-request.ts +1 -0
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +1 -1
- package/corpus/templates/calendar/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
- package/corpus/templates/chat/app/hooks/use-navigation-state.ts +4 -1
- package/corpus/templates/chat/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
- package/corpus/templates/clips/actions/get-recording-insights.ts +7 -4
- package/corpus/templates/clips/actions/list-recordings.ts +48 -0
- package/corpus/templates/clips/actions/list-viewers.ts +2 -1
- package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +3 -1
- package/corpus/templates/clips/app/components/library/library-layout.tsx +1 -1
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +1 -3
- package/corpus/templates/clips/app/hooks/use-desktop-promo.ts +11 -6
- package/corpus/templates/clips/app/hooks/use-view-tracking.ts +6 -1
- package/corpus/templates/clips/app/lib/ffmpeg-export.ts +4 -2
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +21 -3
- package/corpus/templates/clips/changelog/2026-07-17-dictation-keeps-sentence-spacing-and-no-longer-crashes-when-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-17-shared-clips-now-preserve-editor-access-and-show-editor-insi.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-17-stitching-clips-no-longer-fails-when-editor-media-metadata-i.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
- package/corpus/templates/clips/server/routes/api/public-recording.get.ts +14 -8
- package/corpus/templates/clips/shared/view-analytics.ts +4 -0
- package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +12 -3
- package/corpus/templates/content/AGENTS.md +5 -0
- package/corpus/templates/content/actions/_content-space-access.ts +45 -2
- package/corpus/templates/content/actions/clone-creative-context-document.ts +61 -0
- package/corpus/templates/content/actions/create-content-database.ts +41 -7
- package/corpus/templates/content/actions/provider-api-request.ts +1 -0
- package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +21 -0
- package/corpus/templates/content/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +29 -0
- package/corpus/templates/content/app/root.tsx +1 -10
- package/corpus/templates/content/changelog/2026-07-17-creating-a-database-now-completes-reliably-in-hosted-workspa.md +6 -0
- package/corpus/templates/content/changelog/2026-07-17-library-now-flags-published-documents-with-newer-versions-an.md +6 -0
- package/corpus/templates/content/changelog/2026-07-17-resources-can-be-added-to-creative-context-from-their-action.md +6 -0
- package/corpus/templates/content/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
- package/corpus/templates/content/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
- package/corpus/templates/content/parity/matrix.md +1 -1
- package/corpus/templates/content/parity/matrix.ts +1 -0
- package/corpus/templates/content/server/lib/native-creative-context.ts +191 -0
- package/corpus/templates/content/server/plugins/creative-context.ts +8 -1
- package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +11 -3
- package/corpus/templates/design/AGENTS.md +5 -0
- package/corpus/templates/design/actions/clone-creative-context-design-native.ts +111 -0
- package/corpus/templates/design/actions/provider-api-request.ts +1 -0
- package/corpus/templates/design/app/pages/Index.tsx +44 -0
- package/corpus/templates/design/app/pages/design-editor/types.ts +1 -0
- package/corpus/templates/design/changelog/2026-07-17-library-now-flags-published-designs-with-newer-versions-and-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-17-resources-can-be-added-to-creative-context-from-their-action.md +6 -0
- package/corpus/templates/design/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
- package/corpus/templates/design/server/lib/native-creative-context.ts +265 -0
- package/corpus/templates/design/server/plugins/creative-context.ts +8 -1
- package/corpus/templates/dispatch/actions/provider-api-request.ts +1 -0
- package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +4 -1
- package/corpus/templates/dispatch/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
- package/corpus/templates/forms/app/components/layout/Layout.tsx +2 -4
- package/corpus/templates/forms/app/components/ui/popover.tsx +25 -1
- package/corpus/templates/forms/app/hooks/use-navigation-state.ts +6 -1
- package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +13 -10
- package/corpus/templates/forms/app/root.tsx +6 -1
- package/corpus/templates/forms/changelog/2026-07-17-form-builder-popovers-stay-within-the-viewport.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-17-form-editor-loading-matches-current-sidebar-free-layout.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
- package/corpus/templates/mail/actions/provider-api-request.ts +1 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +1 -1
- package/corpus/templates/mail/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +14 -3
- package/corpus/templates/plan/app/hooks/use-navigation-state.ts +8 -1
- package/corpus/templates/plan/app/root.tsx +0 -2
- package/corpus/templates/plan/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
- package/corpus/templates/slides/.agents/skills/creative-context/SKILL.md +11 -3
- package/corpus/templates/slides/AGENTS.md +5 -0
- package/corpus/templates/slides/actions/clone-creative-context-deck.ts +96 -0
- package/corpus/templates/slides/actions/extract-pdf.ts +3 -2
- package/corpus/templates/slides/actions/import-file.ts +3 -2
- package/corpus/templates/slides/actions/provider-api-request.ts +1 -0
- package/corpus/templates/slides/app/components/deck/DeckCard.tsx +27 -0
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +21 -0
- package/corpus/templates/slides/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/slides/app/context/DeckContext.tsx +23 -23
- package/corpus/templates/slides/changelog/2026-07-17-duplicated-slides-now-stay-in-the-deck.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-17-library-now-flags-published-decks-with-newer-versions-and-le.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-17-pdf-and-powerpoint-imports-now-work-reliably-in-hosted-decks.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-17-resources-can-be-added-to-creative-context-from-their-action.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
- package/corpus/templates/slides/server/lib/native-creative-context.ts +288 -0
- package/corpus/templates/slides/server/plugins/creative-context.ts +4 -0
- package/corpus/templates/tasks/app/components/layout/Layout.tsx +2 -13
- package/corpus/templates/tasks/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it.md +6 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +13 -1
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-store.d.ts +17 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +84 -2
- package/dist/agent/run-store.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +18 -3
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +4 -0
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/active-run-state.d.ts +7 -0
- package/dist/client/active-run-state.d.ts.map +1 -1
- package/dist/client/active-run-state.js +28 -0
- package/dist/client/active-run-state.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +4 -1
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +35 -1
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +7 -0
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +37 -8
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.js +3 -2
- package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
- package/dist/client/resources/McpConnectionSuggestion.d.ts +9 -0
- package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -0
- package/dist/client/resources/McpConnectionSuggestion.js +134 -0
- package/dist/client/resources/McpConnectionSuggestion.js.map +1 -0
- package/dist/client/resources/McpIntegrationDialog.d.ts +2 -1
- package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
- package/dist/client/resources/McpIntegrationDialog.js +51 -21
- package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.d.ts +15 -0
- package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.js +420 -4
- package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
- package/dist/client/resources/mcp-integration-logos.d.ts +2 -0
- package/dist/client/resources/mcp-integration-logos.d.ts.map +1 -0
- package/dist/client/resources/mcp-integration-logos.js +109 -0
- package/dist/client/resources/mcp-integration-logos.js.map +1 -0
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +15 -12
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/use-agent-chat-home-handoff.d.ts +1 -1
- package/dist/client/use-agent-chat-home-handoff.d.ts.map +1 -1
- package/dist/client/use-agent-chat-home-handoff.js +1 -1
- package/dist/client/use-agent-chat-home-handoff.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +23 -0
- package/dist/deploy/build.js.map +1 -1
- package/dist/extensions/html-shell.d.ts.map +1 -1
- package/dist/extensions/html-shell.js +33 -1
- package/dist/extensions/html-shell.js.map +1 -1
- package/dist/ingestion/office.d.ts.map +1 -1
- package/dist/ingestion/office.js +1 -2
- package/dist/ingestion/office.js.map +1 -1
- package/dist/ingestion/pptx.js +2 -4
- package/dist/ingestion/pptx.js.map +1 -1
- package/dist/localization/default-messages.d.ts +100 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +101 -1
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp/actions/call-mcp-tool.js +1 -0
- package/dist/mcp/actions/call-mcp-tool.js.map +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/observability/routes.d.ts +5 -5
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
- package/dist/secrets/register-framework-secrets.js +25 -0
- package/dist/secrets/register-framework-secrets.js.map +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +23 -1
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/org-admin.d.ts +3 -0
- package/dist/server/org-admin.d.ts.map +1 -0
- package/dist/server/org-admin.js +24 -0
- package/dist/server/org-admin.js.map +1 -0
- package/dist/templates/chat/app/hooks/use-navigation-state.ts +4 -1
- package/dist/templates/chat/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +9 -0
- package/dist/templates/workspace-core/.agents/skills/extensions/references/api.md +31 -0
- package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +9 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +20 -0
- package/dist/vite/client.js.map +1 -1
- package/docs/content/integrations.mdx +597 -0
- package/docs/content/locales/ar-SA/mcp-clients.mdx +19 -1
- package/docs/content/locales/de-DE/mcp-clients.mdx +22 -1
- package/docs/content/locales/es-ES/mcp-clients.mdx +23 -1
- package/docs/content/locales/fr-FR/mcp-clients.mdx +23 -1
- package/docs/content/locales/hi-IN/mcp-clients.mdx +22 -1
- package/docs/content/locales/ja-JP/mcp-clients.mdx +21 -1
- package/docs/content/locales/ko-KR/mcp-clients.mdx +20 -1
- package/docs/content/locales/pt-BR/mcp-clients.mdx +22 -1
- package/docs/content/locales/zh-CN/mcp-clients.mdx +17 -1
- package/docs/content/locales/zh-TW/mcp-clients.mdx +17 -1
- package/docs/content/mcp-clients.mdx +51 -1
- package/docs/content/organizations-teams-permissions.mdx +413 -0
- package/package.json +1 -1
- package/src/templates/chat/app/hooks/use-navigation-state.ts +4 -1
- package/src/templates/chat/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +9 -0
- package/src/templates/workspace-core/.agents/skills/extensions/references/api.md +31 -0
- package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +9 -0
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
* authenticated `/_agent-native/actions/get-recording-player-data` route.
|
|
7
7
|
*
|
|
8
8
|
* Only returns data when:
|
|
9
|
-
* - recording.visibility === 'public'
|
|
9
|
+
* - recording.visibility === 'public', or the signed-in viewer has org/share access, AND
|
|
10
10
|
* - either no password is set, the viewer is owner, or the provided password matches
|
|
11
11
|
*
|
|
12
|
-
* For `org` or `private` visibility,
|
|
13
|
-
* the
|
|
12
|
+
* For `org` or `private` visibility, signed-in org members and explicit shares
|
|
13
|
+
* may load the same player payload as the authenticated route.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
import {
|
|
@@ -467,11 +467,17 @@ export default defineEventHandler(async (event) => {
|
|
|
467
467
|
placement: c.placement,
|
|
468
468
|
})),
|
|
469
469
|
viewer: session?.email
|
|
470
|
-
? {
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
470
|
+
? (() => {
|
|
471
|
+
const role =
|
|
472
|
+
viewerAccess?.role ?? (viewerIsOrgMember ? "viewer" : null);
|
|
473
|
+
const canEdit =
|
|
474
|
+
role === "owner" || role === "admin" || role === "editor";
|
|
475
|
+
return {
|
|
476
|
+
canEdit,
|
|
477
|
+
isOwner: role === "owner",
|
|
478
|
+
role: role ?? "viewer",
|
|
479
|
+
};
|
|
480
|
+
})()
|
|
475
481
|
: null,
|
|
476
482
|
};
|
|
477
483
|
});
|
|
@@ -35,9 +35,11 @@ role cannot silently stand in for another:
|
|
|
35
35
|
|
|
36
36
|
1. Follow the user's explicit instructions and the object currently selected in
|
|
37
37
|
the app.
|
|
38
|
-
2. Read the `creative-context` application-state record. If
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
2. Read the `creative-context` application-state record. If `pinnedPackId` is
|
|
39
|
+
set, replay that immutable pack. Otherwise honor `selectedContextId`; when it
|
|
40
|
+
is unset, let retrieval use Default plus at most one app-bound or
|
|
41
|
+
semantically matching specialty context. `currentPackId` is the receipt from
|
|
42
|
+
the latest materialized generation, not a replacement for context selection.
|
|
41
43
|
3. Call `search-creative-context` with a narrow query for exact facts, visual
|
|
42
44
|
language, audience guidance, prior decisions, or reusable references.
|
|
43
45
|
4. Call `get-context-item` only for the specific search result versions
|
|
@@ -60,6 +62,7 @@ The single state key is `creative-context`:
|
|
|
60
62
|
```json
|
|
61
63
|
{
|
|
62
64
|
"contextMode": "auto",
|
|
65
|
+
"selectedContextId": null,
|
|
63
66
|
"currentPackId": null,
|
|
64
67
|
"pinnedPackId": null
|
|
65
68
|
}
|
|
@@ -83,3 +86,9 @@ versions may support factual claims. Preserve the returned `contextPackId`
|
|
|
83
86
|
and short reuse labels with the document generation provenance. A published
|
|
84
87
|
brand profile can guide tone automatically; it never overrides the user's
|
|
85
88
|
current brief, and it must not turn an unsupported prior claim into a fact.
|
|
89
|
+
|
|
90
|
+
When an approved app-created document already fits, call
|
|
91
|
+
`clone-creative-context-document` with its exact item and version ids before
|
|
92
|
+
rewriting from excerpts. The typed action resolves the approved private
|
|
93
|
+
Markdown/document payload through Content's normal create path; generic context
|
|
94
|
+
actions never expose that payload.
|
|
@@ -43,6 +43,11 @@ Detailed document editing, Notion, storage, and UI rules live in
|
|
|
43
43
|
document first, then a pinned/current pack, then narrow library search.
|
|
44
44
|
Respect `creative-context.contextMode: "off"` without silently restoring a
|
|
45
45
|
pack.
|
|
46
|
+
- To submit a document to a governed Creative Context, use the Context tab or
|
|
47
|
+
`manage-context-membership`; the app flushes live collaboration and captures
|
|
48
|
+
one immutable Markdown version. Reuse only its opaque native clone reference.
|
|
49
|
+
Use `operation="submit-latest"` with a Library membership id when its native
|
|
50
|
+
update status reports `update-available`.
|
|
46
51
|
|
|
47
52
|
- `navigation` exposes document, selected block, comment, media, and Notion view
|
|
48
53
|
context.
|
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
import { getDbExec } from "@agent-native/core/db";
|
|
2
|
+
import { table, text } from "@agent-native/core/db/schema";
|
|
2
3
|
import { getRequestUserEmail } from "@agent-native/core/server/request-context";
|
|
3
|
-
import { eq } from "drizzle-orm";
|
|
4
|
+
import { and, eq, sql } from "drizzle-orm";
|
|
4
5
|
|
|
5
6
|
import { getDb, schema } from "../server/db/index.js";
|
|
6
7
|
|
|
8
|
+
// Keep these lightweight table references local. Importing the public org
|
|
9
|
+
// barrel also initializes auth's long-lived cleanup timer, which breaks test
|
|
10
|
+
// suites that intentionally drain fake timers.
|
|
11
|
+
const organizations = table("organizations", {
|
|
12
|
+
id: text("id").primaryKey(),
|
|
13
|
+
name: text("name").notNull(),
|
|
14
|
+
createdBy: text("created_by").notNull(),
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const orgMembers = table("org_members", {
|
|
18
|
+
orgId: text("org_id").notNull(),
|
|
19
|
+
email: text("email").notNull(),
|
|
20
|
+
role: text("role").notNull(),
|
|
21
|
+
});
|
|
22
|
+
|
|
7
23
|
export type ContentSpaceRole = "viewer" | "editor" | "owner";
|
|
8
24
|
|
|
9
25
|
export type ContentSpaceAccess = {
|
|
@@ -21,7 +37,32 @@ export function normalizeContentSpaceEmail(email: string): string {
|
|
|
21
37
|
export async function getContentOrganizationMembership(
|
|
22
38
|
orgId: string,
|
|
23
39
|
userEmail: string,
|
|
40
|
+
options: { db?: any } = {},
|
|
24
41
|
): Promise<{ role: string; name: string; createdBy: string } | null> {
|
|
42
|
+
if (options.db) {
|
|
43
|
+
const [row] = await options.db
|
|
44
|
+
.select({
|
|
45
|
+
role: orgMembers.role,
|
|
46
|
+
name: organizations.name,
|
|
47
|
+
createdBy: organizations.createdBy,
|
|
48
|
+
})
|
|
49
|
+
.from(orgMembers)
|
|
50
|
+
.innerJoin(organizations, eq(organizations.id, orgMembers.orgId))
|
|
51
|
+
.where(
|
|
52
|
+
and(
|
|
53
|
+
eq(orgMembers.orgId, orgId),
|
|
54
|
+
sql`LOWER(${orgMembers.email}) = ${normalizeContentSpaceEmail(userEmail)}`,
|
|
55
|
+
),
|
|
56
|
+
)
|
|
57
|
+
.limit(1);
|
|
58
|
+
return row
|
|
59
|
+
? {
|
|
60
|
+
role: String(row.role ?? "member").toLowerCase(),
|
|
61
|
+
name: row.name,
|
|
62
|
+
createdBy: row.createdBy,
|
|
63
|
+
}
|
|
64
|
+
: null;
|
|
65
|
+
}
|
|
25
66
|
const result = await getDbExec().execute({
|
|
26
67
|
sql: `SELECT m.role AS role, o.name AS name, o.created_by AS "createdBy"
|
|
27
68
|
FROM org_members m
|
|
@@ -90,11 +131,12 @@ export async function listContentOrganizationMemberships(userEmail: string) {
|
|
|
90
131
|
export async function resolveContentSpaceAccess(
|
|
91
132
|
spaceId: string,
|
|
92
133
|
requiredRole: "viewer" | "editor" = "viewer",
|
|
134
|
+
options: { db?: any } = {},
|
|
93
135
|
): Promise<ContentSpaceAccess> {
|
|
94
136
|
const userEmail = getRequestUserEmail();
|
|
95
137
|
if (!userEmail) throw new Error("no authenticated user");
|
|
96
138
|
const normalizedUserEmail = normalizeContentSpaceEmail(userEmail);
|
|
97
|
-
const [space] = await getDb()
|
|
139
|
+
const [space] = await (options.db ?? getDb())
|
|
98
140
|
.select()
|
|
99
141
|
.from(schema.contentSpaces)
|
|
100
142
|
.where(eq(schema.contentSpaces.id, spaceId));
|
|
@@ -115,6 +157,7 @@ export async function resolveContentSpaceAccess(
|
|
|
115
157
|
const membership = await getContentOrganizationMembership(
|
|
116
158
|
space.orgId,
|
|
117
159
|
normalizedUserEmail,
|
|
160
|
+
options,
|
|
118
161
|
);
|
|
119
162
|
if (!membership)
|
|
120
163
|
throw new Error(`Not authorized for Content space "${spaceId}"`);
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
|
|
3
|
+
import { defineAction } from "@agent-native/core";
|
|
4
|
+
import {
|
|
5
|
+
readPrivateBlob,
|
|
6
|
+
type PrivateBlobHandle,
|
|
7
|
+
} from "@agent-native/core/private-blob";
|
|
8
|
+
import { resolveNativeContextCloneReference } from "@agent-native/creative-context/server";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
|
|
11
|
+
import createDocument from "./create-document.js";
|
|
12
|
+
|
|
13
|
+
export default defineAction({
|
|
14
|
+
description:
|
|
15
|
+
"Clone one exact governed Markdown document without returning its private source payload.",
|
|
16
|
+
schema: z.object({
|
|
17
|
+
contextId: z.string(),
|
|
18
|
+
artifactKey: z.string(),
|
|
19
|
+
resourceId: z.string(),
|
|
20
|
+
expectedUpdatedAt: z.string().optional(),
|
|
21
|
+
title: z.string().optional(),
|
|
22
|
+
parentId: z.string().optional(),
|
|
23
|
+
}),
|
|
24
|
+
publicAgent: { expose: true, readOnly: false, requiresAuth: true },
|
|
25
|
+
run: async (args) => {
|
|
26
|
+
const reference = await resolveNativeContextCloneReference({
|
|
27
|
+
appId: "content",
|
|
28
|
+
resourceType: "document",
|
|
29
|
+
resourceId: args.resourceId,
|
|
30
|
+
expectedUpdatedAt: args.expectedUpdatedAt,
|
|
31
|
+
contextId: args.contextId,
|
|
32
|
+
artifactKey: args.artifactKey,
|
|
33
|
+
});
|
|
34
|
+
const raw = await readPrivateBlob(
|
|
35
|
+
reference.cloneHandle as PrivateBlobHandle,
|
|
36
|
+
);
|
|
37
|
+
const content = Buffer.from(raw.data).toString("utf8");
|
|
38
|
+
const hash = createHash("sha256").update(content).digest("hex");
|
|
39
|
+
if (
|
|
40
|
+
raw.metadata?.appId !== "content" ||
|
|
41
|
+
raw.metadata?.resourceType !== "document" ||
|
|
42
|
+
raw.metadata?.resourceId !== args.resourceId ||
|
|
43
|
+
raw.metadata?.contentHash !== hash
|
|
44
|
+
)
|
|
45
|
+
throw new Error(
|
|
46
|
+
"Governed document clone payload failed integrity verification.",
|
|
47
|
+
);
|
|
48
|
+
const result = await createDocument.run({
|
|
49
|
+
title: args.title?.trim() || "Context document",
|
|
50
|
+
content,
|
|
51
|
+
...(args.parentId ? { parentId: args.parentId } : {}),
|
|
52
|
+
});
|
|
53
|
+
if (!result?.id) throw new Error("Document clone did not persist.");
|
|
54
|
+
return {
|
|
55
|
+
id: result.id,
|
|
56
|
+
title: result.title,
|
|
57
|
+
urlPath: result.urlPath,
|
|
58
|
+
clonedExactVersion: reference.publishedItemVersionId,
|
|
59
|
+
};
|
|
60
|
+
},
|
|
61
|
+
});
|
|
@@ -5,7 +5,13 @@ import {
|
|
|
5
5
|
getRequestOrgId,
|
|
6
6
|
getRequestUserEmail,
|
|
7
7
|
} from "@agent-native/core/server/request-context";
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
accessFilter,
|
|
10
|
+
assertAccess,
|
|
11
|
+
currentAccess,
|
|
12
|
+
ForbiddenError,
|
|
13
|
+
type ShareRole,
|
|
14
|
+
} from "@agent-native/core/sharing";
|
|
9
15
|
import { and, eq, sql } from "drizzle-orm";
|
|
10
16
|
import { z } from "zod";
|
|
11
17
|
|
|
@@ -158,9 +164,34 @@ export async function resolveContentDatabaseSpace(
|
|
|
158
164
|
return spaceId;
|
|
159
165
|
}
|
|
160
166
|
|
|
167
|
+
async function assertDocumentEditorAccess(db: any, documentId: string) {
|
|
168
|
+
const [document] = await db
|
|
169
|
+
.select()
|
|
170
|
+
.from(schema.documents)
|
|
171
|
+
.where(
|
|
172
|
+
and(
|
|
173
|
+
eq(schema.documents.id, documentId),
|
|
174
|
+
accessFilter(
|
|
175
|
+
schema.documents,
|
|
176
|
+
schema.documentShares,
|
|
177
|
+
currentAccess(),
|
|
178
|
+
"editor",
|
|
179
|
+
),
|
|
180
|
+
),
|
|
181
|
+
);
|
|
182
|
+
if (!document) {
|
|
183
|
+
throw new ForbiddenError(`No editor access to document ${documentId}`);
|
|
184
|
+
}
|
|
185
|
+
return document;
|
|
186
|
+
}
|
|
187
|
+
|
|
161
188
|
export async function createContentDatabaseRecord(
|
|
162
189
|
args: CreateDatabaseRequest,
|
|
163
|
-
options: {
|
|
190
|
+
options: {
|
|
191
|
+
db?: any;
|
|
192
|
+
spaceId?: string;
|
|
193
|
+
resolveSpaceAccess?: typeof resolveContentSpaceAccess;
|
|
194
|
+
} = {},
|
|
164
195
|
): Promise<string> {
|
|
165
196
|
const db = options.db ?? getDb();
|
|
166
197
|
const now = new Date().toISOString();
|
|
@@ -178,8 +209,7 @@ export async function createContentDatabaseRecord(
|
|
|
178
209
|
}> = [];
|
|
179
210
|
|
|
180
211
|
if (documentId) {
|
|
181
|
-
const
|
|
182
|
-
const document = access.resource;
|
|
212
|
+
const document = await assertDocumentEditorAccess(db, documentId);
|
|
183
213
|
ownerEmail = document.ownerEmail as string;
|
|
184
214
|
orgId = (document.orgId as string | null) ?? null;
|
|
185
215
|
spaceId = (document.spaceId as string | null) ?? spaceId;
|
|
@@ -230,8 +260,7 @@ export async function createContentDatabaseRecord(
|
|
|
230
260
|
let hideFromSearch = 0;
|
|
231
261
|
|
|
232
262
|
if (parentId) {
|
|
233
|
-
const
|
|
234
|
-
const parent = parentAccess.resource;
|
|
263
|
+
const parent = await assertDocumentEditorAccess(db, parentId);
|
|
235
264
|
ownerEmail = parent.ownerEmail as string;
|
|
236
265
|
orgId = (parent.orgId as string | null) ?? null;
|
|
237
266
|
spaceId = (parent.spaceId as string | null) ?? spaceId;
|
|
@@ -257,7 +286,12 @@ export async function createContentDatabaseRecord(
|
|
|
257
286
|
"A top-level database requires a resolved Content space",
|
|
258
287
|
);
|
|
259
288
|
}
|
|
260
|
-
const spaceAccess = await
|
|
289
|
+
const spaceAccess = await (
|
|
290
|
+
options.resolveSpaceAccess ?? resolveContentSpaceAccess
|
|
291
|
+
)(spaceId, "editor", { db });
|
|
292
|
+
if (spaceAccess.space.id !== spaceId) {
|
|
293
|
+
throw new Error("Resolved Content space does not match the request");
|
|
294
|
+
}
|
|
261
295
|
ownerEmail = getRequestUserEmail() ?? ownerEmail;
|
|
262
296
|
orgId = spaceAccess.space.orgId;
|
|
263
297
|
visibility = orgId ? "org" : "private";
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
type CollabUser,
|
|
8
8
|
} from "@agent-native/core/client";
|
|
9
9
|
import { ShareButton } from "@agent-native/core/client";
|
|
10
|
+
import { CreativeContextShareTab } from "@agent-native/creative-context/client";
|
|
10
11
|
import type { DocumentSourceInfo } from "@shared/api";
|
|
11
12
|
import {
|
|
12
13
|
IconArrowBarDown,
|
|
@@ -711,6 +712,26 @@ export function DocumentToolbar({
|
|
|
711
712
|
onCheckedChange: handleHideFromSearchChange,
|
|
712
713
|
}}
|
|
713
714
|
variant="compact"
|
|
715
|
+
shareTabs={{
|
|
716
|
+
tabs: [
|
|
717
|
+
{
|
|
718
|
+
value: "context",
|
|
719
|
+
label: "Context",
|
|
720
|
+
content: (
|
|
721
|
+
<CreativeContextShareTab
|
|
722
|
+
resource={{
|
|
723
|
+
appId: "content",
|
|
724
|
+
resourceType: "document",
|
|
725
|
+
resourceId: documentId,
|
|
726
|
+
title: documentTitle || "Untitled",
|
|
727
|
+
updatedAt: documentUpdatedAt ?? undefined,
|
|
728
|
+
preview: { kind: "document", label: "Document" },
|
|
729
|
+
}}
|
|
730
|
+
/>
|
|
731
|
+
),
|
|
732
|
+
},
|
|
733
|
+
],
|
|
734
|
+
}}
|
|
714
735
|
/>
|
|
715
736
|
|
|
716
737
|
<VersionHistoryPanel
|
|
@@ -189,7 +189,7 @@ export function Layout({ children }: LayoutProps) {
|
|
|
189
189
|
)}
|
|
190
190
|
<AgentSidebar
|
|
191
191
|
position="right"
|
|
192
|
-
defaultOpen={
|
|
192
|
+
defaultOpen={false}
|
|
193
193
|
agentPageHref="/agent"
|
|
194
194
|
emptyStateText={t("chat.emptyState")}
|
|
195
195
|
suggestions={[
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useT } from "@agent-native/core/client";
|
|
2
|
+
import { CreativeContextShareSheet } from "@agent-native/creative-context/client";
|
|
2
3
|
import {
|
|
3
4
|
SortableContext,
|
|
4
5
|
useSortable,
|
|
@@ -114,6 +115,7 @@ export function DocumentTreeItem({
|
|
|
114
115
|
const hasMenuActions = canEdit || canManage;
|
|
115
116
|
const canCreateChild = canEdit && !isLocalFileNode;
|
|
116
117
|
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
|
|
118
|
+
const [contextSheetOpen, setContextSheetOpen] = useState(false);
|
|
117
119
|
const indent = depth * 12 + 12;
|
|
118
120
|
const rowWidth =
|
|
119
121
|
sidebarWidth === undefined ? undefined : Math.max(0, sidebarWidth - 8);
|
|
@@ -250,6 +252,18 @@ export function DocumentTreeItem({
|
|
|
250
252
|
</DropdownMenuItem>
|
|
251
253
|
)}
|
|
252
254
|
{canEdit && canManage && <DropdownMenuSeparator />}
|
|
255
|
+
{canEdit && !isLocalFileNode && (
|
|
256
|
+
<DropdownMenuItem
|
|
257
|
+
onSelect={(event) => {
|
|
258
|
+
event.preventDefault();
|
|
259
|
+
event.stopPropagation();
|
|
260
|
+
setContextSheetOpen(true);
|
|
261
|
+
}}
|
|
262
|
+
>
|
|
263
|
+
<IconPlus size={14} className="me-2" />
|
|
264
|
+
{t("creativeContext.addToContext" /* i18n-key-ignore */)}
|
|
265
|
+
</DropdownMenuItem>
|
|
266
|
+
)}
|
|
253
267
|
{canManage && (
|
|
254
268
|
<DropdownMenuItem
|
|
255
269
|
className="text-destructive"
|
|
@@ -310,6 +324,21 @@ export function DocumentTreeItem({
|
|
|
310
324
|
</div>
|
|
311
325
|
</div>
|
|
312
326
|
|
|
327
|
+
<CreativeContextShareSheet
|
|
328
|
+
open={contextSheetOpen}
|
|
329
|
+
onOpenChange={setContextSheetOpen}
|
|
330
|
+
resource={{
|
|
331
|
+
appId: "content",
|
|
332
|
+
resourceType: "document",
|
|
333
|
+
resourceId: node.id,
|
|
334
|
+
title: node.title || "Untitled",
|
|
335
|
+
updatedAt: node.updatedAt,
|
|
336
|
+
visibility: node.visibility,
|
|
337
|
+
preview: { kind: "document", label: "Document" },
|
|
338
|
+
}}
|
|
339
|
+
canManage={canManage}
|
|
340
|
+
/>
|
|
341
|
+
|
|
313
342
|
{hasChildren && expanded && (
|
|
314
343
|
<SortableContext
|
|
315
344
|
items={node.children.map((child) => child.id)}
|
|
@@ -479,15 +479,6 @@ function PublicAgentShell({ children }: { children: React.ReactNode }) {
|
|
|
479
479
|
|
|
480
480
|
useEffect(() => setMounted(true), []);
|
|
481
481
|
|
|
482
|
-
useEffect(() => {
|
|
483
|
-
if (!mounted) return;
|
|
484
|
-
if (!window.matchMedia("(min-width: 768px)").matches) return;
|
|
485
|
-
const id = window.setTimeout(() => {
|
|
486
|
-
window.dispatchEvent(new Event("agent-panel:open"));
|
|
487
|
-
}, 0);
|
|
488
|
-
return () => window.clearTimeout(id);
|
|
489
|
-
}, [mounted]);
|
|
490
|
-
|
|
491
482
|
const content = <>{children}</>;
|
|
492
483
|
|
|
493
484
|
if (!mounted) {
|
|
@@ -503,7 +494,7 @@ function PublicAgentShell({ children }: { children: React.ReactNode }) {
|
|
|
503
494
|
return (
|
|
504
495
|
<AgentSidebar
|
|
505
496
|
position="right"
|
|
506
|
-
defaultOpen
|
|
497
|
+
defaultOpen={false}
|
|
507
498
|
defaultSidebarWidth={420}
|
|
508
499
|
emptyStateText={t("chat.publicEmptyState")}
|
|
509
500
|
suggestions={[
|
|
@@ -20,7 +20,7 @@ This generated matrix tracks whether high-value Content UI operations use the sa
|
|
|
20
20
|
| sharing.document-discoverability-and-export | sharing | Share, hide from search, export, and reveal documents | action-backed | `export-document`, `reveal-local-source-file`, `set-document-discoverability`, `share-local-file-document` | `app/components/editor/DocumentToolbar.tsx`, `app/hooks/use-documents.ts` | Search discoverability, shareable copies, exports, and OS reveal requests are managed through Content actions. | - | - | P0 | covered | `actions/_local-file-documents.test.ts` | `local-file-source-truth` | - |
|
|
21
21
|
| sharing.os-reveal-local-source | sharing | Reveal a local source file in the system file manager | host-only | `reveal-local-source-file` | `app/components/editor/DocumentToolbar.tsx`, `actions/reveal-local-source-file.ts` | - | OS reveal depends on trusted local host capabilities and should not spend agent tool surface or imply portable hosted behavior. | - | P2 | seeded | - | - | Local folder exception/docs PR |
|
|
22
22
|
| sidebar.chrome-state | sidebar | Collapse sections and resize the sidebar | client-only-ephemeral | - | `app/components/sidebar/DocumentSidebar.tsx`, `app/components/layout/Layout.tsx` | - | - | - | P2 | none | - | - | - |
|
|
23
|
-
| sidebar.document-tree-crud | sidebar | Create, delete, move, favorite, list, search, and open pages | action-backed | `create-document`, `delete-document`, `get-document`, `list-documents`, `move-document`, `search-documents`, `update-document`
|
|
23
|
+
| sidebar.document-tree-crud | sidebar | Create, delete, move, favorite, list, search, and open pages | action-backed | `create-document`, `clone-creative-context-document`, `delete-document`, `get-document`, `list-documents`, `move-document`, `search-documents`, `update-document` | `app/components/sidebar/DocumentSidebar.tsx`, `app/components/sidebar/DocumentTreeItem.tsx`, `app/hooks/use-documents.ts` | Document tree rows and document metadata are created, updated, deleted, moved, searched, or read. | - | - | P0 | covered | `actions/content-database-lifecycle.db.test.ts`, `actions/_local-file-documents.test.ts` | `document-search-edit` | - |
|
|
24
24
|
| sidebar.navigation-and-screen-context | sidebar | Navigate between documents and expose current screen context | action-equivalent | `navigate`, `view-screen` | `app/components/sidebar/DocumentSidebar.tsx`, `actions/navigate.ts`, `actions/view-screen.ts` | Application navigation state is updated or read so the agent can reason about the user's current page/view. | Human navigation is router-local, while agent navigation/screen inspection uses application-state actions to produce the same workspace orientation effect. | - | P1 | seeded | - | - | - |
|
|
25
25
|
| source-sync.builder-body-hydration-worker | source-sync | Process queued Builder CMS body hydration work | action-backed | `process-builder-body-hydration` | `app/components/editor/DocumentEditor.tsx`, `app/components/editor/database/DatabaseView.tsx`, `app/hooks/use-content-database.ts` | Queued Builder body hydration entries are processed into readable Content document/database body state. | This action is intentionally hidden from the model with agentTool: false because it is an internal bounded queue worker; agents should use source refresh, review, and execution actions rather than manually driving hydration internals. | - | P0 | covered | `actions/_database-source-utils.test.ts` | - | - |
|
|
26
26
|
| source-sync.builder-cms-review-and-write-gates | source-sync | Review, stage, validate, cancel, and execute Builder CMS source writes | action-backed | `cancel-prepared-builder-source-update`, `execute-builder-source-batch`, `execute-builder-source-execution`, `prepare-builder-source-execution`, `prepare-builder-source-review`, `preview-builder-source-review`, `review-content-database-source-change-set`, `set-content-database-source-write-mode`, `stage-builder-source-bulk-update`, `stage-builder-revision`, `validate-builder-source-execution` | `app/components/editor/DocumentDatabase.tsx`, `app/components/editor/database/DatabaseView.tsx`, `app/components/editor/database-sources/BuilderSourceReviewDialog.tsx` | Builder source write mode, staged reviews, pre-dispatch cancellations, validation records, and bounded execution records are created through guarded actions. | - | - | P0 | covered | `actions/builder-source-review-gates.db.test.ts`, `actions/cancel-prepared-builder-source-update.db.test.ts`, `actions/execute-builder-source-execution.test.ts`, `actions/stage-builder-source-bulk-update.db.test.ts` | `builder-source-review-readonly` | - |
|