@agent-native/core 0.152.1 → 0.153.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.
Files changed (907) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/adding-a-feature/SKILL.md +208 -0
  3. package/corpus/templates/analytics/.agents/skills/context-awareness/SKILL.md +206 -0
  4. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +6 -4
  5. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +73 -80
  6. package/corpus/templates/analytics/.agents/skills/portability/SKILL.md +107 -0
  7. package/corpus/templates/analytics/.agents/skills/secrets/SKILL.md +339 -0
  8. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +3 -3
  9. package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +1 -1
  10. package/corpus/templates/analytics/.agents/skills/sharing/SKILL.md +1 -0
  11. package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +116 -44
  12. package/corpus/templates/analytics/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  13. package/corpus/templates/analytics/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  14. package/corpus/templates/analytics/.agents/skills/workspace-conventions/SKILL.md +93 -0
  15. package/corpus/templates/analytics/actions/data-source-status.ts +4 -1
  16. package/corpus/templates/analytics/actions/migrate-first-party-analytics-to-bigquery.ts +2 -2
  17. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +7 -2
  18. package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +7 -1
  19. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +30 -32
  20. package/corpus/templates/analytics/app/components/layout/layout-route-policy.ts +10 -0
  21. package/corpus/templates/analytics/app/global.css +5 -1
  22. package/corpus/templates/analytics/app/lib/data-source-status.ts +3 -3
  23. package/corpus/templates/analytics/app/lib/resource-access.ts +6 -1
  24. package/corpus/templates/analytics/app/pages/DataSources.tsx +79 -51
  25. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +1 -0
  26. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +1 -0
  27. package/corpus/templates/analytics/changelog/2026-08-12-analytics-sidebar-ask-toggle-and-compact-rail.md +6 -0
  28. package/corpus/templates/analytics/changelog/2026-08-12-data-source-statuses-now-distinguish-workspace-access-from-c.md +6 -0
  29. package/corpus/templates/analytics/server/jobs/analytics-bigquery-backfill.ts +559 -147
  30. package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +79 -5
  31. package/corpus/templates/analytics/server/plugins/db.ts +84 -0
  32. package/corpus/templates/assets/.agents/skills/adding-a-feature/SKILL.md +208 -0
  33. package/corpus/templates/assets/.agents/skills/context-awareness/SKILL.md +206 -0
  34. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +73 -80
  35. package/corpus/templates/assets/.agents/skills/portability/SKILL.md +107 -0
  36. package/corpus/templates/assets/.agents/skills/secrets/SKILL.md +339 -0
  37. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +3 -3
  38. package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +1 -1
  39. package/corpus/templates/assets/.agents/skills/sharing/SKILL.md +1 -0
  40. package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +116 -44
  41. package/corpus/templates/assets/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  42. package/corpus/templates/assets/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  43. package/corpus/templates/assets/.agents/skills/workspace-conventions/SKILL.md +93 -0
  44. package/corpus/templates/assets/app/components/asset/AssetPreviewDialog.tsx +13 -5
  45. package/corpus/templates/assets/app/lib/asset-urls.ts +13 -0
  46. package/corpus/templates/assets/app/routes/asset.$id.tsx +16 -6
  47. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +1 -0
  48. package/corpus/templates/assets/app/routes/library.tsx +336 -78
  49. package/corpus/templates/assets/shared/api.ts +1 -1
  50. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +3 -2
  51. package/corpus/templates/brain/.agents/skills/brain/SKILL.md +8 -6
  52. package/corpus/templates/brain/.agents/skills/context-awareness/SKILL.md +206 -0
  53. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +73 -80
  54. package/corpus/templates/brain/.agents/skills/ingestion-and-connectors/SKILL.md +7 -0
  55. package/corpus/templates/brain/.agents/skills/portability/SKILL.md +107 -0
  56. package/corpus/templates/brain/.agents/skills/secrets/SKILL.md +339 -0
  57. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +3 -3
  58. package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +1 -1
  59. package/corpus/templates/brain/.agents/skills/sharing/SKILL.md +1 -0
  60. package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +116 -44
  61. package/corpus/templates/brain/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  62. package/corpus/templates/brain/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  63. package/corpus/templates/brain/.agents/skills/workspace-conventions/SKILL.md +93 -0
  64. package/corpus/templates/brain/AGENTS.md +2 -1
  65. package/corpus/templates/brain/actions/ask-brain.ts +19 -16
  66. package/corpus/templates/brain/actions/create-source.ts +11 -2
  67. package/corpus/templates/brain/actions/import-markdown-files.ts +237 -0
  68. package/corpus/templates/brain/actions/resanitize-captures.ts +3 -1
  69. package/corpus/templates/brain/actions/test-slack-connection.ts +12 -3
  70. package/corpus/templates/brain/actions/update-source.ts +10 -1
  71. package/corpus/templates/brain/app/components/brain/Surface.tsx +1 -11
  72. package/corpus/templates/brain/app/i18n-data.ts +111 -0
  73. package/corpus/templates/brain/app/lib/brain.ts +23 -1
  74. package/corpus/templates/brain/app/routes/knowledge.tsx +0 -2
  75. package/corpus/templates/brain/app/routes/ops.tsx +0 -2
  76. package/corpus/templates/brain/app/routes/review.tsx +0 -2
  77. package/corpus/templates/brain/app/routes/search.tsx +0 -2
  78. package/corpus/templates/brain/app/routes/sources.tsx +354 -6
  79. package/corpus/templates/brain/server/lib/brain-response-guard.ts +63 -1
  80. package/corpus/templates/brain/server/lib/brain.ts +9 -6
  81. package/corpus/templates/brain/server/lib/connectors.ts +20 -6
  82. package/corpus/templates/brain/server/lib/search.ts +9 -1
  83. package/corpus/templates/brain/server/lib/source-credentials.ts +95 -57
  84. package/corpus/templates/brain/server/plugins/agent-chat.ts +5 -2
  85. package/corpus/templates/brain/server/plugins/auth.ts +2 -0
  86. package/corpus/templates/calendar/.agents/skills/adding-a-feature/SKILL.md +208 -0
  87. package/corpus/templates/calendar/.agents/skills/context-awareness/SKILL.md +206 -0
  88. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +73 -80
  89. package/corpus/templates/calendar/.agents/skills/portability/SKILL.md +107 -0
  90. package/corpus/templates/calendar/.agents/skills/secrets/SKILL.md +339 -0
  91. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +3 -3
  92. package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +1 -1
  93. package/corpus/templates/calendar/.agents/skills/sharing/SKILL.md +1 -0
  94. package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +116 -44
  95. package/corpus/templates/calendar/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  96. package/corpus/templates/calendar/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  97. package/corpus/templates/calendar/.agents/skills/workspace-conventions/SKILL.md +93 -0
  98. package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +1 -0
  99. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +3 -2
  100. package/corpus/templates/chat/.agents/skills/context-awareness/SKILL.md +206 -0
  101. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +73 -80
  102. package/corpus/templates/chat/.agents/skills/portability/SKILL.md +107 -0
  103. package/corpus/templates/chat/.agents/skills/secrets/SKILL.md +339 -0
  104. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +3 -3
  105. package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +1 -1
  106. package/corpus/templates/chat/.agents/skills/sharing/SKILL.md +1 -0
  107. package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +116 -44
  108. package/corpus/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  109. package/corpus/templates/chat/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  110. package/corpus/templates/chat/.agents/skills/workspace-conventions/SKILL.md +93 -0
  111. package/corpus/templates/chat/AGENTS.md +4 -5
  112. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +73 -80
  113. package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +1 -1
  114. package/corpus/templates/clips/.agents/skills/secrets/SKILL.md +339 -0
  115. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +3 -3
  116. package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +1 -1
  117. package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +116 -44
  118. package/corpus/templates/clips/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  119. package/corpus/templates/clips/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  120. package/corpus/templates/clips/.agents/skills/workspace-conventions/SKILL.md +93 -0
  121. package/corpus/templates/clips/actions/add-comment.ts +1 -2
  122. package/corpus/templates/clips/actions/delete-comment.ts +2 -0
  123. package/corpus/templates/clips/actions/get-recording-insights.ts +9 -8
  124. package/corpus/templates/clips/actions/get-recording-player-data.ts +4 -1
  125. package/corpus/templates/clips/actions/react-to-comment.ts +1 -1
  126. package/corpus/templates/clips/actions/react-to-recording.ts +1 -1
  127. package/corpus/templates/clips/actions/reply-to-comment.ts +1 -1
  128. package/corpus/templates/clips/actions/resolve-comment.ts +1 -2
  129. package/corpus/templates/clips/actions/update-comment.ts +1 -1
  130. package/corpus/templates/clips/app/components/editor/editor-layout.tsx +1 -0
  131. package/corpus/templates/clips/app/components/editor/thumbnail-picker.tsx +59 -16
  132. package/corpus/templates/clips/app/components/player/comments-panel.tsx +88 -39
  133. package/corpus/templates/clips/app/components/player/share-dialog.tsx +12 -8
  134. package/corpus/templates/clips/app/components/player/timestamped-comment-button.tsx +3 -1
  135. package/corpus/templates/clips/app/components/player/video-player.tsx +1 -1
  136. package/corpus/templates/clips/app/components/sharing/share-ui.tsx +2 -1
  137. package/corpus/templates/clips/app/i18n/en-US.ts +2 -1
  138. package/corpus/templates/clips/app/lib/public-meeting.ts +1 -1
  139. package/corpus/templates/clips/app/lib/thumbnail-capture.ts +71 -0
  140. package/corpus/templates/clips/app/lib/thumbnail-picker-state.ts +93 -0
  141. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +1 -1
  142. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +25 -19
  143. package/corpus/templates/clips/app/routes/share.$shareId.tsx +8 -0
  144. package/corpus/templates/clips/changelog/2026-07-23-meeting-recording-meters-and-dismissed-prompts.md +1 -1
  145. package/corpus/templates/clips/changelog/2026-08-11-clips-asks-to-take-notes-again-when-you-join-an-adhoc-zoom-o.md +6 -0
  146. package/corpus/templates/clips/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  147. package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +166 -14
  148. package/corpus/templates/clips/desktop/src-tauri/src/call_activity.rs +146 -0
  149. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +1 -0
  150. package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +2 -122
  151. package/corpus/templates/clips/server/lib/recording-page-access.ts +6 -1
  152. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +5 -0
  153. package/corpus/templates/clips/shared/share-meta.ts +19 -3
  154. package/corpus/templates/content/.agents/skills/adding-a-feature/SKILL.md +208 -0
  155. package/corpus/templates/content/.agents/skills/context-awareness/SKILL.md +206 -0
  156. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +73 -80
  157. package/corpus/templates/content/.agents/skills/portability/SKILL.md +107 -0
  158. package/corpus/templates/content/.agents/skills/secrets/SKILL.md +339 -0
  159. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +3 -3
  160. package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +1 -1
  161. package/corpus/templates/content/.agents/skills/sharing/SKILL.md +1 -0
  162. package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +116 -44
  163. package/corpus/templates/content/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  164. package/corpus/templates/content/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  165. package/corpus/templates/content/.agents/skills/workspace-conventions/SKILL.md +93 -0
  166. package/corpus/templates/content/actions/_database-utils.ts +10 -0
  167. package/corpus/templates/content/actions/add-comment.ts +1 -1
  168. package/corpus/templates/content/actions/attach-content-database-source.ts +158 -61
  169. package/corpus/templates/content/actions/create-document.ts +1 -0
  170. package/corpus/templates/content/actions/delete-comment.ts +1 -1
  171. package/corpus/templates/content/actions/get-document.ts +9 -1
  172. package/corpus/templates/content/actions/import-content-source.ts +8 -0
  173. package/corpus/templates/content/actions/list-documents.ts +10 -1
  174. package/corpus/templates/content/actions/update-comment.ts +1 -1
  175. package/corpus/templates/content/actions/update-document.ts +11 -0
  176. package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +52 -29
  177. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +13 -8
  178. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +62 -2
  179. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +163 -53
  180. package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +16 -0
  181. package/corpus/templates/content/app/components/editor/database/settings.tsx +22 -13
  182. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +7 -7
  183. package/corpus/templates/content/app/hooks/use-documents.ts +2 -0
  184. package/corpus/templates/content/app/i18n-data.ts +10 -0
  185. package/corpus/templates/content/app/root.tsx +1 -21
  186. package/corpus/templates/content/changelog/2026-08-05-connect-sources-from-add-column.md +6 -0
  187. package/corpus/templates/content/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  188. package/corpus/templates/content/shared/api.ts +7 -1
  189. package/corpus/templates/crm/.agents/skills/actions/SKILL.md +146 -0
  190. package/corpus/templates/crm/.agents/skills/actions/references/action-fields.md +136 -0
  191. package/corpus/templates/crm/.agents/skills/actions/references/examples.md +94 -0
  192. package/corpus/templates/crm/.agents/skills/actions/references/provider-apis.md +95 -0
  193. package/corpus/templates/crm/.agents/skills/adding-a-feature/SKILL.md +208 -0
  194. package/corpus/templates/crm/.agents/skills/context-awareness/SKILL.md +206 -0
  195. package/corpus/templates/crm/.agents/skills/delegate-to-agent/SKILL.md +289 -0
  196. package/corpus/templates/crm/.agents/skills/frontend-design/SKILL.md +296 -0
  197. package/corpus/templates/crm/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  198. package/corpus/templates/crm/.agents/skills/portability/SKILL.md +107 -0
  199. package/corpus/templates/crm/.agents/skills/real-time-sync/SKILL.md +232 -0
  200. package/corpus/templates/crm/.agents/skills/secrets/SKILL.md +339 -0
  201. package/corpus/templates/crm/.agents/skills/security/SKILL.md +324 -0
  202. package/corpus/templates/crm/.agents/skills/self-modifying-code/SKILL.md +123 -0
  203. package/corpus/templates/crm/.agents/skills/shadcn-ui/SKILL.md +123 -0
  204. package/corpus/templates/crm/.agents/skills/sharing/SKILL.md +1 -0
  205. package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +116 -44
  206. package/corpus/templates/crm/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  207. package/corpus/templates/crm/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  208. package/corpus/templates/crm/.agents/skills/workspace-conventions/SKILL.md +93 -0
  209. package/corpus/templates/design/.agents/skills/adding-a-feature/SKILL.md +208 -0
  210. package/corpus/templates/design/.agents/skills/context-awareness/SKILL.md +206 -0
  211. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +73 -80
  212. package/corpus/templates/design/.agents/skills/portability/SKILL.md +107 -0
  213. package/corpus/templates/design/.agents/skills/real-time-sync/SKILL.md +232 -0
  214. package/corpus/templates/design/.agents/skills/secrets/SKILL.md +339 -0
  215. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +3 -3
  216. package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +1 -1
  217. package/corpus/templates/design/.agents/skills/sharing/SKILL.md +1 -0
  218. package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +116 -44
  219. package/corpus/templates/design/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  220. package/corpus/templates/design/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  221. package/corpus/templates/design/.agents/skills/workspace-conventions/SKILL.md +93 -0
  222. package/corpus/templates/design/actions/index-design-system-with-builder.ts +16 -2
  223. package/corpus/templates/design/app/components/design-system/ProductionDesignSystemShowcase.tsx +6 -18
  224. package/corpus/templates/design/app/i18n/en-US.ts +1 -1
  225. package/corpus/templates/design/app/i18n-data.ts +40 -0
  226. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +153 -131
  227. package/corpus/templates/design/app/pages/DesignSystems.tsx +7 -61
  228. package/corpus/templates/design/app/pages/Present.tsx +8 -2
  229. package/corpus/templates/design/app/pages/Templates.tsx +1 -0
  230. package/corpus/templates/design/app/pages/design-editor/tool-state.ts +4 -1
  231. package/corpus/templates/design/app/pages/design-editor/types.ts +6 -1
  232. package/corpus/templates/design/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  233. package/corpus/templates/dispatch/.agents/skills/adding-a-feature/SKILL.md +208 -0
  234. package/corpus/templates/dispatch/.agents/skills/context-awareness/SKILL.md +206 -0
  235. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +73 -80
  236. package/corpus/templates/dispatch/.agents/skills/portability/SKILL.md +107 -0
  237. package/corpus/templates/dispatch/.agents/skills/real-time-sync/SKILL.md +232 -0
  238. package/corpus/templates/dispatch/.agents/skills/secrets/SKILL.md +339 -0
  239. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +3 -3
  240. package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +1 -1
  241. package/corpus/templates/dispatch/.agents/skills/sharing/SKILL.md +1 -0
  242. package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +116 -44
  243. package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  244. package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  245. package/corpus/templates/dispatch/.agents/skills/workspace-conventions/SKILL.md +93 -0
  246. package/corpus/templates/dispatch/actions/apply-workspace-connection-setup.ts +97 -15
  247. package/corpus/templates/dispatch/actions/connection-permissions.ts +77 -0
  248. package/corpus/templates/dispatch/actions/delete-workspace-connection.ts +12 -2
  249. package/corpus/templates/dispatch/actions/list-workspace-user-groups.ts +19 -0
  250. package/corpus/templates/dispatch/actions/plan-workspace-connection-setup.ts +9 -2
  251. package/corpus/templates/dispatch/actions/set-workspace-connection-grant.ts +21 -2
  252. package/corpus/templates/dispatch/actions/upsert-workspace-connection.ts +66 -1
  253. package/corpus/templates/dispatch/actions/upsert-workspace-user-group.ts +27 -0
  254. package/corpus/templates/dispatch/app/chat-first-pages.ts +84 -0
  255. package/corpus/templates/dispatch/app/i18n-data.ts +3989 -3527
  256. package/corpus/templates/dispatch/app/routes/integrations.tsx +1568 -685
  257. package/corpus/templates/dispatch/app/routes/settings.tsx +14 -9
  258. package/corpus/templates/dispatch/changelog/2026-08-12-search-and-pin-workspace-apps-from-the-app-catalog.md +6 -0
  259. package/corpus/templates/dispatch/changelog/2026-08-12-workspace-integration-access-now-shows-exactly-which-apps-ca.md +6 -0
  260. package/corpus/templates/dispatch/server/lib/app-roles.ts +5 -0
  261. package/corpus/templates/dispatch/shared/app-roles.ts +1 -0
  262. package/corpus/templates/factory/.agents/skills/adding-a-feature/SKILL.md +3 -2
  263. package/corpus/templates/factory/.agents/skills/context-awareness/SKILL.md +206 -0
  264. package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +73 -80
  265. package/corpus/templates/factory/.agents/skills/portability/SKILL.md +107 -0
  266. package/corpus/templates/factory/.agents/skills/secrets/SKILL.md +339 -0
  267. package/corpus/templates/factory/.agents/skills/self-modifying-code/SKILL.md +3 -3
  268. package/corpus/templates/factory/.agents/skills/shadcn-ui/SKILL.md +1 -1
  269. package/corpus/templates/factory/.agents/skills/sharing/SKILL.md +1 -0
  270. package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +116 -44
  271. package/corpus/templates/factory/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  272. package/corpus/templates/factory/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  273. package/corpus/templates/factory/.agents/skills/workspace-conventions/SKILL.md +93 -0
  274. package/corpus/templates/factory/AGENTS.md +10 -1
  275. package/corpus/templates/factory/README.md +18 -7
  276. package/corpus/templates/factory/actions/list-triage-items.ts +10 -4
  277. package/corpus/templates/factory/actions/poll-github-sources.ts +53 -14
  278. package/corpus/templates/factory/actions/poll-sentry-errors.ts +31 -13
  279. package/corpus/templates/factory/actions/poll-slack-channel.ts +41 -5
  280. package/corpus/templates/factory/actions/provider-api-catalog.ts +13 -0
  281. package/corpus/templates/factory/actions/provider-api-docs.ts +11 -0
  282. package/corpus/templates/factory/actions/provider-api-request.ts +17 -0
  283. package/corpus/templates/factory/actions/save-triage-config.ts +87 -38
  284. package/corpus/templates/factory/app/components/factory/FactoryAuditView.tsx +14 -12
  285. package/corpus/templates/factory/app/components/factory/FactoryCanvas.tsx +60 -77
  286. package/corpus/templates/factory/app/components/factory/FactoryInspector.tsx +66 -125
  287. package/corpus/templates/factory/app/components/layout/Header.tsx +1 -0
  288. package/corpus/templates/factory/app/components/layout/Layout.tsx +8 -3
  289. package/corpus/templates/factory/app/components/layout/Sidebar.tsx +9 -5
  290. package/corpus/templates/factory/app/components/ui/input.tsx +15 -1
  291. package/corpus/templates/factory/app/components/ui/popover.tsx +1 -0
  292. package/corpus/templates/factory/app/components/ui/switch.tsx +1 -0
  293. package/corpus/templates/factory/app/components/ui/textarea.tsx +20 -1
  294. package/corpus/templates/factory/app/hooks/use-navigation-state.ts +5 -3
  295. package/corpus/templates/factory/app/i18n/en-US.ts +17 -0
  296. package/corpus/templates/factory/app/routes/_index.tsx +5 -87
  297. package/corpus/templates/factory/app/routes/chat.$threadId.tsx +1 -1
  298. package/corpus/templates/factory/app/routes/chat.tsx +91 -0
  299. package/corpus/templates/factory/app/routes/factory.tsx +554 -427
  300. package/corpus/templates/factory/app/routes/settings.tsx +1 -1
  301. package/corpus/templates/factory/server/connectors/credentials.ts +25 -0
  302. package/corpus/templates/factory/server/lib/provider-api.ts +34 -0
  303. package/corpus/templates/factory/server/plugins/agent-chat.ts +15 -3
  304. package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +96 -24
  305. package/corpus/templates/factory/server/triage/review-state.ts +33 -0
  306. package/corpus/templates/factory/server/triage/slack-poller.ts +1 -0
  307. package/corpus/templates/forms/.agents/skills/adding-a-feature/SKILL.md +208 -0
  308. package/corpus/templates/forms/.agents/skills/context-awareness/SKILL.md +206 -0
  309. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +73 -80
  310. package/corpus/templates/forms/.agents/skills/portability/SKILL.md +107 -0
  311. package/corpus/templates/forms/.agents/skills/secrets/SKILL.md +339 -0
  312. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +3 -3
  313. package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +1 -1
  314. package/corpus/templates/forms/.agents/skills/sharing/SKILL.md +1 -0
  315. package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +116 -44
  316. package/corpus/templates/forms/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  317. package/corpus/templates/forms/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  318. package/corpus/templates/forms/.agents/skills/workspace-conventions/SKILL.md +93 -0
  319. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +1 -0
  320. package/corpus/templates/forms/shared/types.ts +1 -1
  321. package/corpus/templates/macros/.agents/skills/adding-a-feature/SKILL.md +208 -0
  322. package/corpus/templates/macros/.agents/skills/context-awareness/SKILL.md +206 -0
  323. package/corpus/templates/macros/.agents/skills/delegate-to-agent/SKILL.md +289 -0
  324. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +73 -80
  325. package/corpus/templates/macros/.agents/skills/portability/SKILL.md +107 -0
  326. package/corpus/templates/macros/.agents/skills/real-time-sync/SKILL.md +232 -0
  327. package/corpus/templates/macros/.agents/skills/secrets/SKILL.md +339 -0
  328. package/corpus/templates/macros/.agents/skills/self-modifying-code/SKILL.md +123 -0
  329. package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +1 -1
  330. package/corpus/templates/macros/.agents/skills/sharing/SKILL.md +1 -0
  331. package/corpus/templates/macros/.agents/skills/turn-into-app/SKILL.md +116 -44
  332. package/corpus/templates/macros/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  333. package/corpus/templates/macros/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  334. package/corpus/templates/macros/.agents/skills/workspace-conventions/SKILL.md +93 -0
  335. package/corpus/templates/mail/.agents/skills/adding-a-feature/SKILL.md +208 -0
  336. package/corpus/templates/mail/.agents/skills/context-awareness/SKILL.md +206 -0
  337. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +73 -80
  338. package/corpus/templates/mail/.agents/skills/portability/SKILL.md +107 -0
  339. package/corpus/templates/mail/.agents/skills/secrets/SKILL.md +339 -0
  340. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +3 -3
  341. package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +1 -1
  342. package/corpus/templates/mail/.agents/skills/sharing/SKILL.md +1 -0
  343. package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +116 -44
  344. package/corpus/templates/mail/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  345. package/corpus/templates/mail/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  346. package/corpus/templates/mail/.agents/skills/workspace-conventions/SKILL.md +93 -0
  347. package/corpus/templates/mail/actions/send-email.ts +9 -0
  348. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +4 -4
  349. package/corpus/templates/mail/changelog/2026-08-12-agent-sent-messages-appear-immediately.md +6 -0
  350. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +3 -2
  351. package/corpus/templates/plan/.agents/skills/context-awareness/SKILL.md +206 -0
  352. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +73 -80
  353. package/corpus/templates/plan/.agents/skills/portability/SKILL.md +107 -0
  354. package/corpus/templates/plan/.agents/skills/secrets/SKILL.md +339 -0
  355. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +3 -3
  356. package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +1 -1
  357. package/corpus/templates/plan/.agents/skills/sharing/SKILL.md +1 -0
  358. package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +116 -44
  359. package/corpus/templates/plan/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  360. package/corpus/templates/plan/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  361. package/corpus/templates/plan/.agents/skills/workspace-conventions/SKILL.md +93 -0
  362. package/corpus/templates/plan/actions/delete-plan-comment.ts +6 -0
  363. package/corpus/templates/plan/actions/reply-to-plan-comment.ts +7 -1
  364. package/corpus/templates/plan/actions/resolve-plan-comment.ts +7 -1
  365. package/corpus/templates/plan/actions/update-visual-plan.ts +6 -0
  366. package/corpus/templates/plan/app/hooks/use-plans.ts +1 -1
  367. package/corpus/templates/plan/app/pages/PlansPage.tsx +51 -23
  368. package/corpus/templates/plan/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  369. package/corpus/templates/plan/server/plans.ts +2 -2
  370. package/corpus/templates/plan/shared/types.ts +1 -1
  371. package/corpus/templates/slides/.agents/skills/adding-a-feature/SKILL.md +208 -0
  372. package/corpus/templates/slides/.agents/skills/context-awareness/SKILL.md +206 -0
  373. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +6 -0
  374. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +73 -80
  375. package/corpus/templates/slides/.agents/skills/portability/SKILL.md +107 -0
  376. package/corpus/templates/slides/.agents/skills/real-time-sync/SKILL.md +232 -0
  377. package/corpus/templates/slides/.agents/skills/secrets/SKILL.md +339 -0
  378. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +3 -3
  379. package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +1 -1
  380. package/corpus/templates/slides/.agents/skills/sharing/SKILL.md +1 -0
  381. package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +116 -44
  382. package/corpus/templates/slides/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  383. package/corpus/templates/slides/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  384. package/corpus/templates/slides/.agents/skills/workspace-conventions/SKILL.md +93 -0
  385. package/corpus/templates/slides/AGENTS.md +4 -0
  386. package/corpus/templates/slides/actions/add-slide-comment.ts +1 -1
  387. package/corpus/templates/slides/actions/delete-slide-comment.ts +1 -1
  388. package/corpus/templates/slides/actions/get-layout-overflows.ts +67 -2
  389. package/corpus/templates/slides/actions/update-slide-comment.ts +1 -1
  390. package/corpus/templates/slides/actions/view-screen.ts +76 -26
  391. package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +30 -8
  392. package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +2 -1
  393. package/corpus/templates/slides/app/components/editor/AlignmentGuides.tsx +75 -0
  394. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +80 -80
  395. package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +125 -10
  396. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +244 -9
  397. package/corpus/templates/slides/app/components/editor/SlideOverflowWarning.tsx +1 -1
  398. package/corpus/templates/slides/app/components/editor/canvas-interactions/slides-canvas-adapter.ts +3 -3
  399. package/corpus/templates/slides/app/components/editor/slide-object-interactions.ts +218 -0
  400. package/corpus/templates/slides/app/context/DeckContext.tsx +56 -30
  401. package/corpus/templates/slides/app/hooks/use-deck-role.ts +13 -5
  402. package/corpus/templates/slides/app/hooks/use-design-systems.ts +1 -1
  403. package/corpus/templates/slides/app/i18n/en-US.ts +6 -2
  404. package/corpus/templates/slides/app/lib/create-deck-generation.ts +1 -0
  405. package/corpus/templates/slides/app/lib/pending-deck-changes.ts +32 -0
  406. package/corpus/templates/slides/app/pages/DeckEditor.tsx +85 -4
  407. package/corpus/templates/slides/app/pages/Index.tsx +65 -66
  408. package/corpus/templates/slides/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  409. package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +3 -2
  410. package/corpus/templates/tasks/.agents/skills/context-awareness/SKILL.md +206 -0
  411. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +73 -80
  412. package/corpus/templates/tasks/.agents/skills/portability/SKILL.md +107 -0
  413. package/corpus/templates/tasks/.agents/skills/secrets/SKILL.md +339 -0
  414. package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +3 -3
  415. package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +1 -1
  416. package/corpus/templates/tasks/.agents/skills/sharing/SKILL.md +1 -0
  417. package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +116 -44
  418. package/corpus/templates/tasks/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  419. package/corpus/templates/tasks/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  420. package/corpus/templates/tasks/.agents/skills/workspace-conventions/SKILL.md +93 -0
  421. package/corpus/templates/tasks/app/components/custom-fields/FieldsPage.tsx +1 -4
  422. package/corpus/templates/tasks/app/components/inbox/InboxList.tsx +0 -1
  423. package/corpus/templates/tasks/app/components/inbox/InboxListPage.tsx +0 -1
  424. package/corpus/templates/tasks/app/components/shared/ListViewHeader.tsx +0 -3
  425. package/corpus/templates/tasks/app/components/shared/PageHeader.tsx +1 -4
  426. package/corpus/templates/tasks/app/components/tasks/TaskList.tsx +0 -1
  427. package/corpus/templates/tasks/app/components/tasks/TaskListPage.tsx +0 -1
  428. package/dist/agent/engine/ai-sdk-engine.js +5 -0
  429. package/dist/agent/engine/anthropic-engine.js +8 -0
  430. package/dist/agent/engine/registry.js +24 -19
  431. package/dist/agent/engine/translate-anthropic.js +16 -1
  432. package/dist/automations/service.d.ts +2 -0
  433. package/dist/automations/service.js +5 -1
  434. package/dist/chat-threads/schema.d.ts +2 -2
  435. package/dist/cli/changelog.js +21 -4
  436. package/dist/cli/create.d.ts +12 -1
  437. package/dist/cli/create.js +99 -11
  438. package/dist/cli/index.js +6 -6
  439. package/dist/cli/process.d.ts +7 -0
  440. package/dist/cli/process.js +12 -0
  441. package/dist/cli/workspace-skill-policy.d.ts +15 -0
  442. package/dist/cli/workspace-skill-policy.js +62 -0
  443. package/dist/cli/workspacify.js +36 -0
  444. package/dist/client/AgentPanel.d.ts +14 -2
  445. package/dist/client/AgentPanel.js +40 -24
  446. package/dist/client/AssistantChat.js +90 -182
  447. package/dist/client/FeedbackButton.js +15 -2
  448. package/dist/client/RouteTransitionIndicator.d.ts +14 -2
  449. package/dist/client/RouteTransitionIndicator.js +16 -5
  450. package/dist/client/agent-page/AgentTabsPage.js +19 -6
  451. package/dist/client/app-config.d.ts +3 -0
  452. package/dist/client/app-config.js +6 -0
  453. package/dist/client/app-providers.js +2 -1
  454. package/dist/client/changelog/Changelog.d.ts +2 -1
  455. package/dist/client/changelog/Changelog.js +7 -5
  456. package/dist/client/chat/markdown-renderer.d.ts +3 -1
  457. package/dist/client/chat/markdown-renderer.js +24 -24
  458. package/dist/client/chat/message-components.d.ts +23 -0
  459. package/dist/client/chat/message-components.js +27 -44
  460. package/dist/client/chat/tool-call-display.d.ts +2 -2
  461. package/dist/client/chat/tool-call-display.js +6 -3
  462. package/dist/client/chat-first/app-open-actions.d.ts +28 -0
  463. package/dist/client/chat-first/app-open-actions.js +25 -0
  464. package/dist/client/chat-first/index.d.ts +1 -0
  465. package/dist/client/chat-first/index.js +1 -0
  466. package/dist/client/chat-first/primary-nav.d.ts +2 -1
  467. package/dist/client/chat-first/primary-nav.js +12 -5
  468. package/dist/client/conversation/use-near-bottom-autoscroll.d.ts +14 -0
  469. package/dist/client/conversation/use-near-bottom-autoscroll.js +14 -0
  470. package/dist/client/error-format.js +32 -3
  471. package/dist/client/extensions/EmbeddedExtension.js +1 -0
  472. package/dist/client/extensions/ExtensionViewer.js +3 -1
  473. package/dist/client/extensions/InlineExtensionFrame.js +1 -0
  474. package/dist/client/extensions/iframe-bridge.d.ts +3 -2
  475. package/dist/client/extensions/iframe-bridge.js +4 -2
  476. package/dist/client/i18n.js +28 -5
  477. package/dist/client/integrations/IntegrationConnectionChoice.d.ts +11 -0
  478. package/dist/client/integrations/IntegrationConnectionChoice.js +6 -0
  479. package/dist/client/integrations/IntegrationGrid.d.ts +23 -0
  480. package/dist/client/integrations/IntegrationGrid.js +12 -0
  481. package/dist/client/integrations/IntegrationsPanel.js +92 -26
  482. package/dist/client/integrations/index.d.ts +2 -0
  483. package/dist/client/integrations/index.js +2 -0
  484. package/dist/client/onboarding/FirstRunOnboarding.d.ts +3 -1
  485. package/dist/client/onboarding/FirstRunOnboarding.js +26 -16
  486. package/dist/client/onboarding/first-run-enabled.js +1 -5
  487. package/dist/client/onboarding/first-run-startup-gate.d.ts +5 -0
  488. package/dist/client/onboarding/first-run-startup-gate.js +51 -0
  489. package/dist/client/onboarding/first-run-status.d.ts +7 -0
  490. package/dist/client/onboarding/first-run-status.js +26 -0
  491. package/dist/client/onboarding/index.d.ts +3 -0
  492. package/dist/client/onboarding/index.js +3 -0
  493. package/dist/client/onboarding/use-onboarding.d.ts +1 -0
  494. package/dist/client/onboarding/use-onboarding.js +13 -11
  495. package/dist/client/org/TeamPage.js +174 -28
  496. package/dist/client/resources/McpConnectionSuggestion.js +29 -72
  497. package/dist/client/resources/McpIntegrationDialog.d.ts +3 -1
  498. package/dist/client/resources/McpIntegrationDialog.js +176 -51
  499. package/dist/client/resources/index.d.ts +1 -0
  500. package/dist/client/resources/index.js +1 -0
  501. package/dist/client/resources/mcp-integration-catalog.d.ts +8 -0
  502. package/dist/client/resources/mcp-integration-catalog.js +28 -0
  503. package/dist/client/settings/ExtensionsSettingsContent.js +2 -2
  504. package/dist/client/settings/SettingsPanel.d.ts +6 -0
  505. package/dist/client/settings/SettingsPanel.js +21 -8
  506. package/dist/client/settings/SettingsRow.d.ts +3 -1
  507. package/dist/client/settings/SettingsRow.js +4 -2
  508. package/dist/client/settings/SettingsSkeleton.js +5 -3
  509. package/dist/client/settings/SettingsTabsPage.js +2 -2
  510. package/dist/client/settings/UsageSection.d.ts +4 -1
  511. package/dist/client/settings/UsageSection.js +187 -93
  512. package/dist/client/settings/agent-settings-search.js +6 -2
  513. package/dist/client/setup-connections/useBuilderConnectCardController.d.ts +1 -1
  514. package/dist/client/setup-connections/useBuilderConnectCardController.js +2 -2
  515. package/dist/client/sharing/ShareButton.d.ts +2 -0
  516. package/dist/client/sharing/ShareButton.js +9 -2
  517. package/dist/client/sharing/ShareDialog.js +4 -1
  518. package/dist/client/sharing/useShareButtonController.d.ts +2 -1
  519. package/dist/client/sharing/useShareButtonController.js +8 -0
  520. package/dist/client/sharing/useShareDialogController.d.ts +1 -1
  521. package/dist/client/sharing/useShareDialogController.js +2 -1
  522. package/dist/collab/struct-routes.d.ts +1 -1
  523. package/dist/config.d.ts +13 -0
  524. package/dist/config.js +53 -0
  525. package/dist/dashboard-storage/schema.d.ts +2 -2
  526. package/dist/data-programs/schema.d.ts +2 -2
  527. package/dist/extensions/actions.js +2 -1
  528. package/dist/extensions/html-shell.d.ts +2 -2
  529. package/dist/extensions/routes.js +4 -1
  530. package/dist/extensions/schema.d.ts +2 -2
  531. package/dist/file-upload/pre-upload-attachments.js +1 -1
  532. package/dist/framework-tools.js +3 -0
  533. package/dist/history/types.d.ts +1 -1
  534. package/dist/index.d.ts +2 -1
  535. package/dist/index.js +2 -1
  536. package/dist/jobs/background-automation-runner.d.ts +1 -0
  537. package/dist/jobs/background-automation-runner.js +4 -2
  538. package/dist/jobs/frontmatter.d.ts +4 -0
  539. package/dist/jobs/frontmatter.js +16 -0
  540. package/dist/jobs/run-history.js +1 -1
  541. package/dist/jobs/tools.js +9 -5
  542. package/dist/localization/default-messages.d.ts +27 -0
  543. package/dist/localization/default-messages.js +28 -1
  544. package/dist/notifications/routes.d.ts +5 -5
  545. package/dist/observability/routes.d.ts +3 -3
  546. package/dist/onboarding/plugin.js +17 -2
  547. package/dist/org/context.js +16 -0
  548. package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
  549. package/dist/provider-api/actions/provider-api.d.ts +8 -8
  550. package/dist/review/actions/create-review-comment.js +1 -1
  551. package/dist/review/actions/delete-review-comment.js +4 -1
  552. package/dist/review/actions/list-review-comments.js +4 -2
  553. package/dist/review/actions/reply-review-comment.js +1 -1
  554. package/dist/review/types.d.ts +1 -1
  555. package/dist/secrets/routes.d.ts +9 -9
  556. package/dist/server/action-discovery.js +29 -0
  557. package/dist/server/agent-chat/plugin-options.d.ts +7 -0
  558. package/dist/server/agent-chat-plugin.d.ts +2 -0
  559. package/dist/server/agent-chat-plugin.js +12 -4
  560. package/dist/server/builder-browser.js +31 -0
  561. package/dist/server/onboarding-html.js +1 -1
  562. package/dist/server/transcribe-voice.d.ts +1 -1
  563. package/dist/server/workspace-provider-oauth.js +38 -26
  564. package/dist/setup-connections/index.d.ts +1 -1
  565. package/dist/setup-connections/index.js +1 -1
  566. package/dist/shared/first-run-onboarding.d.ts +6 -0
  567. package/dist/shared/first-run-onboarding.js +6 -0
  568. package/dist/sharing/access.d.ts +1 -1
  569. package/dist/sharing/access.js +4 -1
  570. package/dist/sharing/actions/share-resource.d.ts +1 -1
  571. package/dist/sharing/actions/share-resource.js +2 -2
  572. package/dist/sharing/registry.d.ts +2 -2
  573. package/dist/sharing/schema.d.ts +5 -5
  574. package/dist/sharing/schema.js +9 -6
  575. package/dist/styles/agent-native.css +21 -0
  576. package/dist/styles/chat-history-list.css +1 -1
  577. package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +3 -2
  578. package/dist/templates/chat/.agents/skills/context-awareness/SKILL.md +206 -0
  579. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +73 -80
  580. package/dist/templates/chat/.agents/skills/portability/SKILL.md +107 -0
  581. package/dist/templates/chat/.agents/skills/secrets/SKILL.md +339 -0
  582. package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +3 -3
  583. package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +1 -1
  584. package/dist/templates/chat/.agents/skills/sharing/SKILL.md +1 -0
  585. package/dist/templates/chat/.agents/skills/turn-into-app/SKILL.md +116 -44
  586. package/dist/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  587. package/dist/templates/chat/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  588. package/dist/templates/chat/.agents/skills/workspace-conventions/SKILL.md +93 -0
  589. package/dist/templates/chat/AGENTS.md +4 -5
  590. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +3 -2
  591. package/dist/templates/default/.agents/skills/context-awareness/SKILL.md +206 -0
  592. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +73 -80
  593. package/dist/templates/default/.agents/skills/portability/SKILL.md +107 -0
  594. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +3 -3
  595. package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +1 -1
  596. package/dist/templates/default/.agents/skills/sharing/SKILL.md +233 -0
  597. package/dist/templates/default/.agents/skills/turn-into-app/SKILL.md +116 -44
  598. package/dist/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  599. package/dist/templates/default/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  600. package/dist/templates/default/.agents/skills/workspace-conventions/SKILL.md +93 -0
  601. package/dist/templates/default/AGENTS.md +17 -2
  602. package/dist/templates/default/agent-native.config.ts +6 -0
  603. package/dist/templates/default/app/i18n/ar-SA.ts +2 -0
  604. package/dist/templates/default/app/i18n/de-DE.ts +2 -0
  605. package/dist/templates/default/app/i18n/en-US.ts +3 -1
  606. package/dist/templates/default/app/i18n/es-ES.ts +2 -0
  607. package/dist/templates/default/app/i18n/fr-FR.ts +2 -0
  608. package/dist/templates/default/app/i18n/hi-IN.ts +2 -0
  609. package/dist/templates/default/app/i18n/ja-JP.ts +2 -0
  610. package/dist/templates/default/app/i18n/ko-KR.ts +2 -0
  611. package/dist/templates/default/app/i18n/pt-BR.ts +2 -0
  612. package/dist/templates/default/app/i18n/zh-CN.ts +2 -0
  613. package/dist/templates/default/app/i18n/zh-TW.ts +2 -0
  614. package/dist/templates/headless/.agents/skills/delegate-to-agent/SKILL.md +289 -0
  615. package/dist/templates/headless/.agents/skills/security/SKILL.md +324 -0
  616. package/dist/templates/headless/.agents/skills/storing-data/SKILL.md +178 -0
  617. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +3 -2
  618. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +73 -80
  619. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +3 -3
  620. package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +1 -1
  621. package/dist/templates/workspace-core/.agents/skills/sharing/SKILL.md +1 -0
  622. package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +116 -44
  623. package/dist/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  624. package/dist/templates/workspace-core/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  625. package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +3 -2
  626. package/dist/templates/workspace-core/AGENTS.md +9 -3
  627. package/dist/templates/workspace-root/AGENTS.md +26 -1
  628. package/dist/templates/workspace-root/agent-native.config.ts +8 -0
  629. package/dist/triggers/actions.js +2 -2
  630. package/dist/usage/actions/get-usage-alerts.d.ts +5 -0
  631. package/dist/usage/actions/get-usage-alerts.js +16 -0
  632. package/dist/usage/actions/get-usage-metrics.d.ts +7 -0
  633. package/dist/usage/actions/get-usage-metrics.js +26 -0
  634. package/dist/usage/actions/manage-usage-alert.d.ts +14 -0
  635. package/dist/usage/actions/manage-usage-alert.js +48 -0
  636. package/dist/usage/alerts-store.d.ts +78 -0
  637. package/dist/usage/alerts-store.js +592 -0
  638. package/dist/usage/metrics-store.d.ts +95 -0
  639. package/dist/usage/metrics-store.js +386 -0
  640. package/dist/usage/store.js +10 -0
  641. package/dist/vite/action-types-plugin.js +28 -0
  642. package/dist/vite/agent-native-config-loader.d.ts +6 -0
  643. package/dist/vite/agent-native-config-loader.js +54 -2
  644. package/dist/vite/client.js +11 -5
  645. package/dist/workspace-connections/actions/bulk-update-workspace-user-groups.d.ts +6 -0
  646. package/dist/workspace-connections/actions/bulk-update-workspace-user-groups.js +24 -0
  647. package/dist/workspace-connections/actions/delete-workspace-user-group.d.ts +7 -0
  648. package/dist/workspace-connections/actions/delete-workspace-user-group.js +29 -0
  649. package/dist/workspace-connections/actions/list-workspace-user-groups.d.ts +2 -0
  650. package/dist/workspace-connections/actions/list-workspace-user-groups.js +13 -0
  651. package/dist/workspace-connections/actions/upsert-workspace-user-group.d.ts +6 -0
  652. package/dist/workspace-connections/actions/upsert-workspace-user-group.js +22 -0
  653. package/dist/workspace-connections/credential-key-aliases.d.ts +3 -0
  654. package/dist/workspace-connections/credential-key-aliases.js +31 -0
  655. package/dist/workspace-connections/credentials.js +1 -25
  656. package/dist/workspace-connections/groups.d.ts +32 -0
  657. package/dist/workspace-connections/groups.js +288 -0
  658. package/dist/workspace-connections/index.d.ts +3 -1
  659. package/dist/workspace-connections/index.js +3 -1
  660. package/dist/workspace-connections/store.d.ts +9 -0
  661. package/dist/workspace-connections/store.js +68 -8
  662. package/docs/content/components.mdx +2 -2
  663. package/docs/content/sharing.mdx +2 -1
  664. package/package.json +10 -2
  665. package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +3 -2
  666. package/src/templates/chat/.agents/skills/context-awareness/SKILL.md +206 -0
  667. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +73 -80
  668. package/src/templates/chat/.agents/skills/portability/SKILL.md +107 -0
  669. package/src/templates/chat/.agents/skills/secrets/SKILL.md +339 -0
  670. package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +3 -3
  671. package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +1 -1
  672. package/src/templates/chat/.agents/skills/sharing/SKILL.md +1 -0
  673. package/src/templates/chat/.agents/skills/turn-into-app/SKILL.md +116 -44
  674. package/src/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  675. package/src/templates/chat/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  676. package/src/templates/chat/.agents/skills/workspace-conventions/SKILL.md +93 -0
  677. package/src/templates/chat/AGENTS.md +4 -5
  678. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +3 -2
  679. package/src/templates/default/.agents/skills/context-awareness/SKILL.md +206 -0
  680. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +73 -80
  681. package/src/templates/default/.agents/skills/portability/SKILL.md +107 -0
  682. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +3 -3
  683. package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +1 -1
  684. package/src/templates/default/.agents/skills/sharing/SKILL.md +233 -0
  685. package/src/templates/default/.agents/skills/turn-into-app/SKILL.md +116 -44
  686. package/src/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  687. package/src/templates/default/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  688. package/src/templates/default/.agents/skills/workspace-conventions/SKILL.md +93 -0
  689. package/src/templates/default/AGENTS.md +17 -2
  690. package/src/templates/default/agent-native.config.ts +6 -0
  691. package/src/templates/default/app/i18n/ar-SA.ts +2 -0
  692. package/src/templates/default/app/i18n/de-DE.ts +2 -0
  693. package/src/templates/default/app/i18n/en-US.ts +3 -1
  694. package/src/templates/default/app/i18n/es-ES.ts +2 -0
  695. package/src/templates/default/app/i18n/fr-FR.ts +2 -0
  696. package/src/templates/default/app/i18n/hi-IN.ts +2 -0
  697. package/src/templates/default/app/i18n/ja-JP.ts +2 -0
  698. package/src/templates/default/app/i18n/ko-KR.ts +2 -0
  699. package/src/templates/default/app/i18n/pt-BR.ts +2 -0
  700. package/src/templates/default/app/i18n/zh-CN.ts +2 -0
  701. package/src/templates/default/app/i18n/zh-TW.ts +2 -0
  702. package/src/templates/headless/.agents/skills/delegate-to-agent/SKILL.md +289 -0
  703. package/src/templates/headless/.agents/skills/security/SKILL.md +324 -0
  704. package/src/templates/headless/.agents/skills/storing-data/SKILL.md +178 -0
  705. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +3 -2
  706. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +73 -80
  707. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +3 -3
  708. package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +1 -1
  709. package/src/templates/workspace-core/.agents/skills/sharing/SKILL.md +1 -0
  710. package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +116 -44
  711. package/src/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  712. package/src/templates/workspace-core/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  713. package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +3 -2
  714. package/src/templates/workspace-core/AGENTS.md +9 -3
  715. package/src/templates/workspace-root/AGENTS.md +26 -1
  716. package/src/templates/workspace-root/agent-native.config.ts +8 -0
  717. package/corpus/templates/analytics/.agents/skills/capture-learnings/SKILL.md +0 -89
  718. package/corpus/templates/analytics/.agents/skills/create-skill/SKILL.md +0 -195
  719. package/corpus/templates/analytics/.agents/skills/feature-flags/SKILL.md +0 -169
  720. package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  721. package/corpus/templates/assets/.agents/skills/capture-learnings/SKILL.md +0 -89
  722. package/corpus/templates/assets/.agents/skills/create-skill/SKILL.md +0 -195
  723. package/corpus/templates/assets/.agents/skills/feature-flags/SKILL.md +0 -169
  724. package/corpus/templates/assets/.agents/skills/real-time-collab/SKILL.md +0 -392
  725. package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  726. package/corpus/templates/brain/.agents/skills/capture-learnings/SKILL.md +0 -89
  727. package/corpus/templates/brain/.agents/skills/create-skill/SKILL.md +0 -195
  728. package/corpus/templates/brain/.agents/skills/feature-flags/SKILL.md +0 -169
  729. package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  730. package/corpus/templates/calendar/.agents/skills/capture-learnings/SKILL.md +0 -89
  731. package/corpus/templates/calendar/.agents/skills/create-skill/SKILL.md +0 -195
  732. package/corpus/templates/calendar/.agents/skills/feature-flags/SKILL.md +0 -169
  733. package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  734. package/corpus/templates/chat/.agents/skills/capture-learnings/SKILL.md +0 -89
  735. package/corpus/templates/chat/.agents/skills/create-skill/SKILL.md +0 -195
  736. package/corpus/templates/chat/.agents/skills/feature-flags/SKILL.md +0 -169
  737. package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  738. package/corpus/templates/clips/.agents/skills/capture-learnings/SKILL.md +0 -89
  739. package/corpus/templates/clips/.agents/skills/create-skill/SKILL.md +0 -195
  740. package/corpus/templates/clips/.agents/skills/feature-flags/SKILL.md +0 -169
  741. package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  742. package/corpus/templates/content/.agents/skills/capture-learnings/SKILL.md +0 -89
  743. package/corpus/templates/content/.agents/skills/create-skill/SKILL.md +0 -195
  744. package/corpus/templates/content/.agents/skills/feature-flags/SKILL.md +0 -169
  745. package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  746. package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +0 -169
  747. package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  748. package/corpus/templates/design/.agents/skills/capture-learnings/SKILL.md +0 -89
  749. package/corpus/templates/design/.agents/skills/create-skill/SKILL.md +0 -195
  750. package/corpus/templates/design/.agents/skills/feature-flags/SKILL.md +0 -169
  751. package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  752. package/corpus/templates/dispatch/.agents/skills/capture-learnings/SKILL.md +0 -89
  753. package/corpus/templates/dispatch/.agents/skills/create-skill/SKILL.md +0 -195
  754. package/corpus/templates/dispatch/.agents/skills/feature-flags/SKILL.md +0 -169
  755. package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  756. package/corpus/templates/factory/.agents/skills/capture-learnings/SKILL.md +0 -89
  757. package/corpus/templates/factory/.agents/skills/create-skill/SKILL.md +0 -195
  758. package/corpus/templates/factory/.agents/skills/feature-flags/SKILL.md +0 -169
  759. package/corpus/templates/factory/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  760. package/corpus/templates/forms/.agents/skills/capture-learnings/SKILL.md +0 -89
  761. package/corpus/templates/forms/.agents/skills/create-skill/SKILL.md +0 -195
  762. package/corpus/templates/forms/.agents/skills/feature-flags/SKILL.md +0 -169
  763. package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  764. package/corpus/templates/macros/.agents/skills/feature-flags/SKILL.md +0 -169
  765. package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  766. package/corpus/templates/mail/.agents/skills/capture-learnings/SKILL.md +0 -89
  767. package/corpus/templates/mail/.agents/skills/create-skill/SKILL.md +0 -195
  768. package/corpus/templates/mail/.agents/skills/feature-flags/SKILL.md +0 -169
  769. package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  770. package/corpus/templates/plan/.agents/skills/capture-learnings/SKILL.md +0 -89
  771. package/corpus/templates/plan/.agents/skills/create-skill/SKILL.md +0 -195
  772. package/corpus/templates/plan/.agents/skills/feature-flags/SKILL.md +0 -169
  773. package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  774. package/corpus/templates/slides/.agents/skills/capture-learnings/SKILL.md +0 -89
  775. package/corpus/templates/slides/.agents/skills/create-skill/SKILL.md +0 -195
  776. package/corpus/templates/slides/.agents/skills/feature-flags/SKILL.md +0 -169
  777. package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  778. package/corpus/templates/tasks/.agents/skills/capture-learnings/SKILL.md +0 -89
  779. package/corpus/templates/tasks/.agents/skills/create-skill/SKILL.md +0 -195
  780. package/corpus/templates/tasks/.agents/skills/feature-flags/SKILL.md +0 -169
  781. package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  782. package/dist/templates/chat/.agents/skills/capture-learnings/SKILL.md +0 -89
  783. package/dist/templates/chat/.agents/skills/create-skill/SKILL.md +0 -195
  784. package/dist/templates/chat/.agents/skills/feature-flags/SKILL.md +0 -169
  785. package/dist/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  786. package/dist/templates/default/.agents/skills/capture-learnings/SKILL.md +0 -89
  787. package/dist/templates/default/.agents/skills/create-skill/SKILL.md +0 -195
  788. package/dist/templates/default/.agents/skills/feature-flags/SKILL.md +0 -169
  789. package/dist/templates/default/.agents/skills/integration-webhooks/SKILL.md +0 -364
  790. package/dist/templates/default/.agents/skills/internationalization/SKILL.md +0 -82
  791. package/dist/templates/default/.agents/skills/onboarding/SKILL.md +0 -56
  792. package/dist/templates/default/.agents/skills/real-time-collab/SKILL.md +0 -392
  793. package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  794. package/dist/templates/headless/.agents/skills/feature-flags/SKILL.md +0 -169
  795. package/dist/templates/headless/.agents/skills/integration-webhooks/SKILL.md +0 -364
  796. package/dist/templates/headless/.agents/skills/turn-into-app/SKILL.md +0 -402
  797. package/dist/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +0 -4
  798. package/dist/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +0 -90
  799. package/dist/templates/headless/.agents/skills/turn-into-skill/SKILL.md +0 -112
  800. package/dist/templates/headless/.agents/skills/turn-into-skill/agents/openai.yaml +0 -4
  801. package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  802. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +0 -411
  803. package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +0 -107
  804. package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +0 -176
  805. package/dist/templates/workspace-core/.agents/skills/agent-page/SKILL.md +0 -63
  806. package/dist/templates/workspace-core/.agents/skills/audit-log/SKILL.md +0 -96
  807. package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +0 -295
  808. package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +0 -242
  809. package/dist/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +0 -131
  810. package/dist/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +0 -89
  811. package/dist/templates/workspace-core/.agents/skills/changelog/SKILL.md +0 -114
  812. package/dist/templates/workspace-core/.agents/skills/client-methods/SKILL.md +0 -115
  813. package/dist/templates/workspace-core/.agents/skills/client-methods/references/legacy-client-fetch-audit-2026-06-03.md +0 -62
  814. package/dist/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +0 -87
  815. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +0 -139
  816. package/dist/templates/workspace-core/.agents/skills/context-xray/SKILL.md +0 -72
  817. package/dist/templates/workspace-core/.agents/skills/create-skill/SKILL.md +0 -195
  818. package/dist/templates/workspace-core/.agents/skills/data-programs/SKILL.md +0 -128
  819. package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +0 -219
  820. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +0 -533
  821. package/dist/templates/workspace-core/.agents/skills/extensions/references/api.md +0 -340
  822. package/dist/templates/workspace-core/.agents/skills/extensions/references/examples.md +0 -259
  823. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +0 -547
  824. package/dist/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +0 -157
  825. package/dist/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +0 -169
  826. package/dist/templates/workspace-core/.agents/skills/generative-ui/SKILL.md +0 -117
  827. package/dist/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +0 -170
  828. package/dist/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +0 -364
  829. package/dist/templates/workspace-core/.agents/skills/internationalization/SKILL.md +0 -82
  830. package/dist/templates/workspace-core/.agents/skills/mvp-followup/SKILL.md +0 -52
  831. package/dist/templates/workspace-core/.agents/skills/native-navigation/SKILL.md +0 -67
  832. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -329
  833. package/dist/templates/workspace-core/.agents/skills/onboarding/SKILL.md +0 -56
  834. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +0 -299
  835. package/dist/templates/workspace-core/.agents/skills/qa/SKILL.md +0 -333
  836. package/dist/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +0 -392
  837. package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +0 -74
  838. package/dist/templates/workspace-core/.agents/skills/reliable-mutations/SKILL.md +0 -70
  839. package/dist/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +0 -84
  840. package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +0 -278
  841. package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  842. package/dist/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +0 -101
  843. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +0 -222
  844. package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +0 -363
  845. package/src/templates/chat/.agents/skills/capture-learnings/SKILL.md +0 -89
  846. package/src/templates/chat/.agents/skills/create-skill/SKILL.md +0 -195
  847. package/src/templates/chat/.agents/skills/feature-flags/SKILL.md +0 -169
  848. package/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  849. package/src/templates/default/.agents/skills/capture-learnings/SKILL.md +0 -89
  850. package/src/templates/default/.agents/skills/create-skill/SKILL.md +0 -195
  851. package/src/templates/default/.agents/skills/feature-flags/SKILL.md +0 -169
  852. package/src/templates/default/.agents/skills/integration-webhooks/SKILL.md +0 -364
  853. package/src/templates/default/.agents/skills/internationalization/SKILL.md +0 -82
  854. package/src/templates/default/.agents/skills/onboarding/SKILL.md +0 -56
  855. package/src/templates/default/.agents/skills/real-time-collab/SKILL.md +0 -392
  856. package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  857. package/src/templates/headless/.agents/skills/feature-flags/SKILL.md +0 -169
  858. package/src/templates/headless/.agents/skills/integration-webhooks/SKILL.md +0 -364
  859. package/src/templates/headless/.agents/skills/turn-into-app/SKILL.md +0 -402
  860. package/src/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +0 -4
  861. package/src/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +0 -90
  862. package/src/templates/headless/.agents/skills/turn-into-skill/SKILL.md +0 -112
  863. package/src/templates/headless/.agents/skills/turn-into-skill/agents/openai.yaml +0 -4
  864. package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  865. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +0 -411
  866. package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +0 -107
  867. package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +0 -176
  868. package/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +0 -63
  869. package/src/templates/workspace-core/.agents/skills/audit-log/SKILL.md +0 -96
  870. package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +0 -295
  871. package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +0 -242
  872. package/src/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +0 -131
  873. package/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +0 -89
  874. package/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +0 -114
  875. package/src/templates/workspace-core/.agents/skills/client-methods/SKILL.md +0 -115
  876. package/src/templates/workspace-core/.agents/skills/client-methods/references/legacy-client-fetch-audit-2026-06-03.md +0 -62
  877. package/src/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +0 -87
  878. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +0 -139
  879. package/src/templates/workspace-core/.agents/skills/context-xray/SKILL.md +0 -72
  880. package/src/templates/workspace-core/.agents/skills/create-skill/SKILL.md +0 -195
  881. package/src/templates/workspace-core/.agents/skills/data-programs/SKILL.md +0 -128
  882. package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +0 -219
  883. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +0 -533
  884. package/src/templates/workspace-core/.agents/skills/extensions/references/api.md +0 -340
  885. package/src/templates/workspace-core/.agents/skills/extensions/references/examples.md +0 -259
  886. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +0 -547
  887. package/src/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +0 -157
  888. package/src/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +0 -169
  889. package/src/templates/workspace-core/.agents/skills/generative-ui/SKILL.md +0 -117
  890. package/src/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +0 -170
  891. package/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +0 -364
  892. package/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +0 -82
  893. package/src/templates/workspace-core/.agents/skills/mvp-followup/SKILL.md +0 -52
  894. package/src/templates/workspace-core/.agents/skills/native-navigation/SKILL.md +0 -67
  895. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -329
  896. package/src/templates/workspace-core/.agents/skills/onboarding/SKILL.md +0 -56
  897. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +0 -299
  898. package/src/templates/workspace-core/.agents/skills/qa/SKILL.md +0 -333
  899. package/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +0 -392
  900. package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +0 -74
  901. package/src/templates/workspace-core/.agents/skills/reliable-mutations/SKILL.md +0 -70
  902. package/src/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +0 -84
  903. package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +0 -278
  904. package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  905. package/src/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +0 -101
  906. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +0 -222
  907. package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +0 -363
