@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.
Files changed (316) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +12 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/cli/templates-meta.ts +13 -0
  5. package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +1 -1
  6. package/corpus/core/src/client/org/OrgSwitcher.tsx +2 -0
  7. package/corpus/templates/analytics/changelog/2026-07-15-fixed-the-agent-discarding-a-successful-dashboard-edit-and-r.md +6 -0
  8. package/corpus/templates/analytics/server/lib/real-data-actions.ts +30 -1
  9. package/corpus/templates/analytics/server/plugins/agent-chat.ts +15 -0
  10. package/corpus/templates/content/actions/_database-source-utils.ts +59 -4
  11. package/corpus/templates/content/actions/prepare-builder-source-review.ts +9 -0
  12. package/corpus/templates/content/actions/preview-builder-source-review.ts +6 -4
  13. package/corpus/templates/content/app/components/editor/DescriptionField.tsx +10 -2
  14. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +4 -0
  15. package/corpus/templates/content/changelog/2026-07-15-page-and-database-descriptions-now-use-a-clean-single-line-f.md +6 -0
  16. package/corpus/templates/content/changelog/2026-07-15-selected-builder-reviews-now-load-only-the-chosen-rows-avoid.md +6 -0
  17. package/corpus/templates/content/shared/api.ts +1 -0
  18. package/corpus/templates/tasks/.agents/commands/visual-plan.md +9 -0
  19. package/corpus/templates/tasks/.agents/commands/visual-recap.md +8 -0
  20. package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +492 -0
  21. package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +189 -0
  22. package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +76 -0
  23. package/corpus/templates/tasks/.agents/skills/agent-watchdog/README.md +43 -0
  24. package/corpus/templates/tasks/.agents/skills/agent-watchdog/SKILL.md +110 -0
  25. package/corpus/templates/tasks/.agents/skills/agent-watchdog/agents/openai.yaml +4 -0
  26. package/corpus/templates/tasks/.agents/skills/capture-learnings/SKILL.md +89 -0
  27. package/corpus/templates/tasks/.agents/skills/change-summary/SKILL.md +83 -0
  28. package/corpus/templates/tasks/.agents/skills/create-skill/SKILL.md +221 -0
  29. package/corpus/templates/tasks/.agents/skills/delegate-to-agent/SKILL.md +263 -0
  30. package/corpus/templates/tasks/.agents/skills/efficient-fable/README.md +75 -0
  31. package/corpus/templates/tasks/.agents/skills/efficient-fable/SKILL.md +95 -0
  32. package/corpus/templates/tasks/.agents/skills/efficient-frontier/README.md +53 -0
  33. package/corpus/templates/tasks/.agents/skills/efficient-frontier/SKILL.md +73 -0
  34. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +112 -0
  35. package/corpus/templates/tasks/.agents/skills/plan-arbiter/README.md +41 -0
  36. package/corpus/templates/tasks/.agents/skills/plan-arbiter/SKILL.md +114 -0
  37. package/corpus/templates/tasks/.agents/skills/plan-arbiter/agents/openai.yaml +4 -0
  38. package/corpus/templates/tasks/.agents/skills/plow-ahead/README.md +42 -0
  39. package/corpus/templates/tasks/.agents/skills/plow-ahead/SKILL.md +104 -0
  40. package/corpus/templates/tasks/.agents/skills/plow-ahead/agents/openai.yaml +4 -0
  41. package/corpus/templates/tasks/.agents/skills/quick-recap/README.md +55 -0
  42. package/corpus/templates/tasks/.agents/skills/quick-recap/SKILL.md +54 -0
  43. package/corpus/templates/tasks/.agents/skills/read-the-damn-docs/README.md +54 -0
  44. package/corpus/templates/tasks/.agents/skills/read-the-damn-docs/SKILL.md +126 -0
  45. package/corpus/templates/tasks/.agents/skills/read-the-damn-docs/agents/openai.yaml +4 -0
  46. package/corpus/templates/tasks/.agents/skills/real-time-sync/SKILL.md +232 -0
  47. package/corpus/templates/tasks/.agents/skills/security/SKILL.md +280 -0
  48. package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +106 -0
  49. package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +95 -0
  50. package/corpus/templates/tasks/.agents/skills/stay-within-limits/README.md +61 -0
  51. package/corpus/templates/tasks/.agents/skills/stay-within-limits/SKILL.md +83 -0
  52. package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  53. package/corpus/templates/tasks/.agents/skills/visual-plan/SKILL.md +547 -0
  54. package/corpus/templates/tasks/.agents/skills/visual-plan/agent-native-skill.json +12 -0
  55. package/corpus/templates/tasks/.agents/skills/visual-plan/references/canvas.md +121 -0
  56. package/corpus/templates/tasks/.agents/skills/visual-plan/references/document-quality.md +178 -0
  57. package/corpus/templates/tasks/.agents/skills/visual-plan/references/exemplar.md +62 -0
  58. package/corpus/templates/tasks/.agents/skills/visual-plan/references/wireframe.md +264 -0
  59. package/corpus/templates/tasks/.agents/skills/visual-recap/SKILL.md +634 -0
  60. package/corpus/templates/tasks/.agents/skills/visual-recap/agent-native-skill.json +12 -0
  61. package/corpus/templates/tasks/.agents/skills/visual-recap/references/wireframe.md +264 -0
  62. package/corpus/templates/tasks/.claude/commands/visual-plan.md +9 -0
  63. package/corpus/templates/tasks/.claude/commands/visual-recap.md +8 -0
  64. package/corpus/templates/tasks/.env.example +5 -0
  65. package/corpus/templates/tasks/.ignore +0 -0
  66. package/corpus/templates/tasks/.prettierrc +5 -0
  67. package/corpus/templates/tasks/AGENTS.md +158 -0
  68. package/corpus/templates/tasks/DEVELOPING.md +185 -0
  69. package/corpus/templates/tasks/README.md +16 -0
  70. package/corpus/templates/tasks/actions/bulk-delete-inbox-items.ts +24 -0
  71. package/corpus/templates/tasks/actions/bulk-delete-tasks.ts +21 -0
  72. package/corpus/templates/tasks/actions/bulk-mark-inbox-items-ready.ts +27 -0
  73. package/corpus/templates/tasks/actions/bulk-update-tasks.ts +35 -0
  74. package/corpus/templates/tasks/actions/create-custom-field.ts +22 -0
  75. package/corpus/templates/tasks/actions/create-inbox-item.ts +30 -0
  76. package/corpus/templates/tasks/actions/create-task.ts +33 -0
  77. package/corpus/templates/tasks/actions/delete-custom-field.ts +19 -0
  78. package/corpus/templates/tasks/actions/delete-inbox-item.ts +17 -0
  79. package/corpus/templates/tasks/actions/delete-task.ts +17 -0
  80. package/corpus/templates/tasks/actions/lib/boolean-query-param.ts +30 -0
  81. package/corpus/templates/tasks/actions/list-custom-fields.ts +18 -0
  82. package/corpus/templates/tasks/actions/list-inbox-items.ts +16 -0
  83. package/corpus/templates/tasks/actions/list-tasks.ts +52 -0
  84. package/corpus/templates/tasks/actions/list-visible-task-fields.ts +18 -0
  85. package/corpus/templates/tasks/actions/mark-inbox-item-ready.ts +31 -0
  86. package/corpus/templates/tasks/actions/navigate.ts +51 -0
  87. package/corpus/templates/tasks/actions/reorder-custom-fields.ts +27 -0
  88. package/corpus/templates/tasks/actions/reorder-inbox-items.ts +24 -0
  89. package/corpus/templates/tasks/actions/reorder-tasks.ts +29 -0
  90. package/corpus/templates/tasks/actions/run.ts +2 -0
  91. package/corpus/templates/tasks/actions/update-custom-field.ts +33 -0
  92. package/corpus/templates/tasks/actions/update-inbox-item.ts +24 -0
  93. package/corpus/templates/tasks/actions/update-task.ts +68 -0
  94. package/corpus/templates/tasks/actions/update-visible-task-fields.ts +27 -0
  95. package/corpus/templates/tasks/actions/view-screen-helpers.ts +68 -0
  96. package/corpus/templates/tasks/actions/view-screen.ts +207 -0
  97. package/corpus/templates/tasks/app/components/custom-fields/FieldCreateBar.tsx +121 -0
  98. package/corpus/templates/tasks/app/components/custom-fields/FieldListRow.tsx +116 -0
  99. package/corpus/templates/tasks/app/components/custom-fields/FieldsList.tsx +225 -0
  100. package/corpus/templates/tasks/app/components/custom-fields/FieldsListSkeleton.tsx +18 -0
  101. package/corpus/templates/tasks/app/components/custom-fields/FieldsPage.tsx +42 -0
  102. package/corpus/templates/tasks/app/components/custom-fields/editor/FieldEditorSidebar.tsx +69 -0
  103. package/corpus/templates/tasks/app/components/custom-fields/editor/FieldTitleSection.tsx +32 -0
  104. package/corpus/templates/tasks/app/components/custom-fields/editor/config/CurrencyConfigControl.tsx +49 -0
  105. package/corpus/templates/tasks/app/components/custom-fields/editor/config/FieldConfigControl.tsx +56 -0
  106. package/corpus/templates/tasks/app/components/custom-fields/editor/config/NumberConfigControl.tsx +52 -0
  107. package/corpus/templates/tasks/app/components/custom-fields/editor/config/PercentConfigControl.tsx +30 -0
  108. package/corpus/templates/tasks/app/components/custom-fields/editor/config/SelectConfigControl.tsx +135 -0
  109. package/corpus/templates/tasks/app/components/custom-fields/editor/config/select-colors.ts +23 -0
  110. package/corpus/templates/tasks/app/components/custom-fields/editor/config/utils.ts +52 -0
  111. package/corpus/templates/tasks/app/components/custom-fields/editor/types.ts +7 -0
  112. package/corpus/templates/tasks/app/components/dnd/SortableItem.tsx +72 -0
  113. package/corpus/templates/tasks/app/components/dnd/SortableList.tsx +136 -0
  114. package/corpus/templates/tasks/app/components/dnd/reorder-moving-items.ts +160 -0
  115. package/corpus/templates/tasks/app/components/dnd/sortable-drag-props.ts +60 -0
  116. package/corpus/templates/tasks/app/components/inbox/InboxList.tsx +222 -0
  117. package/corpus/templates/tasks/app/components/inbox/InboxListPage.tsx +39 -0
  118. package/corpus/templates/tasks/app/components/inbox/InboxListRow.tsx +122 -0
  119. package/corpus/templates/tasks/app/components/layout/Header.tsx +55 -0
  120. package/corpus/templates/tasks/app/components/layout/HeaderActions.tsx +84 -0
  121. package/corpus/templates/tasks/app/components/layout/Layout.tsx +134 -0
  122. package/corpus/templates/tasks/app/components/layout/Sidebar.tsx +211 -0
  123. package/corpus/templates/tasks/app/components/shared/AddListItemInput.tsx +57 -0
  124. package/corpus/templates/tasks/app/components/shared/AlertDialog.tsx +53 -0
  125. package/corpus/templates/tasks/app/components/shared/BulkDeleteDialog.tsx +76 -0
  126. package/corpus/templates/tasks/app/components/shared/ChipSelect.tsx +240 -0
  127. package/corpus/templates/tasks/app/components/shared/DeleteItemDialog.tsx +40 -0
  128. package/corpus/templates/tasks/app/components/shared/InlineEditable.tsx +166 -0
  129. package/corpus/templates/tasks/app/components/shared/ListEmptyState.tsx +13 -0
  130. package/corpus/templates/tasks/app/components/shared/ListErrorMessage.tsx +15 -0
  131. package/corpus/templates/tasks/app/components/shared/ListViewHeader.tsx +75 -0
  132. package/corpus/templates/tasks/app/components/shared/PageHeader.tsx +25 -0
  133. package/corpus/templates/tasks/app/components/shared/RowActionsMenu.tsx +42 -0
  134. package/corpus/templates/tasks/app/components/shared/SidePanel.tsx +99 -0
  135. package/corpus/templates/tasks/app/components/shared/dnd/ListRowPreview.tsx +37 -0
  136. package/corpus/templates/tasks/app/components/shared/list/List.tsx +63 -0
  137. package/corpus/templates/tasks/app/components/shared/list/ListRow.tsx +159 -0
  138. package/corpus/templates/tasks/app/components/shared/list/ListRowDragHandle.tsx +52 -0
  139. package/corpus/templates/tasks/app/components/shared/list/ListSkeletonRows.tsx +11 -0
  140. package/corpus/templates/tasks/app/components/shared/list/SortableListItemShell.tsx +32 -0
  141. package/corpus/templates/tasks/app/components/shared/list/types.ts +1 -0
  142. package/corpus/templates/tasks/app/components/shared/selection/ListSelectionBar.tsx +158 -0
  143. package/corpus/templates/tasks/app/components/shared/selection/ListSelectionHeaderToggle.tsx +28 -0
  144. package/corpus/templates/tasks/app/components/shared/selection/ListSelectionToolbar.tsx +81 -0
  145. package/corpus/templates/tasks/app/components/shared/selection/get-list-row-selection-ui.ts +41 -0
  146. package/corpus/templates/tasks/app/components/shared/selection/use-list-selection.ts +196 -0
  147. package/corpus/templates/tasks/app/components/tasks/TaskList.tsx +333 -0
  148. package/corpus/templates/tasks/app/components/tasks/TaskListHeaderRow.tsx +46 -0
  149. package/corpus/templates/tasks/app/components/tasks/TaskListPage.tsx +115 -0
  150. package/corpus/templates/tasks/app/components/tasks/TaskListRow.css +49 -0
  151. package/corpus/templates/tasks/app/components/tasks/TaskListRow.tsx +307 -0
  152. package/corpus/templates/tasks/app/components/tasks/fields/TaskFieldsSidebar.tsx +102 -0
  153. package/corpus/templates/tasks/app/components/tasks/fields/TaskTitleSection.tsx +27 -0
  154. package/corpus/templates/tasks/app/components/tasks/fields/controls/DateValueControl.tsx +21 -0
  155. package/corpus/templates/tasks/app/components/tasks/fields/controls/FieldValueControl.tsx +76 -0
  156. package/corpus/templates/tasks/app/components/tasks/fields/controls/MultiSelectValueControl.tsx +52 -0
  157. package/corpus/templates/tasks/app/components/tasks/fields/controls/NumberValueControl.tsx +56 -0
  158. package/corpus/templates/tasks/app/components/tasks/fields/controls/RichTextValueControl.tsx +115 -0
  159. package/corpus/templates/tasks/app/components/tasks/fields/controls/SingleSelectValueControl.tsx +61 -0
  160. package/corpus/templates/tasks/app/components/tasks/fields/controls/TextValueControl.tsx +20 -0
  161. package/corpus/templates/tasks/app/components/tasks/use-task-row-completion-animation.ts +181 -0
  162. package/corpus/templates/tasks/app/components/ui/accordion.tsx +56 -0
  163. package/corpus/templates/tasks/app/components/ui/alert-dialog.tsx +1 -0
  164. package/corpus/templates/tasks/app/components/ui/alert.tsx +1 -0
  165. package/corpus/templates/tasks/app/components/ui/aspect-ratio.tsx +5 -0
  166. package/corpus/templates/tasks/app/components/ui/avatar.tsx +1 -0
  167. package/corpus/templates/tasks/app/components/ui/badge.tsx +1 -0
  168. package/corpus/templates/tasks/app/components/ui/breadcrumb.tsx +115 -0
  169. package/corpus/templates/tasks/app/components/ui/button.tsx +1 -0
  170. package/corpus/templates/tasks/app/components/ui/calendar.tsx +70 -0
  171. package/corpus/templates/tasks/app/components/ui/card.tsx +1 -0
  172. package/corpus/templates/tasks/app/components/ui/carousel.tsx +260 -0
  173. package/corpus/templates/tasks/app/components/ui/chart.tsx +379 -0
  174. package/corpus/templates/tasks/app/components/ui/checkbox.tsx +1 -0
  175. package/corpus/templates/tasks/app/components/ui/collapsible.tsx +1 -0
  176. package/corpus/templates/tasks/app/components/ui/command.tsx +1 -0
  177. package/corpus/templates/tasks/app/components/ui/context-menu.tsx +1 -0
  178. package/corpus/templates/tasks/app/components/ui/dialog.tsx +1 -0
  179. package/corpus/templates/tasks/app/components/ui/drawer.tsx +1 -0
  180. package/corpus/templates/tasks/app/components/ui/dropdown-menu.tsx +1 -0
  181. package/corpus/templates/tasks/app/components/ui/form.tsx +177 -0
  182. package/corpus/templates/tasks/app/components/ui/hover-card.tsx +27 -0
  183. package/corpus/templates/tasks/app/components/ui/input-otp.tsx +69 -0
  184. package/corpus/templates/tasks/app/components/ui/input.tsx +1 -0
  185. package/corpus/templates/tasks/app/components/ui/label.tsx +1 -0
  186. package/corpus/templates/tasks/app/components/ui/menubar.tsx +254 -0
  187. package/corpus/templates/tasks/app/components/ui/navigation-menu.tsx +128 -0
  188. package/corpus/templates/tasks/app/components/ui/pagination.tsx +121 -0
  189. package/corpus/templates/tasks/app/components/ui/popover.tsx +1 -0
  190. package/corpus/templates/tasks/app/components/ui/progress.tsx +1 -0
  191. package/corpus/templates/tasks/app/components/ui/radio-group.tsx +1 -0
  192. package/corpus/templates/tasks/app/components/ui/resizable.tsx +43 -0
  193. package/corpus/templates/tasks/app/components/ui/scroll-area.tsx +1 -0
  194. package/corpus/templates/tasks/app/components/ui/select.tsx +1 -0
  195. package/corpus/templates/tasks/app/components/ui/separator.tsx +1 -0
  196. package/corpus/templates/tasks/app/components/ui/sheet.tsx +1 -0
  197. package/corpus/templates/tasks/app/components/ui/sidebar.tsx +782 -0
  198. package/corpus/templates/tasks/app/components/ui/skeleton.tsx +1 -0
  199. package/corpus/templates/tasks/app/components/ui/slider.tsx +1 -0
  200. package/corpus/templates/tasks/app/components/ui/sonner.tsx +1 -0
  201. package/corpus/templates/tasks/app/components/ui/spinner.tsx +1 -0
  202. package/corpus/templates/tasks/app/components/ui/switch.tsx +1 -0
  203. package/corpus/templates/tasks/app/components/ui/table.tsx +1 -0
  204. package/corpus/templates/tasks/app/components/ui/tabs.tsx +1 -0
  205. package/corpus/templates/tasks/app/components/ui/textarea.tsx +1 -0
  206. package/corpus/templates/tasks/app/components/ui/toast.tsx +1 -0
  207. package/corpus/templates/tasks/app/components/ui/toaster.tsx +1 -0
  208. package/corpus/templates/tasks/app/components/ui/toggle-group.tsx +1 -0
  209. package/corpus/templates/tasks/app/components/ui/toggle.tsx +43 -0
  210. package/corpus/templates/tasks/app/components/ui/tooltip.tsx +1 -0
  211. package/corpus/templates/tasks/app/components/ui/use-toast.ts +3 -0
  212. package/corpus/templates/tasks/app/entry.client.tsx +19 -0
  213. package/corpus/templates/tasks/app/entry.server.tsx +10 -0
  214. package/corpus/templates/tasks/app/global.css +93 -0
  215. package/corpus/templates/tasks/app/hooks/cache.ts +31 -0
  216. package/corpus/templates/tasks/app/hooks/use-custom-fields.ts +93 -0
  217. package/corpus/templates/tasks/app/hooks/use-inbox-items.ts +196 -0
  218. package/corpus/templates/tasks/app/hooks/use-mobile.tsx +21 -0
  219. package/corpus/templates/tasks/app/hooks/use-navigation-state.ts +40 -0
  220. package/corpus/templates/tasks/app/hooks/use-tasks.ts +276 -0
  221. package/corpus/templates/tasks/app/hooks/use-toast.ts +188 -0
  222. package/corpus/templates/tasks/app/hooks/use-visible-task-fields.ts +140 -0
  223. package/corpus/templates/tasks/app/lib/app-config.ts +11 -0
  224. package/corpus/templates/tasks/app/lib/tab-id.ts +1 -0
  225. package/corpus/templates/tasks/app/lib/utils.ts +1 -0
  226. package/corpus/templates/tasks/app/root.tsx +130 -0
  227. package/corpus/templates/tasks/app/routes/_index.tsx +22 -0
  228. package/corpus/templates/tasks/app/routes/extensions.$id.$slug.tsx +2 -0
  229. package/corpus/templates/tasks/app/routes/extensions.$id.tsx +11 -0
  230. package/corpus/templates/tasks/app/routes/extensions._index.tsx +11 -0
  231. package/corpus/templates/tasks/app/routes/extensions.tsx +5 -0
  232. package/corpus/templates/tasks/app/routes/fields.tsx +16 -0
  233. package/corpus/templates/tasks/app/routes/inbox.tsx +16 -0
  234. package/corpus/templates/tasks/app/routes/tasks.tsx +17 -0
  235. package/corpus/templates/tasks/app/routes/team.tsx +17 -0
  236. package/corpus/templates/tasks/app/routes.ts +4 -0
  237. package/corpus/templates/tasks/app/vite-env.d.ts +6 -0
  238. package/corpus/templates/tasks/components.json +20 -0
  239. package/corpus/templates/tasks/data/sync-config.json +1 -0
  240. package/corpus/templates/tasks/docs/features/README.md +81 -0
  241. package/corpus/templates/tasks/docs/features/f1-tasks.mdx +67 -0
  242. package/corpus/templates/tasks/docs/features/f2-custom-fields.mdx +68 -0
  243. package/corpus/templates/tasks/docs/features/f3-projects.mdx +33 -0
  244. package/corpus/templates/tasks/docs/features/f4-inbox.mdx +55 -0
  245. package/corpus/templates/tasks/docs/features/f5-views.mdx +65 -0
  246. package/corpus/templates/tasks/docs/features/f6-search.mdx +43 -0
  247. package/corpus/templates/tasks/docs/features/f7-first-run.mdx +66 -0
  248. package/corpus/templates/tasks/docs/features/f8-chat.mdx +120 -0
  249. package/corpus/templates/tasks/e2e/global-setup.ts +42 -0
  250. package/corpus/templates/tasks/e2e/helpers/inbox.ts +71 -0
  251. package/corpus/templates/tasks/e2e/helpers/tasks.ts +99 -0
  252. package/corpus/templates/tasks/learnings.defaults.md +5 -0
  253. package/corpus/templates/tasks/netlify.toml +10 -0
  254. package/corpus/templates/tasks/package.json +104 -0
  255. package/corpus/templates/tasks/playwright.config.ts +34 -0
  256. package/corpus/templates/tasks/public/agent-native-icon-dark.svg +10 -0
  257. package/corpus/templates/tasks/public/agent-native-icon-light.svg +10 -0
  258. package/corpus/templates/tasks/public/agent-native-logo-dark.svg +21 -0
  259. package/corpus/templates/tasks/public/agent-native-logo-light.svg +21 -0
  260. package/corpus/templates/tasks/public/favicon.svg +1 -0
  261. package/corpus/templates/tasks/public/icon-180.svg +1 -0
  262. package/corpus/templates/tasks/public/icon-192.svg +1 -0
  263. package/corpus/templates/tasks/public/icon-512.svg +1 -0
  264. package/corpus/templates/tasks/public/manifest.json +21 -0
  265. package/corpus/templates/tasks/react-router.config.ts +7 -0
  266. package/corpus/templates/tasks/server/custom-fields/normalize.ts +163 -0
  267. package/corpus/templates/tasks/server/custom-fields/parse.ts +146 -0
  268. package/corpus/templates/tasks/server/custom-fields/schema.ts +147 -0
  269. package/corpus/templates/tasks/server/custom-fields/store.ts +425 -0
  270. package/corpus/templates/tasks/server/custom-fields/task-fields.ts +104 -0
  271. package/corpus/templates/tasks/server/custom-fields/types.ts +98 -0
  272. package/corpus/templates/tasks/server/custom-fields/validate.ts +210 -0
  273. package/corpus/templates/tasks/server/custom-fields/values/store.ts +386 -0
  274. package/corpus/templates/tasks/server/db/bulk-write.ts +30 -0
  275. package/corpus/templates/tasks/server/db/index.ts +5 -0
  276. package/corpus/templates/tasks/server/db/record-utils.ts +7 -0
  277. package/corpus/templates/tasks/server/db/schema.ts +67 -0
  278. package/corpus/templates/tasks/server/db/test-tasks-table.ts +76 -0
  279. package/corpus/templates/tasks/server/db/transaction.ts +6 -0
  280. package/corpus/templates/tasks/server/errors.ts +31 -0
  281. package/corpus/templates/tasks/server/inbox/store.ts +216 -0
  282. package/corpus/templates/tasks/server/middleware/auth.ts +15 -0
  283. package/corpus/templates/tasks/server/plugins/agent-chat.ts +46 -0
  284. package/corpus/templates/tasks/server/plugins/auth.ts +15 -0
  285. package/corpus/templates/tasks/server/plugins/db.ts +90 -0
  286. package/corpus/templates/tasks/server/routes/[...page].get.ts +5 -0
  287. package/corpus/templates/tasks/server/stored-items/store.ts +548 -0
  288. package/corpus/templates/tasks/server/tasks/store.ts +306 -0
  289. package/corpus/templates/tasks/server/user-config/store.ts +138 -0
  290. package/corpus/templates/tasks/shared/app-state-tabs.ts +15 -0
  291. package/corpus/templates/tasks/shared/boolean-param.ts +22 -0
  292. package/corpus/templates/tasks/shared/bulk-limits.ts +7 -0
  293. package/corpus/templates/tasks/shared/list-screen-snapshot.ts +90 -0
  294. package/corpus/templates/tasks/shared/navigation.ts +104 -0
  295. package/corpus/templates/tasks/shared/visible-task-fields.ts +2 -0
  296. package/corpus/templates/tasks/ssr-entry.ts +15 -0
  297. package/corpus/templates/tasks/tsconfig.json +24 -0
  298. package/corpus/templates/tasks/vite.config.ts +19 -0
  299. package/corpus/templates/tasks/vitest.config.ts +8 -0
  300. package/dist/cli/templates-meta.d.ts.map +1 -1
  301. package/dist/cli/templates-meta.js +13 -0
  302. package/dist/cli/templates-meta.js.map +1 -1
  303. package/dist/client/agent-page/AgentTabsPage.js +1 -1
  304. package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
  305. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  306. package/dist/client/org/OrgSwitcher.js +2 -1
  307. package/dist/client/org/OrgSwitcher.js.map +1 -1
  308. package/dist/collab/routes.d.ts +1 -1
  309. package/dist/collab/struct-routes.d.ts +1 -1
  310. package/dist/notifications/routes.d.ts +2 -2
  311. package/dist/observability/routes.d.ts +5 -5
  312. package/dist/resources/handlers.d.ts +3 -3
  313. package/dist/secrets/routes.d.ts +9 -9
  314. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  315. package/dist/server/transcribe-voice.d.ts +1 -1
  316. package/package.json +1 -1
