@agent-native/core 0.130.2 → 0.131.2
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 +51 -0
- package/corpus/core/docs/content/agent-surfaces.mdx +4 -4
- package/corpus/core/docs/content/automations.mdx +61 -12
- package/corpus/core/docs/content/deployment.mdx +11 -4
- package/corpus/core/docs/content/extensions.mdx +39 -33
- package/corpus/core/docs/content/recurring-jobs.mdx +41 -19
- package/corpus/core/docs/content/template-dispatch-operations.mdx +19 -7
- package/corpus/core/package.json +3 -1
- package/corpus/core/src/action.ts +55 -0
- package/corpus/core/src/agent/engine/builder-engine.ts +8 -4
- package/corpus/core/src/agent/production-agent.ts +175 -100
- package/corpus/core/src/agent/tool-search.ts +36 -0
- package/corpus/core/src/automations/service.ts +506 -0
- package/corpus/core/src/browser-context/index.ts +392 -0
- package/corpus/core/src/client/AgentPanel.tsx +2 -1
- package/corpus/core/src/client/FeedbackButton.tsx +37 -4
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +21 -0
- package/corpus/core/src/client/agent-chat.ts +31 -3
- package/corpus/core/src/client/agent-page/AgentJobsTab.tsx +438 -310
- package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +4 -4
- package/corpus/core/src/client/agent-page/use-jobs.ts +7 -0
- package/corpus/core/src/client/analytics-session.ts +13 -0
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +67 -0
- package/corpus/core/src/client/settings/AutomationsSection.tsx +27 -499
- package/corpus/core/src/client/settings/SettingsPanel.tsx +32 -11
- package/corpus/core/src/client/settings/index.ts +2 -0
- package/corpus/core/src/client/use-agent-chat.ts +35 -3
- package/corpus/core/src/client/use-chat-threads.ts +8 -25
- package/corpus/core/src/deploy/build.ts +2 -0
- package/corpus/core/src/deploy/workspace-deploy.ts +2 -0
- package/corpus/core/src/extensions/actions.ts +115 -3
- package/corpus/core/src/extensions/fetch-tool.ts +11 -0
- package/corpus/core/src/extensions/routes.ts +16 -1
- package/corpus/core/src/extensions/web-content.ts +96 -1
- package/corpus/core/src/integrations/computer-supervision.ts +33 -1
- package/corpus/core/src/integrations/index.ts +6 -0
- package/corpus/core/src/integrations/integration-durable-dispatch-config.ts +10 -0
- package/corpus/core/src/integrations/integration-durable-dispatch.ts +4 -0
- package/corpus/core/src/integrations/plugin.ts +94 -41
- package/corpus/core/src/integrations/remote-browser-actions.ts +621 -0
- package/corpus/core/src/jobs/actions/list-recurring-jobs.ts +5 -7
- package/corpus/core/src/jobs/actions/manage-recurring-job.ts +3 -7
- package/corpus/core/src/jobs/background-automation-runner.ts +437 -0
- package/corpus/core/src/jobs/frontmatter.ts +308 -0
- package/corpus/core/src/jobs/scheduler.ts +89 -598
- package/corpus/core/src/jobs/tools.ts +22 -3
- package/corpus/core/src/localization/default-messages.ts +45 -45
- package/corpus/core/src/mcp-client/index.ts +6 -0
- package/corpus/core/src/notifications/actions.ts +5 -0
- package/corpus/core/src/progress/actions.ts +5 -0
- package/corpus/core/src/provider-api/actions/github-repo-files.ts +11 -0
- package/corpus/core/src/provider-api/actions/provider-api.ts +13 -0
- package/corpus/core/src/server/action-discovery.ts +7 -0
- package/corpus/core/src/server/agent-chat/browser-team-tools.ts +126 -3
- package/corpus/core/src/server/agent-chat/framework-prompts.ts +7 -11
- package/corpus/core/src/server/agent-chat/plugin-options.ts +3 -3
- package/corpus/core/src/server/agent-chat/script-entries.ts +52 -1
- package/corpus/core/src/server/agent-chat-plugin.ts +25 -5
- package/corpus/core/src/server/attribution.ts +22 -0
- package/corpus/core/src/server/auth.ts +20 -6
- package/corpus/core/src/server/better-auth-instance.ts +10 -2
- package/corpus/core/src/server/core-routes-plugin.ts +10 -1
- package/corpus/core/src/server/csrf.ts +25 -0
- package/corpus/core/src/server/google-oauth.ts +21 -1
- package/corpus/core/src/server/onboarding-html.ts +18 -0
- package/corpus/core/src/server/prompts/framework-core-compact.ts +3 -3
- package/corpus/core/src/server/prompts/framework-core.ts +3 -3
- package/corpus/core/src/server/prompts/shared-rules.ts +3 -3
- package/corpus/core/src/settings/index.ts +1 -0
- package/corpus/core/src/shared/analytics-anonymous-id.ts +35 -0
- package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +26 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +28 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +27 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +28 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +28 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +25 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +27 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +27 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +27 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +24 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +24 -0
- package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +10 -7
- package/corpus/core/src/templates/workspace-core/.agents/skills/automations/SKILL.md +53 -8
- package/corpus/core/src/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +131 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +13 -4
- package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +23 -15
- package/corpus/core/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +33 -18
- package/corpus/core/src/tracking/providers.ts +1 -0
- package/corpus/core/src/tracking/registry.ts +2 -1
- package/corpus/core/src/tracking/types.ts +1 -0
- package/corpus/core/src/triggers/actions/list-automations.ts +43 -44
- package/corpus/core/src/triggers/actions/manage-automation.ts +17 -48
- package/corpus/core/src/triggers/actions.ts +218 -127
- package/corpus/core/src/triggers/dispatcher.ts +181 -367
- package/corpus/core/src/triggers/routes.ts +84 -27
- package/corpus/core/src/triggers/types.ts +9 -23
- package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/analytics/actions/install-dashboard-template.ts +13 -4
- package/corpus/templates/analytics/actions/rename-dashboard.ts +8 -3
- package/corpus/templates/analytics/actions/restore-dashboard-revision.ts +8 -3
- package/corpus/templates/analytics/actions/update-dashboard.ts +22 -5
- package/corpus/templates/analytics/app/components/dashboard/DashboardPanelSkeleton.tsx +7 -1
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +1 -82
- package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +4 -4
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +23 -13
- package/corpus/templates/analytics/app/global.css +21 -0
- package/corpus/templates/analytics/app/i18n-data.ts +165 -101
- package/corpus/templates/analytics/app/lib/custom-block-promotion.ts +62 -0
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +17 -2
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +3 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +77 -12
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-save-queue.ts +34 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +42 -26
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +15 -0
- package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +1 -1
- package/corpus/templates/analytics/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-the-dashboard.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-custom-dashboard-blocks-now-identify-one-off-agent-patches-a.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-dashboard-chart-deletions-now-save-in-order-so-removed-rows-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-dashboard-chart-loaders-are-easier-to-see-and-animate-more-s.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-plan-mode-can-now-query-connected-analytics-sources-while-ke.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-plan-mode-can-use-clips-as-read-only-prompt-context.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-29-signup-entry-pages-now-show-the-first-page-viewed-before-eac.md +6 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +26 -1
- package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +0 -33
- package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +13 -3
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +9 -1
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +44 -1
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +96 -16
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +18 -27
- package/corpus/templates/analytics/server/plugins/core-routes.ts +1 -0
- package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +4 -8
- package/corpus/templates/assets/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-the-workspace.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +3 -7
- package/corpus/templates/brain/app/root.tsx +0 -3
- package/corpus/templates/brain/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-ask-brain.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-29-extensions-are-no-longer-shown-as-a-default-command-menu-des.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +25 -5
- package/corpus/templates/calendar/AGENTS.md +5 -0
- package/corpus/templates/calendar/actions/create-event.ts +43 -13
- package/corpus/templates/calendar/actions/event-action-helpers.ts +131 -1
- package/corpus/templates/calendar/actions/manage-event-draft.ts +65 -2
- package/corpus/templates/calendar/app/components/calendar/CreateEventDialog.tsx +437 -258
- package/corpus/templates/calendar/app/components/calendar/DayView.tsx +19 -3
- package/corpus/templates/calendar/app/components/calendar/MonthView.tsx +24 -0
- package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +15 -2
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +1 -5
- package/corpus/templates/calendar/app/hooks/use-events.ts +44 -5
- package/corpus/templates/calendar/app/i18n-data.ts +50 -0
- package/corpus/templates/calendar/app/lib/all-day-layout.ts +9 -2
- package/corpus/templates/calendar/app/lib/event-form-initialization.ts +4 -8
- package/corpus/templates/calendar/app/lib/event-form-utils.ts +30 -8
- package/corpus/templates/calendar/app/lib/location-suggestions.ts +36 -0
- package/corpus/templates/calendar/app/lib/out-of-office.ts +87 -1
- package/corpus/templates/calendar/app/pages/CalendarView.tsx +68 -13
- package/corpus/templates/calendar/changelog/2026-07-26-out-of-office-events-now-default-to-full-days-with-a-ready.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-29-recent-calendar-locations-now-appear-as-address-suggestions-.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/calendar/server/lib/find-time.ts +29 -5
- package/corpus/templates/calendar/shared/api.ts +2 -0
- package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +1 -5
- package/corpus/templates/chat/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/clips/app/components/library/library-layout.tsx +1 -5
- package/corpus/templates/clips/changelog/2026-07-29-fixed-system-audio-recordings-picking-up-your-microphone-in-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-29-the-desktop-camera-preview-now-closes-after-a-recording-fin.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +14 -15
- package/corpus/templates/clips/desktop/src/lib/bubble-session.ts +11 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +9 -4
- package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +11 -0
- package/corpus/templates/clips/server/jobs/transactional-emails.ts +47 -23
- package/corpus/templates/clips/server/lib/transactional-email-store.ts +16 -6
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/content/.agents/skills/content-product-development/SKILL.md +103 -0
- package/corpus/templates/content/.agents/skills/content-product-development/references/verification.md +57 -0
- package/corpus/templates/content/AGENTS.md +2 -0
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -6
- package/corpus/templates/content/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/content/docs/product/README.md +115 -0
- package/corpus/templates/content/docs/product/architecture.md +98 -0
- package/corpus/templates/content/docs/product/capabilities/content.access.page-database.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.access.row-private.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.access.safe-aggregate.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.access.visibility-closure.md +79 -0
- package/corpus/templates/content/docs/product/capabilities/content.action.button.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.action-parity.md +73 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.audience-safe.md +91 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.automation.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.expression-authoring.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.presence.md +103 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.resource-consent.md +90 -0
- package/corpus/templates/content/docs/product/capabilities/content.agent.skill-catalog.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.api.cms.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.author.code.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.author.document-editor.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.author.footnotes.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.author.math.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.author.media.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.author.mermaid.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.automation.scheduled.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.capture.enrich.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.command.fabric.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.comment.page-owned.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.diff.ai-assist.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.diff.filtered-review.md +79 -0
- package/corpus/templates/content/docs/product/capabilities/content.diff.in-place.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.discussion.page.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.embed.host-grant.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.embed.mcp-app.md +69 -0
- package/corpus/templates/content/docs/product/capabilities/content.embed.surface.md +74 -0
- package/corpus/templates/content/docs/product/capabilities/content.event.committed.md +85 -0
- package/corpus/templates/content/docs/product/capabilities/content.expression.cached-result.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.expression.catalog.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.expression.language.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.feedback.signal.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.form.shared-engine.md +72 -0
- package/corpus/templates/content/docs/product/capabilities/content.history.queryable.md +79 -0
- package/corpus/templates/content/docs/product/capabilities/content.home.global.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.job.durable.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.knowledge.graph.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.knowledge.links.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.knowledge.search.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.layout.responsive.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.navigation.sidebar.md +86 -0
- package/corpus/templates/content/docs/product/capabilities/content.notification.source.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.block.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.blocks-field.md +79 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.database.md +92 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.multi-membership.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.page.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.reference.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.object.transclusion.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.organization.teams.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.portability.pdf-export.md +78 -0
- package/corpus/templates/content/docs/product/capabilities/content.portability.roundtrip.md +154 -0
- package/corpus/templates/content/docs/product/capabilities/content.portability.source-representation.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.portability.vault-export.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.presentation.mode.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.preset.catalog.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.property.actor.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.property.catalog.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.property.constraints.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.property.guarded-change.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.property.location.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.property.typed.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.publish.public.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.publish.reading.md +74 -0
- package/corpus/templates/content/docs/product/capabilities/content.query.object.md +114 -0
- package/corpus/templates/content/docs/product/capabilities/content.reader.documents.md +69 -0
- package/corpus/templates/content/docs/product/capabilities/content.reader.surface.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.relationship.edge.md +183 -0
- package/corpus/templates/content/docs/product/capabilities/content.renderer.artifact-block.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.renderer.custom-block.md +81 -0
- package/corpus/templates/content/docs/product/capabilities/content.renderer.graph.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.renderer.typed.md +92 -0
- package/corpus/templates/content/docs/product/capabilities/content.research.annotation.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.research.citation.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.review.code.md +67 -0
- package/corpus/templates/content/docs/product/capabilities/content.revision.suggestions.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.rule.deterministic.md +79 -0
- package/corpus/templates/content/docs/product/capabilities/content.schedule.constraints.md +81 -0
- package/corpus/templates/content/docs/product/capabilities/content.security.private-vault.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.share.views.md +140 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.adapters.md +154 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.builder-codec.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.catalog.md +149 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.file-folder.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.local-bridge.md +156 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.local-project.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.page-link.md +70 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.row-union.md +69 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.spaces-files.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.sync-policy.md +161 -0
- package/corpus/templates/content/docs/product/capabilities/content.system.dependencies.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.system.my-tasks.md +75 -0
- package/corpus/templates/content/docs/product/capabilities/content.system.project-status.md +77 -0
- package/corpus/templates/content/docs/product/capabilities/content.system.research-workspace.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.system.task-project.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.template.governance.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.template.graph.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.template.item-body.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.template.update.md +71 -0
- package/corpus/templates/content/docs/product/capabilities/content.time.types.md +85 -0
- package/corpus/templates/content/docs/product/capabilities/content.version.branching.md +151 -0
- package/corpus/templates/content/docs/product/capabilities/content.version.field-history.md +103 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.canvas.md +94 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.chart.md +91 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.dynamic-create.md +137 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.fast-capture.md +82 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.graph.md +95 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.grouping-aggregation.md +83 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.map.md +77 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.personal-state.md +99 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.pivot.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.query.md +106 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.renderer-conformance.md +77 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.scale.md +77 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.source-query.md +159 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.timeline.md +86 -0
- package/corpus/templates/content/docs/product/capabilities/content.view.tree.md +77 -0
- package/corpus/templates/content/docs/product/capabilities/content.workspace.multi-scope.md +80 -0
- package/corpus/templates/content/docs/product/capabilities/content.workspace.session-restore.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.workspace.view-instance.md +76 -0
- package/corpus/templates/content/docs/product/capabilities/content.workspace.working-set.md +77 -0
- package/corpus/templates/content/docs/product/chapters/content.chapter.capture-research.md +20 -0
- package/corpus/templates/content/docs/product/chapters/content.chapter.connected-sources.md +20 -0
- package/corpus/templates/content/docs/product/chapters/content.chapter.consensus.md +19 -0
- package/corpus/templates/content/docs/product/chapters/content.chapter.durable-home.md +21 -0
- package/corpus/templates/content/docs/product/chapters/content.chapter.publishing-portability.md +21 -0
- package/corpus/templates/content/docs/product/chapters/content.chapter.working-systems.md +27 -0
- package/corpus/templates/content/docs/product/encyclopedia.md +559 -0
- package/corpus/templates/content/docs/product/features/content.feature.bring-your-local-work.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.build-living-dashboards.md +34 -0
- package/corpus/templates/content/docs/product/features/content.feature.build-new-surfaces.md +33 -0
- package/corpus/templates/content/docs/product/features/content.feature.capture-into-action.md +34 -0
- package/corpus/templates/content/docs/product/features/content.feature.cite-what-you-found.md +34 -0
- package/corpus/templates/content/docs/product/features/content.feature.collaborate-in-context.md +59 -0
- package/corpus/templates/content/docs/product/features/content.feature.collect-structured-input.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.connect-your-sources.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.data-that-keeps-itself-right.md +45 -0
- package/corpus/templates/content/docs/product/features/content.feature.durable-foundations.md +48 -0
- package/corpus/templates/content/docs/product/features/content.feature.evolve-systems-safely.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.explore-alternatives-safely.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.find-your-place-again.md +40 -0
- package/corpus/templates/content/docs/product/features/content.feature.keep-your-private-vault-private.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.living-references.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.make-the-workspace-yours.md +40 -0
- package/corpus/templates/content/docs/product/features/content.feature.move-without-starting-over.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.plan-work-across-time.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.publish-with-confidence.md +43 -0
- package/corpus/templates/content/docs/product/features/content.feature.put-your-organizations-know-how-to-work.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.read-and-annotate-anything.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.review-changes-in-place.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.run-projects-your-way.md +44 -0
- package/corpus/templates/content/docs/product/features/content.feature.see-your-information-your-way.md +44 -0
- package/corpus/templates/content/docs/product/features/content.feature.share-how-your-organization-works.md +38 -0
- package/corpus/templates/content/docs/product/features/content.feature.sketch-connections-keep-whats-true.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.take-the-whole-vault-with-you.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.trust-your-connected-sources.md +40 -0
- package/corpus/templates/content/docs/product/features/content.feature.understand-what-your-data-says.md +39 -0
- package/corpus/templates/content/docs/product/features/content.feature.when-this-happens-that-follows.md +43 -0
- package/corpus/templates/content/docs/product/features/content.feature.work-across-every-workspace.md +37 -0
- package/corpus/templates/content/docs/product/features/content.feature.work-on-content-inside-another-application.md +37 -0
- package/corpus/templates/content/docs/product/roadmap.md +878 -0
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +1 -7
- package/corpus/templates/crm/app/i18n/en-US.ts +4 -0
- package/corpus/templates/crm/app/routes/settings.tsx +33 -8
- package/corpus/templates/crm/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +133 -63
- package/corpus/templates/design/.generated/bridge/embedded-wheel.generated.ts +19 -2
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +51 -14
- package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +41 -26
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +22 -4
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +216 -116
- package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +21 -2
- package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +5 -1
- package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbenchLoader.tsx +10 -2
- package/corpus/templates/design/app/components/design/code-workbench/code-workbench-shell.ts +2 -0
- package/corpus/templates/design/app/components/design/code-workbench/explorer/ExplorerView.tsx +60 -55
- package/corpus/templates/design/app/components/design/design-canvas/content-size-report.ts +88 -2
- package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +3 -2
- package/corpus/templates/design/app/components/design/types.ts +4 -0
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +1 -5
- package/corpus/templates/design/app/pages/design-editor/clipboard-layer-source.ts +28 -0
- package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +117 -0
- package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +3 -1
- package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +120 -74
- package/corpus/templates/design/app/pages/design-editor/pending-structure-verification.ts +11 -0
- package/corpus/templates/design/app/pages/design-editor/react-semantic-handoff.ts +2 -0
- package/corpus/templates/design/app/pages/design-editor/source-location.ts +1 -1
- package/corpus/templates/design/changelog/2026-07-29-copy-rendered-ui-between-live-local-apps-and-design-files-wh.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-design-boards-stay-dark-and-viewport-height-content-keeps-it.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-design-frames-no-longer-grow-continuously-when-their-content.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-the-code-panel-and-apply-design-update-control-now-use-clear.md +6 -0
- package/corpus/templates/design/changelog/2026-07-29-the-tools-panel-now-keeps-extension-creation-and-discovery-h.md +6 -0
- package/corpus/templates/design/shared/source-mode.ts +7 -1
- package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +171 -0
- package/corpus/templates/dispatch/app/routes/browser-chat.tsx +4 -0
- package/corpus/templates/dispatch/app/routes/browser-connect.tsx +4 -0
- package/corpus/templates/dispatch/changelog/2026-07-29-browser-chat-can-securely-connect-the-agent-native-chrome-ex.md +6 -0
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +1 -6
- package/corpus/templates/forms/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +1 -5
- package/corpus/templates/macros/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +1 -9
- package/corpus/templates/mail/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +3 -7
- package/corpus/templates/plan/app/pages/PlansPage.tsx +2 -2
- package/corpus/templates/plan/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-ask-plan.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-29-fixed-plan-pages-crashing-when-recent-activity-is-unavailabl.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +60 -4
- package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +20 -0
- package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +30 -1
- package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +3 -1
- package/corpus/templates/slides/AGENTS.md +22 -24
- package/corpus/templates/slides/actions/check-image-gen.ts +8 -2
- package/corpus/templates/slides/actions/create-deck.ts +4 -12
- package/corpus/templates/slides/actions/export-pptx.ts +25 -3
- package/corpus/templates/slides/actions/generate-image-api.ts +4 -2
- package/corpus/templates/slides/actions/generate-slides-ai.ts +1 -1
- package/corpus/templates/slides/actions/get-deck-reference-context.ts +136 -0
- package/corpus/templates/slides/actions/get-workspace-defaults.ts +55 -0
- package/corpus/templates/slides/actions/image-gen-status.ts +10 -1
- package/corpus/templates/slides/actions/import-file.ts +53 -38
- package/corpus/templates/slides/actions/list-decks.ts +2 -0
- package/corpus/templates/slides/actions/patch-deck.ts +2 -0
- package/corpus/templates/slides/actions/set-workspace-defaults.ts +50 -0
- package/corpus/templates/slides/actions/view-screen.ts +6 -0
- package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +1 -1
- package/corpus/templates/slides/app/components/deck/DeckCard.tsx +67 -3
- package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +40 -8
- package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +33 -8
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +6 -2
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +114 -128
- package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +2 -1
- package/corpus/templates/slides/app/components/editor/ImageGenPanel.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +1193 -267
- package/corpus/templates/slides/app/components/editor/SlideStyleInspector.tsx +302 -102
- package/corpus/templates/slides/app/components/editor/rich-text-selection.ts +270 -0
- package/corpus/templates/slides/app/components/editor/slide-escape-arbiter.ts +34 -0
- package/corpus/templates/slides/app/components/editor/slide-object-interactions.ts +368 -0
- package/corpus/templates/slides/app/components/editor/slide-presence.ts +13 -0
- package/corpus/templates/slides/app/components/layout/AgentWorkIndicator.tsx +23 -3
- package/corpus/templates/slides/app/components/layout/Layout.tsx +39 -6
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +1 -6
- package/corpus/templates/slides/app/components/layout/layout-route-policy.ts +23 -0
- package/corpus/templates/slides/app/components/visual-editor/DrawOverlay.tsx +0 -2
- package/corpus/templates/slides/app/context/DeckContext.tsx +2 -0
- package/corpus/templates/slides/app/global.css +60 -0
- package/corpus/templates/slides/app/hooks/use-agent-generating.ts +76 -5
- package/corpus/templates/slides/app/hooks/use-workspace-defaults.ts +26 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +38 -3
- package/corpus/templates/slides/app/lib/generation-state.ts +13 -3
- package/corpus/templates/slides/app/lib/slide-image-replacement.ts +27 -6
- package/corpus/templates/slides/app/lib/text-tool-shortcut.ts +62 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +197 -83
- package/corpus/templates/slides/app/pages/DesignSystems.tsx +95 -0
- package/corpus/templates/slides/app/pages/Index.tsx +348 -53
- package/corpus/templates/slides/changelog/2026-07-28-pick-an-existing-deck-as-a-style-reference-when-creating-a-n.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-ai-editing-status-is-now-quieter-and-only-shows-slide-presen.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-design-systems-and-reference-decks-are-easier-to-choose-toge.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-generated-decks-now-receive-a-concise-relevant-title-before-.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-new-deck-prompts-reuse-empty-chats.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-new-deck-setup-now-stays-in-the-editor-with-closable-style-a.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-selected-words-and-text-runs-can-now-be-styled-independently.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-slide-annotation-tools-are-clearer-and-escape-now-exits-anno.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-slide-editing-now-opens-with-the-app-navigation-collapsed-fo.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-slide-editing-stays-visually-clean-on-hover-without-a-canvas.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-slides-now-appear-one-by-one-while-ai-builds-a-deck-with-ste.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-text-boxes-now-select-move-duplicate-resize-and-style-like-a.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-29-untitled-decks-now-use-a-clearer-this-deck-label-in-the-agen.md +6 -0
- package/corpus/templates/slides/server/handlers/image-providers/builder.ts +305 -0
- package/corpus/templates/slides/server/handlers/image-providers/index.ts +6 -3
- package/corpus/templates/slides/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/slides/server/workspace-defaults.ts +169 -0
- package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/tasks/app/components/layout/Sidebar.tsx +31 -8
- package/corpus/templates/tasks/app/i18n/en-US.ts +7 -0
- package/corpus/templates/tasks/app/routes/settings.tsx +25 -2
- package/corpus/templates/tasks/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/corpus/toolkit/CHANGELOG.md +15 -0
- package/corpus/toolkit/README.md +2 -2
- package/corpus/toolkit/package.json +1 -1
- package/corpus/toolkit/src/app-shell/sidebar-footer-actions.tsx +0 -3
- package/corpus/toolkit/src/chat-history.css +1 -0
- package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +35 -14
- package/corpus/toolkit/src/composer/PromptComposer.tsx +6 -0
- package/corpus/toolkit/src/composer/TiptapComposer.tsx +11 -3
- package/corpus/toolkit/src/design-tweaks/visual-style-controls.tsx +64 -11
- package/dist/action.d.ts +44 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +9 -0
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/builder-engine.js +6 -4
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/production-agent.d.ts +11 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +131 -90
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/tool-search.d.ts +4 -0
- package/dist/agent/tool-search.d.ts.map +1 -1
- package/dist/agent/tool-search.js +30 -0
- package/dist/agent/tool-search.js.map +1 -1
- package/dist/automations/service.d.ts +85 -0
- package/dist/automations/service.d.ts.map +1 -0
- package/dist/automations/service.js +332 -0
- package/dist/automations/service.js.map +1 -0
- package/dist/browser-context/index.d.ts +579 -0
- package/dist/browser-context/index.d.ts.map +1 -0
- package/dist/browser-context/index.js +331 -0
- package/dist/browser-context/index.js.map +1 -0
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +1 -1
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/FeedbackButton.d.ts +6 -2
- package/dist/client/FeedbackButton.d.ts.map +1 -1
- package/dist/client/FeedbackButton.js +20 -3
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +19 -2
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat.d.ts +15 -0
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +13 -3
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/agent-page/AgentJobsTab.d.ts +1 -0
- package/dist/client/agent-page/AgentJobsTab.d.ts.map +1 -1
- package/dist/client/agent-page/AgentJobsTab.js +186 -98
- package/dist/client/agent-page/AgentJobsTab.js.map +1 -1
- package/dist/client/agent-page/AgentTabsPage.js +4 -4
- package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
- package/dist/client/agent-page/use-jobs.d.ts +7 -0
- package/dist/client/agent-page/use-jobs.d.ts.map +1 -1
- package/dist/client/agent-page/use-jobs.js.map +1 -1
- package/dist/client/analytics-session.d.ts.map +1 -1
- package/dist/client/analytics-session.js +13 -0
- package/dist/client/analytics-session.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +29 -6
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/settings/AutomationsSection.d.ts +0 -9
- package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
- package/dist/client/settings/AutomationsSection.js +9 -168
- package/dist/client/settings/AutomationsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts +9 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +19 -11
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- 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/use-agent-chat.d.ts.map +1 -1
- package/dist/client/use-agent-chat.js +20 -3
- package/dist/client/use-agent-chat.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +4 -17
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +2 -1
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/workspace-deploy.d.ts.map +1 -1
- package/dist/deploy/workspace-deploy.js +2 -1
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +82 -6
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/fetch-tool.d.ts.map +1 -1
- package/dist/extensions/fetch-tool.js +11 -0
- package/dist/extensions/fetch-tool.js.map +1 -1
- package/dist/extensions/routes.d.ts +5 -1
- package/dist/extensions/routes.d.ts.map +1 -1
- package/dist/extensions/routes.js +7 -1
- package/dist/extensions/routes.js.map +1 -1
- package/dist/extensions/web-content.d.ts +1 -0
- package/dist/extensions/web-content.d.ts.map +1 -1
- package/dist/extensions/web-content.js +82 -1
- package/dist/extensions/web-content.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/integrations/computer-supervision.d.ts.map +1 -1
- package/dist/integrations/computer-supervision.js +22 -1
- package/dist/integrations/computer-supervision.js.map +1 -1
- package/dist/integrations/index.d.ts +3 -2
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +3 -2
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/integration-durable-dispatch-config.d.ts +2 -0
- package/dist/integrations/integration-durable-dispatch-config.d.ts.map +1 -1
- package/dist/integrations/integration-durable-dispatch-config.js +4 -0
- package/dist/integrations/integration-durable-dispatch-config.js.map +1 -1
- package/dist/integrations/integration-durable-dispatch.d.ts +2 -2
- package/dist/integrations/integration-durable-dispatch.d.ts.map +1 -1
- package/dist/integrations/integration-durable-dispatch.js +2 -2
- package/dist/integrations/integration-durable-dispatch.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +84 -39
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/remote-browser-actions.d.ts +7 -0
- package/dist/integrations/remote-browser-actions.d.ts.map +1 -0
- package/dist/integrations/remote-browser-actions.js +482 -0
- package/dist/integrations/remote-browser-actions.js.map +1 -0
- package/dist/jobs/actions/list-recurring-jobs.d.ts.map +1 -1
- package/dist/jobs/actions/list-recurring-jobs.js +4 -6
- package/dist/jobs/actions/list-recurring-jobs.js.map +1 -1
- package/dist/jobs/actions/manage-recurring-job.js +3 -6
- package/dist/jobs/actions/manage-recurring-job.js.map +1 -1
- package/dist/jobs/background-automation-runner.d.ts +76 -0
- package/dist/jobs/background-automation-runner.d.ts.map +1 -0
- package/dist/jobs/background-automation-runner.js +288 -0
- package/dist/jobs/background-automation-runner.js.map +1 -0
- package/dist/jobs/frontmatter.d.ts +63 -0
- package/dist/jobs/frontmatter.d.ts.map +1 -0
- package/dist/jobs/frontmatter.js +216 -0
- package/dist/jobs/frontmatter.js.map +1 -0
- package/dist/jobs/scheduler.d.ts +6 -60
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +67 -484
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/jobs/tools.d.ts.map +1 -1
- package/dist/jobs/tools.js +24 -3
- package/dist/jobs/tools.js.map +1 -1
- package/dist/localization/default-messages.d.ts +28 -33
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +34 -39
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp-client/index.d.ts.map +1 -1
- package/dist/mcp-client/index.js +4 -0
- package/dist/mcp-client/index.js.map +1 -1
- package/dist/notifications/actions.d.ts.map +1 -1
- package/dist/notifications/actions.js +5 -0
- package/dist/notifications/actions.js.map +1 -1
- package/dist/notifications/routes.d.ts +6 -6
- package/dist/observability/routes.d.ts +3 -3
- package/dist/progress/actions.d.ts.map +1 -1
- package/dist/progress/actions.js +5 -0
- package/dist/progress/actions.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +14 -14
- package/dist/provider-api/actions/github-repo-files.d.ts.map +1 -1
- package/dist/provider-api/actions/github-repo-files.js +9 -0
- package/dist/provider-api/actions/github-repo-files.js.map +1 -1
- package/dist/provider-api/actions/provider-api.d.ts +16 -16
- package/dist/provider-api/actions/provider-api.d.ts.map +1 -1
- package/dist/provider-api/actions/provider-api.js +14 -0
- package/dist/provider-api/actions/provider-api.js.map +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +5 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-chat/browser-team-tools.d.ts.map +1 -1
- package/dist/server/agent-chat/browser-team-tools.js +90 -3
- package/dist/server/agent-chat/browser-team-tools.js.map +1 -1
- package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -1
- package/dist/server/agent-chat/framework-prompts.js +7 -11
- package/dist/server/agent-chat/framework-prompts.js.map +1 -1
- package/dist/server/agent-chat/plugin-options.d.ts +3 -3
- package/dist/server/agent-chat/plugin-options.js.map +1 -1
- package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
- package/dist/server/agent-chat/script-entries.js +43 -1
- package/dist/server/agent-chat/script-entries.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +24 -5
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/attribution.d.ts +6 -0
- package/dist/server/attribution.d.ts.map +1 -1
- package/dist/server/attribution.js +14 -14
- package/dist/server/attribution.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +5 -2
- package/dist/server/auth.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +2 -1
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +6 -3
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +7 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +3 -1
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/csrf.js +25 -0
- package/dist/server/csrf.js.map +1 -1
- package/dist/server/google-oauth.d.ts +3 -0
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +12 -1
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +18 -0
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/prompts/framework-core-compact.js +3 -3
- package/dist/server/prompts/framework-core-compact.js.map +1 -1
- package/dist/server/prompts/framework-core.js +3 -3
- package/dist/server/prompts/framework-core.js.map +1 -1
- package/dist/server/prompts/shared-rules.js +3 -3
- package/dist/server/prompts/shared-rules.js.map +1 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/settings/index.d.ts +1 -1
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +1 -1
- package/dist/settings/index.js.map +1 -1
- package/dist/shared/analytics-anonymous-id.d.ts +12 -0
- package/dist/shared/analytics-anonymous-id.d.ts.map +1 -0
- package/dist/shared/analytics-anonymous-id.js +29 -0
- package/dist/shared/analytics-anonymous-id.js.map +1 -0
- package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/dist/templates/chat/app/components/layout/Sidebar.tsx +1 -5
- package/dist/templates/chat/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/dist/templates/default/app/i18n/ar-SA.ts +26 -0
- package/dist/templates/default/app/i18n/de-DE.ts +28 -0
- package/dist/templates/default/app/i18n/en-US.ts +27 -0
- package/dist/templates/default/app/i18n/es-ES.ts +28 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +28 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +25 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +27 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +27 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +27 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +24 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +24 -0
- package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/agent-page/SKILL.md +10 -7
- package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +53 -8
- package/dist/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +131 -0
- package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +13 -4
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +23 -15
- package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +33 -18
- package/dist/tracking/providers.d.ts.map +1 -1
- package/dist/tracking/providers.js +1 -0
- package/dist/tracking/providers.js.map +1 -1
- package/dist/tracking/registry.d.ts +1 -0
- package/dist/tracking/registry.d.ts.map +1 -1
- package/dist/tracking/registry.js +1 -0
- package/dist/tracking/registry.js.map +1 -1
- package/dist/tracking/types.d.ts +1 -0
- package/dist/tracking/types.d.ts.map +1 -1
- package/dist/tracking/types.js.map +1 -1
- package/dist/triggers/actions/list-automations.d.ts +7 -0
- package/dist/triggers/actions/list-automations.d.ts.map +1 -1
- package/dist/triggers/actions/list-automations.js +29 -41
- package/dist/triggers/actions/list-automations.js.map +1 -1
- package/dist/triggers/actions/manage-automation.js +15 -33
- package/dist/triggers/actions/manage-automation.js.map +1 -1
- package/dist/triggers/actions.d.ts.map +1 -1
- package/dist/triggers/actions.js +184 -95
- package/dist/triggers/actions.js.map +1 -1
- package/dist/triggers/dispatcher.d.ts +3 -9
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +134 -304
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/triggers/routes.d.ts.map +1 -1
- package/dist/triggers/routes.js +76 -17
- package/dist/triggers/routes.js.map +1 -1
- package/dist/triggers/types.d.ts +4 -23
- package/dist/triggers/types.d.ts.map +1 -1
- package/dist/triggers/types.js.map +1 -1
- package/docs/content/agent-surfaces.mdx +4 -4
- package/docs/content/automations.mdx +61 -12
- package/docs/content/deployment.mdx +11 -4
- package/docs/content/extensions.mdx +39 -33
- package/docs/content/recurring-jobs.mdx +41 -19
- package/docs/content/template-dispatch-operations.mdx +19 -7
- package/package.json +4 -2
- package/src/action.ts +55 -0
- package/src/agent/engine/builder-engine.ts +8 -4
- package/src/agent/production-agent.ts +175 -100
- package/src/agent/tool-search.ts +36 -0
- package/src/automations/service.ts +506 -0
- package/src/browser-context/index.ts +392 -0
- package/src/client/AgentPanel.tsx +2 -1
- package/src/client/FeedbackButton.tsx +37 -4
- package/src/client/MultiTabAssistantChat.tsx +21 -0
- package/src/client/agent-chat.ts +31 -3
- package/src/client/agent-page/AgentJobsTab.tsx +438 -310
- package/src/client/agent-page/AgentTabsPage.tsx +4 -4
- package/src/client/agent-page/use-jobs.ts +7 -0
- package/src/client/analytics-session.ts +13 -0
- package/src/client/extensions/ExtensionViewer.tsx +67 -0
- package/src/client/settings/AutomationsSection.tsx +27 -499
- package/src/client/settings/SettingsPanel.tsx +32 -11
- package/src/client/settings/index.ts +2 -0
- package/src/client/use-agent-chat.ts +35 -3
- package/src/client/use-chat-threads.ts +8 -25
- package/src/deploy/build.ts +2 -0
- package/src/deploy/workspace-deploy.ts +2 -0
- package/src/extensions/actions.ts +115 -3
- package/src/extensions/fetch-tool.ts +11 -0
- package/src/extensions/routes.ts +16 -1
- package/src/extensions/web-content.ts +96 -1
- package/src/integrations/computer-supervision.ts +33 -1
- package/src/integrations/index.ts +6 -0
- package/src/integrations/integration-durable-dispatch-config.ts +10 -0
- package/src/integrations/integration-durable-dispatch.ts +4 -0
- package/src/integrations/plugin.ts +94 -41
- package/src/integrations/remote-browser-actions.ts +621 -0
- package/src/jobs/actions/list-recurring-jobs.ts +5 -7
- package/src/jobs/actions/manage-recurring-job.ts +3 -7
- package/src/jobs/background-automation-runner.ts +437 -0
- package/src/jobs/frontmatter.ts +308 -0
- package/src/jobs/scheduler.ts +89 -598
- package/src/jobs/tools.ts +22 -3
- package/src/localization/default-messages.ts +45 -45
- package/src/mcp-client/index.ts +6 -0
- package/src/notifications/actions.ts +5 -0
- package/src/progress/actions.ts +5 -0
- package/src/provider-api/actions/github-repo-files.ts +11 -0
- package/src/provider-api/actions/provider-api.ts +13 -0
- package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +4 -4
- package/src/server/action-discovery.ts +7 -0
- package/src/server/agent-chat/browser-team-tools.ts +126 -3
- package/src/server/agent-chat/framework-prompts.ts +7 -11
- package/src/server/agent-chat/plugin-options.ts +3 -3
- package/src/server/agent-chat/script-entries.ts +52 -1
- package/src/server/agent-chat-plugin.ts +25 -5
- package/src/server/attribution.ts +22 -0
- package/src/server/auth.ts +20 -6
- package/src/server/better-auth-instance.ts +10 -2
- package/src/server/core-routes-plugin.ts +10 -1
- package/src/server/csrf.ts +25 -0
- package/src/server/google-oauth.ts +21 -1
- package/src/server/onboarding-html.ts +18 -0
- package/src/server/prompts/framework-core-compact.ts +3 -3
- package/src/server/prompts/framework-core.ts +3 -3
- package/src/server/prompts/shared-rules.ts +3 -3
- package/src/settings/index.ts +1 -0
- package/src/shared/analytics-anonymous-id.ts +35 -0
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/src/templates/chat/app/components/layout/Sidebar.tsx +1 -5
- package/src/templates/chat/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
- package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/src/templates/default/app/i18n/ar-SA.ts +26 -0
- package/src/templates/default/app/i18n/de-DE.ts +28 -0
- package/src/templates/default/app/i18n/en-US.ts +27 -0
- package/src/templates/default/app/i18n/es-ES.ts +28 -0
- package/src/templates/default/app/i18n/fr-FR.ts +28 -0
- package/src/templates/default/app/i18n/hi-IN.ts +25 -0
- package/src/templates/default/app/i18n/ja-JP.ts +27 -0
- package/src/templates/default/app/i18n/ko-KR.ts +27 -0
- package/src/templates/default/app/i18n/pt-BR.ts +27 -0
- package/src/templates/default/app/i18n/zh-CN.ts +24 -0
- package/src/templates/default/app/i18n/zh-TW.ts +24 -0
- package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +10 -7
- package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +53 -8
- package/src/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +131 -0
- package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +13 -4
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +23 -15
- package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +33 -18
- package/src/tracking/providers.ts +1 -0
- package/src/tracking/registry.ts +2 -1
- package/src/tracking/types.ts +1 -0
- package/src/triggers/actions/list-automations.ts +43 -44
- package/src/triggers/actions/manage-automation.ts +17 -48
- package/src/triggers/actions.ts +218 -127
- package/src/triggers/dispatcher.ts +181 -367
- package/src/triggers/routes.ts +84 -27
- package/src/triggers/types.ts +9 -23
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
record_type: "capability"
|
|
3
|
+
spec_version: 2
|
|
4
|
+
id: "content.property.catalog"
|
|
5
|
+
name: "Custom Properties"
|
|
6
|
+
user_promise: "Reuse an approved field definition deliberately without making same-named local columns secretly equal."
|
|
7
|
+
primary_user_job: "Reuse a governed field and safely update or detach it."
|
|
8
|
+
kind: "primitive"
|
|
9
|
+
state: "exploring"
|
|
10
|
+
publicness: "public"
|
|
11
|
+
availability: "universal"
|
|
12
|
+
dependencies: ["content.property.typed", "content.template.governance"]
|
|
13
|
+
related_features:
|
|
14
|
+
[
|
|
15
|
+
"content.feature.connect-your-sources",
|
|
16
|
+
"content.feature.share-how-your-organization-works",
|
|
17
|
+
"content.feature.evolve-systems-safely",
|
|
18
|
+
]
|
|
19
|
+
roadmap_boundary: "feature"
|
|
20
|
+
acceptance_summary: "Custom Properties are governed, scoped reusable typed definitions with stable identity, description, provenance, query semantics, versioned updates, impact preview, safe migration, and detachable local copies."
|
|
21
|
+
proof_requirements:
|
|
22
|
+
[
|
|
23
|
+
"The add-column picker distinguishes built-in local types, source-backed fields, and personal, workspace, or organization Custom Properties.",
|
|
24
|
+
"A definition's stable identity—not its name—controls query meaning, provenance, and compatible updates.",
|
|
25
|
+
"A consumer may detach to a local field; updates are reviewed and impact-previewed, never silently applied.",
|
|
26
|
+
]
|
|
27
|
+
evidence: []
|
|
28
|
+
superseded_by: null
|
|
29
|
+
last_reviewed: "2026-07-29"
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
# Custom Properties
|
|
33
|
+
|
|
34
|
+
## Why this exists
|
|
35
|
+
|
|
36
|
+
Same-named columns are not shared meaning. Organizations need a way to reuse a field deliberately, understand where it came from, and evolve it without silently rewriting a local database.
|
|
37
|
+
|
|
38
|
+
## Example workflow
|
|
39
|
+
|
|
40
|
+
Marta publishes Customer tier, a database adopts it, previews an enum update, and another database detaches locally while keeping values.
|
|
41
|
+
|
|
42
|
+
## Product contract
|
|
43
|
+
|
|
44
|
+
- The add-column picker distinguishes built-in local types, source-backed fields, and personal, workspace, or organization Custom Properties.
|
|
45
|
+
- A definition's stable identity—not its name—controls query meaning, provenance, and compatible updates.
|
|
46
|
+
- A consumer may detach to a local field; updates are reviewed and impact-previewed, never silently applied.
|
|
47
|
+
|
|
48
|
+
## Boundaries and non-goals
|
|
49
|
+
|
|
50
|
+
- `content.property.typed` owns type semantics and Template governance owns catalog policy; Custom Properties own reusable definition/adoption identity.
|
|
51
|
+
- The catalog does not equate columns by name, make local columns secretly global, or auto-migrate incompatible values.
|
|
52
|
+
|
|
53
|
+
## Acceptance stories
|
|
54
|
+
|
|
55
|
+
### Labels are not identity
|
|
56
|
+
|
|
57
|
+
Given local and organization Status fields, when an author opens Add column, then Add column distinguishes their IDs and origins.
|
|
58
|
+
|
|
59
|
+
### Stage risky migration
|
|
60
|
+
|
|
61
|
+
Given a breaking type/option update, when its owner proposes publication, then Content previews impact and blocks or stages unsafe conversion.
|
|
62
|
+
|
|
63
|
+
## Current evidence
|
|
64
|
+
|
|
65
|
+
`server/plugins/db.ts`, `actions/configure-document-property.ts`, `actions/bind-content-database-source-field.ts`, and `DocumentProperties.tsx` are donors; catalog/adoption/detach/migration do not exist.
|
|
66
|
+
|
|
67
|
+
## Proof plan
|
|
68
|
+
|
|
69
|
+
1. Build scoped Add column discovery with IDs/provenance.
|
|
70
|
+
2. Adopt across databases and test semantics/access.
|
|
71
|
+
3. Publish compatible/breaking versions with impact/migration/receipts.
|
|
72
|
+
4. Detach without losing values.
|
|
73
|
+
|
|
74
|
+
## Open questions
|
|
75
|
+
|
|
76
|
+
Scope names need root judgment.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
record_type: "capability"
|
|
3
|
+
spec_version: 2
|
|
4
|
+
id: "content.property.constraints"
|
|
5
|
+
name: "Property validation and defaults"
|
|
6
|
+
user_promise: "Configure requiredness, defaults, validation, formatting, and edit policy once and trust every write path to enforce them."
|
|
7
|
+
primary_user_job: "Set constraints and defaults every mutation path enforces."
|
|
8
|
+
kind: "primitive"
|
|
9
|
+
state: "approved_shape"
|
|
10
|
+
publicness: "public"
|
|
11
|
+
availability: "universal"
|
|
12
|
+
dependencies: ["content.property.typed", "content.expression.language"]
|
|
13
|
+
related_features:
|
|
14
|
+
[
|
|
15
|
+
"content.feature.data-that-keeps-itself-right",
|
|
16
|
+
"content.feature.collect-structured-input",
|
|
17
|
+
]
|
|
18
|
+
roadmap_boundary: "feature"
|
|
19
|
+
acceptance_summary: "Property configuration validates every mutation atomically; formulas remain live, while defaults evaluate once during a successful creation transaction and become stored values."
|
|
20
|
+
proof_requirements:
|
|
21
|
+
[
|
|
22
|
+
"Constraints, format, requiredness, and edit policy are typed configuration interpreted by the shared mutation boundary.",
|
|
23
|
+
"Defaults evaluate exactly once only after the creation transaction has enough context to succeed; they are not live formulas.",
|
|
24
|
+
"Validation failure returns typed field diagnostics and commits no partial mutation through UI, agent, import, source sync, or API.",
|
|
25
|
+
]
|
|
26
|
+
evidence: []
|
|
27
|
+
superseded_by: null
|
|
28
|
+
last_reviewed: "2026-07-29"
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
# Property validation and defaults
|
|
32
|
+
|
|
33
|
+
## Why this exists
|
|
34
|
+
|
|
35
|
+
A rule that only the form enforces is not a data rule. Authors need defaults and validation to behave predictably whether a record comes from a person, agent, import, or source synchronization.
|
|
36
|
+
|
|
37
|
+
## Example workflow
|
|
38
|
+
|
|
39
|
+
Elena creates a Form row with required Priority and a Due date default; the default stores once while a formula remains live.
|
|
40
|
+
|
|
41
|
+
## Product contract
|
|
42
|
+
|
|
43
|
+
- Constraints, format, requiredness, and edit policy are typed configuration interpreted by the shared mutation boundary.
|
|
44
|
+
- Defaults evaluate exactly once only after the creation transaction has enough context to succeed; they are not live formulas.
|
|
45
|
+
- Validation failure returns typed field diagnostics and commits no partial mutation through UI, agent, import, source sync, or API.
|
|
46
|
+
|
|
47
|
+
## Boundaries and non-goals
|
|
48
|
+
|
|
49
|
+
- Typed Properties own field type and Expressions own live computation; this record owns transaction-time defaults, constraints, format, and edit policy.
|
|
50
|
+
- Defaults are not formulas, and client-side form checks are not a substitute for the shared mutation boundary.
|
|
51
|
+
|
|
52
|
+
## Acceptance stories
|
|
53
|
+
|
|
54
|
+
### Roll back atomically
|
|
55
|
+
|
|
56
|
+
Given an agent changes two fields and one is invalid, when the mutation commits, then neither commits and the failing field is identified.
|
|
57
|
+
|
|
58
|
+
### Do not turn defaults live
|
|
59
|
+
|
|
60
|
+
Given a current-actor default, when the actor later changes, then later actor changes do not rewrite the stored value.
|
|
61
|
+
|
|
62
|
+
## Current evidence
|
|
63
|
+
|
|
64
|
+
`actions/configure-document-property.ts`, `set-document-property.ts`, and lifecycle tests are donors; cross-origin rule semantics are unproved.
|
|
65
|
+
|
|
66
|
+
## Proof plan
|
|
67
|
+
|
|
68
|
+
1. Configure/test via forms, UI, actions, import, and sync.
|
|
69
|
+
2. Verify defaults evaluate once and formulas remain live.
|
|
70
|
+
3. Test invalid multi-field rollback and typed errors.
|
|
71
|
+
4. Exercise denied dependencies and retry.
|
|
72
|
+
|
|
73
|
+
## Open questions
|
|
74
|
+
|
|
75
|
+
Default dependency ordering needs shaping.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
record_type: "capability"
|
|
3
|
+
spec_version: 2
|
|
4
|
+
id: "content.property.guarded-change"
|
|
5
|
+
name: "Guarded property changes"
|
|
6
|
+
user_promise: "Require an explained confirmation or policy check before a sensitive field transition while keeping one general validation engine."
|
|
7
|
+
primary_user_job: "Satisfy a clear shared safeguard before sensitive changes."
|
|
8
|
+
kind: "primitive"
|
|
9
|
+
state: "approved_shape"
|
|
10
|
+
publicness: "public"
|
|
11
|
+
availability: "universal"
|
|
12
|
+
dependencies: ["content.property.constraints", "content.event.committed"]
|
|
13
|
+
related_features:
|
|
14
|
+
[
|
|
15
|
+
"content.feature.trust-your-connected-sources",
|
|
16
|
+
"content.feature.data-that-keeps-itself-right",
|
|
17
|
+
"content.feature.publish-with-confidence",
|
|
18
|
+
]
|
|
19
|
+
roadmap_boundary: "feature"
|
|
20
|
+
acceptance_summary: "Any Property can declare validation and safeguards for sensitive transitions; the shared mutation boundary evaluates them, explains required confirmation or policy failure, and records committed changes normally."
|
|
21
|
+
proof_requirements:
|
|
22
|
+
[
|
|
23
|
+
"Status is a useful UI for a guarded change but is not the exclusive safeguard engine.",
|
|
24
|
+
"UI, agent, automation, source sync, import, and API calls use the same validation and policy boundary.",
|
|
25
|
+
"A blocked transition produces an actionable reason and no partial write; accepted confirmation or policy result is attributable in history.",
|
|
26
|
+
]
|
|
27
|
+
evidence: []
|
|
28
|
+
superseded_by: null
|
|
29
|
+
last_reviewed: "2026-07-29"
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
# Guarded property changes
|
|
33
|
+
|
|
34
|
+
## Why this exists
|
|
35
|
+
|
|
36
|
+
Some values carry consequences that deserve more than an accidental click, yet a special status dialog cannot protect the same change made by automation. People need one explainable safeguard at the mutation boundary.
|
|
37
|
+
|
|
38
|
+
## Example workflow
|
|
39
|
+
|
|
40
|
+
A release manager moves Draft to Published with required confirmation and sees the same policy apply to agent and source-sync changes.
|
|
41
|
+
|
|
42
|
+
## Product contract
|
|
43
|
+
|
|
44
|
+
- Status is a useful UI for a guarded change but is not the exclusive safeguard engine.
|
|
45
|
+
- UI, agent, automation, source sync, import, and API calls use the same validation and policy boundary.
|
|
46
|
+
- A blocked transition produces an actionable reason and no partial write; accepted confirmation or policy result is attributable in history.
|
|
47
|
+
|
|
48
|
+
## Boundaries and non-goals
|
|
49
|
+
|
|
50
|
+
- Constraints own ordinary validity; committed events own attribution/history; guarded change owns the added safeguard decision and explanation.
|
|
51
|
+
- Status is only one useful surface: safeguards are not status-only workflows, a new permission system, or a client-only confirmation.
|
|
52
|
+
|
|
53
|
+
## Acceptance stories
|
|
54
|
+
|
|
55
|
+
### Guard every origin
|
|
56
|
+
|
|
57
|
+
Given source sync attempts a sensitive transition, when it reaches the mutation boundary, then it receives the same decision as UI.
|
|
58
|
+
|
|
59
|
+
### Explain refusal
|
|
60
|
+
|
|
61
|
+
Given confirmation is absent, when an editor requests the transition, then no mutation occurs and the rule/next action are clear.
|
|
62
|
+
|
|
63
|
+
## Current evidence
|
|
64
|
+
|
|
65
|
+
`actions/change-content-database-source-role.ts` and `set-document-property.ts` are donors; general safeguard evaluation is absent.
|
|
66
|
+
|
|
67
|
+
## Proof plan
|
|
68
|
+
|
|
69
|
+
1. Configure safeguards on status, date, relation, and ordinary fields.
|
|
70
|
+
2. Compare UI/action/agent/automation/import/sync decisions.
|
|
71
|
+
3. Test expiry, retry, concurrency, no partial writes.
|
|
72
|
+
4. Verify explanations and actor history.
|
|
73
|
+
|
|
74
|
+
## Open questions
|
|
75
|
+
|
|
76
|
+
Vocabulary and separate-reviewer policy remain open.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
record_type: "capability"
|
|
3
|
+
spec_version: 2
|
|
4
|
+
id: "content.property.location"
|
|
5
|
+
name: "Typed locations"
|
|
6
|
+
user_promise: "Store a place or coordinates as a meaningful location that maps, queries, sources, and export can understand."
|
|
7
|
+
primary_user_job: "Capture a place at known precision for portable use."
|
|
8
|
+
kind: "primitive"
|
|
9
|
+
state: "approved_shape"
|
|
10
|
+
publicness: "public"
|
|
11
|
+
availability: "universal"
|
|
12
|
+
dependencies: ["content.property.typed"]
|
|
13
|
+
related_features: []
|
|
14
|
+
roadmap_boundary: "supporting"
|
|
15
|
+
acceptance_summary: "Location Properties preserve a typed structured place and coordinates with clear precision, display, query, source mapping, and portable export behavior."
|
|
16
|
+
proof_requirements:
|
|
17
|
+
[
|
|
18
|
+
"A location is typed structured data, not a display string or map pin owned by one renderer.",
|
|
19
|
+
"Authors can keep a human place, coordinates, and known precision without fabricating missing geocoding data.",
|
|
20
|
+
"Maps and sources are projections/adapters; access, queries, and export use the canonical value and disclose unsupported fields honestly.",
|
|
21
|
+
]
|
|
22
|
+
evidence: []
|
|
23
|
+
superseded_by: null
|
|
24
|
+
last_reviewed: "2026-07-29"
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Typed locations
|
|
28
|
+
|
|
29
|
+
## Why this exists
|
|
30
|
+
|
|
31
|
+
A place has more meaning than an address string, but false precision is actively misleading. Authors need to preserve what they know about a location while letting maps and exports consume it without inventing details.
|
|
32
|
+
|
|
33
|
+
## Example workflow
|
|
34
|
+
|
|
35
|
+
Nia records a field visit with label, coordinates, and approximate precision; map and nearby query use it while export retains known data.
|
|
36
|
+
|
|
37
|
+
## Product contract
|
|
38
|
+
|
|
39
|
+
- A location is typed structured data, not a display string or map pin owned by one renderer.
|
|
40
|
+
- Authors can keep a human place, coordinates, and known precision without fabricating missing geocoding data.
|
|
41
|
+
- Maps and sources are projections/adapters; access, queries, and export use the canonical value and disclose unsupported fields honestly.
|
|
42
|
+
|
|
43
|
+
## Boundaries and non-goals
|
|
44
|
+
|
|
45
|
+
- Typed Properties own the value contract; map Views and provider adapters consume or map locations without becoming the source of truth.
|
|
46
|
+
- Locations do not imply geocoding, tracking, hidden precision, or an automatic map-provider dependency.
|
|
47
|
+
|
|
48
|
+
## Acceptance stories
|
|
49
|
+
|
|
50
|
+
### Do not invent precision
|
|
51
|
+
|
|
52
|
+
Given a source only provides a city, when Content imports it, then Content keeps city/precision without fabricating coordinates.
|
|
53
|
+
|
|
54
|
+
### Maps are projections
|
|
55
|
+
|
|
56
|
+
Given a renderer fails, when a person opens the Location Property, then the location remains queryable and exportable.
|
|
57
|
+
|
|
58
|
+
## Current evidence
|
|
59
|
+
|
|
60
|
+
`app/components/editor/DocumentProperties.tsx` maps location to `place`; `shared/properties.ts` includes `place`, but no structured location schema exists.
|
|
61
|
+
|
|
62
|
+
## Proof plan
|
|
63
|
+
|
|
64
|
+
1. Author labels/coordinates/precision and serialize them.
|
|
65
|
+
2. Query/render in map and non-map surfaces.
|
|
66
|
+
3. Import partial provider values without invented geocoding.
|
|
67
|
+
4. Export/import with access-aware coordinates.
|
|
68
|
+
|
|
69
|
+
## Open questions
|
|
70
|
+
|
|
71
|
+
Points versus polygons/routes is open.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
record_type: "capability"
|
|
3
|
+
spec_version: 2
|
|
4
|
+
id: "content.property.typed"
|
|
5
|
+
name: "Typed Properties"
|
|
6
|
+
user_promise: "Define stored and computed fields whose values and descriptions stay meaningful in every surface."
|
|
7
|
+
primary_user_job: "Define fields whose types survive every Content operation."
|
|
8
|
+
kind: "primitive"
|
|
9
|
+
state: "in_progress"
|
|
10
|
+
publicness: "public"
|
|
11
|
+
availability: "universal"
|
|
12
|
+
dependencies: []
|
|
13
|
+
related_features: ["content.feature.data-that-keeps-itself-right"]
|
|
14
|
+
roadmap_boundary: "feature"
|
|
15
|
+
acceptance_summary: "Properties declare stable stored or computed types, descriptions, configuration, and renderer contracts so values can be authored, queried, validated, rendered, and exported without ambiguous coercion."
|
|
16
|
+
proof_requirements:
|
|
17
|
+
[
|
|
18
|
+
"Stored values and computed results both declare exact output types; presentation is a renderer choice, not a hidden data conversion.",
|
|
19
|
+
"Descriptions and typed semantics are available to people, agents, queries, validation, and export.",
|
|
20
|
+
"Unknown, invalid, absent, and unreadable values remain distinct.",
|
|
21
|
+
]
|
|
22
|
+
evidence: []
|
|
23
|
+
superseded_by: null
|
|
24
|
+
last_reviewed: "2026-07-29"
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Typed Properties
|
|
28
|
+
|
|
29
|
+
## Why this exists
|
|
30
|
+
|
|
31
|
+
A field label alone cannot tell a database, export, or agent what a value means. Without durable types, dates become text and missing access becomes an innocent blank, quietly corrupting later work.
|
|
32
|
+
|
|
33
|
+
## Example workflow
|
|
34
|
+
|
|
35
|
+
Dara adds a place field, describes it, and sees the same typed value in property panel, database view, and export.
|
|
36
|
+
|
|
37
|
+
## Product contract
|
|
38
|
+
|
|
39
|
+
- Stored values and computed results both declare exact output types; presentation is a renderer choice, not a hidden data conversion.
|
|
40
|
+
- Descriptions and typed semantics are available to people, agents, queries, validation, and export.
|
|
41
|
+
- Unknown, invalid, absent, and unreadable values remain distinct.
|
|
42
|
+
|
|
43
|
+
## Boundaries and non-goals
|
|
44
|
+
|
|
45
|
+
- `content.property.constraints` owns validation/default behavior and `content.expression.language` owns computed semantics; Typed Properties own declared value/output types.
|
|
46
|
+
- A renderer may change presentation but cannot change stored meaning or coerce denied/invalid/absent states into a normal value.
|
|
47
|
+
|
|
48
|
+
## Acceptance stories
|
|
49
|
+
|
|
50
|
+
### Keep computed type
|
|
51
|
+
|
|
52
|
+
Given a date formula, when sorted/rendered/exported, then each consumer gets a declared date.
|
|
53
|
+
|
|
54
|
+
### Do not coerce absence
|
|
55
|
+
|
|
56
|
+
Given unreadable relation and blank text, then renderers keep them distinct.
|
|
57
|
+
|
|
58
|
+
## Current evidence
|
|
59
|
+
|
|
60
|
+
`shared/properties.ts`, `actions/configure-document-property.ts`, and `app/components/editor/DocumentProperties.tsx` are donors; formula output types are not durable general declarations.
|
|
61
|
+
|
|
62
|
+
## Proof plan
|
|
63
|
+
|
|
64
|
+
1. Create/query/render/export stored and computed types.
|
|
65
|
+
2. Propagate descriptions to UI/actions/agents/serialization.
|
|
66
|
+
3. Test absent, invalid, unreadable, unsupported values.
|
|
67
|
+
4. Compare UI/action validation.
|
|
68
|
+
|
|
69
|
+
## Open questions
|
|
70
|
+
|
|
71
|
+
Computed output taxonomy needs root judgment.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
record_type: "capability"
|
|
3
|
+
spec_version: 2
|
|
4
|
+
id: "content.publish.public"
|
|
5
|
+
name: "Public publication"
|
|
6
|
+
user_promise: "Publish one chosen Page revision at a stable public destination while private work continues safely."
|
|
7
|
+
primary_user_job: "Make an approved version public without accidentally publishing draft edits, comments, or private dependencies."
|
|
8
|
+
kind: "workflow"
|
|
9
|
+
state: "approved_shape"
|
|
10
|
+
publicness: "public"
|
|
11
|
+
availability: "configured"
|
|
12
|
+
dependencies:
|
|
13
|
+
[
|
|
14
|
+
"content.access.visibility-closure",
|
|
15
|
+
"content.version.branching",
|
|
16
|
+
"content.renderer.typed",
|
|
17
|
+
]
|
|
18
|
+
related_features: ["content.feature.publish-with-confidence"]
|
|
19
|
+
roadmap_boundary: "feature"
|
|
20
|
+
acceptance_summary: "A Page-first publication object binds a stable destination to one Page, selected Version, and exact revision, previews the actual audience closure, records lifecycle events, and changes only when an authorized publisher explicitly updates or withdraws it."
|
|
21
|
+
proof_requirements:
|
|
22
|
+
[
|
|
23
|
+
"Publication identity, revision binding, lifecycle, URL, and rollback tests",
|
|
24
|
+
"Audience-closure and private-collaboration leakage tests",
|
|
25
|
+
"Publisher preview, publish, private follow-on edit, update, and unpublish interface workflow",
|
|
26
|
+
]
|
|
27
|
+
evidence: []
|
|
28
|
+
superseded_by: null
|
|
29
|
+
last_reviewed: "2026-07-29"
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
# Public publication
|
|
33
|
+
|
|
34
|
+
## Why this exists
|
|
35
|
+
|
|
36
|
+
Public truth deserves a deliberate pin, not whatever happened to be in the editor when the wind changed.
|
|
37
|
+
|
|
38
|
+
## Example workflow
|
|
39
|
+
|
|
40
|
+
An editor previews the approved article revision, publishes it at a stable URL, continues private revision work, then explicitly replaces the public revision after another preview.
|
|
41
|
+
|
|
42
|
+
## Product contract
|
|
43
|
+
|
|
44
|
+
- Publication is Page-first and binds Page identity, selected Version, exact revision, destination, audience closure, and lifecycle history.
|
|
45
|
+
- The stable URL serves the last explicitly published revision; private edits, comments, unpublished Versions, and inaccessible assets do not follow it automatically.
|
|
46
|
+
- Preview evaluates the real audience closure and renderer fallback before publish. Publish, update, and unpublish are explicit guarded actions with actor/origin receipts.
|
|
47
|
+
- Provider publishing remains a separate Source lifecycle action, not a consequence of public Content publication.
|
|
48
|
+
|
|
49
|
+
## Boundaries and non-goals
|
|
50
|
+
|
|
51
|
+
Public reading owns rendering; sharing owns access; provider adapters own external publishing. This does not turn every shared Page into a public publication.
|
|
52
|
+
|
|
53
|
+
## Acceptance stories
|
|
54
|
+
|
|
55
|
+
### Hold a public revision steady
|
|
56
|
+
|
|
57
|
+
Given a published Page and a private draft edit, when the draft changes, then the public URL keeps serving the prior bound revision until an authorized publisher updates it.
|
|
58
|
+
|
|
59
|
+
### Prevent private closure leaks
|
|
60
|
+
|
|
61
|
+
Given the selected revision references a private comment and inaccessible asset, when preview runs, then it identifies their public treatment and publishing does not expose either.
|
|
62
|
+
|
|
63
|
+
## Current evidence
|
|
64
|
+
|
|
65
|
+
Donor evidence: `server/lib/public-documents.ts`, `server/lib/public-documents.spec.ts`, and `app/routes/p.$id.tsx` implement public Page substrate. They do not prove Page/Version/revision publication identity or lifecycle isolation; this record remains `approved_shape`.
|
|
66
|
+
|
|
67
|
+
## Proof plan
|
|
68
|
+
|
|
69
|
+
1. Model publication bindings and guarded lifecycle Actions.
|
|
70
|
+
2. Test revision stability, closure, rollback, update, withdrawal, and provider separation.
|
|
71
|
+
3. Verify preview and full public lifecycle in the browser.
|
|
72
|
+
|
|
73
|
+
## Open questions
|
|
74
|
+
|
|
75
|
+
- Publication scheduling and multiple destinations are future decisions.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
record_type: "capability"
|
|
3
|
+
spec_version: 2
|
|
4
|
+
id: "content.publish.reading"
|
|
5
|
+
name: "Public reading"
|
|
6
|
+
user_promise: "A shareable reading surface faithfully renders the intended public Content truth."
|
|
7
|
+
primary_user_job: "Let readers open a public document quickly and understand the same meaningful content an editor approved."
|
|
8
|
+
kind: "surface"
|
|
9
|
+
state: "in_progress"
|
|
10
|
+
publicness: "public"
|
|
11
|
+
availability: "universal"
|
|
12
|
+
dependencies: ["content.renderer.typed", "content.access.visibility-closure"]
|
|
13
|
+
related_features: ["content.feature.publish-with-confidence"]
|
|
14
|
+
roadmap_boundary: "feature"
|
|
15
|
+
acceptance_summary: "A cache-safe public shell resolves only public reading data, renders supported Content blocks through the shared semantic pipeline with safe fallbacks, and preserves metadata, accessible navigation, embeds, and portable links without personalized SSR."
|
|
16
|
+
proof_requirements:
|
|
17
|
+
[
|
|
18
|
+
"SSR shell, access, cache, metadata, and no-personalization regression tests",
|
|
19
|
+
"Shared renderer fidelity and fallback tests for public blocks, media, and embeds",
|
|
20
|
+
"Browser reading workflow for public, unavailable, and changed-public-content states",
|
|
21
|
+
]
|
|
22
|
+
evidence:
|
|
23
|
+
[
|
|
24
|
+
"../../../app/routes/p.$id.tsx",
|
|
25
|
+
"../../../app/__tests__/public-document-route.test.ts",
|
|
26
|
+
]
|
|
27
|
+
superseded_by: null
|
|
28
|
+
last_reviewed: "2026-07-29"
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
# Public reading
|
|
32
|
+
|
|
33
|
+
## Why this exists
|
|
34
|
+
|
|
35
|
+
Publication needs a reader, not merely a route that happens to return HTML.
|
|
36
|
+
|
|
37
|
+
## Example workflow
|
|
38
|
+
|
|
39
|
+
A visitor opens a public article link, reads a faithful server-rendered shell, uses accessible headings and media fallbacks, and gets an honest unavailable state for a withdrawn page.
|
|
40
|
+
|
|
41
|
+
## Product contract
|
|
42
|
+
|
|
43
|
+
- Public SSR remains one impersonal cacheable shell; personal state and authorization branches happen after load, never by cookie-varying the shell.
|
|
44
|
+
- The reader uses shared semantic rendering and deliberate fallbacks so public reading, export, and editor meaning do not drift gratuitously.
|
|
45
|
+
- Metadata, canonical links, embeds, assets, and accessible navigation reflect the published public closure.
|
|
46
|
+
- Missing, withdrawn, or inaccessible public artifacts are explicit states, not stale content or empty success.
|
|
47
|
+
|
|
48
|
+
## Boundaries and non-goals
|
|
49
|
+
|
|
50
|
+
Publication owns exact revision choice; this owns rendering that choice. It does not make private editor capabilities public or duplicate the Reader surface.
|
|
51
|
+
|
|
52
|
+
## Acceptance stories
|
|
53
|
+
|
|
54
|
+
### Serve a public shell safely
|
|
55
|
+
|
|
56
|
+
Given a public Page, when an anonymous reader opens it, then the server returns public content without a personalized cache branch and the client may add only viewer-local behavior after load.
|
|
57
|
+
|
|
58
|
+
### Handle withdrawal honestly
|
|
59
|
+
|
|
60
|
+
Given a published destination has been withdrawn, when a reader follows its stable URL, then it receives an explicit unavailable page rather than stale prior content.
|
|
61
|
+
|
|
62
|
+
## Current evidence
|
|
63
|
+
|
|
64
|
+
Implementation evidence: `app/routes/p.$id.tsx` and `app/__tests__/public-document-route.test.ts` cover current public route behavior. Donor evidence does not yet prove full renderer fidelity, publication-version integration, or all fallback cases, so this record remains `in_progress`.
|
|
65
|
+
|
|
66
|
+
## Proof plan
|
|
67
|
+
|
|
68
|
+
1. Test public cache-shell and access invariants against all public route paths.
|
|
69
|
+
2. Add renderer fixtures for supported blocks, assets, embeds, and fallbacks.
|
|
70
|
+
3. Browser-test public read, unavailable, and updated-public-revision states.
|
|
71
|
+
|
|
72
|
+
## Open questions
|
|
73
|
+
|
|
74
|
+
- The public reading typography and optional interactive enhancement set remain open.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
record_type: "capability"
|
|
3
|
+
spec_version: 2
|
|
4
|
+
id: "content.query.object"
|
|
5
|
+
name: "Reusable Query objects"
|
|
6
|
+
user_promise: "A one-off inline Query can be promoted into a named reusable Content object that behaves like a dynamic Database without owning its source records"
|
|
7
|
+
primary_user_job: "Define a reusable live collection across one or more authorized inputs without copying or taking ownership of their records."
|
|
8
|
+
kind: "primitive"
|
|
9
|
+
state: "approved_shape"
|
|
10
|
+
publicness: "public"
|
|
11
|
+
availability: "universal"
|
|
12
|
+
dependencies:
|
|
13
|
+
["content.expression.language", "content.access.visibility-closure"]
|
|
14
|
+
related_features:
|
|
15
|
+
[
|
|
16
|
+
"content.feature.make-the-workspace-yours",
|
|
17
|
+
"content.feature.connect-your-sources",
|
|
18
|
+
"content.feature.work-across-every-workspace",
|
|
19
|
+
"content.feature.sketch-connections-keep-whats-true",
|
|
20
|
+
]
|
|
21
|
+
roadmap_boundary: "feature"
|
|
22
|
+
acceptance_summary: "Inline and named Queries derive access-scoped typed collections with stable output contracts, composable inputs, explicit write-through and creation routes, and no ownership of source records."
|
|
23
|
+
proof_requirements:
|
|
24
|
+
[
|
|
25
|
+
"Stable inline/named Query identity, typed AST, variables, output schema, history, reference, embed, and template behavior",
|
|
26
|
+
"Access-first composition of Databases, Sources, and Queries with cycle, scale, stale, and unavailable states",
|
|
27
|
+
"Canonical provenance plus unambiguous field write-through and explicit creation routes",
|
|
28
|
+
"Visual editor and agent manipulation of the same validated typed representation",
|
|
29
|
+
]
|
|
30
|
+
evidence: []
|
|
31
|
+
superseded_by: null
|
|
32
|
+
last_reviewed: "2026-07-29"
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
# Reusable Query objects
|
|
36
|
+
|
|
37
|
+
## Why this exists
|
|
38
|
+
|
|
39
|
+
People often need a live collection whose members come from several places or satisfy reusable conditions. Copying those records into another Database creates stale duplicates and ambiguous ownership. A Query composes the originals while keeping their identity, permissions, and write authority intact.
|
|
40
|
+
|
|
41
|
+
## Example workflow
|
|
42
|
+
|
|
43
|
+
A team combines Blog articles and Resources, aligns each source's title field into one output called `Title`, filters to published material, and renders the result as a List. The inline result can be saved as a named Query, embedded on another Page, and reused by a later Query. Editing an article title writes to that article's canonical owner; the aligned `Title` definition remains Query-owned presentation.
|
|
44
|
+
|
|
45
|
+
## Product contract
|
|
46
|
+
|
|
47
|
+
- A Query derives a typed collection from Databases, approved Sources, other Queries, or access-scoped graph traversal.
|
|
48
|
+
- Its definition may include unions, joins, intrinsic filters, projected fields, aliases, computed fields, output types, variables, documentation, limits, and ordering that is part of the result's meaning.
|
|
49
|
+
- Query filters define the reusable input contract. A View may filter that result further but can never unfilter records the Query excluded.
|
|
50
|
+
- One-off Queries may remain inline in a View or Block. **Save as Query** gives the same typed definition stable identity, title, description, access, history, discoverability, references, embeds, templates, Views, and Query-as-input reuse.
|
|
51
|
+
- A named Query owns its AST, variables, output-field identities, aliases, computed fields, documentation, compatible default renderers, and history.
|
|
52
|
+
- Input Databases and Sources exclusively own canonical records, memberships, schemas, stored values, source permissions, and provider write authority.
|
|
53
|
+
- Every result retains canonical record identity, source provenance, stable field mapping, freshness, access, and write capability.
|
|
54
|
+
- The visual builder and agents manipulate the same validated typed AST. Faux SQL or a typed inspector may help power users, but there is no separate AI-only query language.
|
|
55
|
+
- A Query's complete definition is visible to its readers. It never runs with its owner's authority; each dependency and result is evaluated for the current viewer.
|
|
56
|
+
|
|
57
|
+
## Editing and creation
|
|
58
|
+
|
|
59
|
+
- An ordinary mapped field may write through only when canonical record identity, field mapping, actor permission, source policy, and provider capability are unambiguous.
|
|
60
|
+
- Computed fields, aggregates, lossy alignments, and ambiguous joined fields are read-only.
|
|
61
|
+
- A Query declares zero or more permitted creation routes that end at writable Databases or Sources. A Query never pretends to own new rows.
|
|
62
|
+
- When exactly one route applies, creation proceeds with safe defaults and contextual seeds. When several apply, the View may choose an allowed default or Content asks for a compact destination choice. With no route, the Query is truthfully read-only.
|
|
63
|
+
- Human, agent, automation, and API creation use the same route analysis and committed Action.
|
|
64
|
+
|
|
65
|
+
## Failure and scale behavior
|
|
66
|
+
|
|
67
|
+
- Missing access at any dependency is applied before evaluation. The Query does not borrow owner credentials or leak excluded records through counts, groups, aggregates, errors, or metadata.
|
|
68
|
+
- A required inaccessible, stale, or unavailable dependency produces a typed degraded or Unavailable state according to the Query contract; it is never silently pruned into a plausible partial answer.
|
|
69
|
+
- Query-to-Query composition performs dependency and cycle analysis before save.
|
|
70
|
+
- Pagination, limits, traversal bounds, aggregation bounds, and cancellation prevent one reusable Query from becoming an unbounded background job.
|
|
71
|
+
- A failed write-through or mixed provider outcome remains distinguishable from a successful read-only result.
|
|
72
|
+
|
|
73
|
+
## Boundaries and non-goals
|
|
74
|
+
|
|
75
|
+
- A Database owns a governed writable collection; a Query derives a collection; a View presents and downstream-filters either input.
|
|
76
|
+
- An ordinary Database View does not hide a named Query beneath it. **Create Query from this View** is an explicit builder flow that confirms sources, output schema, variables, and write behavior.
|
|
77
|
+
- Query output aliases never rename source fields, and computed output never becomes stored source data by implication.
|
|
78
|
+
- Saving a Query does not materialize or duplicate its records.
|
|
79
|
+
- A Query is not an access grant. If someone needs a fixed result that recipients may see without source access, they create an explicitly published/materialized snapshot.
|
|
80
|
+
|
|
81
|
+
## Acceptance stories
|
|
82
|
+
|
|
83
|
+
### Promote an inline Query without copying records
|
|
84
|
+
|
|
85
|
+
Given an inline Query over two Databases, when an editor chooses **Save as Query**, then the definition gains stable identity and the original occurrence references it while every result still points to its canonical source record.
|
|
86
|
+
|
|
87
|
+
### Preserve authority during composed writes
|
|
88
|
+
|
|
89
|
+
Given a result with one mapped source field, one computed field, and two possible creation routes, when an editor changes each field and creates a record, then the mapped edit follows its authorized owner, the computed edit is refused, and creation uses an explicit permitted destination rather than guessing.
|
|
90
|
+
|
|
91
|
+
### Re-evaluate for every viewer
|
|
92
|
+
|
|
93
|
+
Given a shared cross-workspace Query whose readers have different source access, when each opens it, then both see the full definition but only their authorized result intersection. Counts, aggregates, and nested Queries reveal no inaccessible records.
|
|
94
|
+
|
|
95
|
+
### Fail honestly on a broken dependency
|
|
96
|
+
|
|
97
|
+
Given a required nested Query becomes unavailable or cyclic, when the parent evaluates, then it reports the typed dependency failure and preserves the saved definition instead of returning a clean-looking partial or empty result.
|
|
98
|
+
|
|
99
|
+
## Current evidence
|
|
100
|
+
|
|
101
|
+
Existing filters, saved Views, source federation, row-union, joined-detail, and write-routing code provide useful donor machinery. They do not yet prove one reusable Query object, a common typed AST, Query-as-source composition, access-first nested evaluation, explicit output contracts, or the complete write/create model. This Capability remains `approved_shape`.
|
|
102
|
+
|
|
103
|
+
## Proof plan
|
|
104
|
+
|
|
105
|
+
1. Build equivalent inline and named Queries through visual controls and agent Actions; compare their typed AST and output schema.
|
|
106
|
+
2. Compose Databases, provider Sources, graph traversal, and nested Queries with aliases, computed fields, variables, joins, unions, limits, and cycle checks.
|
|
107
|
+
3. Verify record/field provenance, mapped writes, read-only derived fields, zero/one/many creation routes, defaults, validation, Events, and retries.
|
|
108
|
+
4. Run every Query under differing Page, Database, Source, row, field, and workspace access and verify access before all computation.
|
|
109
|
+
5. Exercise unavailable, stale, partial-provider, scale-bound, cancellation, and recovery behavior without losing the saved definition.
|
|
110
|
+
6. Link, embed, template, version, export, and reuse the named Query through the real interface and shared Actions.
|
|
111
|
+
|
|
112
|
+
## Open questions
|
|
113
|
+
|
|
114
|
+
The stable `content.view.source-query` ID currently names the cross-source specialization even though it is semantically a Query. Preserve it until a deliberate normalization supplies a replacement ID. The internal common query engine may eventually deserve a private substrate record, but it must not become a fourth user-facing object beside Database, Query, and View.
|