@@ -14,8 +14,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
14
  * The command menu's built-in `changelog` prop (see CommandMenu.tsx) wires the
15
15
  * dialog automatically — most templates never touch these directly.
16
16
  */
17
- import { IconX, IconHistory } from "@tabler/icons-react";
18
- import React, { useEffect, useMemo, useState } from "react";
17
+ import { IconChevronDown, IconHistory, IconX } from "@tabler/icons-react";
18
+ import React, { useEffect, useId, useMemo, useState } from "react";
19
19
  import { parseChangelog } from "../../changelog/parse.js";
20
20
  import { markdownModule, remarkGfmFn, useMarkdownReady, markdownUrlTransform, } from "../chat/markdown-renderer.js";
21
21
  import { DEFAULT_LOCALE, useOptionalLocale } from "../i18n.js";
@@ -127,13 +127,15 @@ export function ChangelogDialog({ open, onOpenChange, markdown, title = "What's
127
127
  onOpenChange(false);
128
128
  }, children: _jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": title, className: "mt-[8vh] flex max-h-[80vh] w-full max-w-xl flex-col rounded-lg border border-border bg-popover text-popover-foreground shadow-lg", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-border px-5 py-3.5", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(IconHistory, { className: "h-4 w-4 text-muted-foreground" }), _jsx("h3", { className: "text-sm font-semibold", children: title })] }), _jsx("button", { type: "button", onClick: () => onOpenChange(false), "aria-label": closeLabel, className: "rounded-sm p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground", children: _jsx(IconX, { className: "h-4 w-4" }) })] }), _jsx("div", { className: "overflow-y-auto px-5 py-4", children: _jsx(ChangelogEntries, { entries: entries, emptyText: emptyText }) })] }) }));
