@agent-native/core 0.101.14 → 0.102.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +12 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/cli/templates-meta.ts +13 -0
- package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +1 -1
- package/corpus/core/src/client/org/OrgSwitcher.tsx +2 -0
- package/corpus/templates/analytics/changelog/2026-07-15-fixed-the-agent-discarding-a-successful-dashboard-edit-and-r.md +6 -0
- package/corpus/templates/analytics/server/lib/real-data-actions.ts +30 -1
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +15 -0
- package/corpus/templates/content/actions/_database-source-utils.ts +59 -4
- package/corpus/templates/content/actions/prepare-builder-source-review.ts +9 -0
- package/corpus/templates/content/actions/preview-builder-source-review.ts +6 -4
- package/corpus/templates/content/app/components/editor/DescriptionField.tsx +10 -2
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +4 -0
- package/corpus/templates/content/changelog/2026-07-15-page-and-database-descriptions-now-use-a-clean-single-line-f.md +6 -0
- package/corpus/templates/content/changelog/2026-07-15-selected-builder-reviews-now-load-only-the-chosen-rows-avoid.md +6 -0
- package/corpus/templates/content/shared/api.ts +1 -0
- package/corpus/templates/tasks/.agents/commands/visual-plan.md +9 -0
- package/corpus/templates/tasks/.agents/commands/visual-recap.md +8 -0
- package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +492 -0
- package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +189 -0
- package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +76 -0
- package/corpus/templates/tasks/.agents/skills/agent-watchdog/README.md +43 -0
- package/corpus/templates/tasks/.agents/skills/agent-watchdog/SKILL.md +110 -0
- package/corpus/templates/tasks/.agents/skills/agent-watchdog/agents/openai.yaml +4 -0
- package/corpus/templates/tasks/.agents/skills/capture-learnings/SKILL.md +89 -0
- package/corpus/templates/tasks/.agents/skills/change-summary/SKILL.md +83 -0
- package/corpus/templates/tasks/.agents/skills/create-skill/SKILL.md +221 -0
- package/corpus/templates/tasks/.agents/skills/delegate-to-agent/SKILL.md +263 -0
- package/corpus/templates/tasks/.agents/skills/efficient-fable/README.md +75 -0
- package/corpus/templates/tasks/.agents/skills/efficient-fable/SKILL.md +95 -0
- package/corpus/templates/tasks/.agents/skills/efficient-frontier/README.md +53 -0
- package/corpus/templates/tasks/.agents/skills/efficient-frontier/SKILL.md +73 -0
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +112 -0
- package/corpus/templates/tasks/.agents/skills/plan-arbiter/README.md +41 -0
- package/corpus/templates/tasks/.agents/skills/plan-arbiter/SKILL.md +114 -0
- package/corpus/templates/tasks/.agents/skills/plan-arbiter/agents/openai.yaml +4 -0
- package/corpus/templates/tasks/.agents/skills/plow-ahead/README.md +42 -0
- package/corpus/templates/tasks/.agents/skills/plow-ahead/SKILL.md +104 -0
- package/corpus/templates/tasks/.agents/skills/plow-ahead/agents/openai.yaml +4 -0
- package/corpus/templates/tasks/.agents/skills/quick-recap/README.md +55 -0
- package/corpus/templates/tasks/.agents/skills/quick-recap/SKILL.md +54 -0
- package/corpus/templates/tasks/.agents/skills/read-the-damn-docs/README.md +54 -0
- package/corpus/templates/tasks/.agents/skills/read-the-damn-docs/SKILL.md +126 -0
- package/corpus/templates/tasks/.agents/skills/read-the-damn-docs/agents/openai.yaml +4 -0
- package/corpus/templates/tasks/.agents/skills/real-time-sync/SKILL.md +232 -0
- package/corpus/templates/tasks/.agents/skills/security/SKILL.md +280 -0
- package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +106 -0
- package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +95 -0
- package/corpus/templates/tasks/.agents/skills/stay-within-limits/README.md +61 -0
- package/corpus/templates/tasks/.agents/skills/stay-within-limits/SKILL.md +83 -0
- package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/tasks/.agents/skills/visual-plan/SKILL.md +547 -0
- package/corpus/templates/tasks/.agents/skills/visual-plan/agent-native-skill.json +12 -0
- package/corpus/templates/tasks/.agents/skills/visual-plan/references/canvas.md +121 -0
- package/corpus/templates/tasks/.agents/skills/visual-plan/references/document-quality.md +178 -0
- package/corpus/templates/tasks/.agents/skills/visual-plan/references/exemplar.md +62 -0
- package/corpus/templates/tasks/.agents/skills/visual-plan/references/wireframe.md +264 -0
- package/corpus/templates/tasks/.agents/skills/visual-recap/SKILL.md +634 -0
- package/corpus/templates/tasks/.agents/skills/visual-recap/agent-native-skill.json +12 -0
- package/corpus/templates/tasks/.agents/skills/visual-recap/references/wireframe.md +264 -0
- package/corpus/templates/tasks/.claude/commands/visual-plan.md +9 -0
- package/corpus/templates/tasks/.claude/commands/visual-recap.md +8 -0
- package/corpus/templates/tasks/.env.example +5 -0
- package/corpus/templates/tasks/.ignore +0 -0
- package/corpus/templates/tasks/.prettierrc +5 -0
- package/corpus/templates/tasks/AGENTS.md +158 -0
- package/corpus/templates/tasks/DEVELOPING.md +185 -0
- package/corpus/templates/tasks/README.md +16 -0
- package/corpus/templates/tasks/actions/bulk-delete-inbox-items.ts +24 -0
- package/corpus/templates/tasks/actions/bulk-delete-tasks.ts +21 -0
- package/corpus/templates/tasks/actions/bulk-mark-inbox-items-ready.ts +27 -0
- package/corpus/templates/tasks/actions/bulk-update-tasks.ts +35 -0
- package/corpus/templates/tasks/actions/create-custom-field.ts +22 -0
- package/corpus/templates/tasks/actions/create-inbox-item.ts +30 -0
- package/corpus/templates/tasks/actions/create-task.ts +33 -0
- package/corpus/templates/tasks/actions/delete-custom-field.ts +19 -0
- package/corpus/templates/tasks/actions/delete-inbox-item.ts +17 -0
- package/corpus/templates/tasks/actions/delete-task.ts +17 -0
- package/corpus/templates/tasks/actions/lib/boolean-query-param.ts +30 -0
- package/corpus/templates/tasks/actions/list-custom-fields.ts +18 -0
- package/corpus/templates/tasks/actions/list-inbox-items.ts +16 -0
- package/corpus/templates/tasks/actions/list-tasks.ts +52 -0
- package/corpus/templates/tasks/actions/list-visible-task-fields.ts +18 -0
- package/corpus/templates/tasks/actions/mark-inbox-item-ready.ts +31 -0
- package/corpus/templates/tasks/actions/navigate.ts +51 -0
- package/corpus/templates/tasks/actions/reorder-custom-fields.ts +27 -0
- package/corpus/templates/tasks/actions/reorder-inbox-items.ts +24 -0
- package/corpus/templates/tasks/actions/reorder-tasks.ts +29 -0
- package/corpus/templates/tasks/actions/run.ts +2 -0
- package/corpus/templates/tasks/actions/update-custom-field.ts +33 -0
- package/corpus/templates/tasks/actions/update-inbox-item.ts +24 -0
- package/corpus/templates/tasks/actions/update-task.ts +68 -0
- package/corpus/templates/tasks/actions/update-visible-task-fields.ts +27 -0
- package/corpus/templates/tasks/actions/view-screen-helpers.ts +68 -0
- package/corpus/templates/tasks/actions/view-screen.ts +207 -0
- package/corpus/templates/tasks/app/components/custom-fields/FieldCreateBar.tsx +121 -0
- package/corpus/templates/tasks/app/components/custom-fields/FieldListRow.tsx +116 -0
- package/corpus/templates/tasks/app/components/custom-fields/FieldsList.tsx +225 -0
- package/corpus/templates/tasks/app/components/custom-fields/FieldsListSkeleton.tsx +18 -0
- package/corpus/templates/tasks/app/components/custom-fields/FieldsPage.tsx +42 -0
- package/corpus/templates/tasks/app/components/custom-fields/editor/FieldEditorSidebar.tsx +69 -0
- package/corpus/templates/tasks/app/components/custom-fields/editor/FieldTitleSection.tsx +32 -0
- package/corpus/templates/tasks/app/components/custom-fields/editor/config/CurrencyConfigControl.tsx +49 -0
- package/corpus/templates/tasks/app/components/custom-fields/editor/config/FieldConfigControl.tsx +56 -0
- package/corpus/templates/tasks/app/components/custom-fields/editor/config/NumberConfigControl.tsx +52 -0
- package/corpus/templates/tasks/app/components/custom-fields/editor/config/PercentConfigControl.tsx +30 -0
- package/corpus/templates/tasks/app/components/custom-fields/editor/config/SelectConfigControl.tsx +135 -0
- package/corpus/templates/tasks/app/components/custom-fields/editor/config/select-colors.ts +23 -0
- package/corpus/templates/tasks/app/components/custom-fields/editor/config/utils.ts +52 -0
- package/corpus/templates/tasks/app/components/custom-fields/editor/types.ts +7 -0
- package/corpus/templates/tasks/app/components/dnd/SortableItem.tsx +72 -0
- package/corpus/templates/tasks/app/components/dnd/SortableList.tsx +136 -0
- package/corpus/templates/tasks/app/components/dnd/reorder-moving-items.ts +160 -0
- package/corpus/templates/tasks/app/components/dnd/sortable-drag-props.ts +60 -0
- package/corpus/templates/tasks/app/components/inbox/InboxList.tsx +222 -0
- package/corpus/templates/tasks/app/components/inbox/InboxListPage.tsx +39 -0
- package/corpus/templates/tasks/app/components/inbox/InboxListRow.tsx +122 -0
- package/corpus/templates/tasks/app/components/layout/Header.tsx +55 -0
- package/corpus/templates/tasks/app/components/layout/HeaderActions.tsx +84 -0
- package/corpus/templates/tasks/app/components/layout/Layout.tsx +134 -0
- package/corpus/templates/tasks/app/components/layout/Sidebar.tsx +211 -0
- package/corpus/templates/tasks/app/components/shared/AddListItemInput.tsx +57 -0
- package/corpus/templates/tasks/app/components/shared/AlertDialog.tsx +53 -0
- package/corpus/templates/tasks/app/components/shared/BulkDeleteDialog.tsx +76 -0
- package/corpus/templates/tasks/app/components/shared/ChipSelect.tsx +240 -0
- package/corpus/templates/tasks/app/components/shared/DeleteItemDialog.tsx +40 -0
- package/corpus/templates/tasks/app/components/shared/InlineEditable.tsx +166 -0
- package/corpus/templates/tasks/app/components/shared/ListEmptyState.tsx +13 -0
- package/corpus/templates/tasks/app/components/shared/ListErrorMessage.tsx +15 -0
- package/corpus/templates/tasks/app/components/shared/ListViewHeader.tsx +75 -0
- package/corpus/templates/tasks/app/components/shared/PageHeader.tsx +25 -0
- package/corpus/templates/tasks/app/components/shared/RowActionsMenu.tsx +42 -0
- package/corpus/templates/tasks/app/components/shared/SidePanel.tsx +99 -0
- package/corpus/templates/tasks/app/components/shared/dnd/ListRowPreview.tsx +37 -0
- package/corpus/templates/tasks/app/components/shared/list/List.tsx +63 -0
- package/corpus/templates/tasks/app/components/shared/list/ListRow.tsx +159 -0
- package/corpus/templates/tasks/app/components/shared/list/ListRowDragHandle.tsx +52 -0
- package/corpus/templates/tasks/app/components/shared/list/ListSkeletonRows.tsx +11 -0
- package/corpus/templates/tasks/app/components/shared/list/SortableListItemShell.tsx +32 -0
- package/corpus/templates/tasks/app/components/shared/list/types.ts +1 -0
- package/corpus/templates/tasks/app/components/shared/selection/ListSelectionBar.tsx +158 -0
- package/corpus/templates/tasks/app/components/shared/selection/ListSelectionHeaderToggle.tsx +28 -0
- package/corpus/templates/tasks/app/components/shared/selection/ListSelectionToolbar.tsx +81 -0
- package/corpus/templates/tasks/app/components/shared/selection/get-list-row-selection-ui.ts +41 -0
- package/corpus/templates/tasks/app/components/shared/selection/use-list-selection.ts +196 -0
- package/corpus/templates/tasks/app/components/tasks/TaskList.tsx +333 -0
- package/corpus/templates/tasks/app/components/tasks/TaskListHeaderRow.tsx +46 -0
- package/corpus/templates/tasks/app/components/tasks/TaskListPage.tsx +115 -0
- package/corpus/templates/tasks/app/components/tasks/TaskListRow.css +49 -0
- package/corpus/templates/tasks/app/components/tasks/TaskListRow.tsx +307 -0
- package/corpus/templates/tasks/app/components/tasks/fields/TaskFieldsSidebar.tsx +102 -0
- package/corpus/templates/tasks/app/components/tasks/fields/TaskTitleSection.tsx +27 -0
- package/corpus/templates/tasks/app/components/tasks/fields/controls/DateValueControl.tsx +21 -0
- package/corpus/templates/tasks/app/components/tasks/fields/controls/FieldValueControl.tsx +76 -0
- package/corpus/templates/tasks/app/components/tasks/fields/controls/MultiSelectValueControl.tsx +52 -0
- package/corpus/templates/tasks/app/components/tasks/fields/controls/NumberValueControl.tsx +56 -0
- package/corpus/templates/tasks/app/components/tasks/fields/controls/RichTextValueControl.tsx +115 -0
- package/corpus/templates/tasks/app/components/tasks/fields/controls/SingleSelectValueControl.tsx +61 -0
- package/corpus/templates/tasks/app/components/tasks/fields/controls/TextValueControl.tsx +20 -0
- package/corpus/templates/tasks/app/components/tasks/use-task-row-completion-animation.ts +181 -0
- package/corpus/templates/tasks/app/components/ui/accordion.tsx +56 -0
- package/corpus/templates/tasks/app/components/ui/alert-dialog.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/alert.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/aspect-ratio.tsx +5 -0
- package/corpus/templates/tasks/app/components/ui/avatar.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/badge.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/breadcrumb.tsx +115 -0
- package/corpus/templates/tasks/app/components/ui/button.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/calendar.tsx +70 -0
- package/corpus/templates/tasks/app/components/ui/card.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/carousel.tsx +260 -0
- package/corpus/templates/tasks/app/components/ui/chart.tsx +379 -0
- package/corpus/templates/tasks/app/components/ui/checkbox.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/collapsible.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/command.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/context-menu.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/dialog.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/drawer.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/dropdown-menu.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/form.tsx +177 -0
- package/corpus/templates/tasks/app/components/ui/hover-card.tsx +27 -0
- package/corpus/templates/tasks/app/components/ui/input-otp.tsx +69 -0
- package/corpus/templates/tasks/app/components/ui/input.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/label.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/menubar.tsx +254 -0
- package/corpus/templates/tasks/app/components/ui/navigation-menu.tsx +128 -0
- package/corpus/templates/tasks/app/components/ui/pagination.tsx +121 -0
- package/corpus/templates/tasks/app/components/ui/popover.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/progress.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/radio-group.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/resizable.tsx +43 -0
- package/corpus/templates/tasks/app/components/ui/scroll-area.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/select.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/separator.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/sheet.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/sidebar.tsx +782 -0
- package/corpus/templates/tasks/app/components/ui/skeleton.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/slider.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/sonner.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/spinner.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/switch.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/table.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/tabs.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/textarea.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/toast.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/toaster.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/toggle-group.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/toggle.tsx +43 -0
- package/corpus/templates/tasks/app/components/ui/tooltip.tsx +1 -0
- package/corpus/templates/tasks/app/components/ui/use-toast.ts +3 -0
- package/corpus/templates/tasks/app/entry.client.tsx +19 -0
- package/corpus/templates/tasks/app/entry.server.tsx +10 -0
- package/corpus/templates/tasks/app/global.css +93 -0
- package/corpus/templates/tasks/app/hooks/cache.ts +31 -0
- package/corpus/templates/tasks/app/hooks/use-custom-fields.ts +93 -0
- package/corpus/templates/tasks/app/hooks/use-inbox-items.ts +196 -0
- package/corpus/templates/tasks/app/hooks/use-mobile.tsx +21 -0
- package/corpus/templates/tasks/app/hooks/use-navigation-state.ts +40 -0
- package/corpus/templates/tasks/app/hooks/use-tasks.ts +276 -0
- package/corpus/templates/tasks/app/hooks/use-toast.ts +188 -0
- package/corpus/templates/tasks/app/hooks/use-visible-task-fields.ts +140 -0
- package/corpus/templates/tasks/app/lib/app-config.ts +11 -0
- package/corpus/templates/tasks/app/lib/tab-id.ts +1 -0
- package/corpus/templates/tasks/app/lib/utils.ts +1 -0
- package/corpus/templates/tasks/app/root.tsx +130 -0
- package/corpus/templates/tasks/app/routes/_index.tsx +22 -0
- package/corpus/templates/tasks/app/routes/extensions.$id.$slug.tsx +2 -0
- package/corpus/templates/tasks/app/routes/extensions.$id.tsx +11 -0
- package/corpus/templates/tasks/app/routes/extensions._index.tsx +11 -0
- package/corpus/templates/tasks/app/routes/extensions.tsx +5 -0
- package/corpus/templates/tasks/app/routes/fields.tsx +16 -0
- package/corpus/templates/tasks/app/routes/inbox.tsx +16 -0
- package/corpus/templates/tasks/app/routes/tasks.tsx +17 -0
- package/corpus/templates/tasks/app/routes/team.tsx +17 -0
- package/corpus/templates/tasks/app/routes.ts +4 -0
- package/corpus/templates/tasks/app/vite-env.d.ts +6 -0
- package/corpus/templates/tasks/components.json +20 -0
- package/corpus/templates/tasks/data/sync-config.json +1 -0
- package/corpus/templates/tasks/docs/features/README.md +81 -0
- package/corpus/templates/tasks/docs/features/f1-tasks.mdx +67 -0
- package/corpus/templates/tasks/docs/features/f2-custom-fields.mdx +68 -0
- package/corpus/templates/tasks/docs/features/f3-projects.mdx +33 -0
- package/corpus/templates/tasks/docs/features/f4-inbox.mdx +55 -0
- package/corpus/templates/tasks/docs/features/f5-views.mdx +65 -0
- package/corpus/templates/tasks/docs/features/f6-search.mdx +43 -0
- package/corpus/templates/tasks/docs/features/f7-first-run.mdx +66 -0
- package/corpus/templates/tasks/docs/features/f8-chat.mdx +120 -0
- package/corpus/templates/tasks/e2e/global-setup.ts +42 -0
- package/corpus/templates/tasks/e2e/helpers/inbox.ts +71 -0
- package/corpus/templates/tasks/e2e/helpers/tasks.ts +99 -0
- package/corpus/templates/tasks/learnings.defaults.md +5 -0
- package/corpus/templates/tasks/netlify.toml +10 -0
- package/corpus/templates/tasks/package.json +104 -0
- package/corpus/templates/tasks/playwright.config.ts +34 -0
- package/corpus/templates/tasks/public/agent-native-icon-dark.svg +10 -0
- package/corpus/templates/tasks/public/agent-native-icon-light.svg +10 -0
- package/corpus/templates/tasks/public/agent-native-logo-dark.svg +21 -0
- package/corpus/templates/tasks/public/agent-native-logo-light.svg +21 -0
- package/corpus/templates/tasks/public/favicon.svg +1 -0
- package/corpus/templates/tasks/public/icon-180.svg +1 -0
- package/corpus/templates/tasks/public/icon-192.svg +1 -0
- package/corpus/templates/tasks/public/icon-512.svg +1 -0
- package/corpus/templates/tasks/public/manifest.json +21 -0
- package/corpus/templates/tasks/react-router.config.ts +7 -0
- package/corpus/templates/tasks/server/custom-fields/normalize.ts +163 -0
- package/corpus/templates/tasks/server/custom-fields/parse.ts +146 -0
- package/corpus/templates/tasks/server/custom-fields/schema.ts +147 -0
- package/corpus/templates/tasks/server/custom-fields/store.ts +425 -0
- package/corpus/templates/tasks/server/custom-fields/task-fields.ts +104 -0
- package/corpus/templates/tasks/server/custom-fields/types.ts +98 -0
- package/corpus/templates/tasks/server/custom-fields/validate.ts +210 -0
- package/corpus/templates/tasks/server/custom-fields/values/store.ts +386 -0
- package/corpus/templates/tasks/server/db/bulk-write.ts +30 -0
- package/corpus/templates/tasks/server/db/index.ts +5 -0
- package/corpus/templates/tasks/server/db/record-utils.ts +7 -0
- package/corpus/templates/tasks/server/db/schema.ts +67 -0
- package/corpus/templates/tasks/server/db/test-tasks-table.ts +76 -0
- package/corpus/templates/tasks/server/db/transaction.ts +6 -0
- package/corpus/templates/tasks/server/errors.ts +31 -0
- package/corpus/templates/tasks/server/inbox/store.ts +216 -0
- package/corpus/templates/tasks/server/middleware/auth.ts +15 -0
- package/corpus/templates/tasks/server/plugins/agent-chat.ts +46 -0
- package/corpus/templates/tasks/server/plugins/auth.ts +15 -0
- package/corpus/templates/tasks/server/plugins/db.ts +90 -0
- package/corpus/templates/tasks/server/routes/[...page].get.ts +5 -0
- package/corpus/templates/tasks/server/stored-items/store.ts +548 -0
- package/corpus/templates/tasks/server/tasks/store.ts +306 -0
- package/corpus/templates/tasks/server/user-config/store.ts +138 -0
- package/corpus/templates/tasks/shared/app-state-tabs.ts +15 -0
- package/corpus/templates/tasks/shared/boolean-param.ts +22 -0
- package/corpus/templates/tasks/shared/bulk-limits.ts +7 -0
- package/corpus/templates/tasks/shared/list-screen-snapshot.ts +90 -0
- package/corpus/templates/tasks/shared/navigation.ts +104 -0
- package/corpus/templates/tasks/shared/visible-task-fields.ts +2 -0
- package/corpus/templates/tasks/ssr-entry.ts +15 -0
- package/corpus/templates/tasks/tsconfig.json +24 -0
- package/corpus/templates/tasks/vite.config.ts +19 -0
- package/corpus/templates/tasks/vitest.config.ts +8 -0
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +13 -0
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/client/agent-page/AgentTabsPage.js +1 -1
- package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +2 -1
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +5 -5
- package/dist/resources/handlers.d.ts +3 -3
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/package.json +1 -1
package/corpus/README.md
CHANGED
package/corpus/core/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @agent-native/core
|
|
2
2
|
|
|
3
|
+
## 0.102.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- ab33ae7: Make the Agent Files tab taller and viewport-responsive, and let file previews fill the panel height with natural scrolling.
|
|
8
|
+
|
|
9
|
+
## 0.102.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 6498492: Add the Tasks template app — a task-list-first agent-native workspace with inbox triage, custom fields, and full action parity for UI and agent.
|
|
14
|
+
|
|
3
15
|
## 0.101.14
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/corpus/core/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.102.1",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -214,6 +214,19 @@ export const TEMPLATES: TemplateMeta[] = [
|
|
|
214
214
|
requiredPackages: ["embedding"],
|
|
215
215
|
core: true,
|
|
216
216
|
},
|
|
217
|
+
{
|
|
218
|
+
name: "tasks",
|
|
219
|
+
label: "Tasks",
|
|
220
|
+
hint: "Task-list-first workspace — inbox capture, custom fields, and drag-and-drop ordering",
|
|
221
|
+
icon: "ListCheck",
|
|
222
|
+
color: "#6366F1",
|
|
223
|
+
colorRgb: "99 102 241",
|
|
224
|
+
devPort: 8091,
|
|
225
|
+
prodUrl: "https://tasks.agent-native.com",
|
|
226
|
+
defaultMode: "prod",
|
|
227
|
+
hidden: true,
|
|
228
|
+
core: false,
|
|
229
|
+
},
|
|
217
230
|
{
|
|
218
231
|
name: "macros",
|
|
219
232
|
label: "Macros",
|
|
@@ -152,7 +152,7 @@ function EmptySlot({ label }: { label: string }) {
|
|
|
152
152
|
|
|
153
153
|
function FilesTab({ scope }: AgentPageTabProps) {
|
|
154
154
|
return (
|
|
155
|
-
<div className="h-
|
|
155
|
+
<div className="h-[calc(100vh-14rem)] min-h-[480px]">
|
|
156
156
|
<ResourcesPanel
|
|
157
157
|
key={scope}
|
|
158
158
|
showMcpServers={false}
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
IconCode,
|
|
15
15
|
IconFileText,
|
|
16
16
|
IconLayoutBoard,
|
|
17
|
+
IconListCheck,
|
|
17
18
|
IconLoader2,
|
|
18
19
|
IconLogout,
|
|
19
20
|
IconMail,
|
|
@@ -122,6 +123,7 @@ const APP_ICON_MAP: Record<string, typeof IconApps> = {
|
|
|
122
123
|
CalendarTime: IconCalendarTime,
|
|
123
124
|
Globe: IconWorld,
|
|
124
125
|
Photo: IconPhoto,
|
|
126
|
+
ListCheck: IconListCheck,
|
|
125
127
|
};
|
|
126
128
|
|
|
127
129
|
function appMenuIcon(app: OrgSwitcherAppLink): typeof IconApps {
|
|
@@ -76,6 +76,20 @@ export const DASHBOARD_CONSTRUCTION_ACTIONS = new Set([
|
|
|
76
76
|
"get-extension",
|
|
77
77
|
]);
|
|
78
78
|
|
|
79
|
+
// Dashboard authoring/save actions. Unlike the read actions above, running one
|
|
80
|
+
// of these is proof the turn actually edited or built a dashboard/extension —
|
|
81
|
+
// which is a legitimate non-query completion. A saved SQL panel the user runs
|
|
82
|
+
// themselves is not a fabricated metric, so the guard only needs to keep
|
|
83
|
+
// blocking drafts that state invented numbers (draftClaimsAnalyticsMetrics).
|
|
84
|
+
export const DASHBOARD_MUTATION_ACTIONS = new Set([
|
|
85
|
+
"mutate-dashboard",
|
|
86
|
+
"update-dashboard",
|
|
87
|
+
"compose-dashboard",
|
|
88
|
+
"install-dashboard-template",
|
|
89
|
+
"create-extension",
|
|
90
|
+
"update-extension",
|
|
91
|
+
]);
|
|
92
|
+
|
|
79
93
|
const RUN_CODE_BRIDGE_TOOLS_USED = /^bridgeToolsUsed:\s*(.+)$/im;
|
|
80
94
|
|
|
81
95
|
const MCP_DATA_SOURCE_TOKENS = [
|
|
@@ -120,11 +134,15 @@ function isDashboardConstructionActionName(name: string): boolean {
|
|
|
120
134
|
return DASHBOARD_CONSTRUCTION_ACTIONS.has(normalizeActionToolName(name));
|
|
121
135
|
}
|
|
122
136
|
|
|
137
|
+
function isDashboardMutationActionName(name: string): boolean {
|
|
138
|
+
return DASHBOARD_MUTATION_ACTIONS.has(normalizeActionToolName(name));
|
|
139
|
+
}
|
|
140
|
+
|
|
123
141
|
// "Build/clone/template" language targeting a dashboard/extension/panel is
|
|
124
142
|
// dashboard construction, distinct from an analytics-result question. Turns
|
|
125
143
|
// like this may inspect and clone a template without running a metric query.
|
|
126
144
|
const DASHBOARD_CONSTRUCTION_INTENT_TERMS =
|
|
127
|
-
/\b(build|create|make|clone|copy|duplicate|adapt|template|based (?:off|on)|using .{1,80}? as a template)\b/i;
|
|
145
|
+
/\b(build|create|make|clone|copy|duplicate|adapt|update|edit|change|modify|rename|adjust|simplify|switch|template|based (?:off|on)|using .{1,80}? as a template)\b/i;
|
|
128
146
|
|
|
129
147
|
const DASHBOARD_CONSTRUCTION_TARGET_TERMS =
|
|
130
148
|
/\b(dashboard|extension|panel|widget)\b/i;
|
|
@@ -151,6 +169,17 @@ export function hasDashboardConstructionAttempt(
|
|
|
151
169
|
});
|
|
152
170
|
}
|
|
153
171
|
|
|
172
|
+
export function hasDashboardMutationAttempt(
|
|
173
|
+
toolResults:
|
|
174
|
+
| Array<{ name?: string; isError?: boolean; content?: string }>
|
|
175
|
+
| undefined,
|
|
176
|
+
): boolean {
|
|
177
|
+
return (toolResults ?? []).some((result) => {
|
|
178
|
+
if (result.isError) return false;
|
|
179
|
+
return isDashboardMutationActionName(String(result.name ?? ""));
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
|
|
154
183
|
function isCorpusSourceActionName(name: string): boolean {
|
|
155
184
|
return CORPUS_SOURCE_ACTIONS.has(normalizeActionToolName(name));
|
|
156
185
|
}
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
draftClaimsAnalyticsMetrics,
|
|
18
18
|
failedDataQueryAttemptMessage,
|
|
19
19
|
hasDashboardConstructionAttempt,
|
|
20
|
+
hasDashboardMutationAttempt,
|
|
20
21
|
hasExplicitPartialDisclosure,
|
|
21
22
|
hasFailedCorpusWorkflowEvidence,
|
|
22
23
|
hasDataQueryAttempt,
|
|
@@ -525,6 +526,20 @@ export function realDataFinalGuard(
|
|
|
525
526
|
"I can't make a confident exhaustive analytics claim yet because part of the source evidence was aborted, truncated, or still paginated. I need to recover the missing coverage or state the answer as partial with the inspected sample size.",
|
|
526
527
|
};
|
|
527
528
|
}
|
|
529
|
+
// Dashboard EDIT turns: the user asked to change an existing dashboard and
|
|
530
|
+
// the agent actually saved a mutation (mutate-dashboard/update-dashboard/
|
|
531
|
+
// etc.). This is a legitimate non-query completion regardless of how the
|
|
532
|
+
// request was phrased ("update the panels" does not match the construction
|
|
533
|
+
// intent regex), so it must not be steered into a data-source query. Anchor
|
|
534
|
+
// on tool evidence, not user wording, and still block any draft that states
|
|
535
|
+
// invented numbers via draftClaimsAnalyticsMetrics. A saved SQL panel the
|
|
536
|
+
// user runs themselves is not a fabricated metric.
|
|
537
|
+
if (
|
|
538
|
+
hasDashboardMutationAttempt(context.toolResults) &&
|
|
539
|
+
!draftClaimsAnalyticsMetrics(context.text)
|
|
540
|
+
) {
|
|
541
|
+
return null;
|
|
542
|
+
}
|
|
528
543
|
// Dashboard construction/template-clone turns may inspect and clone an
|
|
529
544
|
// existing dashboard/extension without running a metric query, as long as
|
|
530
545
|
// the draft does not invent numbers. Check this before the generic
|
|
@@ -3017,6 +3017,7 @@ export async function getContentDatabaseSourceSnapshotById(
|
|
|
3017
3017
|
export async function getContentDatabaseSourceSnapshotForWrite(
|
|
3018
3018
|
database: ContentDatabaseRow | ContentDatabase,
|
|
3019
3019
|
sourceId?: string | null,
|
|
3020
|
+
documentIds?: string[],
|
|
3020
3021
|
): Promise<ContentDatabaseSource | null> {
|
|
3021
3022
|
const db = getDb();
|
|
3022
3023
|
if (sourceId) {
|
|
@@ -3032,6 +3033,7 @@ export async function getContentDatabaseSourceSnapshotForWrite(
|
|
|
3032
3033
|
return source
|
|
3033
3034
|
? loadSourceSnapshot(source, database, {
|
|
3034
3035
|
includeHeavyBuilderBodyValues: true,
|
|
3036
|
+
documentIds,
|
|
3035
3037
|
})
|
|
3036
3038
|
: null;
|
|
3037
3039
|
}
|
|
@@ -3046,6 +3048,7 @@ export async function getContentDatabaseSourceSnapshotForWrite(
|
|
|
3046
3048
|
return source
|
|
3047
3049
|
? loadSourceSnapshot(source, database, {
|
|
3048
3050
|
includeHeavyBuilderBodyValues: true,
|
|
3051
|
+
documentIds,
|
|
3049
3052
|
})
|
|
3050
3053
|
: null;
|
|
3051
3054
|
}
|
|
@@ -3086,8 +3089,12 @@ async function readSourceSnapshotRowsOnce(args: {
|
|
|
3086
3089
|
database: ContentDatabaseRow | ContentDatabase;
|
|
3087
3090
|
isBuilderSource: boolean;
|
|
3088
3091
|
includeHeavyBuilderBodyValues: boolean;
|
|
3092
|
+
documentIds?: string[];
|
|
3089
3093
|
}) {
|
|
3090
3094
|
const db = getDb();
|
|
3095
|
+
const documentScope = args.documentIds?.length
|
|
3096
|
+
? new Set(args.documentIds)
|
|
3097
|
+
: null;
|
|
3091
3098
|
const rowRows = await db
|
|
3092
3099
|
.select(
|
|
3093
3100
|
sourceSnapshotRowSelection({
|
|
@@ -3096,7 +3103,16 @@ async function readSourceSnapshotRowsOnce(args: {
|
|
|
3096
3103
|
}),
|
|
3097
3104
|
)
|
|
3098
3105
|
.from(schema.contentDatabaseSourceRows)
|
|
3099
|
-
.where(
|
|
3106
|
+
.where(
|
|
3107
|
+
documentScope
|
|
3108
|
+
? and(
|
|
3109
|
+
eq(schema.contentDatabaseSourceRows.sourceId, args.source.id),
|
|
3110
|
+
inArray(schema.contentDatabaseSourceRows.documentId, [
|
|
3111
|
+
...documentScope,
|
|
3112
|
+
]),
|
|
3113
|
+
)
|
|
3114
|
+
: eq(schema.contentDatabaseSourceRows.sourceId, args.source.id),
|
|
3115
|
+
)
|
|
3100
3116
|
.orderBy(asc(schema.contentDatabaseSourceRows.createdAt));
|
|
3101
3117
|
// For Builder sources, load ALL database items (not just synced source rows)
|
|
3102
3118
|
// so brand-new local rows (no source link) can become create_draft change-sets.
|
|
@@ -3112,6 +3128,13 @@ async function readSourceSnapshotRowsOnce(args: {
|
|
|
3112
3128
|
and(
|
|
3113
3129
|
eq(schema.contentDatabaseItems.databaseId, args.database.id),
|
|
3114
3130
|
eq(schema.contentDatabaseItems.ownerEmail, args.source.ownerEmail),
|
|
3131
|
+
...(documentScope
|
|
3132
|
+
? [
|
|
3133
|
+
inArray(schema.contentDatabaseItems.documentId, [
|
|
3134
|
+
...documentScope,
|
|
3135
|
+
]),
|
|
3136
|
+
]
|
|
3137
|
+
: []),
|
|
3115
3138
|
),
|
|
3116
3139
|
)
|
|
3117
3140
|
: [];
|
|
@@ -3180,8 +3203,12 @@ async function sourceSnapshotConsistencyMarker(args: {
|
|
|
3180
3203
|
database: ContentDatabaseRow | ContentDatabase;
|
|
3181
3204
|
isBuilderSource: boolean;
|
|
3182
3205
|
includeHeavyBuilderBodyValues: boolean;
|
|
3206
|
+
documentIds?: string[];
|
|
3183
3207
|
}) {
|
|
3184
3208
|
const db = getDb();
|
|
3209
|
+
const documentScope = args.documentIds?.length
|
|
3210
|
+
? new Set(args.documentIds)
|
|
3211
|
+
: null;
|
|
3185
3212
|
const [rows] = await db
|
|
3186
3213
|
.select({
|
|
3187
3214
|
count: sql<number>`COUNT(*)`,
|
|
@@ -3190,7 +3217,16 @@ async function sourceSnapshotConsistencyMarker(args: {
|
|
|
3190
3217
|
>`MAX(${schema.contentDatabaseSourceRows.updatedAt})`,
|
|
3191
3218
|
})
|
|
3192
3219
|
.from(schema.contentDatabaseSourceRows)
|
|
3193
|
-
.where(
|
|
3220
|
+
.where(
|
|
3221
|
+
documentScope
|
|
3222
|
+
? and(
|
|
3223
|
+
eq(schema.contentDatabaseSourceRows.sourceId, args.source.id),
|
|
3224
|
+
inArray(schema.contentDatabaseSourceRows.documentId, [
|
|
3225
|
+
...documentScope,
|
|
3226
|
+
]),
|
|
3227
|
+
)
|
|
3228
|
+
: eq(schema.contentDatabaseSourceRows.sourceId, args.source.id),
|
|
3229
|
+
);
|
|
3194
3230
|
const [items] = args.isBuilderSource
|
|
3195
3231
|
? await db
|
|
3196
3232
|
.select({
|
|
@@ -3204,6 +3240,13 @@ async function sourceSnapshotConsistencyMarker(args: {
|
|
|
3204
3240
|
and(
|
|
3205
3241
|
eq(schema.contentDatabaseItems.databaseId, args.database.id),
|
|
3206
3242
|
eq(schema.contentDatabaseItems.ownerEmail, args.source.ownerEmail),
|
|
3243
|
+
...(documentScope
|
|
3244
|
+
? [
|
|
3245
|
+
inArray(schema.contentDatabaseItems.documentId, [
|
|
3246
|
+
...documentScope,
|
|
3247
|
+
]),
|
|
3248
|
+
]
|
|
3249
|
+
: []),
|
|
3207
3250
|
),
|
|
3208
3251
|
)
|
|
3209
3252
|
: [{ count: 0, maxUpdatedAt: null }];
|
|
@@ -3232,6 +3275,7 @@ async function loadSourceSnapshotRowsOptimistically(args: {
|
|
|
3232
3275
|
database: ContentDatabaseRow | ContentDatabase;
|
|
3233
3276
|
isBuilderSource: boolean;
|
|
3234
3277
|
includeHeavyBuilderBodyValues: boolean;
|
|
3278
|
+
documentIds?: string[];
|
|
3235
3279
|
}) {
|
|
3236
3280
|
let latest: Awaited<ReturnType<typeof readSourceSnapshotRowsOnce>> | null =
|
|
3237
3281
|
null;
|
|
@@ -3247,7 +3291,7 @@ async function loadSourceSnapshotRowsOptimistically(args: {
|
|
|
3247
3291
|
async function loadSourceSnapshot(
|
|
3248
3292
|
source: ContentDatabaseSourceRowDb,
|
|
3249
3293
|
database: ContentDatabaseRow | ContentDatabase,
|
|
3250
|
-
options: { includeHeavyBuilderBodyValues: boolean },
|
|
3294
|
+
options: { includeHeavyBuilderBodyValues: boolean; documentIds?: string[] },
|
|
3251
3295
|
): Promise<ContentDatabaseSource> {
|
|
3252
3296
|
const db = getDb();
|
|
3253
3297
|
const [fieldRows, changeRows, reviewRows, executionRows, propertyDefs] =
|
|
@@ -3260,7 +3304,17 @@ async function loadSourceSnapshot(
|
|
|
3260
3304
|
db
|
|
3261
3305
|
.select()
|
|
3262
3306
|
.from(schema.contentDatabaseSourceChangeSets)
|
|
3263
|
-
.where(
|
|
3307
|
+
.where(
|
|
3308
|
+
options.documentIds?.length
|
|
3309
|
+
? and(
|
|
3310
|
+
eq(schema.contentDatabaseSourceChangeSets.sourceId, source.id),
|
|
3311
|
+
inArray(
|
|
3312
|
+
schema.contentDatabaseSourceChangeSets.documentId,
|
|
3313
|
+
options.documentIds,
|
|
3314
|
+
),
|
|
3315
|
+
)
|
|
3316
|
+
: eq(schema.contentDatabaseSourceChangeSets.sourceId, source.id),
|
|
3317
|
+
)
|
|
3264
3318
|
.orderBy(asc(schema.contentDatabaseSourceChangeSets.createdAt)),
|
|
3265
3319
|
db
|
|
3266
3320
|
.select()
|
|
@@ -3341,6 +3395,7 @@ async function loadSourceSnapshot(
|
|
|
3341
3395
|
database,
|
|
3342
3396
|
isBuilderSource,
|
|
3343
3397
|
includeHeavyBuilderBodyValues: options.includeHeavyBuilderBodyValues,
|
|
3398
|
+
documentIds: options.documentIds,
|
|
3344
3399
|
});
|
|
3345
3400
|
const rows = rowRows.map((row) =>
|
|
3346
3401
|
serializeSourceRowRecord(row, {
|
|
@@ -618,6 +618,13 @@ export default defineAction({
|
|
|
618
618
|
.max(BUILDER_SOURCE_REVIEW_PREPARE_LIMIT)
|
|
619
619
|
.optional()
|
|
620
620
|
.describe("Optional bounded set of Builder change-set IDs to prepare"),
|
|
621
|
+
documentIds: z
|
|
622
|
+
.array(z.string())
|
|
623
|
+
.max(BUILDER_SOURCE_REVIEW_PREPARE_LIMIT)
|
|
624
|
+
.optional()
|
|
625
|
+
.describe(
|
|
626
|
+
"Optional document IDs that bound heavy Builder snapshot loading",
|
|
627
|
+
),
|
|
621
628
|
pushModeConfirmation: z
|
|
622
629
|
.enum(["autosave", "draft", "publish"])
|
|
623
630
|
.optional()
|
|
@@ -663,6 +670,7 @@ export default defineAction({
|
|
|
663
670
|
const snapshot = await getContentDatabaseSourceSnapshotForWrite(
|
|
664
671
|
database,
|
|
665
672
|
args.sourceId,
|
|
673
|
+
args.documentIds,
|
|
666
674
|
);
|
|
667
675
|
return { database, snapshot };
|
|
668
676
|
},
|
|
@@ -765,6 +773,7 @@ export default defineAction({
|
|
|
765
773
|
reviewedSnapshot: await getContentDatabaseSourceSnapshotForWrite(
|
|
766
774
|
database,
|
|
767
775
|
args.sourceId,
|
|
776
|
+
args.documentIds,
|
|
768
777
|
),
|
|
769
778
|
response: await getContentDatabaseResponse(database.id),
|
|
770
779
|
}),
|
|
@@ -40,18 +40,20 @@ export default defineAction({
|
|
|
40
40
|
if (!database) throw new Error("Database not found.");
|
|
41
41
|
await assertAccess("document", database.documentId, "editor");
|
|
42
42
|
|
|
43
|
+
const selectedDocumentIds = new Set(args.documentIds ?? []);
|
|
44
|
+
if (args.scope === "selected" && selectedDocumentIds.size === 0) {
|
|
45
|
+
throw new Error("Select at least one Builder row before reviewing it.");
|
|
46
|
+
}
|
|
47
|
+
|
|
43
48
|
const source = await getContentDatabaseSourceSnapshotForWrite(
|
|
44
49
|
database,
|
|
45
50
|
args.sourceId,
|
|
51
|
+
args.scope === "selected" ? args.documentIds : undefined,
|
|
46
52
|
);
|
|
47
53
|
if (!source || source.sourceType !== "builder-cms") {
|
|
48
54
|
throw new Error("Attach a Builder CMS source before reviewing updates.");
|
|
49
55
|
}
|
|
50
56
|
|
|
51
|
-
const selectedDocumentIds = new Set(args.documentIds ?? []);
|
|
52
|
-
if (args.scope === "selected" && selectedDocumentIds.size === 0) {
|
|
53
|
-
throw new Error("Select at least one Builder row before reviewing it.");
|
|
54
|
-
}
|
|
55
57
|
const allReviewableChanges = source.changeSets.filter((changeSet) => {
|
|
56
58
|
if (
|
|
57
59
|
changeSet.direction !== "outbound" ||
|
|
@@ -91,7 +91,8 @@ export function DescriptionField({
|
|
|
91
91
|
return (
|
|
92
92
|
<Textarea
|
|
93
93
|
aria-label={label}
|
|
94
|
-
rows={
|
|
94
|
+
rows={1}
|
|
95
|
+
wrap="soft"
|
|
95
96
|
value={draft}
|
|
96
97
|
placeholder={placeholder}
|
|
97
98
|
onFocus={() => setEditing(true)}
|
|
@@ -105,6 +106,12 @@ export function DescriptionField({
|
|
|
105
106
|
void save();
|
|
106
107
|
}}
|
|
107
108
|
onKeyDown={(event) => {
|
|
109
|
+
if (event.key === "Enter") {
|
|
110
|
+
if (event.nativeEvent.isComposing || event.keyCode === 229) return;
|
|
111
|
+
event.preventDefault();
|
|
112
|
+
event.currentTarget.blur();
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
108
115
|
if (event.key === "Escape") {
|
|
109
116
|
event.preventDefault();
|
|
110
117
|
skipNextBlurSaveRef.current = true;
|
|
@@ -112,8 +119,9 @@ export function DescriptionField({
|
|
|
112
119
|
event.currentTarget.blur();
|
|
113
120
|
}
|
|
114
121
|
}}
|
|
122
|
+
style={{ fieldSizing: "content" } as any}
|
|
115
123
|
className={cn(
|
|
116
|
-
"mt-2
|
|
124
|
+
"mt-2 min-h-6 w-full resize-none overflow-hidden rounded-none border-0 bg-transparent px-0 py-0 text-sm leading-6 text-muted-foreground shadow-none outline-none placeholder:text-muted-foreground/45 focus:outline-none focus:ring-0 focus:ring-offset-0 focus-visible:ring-0 focus-visible:ring-offset-0",
|
|
117
125
|
className,
|
|
118
126
|
)}
|
|
119
127
|
/>
|
|
@@ -1720,6 +1720,10 @@ function DatabaseTable({
|
|
|
1720
1720
|
documentId: document.id,
|
|
1721
1721
|
sourceId: session.sourceId,
|
|
1722
1722
|
changeSetIds: selectedChangeSetIds,
|
|
1723
|
+
documentIds:
|
|
1724
|
+
selectedItemIds.length > 0
|
|
1725
|
+
? selectedItems.map((item) => item.document.id)
|
|
1726
|
+
: undefined,
|
|
1723
1727
|
pushModeConfirmation:
|
|
1724
1728
|
activeBuilderReview.pushMode === "none"
|
|
1725
1729
|
? undefined
|
|
@@ -1018,6 +1018,7 @@ export interface PrepareBuilderSourceReviewRequest {
|
|
|
1018
1018
|
documentId?: string;
|
|
1019
1019
|
sourceId?: string;
|
|
1020
1020
|
changeSetIds?: string[];
|
|
1021
|
+
documentIds?: string[];
|
|
1021
1022
|
pushModeConfirmation?: ContentDatabaseSourcePushMode;
|
|
1022
1023
|
publicationTransition?: BuilderCmsPublicationTransitionIntent;
|
|
1023
1024
|
confirmUnpublish?: boolean;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Create an interactive Agent-Native visual plan for the current task.
|
|
3
|
+
argument-hint: [optional request or scope]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the visual-plan skill for this task. Treat any arguments as the user's
|
|
7
|
+
requested plan scope or focus:
|
|
8
|
+
|
|
9
|
+
$ARGUMENTS
|