@agent-native/core 0.103.1 → 0.105.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 (568) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +61 -0
  3. package/corpus/core/package.json +9 -2
  4. package/corpus/core/src/agent/engine/credential-errors.ts +2 -2
  5. package/corpus/core/src/agent/production-agent.ts +30 -0
  6. package/corpus/core/src/agent/run-store.ts +12 -2
  7. package/corpus/core/src/cli/create.ts +1 -0
  8. package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +30 -11
  9. package/corpus/core/src/cli/templates-meta.ts +4 -3
  10. package/corpus/core/src/client/AgentAskPopover.tsx +89 -0
  11. package/corpus/core/src/client/AgentChatHome.tsx +4 -0
  12. package/corpus/core/src/client/AgentPanel.tsx +321 -223
  13. package/corpus/core/src/client/AssistantChat.tsx +6 -10
  14. package/corpus/core/src/client/MultiTabAssistantChat.tsx +53 -372
  15. package/corpus/core/src/client/agent-chat-adapter.ts +13 -1
  16. package/corpus/core/src/client/agent-page/AgentContextTab.tsx +133 -149
  17. package/corpus/core/src/client/agent-page/AgentEmptyState.tsx +44 -0
  18. package/corpus/core/src/client/agent-page/AgentJobsTab.tsx +153 -82
  19. package/corpus/core/src/client/agent-page/AgentTabFrame.tsx +39 -0
  20. package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +368 -356
  21. package/corpus/core/src/client/agent-page/types.ts +1 -1
  22. package/corpus/core/src/client/analytics.ts +51 -5
  23. package/corpus/core/src/client/chat/run-recovery.tsx +12 -4
  24. package/corpus/core/src/client/composer/PromptComposer.tsx +5 -15
  25. package/corpus/core/src/client/composer/TiptapComposer.tsx +32 -3
  26. package/corpus/core/src/client/dynamic-suggestions.ts +3 -3
  27. package/corpus/core/src/client/index.ts +16 -1
  28. package/corpus/core/src/client/resources/ResourceTree.tsx +249 -38
  29. package/corpus/core/src/client/resources/ResourcesPanel.tsx +307 -140
  30. package/corpus/core/src/client/session-replay.ts +158 -5
  31. package/corpus/core/src/client/settings/AutomationsSection.tsx +30 -10
  32. package/corpus/core/src/client/settings/SettingsPanel.tsx +3 -2
  33. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +2 -0
  34. package/corpus/core/src/client/settings/agent-settings-search.ts +2 -2
  35. package/corpus/core/src/client/use-chat-threads.ts +2 -0
  36. package/corpus/core/src/connections/catalog.ts +49 -7
  37. package/corpus/core/src/db/index.ts +6 -1
  38. package/corpus/core/src/deploy/build.ts +23 -0
  39. package/corpus/core/src/extensions/actions.ts +106 -16
  40. package/corpus/core/src/extensions/content-patch.ts +22 -0
  41. package/corpus/core/src/extensions/routes.ts +18 -0
  42. package/corpus/core/src/extensions/store.ts +8 -0
  43. package/corpus/core/src/index.ts +3 -0
  44. package/corpus/core/src/ingestion/docx.ts +158 -0
  45. package/corpus/core/src/ingestion/figma-node-to-html.ts +1860 -0
  46. package/corpus/core/src/ingestion/figma.ts +548 -0
  47. package/corpus/core/src/ingestion/index.ts +107 -0
  48. package/corpus/core/src/ingestion/media.ts +264 -0
  49. package/corpus/core/src/ingestion/notion.ts +121 -0
  50. package/corpus/core/src/ingestion/office.ts +214 -0
  51. package/corpus/core/src/ingestion/orchestration.ts +160 -0
  52. package/corpus/core/src/ingestion/pptx.ts +333 -0
  53. package/corpus/core/src/ingestion/selection.ts +81 -0
  54. package/corpus/core/src/ingestion/website.ts +151 -0
  55. package/corpus/core/src/integrations/plugin.ts +45 -37
  56. package/corpus/core/src/localization/default-messages.ts +35 -12
  57. package/corpus/core/src/observability/hosted-model-experiment.ts +118 -0
  58. package/corpus/core/src/observability/traces.ts +5 -3
  59. package/corpus/core/src/provider-api/index.ts +452 -8
  60. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +18 -1
  61. package/corpus/core/src/search-utils/index.ts +112 -0
  62. package/corpus/core/src/secrets/register-framework-secrets.ts +61 -0
  63. package/corpus/core/src/server/action-discovery.ts +33 -8
  64. package/corpus/core/src/server/agent-chat/framework-prompts.ts +2 -2
  65. package/corpus/core/src/server/agent-chat/prompt-resources.ts +144 -0
  66. package/corpus/core/src/server/agent-chat-plugin.ts +6 -0
  67. package/corpus/core/src/server/core-routes-plugin.ts +12 -0
  68. package/corpus/core/src/server/index.ts +30 -0
  69. package/corpus/core/src/server/workspace-provider-oauth.ts +583 -0
  70. package/corpus/core/src/styles/agent-native.css +9 -0
  71. package/corpus/core/src/templates/default/app/i18n/en-US.ts +3 -3
  72. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  73. package/corpus/core/src/templates/workspace-root/.env.example +12 -0
  74. package/corpus/core/src/workspace-connections/index.ts +6 -0
  75. package/corpus/core/src/workspace-connections/lifecycle.ts +43 -0
  76. package/corpus/core/src/workspace-connections/store.ts +16 -0
  77. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +46 -3
  78. package/corpus/templates/analytics/AGENTS.md +9 -0
  79. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +120 -6
  80. package/corpus/templates/analytics/actions/mutate-dashboard.ts +92 -30
  81. package/corpus/templates/analytics/actions/update-dashboard.ts +5 -5
  82. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +313 -220
  83. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -2
  84. package/corpus/templates/analytics/app/components/layout/Layout.tsx +9 -6
  85. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +90 -64
  86. package/corpus/templates/analytics/app/i18n-data.ts +3 -3
  87. package/corpus/templates/analytics/app/lib/dashboard-list-loading.ts +25 -0
  88. package/corpus/templates/analytics/app/lib/item-popularity.ts +13 -4
  89. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +1 -1
  90. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/pivot.ts +8 -3
  91. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +1 -0
  92. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +15 -3
  93. package/corpus/templates/analytics/changelog/2026-07-16-dashboard-filter-defaults-can-now-be-changed-reliably-withou.md +6 -0
  94. package/corpus/templates/analytics/changelog/2026-07-16-dashboard-lists-load-in-one-stable-order-without-popping-bet.md +6 -0
  95. package/corpus/templates/analytics/changelog/2026-07-16-fixed-dashboard-filter-dropdown-text-alignment.md +6 -0
  96. package/corpus/templates/analytics/changelog/2026-07-16-recurring-signed-in-users-can-now-be-viewed-as-weekly-bars-b.md +6 -0
  97. package/corpus/templates/analytics/changelog/2026-07-16-the-analytics-agent-can-now-duplicate-a-chart-and-place-the-.md +6 -0
  98. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +41 -1
  99. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +1 -1
  100. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +47 -1
  101. package/corpus/templates/analytics/server/lib/session-replay.ts +68 -0
  102. package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -0
  103. package/corpus/templates/analytics/server/routes/sessions/lookup.get.ts +47 -0
  104. package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +16 -9
  105. package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +86 -0
  106. package/corpus/templates/assets/AGENTS.md +10 -0
  107. package/corpus/templates/assets/actions/create-generation-session.ts +59 -1
  108. package/corpus/templates/assets/actions/edit-image.ts +2 -0
  109. package/corpus/templates/assets/actions/generate-asset.ts +52 -0
  110. package/corpus/templates/assets/actions/generate-image-batch.ts +55 -0
  111. package/corpus/templates/assets/actions/generate-image.ts +219 -1
  112. package/corpus/templates/assets/actions/open-asset-picker.ts +14 -0
  113. package/corpus/templates/assets/actions/refine-image.ts +3 -0
  114. package/corpus/templates/assets/actions/restyle-image.ts +2 -0
  115. package/corpus/templates/assets/agent-native.app-skill.json +4 -0
  116. package/corpus/templates/assets/app/components/layout/Layout.tsx +2 -0
  117. package/corpus/templates/assets/app/i18n/zh-TW.ts +3 -0
  118. package/corpus/templates/assets/app/i18n-data.ts +29 -13
  119. package/corpus/templates/assets/app/routes/agent.tsx +7 -1
  120. package/corpus/templates/assets/app/routes/library.tsx +9 -0
  121. package/corpus/templates/assets/app/routes/settings.tsx +3 -0
  122. package/corpus/templates/assets/changelog/2026-07-16-creative-context-library.md +6 -0
  123. package/corpus/templates/assets/package.json +1 -0
  124. package/corpus/templates/assets/server/lib/image-processing.ts +1 -22
  125. package/corpus/templates/assets/server/plugins/creative-context.ts +205 -0
  126. package/corpus/templates/brain/app/i18n-data.ts +3 -3
  127. package/corpus/templates/brain/app/lib/brain.ts +1 -1
  128. package/corpus/templates/brain/server/lib/search.ts +17 -67
  129. package/corpus/templates/calendar/app/i18n-data.ts +3 -3
  130. package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +19 -18
  131. package/corpus/templates/chat/app/i18n/en-US.ts +3 -3
  132. package/corpus/templates/chat/app/lib/agent-page.tsx +10 -1
  133. package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +1 -1
  134. package/corpus/templates/clips/AGENTS.md +4 -0
  135. package/corpus/templates/clips/actions/cleanup-transcript.ts +35 -4
  136. package/corpus/templates/clips/actions/create-meeting.ts +6 -2
  137. package/corpus/templates/clips/actions/create-organization.ts +3 -2
  138. package/corpus/templates/clips/actions/create-recording.ts +4 -1
  139. package/corpus/templates/clips/actions/finalize-recording.ts +44 -7
  140. package/corpus/templates/clips/actions/import-loom-recording.ts +4 -1
  141. package/corpus/templates/clips/actions/lib/create-recording-schema.ts +2 -2
  142. package/corpus/templates/clips/actions/list-meetings.ts +23 -5
  143. package/corpus/templates/clips/actions/list-organization-state.ts +1 -1
  144. package/corpus/templates/clips/actions/remove-silences.ts +10 -1
  145. package/corpus/templates/clips/actions/request-transcript.ts +53 -11
  146. package/corpus/templates/clips/actions/search-recordings-utils.ts +7 -0
  147. package/corpus/templates/clips/actions/search-recordings.ts +5 -8
  148. package/corpus/templates/clips/actions/set-organization-branding.ts +2 -2
  149. package/corpus/templates/clips/actions/stitch-recordings.ts +10 -5
  150. package/corpus/templates/clips/actions/update-ai-request-status.ts +38 -0
  151. package/corpus/templates/clips/app/components/editor/editor-layout.tsx +3 -4
  152. package/corpus/templates/clips/app/components/editor/editor-selection.ts +19 -0
  153. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +10 -10
  154. package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +1 -2
  155. package/corpus/templates/clips/app/components/library/library-grid.tsx +101 -93
  156. package/corpus/templates/clips/app/components/player/video-player.tsx +11 -0
  157. package/corpus/templates/clips/app/components/workspace/branding-editor.tsx +53 -1
  158. package/corpus/templates/clips/app/i18n/ar-SA.ts +7 -1
  159. package/corpus/templates/clips/app/i18n/de-DE.ts +7 -1
  160. package/corpus/templates/clips/app/i18n/en-US.ts +10 -4
  161. package/corpus/templates/clips/app/i18n/es-ES.ts +7 -1
  162. package/corpus/templates/clips/app/i18n/fr-FR.ts +7 -1
  163. package/corpus/templates/clips/app/i18n/hi-IN.ts +7 -1
  164. package/corpus/templates/clips/app/i18n/ja-JP.ts +7 -1
  165. package/corpus/templates/clips/app/i18n/ko-KR.ts +7 -1
  166. package/corpus/templates/clips/app/i18n/pt-BR.ts +7 -1
  167. package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -1
  168. package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -1
  169. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +5 -9
  170. package/corpus/templates/clips/app/routes/_app.settings.organization.tsx +6 -2
  171. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +129 -27
  172. package/corpus/templates/clips/app/routes/record.tsx +23 -2
  173. package/corpus/templates/clips/app/routes/share.$shareId.tsx +6 -2
  174. package/corpus/templates/clips/app/routes.ts +3 -1
  175. package/corpus/templates/clips/changelog/2026-07-16-authorized-viewers-can-open-shared-private-clips-without-a-m.md +6 -0
  176. package/corpus/templates/clips/changelog/2026-07-16-camera-bubble-hover-controls-appear-above-the-face.md +6 -0
  177. package/corpus/templates/clips/changelog/2026-07-16-chrome-extension-recovers-stale-recorder-state.md +6 -0
  178. package/corpus/templates/clips/changelog/2026-07-16-clips-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
  179. package/corpus/templates/clips/changelog/2026-07-16-clips-search-now-matches-recording-content-without-requiring.md +6 -0
  180. package/corpus/templates/clips/changelog/2026-07-16-declined-meetings-no-longer-show-desktop-reminders.md +6 -0
  181. package/corpus/templates/clips/changelog/2026-07-16-failed-desktop-saves-now-show-their-local-recovery-copy.md +6 -0
  182. package/corpus/templates/clips/changelog/2026-07-16-long-desktop-clips-now-preserve-complete-playback-synced-aud.md +6 -0
  183. package/corpus/templates/clips/changelog/2026-07-16-long-recording-lists-keep-stitch-and-library-actions-visible.md +6 -0
  184. package/corpus/templates/clips/changelog/2026-07-16-organization-admins-can-choose-new-recording-visibility.md +6 -0
  185. package/corpus/templates/clips/changelog/2026-07-16-remove-silences-now-shows-queued-active-completed-and-failed.md +6 -0
  186. package/corpus/templates/clips/changelog/2026-07-16-settings-no-longer-repeats-the-builder-connection-status-in-.md +6 -0
  187. package/corpus/templates/clips/changelog/2026-07-16-transcripts-now-appear-from-native-browser-speech-sooner-wit.md +6 -0
  188. package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -1
  189. package/corpus/templates/clips/chrome-extension/src/background.ts +73 -1
  190. package/corpus/templates/clips/chrome-extension/src/native-recording-state.ts +32 -0
  191. package/corpus/templates/clips/chrome-extension/src/native-transcription.ts +248 -0
  192. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +106 -0
  193. package/corpus/templates/clips/desktop/src/app.tsx +66 -28
  194. package/corpus/templates/clips/desktop/src/lib/recorder.ts +335 -285
  195. package/corpus/templates/clips/desktop/src/lib/single-flight.ts +7 -0
  196. package/corpus/templates/clips/desktop/src/lib/upload-verification.ts +51 -0
  197. package/corpus/templates/clips/desktop/src/overlays/bubble.tsx +2 -2
  198. package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +10 -2
  199. package/corpus/templates/clips/desktop/src/styles.css +13 -11
  200. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +8 -9
  201. package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +1 -0
  202. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +88 -13
  203. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +13 -2
  204. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +241 -6
  205. package/corpus/templates/clips/server/db/schema.ts +2 -2
  206. package/corpus/templates/clips/server/lib/builder-media-compression.ts +64 -67
  207. package/corpus/templates/clips/server/lib/calendar-event-classification.ts +19 -0
  208. package/corpus/templates/clips/server/lib/google-calendar-client.ts +1 -0
  209. package/corpus/templates/clips/server/lib/recordings.ts +40 -1
  210. package/corpus/templates/clips/server/plugins/agent-chat.ts +1 -0
  211. package/corpus/templates/clips/server/plugins/db.ts +2 -2
  212. package/corpus/templates/clips/server/routes/api/auth/google-calendar.get.ts +1 -1
  213. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +14 -5
  214. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +51 -1
  215. package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +1 -64
  216. package/corpus/templates/clips/shared/media-worker-contract.ts +32 -15
  217. package/corpus/templates/content/.agents/skills/content/SKILL.md +16 -0
  218. package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +85 -0
  219. package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +8 -0
  220. package/corpus/templates/content/AGENTS.md +9 -0
  221. package/corpus/templates/content/actions/create-document.ts +94 -0
  222. package/corpus/templates/content/actions/edit-document.ts +144 -4
  223. package/corpus/templates/content/actions/update-document.ts +138 -0
  224. package/corpus/templates/content/agent-native.app-skill.json +4 -0
  225. package/corpus/templates/content/app/components/layout/Layout.tsx +2 -0
  226. package/corpus/templates/content/app/i18n/zh-TW.ts +3 -0
  227. package/corpus/templates/content/app/i18n-data.ts +13 -4
  228. package/corpus/templates/content/app/routes/_app.agent.tsx +2 -1
  229. package/corpus/templates/content/app/routes/_app.settings.tsx +3 -0
  230. package/corpus/templates/content/changelog/2026-07-16-creative-context-library.md +6 -0
  231. package/corpus/templates/content/package.json +1 -0
  232. package/corpus/templates/content/server/plugins/creative-context.ts +31 -0
  233. package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +116 -0
  234. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +16 -0
  235. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -0
  236. package/corpus/templates/design/AGENTS.md +6 -0
  237. package/corpus/templates/design/actions/clone-creative-context-design.ts +176 -0
  238. package/corpus/templates/design/actions/edit-design.ts +128 -0
  239. package/corpus/templates/design/actions/generate-design.ts +278 -14
  240. package/corpus/templates/design/actions/generate-screens.ts +42 -1
  241. package/corpus/templates/design/agent-native.app-skill.json +4 -0
  242. package/corpus/templates/design/app/components/layout/Layout.tsx +7 -3
  243. package/corpus/templates/design/app/i18n/zh-TW.ts +3 -0
  244. package/corpus/templates/design/app/i18n-data.ts +10 -4
  245. package/corpus/templates/design/app/routes/agent.tsx +2 -1
  246. package/corpus/templates/design/app/routes/settings.tsx +3 -0
  247. package/corpus/templates/design/changelog/2026-07-16-creative-context-library.md +6 -0
  248. package/corpus/templates/design/changelog/2026-07-16-design-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
  249. package/corpus/templates/design/package.json +1 -0
  250. package/corpus/templates/design/server/lib/figma-design-context.ts +5 -335
  251. package/corpus/templates/design/server/lib/figma-node-to-html.ts +1 -1859
  252. package/corpus/templates/design/server/lib/import-design-files.ts +6 -8
  253. package/corpus/templates/design/server/plugins/creative-context.ts +31 -0
  254. package/corpus/templates/design/shared/generation-session.ts +7 -0
  255. package/corpus/templates/dispatch/app/i18n-data.ts +3 -3
  256. package/corpus/templates/forms/app/i18n/en-US.ts +3 -3
  257. package/corpus/templates/macros/app/i18n/en-US.ts +3 -3
  258. package/corpus/templates/mail/app/components/email/EmailThread.tsx +35 -5
  259. package/corpus/templates/mail/app/i18n/en-US.ts +3 -3
  260. package/corpus/templates/mail/changelog/2026-07-16-mail-previews-now-expand-to-show-the-full-message-without-an.md +6 -0
  261. package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +30 -11
  262. package/corpus/templates/plan/AGENTS.md +21 -1
  263. package/corpus/templates/plan/actions/get-visual-plan.ts +1 -1
  264. package/corpus/templates/plan/actions/patch-visual-plan-source.ts +161 -0
  265. package/corpus/templates/plan/actions/read-visual-plan-source.ts +1 -1
  266. package/corpus/templates/plan/actions/update-visual-plan.ts +126 -10
  267. package/corpus/templates/plan/app/hooks/use-plans.ts +2 -0
  268. package/corpus/templates/plan/app/i18n/en-US.ts +3 -3
  269. package/corpus/templates/plan/app/pages/PlansPage.tsx +65 -62
  270. package/corpus/templates/plan/changelog/2026-07-16-local-plan-previews-now-load-annotations-containing-html-lik.md +6 -0
  271. package/corpus/templates/plan/changelog/2026-07-16-plan-agents-now-prevent-stale-edits-from-overwriting-newer-p.md +6 -0
  272. package/corpus/templates/plan/server/plan-mdx.ts +75 -2
  273. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +21 -4
  274. package/corpus/templates/slides/.agents/skills/creative-context/SKILL.md +122 -0
  275. package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +11 -0
  276. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +12 -3
  277. package/corpus/templates/slides/AGENTS.md +6 -0
  278. package/corpus/templates/slides/actions/add-slide.ts +230 -14
  279. package/corpus/templates/slides/actions/clone-context-slide.ts +302 -0
  280. package/corpus/templates/slides/actions/create-deck.ts +130 -0
  281. package/corpus/templates/slides/actions/extract-pdf.ts +6 -2
  282. package/corpus/templates/slides/actions/import-file.ts +5 -4
  283. package/corpus/templates/slides/actions/patch-deck.ts +200 -10
  284. package/corpus/templates/slides/actions/update-slide.ts +208 -15
  285. package/corpus/templates/slides/app/components/layout/Layout.tsx +2 -0
  286. package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +16 -1
  287. package/corpus/templates/slides/app/i18n/ar-SA.ts +3 -0
  288. package/corpus/templates/slides/app/i18n/de-DE.ts +3 -0
  289. package/corpus/templates/slides/app/i18n/en-US.ts +6 -3
  290. package/corpus/templates/slides/app/i18n/es-ES.ts +3 -0
  291. package/corpus/templates/slides/app/i18n/fr-FR.ts +3 -0
  292. package/corpus/templates/slides/app/i18n/hi-IN.ts +3 -0
  293. package/corpus/templates/slides/app/i18n/ja-JP.ts +3 -0
  294. package/corpus/templates/slides/app/i18n/ko-KR.ts +3 -0
  295. package/corpus/templates/slides/app/i18n/pt-BR.ts +3 -0
  296. package/corpus/templates/slides/app/i18n/zh-CN.ts +3 -0
  297. package/corpus/templates/slides/app/i18n/zh-TW.ts +3 -0
  298. package/corpus/templates/slides/app/lib/validate-native-slide-html.ts +176 -0
  299. package/corpus/templates/slides/app/routes/agent.tsx +7 -1
  300. package/corpus/templates/slides/app/routes/settings.tsx +3 -0
  301. package/corpus/templates/slides/changelog/2026-07-16-creative-context-library.md +6 -0
  302. package/corpus/templates/slides/changelog/2026-07-16-google-slides-native-cloning.md +6 -0
  303. package/corpus/templates/slides/package.json +1 -0
  304. package/corpus/templates/slides/server/handlers/import/docx-parser.ts +4 -85
  305. package/corpus/templates/slides/server/handlers/import/pptx-parser.ts +7 -421
  306. package/corpus/templates/slides/server/plugins/creative-context.ts +166 -0
  307. package/dist/agent/engine/credential-errors.d.ts +1 -1
  308. package/dist/agent/engine/credential-errors.d.ts.map +1 -1
  309. package/dist/agent/engine/credential-errors.js +2 -2
  310. package/dist/agent/engine/credential-errors.js.map +1 -1
  311. package/dist/agent/production-agent.d.ts.map +1 -1
  312. package/dist/agent/production-agent.js +25 -0
  313. package/dist/agent/production-agent.js.map +1 -1
  314. package/dist/agent/run-store.d.ts.map +1 -1
  315. package/dist/agent/run-store.js +12 -2
  316. package/dist/agent/run-store.js.map +1 -1
  317. package/dist/cli/create.d.ts.map +1 -1
  318. package/dist/cli/create.js +1 -0
  319. package/dist/cli/create.js.map +1 -1
  320. package/dist/cli/skills-content/visual-plan-skill.d.ts +1 -1
  321. package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -1
  322. package/dist/cli/skills-content/visual-plan-skill.js +30 -11
  323. package/dist/cli/skills-content/visual-plan-skill.js.map +1 -1
  324. package/dist/cli/templates-meta.d.ts.map +1 -1
  325. package/dist/cli/templates-meta.js +4 -3
  326. package/dist/cli/templates-meta.js.map +1 -1
  327. package/dist/client/AgentAskPopover.d.ts +11 -0
  328. package/dist/client/AgentAskPopover.d.ts.map +1 -0
  329. package/dist/client/AgentAskPopover.js +30 -0
  330. package/dist/client/AgentAskPopover.js.map +1 -0
  331. package/dist/client/AgentChatHome.d.ts +1 -1
  332. package/dist/client/AgentChatHome.d.ts.map +1 -1
  333. package/dist/client/AgentChatHome.js +2 -2
  334. package/dist/client/AgentChatHome.js.map +1 -1
  335. package/dist/client/AgentPanel.d.ts +9 -19
  336. package/dist/client/AgentPanel.d.ts.map +1 -1
  337. package/dist/client/AgentPanel.js +119 -80
  338. package/dist/client/AgentPanel.js.map +1 -1
  339. package/dist/client/AssistantChat.d.ts.map +1 -1
  340. package/dist/client/AssistantChat.js +4 -4
  341. package/dist/client/AssistantChat.js.map +1 -1
  342. package/dist/client/MultiTabAssistantChat.d.ts +3 -9
  343. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  344. package/dist/client/MultiTabAssistantChat.js +49 -189
  345. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  346. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  347. package/dist/client/agent-chat-adapter.js +12 -1
  348. package/dist/client/agent-chat-adapter.js.map +1 -1
  349. package/dist/client/agent-page/AgentContextTab.d.ts.map +1 -1
  350. package/dist/client/agent-page/AgentContextTab.js +26 -28
  351. package/dist/client/agent-page/AgentContextTab.js.map +1 -1
  352. package/dist/client/agent-page/AgentEmptyState.d.ts +13 -0
  353. package/dist/client/agent-page/AgentEmptyState.d.ts.map +1 -0
  354. package/dist/client/agent-page/AgentEmptyState.js +6 -0
  355. package/dist/client/agent-page/AgentEmptyState.js.map +1 -0
  356. package/dist/client/agent-page/AgentJobsTab.d.ts +1 -1
  357. package/dist/client/agent-page/AgentJobsTab.d.ts.map +1 -1
  358. package/dist/client/agent-page/AgentJobsTab.js +90 -58
  359. package/dist/client/agent-page/AgentJobsTab.js.map +1 -1
  360. package/dist/client/agent-page/AgentTabFrame.d.ts +12 -0
  361. package/dist/client/agent-page/AgentTabFrame.d.ts.map +1 -0
  362. package/dist/client/agent-page/AgentTabFrame.js +7 -0
  363. package/dist/client/agent-page/AgentTabFrame.js.map +1 -0
  364. package/dist/client/agent-page/AgentTabsPage.d.ts +9 -1
  365. package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
  366. package/dist/client/agent-page/AgentTabsPage.js +135 -99
  367. package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
  368. package/dist/client/agent-page/types.d.ts +1 -1
  369. package/dist/client/agent-page/types.d.ts.map +1 -1
  370. package/dist/client/agent-page/types.js.map +1 -1
  371. package/dist/client/analytics.d.ts +10 -3
  372. package/dist/client/analytics.d.ts.map +1 -1
  373. package/dist/client/analytics.js +37 -2
  374. package/dist/client/analytics.js.map +1 -1
  375. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  376. package/dist/client/chat/run-recovery.js +10 -3
  377. package/dist/client/chat/run-recovery.js.map +1 -1
  378. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  379. package/dist/client/composer/PromptComposer.js +2 -2
  380. package/dist/client/composer/PromptComposer.js.map +1 -1
  381. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  382. package/dist/client/composer/TiptapComposer.js +15 -3
  383. package/dist/client/composer/TiptapComposer.js.map +1 -1
  384. package/dist/client/dynamic-suggestions.js +3 -3
  385. package/dist/client/dynamic-suggestions.js.map +1 -1
  386. package/dist/client/index.d.ts +4 -3
  387. package/dist/client/index.d.ts.map +1 -1
  388. package/dist/client/index.js +3 -2
  389. package/dist/client/index.js.map +1 -1
  390. package/dist/client/resources/ResourceTree.d.ts +5 -1
  391. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  392. package/dist/client/resources/ResourceTree.js +74 -5
  393. package/dist/client/resources/ResourceTree.js.map +1 -1
  394. package/dist/client/resources/ResourcesPanel.d.ts +11 -2
  395. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  396. package/dist/client/resources/ResourcesPanel.js +105 -31
  397. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  398. package/dist/client/session-replay.d.ts +28 -0
  399. package/dist/client/session-replay.d.ts.map +1 -1
  400. package/dist/client/session-replay.js +122 -8
  401. package/dist/client/session-replay.js.map +1 -1
  402. package/dist/client/settings/AutomationsSection.d.ts +3 -1
  403. package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
  404. package/dist/client/settings/AutomationsSection.js +16 -6
  405. package/dist/client/settings/AutomationsSection.js.map +1 -1
  406. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  407. package/dist/client/settings/SettingsPanel.js +3 -3
  408. package/dist/client/settings/SettingsPanel.js.map +1 -1
  409. package/dist/client/settings/SettingsTabsPage.d.ts +2 -0
  410. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  411. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  412. package/dist/client/settings/agent-settings-search.js +2 -2
  413. package/dist/client/settings/agent-settings-search.js.map +1 -1
  414. package/dist/client/use-chat-threads.d.ts +2 -0
  415. package/dist/client/use-chat-threads.d.ts.map +1 -1
  416. package/dist/client/use-chat-threads.js.map +1 -1
  417. package/dist/connections/catalog.d.ts +41 -7
  418. package/dist/connections/catalog.d.ts.map +1 -1
  419. package/dist/connections/catalog.js +40 -7
  420. package/dist/connections/catalog.js.map +1 -1
  421. package/dist/db/index.d.ts +2 -2
  422. package/dist/db/index.d.ts.map +1 -1
  423. package/dist/db/index.js +2 -2
  424. package/dist/db/index.js.map +1 -1
  425. package/dist/deploy/build.d.ts.map +1 -1
  426. package/dist/deploy/build.js +17 -0
  427. package/dist/deploy/build.js.map +1 -1
  428. package/dist/extensions/actions.d.ts.map +1 -1
  429. package/dist/extensions/actions.js +85 -15
  430. package/dist/extensions/actions.js.map +1 -1
  431. package/dist/extensions/content-patch.d.ts +4 -0
  432. package/dist/extensions/content-patch.d.ts.map +1 -1
  433. package/dist/extensions/content-patch.js +18 -0
  434. package/dist/extensions/content-patch.js.map +1 -1
  435. package/dist/extensions/routes.d.ts.map +1 -1
  436. package/dist/extensions/routes.js +14 -0
  437. package/dist/extensions/routes.js.map +1 -1
  438. package/dist/extensions/store.d.ts +1 -0
  439. package/dist/extensions/store.d.ts.map +1 -1
  440. package/dist/extensions/store.js +4 -1
  441. package/dist/extensions/store.js.map +1 -1
  442. package/dist/index.d.ts +1 -1
  443. package/dist/index.d.ts.map +1 -1
  444. package/dist/index.js +1 -1
  445. package/dist/index.js.map +1 -1
  446. package/dist/ingestion/docx.d.ts +16 -0
  447. package/dist/ingestion/docx.d.ts.map +1 -0
  448. package/dist/ingestion/docx.js +129 -0
  449. package/dist/ingestion/docx.js.map +1 -0
  450. package/dist/ingestion/figma-node-to-html.d.ts +304 -0
  451. package/dist/ingestion/figma-node-to-html.d.ts.map +1 -0
  452. package/dist/ingestion/figma-node-to-html.js +1292 -0
  453. package/dist/ingestion/figma-node-to-html.js.map +1 -0
  454. package/dist/ingestion/figma.d.ts +115 -0
  455. package/dist/ingestion/figma.d.ts.map +1 -0
  456. package/dist/ingestion/figma.js +399 -0
  457. package/dist/ingestion/figma.js.map +1 -0
  458. package/dist/ingestion/index.d.ts +11 -0
  459. package/dist/ingestion/index.d.ts.map +1 -0
  460. package/dist/ingestion/index.js +11 -0
  461. package/dist/ingestion/index.js.map +1 -0
  462. package/dist/ingestion/media.d.ts +36 -0
  463. package/dist/ingestion/media.d.ts.map +1 -0
  464. package/dist/ingestion/media.js +178 -0
  465. package/dist/ingestion/media.js.map +1 -0
  466. package/dist/ingestion/notion.d.ts +12 -0
  467. package/dist/ingestion/notion.d.ts.map +1 -0
  468. package/dist/ingestion/notion.js +104 -0
  469. package/dist/ingestion/notion.js.map +1 -0
  470. package/dist/ingestion/office.d.ts +45 -0
  471. package/dist/ingestion/office.d.ts.map +1 -0
  472. package/dist/ingestion/office.js +141 -0
  473. package/dist/ingestion/office.js.map +1 -0
  474. package/dist/ingestion/orchestration.d.ts +52 -0
  475. package/dist/ingestion/orchestration.d.ts.map +1 -0
  476. package/dist/ingestion/orchestration.js +89 -0
  477. package/dist/ingestion/orchestration.js.map +1 -0
  478. package/dist/ingestion/pptx.d.ts +28 -0
  479. package/dist/ingestion/pptx.d.ts.map +1 -0
  480. package/dist/ingestion/pptx.js +255 -0
  481. package/dist/ingestion/pptx.js.map +1 -0
  482. package/dist/ingestion/selection.d.ts +20 -0
  483. package/dist/ingestion/selection.d.ts.map +1 -0
  484. package/dist/ingestion/selection.js +52 -0
  485. package/dist/ingestion/selection.js.map +1 -0
  486. package/dist/ingestion/website.d.ts +27 -0
  487. package/dist/ingestion/website.d.ts.map +1 -0
  488. package/dist/ingestion/website.js +100 -0
  489. package/dist/ingestion/website.js.map +1 -0
  490. package/dist/integrations/plugin.d.ts.map +1 -1
  491. package/dist/integrations/plugin.js +32 -27
  492. package/dist/integrations/plugin.js.map +1 -1
  493. package/dist/localization/default-messages.d.ts +22 -0
  494. package/dist/localization/default-messages.d.ts.map +1 -1
  495. package/dist/localization/default-messages.js +31 -9
  496. package/dist/localization/default-messages.js.map +1 -1
  497. package/dist/notifications/routes.d.ts +2 -2
  498. package/dist/observability/hosted-model-experiment.d.ts +39 -0
  499. package/dist/observability/hosted-model-experiment.d.ts.map +1 -0
  500. package/dist/observability/hosted-model-experiment.js +90 -0
  501. package/dist/observability/hosted-model-experiment.js.map +1 -0
  502. package/dist/observability/routes.d.ts +5 -5
  503. package/dist/observability/traces.d.ts.map +1 -1
  504. package/dist/observability/traces.js +5 -3
  505. package/dist/observability/traces.js.map +1 -1
  506. package/dist/provider-api/index.d.ts +35 -4
  507. package/dist/provider-api/index.d.ts.map +1 -1
  508. package/dist/provider-api/index.js +339 -8
  509. package/dist/provider-api/index.js.map +1 -1
  510. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  511. package/dist/scripts/agent-engines/list-agent-engines.js +18 -1
  512. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  513. package/dist/search-utils/index.d.ts +12 -0
  514. package/dist/search-utils/index.d.ts.map +1 -0
  515. package/dist/search-utils/index.js +95 -0
  516. package/dist/search-utils/index.js.map +1 -0
  517. package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
  518. package/dist/secrets/register-framework-secrets.js +57 -0
  519. package/dist/secrets/register-framework-secrets.js.map +1 -1
  520. package/dist/secrets/routes.d.ts +9 -9
  521. package/dist/server/action-discovery.d.ts +8 -0
  522. package/dist/server/action-discovery.d.ts.map +1 -1
  523. package/dist/server/action-discovery.js +26 -9
  524. package/dist/server/action-discovery.js.map +1 -1
  525. package/dist/server/agent-chat/framework-prompts.js +2 -2
  526. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  527. package/dist/server/agent-chat/prompt-resources.d.ts +19 -0
  528. package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -1
  529. package/dist/server/agent-chat/prompt-resources.js +95 -0
  530. package/dist/server/agent-chat/prompt-resources.js.map +1 -1
  531. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  532. package/dist/server/agent-chat-plugin.js +7 -0
  533. package/dist/server/agent-chat-plugin.js.map +1 -1
  534. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  535. package/dist/server/core-routes-plugin.js +5 -0
  536. package/dist/server/core-routes-plugin.js.map +1 -1
  537. package/dist/server/index.d.ts +5 -1
  538. package/dist/server/index.d.ts.map +1 -1
  539. package/dist/server/index.js +5 -1
  540. package/dist/server/index.js.map +1 -1
  541. package/dist/server/workspace-provider-oauth.d.ts +48 -0
  542. package/dist/server/workspace-provider-oauth.d.ts.map +1 -0
  543. package/dist/server/workspace-provider-oauth.js +415 -0
  544. package/dist/server/workspace-provider-oauth.js.map +1 -0
  545. package/dist/styles/agent-native.css +9 -0
  546. package/dist/templates/chat/app/i18n/en-US.ts +3 -3
  547. package/dist/templates/chat/app/lib/agent-page.tsx +10 -1
  548. package/dist/templates/default/app/i18n/en-US.ts +3 -3
  549. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  550. package/dist/templates/workspace-root/.env.example +12 -0
  551. package/dist/workspace-connections/index.d.ts +1 -0
  552. package/dist/workspace-connections/index.d.ts.map +1 -1
  553. package/dist/workspace-connections/index.js +1 -0
  554. package/dist/workspace-connections/index.js.map +1 -1
  555. package/dist/workspace-connections/lifecycle.d.ts +16 -0
  556. package/dist/workspace-connections/lifecycle.d.ts.map +1 -0
  557. package/dist/workspace-connections/lifecycle.js +14 -0
  558. package/dist/workspace-connections/lifecycle.js.map +1 -0
  559. package/dist/workspace-connections/store.d.ts.map +1 -1
  560. package/dist/workspace-connections/store.js +16 -0
  561. package/dist/workspace-connections/store.js.map +1 -1
  562. package/package.json +10 -3
  563. package/src/templates/chat/app/i18n/en-US.ts +3 -3
  564. package/src/templates/chat/app/lib/agent-page.spec.tsx +10 -1
  565. package/src/templates/chat/app/lib/agent-page.tsx +10 -1
  566. package/src/templates/default/app/i18n/en-US.ts +3 -3
  567. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  568. package/src/templates/workspace-root/.env.example +12 -0