129
129
  }
130
- export function ChangelogSettingsCard({ markdown, limit = 2, title = "What's new", closeLabel = "Close", emptyText = "No updates yet.", viewAllLabel = "View all updates", className, }) {
130
+ export function ChangelogSettingsCard({ markdown, limit = 2, title = "What's new", emptyText = "No updates yet.", viewAllLabel = "View all updates", collapseLabel = "Show fewer updates", className, }) {
131
131
  const entries = useMemo(() => parseChangelog(markdown), [markdown]);
132
- const [dialogOpen, setDialogOpen] = useState(false);
132
+ const [expanded, setExpanded] = useState(false);
133
+ const bodyId = useId();
133
134
  if (entries.length === 0)
134
135
  return null;
135
136
  const shown = entries.slice(0, limit);
136
137
  const hasMore = entries.length > shown.length;
137
- return (_jsxs("div", { className: cn("rounded-lg border border-border bg-card text-card-foreground", className), children: [_jsxs("div", { className: "flex items-center gap-2 border-b border-border px-5 py-4", children: [_jsx(IconHistory, { className: "h-4 w-4 text-muted-foreground" }), _jsx("h3", { className: "text-sm font-semibold", children: title })] }), _jsxs("div", { className: "px-5 py-4", children: [_jsx(ChangelogEntries, { entries: shown, emptyText: emptyText }), hasMore && (_jsx("button", { type: "button", onClick: () => setDialogOpen(true), className: "mt-4 text-sm font-medium text-foreground underline underline-offset-2", children: viewAllLabel }))] }), _jsx(ChangelogDialog, { open: dialogOpen, onOpenChange: setDialogOpen, markdown: markdown, title: title, closeLabel: closeLabel, emptyText: emptyText })] }));
138
+ const visibleEntries = expanded ? entries : shown;
139
+ return (_jsxs("div", { className: cn("rounded-lg border border-border bg-card text-card-foreground", className), children: [_jsxs("div", { className: "flex items-center gap-2 border-b border-border px-5 py-4", children: [_jsx(IconHistory, { className: "h-4 w-4 text-muted-foreground" }), _jsx("h3", { className: "text-sm font-semibold", children: title })] }), _jsxs("div", { className: "px-5 py-4", children: [_jsx("div", { id: bodyId, className: cn("overflow-hidden transition-[max-height] duration-200 ease-[var(--ease-collapse)]", expanded ? "max-h-96 overflow-y-auto pr-1" : "max-h-[9.5rem]"), children: _jsx(ChangelogEntries, { entries: visibleEntries, emptyText: emptyText }) }), hasMore && (_jsxs("button", { type: "button", onClick: () => setExpanded((value) => !value), "aria-expanded": expanded, "aria-controls": bodyId, className: "mt-4 inline-flex items-center gap-1 text-sm font-medium text-foreground underline underline-offset-2", children: [_jsx("span", { children: expanded ? collapseLabel : viewAllLabel }), _jsx(IconChevronDown, { className: cn("h-4 w-4 transition-transform duration-200 ease-[var(--ease-collapse)]", expanded && "rotate-180"), "aria-hidden": "true" })] }))] })] }));
138
140
  }
139
141
  export { parseChangelog };
@@ -40,11 +40,13 @@ export declare function useMarkdownReady(): boolean;
40
40
  export declare const MemoizedMarkdownBlock: React.MemoExoticComponent<({ blockText, }: {
41
41
  blockText: string;
42
42
  }) => React.JSX.Element | null>;
43
- export declare function SmoothMarkdownText({ text, streaming, resetKey, statusType, onRevealComplete, }: {
43
+ export declare function SmoothMarkdownText({ text, streaming, resetKey, statusType, animateStreaming, onRevealComplete, }: {
44
44
  text: string;
45
45
  streaming: boolean;
46
46
  resetKey: string;
47
47
  statusType?: string;
48
+ /** Allow callers to opt out for static or deliberately chunk-native surfaces. */
49
+ animateStreaming?: boolean;
48
50
  onRevealComplete?: () => void;
49
51
  }): React.JSX.Element;
50
52
  export declare function MarkdownText(): React.JSX.Element;
@@ -2,7 +2,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
2
2
  // Owns: lazy react-markdown/shiki loaders, SmoothMarkdownText, MarkdownText,
3
3
  // HighlightedCodeBlock wrapper, and the markdownComponents/markdownUrlTransform
4
4
  // used by every markdown render path in AssistantChat.
5
- import { useThread, useMessageRuntime, useMessagePartText, } from "@assistant-ui/react";
5
+ import { useMessageRuntime, useMessagePartText } from "@assistant-ui/react";
6
6
  import { IconPlus, IconExternalLink } from "@tabler/icons-react";
7
7
  import React, { useState, useEffect, useCallback, useMemo, useRef, } from "react";
8
8
  import { splitMarkdownBlocks } from "../../shared/markdown-block-split.js";
@@ -288,8 +288,13 @@ export function useSmoothStreamingText(targetText, streaming, resetKey) {
288
288
  const visibleCountRef = useRef(-1);
289
289
  const targetGraphemesRef = useRef(EMPTY_GRAPHEMES);
290
290
  if (visibleCountRef.current < 0) {
291
- targetGraphemesRef.current = splitStreamingTextGraphemes(targetText);
292
- visibleCountRef.current = splitStreamingTextGraphemes(visibleText).length;
291
+ if (streaming && !prefersReducedMotion) {
292
+ targetGraphemesRef.current = splitStreamingTextGraphemes(targetText);
293
+ visibleCountRef.current = splitStreamingTextGraphemes(visibleText).length;
294
+ }
295
+ else {
296
+ visibleCountRef.current = 0;
297
+ }
293
298
  }
294
299
  const frameRef = useRef(null);
295
300
  const lastCommitAtRef = useRef(0);
@@ -374,16 +379,21 @@ export function useSmoothStreamingText(targetText, streaming, resetKey) {
374
379
  }
375
380
  };
376
381
  useEffect(() => {
377
- const targetGraphemes = splitStreamingTextGraphemes(targetText);
378
382
  targetTextRef.current = targetText;
379
- targetGraphemesRef.current = targetGraphemes;
380
383
  const keyChanged = resetKeyRef.current !== resetKey;
381
384
  resetKeyRef.current = resetKey;
382
385
  if (!streaming || prefersReducedMotion) {
383
386
  cancelFrame();
384
- commitVisibleCount(targetGraphemes.length);
387
+ targetGraphemesRef.current = EMPTY_GRAPHEMES;
388
+ visibleCountRef.current = 0;
389
+ if (visibleTextRef.current !== targetText) {
390
+ visibleTextRef.current = targetText;
391
+ setVisibleText(targetText);
392
+ }
385
393
  return;
386
394
  }
395
+ const targetGraphemes = splitStreamingTextGraphemes(targetText);
396
+ targetGraphemesRef.current = targetGraphemes;
387
397
  const visibleNoLongerMatchesTarget = visibleTextRef.current.length > 0 &&
388
398
  !targetText.startsWith(visibleTextRef.current);
389
399
  if (visibleNoLongerMatchesTarget ||
@@ -451,9 +461,6 @@ export function useMarkdownReady() {
451
461
  }, []);
452
462
  return ready;
453
463
  }
454
- // ─── MemoizedMarkdownBlock ────────────────────────────────────────────────────
455
- // Renders a single stable markdown block. Wrapped in React.memo so React
456
- // skips re-rendering completed blocks when only the tail changes.
457
464
  export const MemoizedMarkdownBlock = React.memo(function MemoizedMarkdownBlock({ blockText, }) {
458
465
  const ReactMarkdown = markdownModule?.default;
459
466
  const gfm = remarkGfmFn;
@@ -462,34 +469,27 @@ export const MemoizedMarkdownBlock = React.memo(function MemoizedMarkdownBlock({
462
469
  return (_jsx(ReactMarkdown, { remarkPlugins: [gfm], components: markdownComponents, urlTransform: markdownUrlTransform, children: wrapLegacyChartShorthandLines(blockText) }));
463
470
  });
464
471
  // ─── SmoothMarkdownText ────────────────────────────────────────────────────────
465
- export function SmoothMarkdownText({ text, streaming, resetKey, statusType = "complete", onRevealComplete, }) {
472
+ export function SmoothMarkdownText({ text, streaming, resetKey, statusType = "complete", animateStreaming = true, onRevealComplete, }) {
466
473
  const mdReady = useMarkdownReady();
467
- const visibleText = useSmoothStreamingText(text, streaming, resetKey);
468
- const isVisuallyStreaming = streaming && visibleText !== text;
474
+ const shouldAnimate = streaming && animateStreaming;
475
+ const visibleText = useSmoothStreamingText(text, shouldAnimate, resetKey);
469
476
  const ReactMarkdown = markdownModule?.default;
470
477
  const gfm = remarkGfmFn;
478
+ const markdownBlocks = useMemo(() => (streaming ? splitMarkdownBlocks(visibleText) : null), [streaming, visibleText]);
471
479
  useEffect(() => {
472
- if (!onRevealComplete || !streaming || visibleText !== text)
480
+ if (!onRevealComplete || !shouldAnimate || visibleText !== text)
473
481
  return;
474
482
  onRevealComplete();
475
- }, [onRevealComplete, streaming, text, visibleText]);
476
- // Block-memoized rendering: during streaming split the visible text into
477
- // stable completed blocks + an in-progress tail. Only the tail re-renders
478
- // on every commit; completed blocks are React.memo'd and skipped.
479
- // On completion we fall through to a single ReactMarkdown pass to guarantee
480
- // byte-identical final output (no block-split artifacts).
481
- const split = useMemo(() => (isVisuallyStreaming ? splitMarkdownBlocks(visibleText) : null), [isVisuallyStreaming, visibleText]);
482
- return (_jsx("div", { className: "agent-markdown break-words", "data-status": statusType, "data-streaming": isVisuallyStreaming ? "true" : undefined, children: mdReady && ReactMarkdown && gfm ? (split ? (_jsxs(_Fragment, { children: [split.completedBlocks.map((block, i) => (_jsx(MemoizedMarkdownBlock, { blockText: block }, i))), split.tail ? (_jsx(ReactMarkdown, { remarkPlugins: [gfm], components: markdownComponents, urlTransform: markdownUrlTransform, children: wrapLegacyChartShorthandLines(split.tail) })) : null] })) : (_jsx(ReactMarkdown, { remarkPlugins: [gfm], components: markdownComponents, urlTransform: markdownUrlTransform, children: wrapLegacyChartShorthandLines(visibleText) }))) : (_jsx("span", { style: { whiteSpace: "pre-wrap" }, children: visibleText })) }));
483
+ }, [onRevealComplete, shouldAnimate, text, visibleText]);
484
+ return (_jsx("div", { className: "agent-markdown break-words", "data-status": statusType, "data-streaming": streaming ? "true" : undefined, children: mdReady && ReactMarkdown && gfm ? (markdownBlocks ? (_jsxs(_Fragment, { children: [markdownBlocks.completedBlocks.map((blockText, index) => (_jsx(MemoizedMarkdownBlock, { blockText: blockText }, index))), markdownBlocks.tail ? (_jsx(ReactMarkdown, { remarkPlugins: [gfm], components: markdownComponents, urlTransform: markdownUrlTransform, children: wrapLegacyChartShorthandLines(markdownBlocks.tail) })) : null] })) : (_jsx(ReactMarkdown, { remarkPlugins: [gfm], components: markdownComponents, urlTransform: markdownUrlTransform, children: wrapLegacyChartShorthandLines(visibleText) }))) : (_jsx("span", { style: { whiteSpace: "pre-wrap" }, children: visibleText })) }));
483
485
  }
484
486
  // ─── MarkdownText ──────────────────────────────────────────────────────────────
485
487
  export function MarkdownText() {
486
488
  const textPart = useMessagePartText();
487
489
  const messageRuntime = useMessageRuntime();
488
490
  const message = messageRuntime.getState();
489
- const thread = useThread();
490
491
  const textStreaming = React.useContext(TextStreamingContext);
491
- const lastMessage = thread.messages[thread.messages.length - 1];
492
- const isLastAssistantMessage = message.role === "assistant" && lastMessage?.id === message.id;
492
+ const isLastAssistantMessage = message.role === "assistant" && message.isLast;
493
493
  const statusType = textPart.status?.type ?? message.status?.type ?? "complete";
494
494
  return (_jsx(SmoothMarkdownText, { text: textPart.text, streaming: textStreaming && isLastAssistantMessage, resetKey: message.id, statusType: statusType }));
495
495
  }
@@ -140,6 +140,29 @@ export declare function getAssistantToolSummaryInfo(parts: readonly {
140
140
  startIndex: number;
141
141
  hiddenToolCount: number;
142
142
  };
143
+ export declare function groupAssistantWorkParts(part: {
144
+ type?: string;
145
+ toolCallId?: string;
146
+ toolName?: string;
147
+ args?: Record<string, unknown>;
148
+ chatUI?: unknown;
149
+ mcpApp?: unknown;
150
+ approval?: {
151
+ approvalKey?: string;
152
+ dismissed?: boolean;
153
+ };
154
+ }, index: number, parts: readonly {
155
+ type?: string;
156
+ toolCallId?: string;
157
+ toolName?: string;
158
+ args?: Record<string, unknown>;
159
+ chatUI?: unknown;
160
+ mcpApp?: unknown;
161
+ approval?: {
162
+ approvalKey?: string;
163
+ dismissed?: boolean;
164
+ };
165
+ }[]): ["group-work"] | null;
143
166
  export declare function shouldShowInlineRunError({ runError, bannerRunErrorKey, }: {
144
167
  runError: RunErrorInfo | null;
145
168
  bannerRunErrorKey: string | null | undefined;
@@ -5,7 +5,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
5
5
  // displayableUserMessageText.
6
6
  import { isPastedTextAttachmentName } from "@agent-native/toolkit/composer/pasted-text";
7
7
  import { PastedTextChip } from "@agent-native/toolkit/composer/PastedTextChip";
8
- import { useThread, useMessageRuntime, useComposer, MessagePrimitive, ActionBarPrimitive, BranchPickerPrimitive, ComposerPrimitive, useMessagePartReasoning, useMessagePartRuntime, useAuiState, } from "@assistant-ui/react";
8
+ import { useThreadRuntime, useMessageRuntime, useComposer, MessagePrimitive, ActionBarPrimitive, BranchPickerPrimitive, ComposerPrimitive, useMessagePartReasoning, useMessagePartRuntime, useAuiState, } from "@assistant-ui/react";
9
9
  import { IconX, IconCheck, IconCopy, IconChevronDown, IconChevronLeft, IconChevronRight, IconDots, IconGitFork, IconId, IconQuote, IconRefresh, IconArrowBackUp, IconFile, IconFolder, IconFileText, IconCheckbox, IconMail, IconUser, IconPresentation, IconStack2, IconMessageChatbot, IconPencil, IconAlertTriangle, IconLoader2, } from "@tabler/icons-react";
10
10
  import React, { useState, useEffect, useCallback, useRef } from "react";
11
11
  import { getActiveRun } from "../active-run-state.js";
@@ -20,7 +20,7 @@ import { cn } from "../utils.js";
20
20
  import { MarkdownText, renderMarkdownToClipboardHtml, SmoothMarkdownText, } from "./markdown-renderer.js";
21
21
  import { getAssistantRunDurationMs } from "./repo-helpers.js";
22
22
  import { getRunErrorMetadata, runErrorHeadline, runErrorKey, } from "./run-recovery.js";
23
- import { ToolCallFallback, ToolActivityPresentation, ToolCallStackMotion, FilesChangedSummary, ASSISTANT_VISIBLE_TOOL_CALL_LIMIT, ChatRunningContext, ChatRunningRunIdContext, ChatRunningTurnIdContext, ChatRunDurationContext, formatWorkedDuration, RanToolsSummary, ReasoningCell, WorkedForSummary, toolCallHasPendingApproval, } from "./tool-call-display.js";
23
+ import { ToolCallFallback, ToolActivityPresentation, ToolCallStackMotion, FilesChangedSummary, ASSISTANT_VISIBLE_TOOL_CALL_LIMIT, ChatRunningContext, ChatRunningRunIdContext, ChatRunningTurnIdContext, ChatRunDurationContext, formatWorkedDuration, ReasoningCell, WorkedForSummary, toolCallHasPendingApproval, } from "./tool-call-display.js";
24
24
  export { toolCallHasPendingApproval };
25
25
  // ─── Pending selection context key ───────────────────────────────────────────
26
26
  // Mirrored from AssistantChat to avoid a cross-import on a private constant.
@@ -750,41 +750,18 @@ export function getAssistantToolSummaryInfo(parts) {
750
750
  hiddenToolCount: toolCallIndices.length - ASSISTANT_VISIBLE_TOOL_CALL_LIMIT,
751
751
  };
752
752
  }
753
- function groupAssistantWorkParts(part, index, parts) {
754
- if (isCallAgentToolCallShadowed(parts, index))
755
- return null;
756
- if (isCollapsibleAssistantWorkPart(part)) {
757
- const { startIndex } = getAssistantToolSummaryInfo(parts);
758
- if (isAssistantToolSummaryPart(parts, index, startIndex)) {
759
- return ["group-work", "group-ran-tools"];
760
- }
761
- return ["group-work"];
753
+ export function groupAssistantWorkParts(part, index, parts) {
754
+ if (isCallAgentToolCallShadowed(parts, index)) {
755
+ const previousPart = parts[index - 1];
756
+ const previousPartIsInWorkGroup = previousPart != null &&
757
+ (isCollapsibleAssistantWorkPart(previousPart) ||
758
+ isCallAgentToolCallShadowed(parts, index - 1));
759
+ return previousPartIsInWorkGroup ? ["group-work"] : null;
762
760
  }
761
+ if (isCollapsibleAssistantWorkPart(part))
762
+ return ["group-work"];
763
763
  return null;
764
764
  }
765
- function isAssistantToolSummaryPart(parts, index, startIndex) {
766
- if (startIndex < 0 || index >= startIndex)
767
- return false;
768
- if (isCallAgentToolCallShadowed(parts, index) ||
769
- !isCollapsibleAssistantWorkPart(parts[index])) {
770
- return false;
771
- }
772
- let segmentStart = index;
773
- while (segmentStart > 0 &&
774
- !isCallAgentToolCallShadowed(parts, segmentStart - 1) &&
775
- isCollapsibleAssistantWorkPart(parts[segmentStart - 1])) {
776
- segmentStart--;
777
- }
778
- let segmentEnd = index + 1;
779
- while (segmentEnd < startIndex &&
780
- !isCallAgentToolCallShadowed(parts, segmentEnd) &&
781
- isCollapsibleAssistantWorkPart(parts[segmentEnd])) {
782
- segmentEnd++;
783
- }
784
- return parts
785
- .slice(segmentStart, segmentEnd)
786
- .some((candidate) => candidate.type === "tool-call");
787
- }
788
765
  export function shouldShowInlineRunError({ runError, bannerRunErrorKey, }) {
789
766
  if (!runError)
790
767
  return false;
@@ -805,7 +782,7 @@ export function AssistantMessage() {
805
782
  const [restoreState, setRestoreState] = useState("idle");
806
783
  const [restoreError, setRestoreError] = useState(null);
807
784
  const messageRuntime = useMessageRuntime();
808
- const thread = useThread();
785
+ const threadRuntime = useThreadRuntime();
809
786
  const chatRunning = React.useContext(ChatRunningContext);
810
787
  const activeRunId = React.useContext(ChatRunningRunIdContext);
811
788
  const activeTurnId = React.useContext(ChatRunningTurnIdContext);
@@ -813,8 +790,7 @@ export function AssistantMessage() {
813
790
  const msg = messageRuntime.getState();
814
791
  const persistedDurationMs = getAssistantRunDurationMs(msg);
815
792
  const timestamp = formatMessageTimestamp(msg.createdAt);
816
- const isLast = thread.messages.length > 0 &&
817
- thread.messages[thread.messages.length - 1].id === msg.id;
793
+ const isLast = msg.isLast;
818
794
  const wasLiveRef = useRef(false);
819
795
  const messageRunId = assistantMessageRunId(msg);
820
796
  const messageTurnId = assistantMessageTurnId(msg);
@@ -877,7 +853,18 @@ export function AssistantMessage() {
877
853
  const shouldHoldCompletionFooter = isLast &&
878
854
  ((missingFinalResponseCandidate && !showMissingFinalResponse) ||
879
855
  (animateMissingFinalResponse && !missingFinalResponseRevealed));
880
- const responseConnectionContext = userMessageTextBeforeAssistant(thread.messages, msg.id);
856
+ const responseConnectionContext = React.useMemo(() => {
857
+ let parentId = msg.parentId;
858
+ while (parentId) {
859
+ const parentMessage = threadRuntime.getMessageById(parentId).getState();
860
+ if (parentMessage.role === "user" &&
861
+ !isHiddenUserMessage(parentMessage)) {
862
+ return displayableUserMessageText(messageTextFromContent(parentMessage.content));
863
+ }
864
+ parentId = parentMessage.parentId;
865
+ }
866
+ return "";
867
+ }, [msg.parentId, threadRuntime]);
881
868
  const isComplete = !shouldHoldCompletionFooter &&
882
869
  shouldShowAssistantMessageFooter({
883
870
  isLast,
@@ -1000,7 +987,7 @@ export function AssistantMessage() {
1000
987
  });
1001
988
  if (!hasRenderableContent)
1002
989
  return null;
1003
- return (_jsxs("div", { className: "group relative", style: { contentVisibility: isComplete ? "auto" : "visible" }, children: [_jsxs("div", { className: "w-full max-w-[95%] text-sm leading-relaxed text-foreground", children: [_jsx(ToolCallStackMotion, { children: _jsx(MessagePrimitive.GroupedParts, { groupBy: groupAssistantWorkParts, children: ({ part, children }) => {
990
+ return (_jsxs("div", { className: "group relative", style: { contentVisibility: isComplete ? "auto" : "visible" }, children: [_jsxs("div", { className: "w-full max-w-[95%] text-sm leading-relaxed text-foreground", children: [isComplete && (_jsx(McpConnectionSuggestion, { text: responseConnectionText, contextText: responseConnectionContext, variant: "response" })), _jsx(ToolCallStackMotion, { children: _jsx(MessagePrimitive.GroupedParts, { groupBy: groupAssistantWorkParts, children: ({ part, children }) => {
1004
991
  switch (part.type) {
1005
992
  case "group-work": {
1006
993
  const showSummary = shouldShowAssistantWorkSummary({
@@ -1014,10 +1001,6 @@ export function AssistantMessage() {
1014
1001
  return _jsx(_Fragment, { children: children });
1015
1002
  return (_jsx(WorkedForSummary, { durationMs: getAssistantWorkSummaryDurationMs(capturedDurationMs ?? persistedDurationMs, part.indices[0] ?? -1, firstWorkPartIndex), defaultOpen: hasCustomUi, autoCollapse: animateCollapse && !hasCustomUi, children: children }));
1016
1003
  }
1017
- case "group-ran-tools": {
1018
- const toolCount = part.indices.filter((index) => msgContent?.[index]?.type === "tool-call").length;
1019
- return (_jsx(RanToolsSummary, { toolCount: toolCount, children: children }));
1020
- }
1021
1004
  case "text":
1022
1005
  if (isUserStoppedRun &&
1023
1006
  isMissingFinalResponseWarningText(part.text)) {
@@ -1041,7 +1024,7 @@ export function AssistantMessage() {
1041
1024
  ? messageActions?.onRetryRunError
1042
1025
  : undefined })), missingWarningText == null &&
1043
1026
  missingFinalResponseNoticeText != null &&
1044
- !showInlineRunError && (_jsx(MissingFinalResponseNotice, { messageId: msg.id, text: missingFinalResponseNoticeText, animate: animateMissingFinalResponse, onRevealComplete: handleMissingFinalResponseReveal })), isComplete && hasCodeAgentTools && msgContent && (_jsx(FilesChangedSummary, { parts: msgContent })), isComplete && (_jsx(McpConnectionSuggestion, { text: responseConnectionText, contextText: responseConnectionContext, variant: "response" }))] }), isComplete && (_jsxs("div", { className: "mt-1 flex items-center justify-between", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-1", children: [_jsx(MessageActionsMenu, { showRevert: showRestore && restoreState === "idle", onRevert: handleRestore, threadId: cpCtx?.threadId ?? "" }), isLast && (_jsx(TooltipProvider, { delayDuration: 400, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(ActionBarPrimitive.Reload, { asChild: true, children: _jsx("button", { type: "button", "aria-label": "Regenerate response", className: `flex h-6 w-6 cursor-pointer items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground ${messageFooterFadeClassName} disabled:cursor-not-allowed disabled:opacity-40`, children: _jsx(IconRefresh, { className: "h-3.5 w-3.5" }) }) }) }), _jsx(TooltipContent, { side: "top", className: "text-xs", children: "Regenerate response" })] }) })), _jsx(MessageBranchPicker, {}), timestamp && (_jsx(MessageTimestamp, { timestamp: timestamp, className: messageFooterFadeClassName }))] }), showRestore && restoreState === "confirming" ? (_jsxs("div", { className: "flex items-center gap-1 text-xs", children: [_jsx("button", { onClick: handleRestore, className: "rounded-md bg-destructive px-1.5 py-0.5 text-destructive-foreground hover:bg-destructive/90", children: "Restore to here?" }), _jsx("button", { onClick: cancelRestore, className: "rounded-md px-1.5 py-0.5 text-muted-foreground hover:bg-accent", children: "Cancel" })] })) : showRestore && restoreState === "restoring" ? (_jsxs("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" }), "Restoring..."] })) : restoreState === "error" ? (_jsxs("span", { className: "flex items-center gap-1 text-xs text-destructive", children: [_jsx(IconAlertTriangle, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "truncate", children: restoreError }), _jsx("button", { onClick: cancelRestore, className: "cursor-pointer rounded-md px-1.5 py-0.5 text-muted-foreground hover:bg-accent", children: "Dismiss" })] })) : (_jsx(ThumbsFeedback, { threadId: cpCtx?.threadId ?? "", runId: messageRunId ?? "", messageSeq: thread.messages.findIndex((m) => m.id === msg.id) }))] }))] }));
1027
+ !showInlineRunError && (_jsx(MissingFinalResponseNotice, { messageId: msg.id, text: missingFinalResponseNoticeText, animate: animateMissingFinalResponse, onRevealComplete: handleMissingFinalResponseReveal })), isComplete && hasCodeAgentTools && msgContent && (_jsx(FilesChangedSummary, { parts: msgContent }))] }), isComplete && (_jsxs("div", { className: "mt-1 flex items-center justify-between", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-1", children: [_jsx(MessageActionsMenu, { showRevert: showRestore && restoreState === "idle", onRevert: handleRestore, threadId: cpCtx?.threadId ?? "" }), isLast && (_jsx(TooltipProvider, { delayDuration: 400, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(ActionBarPrimitive.Reload, { asChild: true, children: _jsx("button", { type: "button", "aria-label": "Regenerate response", className: `flex h-6 w-6 cursor-pointer items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground ${messageFooterFadeClassName} disabled:cursor-not-allowed disabled:opacity-40`, children: _jsx(IconRefresh, { className: "h-3.5 w-3.5" }) }) }) }), _jsx(TooltipContent, { side: "top", className: "text-xs", children: "Regenerate response" })] }) })), _jsx(MessageBranchPicker, {}), timestamp && (_jsx(MessageTimestamp, { timestamp: timestamp, className: messageFooterFadeClassName }))] }), showRestore && restoreState === "confirming" ? (_jsxs("div", { className: "flex items-center gap-1 text-xs", children: [_jsx("button", { onClick: handleRestore, className: "rounded-md bg-destructive px-1.5 py-0.5 text-destructive-foreground hover:bg-destructive/90", children: "Restore to here?" }), _jsx("button", { onClick: cancelRestore, className: "rounded-md px-1.5 py-0.5 text-muted-foreground hover:bg-accent", children: "Cancel" })] })) : showRestore && restoreState === "restoring" ? (_jsxs("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" }), "Restoring..."] })) : restoreState === "error" ? (_jsxs("span", { className: "flex items-center gap-1 text-xs text-destructive", children: [_jsx(IconAlertTriangle, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "truncate", children: restoreError }), _jsx("button", { onClick: cancelRestore, className: "cursor-pointer rounded-md px-1.5 py-0.5 text-muted-foreground hover:bg-accent", children: "Dismiss" })] })) : (_jsx(ThumbsFeedback, { threadId: cpCtx?.threadId ?? "", runId: messageRunId ?? "", messageSeq: msg.index }))] }))] }));
1045
1028
  }
1046
1029
  // ─── RunningActivityStatus / ThinkingIndicator ────────────────────────────────
1047
1030
  export function RunningActivityStatus({ label }) {
@@ -119,10 +119,10 @@ export declare function ReconnectStreamMessage({ content, allowActivitySpinner,
119
119
  /** Activity-only cards are live during reconnect, but static once frozen. */
120
120
  allowActivitySpinner?: boolean;
121
121
  }): React.JSX.Element;
122
- export declare function ReasoningCell({ text, isStreaming, resetKey, defaultOpen, autoCollapse, collapseWhenReplaced, durationMs, }: {
122
+ export declare function ReasoningCell({ text, isStreaming, defaultOpen, autoCollapse, collapseWhenReplaced, durationMs, }: {
123
123
  text: string;
124
124
  isStreaming?: boolean;
125
- /** Stable identity used to restart the reveal when a new reasoning part mounts. */
125
+ /** Stable identity retained for callers; reasoning renders chunk-natively. */
126
126
  resetKey?: string;
127
127
  defaultOpen?: boolean;
128
128
  /** Animate closed when a live reasoning segment finishes during a run. */
@@ -14,7 +14,7 @@ import { BashCell, EditCell, WriteCell, FilesChangedSummary, } from "../tool-cel
14
14
  import { humanizeToolName, isCallAgentToolCallShadowed, } from "../tool-display.js";
15
15
  import { cn } from "../utils.js";
16
16
  import { ActionChatUiSurface } from "./action-chat-ui-surface.js";
17
- import { SmoothMarkdownText, HighlightedCodeBlock, useSmoothStreamingText, } from "./markdown-renderer.js";
17
+ import { SmoothMarkdownText, HighlightedCodeBlock, } from "./markdown-renderer.js";
18
18
  import { resolveToolRenderer } from "./tool-render-registry.js";
19
19
  import { isBuiltinDataWidgetActionRenderer, resolveBuiltinActionChatRenderer, resolveBuiltinFallbackToolRenderer, } from "./widgets/builtin-tool-renderers.js";
20
20
  // Exported so AssistantChatInner can provide a context value.
@@ -584,13 +584,16 @@ function isReconnectToolSummaryPart(content, index, startIndex) {
584
584
  * opening that summary never reveals a redundant second disclosure.
585
585
  */
586
586
  const WorkSummaryContentContext = React.createContext(false);
587
- export function ReasoningCell({ text, isStreaming = false, resetKey, defaultOpen, autoCollapse = false, collapseWhenReplaced = false, durationMs, }) {
587
+ export function ReasoningCell({ text, isStreaming = false, defaultOpen, autoCollapse = false, collapseWhenReplaced = false, durationMs, }) {
588
588
  const embeddedInWorkSummary = React.useContext(WorkSummaryContentContext);
589
589
  const [open, setOpen] = useState(defaultOpen ?? true);
590
590
  const wasStreamingRef = useRef(isStreaming);
591
591
  const wasReplacedRef = useRef(collapseWhenReplaced);
592
592
  const trimmed = text.trim();
593
- const visibleText = useSmoothStreamingText(trimmed, isStreaming, resetKey ?? "reasoning");
593
+ // Reasoning is already a compact live status surface. Rendering the latest
594
+ // chunk directly avoids a second character-level queue that can lag behind
595
+ // the model and make the surrounding chat look like it is jumping.
596
+ const visibleText = trimmed;
594
597
  useEffect(() => {
595
598
  if (autoCollapse && wasStreamingRef.current && !isStreaming) {
596
599
  setOpen(false);
@@ -0,0 +1,28 @@
1
+ import type { ReactNode } from "react";
2
+ export declare const APP_ACTION_MENU_CONTENT_CLASS = "w-48";
3
+ export interface AppOpenActionLabels {
4
+ addApp: string;
5
+ openApp: string;
6
+ openInline: string;
7
+ openInNewTab: string;
8
+ }
9
+ export interface AppOpenActionMenuItem {
10
+ id: string;
11
+ label: string;
12
+ icon?: ReactNode;
13
+ onSelect: () => void;
14
+ }
15
+ export declare function AppOpenActions({ name, href, target, rel, labels: labelOverrides, onAddApp, onOpen, onOpenInline, showInlineOption, showNewTabOption, menuItems, className, }: {
16
+ name: string;
17
+ href?: string | null;
18
+ target?: "_blank";
19
+ rel?: string;
20
+ labels?: Partial<AppOpenActionLabels>;
21
+ onAddApp?: () => void;
22
+ onOpen?: () => void;
23
+ onOpenInline?: () => void;
24
+ showInlineOption?: boolean;
25
+ showNewTabOption?: boolean;
26
+ menuItems?: readonly AppOpenActionMenuItem[];
27
+ className?: string;
28
+ }): import("react").JSX.Element;
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "@agent-native/toolkit";
3
+ import { Button } from "@agent-native/toolkit/ui/button";
4
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@agent-native/toolkit/ui/dropdown-menu";
5
+ import { IconAppWindow, IconChevronDown, IconExternalLink, IconPlus, } from "@tabler/icons-react";
6
+ export const APP_ACTION_MENU_CONTENT_CLASS = "w-48";
7
+ const DEFAULT_LABELS = {
8
+ addApp: "Add app",
9
+ openApp: "Open app",
10
+ openInline: "Open inline",
11
+ openInNewTab: "Open in new tab",
12
+ };
13
+ export function AppOpenActions({ name, href, target, rel, labels: labelOverrides, onAddApp, onOpen, onOpenInline, showInlineOption = false, showNewTabOption = false, menuItems, className, }) {
14
+ const labels = { ...DEFAULT_LABELS, ...labelOverrides };
15
+ const primaryUsesHref = Boolean(href) && !onOpen;
16
+ const canOfferNewTab = Boolean(href) && showNewTabOption;
17
+ const hasMenu = Boolean(onAddApp) ||
18
+ (Boolean(href) && (Boolean(onOpenInline) || canOfferNewTab)) ||
19
+ Boolean(menuItems?.length);
20
+ const canOpen = primaryUsesHref || Boolean(onOpen);
21
+ if (!canOpen && !hasMenu) {
22
+ return (_jsx(Button, { size: "sm", variant: "outline", disabled: true, children: labels.openApp }));
23
+ }
24
+ return (_jsxs("div", { className: cn("app-open-actions flex shrink-0 overflow-hidden rounded-md border border-border focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2", className), children: [_jsx(Button, { asChild: primaryUsesHref, size: "sm", variant: "outline", className: "app-open-actions__primary h-7 rounded-none border-0 border-e border-border px-0 pe-2 ps-3 text-xs", disabled: !canOpen, onClick: onOpen, type: primaryUsesHref ? undefined : "button", "aria-label": !primaryUsesHref ? `Open ${name}` : undefined, children: primaryUsesHref ? (_jsx("a", { href: href ?? undefined, target: target, rel: rel, children: labels.openApp })) : (_jsx("span", { children: labels.openApp })) }), hasMenu ? (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { type: "button", size: "sm", variant: "outline", className: "app-open-actions__menu size-7 rounded-none border-0 p-0 text-xs", "aria-label": `Open options for ${name}`, children: _jsx(IconChevronDown, { size: 15 }) }) }), _jsxs(DropdownMenuContent, { align: "end", className: APP_ACTION_MENU_CONTENT_CLASS, children: [onAddApp ? (_jsxs(DropdownMenuItem, { onSelect: onAddApp, children: [_jsx(IconPlus, { size: 14, "aria-hidden": "true" }), labels.addApp] })) : null, showInlineOption && href && onOpenInline ? (_jsxs(DropdownMenuItem, { onSelect: onOpenInline, children: [_jsx(IconAppWindow, { size: 14, "aria-hidden": "true" }), labels.openInline] })) : null, canOfferNewTab && href ? (_jsx(DropdownMenuItem, { asChild: true, children: _jsxs("a", { href: href ?? undefined, target: "_blank", rel: "noreferrer", children: [_jsx(IconExternalLink, { size: 14, "aria-hidden": "true" }), labels.openInNewTab] }) })) : null, menuItems?.map((item) => (_jsxs(DropdownMenuItem, { onSelect: item.onSelect, children: [item.icon ? (_jsx("span", { "aria-hidden": "true", className: "shrink-0", children: item.icon })) : null, item.label] }, item.id)))] })] })) : null] }));
25
+ }
@@ -1,6 +1,7 @@
1
1
  export { ChatFirstAgentsPane } from "./agents-pane.js";
2
2
  export { ChatFirstAppPane } from "./app-pane.js";
3
3
  export { ChatFirstAppsRail } from "./apps-rail.js";
4
+ export { APP_ACTION_MENU_CONTENT_CLASS, AppOpenActions, type AppOpenActionLabels, type AppOpenActionMenuItem, } from "./app-open-actions.js";
4
5
  export { ChatFirstBrowserPane } from "./browser-pane.js";
5
6
  export { defaultChatFirstCopy } from "./copy.js";
6
7
  export { ChatFirstChatHistory, type ChatFirstChatHistoryProps, } from "./chat-history.js";
@@ -1,6 +1,7 @@
1
1
  export { ChatFirstAgentsPane } from "./agents-pane.js";
2
2
  export { ChatFirstAppPane } from "./app-pane.js";
3
3
  export { ChatFirstAppsRail } from "./apps-rail.js";
4
+ export { APP_ACTION_MENU_CONTENT_CLASS, AppOpenActions, } from "./app-open-actions.js";
4
5
  export { ChatFirstBrowserPane } from "./browser-pane.js";
5
6
  export { defaultChatFirstCopy } from "./copy.js";
6
7
  export { ChatFirstChatHistory, } from "./chat-history.js";
@@ -1,10 +1,11 @@
1
1
  import type { ChatFirstCopy } from "./types.js";
2
2
  export type ChatFirstPrimaryTab = "new-chat" | "integrations" | "scheduled";
3
- export declare function ChatFirstPrimaryNavigation({ onNewChat, onOpenIntegrations, onOpenScheduled, onSearch, activeTab, copy, }: {
3
+ export declare function ChatFirstPrimaryNavigation({ onNewChat, onOpenIntegrations, onOpenScheduled, onSearch, activeTab, stickyNewChat, copy, }: {
4
4
  onNewChat?: () => void;
5
5
  onOpenIntegrations: () => void;
6
6
  onOpenScheduled: () => void;
7
7
  onSearch?: () => void;
8
8
  activeTab?: ChatFirstPrimaryTab;
9
+ stickyNewChat?: boolean;
9
10
  copy?: ChatFirstCopy;
10
11
  }): import("react").JSX.Element;
@@ -1,12 +1,19 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { IconClock, IconPlus, IconPlugConnected, IconSearch, } from "@tabler/icons-react";
3
3
  import { defaultChatFirstCopy } from "./copy.js";
4
- export function ChatFirstPrimaryNavigation({ onNewChat, onOpenIntegrations, onOpenScheduled, onSearch, activeTab, copy = defaultChatFirstCopy, }) {
4
+ export function ChatFirstPrimaryNavigation({ onNewChat, onOpenIntegrations, onOpenScheduled, onSearch, activeTab, stickyNewChat = false, copy = defaultChatFirstCopy, }) {
5
5
  const tabClassName = (tab) => `flex h-8 w-full items-center gap-2 rounded-md px-2 text-[13px] font-medium transition-[background-color,color] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${activeTab === tab
6
6
  ? "bg-sidebar-accent text-sidebar-accent-foreground"
7
7
  : "text-sidebar-foreground/80 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground"}`;
8
- const renderTab = (tab, content, onSelect) => (_jsx("button", { type: "button", role: "tab", "aria-selected": activeTab === tab, className: tabClassName(tab), onClick: onSelect, children: content }));
9
- return (_jsxs("div", { children: [_jsxs("div", { role: "tablist", "aria-label": "Primary navigation", className: "grid gap-px", children: [onNewChat
10
- ? renderTab("new-chat", _jsxs(_Fragment, { children: [_jsx(IconPlus, { size: 15, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { children: copy("newChat") })] }), onNewChat)
11
- : null, renderTab("integrations", _jsxs(_Fragment, { children: [_jsx(IconPlugConnected, { size: 15, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { children: copy("integrations") })] }), onOpenIntegrations), renderTab("scheduled", _jsxs(_Fragment, { children: [_jsx(IconClock, { size: 15, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { children: copy("scheduled") })] }), onOpenScheduled)] }), onSearch ? (_jsxs("button", { type: "button", className: "mt-px flex h-8 w-full items-center gap-2 rounded-md px-2 text-[13px] font-medium text-sidebar-foreground/80 transition-[background-color,color] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", onClick: onSearch, children: [_jsx(IconSearch, { size: 15, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { children: copy("search") })] })) : null] }));
8
+ const renderTab = (tab, content, onSelect, className) => (_jsx("button", { type: "button", role: "tab", "aria-selected": activeTab === tab, className: [tabClassName(tab), className].filter(Boolean).join(" "), onClick: onSelect, children: content }));
9
+ const newChatTab = onNewChat
10
+ ? renderTab("new-chat", _jsxs(_Fragment, { children: [_jsx(IconPlus, { size: 15, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { children: copy("newChat") })] }), onNewChat, "code-agents-primary-new-chat")
11
+ : null;
12
+ const integrationsTab = renderTab("integrations", _jsxs(_Fragment, { children: [_jsx(IconPlugConnected, { size: 15, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { children: copy("integrations") })] }), onOpenIntegrations);
13
+ const scheduledTab = renderTab("scheduled", _jsxs(_Fragment, { children: [_jsx(IconClock, { size: 15, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { children: copy("scheduled") })] }), onOpenScheduled);
14
+ const searchAction = onSearch ? (_jsxs("button", { type: "button", className: "mt-px flex h-8 w-full items-center gap-2 rounded-md px-2 text-[13px] font-medium text-sidebar-foreground/80 transition-[background-color,color] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", onClick: onSearch, children: [_jsx(IconSearch, { size: 15, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { children: copy("search") })] })) : null;
15
+ if (stickyNewChat) {
16
+ return (_jsxs(_Fragment, { children: [newChatTab ? (_jsx("div", { className: "code-agents-primary-new-chat-shell", children: newChatTab })) : null, _jsxs("div", { className: "code-agents-nav-list", "aria-label": "Agent navigation", children: [_jsxs("div", { role: "tablist", "aria-label": "Primary navigation", className: "grid gap-px", children: [integrationsTab, scheduledTab] }), searchAction] })] }));
17
+ }
18
+ return (_jsxs("div", { children: [_jsxs("div", { role: "tablist", "aria-label": "Primary navigation", className: "grid gap-px", children: [newChatTab, integrationsTab, scheduledTab] }), searchAction] }));
12
19
  }
@@ -4,6 +4,20 @@ export interface UseNearBottomAutoscrollOptions {
4
4
  threshold?: number;
5
5
  enabled?: boolean;
6
6
  }
7
+ /**
8
+ * @deprecated Nothing in this repo calls this any more — `AgentConversation`
9
+ * and `AssistantChat` both stick to the bottom via the shadcn `MessageScroller`
10
+ * primitive, which does it with one mechanism instead of five.
11
+ *
12
+ * What is below is five independent things all writing `scrollTop`: a scroll
13
+ * listener with a content-shrank heuristic, a ResizeObserver re-attached to
14
+ * every child on each mutation, a MutationObserver that scrolls, a
15
+ * rAF+rAF+setTimeout(80) chain, and a 100ms interval while streaming. Each was
16
+ * added to fix a different report and none replaced the one before it, so they
17
+ * race: that is the "text bumps up and down rapidly" and "flashing and
18
+ * jittering" users kept describing. Kept only so an external template importing
19
+ * it does not break; do not adopt it, and delete it in the next major.
20
+ */
7
21
  export declare function useNearBottomAutoscroll<TElement extends HTMLElement>({ followKey, streaming, threshold, enabled, }: UseNearBottomAutoscrollOptions): {
8
22
  scrollRef: import("react").RefObject<TElement | null>;
9
23
  isNearBottomRef: import("react").RefObject<boolean>;
@@ -30,6 +30,20 @@ function nestedScrollableConsumesVerticalIntent(event, root, deltaY) {
30
30
  }
31
31
  return false;
32
32
  }
33
+ /**
34
+ * @deprecated Nothing in this repo calls this any more — `AgentConversation`
35
+ * and `AssistantChat` both stick to the bottom via the shadcn `MessageScroller`
36
+ * primitive, which does it with one mechanism instead of five.
37
+ *
38
+ * What is below is five independent things all writing `scrollTop`: a scroll
39
+ * listener with a content-shrank heuristic, a ResizeObserver re-attached to
40
+ * every child on each mutation, a MutationObserver that scrolls, a
41
+ * rAF+rAF+setTimeout(80) chain, and a 100ms interval while streaming. Each was
42
+ * added to fix a different report and none replaced the one before it, so they
43
+ * race: that is the "text bumps up and down rapidly" and "flashing and
44
+ * jittering" users kept describing. Kept only so an external template importing
45
+ * it does not break; do not adopt it, and delete it in the next major.
46
+ */
33
47
  export function useNearBottomAutoscroll({ followKey, streaming = false, threshold = 4, enabled = true, }) {
34
48
  const scrollRef = useRef(null);
35
49
  const isNearBottomRef = useRef(true);
@@ -56,10 +56,34 @@ function isProviderRateLimit(text, errorCode) {
56
56
  code === "http_429" ||
57
57
  code === "rate_limited" ||
58
58
  code === "rate_limit_exceeded" ||
59
+ code === "overloaded_error" ||
59
60
  /^429 status code(?:\s*\(no body\))?$/i.test(text) ||
60
61
  /\b(?:http\s*)?429\b.*\b(?:status|too many requests|rate[-_\s]?limit|no body)\b/i.test(text) ||
61
62
  /\b(?:too many requests|rate[-_\s]?limit(?:ed| exceeded)?)\b/i.test(text));
62
63
  }
64
+ function parseProviderErrorPayload(raw) {
65
+ try {
66
+ const parsed = JSON.parse(raw);
67
+ if (!parsed || typeof parsed !== "object")
68
+ return null;
69
+ const record = parsed;
70
+ const error = record.error;
71
+ if (!error || typeof error !== "object")
72
+ return null;
73
+ const errorRecord = error;
74
+ const errorCode = typeof errorRecord.type === "string" ? errorRecord.type : undefined;
75
+ const message = typeof errorRecord.message === "string"
76
+ ? errorRecord.message.trim()
77
+ : undefined;
78
+ if (!errorCode && !message)
79
+ return null;
80
+ return { message, errorCode };
81
+ // coercion-ok: invalid provider payloads are expected and fall back to the raw error text
82
+ }
83
+ catch {
84
+ return null;
85
+ }
86
+ }
63
87
  export function isProviderAuthenticationError(text, errorCode) {
64
88
  const code = normalizeErrorCode(errorCode);
65
89
  const lower = text.toLowerCase();
@@ -87,7 +111,11 @@ export function normalizeChatError(errorMessage, errorCode) {
87
111
  const raw = String(errorMessage || "Unknown error");
88
112
  const looksHtml = /<html[\s>]|<body[\s>]|<head[\s>]/i.test(raw);
89
113
  const text = looksHtml ? htmlToText(raw) : raw.trim();
90
- const code = normalizeErrorCode(errorCode);
114
+ const providerPayload = looksHtml ? null : parseProviderErrorPayload(text);
115
+ const code = normalizeErrorCode(errorCode ?? providerPayload?.errorCode);
116
+ const providerMessage = providerPayload?.errorCode === "overloaded_error"
117
+ ? "The model provider is overloaded right now. Wait a moment, then retry."
118
+ : providerPayload?.message;
91
119
  if (code === "builder_model_unauthorized") {
92
120
  return {
93
121
  message: "The provider behind this model rejected the request. Pick a different model, then retry.",
@@ -121,9 +149,10 @@ export function normalizeChatError(errorMessage, errorCode) {
121
149
  details: text,
122
150
  };
123
151
  }
124
- if (isProviderRateLimit(text, errorCode)) {
152
+ if (isProviderRateLimit(text, code)) {
125
153
  return {
126
- message: "The model provider is rate-limiting this chat right now. Wait a moment, then retry.",
154
+ message: providerMessage ??
155
+ "The model provider is rate-limiting this chat right now. Wait a moment, then retry.",
127
156
  details: text,
128
157
  };
129
158
  }
@@ -206,6 +206,7 @@ export function EmbeddedExtension({ extensionId, slotId, context, className, ini
206
206
  const role = binding.role === "owner" ||
207
207
  binding.role === "admin" ||
208
208
  binding.role === "editor" ||
209
+ binding.role === "commenter" ||
209
210
  binding.role === "viewer"
210
211
  ? binding.role
211
212
  : "viewer";