@agent-native/core-corpus 0.221.0-same-host-mcp-20261027-20261027081850 → 0.221.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +1 -1
- package/corpus/templates/analytics/.agents/skills/ab-readout/SKILL.md +19 -0
- package/corpus/templates/analytics/.agents/skills/feedback-ingest/SKILL.md +22 -0
- package/corpus/templates/analytics/.agents/skills/first-touch-radar/SKILL.md +51 -0
- package/corpus/templates/analytics/.agents/skills/fix-brief/SKILL.md +19 -0
- package/corpus/templates/analytics/.agents/skills/metric-watch/SKILL.md +29 -0
- package/corpus/templates/analytics/.agents/skills/replay-triage/SKILL.md +19 -0
- package/corpus/templates/analytics/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/analytics/CHANGELOG.md +38 -0
- package/corpus/templates/analytics/actions/set-index-schedule.ts +10 -1
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +36 -10
- package/corpus/templates/analytics/changelog/2026-10-22-approval-links-from-a-connected-agent-such-as-claude-code-no.md +6 -0
- package/corpus/templates/analytics/changelog/2026-10-23-external-agents-need-approval-before-changing-recurring-inde.md +6 -0
- package/corpus/templates/analytics/package.json +5 -0
- package/corpus/templates/analytics/scripts/radar/ab.ts +688 -0
- package/corpus/templates/analytics/scripts/radar/campaign.ts +318 -0
- package/corpus/templates/analytics/scripts/radar/checks.ts +325 -0
- package/corpus/templates/analytics/scripts/radar/event-labels.ts +39 -0
- package/corpus/templates/analytics/scripts/radar/linked-events-sql.ts +197 -0
- package/corpus/templates/analytics/scripts/radar/query.ts +1630 -0
- package/corpus/templates/analytics/scripts/radar/report.ts +674 -0
- package/corpus/templates/analytics/scripts/radar/sql.ts +873 -0
- package/corpus/templates/analytics/scripts/radar/triage.ts +301 -0
- package/corpus/templates/analytics/scripts/radar/warehouse-sql.ts +474 -0
- package/corpus/templates/analytics/scripts/radar/watch.ts +1584 -0
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -1
- package/corpus/templates/analytics/shared/table-columns.ts +129 -21
- package/corpus/templates/assets/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/assets/CHANGELOG.md +12 -0
- package/corpus/templates/assets/changelog/2026-10-22-approval-links-from-a-connected-agent-such-as-claude-code-no.md +6 -0
- package/corpus/templates/assets/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/brain/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/brain/server/lib/connectors.ts +140 -89
- package/corpus/templates/brain/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/brain/server/plugins/brain-jobs.ts +10 -1
- package/corpus/templates/calendar/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/calendar/CHANGELOG.md +24 -0
- package/corpus/templates/calendar/actions/get-event-rules-status.ts +17 -6
- package/corpus/templates/calendar/actions/update-settings.ts +11 -10
- package/corpus/templates/calendar/app/i18n/en-US.ts +5 -4
- package/corpus/templates/calendar/app/pages/settings/CalendarEventRules.tsx +9 -5
- package/corpus/templates/calendar/changelog/2026-10-22-approval-links-from-a-connected-agent-such-as-claude-code-no.md +6 -0
- package/corpus/templates/calendar/changelog/2026-10-26-calendar-rules-can-use-openai.md +6 -0
- package/corpus/templates/calendar/changelog/2026-10-27-calendar-keeps-successful-invitation-rules-applied-while-ano.md +6 -0
- package/corpus/templates/calendar/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/calendar/server/plugins/event-rules.ts +169 -90
- package/corpus/templates/chat/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/chat/app/components/chat/ChatRouteContent.tsx +18 -4
- package/corpus/templates/chat/app/components/home/HomePage.tsx +28 -69
- package/corpus/templates/chat/app/components/layout/Layout.tsx +46 -14
- package/corpus/templates/chat/app/i18n/en-US.ts +0 -4
- package/corpus/templates/chat/app/lib/chat-paths.ts +36 -13
- package/corpus/templates/chat/package.json +1 -0
- package/corpus/templates/chat/server/plugins/agent-chat.ts +2 -1
- package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +2 -0
- package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +18 -0
- package/corpus/templates/clips/CHANGELOG.md +62 -70
- package/corpus/templates/clips/actions/add-comment.ts +2 -11
- package/corpus/templates/clips/actions/add-recording-to-space.ts +4 -1
- package/corpus/templates/clips/actions/archive-recording.ts +4 -1
- package/corpus/templates/clips/actions/burn-recording-redactions.ts +48 -15
- package/corpus/templates/clips/actions/clear-edits.ts +4 -1
- package/corpus/templates/clips/actions/complete-workflow.ts +4 -1
- package/corpus/templates/clips/actions/create-cta.ts +4 -1
- package/corpus/templates/clips/actions/create-recording-upload.ts +20 -69
- package/corpus/templates/clips/actions/delete-agent-recording-if-unpromoted.ts +2 -1
- package/corpus/templates/clips/actions/delete-comment.ts +14 -2
- package/corpus/templates/clips/actions/delete-cta.ts +4 -1
- package/corpus/templates/clips/actions/delete-recording-permanent.ts +39 -2
- package/corpus/templates/clips/actions/export-insights-csv.ts +9 -2
- package/corpus/templates/clips/actions/export-to-brain.ts +3 -4
- package/corpus/templates/clips/actions/finalize-meeting.ts +45 -24
- package/corpus/templates/clips/actions/generate-workflow.ts +8 -2
- package/corpus/templates/clips/actions/get-meeting-capture-state.ts +30 -0
- package/corpus/templates/clips/actions/get-meeting.ts +6 -16
- package/corpus/templates/clips/actions/get-organization-insights.ts +8 -1
- package/corpus/templates/clips/actions/get-recording-app-activity.ts +4 -1
- package/corpus/templates/clips/actions/get-recording-insights.ts +4 -1
- package/corpus/templates/clips/actions/get-recording-player-data.ts +21 -8
- package/corpus/templates/clips/actions/import-transcript.ts +13 -2
- package/corpus/templates/clips/actions/lib/ai-request-status.ts +5 -0
- package/corpus/templates/clips/actions/lib/save-chapters.ts +4 -1
- package/corpus/templates/clips/actions/list-ai-requests.ts +23 -2
- package/corpus/templates/clips/actions/list-clip-views.ts +4 -1
- package/corpus/templates/clips/actions/list-comments.ts +2 -11
- package/corpus/templates/clips/actions/list-notifications.ts +29 -13
- package/corpus/templates/clips/actions/list-organization-state.ts +5 -0
- package/corpus/templates/clips/actions/list-recordings.ts +38 -5
- package/corpus/templates/clips/actions/list-transactional-email-ai-requests.ts +12 -1
- package/corpus/templates/clips/actions/list-viewers.ts +4 -1
- package/corpus/templates/clips/actions/move-recording.ts +2 -1
- package/corpus/templates/clips/actions/navigate.ts +1 -0
- package/corpus/templates/clips/actions/react-to-comment.ts +2 -2
- package/corpus/templates/clips/actions/react-to-recording.ts +4 -1
- package/corpus/templates/clips/actions/reconcile-workflow-generation.ts +318 -21
- package/corpus/templates/clips/actions/record-first-run-builder-credits-v2-exposure.ts +63 -0
- package/corpus/templates/clips/actions/regenerate-chapters.ts +4 -1
- package/corpus/templates/clips/actions/regenerate-summary.ts +8 -1
- package/corpus/templates/clips/actions/regenerate-title.ts +12 -2
- package/corpus/templates/clips/actions/remove-filler-words.ts +4 -1
- package/corpus/templates/clips/actions/remove-silences.ts +4 -1
- package/corpus/templates/clips/actions/reply-to-comment.ts +5 -64
- package/corpus/templates/clips/actions/request-transcript.ts +19 -5
- package/corpus/templates/clips/actions/resolve-comment.ts +2 -14
- package/corpus/templates/clips/actions/restore-recording.ts +4 -1
- package/corpus/templates/clips/actions/restore-transcript-version.ts +14 -2
- package/corpus/templates/clips/actions/save-browser-diagnostics.ts +4 -1
- package/corpus/templates/clips/actions/save-browser-transcript.ts +14 -2
- package/corpus/templates/clips/actions/save-bug-report-context.ts +4 -1
- package/corpus/templates/clips/actions/save-recording-app-activity.ts +4 -1
- package/corpus/templates/clips/actions/save-screenshot-edits.ts +28 -15
- package/corpus/templates/clips/actions/search-meetings.ts +8 -2
- package/corpus/templates/clips/actions/search-recordings.ts +29 -7
- package/corpus/templates/clips/actions/set-recording-overlays.ts +4 -1
- package/corpus/templates/clips/actions/set-recording-trims.ts +4 -1
- package/corpus/templates/clips/actions/set-thumbnail.ts +12 -1
- package/corpus/templates/clips/actions/split-recording.ts +4 -1
- package/corpus/templates/clips/actions/start-meeting-recording.ts +23 -4
- package/corpus/templates/clips/actions/stop-meeting-recording.ts +1 -0
- package/corpus/templates/clips/actions/tag-recording.ts +4 -1
- package/corpus/templates/clips/actions/trash-recording.ts +4 -1
- package/corpus/templates/clips/actions/trim-recording.ts +4 -1
- package/corpus/templates/clips/actions/undo-edit.ts +4 -1
- package/corpus/templates/clips/actions/update-comment.ts +3 -15
- package/corpus/templates/clips/actions/update-cta.ts +4 -1
- package/corpus/templates/clips/actions/update-recording.ts +20 -3
- package/corpus/templates/clips/actions/view-screen.ts +62 -29
- package/corpus/templates/clips/app/components/library/empty-state.tsx +4 -0
- package/corpus/templates/clips/app/components/library/library-grid.tsx +16 -2
- package/corpus/templates/clips/app/components/library/library-layout.tsx +20 -1
- package/corpus/templates/clips/app/components/library/recording-card.tsx +24 -0
- package/corpus/templates/clips/app/components/player/comments-panel.tsx +25 -12
- package/corpus/templates/clips/app/hooks/use-auto-title.ts +29 -18
- package/corpus/templates/clips/app/hooks/use-library.ts +10 -1
- package/corpus/templates/clips/app/hooks/use-navigation-state.ts +4 -0
- package/corpus/templates/clips/app/i18n/en-US.ts +11 -0
- package/corpus/templates/clips/app/routes/_app.from-content.tsx +19 -0
- package/corpus/templates/clips/app/routes/_app.r.$recordingId.tsx +469 -33
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +13 -29
- package/corpus/templates/clips/app/routes/share.meeting.$meetingId.tsx +6 -18
- package/corpus/templates/clips/changelog/2026-10-21-meeting-notes-check-sooner-when-a-meeting-ends-on-the-web-an.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-22-approval-links-from-a-connected-agent-such-as-claude-code-no.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-22-recording-sharing-and-discussion-settings-apply-consistently.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-22-turning-comments-off-hides-saved-comments-from-viewers-while.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-23-video-playback-respects-clip-availability.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-26-agents-reading-a-clip-now-get-its-recommended-frames-from-st.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-26-opening-a-private-clip-while-signed-out-goes-straight-to-the.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-26-recording-activity-notifications-follow-trash-visibility.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-26-recording-search-expiry.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-27-first-run-setup-makes-free-credits-the-primary-path-while-ke.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-27-meeting-transcripts-follow-their-sharing-settings-and-the-li.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-27-the-rewind-consent-dialog-stays-visible-on-shorter-screens.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-27-thumbnails-respect-attached-footage-availability.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-27-workflow-generation-controls.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-27-workflow-generation-only-reports-failure-after-its-run-ends-.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-27-workflow-generation-progress-and-cancellation-stay-tied-to-t.md +6 -0
- package/corpus/templates/clips/desktop/src/components/ui/alert-dialog.tsx +1 -1
- package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +125 -18
- package/corpus/templates/clips/desktop/src/styles.css +3 -0
- package/corpus/templates/clips/server/db/index.ts +16 -1
- package/corpus/templates/clips/server/db/schema.ts +77 -0
- package/corpus/templates/clips/server/jobs/transactional-emails.ts +25 -3
- package/corpus/templates/clips/server/lib/activity-notifications.ts +3 -0
- package/corpus/templates/clips/server/lib/agent-frame-store.ts +650 -0
- package/corpus/templates/clips/server/lib/comment-access.ts +47 -0
- package/corpus/templates/clips/server/lib/content-clip-bindings.ts +50 -0
- package/corpus/templates/clips/server/lib/content-clip-peer.ts +778 -0
- package/corpus/templates/clips/server/lib/content-clip-uploads.ts +977 -0
- package/corpus/templates/clips/server/lib/content-doc-grant.ts +50 -0
- package/corpus/templates/clips/server/lib/content-peer-secret.ts +56 -0
- package/corpus/templates/clips/server/lib/content-playback-grant.ts +183 -0
- package/corpus/templates/clips/server/lib/content-uploads.ts +118 -0
- package/corpus/templates/clips/server/lib/final-chunk-claim.ts +276 -0
- package/corpus/templates/clips/server/lib/meeting-recording-access.ts +130 -0
- package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +19 -6
- package/corpus/templates/clips/server/lib/public-agent-context.ts +15 -12
- package/corpus/templates/clips/server/lib/recording-expiry-query.ts +27 -0
- package/corpus/templates/clips/server/lib/recording-leases.ts +27 -0
- package/corpus/templates/clips/server/lib/recording-page-access.ts +53 -5
- package/corpus/templates/clips/server/lib/recording-read-access.ts +34 -0
- package/corpus/templates/clips/server/lib/recording-upload-start.ts +141 -0
- package/corpus/templates/clips/server/lib/recording-upload-ticket.ts +96 -18
- package/corpus/templates/clips/server/lib/slack-unfurls.ts +2 -7
- package/corpus/templates/clips/server/middleware/auth.ts +3 -1
- package/corpus/templates/clips/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/clips/server/plugins/auth.ts +11 -0
- package/corpus/templates/clips/server/plugins/db.ts +64 -0
- package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +9 -2
- package/corpus/templates/clips/server/routes/api/agent-context.json.get.ts +7 -2
- package/corpus/templates/clips/server/routes/api/agent-frame.jpg.get.ts +45 -18
- package/corpus/templates/clips/server/routes/api/content-clips/[recordingId]/comments.get.ts +6 -0
- package/corpus/templates/clips/server/routes/api/content-clips/[recordingId]/comments.post.ts +6 -0
- package/corpus/templates/clips/server/routes/api/content-clips/[recordingId]/playback.get.ts +6 -0
- package/corpus/templates/clips/server/routes/api/content-clips/upload-status.get.ts +6 -0
- package/corpus/templates/clips/server/routes/api/content-clips/uploads.post.ts +6 -0
- package/corpus/templates/clips/server/routes/api/public-meeting.get.ts +8 -20
- package/corpus/templates/clips/server/routes/api/public-recording.get.ts +20 -10
- package/corpus/templates/clips/server/routes/api/thumbnail/[recordingId].get.ts +60 -16
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +27 -1
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +6 -0
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/content-cancel.post.ts +6 -0
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/content-chunk.post.ts +6 -0
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/resume.get.ts +2 -1
- package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +70 -18
- package/corpus/templates/clips/shared/comment-access.ts +6 -0
- package/corpus/templates/clips/shared/content-clip-contract.ts +219 -0
- package/corpus/templates/clips/shared/feature-flags.ts +2 -0
- package/corpus/templates/clips/shared/workflow.ts +124 -3
- package/corpus/templates/content/.agents/skills/document-editing/SKILL.md +21 -0
- package/corpus/templates/content/.agents/skills/document-editing/references/document-behavior.md +36 -0
- package/corpus/templates/content/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/content/CHANGELOG.md +70 -0
- package/corpus/templates/content/actions/_builder-cms-read-client.ts +42 -13
- package/corpus/templates/content/actions/_builder-cms-source-adapter.ts +73 -0
- package/corpus/templates/content/actions/_builder-cms-unpublished-changes.ts +632 -0
- package/corpus/templates/content/actions/_builder-cms-write-adapter.ts +198 -19
- package/corpus/templates/content/actions/_builder-cms-write-settings.ts +2 -2
- package/corpus/templates/content/actions/_builder-entry-status.ts +263 -0
- package/corpus/templates/content/actions/_builder-status-property.ts +402 -0
- package/corpus/templates/content/actions/_clip-embed-access.ts +189 -0
- package/corpus/templates/content/actions/_clip-upload.ts +59 -0
- package/corpus/templates/content/actions/_content-webhooks.ts +1196 -0
- package/corpus/templates/content/actions/_database-row-mutation.ts +205 -2
- package/corpus/templates/content/actions/_database-setup-discovery.ts +7 -5
- package/corpus/templates/content/actions/_database-source-utils.ts +1791 -583
- package/corpus/templates/content/actions/_database-utils.ts +31 -1
- package/corpus/templates/content/actions/_property-generations.ts +403 -0
- package/corpus/templates/content/actions/_property-utils.ts +16 -3
- package/corpus/templates/content/actions/add-comment.ts +22 -0
- package/corpus/templates/content/actions/apply-comment-ai-request.ts +28 -0
- package/corpus/templates/content/actions/create-clip-upload.ts +177 -0
- package/corpus/templates/content/actions/create-content-webhook.ts +231 -0
- package/corpus/templates/content/actions/delete-content-webhook.ts +59 -0
- package/corpus/templates/content/actions/delete-document-property.ts +6 -0
- package/corpus/templates/content/actions/delete-document.ts +25 -0
- package/corpus/templates/content/actions/disconnect-content-database-source.ts +16 -2
- package/corpus/templates/content/actions/duplicate-database-item.ts +10 -6
- package/corpus/templates/content/actions/duplicate-database-items.ts +2 -1
- package/corpus/templates/content/actions/duplicate-page.ts +57 -9
- package/corpus/templates/content/actions/execute-builder-source-batch.ts +15 -0
- package/corpus/templates/content/actions/execute-builder-source-execution.ts +413 -33
- package/corpus/templates/content/actions/get-clip-playback.ts +74 -0
- package/corpus/templates/content/actions/get-clip-upload-status.ts +49 -0
- package/corpus/templates/content/actions/get-clips-links.ts +25 -0
- package/corpus/templates/content/actions/get-document.ts +17 -0
- package/corpus/templates/content/actions/list-clip-comments.ts +91 -0
- package/corpus/templates/content/actions/list-content-webhooks.ts +136 -0
- package/corpus/templates/content/actions/list-document-properties.ts +30 -2
- package/corpus/templates/content/actions/materialize-builder-required-fields.ts +8 -0
- package/corpus/templates/content/actions/migrate-content-database-rows.ts +15 -0
- package/corpus/templates/content/actions/patch-database-items.ts +4 -1
- package/corpus/templates/content/actions/prepare-builder-source-execution.ts +3 -0
- package/corpus/templates/content/actions/prepare-builder-source-review.ts +110 -52
- package/corpus/templates/content/actions/review-content-database-source-change-set.ts +90 -35
- package/corpus/templates/content/actions/set-builder-entry-status.ts +199 -0
- package/corpus/templates/content/actions/set-content-database-source-write-mode.ts +8 -0
- package/corpus/templates/content/actions/set-document-property.ts +128 -15
- package/corpus/templates/content/actions/stage-builder-source-bulk-update.ts +400 -50
- package/corpus/templates/content/actions/update-comment.ts +48 -11
- package/corpus/templates/content/actions/update-database-item.ts +6 -1
- package/corpus/templates/content/actions/upsert-database-item-by-key.ts +4 -1
- package/corpus/templates/content/actions/view-screen.ts +49 -0
- package/corpus/templates/content/app/blocks/contentBlockRegistry.tsx +2 -0
- package/corpus/templates/content/app/blocks/publicBlockRegistry.ts +11 -0
- package/corpus/templates/content/app/clip-embed-messages.ts +881 -0
- package/corpus/templates/content/app/components/editor/BlockActionsMenu.tsx +518 -74
- package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +37 -25
- package/corpus/templates/content/app/components/editor/ColorSubmenu.tsx +76 -32
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +10 -3
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +111 -2
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +90 -7
- package/corpus/templates/content/app/components/editor/block-actions.ts +196 -0
- package/corpus/templates/content/app/components/editor/clip-embed/ClipEmbedBlock.tsx +545 -0
- package/corpus/templates/content/app/components/editor/clip-embed/ClipPlayer.tsx +171 -0
- package/corpus/templates/content/app/components/editor/clip-embed/ClipUploadGate.tsx +552 -0
- package/corpus/templates/content/app/components/editor/clip-embed/clip-embed-content.ts +28 -0
- package/corpus/templates/content/app/components/editor/clip-embed/clip-media.ts +117 -0
- package/corpus/templates/content/app/components/editor/clip-embed/clip-upload-notices.ts +61 -0
- package/corpus/templates/content/app/components/editor/clip-embed/clip-uploads.ts +611 -0
- package/corpus/templates/content/app/components/editor/clip-embed/comment-preview.tsx +61 -0
- package/corpus/templates/content/app/components/editor/clip-embed/player-controls.tsx +288 -0
- package/corpus/templates/content/app/components/editor/clip-embed/scrubber-position.ts +93 -0
- package/corpus/templates/content/app/components/editor/clip-embed/scrubber.tsx +346 -0
- package/corpus/templates/content/app/components/editor/clip-embed/use-clip-playback.ts +363 -0
- package/corpus/templates/content/app/components/editor/clip-embed/use-clips-links.ts +45 -0
- package/corpus/templates/content/app/components/editor/comment-anchors.ts +18 -3
- package/corpus/templates/content/app/components/editor/content-selection.ts +41 -0
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +148 -66
- package/corpus/templates/content/app/components/editor/database/settings.tsx +1 -0
- package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +167 -47
- package/corpus/templates/content/app/components/editor/extensions/NotionFidelity.ts +5 -0
- package/corpus/templates/content/app/components/editor/extensions/VideoBlock.tsx +179 -71
- package/corpus/templates/content/app/components/editor/extensions/VideoLinkForm.tsx +99 -0
- package/corpus/templates/content/app/components/editor/extensions/registryBlocks.ts +48 -7
- package/corpus/templates/content/app/components/editor/extensions/video-link-probe.ts +29 -0
- package/corpus/templates/content/app/components/editor/registrySlashItems.ts +1 -0
- package/corpus/templates/content/app/components/ui/slider.tsx +1 -0
- package/corpus/templates/content/app/global.css +7 -0
- package/corpus/templates/content/app/hooks/use-document-properties.ts +59 -0
- package/corpus/templates/content/app/hooks/use-documents.ts +3 -0
- package/corpus/templates/content/app/i18n-data.ts +50 -1
- package/corpus/templates/content/app/lib/document-read-failures.ts +55 -0
- package/corpus/templates/content/app/routes/p.$id.tsx +148 -34
- package/corpus/templates/content/changelog/2026-10-22-a-comment-on-the-start-of-a-block-no-longer-highlights-block.md +6 -0
- package/corpus/templates/content/changelog/2026-10-22-approval-links-from-a-connected-agent-such-as-claude-code-no.md +6 -0
- package/corpus/templates/content/changelog/2026-10-22-saving-a-builder-entry-from-content-no-longer-snaps-back-on-.md +6 -0
- package/corpus/templates/content/changelog/2026-10-22-the-block-menu-can-turn-a-block-into-another-kind-colour-it-.md +6 -0
- package/corpus/templates/content/changelog/2026-10-23-builder-collections-show-each-entry-s-builder-status-publish.md +6 -0
- package/corpus/templates/content/changelog/2026-10-23-public-pages-show-each-block-s-name-while-loading.md +6 -0
- package/corpus/templates/content/changelog/2026-10-23-pushing-a-builder-update-from-a-large-collection-now-ends-on.md +6 -0
- package/corpus/templates/content/changelog/2026-10-24-a-copied-block-that-holds-data-such-as-an-inline-database-ke.md +6 -0
- package/corpus/templates/content/changelog/2026-10-24-agents-can-register-webhooks-that-send-a-signed-event-when-a.md +6 -0
- package/corpus/templates/content/changelog/2026-10-24-agents-can-write-a-property-only-while-it-still-holds-the.md +6 -0
- package/corpus/templates/content/changelog/2026-10-24-pick-published-or-draft-in-a-builder-entry-s-status-to-stage.md +6 -0
- package/corpus/templates/content/changelog/2026-10-24-refreshing-a-builder-collection-keeps-edits-content-has-not.md +6 -0
- package/corpus/templates/content/changelog/2026-10-26-preserve-document-bodies-in-mcp-reads.md +6 -0
- package/corpus/templates/content/changelog/2026-10-27-an-agent-s-accept-on-words-someone-is-still-typing-returns-to-pending.md +6 -0
- package/corpus/templates/content/changelog/2026-10-27-opening-a-page-you-can-t-access-goes-straight-to-the-no-acce.md +6 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.adapters.md +37 -9
- package/corpus/templates/content/e2e/global-teardown.ts +1 -1
- package/corpus/templates/content/e2e/helpers.ts +16 -3
- package/corpus/templates/content/e2e/live-body-gate.ts +19 -10
- package/corpus/templates/content/parity/matrix.md +45 -42
- package/corpus/templates/content/parity/matrix.ts +88 -2
- package/corpus/templates/content/parity/run-database-create-property-preservation.ts +2 -0
- package/corpus/templates/content/server/db/schema.ts +113 -0
- package/corpus/templates/content/server/lib/clips-peer.ts +403 -0
- package/corpus/templates/content/server/lib/content-webhook-signature.ts +85 -0
- package/corpus/templates/content/server/lib/public-documents.ts +6 -0
- package/corpus/templates/content/server/lib/suggested-edits.ts +12 -7
- package/corpus/templates/content/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/content/server/plugins/content-webhooks.ts +93 -0
- package/corpus/templates/content/server/plugins/db.ts +119 -0
- package/corpus/templates/content/shared/api.ts +88 -7
- package/corpus/templates/content/shared/clip-embed-block.ts +87 -0
- package/corpus/templates/content/shared/clips-peer-contract.ts +272 -0
- package/corpus/templates/content/shared/feature-flags.ts +10 -0
- package/corpus/templates/content/shared/nfm-registry.ts +10 -0
- package/corpus/templates/content/shared/video-link.ts +138 -0
- package/corpus/templates/crm/.agents/skills/crm/SKILL.md +4 -4
- package/corpus/templates/crm/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/crm/CHANGELOG.md +18 -0
- package/corpus/templates/crm/actions/find-crm-duplicates.ts +76 -88
- package/corpus/templates/crm/app/components/crm/RecordActions.tsx +1 -1
- package/corpus/templates/crm/app/i18n/en-US.ts +3 -3
- package/corpus/templates/crm/changelog/2026-10-22-approval-links-from-a-connected-agent-such-as-claude-code-no.md +6 -0
- package/corpus/templates/crm/changelog/2026-10-26-crm-duplicate-review-uses-decision-provider.md +6 -0
- package/corpus/templates/crm/server/plugins/agent-chat.ts +1 -1
- package/corpus/templates/design/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/design/CHANGELOG.md +69 -0
- package/corpus/templates/design/actions/_design-tracking.ts +2 -2
- package/corpus/templates/design/actions/_generation-tracking.ts +18 -29
- package/corpus/templates/design/actions/clear-localhost-write-consent-request.ts +8 -2
- package/corpus/templates/design/actions/create-design-from-template.ts +1 -1
- package/corpus/templates/design/actions/create-design.ts +1 -1
- package/corpus/templates/design/actions/duplicate-design.ts +1 -1
- package/corpus/templates/design/actions/edit-design.ts +43 -11
- package/corpus/templates/design/actions/generate-design.ts +98 -26
- package/corpus/templates/design/actions/get-design.ts +20 -1
- package/corpus/templates/design/actions/get-localhost-write-consent-request.ts +29 -13
- package/corpus/templates/design/actions/grant-localhost-write-consent.ts +31 -2
- package/corpus/templates/design/actions/issue-visual-edit-bootstrap.ts +6 -4
- package/corpus/templates/design/actions/localhost-consent-request-state.ts +4 -0
- package/corpus/templates/design/actions/open-visual-edit.ts +2 -1
- package/corpus/templates/design/actions/record-first-run-builder-credits-v2-exposure.ts +63 -0
- package/corpus/templates/design/actions/request-localhost-write-consent.ts +26 -5
- package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +44 -15
- package/corpus/templates/design/app/components/design/LocalhostWriteConsentDialog.tsx +522 -26
- package/corpus/templates/design/app/components/editor/FigmaLinkComposerBubble.tsx +72 -39
- package/corpus/templates/design/app/components/home/DesignHomeLibrary.tsx +1 -0
- package/corpus/templates/design/app/components/templates/DesignTemplateLibrary.tsx +1 -0
- package/corpus/templates/design/app/hooks/use-question-flow.ts +1 -3
- package/corpus/templates/design/app/i18n/en-US.ts +16 -0
- package/corpus/templates/design/app/pages/Index.tsx +65 -6
- package/corpus/templates/design/app/pages/design-editor/commands/save-file-content.ts +34 -0
- package/corpus/templates/design/app/pages/design-editor/domains/use-editor-active-screen-and-geometry.ts +6 -78
- package/corpus/templates/design/app/pages/design-editor/domains/use-editor-canvas-and-screens.ts +2 -0
- package/corpus/templates/design/app/pages/design-editor/domains/use-editor-generation-and-access.ts +37 -31
- package/corpus/templates/design/app/pages/design-editor/domains/use-editor-live-edits-and-presence.ts +11 -21
- package/corpus/templates/design/app/pages/design-editor/domains/use-editor-source-and-sync.ts +9 -12
- package/corpus/templates/design/app/pages/design-editor/editor-state.ts +6 -0
- package/corpus/templates/design/app/pages/design-editor/effects/publish-active-source-content.ts +55 -0
- package/corpus/templates/design/app/pages/design-editor/localhost-consent-request.ts +16 -2
- package/corpus/templates/design/app/pages/design-editor/types.ts +1 -0
- package/corpus/templates/design/app/pages/design-editor/view/node-rewrite-and-localhost-dialogs.tsx +8 -25
- package/corpus/templates/design/changelog/2026-10-22-approval-links-from-a-connected-agent-such-as-claude-code-no.md +6 -0
- package/corpus/templates/design/changelog/2026-10-22-builder-sign-in-keeps-design-export-actions-available.md +6 -0
- package/corpus/templates/design/changelog/2026-10-22-local-visual-editing-returns-an-app-link-when-no-browser-han.md +6 -0
- package/corpus/templates/design/changelog/2026-10-24-approving-local-file-writes-no-longer-undoes-the-edit-that-a.md +6 -0
- package/corpus/templates/design/changelog/2026-10-24-local-file-write-consent-asks-you-to-sign-in-before-approvin.md +6 -0
- package/corpus/templates/design/changelog/2026-10-24-signing-in-from-the-file-write-consent-dialog-brings-you-back-to-the-same-request.md +6 -0
- package/corpus/templates/design/changelog/2026-10-24-visual-edit-links-keep-their-editing-access-after-sign-in-wi.md +6 -0
- package/corpus/templates/design/changelog/2026-10-26-voice-edits-make-the-smallest-matching-change-say-the-new-va.md +6 -0
- package/corpus/templates/design/changelog/2026-10-27-design-imports-make-your-source-and-page-choices-clear-and-c.md +6 -0
- package/corpus/templates/design/changelog/2026-10-27-first-run-setup-makes-free-credits-the-primary-path-while-ke.md +6 -0
- package/corpus/templates/design/e2e/helpers.ts +29 -0
- package/corpus/templates/design/server/lib/getting-started.ts +8 -2
- package/corpus/templates/design/server/lib/realtime-voice.ts +7 -0
- package/corpus/templates/design/server/plugins/agent-chat.ts +3 -0
- package/corpus/templates/design/server/plugins/feature-flags.ts +7 -1
- package/corpus/templates/dispatch/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +34 -29
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/fresh-project.md +12 -5
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/review-loop.md +3 -2
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/where-it-runs.md +93 -0
- package/corpus/templates/dispatch/CHANGELOG.md +7 -0
- package/corpus/templates/dispatch/changelog/2026-10-22-approval-links-from-a-connected-agent-such-as-claude-code-no.md +6 -0
- package/corpus/templates/factory/.agents/skills/factory-workflows/SKILL.md +39 -4
- package/corpus/templates/factory/.agents/skills/review-latest-feedback/SKILL.md +123 -33
- package/corpus/templates/factory/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +34 -29
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/fresh-project.md +12 -5
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/review-loop.md +3 -2
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/where-it-runs.md +93 -0
- package/corpus/templates/factory/CHANGELOG.md +8 -0
- package/corpus/templates/factory/actions/create-factory-automation.ts +3 -0
- package/corpus/templates/factory/actions/describe-workflow-node-catalog.ts +26 -10
- package/corpus/templates/factory/actions/get-factory-workflow.ts +5 -1
- package/corpus/templates/factory/actions/get-workflow-diagnostics.ts +5 -1
- package/corpus/templates/factory/actions/list-provider-options.ts +155 -0
- package/corpus/templates/factory/actions/list-workflow-items.ts +1 -1
- package/corpus/templates/factory/actions/restore-factory-automation-version.ts +15 -10
- package/corpus/templates/factory/actions/restore-factory-workflow-version.ts +5 -1
- package/corpus/templates/factory/actions/run-factory-automation.ts +12 -10
- package/corpus/templates/factory/actions/run-factory-workflow.ts +2 -0
- package/corpus/templates/factory/actions/run-workflow-operation.ts +8 -2
- package/corpus/templates/factory/actions/save-factory-automation.ts +33 -4
- package/corpus/templates/factory/actions/save-factory-workflow.ts +11 -3
- package/corpus/templates/factory/actions/set-factory-workflow-enabled.ts +7 -2
- package/corpus/templates/factory/app/components/factory/slack-mrkdwn.ts +12 -0
- package/corpus/templates/factory/app/components/workflow/RunPicker.tsx +20 -8
- package/corpus/templates/factory/app/components/workflow/RunStatusChip.tsx +12 -2
- package/corpus/templates/factory/app/components/workflow/WorkflowPage.tsx +37 -7
- package/corpus/templates/factory/app/components/workflow/WorkflowsView.tsx +11 -9
- package/corpus/templates/factory/app/components/workflow/activity/ActivityRow.tsx +6 -1
- package/corpus/templates/factory/app/components/workflow/activity/activity-model.ts +5 -1
- package/corpus/templates/factory/app/components/workflow/items/ItemListRow.tsx +7 -0
- package/corpus/templates/factory/app/components/workflow/items/item-status.ts +18 -0
- package/corpus/templates/factory/app/components/workflow/node-details/MapDrag.tsx +5 -3
- package/corpus/templates/factory/app/components/workflow/node-details/NodeDetailsDialog.tsx +2 -1
- package/corpus/templates/factory/app/components/workflow/node-details/NodeDetailsName.tsx +36 -11
- package/corpus/templates/factory/app/components/workflow/node-details/NodeDetailsParameters.tsx +6 -2
- package/corpus/templates/factory/app/components/workflow/node-details/name-field.ts +20 -0
- package/corpus/templates/factory/app/components/workflow/pickers/ProviderOptionCombobox.tsx +379 -0
- package/corpus/templates/factory/app/components/workflow/pickers/picker-kinds.ts +76 -0
- package/corpus/templates/factory/app/components/workflow/pickers/picker-scope.ts +12 -0
- package/corpus/templates/factory/app/components/workflow/pickers/picker-strings.ts +50 -0
- package/corpus/templates/factory/app/components/workflow/pickers/use-provider-options.ts +190 -0
- package/corpus/templates/factory/app/components/workflow/workflow-list-model.ts +17 -0
- package/corpus/templates/factory/app/components/workflow/workflow-time.ts +17 -2
- package/corpus/templates/factory/app/components/workflow-canvas/inspector/BindingField.tsx +66 -2
- package/corpus/templates/factory/app/components/workflow-canvas/inspector/OperationFields.tsx +2 -0
- package/corpus/templates/factory/app/components/workflow-canvas/inspector/fields.tsx +3 -3
- package/corpus/templates/factory/app/components/workflow-canvas/inspector/forms/SourceForm.tsx +5 -2
- package/corpus/templates/factory/app/i18n/en-US.ts +45 -14
- package/corpus/templates/factory/changelog/2026-10-23-external-automation-approval.md +8 -0
- package/corpus/templates/factory/server/connectors/email-workflow.ts +91 -5
- package/corpus/templates/factory/server/lib/factory-automation-history.ts +71 -27
- package/corpus/templates/factory/server/lib/factory-automation-resources.ts +15 -5
- package/corpus/templates/factory/server/lib/factory-scope.ts +148 -8
- package/corpus/templates/factory/server/lib/factory-sentry-fallback.ts +15 -0
- package/corpus/templates/factory/server/lib/factory-workflow-context.ts +34 -6
- package/corpus/templates/factory/server/lib/factory-workflow-job.ts +53 -7
- package/corpus/templates/factory/server/lib/factory-workflow-runner.ts +8 -0
- package/corpus/templates/factory/server/plugins/agent-chat.ts +4 -0
- package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +44 -17
- package/corpus/templates/factory/server/workflow/catalog/builder.ts +140 -5
- package/corpus/templates/factory/server/workflow/catalog/email.ts +20 -0
- package/corpus/templates/factory/server/workflow/catalog/factory.ts +32 -0
- package/corpus/templates/factory/server/workflow/catalog/github.ts +53 -0
- package/corpus/templates/factory/server/workflow/catalog/gong.ts +2 -0
- package/corpus/templates/factory/server/workflow/catalog/slack.ts +24 -0
- package/corpus/templates/factory/server/workflow/engine/run-tick.ts +3 -1
- package/corpus/templates/factory/server/workflow/graph-validation.ts +42 -2
- package/corpus/templates/factory/server/workflow/operations.ts +68 -0
- package/corpus/templates/factory/server/workflow/stories/02-builder-to-merge/story.md +2 -2
- package/corpus/templates/factory/server/workflow/stories/02-builder-to-merge/workflow.json +5 -0
- package/corpus/templates/factory/server/workflow/stories/07-incident-to-postmortem/workflow.json +4 -1
- package/corpus/templates/factory/server/workflow-host/builder-operations.ts +21 -5
- package/corpus/templates/factory/server/workflow-host/option-listers/github-repositories.ts +60 -0
- package/corpus/templates/factory/server/workflow-host/option-listers/provider-http.ts +270 -0
- package/corpus/templates/factory/server/workflow-host/option-listers/registry.ts +79 -0
- package/corpus/templates/factory/server/workflow-host/option-listers/sentry-organizations.ts +39 -0
- package/corpus/templates/factory/server/workflow-host/option-listers/sentry-projects.ts +40 -0
- package/corpus/templates/factory/server/workflow-host/option-listers/slack-channels.ts +113 -0
- package/corpus/templates/factory/server/workflow-host/option-listers/types.ts +108 -0
- package/corpus/templates/factory/server/workflow-host/provider-request.ts +31 -0
- package/corpus/templates/factory/server/workflow-host/read-models/items.ts +7 -0
- package/corpus/templates/factory/server/workflow-host/read-models/journey.ts +1 -0
- package/corpus/templates/factory/server/workflow-host/read-models/parked.ts +1 -0
- package/corpus/templates/factory/server/workflow-host/testing/workflow-actions-kit.ts +46 -1
- package/corpus/templates/forms/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/forms/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/mail/.agents/skills/inbox-automations/SKILL.md +7 -4
- package/corpus/templates/mail/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/mail/CHANGELOG.md +29 -0
- package/corpus/templates/mail/actions/apply-ai-filter.ts +3 -3
- package/corpus/templates/mail/actions/get-ai-priority.ts +188 -84
- package/corpus/templates/mail/actions/get-jev-availability.ts +40 -10
- package/corpus/templates/mail/actions/manage-draft.ts +151 -4
- package/corpus/templates/mail/actions/navigate.ts +19 -14
- package/corpus/templates/mail/actions/preview-ai-filter.ts +14 -11
- package/corpus/templates/mail/app/components/email/ComposeModal.tsx +263 -194
- package/corpus/templates/mail/app/components/email/DraftCard.tsx +657 -0
- package/corpus/templates/mail/app/components/email/EmailList.tsx +100 -22
- package/corpus/templates/mail/app/components/email/EmailListItem.tsx +1 -0
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +66 -63
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +39 -12
- package/corpus/templates/mail/app/components/settings/AiFilterSection.tsx +14 -9
- package/corpus/templates/mail/app/components/settings/JevConnectionPrompt.tsx +9 -1
- package/corpus/templates/mail/app/hooks/use-ai-priority.ts +8 -2
- package/corpus/templates/mail/app/hooks/use-compose-state.ts +29 -13
- package/corpus/templates/mail/app/i18n/en-US.ts +21 -5
- package/corpus/templates/mail/app/lib/inbox-tabs.ts +15 -2
- package/corpus/templates/mail/app/pages/InboxPage.tsx +3 -0
- package/corpus/templates/mail/app/routes/draft.tsx +15 -0
- package/corpus/templates/mail/changelog/2026-10-21-connected-agents-can-create-and-update-email-drafts-for-revi.md +6 -0
- package/corpus/templates/mail/changelog/2026-10-21-when-an-agent-in-claude-or-chatgpt-drafts-an-email-mail-show.md +6 -0
- package/corpus/templates/mail/changelog/2026-10-22-approval-links-from-a-connected-agent-such-as-claude-code-no.md +6 -0
- package/corpus/templates/mail/changelog/2026-10-26-mail-ai-decisions-can-use-openai.md +6 -0
- package/corpus/templates/mail/changelog/2026-10-27-configured-mail-labels-now-show-archived-messages-and-checkb.md +6 -0
- package/corpus/templates/mail/changelog/2026-10-27-priority-sort-refreshes-scores-when-its-ai-provider-changes.md +6 -0
- package/corpus/templates/mail/server/lib/ai-filter-backfill.ts +265 -22
- package/corpus/templates/mail/server/lib/ai-priority.ts +41 -7
- package/corpus/templates/mail/server/lib/automation-engine.ts +728 -620
- package/corpus/templates/mail/server/lib/automation-model.ts +1 -42
- package/corpus/templates/mail/server/lib/automations.ts +10 -9
- package/corpus/templates/mail/server/lib/mail-connector-catalog.ts +1 -0
- package/corpus/templates/mail/server/plugins/agent-chat.ts +1 -1
- package/corpus/templates/mail/shared/ai-filter-backfill.ts +15 -0
- package/corpus/templates/mail/shared/ai-filter.ts +41 -4
- package/corpus/templates/mail/shared/ai-priority.ts +12 -1
- package/corpus/templates/plan/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/plan/CHANGELOG.md +6 -0
- package/corpus/templates/plan/server/plugins/00-mcp.ts +1 -0
- package/corpus/templates/slides/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/slides/CHANGELOG.md +37 -0
- package/corpus/templates/slides/actions/_deck-tracking.ts +3 -3
- package/corpus/templates/slides/actions/add-deck.ts +1 -1
- package/corpus/templates/slides/actions/add-slide.ts +43 -30
- package/corpus/templates/slides/actions/clone-creative-context-deck.ts +1 -1
- package/corpus/templates/slides/actions/create-deck.ts +57 -14
- package/corpus/templates/slides/actions/duplicate-deck.ts +1 -1
- package/corpus/templates/slides/actions/import-google-slides-reference.ts +1 -1
- package/corpus/templates/slides/actions/import-pptx.ts +11 -4
- package/corpus/templates/slides/actions/record-first-run-builder-credits-v2-exposure.ts +63 -0
- package/corpus/templates/slides/changelog/2026-10-22-open-decks-in-the-full-app-from-chat.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-26-voice-edits-make-the-smallest-matching-change-say-the-new-va.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-27-first-run-setup-makes-free-credits-the-primary-path-while-ke.md +6 -0
- package/corpus/templates/slides/server/lib/chatgpt-directory-tools.ts +1 -43
- package/corpus/templates/slides/server/lib/realtime-voice.ts +12 -0
- package/corpus/templates/slides/server/plugins/agent-chat.ts +3 -0
- package/corpus/templates/slides/server/plugins/feature-flags.ts +4 -1
- package/corpus/templates/slides-2/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/slides-2/CHANGELOG.md +18 -0
- package/corpus/templates/slides-2/actions/add-slide.ts +1 -13
- package/corpus/templates/slides-2/actions/create-deck.ts +1 -8
- package/corpus/templates/slides-2/agent-native.config.ts +4 -0
- package/corpus/templates/slides-2/app/i18n/en-US.ts +5 -5
- package/corpus/templates/slides-2/changelog/2026-10-22-open-decks-in-the-full-app-from-chat.md +6 -0
- package/corpus/templates/slides-2/changelog/2026-10-27-onboarding-and-setup-copy-now-uses-a-clear-collaborative-voi.md +6 -0
- package/corpus/templates/slides-2/copy-rewrites.json +95 -0
- package/corpus/templates/slides-2/server/lib/chatgpt-directory-tools.ts +1 -43
- package/corpus/templates/slides-2/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/tasks/.agents/skills/storing-data/SKILL.md +18 -0
- package/corpus/templates/tasks/.agents/skills/task-inbox-workflow/SKILL.md +1 -1
- package/corpus/templates/tasks/CHANGELOG.md +6 -0
- package/corpus/templates/tasks/actions/suggest-task-route.ts +69 -64
- package/corpus/templates/tasks/app/components/tasks/fields/TaskFieldsSidebar.tsx +5 -4
- package/corpus/templates/tasks/changelog/2026-10-26-task-suggestions-can-use-openai.md +6 -0
- package/corpus/templates/tasks/server/plugins/agent-chat.ts +1 -0
- package/package.json +1 -1
- package/corpus/templates/analytics/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/assets/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/brain/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/calendar/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/chat/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/clips/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/clips/app/lib/missing-share-retry.ts +0 -20
- package/corpus/templates/content/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/crm/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/design/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/design/.generated/bridge/native-builtin-metadata.generated.ts +0 -326
- package/corpus/templates/design/.generated/bridge/native-worker-source.generated.ts +0 -6
- package/corpus/templates/dispatch/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/forms/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/mail/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/plan/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/slides/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/slides-2/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
package/corpus/README.md
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ab-readout
|
|
3
|
+
description: >-
|
|
4
|
+
Read the first-run Builder credits experiment output. Use for first-run
|
|
5
|
+
onboarding experiment analysis or the weekly radar report.
|
|
6
|
+
scope: dev
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# A/B readout
|
|
10
|
+
|
|
11
|
+
- Run `pnpm --filter analytics radar:ab --experiment first_run_builder_credits`.
|
|
12
|
+
- Verify the sample-ratio result and each arm's denominator before comparing
|
|
13
|
+
rates. Under the configured minimum arm size, report not enough data.
|
|
14
|
+
- Read the 95% confidence interval and two-proportion p-value beside the raw
|
|
15
|
+
counts. D1 and D7 only use mature cohorts.
|
|
16
|
+
- Keep per-app entry denominators separate from experiment-wide exposure counts.
|
|
17
|
+
State the observation window and note the overlapping Clips recording
|
|
18
|
+
experiment when interpreting Clips results.
|
|
19
|
+
- Report association only. Do not claim the credits variant caused a change.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feedback-ingest
|
|
3
|
+
description: >-
|
|
4
|
+
Collect product feedback themes for the first-touch radar. Use during a weekly
|
|
5
|
+
report or after a fired first-session check.
|
|
6
|
+
scope: dev
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Feedback ingest
|
|
10
|
+
|
|
11
|
+
- Read `.tmp/first-touch-radar/slack-watermark.json`; if absent, use the prior
|
|
12
|
+
24 hours for the first scan.
|
|
13
|
+
- Search `#product-agent-native-feedback`, `#dev-agent-native`,
|
|
14
|
+
`#dev-agent-native-feedback`, `#design-an-feedback`, `#qa-agent-native`, and
|
|
15
|
+
`#plg-agent-native` from the watermark through now using Slack MCP.
|
|
16
|
+
- Keep the search read-only: do not post, react, mark messages read, or open the
|
|
17
|
+
Slack desktop app.
|
|
18
|
+
- Group feedback into themes with counts, app, dates, and permalinks. Join a
|
|
19
|
+
theme to a fired radar check only when the app and date overlap; otherwise mark
|
|
20
|
+
it unlinked.
|
|
21
|
+
- Store only the new watermark and aggregate theme notes in the private radar
|
|
22
|
+
run directory. Do not copy full messages, emails, or prompt text.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: first-touch-radar
|
|
3
|
+
description: >-
|
|
4
|
+
Run the first-touch product radar for Design, Slides, and Clips. Use for daily
|
|
5
|
+
watch, replay triage, weekly growth reports, or first-session incidents.
|
|
6
|
+
scope: dev
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# First-touch radar
|
|
10
|
+
|
|
11
|
+
1. Run `pnpm --filter analytics radar:watch --window daily` and read both the
|
|
12
|
+
JSON and Markdown under `.tmp/first-touch-radar/runs/`.
|
|
13
|
+
2. Treat exit 0 as clear, exit 1 as one or more fired checks, and exit 2 as
|
|
14
|
+
incomplete evidence. Never turn a missing source or failed query into zero.
|
|
15
|
+
3. On a fire, run `pnpm --filter analytics radar:triage` and inspect the
|
|
16
|
+
outcome-ranked sessions. Use `metric-watch` and `replay-triage` for details.
|
|
17
|
+
4. For a weekly review, run `pnpm --filter analytics radar:report --week
|
|
18
|
+
<Monday>` and read the coverage flags, denominators, campaign annotations,
|
|
19
|
+
previous-issue recovery, and A/B maturity before drawing conclusions.
|
|
20
|
+
The `campaign-followup` check runs in daily watch and weekly report; compare
|
|
21
|
+
identified recipients' post-send activity with the seven days before each
|
|
22
|
+
send, split by recipient app and activity app. Weekly reports cap cumulative
|
|
23
|
+
BigQuery dry-run estimates at 100 GB; use `--max-total-gb` to set a different
|
|
24
|
+
report-wide cap, and treat a reached cap as incomplete evidence.
|
|
25
|
+
5. Run `feedback-ingest` for Slack themes. Searches are read-only and begin at
|
|
26
|
+
the saved watermark.
|
|
27
|
+
6. Send one Telegram to Steve only when a check fired or the weekly report is
|
|
28
|
+
ready. Include counts and the private run-file path. Send nothing on a quiet
|
|
29
|
+
day. Never send Slack or email.
|
|
30
|
+
7. Keep recipient emails and prompt text out of logs, reports, Telegram, and
|
|
31
|
+
commits. The campaign check reads its mode-0600 recipient file in memory and
|
|
32
|
+
emits aggregate counts only. With a PostgreSQL sink, recipient identifiers
|
|
33
|
+
are parameters to the read-only query and caching is disabled. A BigQuery
|
|
34
|
+
sink cannot run campaign follow-up until a keyed recipient matching
|
|
35
|
+
function is configured; report it as incomplete rather than treating it as
|
|
36
|
+
zero. Unknown signup campaign labels are grouped as `other`. Anonymous
|
|
37
|
+
landings cannot be assigned to a recipient; do not interpret identified
|
|
38
|
+
counts as a complete click total.
|
|
39
|
+
8. This radar changes scripts and skills only. Do not make user-visible UI
|
|
40
|
+
changes. If UI work becomes necessary, stop that scope and request Steve's
|
|
41
|
+
screenshot approval before implementing it.
|
|
42
|
+
9. A fired metric may create a local brief through `fix-brief`; no fix starts
|
|
43
|
+
until Steve approves it.
|
|
44
|
+
10. Interpret the first-touch journeys separately: Design web excludes
|
|
45
|
+
`/mcp/oauth%` signup paths; Design MCP is signup → `agent_connected` → first
|
|
46
|
+
`$mcp_tool_call` → `design_created`. Clips activation is signup →
|
|
47
|
+
`recording_ready` within 24 hours. Treat 2026-10-21 as a definition break:
|
|
48
|
+
`recording_started` before then includes local-only recordings.
|
|
49
|
+
11. Read the weekly paid-acquisition notes alongside signup counts: Slides ads
|
|
50
|
+
stopped after 2026-10-16, Bing CPC ended around 2026-10-20 21:00 UTC for
|
|
51
|
+
Clips/Design, and Google paid spend was about 45% lower from 2026-10-21.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fix-brief
|
|
3
|
+
description: >-
|
|
4
|
+
Turn a fired radar check into a local, evidence-backed repair brief. Use when
|
|
5
|
+
Steve asks for a fix brief or approves one.
|
|
6
|
+
scope: dev
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Fix brief
|
|
10
|
+
|
|
11
|
+
- Choose one fired check and write `.tmp/first-touch-radar/briefs/<id>.md`.
|
|
12
|
+
- Include its query window, numerator and denominator, comparison baseline,
|
|
13
|
+
affected app, relevant redacted replay link, and likely source files from
|
|
14
|
+
`git grep origin/main`.
|
|
15
|
+
- Make acceptance measurable: the detecting query returns under threshold with
|
|
16
|
+
sufficient coverage on a fresh run.
|
|
17
|
+
- Do not change application code until Steve explicitly approves the fix task.
|
|
18
|
+
Keep UI changes out; any proposed UI repair needs Steve's screenshot approval.
|
|
19
|
+
- Do not include recipient emails, prompt text, or copied user content.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: metric-watch
|
|
3
|
+
description: >-
|
|
4
|
+
Inspect first-touch radar checks, their query coverage, thresholds, and
|
|
5
|
+
backtests. Use when a watch fires or a metric needs calibration.
|
|
6
|
+
scope: dev
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Metric watch
|
|
10
|
+
|
|
11
|
+
- Run `pnpm --filter analytics radar:watch --window daily`; use `--window
|
|
12
|
+
hourly` for provisioning and environment-key checks.
|
|
13
|
+
- Read the check status, numerator, denominator, seven-day comparison, and
|
|
14
|
+
coverage. `insufficient` is not a pass, and `unavailable` means the run exits
|
|
15
|
+
2.
|
|
16
|
+
- Compare daily thresholds with the incident window and an ordinary week before
|
|
17
|
+
changing them. Record both windows and the observed counts in the PR or report.
|
|
18
|
+
- Action success uses a weighted `action.response` rate. Keep its app-specific
|
|
19
|
+
threshold below the quiet-week distribution; do not copy the 95% starting
|
|
20
|
+
value without a backtest.
|
|
21
|
+
- Read signup campaign tags beside signup drops. Paid search changes are context,
|
|
22
|
+
not proof that product behavior changed.
|
|
23
|
+
- Event first-seen checks require 10 events that day; went-to-zero checks require
|
|
24
|
+
at least 50 events across the preceding seven days.
|
|
25
|
+
- Read `campaign-followup` as identified recipient counts after send versus the
|
|
26
|
+
same recipients' prior seven days, split by recipient and activity app.
|
|
27
|
+
Anonymous landings cannot be attributed to recipients.
|
|
28
|
+
- The hourly Analytics alert rules cannot express ratios or trailing baselines;
|
|
29
|
+
do not replace these checks with simple count rules.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: replay-triage
|
|
3
|
+
description: >-
|
|
4
|
+
Review outcome-ranked first-touch sessions and their replay evidence. Use when
|
|
5
|
+
radar checks or the weekly report identify a first-session failure.
|
|
6
|
+
scope: dev
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Replay triage
|
|
10
|
+
|
|
11
|
+
- Run `pnpm --filter analytics radar:triage` or pass `--date YYYY-MM-DD` for a
|
|
12
|
+
UTC day.
|
|
13
|
+
- Start with `prompted_no_output`, `recording_started_no_ready_clip`, and
|
|
14
|
+
`onboarding_abandoned`. Friction and performance fields explain outcomes; do
|
|
15
|
+
not rank sessions by friction score.
|
|
16
|
+
- Review at most the top 15–30 sessions. When a bearer is available, fetch replay
|
|
17
|
+
timelines only for those recording ids through Analytics' deployed action.
|
|
18
|
+
- Use event names, offsets, counts, trouble labels, and performance summaries.
|
|
19
|
+
Never include emails, prompt text, URLs, or other user content in a report.
|
|
@@ -29,6 +29,24 @@ Agent-Native apps use Drizzle ORM over PostgreSQL. Local development uses PGlite
|
|
|
29
29
|
|
|
30
30
|
For app code, use Drizzle's schema/query DSL by default. Raw SQL is an escape hatch for additive migrations, health checks, or one-off maintenance, not the normal way to build features.
|
|
31
31
|
|
|
32
|
+
### Typed raw SQL fragments
|
|
33
|
+
|
|
34
|
+
When Drizzle cannot express a PostgreSQL query, import `sql` from
|
|
35
|
+
`@agent-native/core/db` and pass its fragment directly to
|
|
36
|
+
`getDbExec().execute()`. Use `sql.value(value)` for bound values,
|
|
37
|
+
`sql.ident(name)` for validated lowercase identifiers, `sql.in(values)` for a
|
|
38
|
+
nonempty list (it includes parentheses), and `sql.join(fragments, separator)`
|
|
39
|
+
or nested fragments for composition. The tag rejects plain string interpolation
|
|
40
|
+
at compile time; do not build `{ sql: `...${value}...` }` or pass interpolated
|
|
41
|
+
templates directly to `execute()`. The diff-scoped guard checks new
|
|
42
|
+
interpolated SQL reaching `getDbExec().execute()` through the helper and wrapper
|
|
43
|
+
paths it analyzes. A reviewed exception needs `// raw-sql-ok: <reason>` as
|
|
44
|
+
a standalone comment immediately before the sink statement or after it on the
|
|
45
|
+
same line. Markers inside SQL text, callbacks, and object properties do not opt
|
|
46
|
+
out. The guard does not audit Drizzle `sql.raw()` or raw adapter `query()` calls,
|
|
47
|
+
so use bound Drizzle fragments or the typed kernel instead of interpolating
|
|
48
|
+
dynamic values through those APIs.
|
|
49
|
+
|
|
32
50
|
### Schema and migration ownership
|
|
33
51
|
|
|
34
52
|
Define PostgreSQL tables with Drizzle's `drizzle-orm/pg-core` exports and use
|
|
@@ -5,12 +5,23 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
5
5
|
|
|
6
6
|
## 2026-10-24
|
|
7
7
|
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- Pick dashboard panels for the agent with the Select button in the chat composer.
|
|
11
|
+
|
|
8
12
|
### Improved
|
|
9
13
|
|
|
14
|
+
- An empty Ask page shows the large composer, and the agent panel opens on the app's default model
|
|
15
|
+
- The Content dashboard ranks articles by signups, adds Authors, New and rising, and Sources tabs, and names missing data sources in one notice.
|
|
10
16
|
- Organization roster searches now find row-level dbt membership data more reliably.
|
|
11
17
|
|
|
12
18
|
### Fixed
|
|
13
19
|
|
|
20
|
+
- Analytics now clearly indicates incomplete Gong user lists and HubSpot deal pages.
|
|
21
|
+
- Date columns in dashboard tables no longer show the previous day in time zones west of UTC.
|
|
22
|
+
- Gong transcript reads preserve the transcript alias for existing callers.
|
|
23
|
+
- Phones can open the agent from the top bar on every page outside Ask
|
|
24
|
+
- HubSpot and Gong searches keep their filters and page totals visible.
|
|
14
25
|
- Analytics avoids showing partial warehouse results when a metric or plan request is ambiguous.
|
|
15
26
|
- Analytics preserves verified results from successful time ranges when another requested range is unavailable.
|
|
16
27
|
- Analytics uses a warehouse fallback for a failed metric only when requested and supported by a complete metric definition and result.
|
|
@@ -18,8 +29,16 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
18
29
|
|
|
19
30
|
## 2026-10-23
|
|
20
31
|
|
|
32
|
+
### Improved
|
|
33
|
+
|
|
34
|
+
- Metric tiles can show their change from the period before, tables give the spare width to their first text column and right-align numbers, and callouts read as a list with a severity icon per row, in dashboards and emailed reports.
|
|
35
|
+
|
|
21
36
|
### Fixed
|
|
22
37
|
|
|
38
|
+
- Content pageviews use their own GA4 property without changing other dashboards.
|
|
39
|
+
- Content signup collection keeps actual query usage and the configured cap, including when collection fails
|
|
40
|
+
- External agents need approval before changing recurring index builds.
|
|
41
|
+
- Query cost tracking distinguishes unknown BigQuery usage from zero-byte results.
|
|
23
42
|
- Analytics figures require complete, scope-matched warehouse evidence
|
|
24
43
|
- Analytics keeps malformed metric values out of verified summaries
|
|
25
44
|
- Analytics keeps verified metrics available when another requested dbt metric is unavailable
|
|
@@ -29,8 +48,23 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
29
48
|
- Analytics withholds warehouse figures when an owner-defined dbt metric query fails.
|
|
30
49
|
- Warehouse figures stay hidden when a failed dbt query cannot verify the calculation.
|
|
31
50
|
|
|
51
|
+
## 2026-10-22
|
|
52
|
+
|
|
53
|
+
### Added
|
|
54
|
+
|
|
55
|
+
- Tables, metric tiles and charts can show a number of seconds as a duration such as 16 min or 7.4 hours, and duration columns sort by time.
|
|
56
|
+
|
|
57
|
+
### Improved
|
|
58
|
+
|
|
59
|
+
- Approval links from a connected agent, such as Claude Code, now open the review inside the app, in its own theme.
|
|
60
|
+
- Extension panels on dashboards are as tall as their content, so a one-line extension no longer leaves an empty band below it
|
|
61
|
+
|
|
32
62
|
## 2026-10-21
|
|
33
63
|
|
|
64
|
+
### Added
|
|
65
|
+
|
|
66
|
+
- You can pin a shared chat just for yourself, or hide it from your list and undo that from the toast.
|
|
67
|
+
|
|
34
68
|
### Improved
|
|
35
69
|
|
|
36
70
|
- Analytics recognizes questions about connected data, product analytics, sessions, dashboards, and charts.
|
|
@@ -43,6 +77,10 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
43
77
|
|
|
44
78
|
## 2026-10-20
|
|
45
79
|
|
|
80
|
+
### Added
|
|
81
|
+
|
|
82
|
+
- Custom SQL charts can open configured record details on click
|
|
83
|
+
|
|
46
84
|
### Fixed
|
|
47
85
|
|
|
48
86
|
- Blog signup attribution excludes signups before the first visit and URLs on unrelated hosts
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
} from "@agent-native/core/server";
|
|
6
6
|
import {
|
|
7
7
|
defineAutomation,
|
|
8
|
+
isOutsideAutomationOrigin,
|
|
8
9
|
listAutomationDefinitions,
|
|
9
10
|
updateAutomation,
|
|
10
11
|
} from "@agent-native/core/triggers";
|
|
@@ -26,6 +27,7 @@ const INDEX_RUN_BODY = [
|
|
|
26
27
|
].join("\n");
|
|
27
28
|
|
|
28
29
|
export default defineAction({
|
|
30
|
+
needsApproval: (_input, ctx) => isOutsideAutomationOrigin(ctx),
|
|
29
31
|
mcpAnnotations: {
|
|
30
32
|
readOnlyHint: false,
|
|
31
33
|
destructiveHint: false,
|
|
@@ -65,7 +67,14 @@ export default defineAction({
|
|
|
65
67
|
const current = await readIndexSchedule(admin.orgId);
|
|
66
68
|
const name =
|
|
67
69
|
current.automationName ?? DEFAULT_INDEX_SCHEDULE_AUTOMATION_NAME;
|
|
68
|
-
const actor = {
|
|
70
|
+
const actor = {
|
|
71
|
+
userEmail: admin.userEmail,
|
|
72
|
+
orgId: admin.orgId,
|
|
73
|
+
appId,
|
|
74
|
+
caller: ctx.caller,
|
|
75
|
+
networkProtocol: ctx.networkProtocol,
|
|
76
|
+
automation: ctx.automation,
|
|
77
|
+
};
|
|
69
78
|
const definitions = await listAutomationDefinitions(actor, "organization");
|
|
70
79
|
const exists = definitions.some((definition) => definition.name === name);
|
|
71
80
|
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
type ChartPointLimit,
|
|
38
38
|
type HeatmapKeys,
|
|
39
39
|
} from "@shared/panel-render-contract";
|
|
40
|
-
import { numberTableColumns } from "@shared/table-columns";
|
|
40
|
+
import { numberTableColumns, tableQuantity } from "@shared/table-columns";
|
|
41
41
|
import {
|
|
42
42
|
FUNNEL_OUTCOME_FILLS,
|
|
43
43
|
FUNNEL_OUTCOME_SEGMENTS,
|
|
@@ -2480,6 +2480,8 @@ export function sortTableRows(
|
|
|
2480
2480
|
rows: Record<string, unknown>[],
|
|
2481
2481
|
sorts: TableSort[],
|
|
2482
2482
|
columns: TableColumnConfig[] = [],
|
|
2483
|
+
// The columns that line up as numbers, when the caller already has them.
|
|
2484
|
+
numberColumns?: ReadonlySet<string>,
|
|
2483
2485
|
): Record<string, unknown>[] {
|
|
2484
2486
|
if (sorts.length === 0) return rows;
|
|
2485
2487
|
|
|
@@ -2489,8 +2491,30 @@ export function sortTableRows(
|
|
|
2489
2491
|
const isEmpty = (key: string, value: unknown) =>
|
|
2490
2492
|
formats.get(key) === "duration" ? isEmptyDuration(value) : value == null;
|
|
2491
2493
|
|
|
2494
|
+
// Text that reads as a number sorts by it, and a duration such as
|
|
2495
|
+
// "4.8 days" by how long it is, in a column that lines up as numbers.
|
|
2496
|
+
const numeric =
|
|
2497
|
+
numberColumns ??
|
|
2498
|
+
numberTableColumns(
|
|
2499
|
+
sorts.map(
|
|
2500
|
+
(sort) =>
|
|
2501
|
+
columns.find((col) => col.key === sort.key) ?? { key: sort.key },
|
|
2502
|
+
),
|
|
2503
|
+
rows,
|
|
2504
|
+
);
|
|
2505
|
+
const quantity = (key: string, value: unknown) =>
|
|
2506
|
+
numericTableValue(value) ??
|
|
2507
|
+
(numeric.has(key) ? tableQuantity(value) : null);
|
|
2508
|
+
|
|
2492
2509
|
return rows
|
|
2493
|
-
.map((row, index) => ({
|
|
2510
|
+
.map((row, index) => ({
|
|
2511
|
+
row,
|
|
2512
|
+
index,
|
|
2513
|
+
// Read each sorted cell once, not on every comparison.
|
|
2514
|
+
quantities: new Map<string, number | null>(
|
|
2515
|
+
sorts.map((sort) => [sort.key, quantity(sort.key, row[sort.key])]),
|
|
2516
|
+
),
|
|
2517
|
+
}))
|
|
2494
2518
|
.sort((a, b) => {
|
|
2495
2519
|
for (const sort of sorts) {
|
|
2496
2520
|
const av = a.row[sort.key];
|
|
@@ -2501,8 +2525,8 @@ export function sortTableRows(
|
|
|
2501
2525
|
if (aEmpty) return 1;
|
|
2502
2526
|
if (bEmpty) return -1;
|
|
2503
2527
|
|
|
2504
|
-
const an =
|
|
2505
|
-
const bn =
|
|
2528
|
+
const an = a.quantities.get(sort.key) ?? null;
|
|
2529
|
+
const bn = b.quantities.get(sort.key) ?? null;
|
|
2506
2530
|
|
|
2507
2531
|
if (an !== null && bn === null) return -1;
|
|
2508
2532
|
if (an === null && bn !== null) return 1;
|
|
@@ -3070,11 +3094,17 @@ function TableRenderer({
|
|
|
3070
3094
|
const [requestedPage, setPage] = useState(0);
|
|
3071
3095
|
const [pageSize, setPageSize] = useState(DEFAULT_TABLE_PAGE_SIZE);
|
|
3072
3096
|
|
|
3097
|
+
// Formats, not widths, decide these, so resizing a column doesn't redo it.
|
|
3098
|
+
const numberColumns = useMemo(
|
|
3099
|
+
() => numberTableColumns(savedColumns, limitedRows),
|
|
3100
|
+
[savedColumns, limitedRows],
|
|
3101
|
+
);
|
|
3102
|
+
|
|
3073
3103
|
const sortedRows = useMemo(() => {
|
|
3074
3104
|
return sortable
|
|
3075
|
-
? sortTableRows(limitedRows, sortColumns, savedColumns)
|
|
3105
|
+
? sortTableRows(limitedRows, sortColumns, savedColumns, numberColumns)
|
|
3076
3106
|
: limitedRows;
|
|
3077
|
-
}, [limitedRows, sortColumns, sortable, savedColumns]);
|
|
3107
|
+
}, [limitedRows, sortColumns, sortable, savedColumns, numberColumns]);
|
|
3078
3108
|
|
|
3079
3109
|
const pageCount = Math.ceil(sortedRows.length / pageSize);
|
|
3080
3110
|
// A refresh can return fewer rows than the page a viewer was on; show the
|
|
@@ -3082,10 +3112,6 @@ function TableRenderer({
|
|
|
3082
3112
|
const page = Math.min(requestedPage, Math.max(pageCount - 1, 0));
|
|
3083
3113
|
const displayRows = sortedRows.slice(page * pageSize, (page + 1) * pageSize);
|
|
3084
3114
|
|
|
3085
|
-
const numberColumns = useMemo(
|
|
3086
|
-
() => numberTableColumns(columns, limitedRows),
|
|
3087
|
-
[columns, limitedRows],
|
|
3088
|
-
);
|
|
3089
3115
|
const fillKey = tableFillColumn(columns, numberColumns);
|
|
3090
3116
|
// The fill column's max-width of 0 drops its content from the table's
|
|
3091
3117
|
// minimum width, so it takes only the spare width; a width set on it (saved
|
|
@@ -14,6 +14,11 @@
|
|
|
14
14
|
"typecheck": "agent-native typecheck",
|
|
15
15
|
"migrate:production": "tsx scripts/migrate-production.ts",
|
|
16
16
|
"journey:capture": "tsx scripts/journey-capture.ts",
|
|
17
|
+
"radar:query": "tsx scripts/radar/query.ts",
|
|
18
|
+
"radar:watch": "tsx scripts/radar/watch.ts",
|
|
19
|
+
"radar:triage": "tsx scripts/radar/triage.ts",
|
|
20
|
+
"radar:ab": "tsx scripts/radar/ab.ts",
|
|
21
|
+
"radar:report": "tsx scripts/radar/report.ts",
|
|
17
22
|
"journey:snapshot": "tsx scripts/journey-snapshot.ts",
|
|
18
23
|
"source-index": "tsx scripts/build-source-index.ts",
|
|
19
24
|
"backfill:first-party-bigquery": "tsx scripts/first-party-analytics-bigquery-backfill.ts",
|