@@ -9,7 +9,7 @@ import {
9
9
  IconEye,
10
10
  IconCode,
11
11
  IconClock,
12
- IconMessageChatbot,
12
+ IconHierarchy2,
13
13
  IconExternalLink,
14
14
  IconHelp,
15
15
  IconPlugConnected,
@@ -73,11 +73,85 @@ import {
73
73
  type ResourceScope,
74
74
  type ResourceMeta,
75
75
  type Resource,
76
+ type TreeNode,
76
77
  } from "./use-resources.js";
77
78
 
78
79
  const WORKSPACE_DOCS_URL = "https://agent-native.com/docs/workspace";
79
80
  const LOCAL_WORKSPACE_RESOURCE_METADATA_SOURCE = "local-workspace-resource";
80
81
 
82
+ export type ResourceView =
83
+ | "files"
84
+ | "instructions"
85
+ | "agents"
86
+ | "memory"
87
+ | "skills"
88
+ | "learnings"
89
+ | "remote-agents";
90
+
91
+ export type ResourceTreeVariant = "tree" | "collection";
92
+
93
+ const SPECIAL_RESOURCE_ROOTS = new Set([
94
+ "agents",
95
+ "agent-scratch",
96
+ "jobs",
97
+ "memory",
98
+ "remote-agents",
99
+ "skills",
100
+ ]);
101
+ const SPECIAL_RESOURCE_FILES = new Set(["agents.md", "learnings.md"]);
102
+
103
+ function normalizedResourcePath(path: string): string {
104
+ return path.replace(/^\/+/, "").toLowerCase();
105
+ }
106
+
107
+ function resourceMatchesView(node: TreeNode, view: ResourceView): boolean {
108
+ const path = normalizedResourcePath(node.path);
109
+ switch (view) {
110
+ case "files":
111
+ return (
112
+ !SPECIAL_RESOURCE_ROOTS.has(path.split("/", 1)[0]) &&
113
+ !SPECIAL_RESOURCE_FILES.has(path.split("/").pop() ?? "")
114
+ );
115
+ case "instructions":
116
+ return path.split("/").pop() === "agents.md";
117
+ case "agents":
118
+ return node.kind === "agent";
119
+ case "memory":
120
+ return path === "memory" || path.startsWith("memory/");
121
+ case "skills":
122
+ return node.kind === "skill";
123
+ case "learnings":
124
+ return path.split("/").pop() === "learnings.md";
125
+ case "remote-agents":
126
+ return node.kind === "remote-agent";
127
+ }
128
+ }
129
+
130
+ export function filterResourceTree(
131
+ tree: TreeNode[],
132
+ view: ResourceView | undefined,
133
+ ): TreeNode[] {
134
+ if (!view) return tree;
135
+ return tree.flatMap((node) => {
136
+ if (node.type === "folder") {
137
+ if (
138
+ view === "files" &&
139
+ (SPECIAL_RESOURCE_ROOTS.has(
140
+ normalizedResourcePath(node.path).split("/", 1)[0],
141
+ ) ||
142
+ SPECIAL_RESOURCE_FILES.has(
143
+ normalizedResourcePath(node.path).split("/").pop() ?? "",
144
+ ))
145
+ ) {
146
+ return [];
147
+ }
148
+ const children = filterResourceTree(node.children ?? [], view);
149
+ return children.length > 0 ? [{ ...node, children }] : [];
150
+ }
151
+ return resourceMatchesView(node, view) ? [node] : [];
152
+ });
153
+ }
154
+
81
155
  // ─── Create Menu (unified + button) ────────────────────────────────────────
82
156
 
83
157
  type CreateMenuView =
@@ -142,6 +216,7 @@ function buildAgentResourceContent({
142
216
 
143
217
  function CreateMenu({
144
218
  scope,
219
+ resourceFilter,
145
220
  onCreateFile,
146
221
  onCreateResource,
147
222
  onCreateMcpServer,
@@ -151,6 +226,7 @@ function CreateMenu({
151
226
  showToast,
152
227
  }: {
153
228
  scope: ResourceScope;
229
+ resourceFilter?: ResourceView;
154
230
  onCreateFile: (name: string) => void;
155
231
  onCreateResource: (
156
232
  path: string,
@@ -496,7 +572,7 @@ The result should be a reusable agent profile, not a one-off task response.`,
496
572
  action: () => setView("job"),
497
573
  },
498
574
  {
499
- icon: <IconMessageChatbot className="h-3.5 w-3.5" />,
575
+ icon: <IconHierarchy2 className="h-3.5 w-3.5" />,
500
576
  label: "Create Custom Agent",
501
577
  desc: "Add a reusable sub-agent profile",
502
578
  action: () => setView("agent-mode"),
@@ -536,6 +612,13 @@ The result should be a reusable agent profile, not a one-off task response.`,
536
612
  ]
537
613
  : []),
538
614
  ];
615
+ const visibleMenuItems = menuItems.filter((item) => {
616
+ if (!resourceFilter || resourceFilter === "files") return true;
617
+ if (resourceFilter === "agents")
618
+ return item.label === "Create Custom Agent";
619
+ if (resourceFilter === "skills") return item.label === "Create Skill";
620
+ return false;
621
+ });
539
622
 
540
623
  return (
541
624
  <>
@@ -580,7 +663,7 @@ The result should be a reusable agent profile, not a one-off task response.`,
580
663
  >
581
664
  {view === "menu" && (
582
665
  <div className="py-1">
583
- {menuItems.map((item) => {
666
+ {visibleMenuItems.map((item) => {
584
667
  const isSkill = item.label === "Create Skill";
585
668
  return (
586
669
  <div
@@ -842,7 +925,7 @@ The result should be a reusable agent profile, not a one-off task response.`,
842
925
  onClick={() => setView("agent-form")}
843
926
  className="flex w-full items-start gap-2 rounded-md border border-border px-3 py-2 text-left hover:bg-accent/40"
844
927
  >
845
- <IconMessageChatbot className="mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground" />
928
+ <IconHierarchy2 className="mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground" />
846
929
  <div>
847
930
  <div className="text-[12px] font-medium text-foreground">
848
931
  Fill Form
@@ -1009,6 +1092,12 @@ export interface ResourcesPanelProps {
1009
1092
  showMcpServers?: boolean;
1010
1093
  /** Optional page-level scope to mirror in the resource toolbar. */
1011
1094
  scope?: ResourceScope;
1095
+ /** When set, show only the requested scope instead of both scope sections. */
1096
+ showOnlyRequestedScope?: boolean;
1097
+ /** Limit the tree to one agent-native resource collection. */
1098
+ resourceFilter?: ResourceView;
1099
+ /** Render special collections as cards instead of a nested file tree. */
1100
+ resourceTreeVariant?: ResourceTreeVariant;
1012
1101
  }
1013
1102
 
1014
1103
  export function resolveInitialResourceScope(
@@ -1023,6 +1112,9 @@ export function resolveInitialResourceScope(
1023
1112
  export function ResourcesPanel({
1024
1113
  showMcpServers = true,
1025
1114
  scope: requestedScope,
1115
+ showOnlyRequestedScope = false,
1116
+ resourceFilter,
1117
+ resourceTreeVariant = "tree",
1026
1118
  }: ResourcesPanelProps = {}) {
1027
1119
  const { data: org } = useOrg();
1028
1120
  // Non-admin org members get read-only access to organization resources.
@@ -1121,6 +1213,27 @@ export function ResourcesPanel({
1121
1213
  { show: showAgentScratch },
1122
1214
  );
1123
1215
  const workspaceTree = workspaceTreeQuery.data ?? [];
1216
+ const visiblePersonalTree = useMemo(
1217
+ () => filterResourceTree(personalTree, resourceFilter),
1218
+ [personalTree, resourceFilter],
1219
+ );
1220
+ const visibleSharedTree = useMemo(
1221
+ () => filterResourceTree(sharedTree, resourceFilter),
1222
+ [resourceFilter, sharedTree],
1223
+ );
1224
+ const visibleWorkspaceTree = useMemo(
1225
+ () => filterResourceTree(workspaceTree, resourceFilter),
1226
+ [resourceFilter, workspaceTree],
1227
+ );
1228
+ const displayedPersonalTree =
1229
+ showOnlyRequestedScope && activeScope !== "personal"
1230
+ ? []
1231
+ : visiblePersonalTree;
1232
+ const displayedSharedTree =
1233
+ showOnlyRequestedScope && activeScope !== "shared" ? [] : visibleSharedTree;
1234
+ const showSharedTree = !showOnlyRequestedScope || activeScope === "shared";
1235
+ const showPersonalTree =
1236
+ !showOnlyRequestedScope || activeScope === "personal";
1124
1237
 
1125
1238
  const orgRole = mcpServersQuery.data?.role ?? org?.role ?? null;
1126
1239
  const hasOrgForMcp = !!(mcpServersQuery.data?.orgId ?? org?.orgId);
@@ -1238,9 +1351,9 @@ export function ResourcesPanel({
1238
1351
  );
1239
1352
 
1240
1353
  const handleCreateFromToolbar = useCallback(
1241
- (name: string) => {
1354
+ (targetScope: ResourceScope, name: string) => {
1242
1355
  createResource.mutate(
1243
- { path: name, content: "", shared: activeScope === "shared" },
1356
+ { path: name, content: "", shared: targetScope === "shared" },
1244
1357
  {
1245
1358
  onSuccess: (data) => {
1246
1359
  setSelectedResourceId(data.id);
@@ -1248,11 +1361,12 @@ export function ResourcesPanel({
1248
1361
  },
1249
1362
  );
1250
1363
  },
1251
- [createResource, activeScope],
1364
+ [createResource],
1252
1365
  );
1253
1366
 
1254
1367
  const handleCreateResourceFromToolbar = useCallback(
1255
1368
  (
1369
+ targetScope: ResourceScope,
1256
1370
  path: string,
1257
1371
  content: string,
1258
1372
  mimeType?: string,
@@ -1262,7 +1376,7 @@ export function ResourcesPanel({
1262
1376
  },
1263
1377
  ) => {
1264
1378
  createResource.mutate(
1265
- { path, content, mimeType, shared: activeScope === "shared" },
1379
+ { path, content, mimeType, shared: targetScope === "shared" },
1266
1380
  {
1267
1381
  onSuccess: (data) => {
1268
1382
  setSelectedResourceId(data.id);
@@ -1274,7 +1388,7 @@ export function ResourcesPanel({
1274
1388
  },
1275
1389
  );
1276
1390
  },
1277
- [activeScope, createResource],
1391
+ [createResource],
1278
1392
  );
1279
1393
 
1280
1394
  const handleDelete = useCallback(
@@ -1332,16 +1446,16 @@ export function ResourcesPanel({
1332
1446
  );
1333
1447
 
1334
1448
  const handleUploadFiles = useCallback(
1335
- (files: FileList) => {
1449
+ (files: FileList, targetScope: ResourceScope) => {
1336
1450
  for (let i = 0; i < files.length; i++) {
1337
1451
  const file = files[i];
1338
1452
  const formData = new FormData();
1339
1453
  formData.append("file", file);
1340
- formData.append("shared", activeScope === "shared" ? "true" : "false");
1454
+ formData.append("shared", targetScope === "shared" ? "true" : "false");
1341
1455
  uploadResource.mutate(formData);
1342
1456
  }
1343
1457
  },
1344
- [uploadResource, activeScope],
1458
+ [uploadResource],
1345
1459
  );
1346
1460
 
1347
1461
  const handleDragOver = useCallback((e: React.DragEvent) => {
@@ -1362,12 +1476,39 @@ export function ResourcesPanel({
1362
1476
  e.stopPropagation();
1363
1477
  setDragOver(false);
1364
1478
  if (e.dataTransfer.files.length > 0) {
1365
- handleUploadFiles(e.dataTransfer.files);
1479
+ handleUploadFiles(e.dataTransfer.files, activeScope);
1366
1480
  }
1367
1481
  },
1368
- [handleUploadFiles],
1482
+ [activeScope, handleUploadFiles],
1369
1483
  );
1370
1484
 
1485
+ const renderScopeCreateMenu = (targetScope: ResourceScope) => {
1486
+ if (resourceFilter !== "agents" && resourceFilter !== "skills") {
1487
+ return null;
1488
+ }
1489
+ if (targetScope === "shared" && !canEditOrg) return null;
1490
+ return (
1491
+ <CreateMenu
1492
+ scope={targetScope}
1493
+ resourceFilter={resourceFilter}
1494
+ onCreateFile={(name) => handleCreateFromToolbar(targetScope, name)}
1495
+ onCreateResource={(path, content, mimeType, opts) =>
1496
+ handleCreateResourceFromToolbar(
1497
+ targetScope,
1498
+ path,
1499
+ content,
1500
+ mimeType,
1501
+ opts,
1502
+ )
1503
+ }
1504
+ onCreateMcpServer={handleCreateMcpServer}
1505
+ canCreateOrgMcp={canCreateOrgMcp}
1506
+ hasOrg={hasOrgForMcp}
1507
+ showToast={showToast}
1508
+ />
1509
+ );
1510
+ };
1511
+
1371
1512
  return (
1372
1513
  <div
1373
1514
  className={cn(
@@ -1503,73 +1644,90 @@ export function ResourcesPanel({
1503
1644
  ) : (
1504
1645
  /* Floating action buttons — absolute top-right over tree view */
1505
1646
  <div className="absolute top-1 right-1 z-10 flex items-center gap-1">
1506
- <CreateMenu
1507
- scope={activeScope}
1508
- onCreateFile={handleCreateFromToolbar}
1509
- onCreateResource={handleCreateResourceFromToolbar}
1510
- onCreateMcpServer={handleCreateMcpServer}
1511
- canCreateOrgMcp={canCreateOrgMcp}
1512
- hasOrg={hasOrgForMcp}
1513
- showToast={showToast}
1514
- />
1515
- <TooltipProvider delayDuration={200}>
1516
- <Tooltip>
1517
- <TooltipTrigger asChild>
1518
- <button
1519
- onClick={() => fileInputRef.current?.click()}
1520
- aria-label="Upload file"
1521
- className="flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50"
1522
- >
1523
- <IconUpload className="h-3.5 w-3.5" />
1524
- </button>
1525
- </TooltipTrigger>
1526
- <TooltipContent>Upload file</TooltipContent>
1527
- </Tooltip>
1528
- </TooltipProvider>
1529
- <TooltipProvider delayDuration={200}>
1530
- <Tooltip>
1531
- <TooltipTrigger asChild>
1532
- <button
1533
- type="button"
1534
- onClick={() => setShowAgentScratch((value) => !value)}
1535
- aria-label={
1536
- showAgentScratch
1647
+ {(!resourceFilter || resourceFilter === "files") && (
1648
+ <CreateMenu
1649
+ scope={activeScope}
1650
+ resourceFilter={resourceFilter}
1651
+ onCreateFile={(name) =>
1652
+ handleCreateFromToolbar(activeScope, name)
1653
+ }
1654
+ onCreateResource={(path, content, mimeType, opts) =>
1655
+ handleCreateResourceFromToolbar(
1656
+ activeScope,
1657
+ path,
1658
+ content,
1659
+ mimeType,
1660
+ opts,
1661
+ )
1662
+ }
1663
+ onCreateMcpServer={handleCreateMcpServer}
1664
+ canCreateOrgMcp={canCreateOrgMcp}
1665
+ hasOrg={hasOrgForMcp}
1666
+ showToast={showToast}
1667
+ />
1668
+ )}
1669
+ {(!resourceFilter || resourceFilter === "files") && (
1670
+ <>
1671
+ <TooltipProvider delayDuration={200}>
1672
+ <Tooltip>
1673
+ <TooltipTrigger asChild>
1674
+ <button
1675
+ onClick={() => fileInputRef.current?.click()}
1676
+ aria-label="Upload file"
1677
+ className="flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50"
1678
+ >
1679
+ <IconUpload className="h-3.5 w-3.5" />
1680
+ </button>
1681
+ </TooltipTrigger>
1682
+ <TooltipContent>Upload file</TooltipContent>
1683
+ </Tooltip>
1684
+ </TooltipProvider>
1685
+ <TooltipProvider delayDuration={200}>
1686
+ <Tooltip>
1687
+ <TooltipTrigger asChild>
1688
+ <button
1689
+ type="button"
1690
+ onClick={() => setShowAgentScratch((value) => !value)}
1691
+ aria-label={
1692
+ showAgentScratch
1693
+ ? "Hide agent scratch files"
1694
+ : "Show agent scratch files"
1695
+ }
1696
+ className={cn(
1697
+ "flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50",
1698
+ showAgentScratch && "bg-accent/50 text-foreground",
1699
+ )}
1700
+ >
1701
+ <IconEye className="h-3.5 w-3.5" />
1702
+ </button>
1703
+ </TooltipTrigger>
1704
+ <TooltipContent>
1705
+ {showAgentScratch
1537
1706
  ? "Hide agent scratch files"
1538
- : "Show agent scratch files"
1539
- }
1540
- className={cn(
1541
- "flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50",
1542
- showAgentScratch && "bg-accent/50 text-foreground",
1543
- )}
1544
- >
1545
- <IconEye className="h-3.5 w-3.5" />
1546
- </button>
1547
- </TooltipTrigger>
1548
- <TooltipContent>
1549
- {showAgentScratch
1550
- ? "Hide agent scratch files"
1551
- : "Show agent scratch files"}
1552
- </TooltipContent>
1553
- </Tooltip>
1554
- </TooltipProvider>
1555
- <TooltipProvider delayDuration={200}>
1556
- <Tooltip>
1557
- <TooltipTrigger asChild>
1558
- <a
1559
- href={WORKSPACE_DOCS_URL}
1560
- target="_blank"
1561
- rel="noopener noreferrer"
1562
- aria-label="Open Workspace docs"
1563
- className="flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50"
1564
- >
1565
- <IconHelp className="h-3.5 w-3.5" />
1566
- </a>
1567
- </TooltipTrigger>
1568
- <TooltipContent side="left" sideOffset={8}>
1569
- Open Workspace docs
1570
- </TooltipContent>
1571
- </Tooltip>
1572
- </TooltipProvider>
1707
+ : "Show agent scratch files"}
1708
+ </TooltipContent>
1709
+ </Tooltip>
1710
+ </TooltipProvider>
1711
+ <TooltipProvider delayDuration={200}>
1712
+ <Tooltip>
1713
+ <TooltipTrigger asChild>
1714
+ <a
1715
+ href={WORKSPACE_DOCS_URL}
1716
+ target="_blank"
1717
+ rel="noopener noreferrer"
1718
+ aria-label="Open Workspace docs"
1719
+ className="flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50"
1720
+ >
1721
+ <IconHelp className="h-3.5 w-3.5" />
1722
+ </a>
1723
+ </TooltipTrigger>
1724
+ <TooltipContent side="left" sideOffset={8}>
1725
+ Open Workspace docs
1726
+ </TooltipContent>
1727
+ </Tooltip>
1728
+ </TooltipProvider>
1729
+ </>
1730
+ )}
1573
1731
  <input
1574
1732
  ref={fileInputRef}
1575
1733
  type="file"
@@ -1577,7 +1735,7 @@ export function ResourcesPanel({
1577
1735
  className="hidden"
1578
1736
  onChange={(e) => {
1579
1737
  if (e.target.files && e.target.files.length > 0) {
1580
- handleUploadFiles(e.target.files);
1738
+ handleUploadFiles(e.target.files, activeScope);
1581
1739
  e.target.value = "";
1582
1740
  }
1583
1741
  }}
@@ -1625,9 +1783,9 @@ export function ResourcesPanel({
1625
1783
  {!personalTreeQuery.isLoading &&
1626
1784
  !sharedTreeQuery.isLoading &&
1627
1785
  !workspaceTreeQuery.isLoading &&
1628
- workspaceTree.length === 0 &&
1629
- (personalTreeQuery.data ?? []).length === 0 &&
1630
- (sharedTreeQuery.data ?? []).length === 0 && (
1786
+ visibleWorkspaceTree.length === 0 &&
1787
+ displayedPersonalTree.length === 0 &&
1788
+ displayedSharedTree.length === 0 && (
1631
1789
  <div className="mx-2 mt-2 rounded-md border border-border bg-muted/30 p-2.5 text-[11px] text-muted-foreground">
1632
1790
  <p className="mb-1 font-medium text-foreground">
1633
1791
  This is your Workspace
@@ -1658,9 +1816,10 @@ export function ResourcesPanel({
1658
1816
  </a>
1659
1817
  </div>
1660
1818
  )}
1661
- {workspaceTree.length > 0 && (
1819
+ {visibleWorkspaceTree.length > 0 && (
1662
1820
  <ResourceTree
1663
- tree={workspaceTree}
1821
+ tree={visibleWorkspaceTree}
1822
+ variant={resourceTreeVariant}
1664
1823
  isLoading={workspaceTreeQuery.isLoading}
1665
1824
  deletingId={
1666
1825
  deleteResource.isPending
@@ -1682,60 +1841,68 @@ export function ResourcesPanel({
1682
1841
  headingHint="Inherited"
1683
1842
  />
1684
1843
  )}
1685
- <ResourceTree
1686
- tree={sharedTree}
1687
- isLoading={sharedTreeQuery.isLoading}
1688
- deletingId={
1689
- deleteResource.isPending
1690
- ? (deleteResource.variables as string)
1691
- : deleteMcpServer.isPending
1692
- ? `mcp:${(deleteMcpServer.variables as { scope: string }).scope}:${(deleteMcpServer.variables as { id: string }).id}`
1693
- : null
1694
- }
1695
- selectedId={selectedResourceId}
1696
- onSelect={handleSelect}
1697
- onCreateFile={(parentPath, name) =>
1698
- handleCreateFile(parentPath, name, "shared")
1699
- }
1700
- onCreateFolder={(parentPath, name) =>
1701
- handleCreateFolder(parentPath, name, "shared")
1702
- }
1703
- onDelete={handleDelete}
1704
- onRename={handleRename}
1705
- onDrop={handleUploadFiles}
1706
- title="Organization"
1707
- titleTooltip={
1708
- canEditOrg
1709
- ? "Files visible to everyone in your organization"
1710
- : "Files visible to everyone in your organization. Read-only — only admins can edit."
1711
- }
1712
- readOnly={!canEditOrg}
1713
- headingHint={!canEditOrg ? "Read only" : undefined}
1714
- />
1715
- <ResourceTree
1716
- tree={personalTree}
1717
- isLoading={personalTreeQuery.isLoading}
1718
- deletingId={
1719
- deleteResource.isPending
1720
- ? (deleteResource.variables as string)
1721
- : deleteMcpServer.isPending
1722
- ? `mcp:${(deleteMcpServer.variables as { scope: string }).scope}:${(deleteMcpServer.variables as { id: string }).id}`
1723
- : null
1724
- }
1725
- selectedId={selectedResourceId}
1726
- onSelect={handleSelect}
1727
- onCreateFile={(parentPath, name) =>
1728
- handleCreateFile(parentPath, name, "personal")
1729
- }
1730
- onCreateFolder={(parentPath, name) =>
1731
- handleCreateFolder(parentPath, name, "personal")
1732
- }
1733
- onDelete={handleDelete}
1734
- onRename={handleRename}
1735
- onDrop={handleUploadFiles}
1736
- title="Personal"
1737
- titleTooltip="Files visible only to you"
1738
- />
1844
+ {showPersonalTree && (
1845
+ <ResourceTree
1846
+ tree={displayedPersonalTree}
1847
+ variant={resourceTreeVariant}
1848
+ isLoading={personalTreeQuery.isLoading}
1849
+ deletingId={
1850
+ deleteResource.isPending
1851
+ ? (deleteResource.variables as string)
1852
+ : deleteMcpServer.isPending
1853
+ ? `mcp:${(deleteMcpServer.variables as { scope: string }).scope}:${(deleteMcpServer.variables as { id: string }).id}`
1854
+ : null
1855
+ }
1856
+ selectedId={selectedResourceId}
1857
+ onSelect={handleSelect}
1858
+ onCreateFile={(parentPath, name) =>
1859
+ handleCreateFile(parentPath, name, "personal")
1860
+ }
1861
+ onCreateFolder={(parentPath, name) =>
1862
+ handleCreateFolder(parentPath, name, "personal")
1863
+ }
1864
+ onDelete={handleDelete}
1865
+ onRename={handleRename}
1866
+ onDrop={(files) => handleUploadFiles(files, "personal")}
1867
+ title="Personal"
1868
+ titleTooltip="Files visible only to you"
1869
+ sectionAction={renderScopeCreateMenu("personal")}
1870
+ />
1871
+ )}
1872
+ {showSharedTree && (
1873
+ <ResourceTree
1874
+ tree={displayedSharedTree}
1875
+ variant={resourceTreeVariant}
1876
+ isLoading={sharedTreeQuery.isLoading}
1877
+ deletingId={
1878
+ deleteResource.isPending
1879
+ ? (deleteResource.variables as string)
1880
+ : deleteMcpServer.isPending
1881
+ ? `mcp:${(deleteMcpServer.variables as { scope: string }).scope}:${(deleteMcpServer.variables as { id: string }).id}`
1882
+ : null
1883
+ }
1884
+ selectedId={selectedResourceId}
1885
+ onSelect={handleSelect}
1886
+ onCreateFile={(parentPath, name) =>
1887
+ handleCreateFile(parentPath, name, "shared")
1888
+ }
1889
+ onCreateFolder={(parentPath, name) =>
1890
+ handleCreateFolder(parentPath, name, "shared")
1891
+ }
1892
+ onDelete={handleDelete}
1893
+ onRename={handleRename}
1894
+ onDrop={(files) => handleUploadFiles(files, "shared")}
1895
+ title="Organization"
1896
+ titleTooltip={
1897
+ canEditOrg
1898
+ ? "Files visible to everyone in your organization"
1899
+ : "Files visible to everyone in your organization. Read-only — only admins can edit."
1900
+ }
1901
+ readOnly={!canEditOrg}
1902
+ headingHint={!canEditOrg ? "Read only" : undefined}
1903
+ sectionAction={renderScopeCreateMenu("shared")}
1904
+ />
1905
+ )}
1739
1906
  </div>
1740
1907
  )}
1741
1908
  </div>