package/corpus/README.md CHANGED
@@ -28,4 +28,4 @@ rg -n "defineAction|useActionQuery" node_modules/@agent-native/core/corpus
28
28
  ## Generated Counts
29
29
 
30
30
  - core files: 2258
31
- - template files: 5678
31
+ - template files: 5964
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.101.14",
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-full min-h-[360px]">
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 {
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-15
4
+ ---
5
+
6
+ Fixed the agent discarding a successful dashboard edit and replacing it with an unrelated data-source message
@@ -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(eq(schema.contentDatabaseSourceRows.sourceId, args.source.id))
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(eq(schema.contentDatabaseSourceRows.sourceId, args.source.id));
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(eq(schema.contentDatabaseSourceChangeSets.sourceId, source.id))
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={editing || draft ? 2 : 1}
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 block w-full resize-none overflow-hidden rounded border-0 bg-transparent px-0 py-0 text-sm leading-6 text-muted-foreground outline-none placeholder:text-muted-foreground/45 hover:bg-muted/30 focus:bg-muted/30 focus:px-1 focus:outline-none focus:ring-1 focus:ring-ring",
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
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-15
4
+ ---
5
+
6
+ Page and database descriptions now start compactly and wrap naturally as they grow.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-15
4
+ ---
5
+
6
+ Selected Builder reviews now load only the chosen rows, avoiding production timeouts on large collections.
@@ -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
@@ -0,0 +1,8 @@
1
+ ---
2
+ description: Create an interactive Agent-Native visual recap for a PR, branch, commit, or diff.
3
+ argument-hint: [PR, branch, commit, diff, or scope]
4
+ ---
5
+
6
+ Use the visual-recap skill. Treat any arguments as the recap target or focus:
7
+
8
+ $ARGUMENTS