@agent-native/core 0.79.27 → 0.80.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 (346) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +26 -0
  3. package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +41 -0
  4. package/corpus/core/docs/content/locales/de-DE/template-design.mdx +51 -0
  5. package/corpus/core/docs/content/locales/es-ES/template-design.mdx +50 -0
  6. package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +49 -0
  7. package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +44 -0
  8. package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +46 -0
  9. package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +44 -0
  10. package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +48 -0
  11. package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +36 -0
  12. package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +38 -0
  13. package/corpus/core/docs/content/template-design.mdx +45 -0
  14. package/corpus/core/package.json +2 -1
  15. package/corpus/core/src/agent/engine/index.ts +1 -0
  16. package/corpus/core/src/agent/engine/registry.ts +40 -0
  17. package/corpus/core/src/agent/production-agent.ts +6 -2
  18. package/corpus/core/src/cli/design-connect.ts +490 -0
  19. package/corpus/core/src/cli/index.ts +16 -0
  20. package/corpus/core/src/cli/skills.ts +126 -3
  21. package/corpus/core/src/client/AssistantChat.tsx +43 -7
  22. package/corpus/core/src/client/agent-chat.ts +27 -3
  23. package/corpus/core/src/client/blocks/library/MermaidBlock.tsx +1 -1
  24. package/corpus/core/src/client/blocks/library/diagram.tsx +2 -2
  25. package/corpus/core/src/client/blocks/library/wireframe.tsx +1 -1
  26. package/corpus/core/src/client/chat/message-components.tsx +1 -1
  27. package/corpus/core/src/client/chat-model-groups.ts +1 -2
  28. package/corpus/core/src/client/components/LiveCursorOverlay.tsx +33 -66
  29. package/corpus/core/src/client/composer/TiptapComposer.tsx +99 -24
  30. package/corpus/core/src/client/composer/useVoiceDictation.ts +429 -260
  31. package/corpus/core/src/client/frame-protocol.ts +17 -2
  32. package/corpus/core/src/client/rich-markdown-editor/RegistryBlockNode.tsx +2 -2
  33. package/corpus/core/src/client/sharing/ShareButton.tsx +20 -15
  34. package/corpus/core/src/client/use-agent-engine-configured.ts +80 -28
  35. package/corpus/core/src/server/transcribe-voice.ts +57 -22
  36. package/corpus/core/src/shared/mcp-embed-headers.ts +23 -1
  37. package/corpus/core/src/styles/agent-native.css +56 -7
  38. package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
  39. package/corpus/core/src/vite/client.ts +2 -0
  40. package/corpus/core/src/voice/index.ts +18 -0
  41. package/corpus/core/src/voice/voice-cleanup-prompt.ts +38 -0
  42. package/corpus/core/src/voice/voice-context.ts +217 -0
  43. package/corpus/core/src/voice/voice-replacements.ts +75 -0
  44. package/corpus/templates/analytics/AGENTS.md +4 -3
  45. package/corpus/templates/analytics/actions/list-session-recordings.ts +6 -1
  46. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +557 -400
  47. package/corpus/templates/analytics/app/global.css +0 -4
  48. package/corpus/templates/analytics/app/i18n/zh-TW.ts +2 -0
  49. package/corpus/templates/analytics/app/i18n-data.ts +20 -0
  50. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +33 -8
  51. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +7 -0
  52. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +7 -0
  53. package/corpus/templates/analytics/changelog/2026-06-28-ask-tab-now-matches-the-darker-app-background.md +6 -0
  54. package/corpus/templates/analytics/changelog/2026-06-28-dashboard-email-reports-now-use-cleaner-light-mode-snapshots.md +6 -0
  55. package/corpus/templates/analytics/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  56. package/corpus/templates/analytics/changelog/2026-06-28-sessions-now-show-only-signed-in-recordings-with-playable-re.md +6 -0
  57. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +3 -3
  58. package/corpus/templates/analytics/server/lib/dashboard-report.ts +29 -7
  59. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +5 -2
  60. package/corpus/templates/analytics/server/lib/session-replay.ts +24 -4
  61. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +4 -4
  62. package/corpus/templates/assets/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  63. package/corpus/templates/brain/app/components/layout/Layout.tsx +29 -2
  64. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +131 -42
  65. package/corpus/templates/brain/app/i18n/zh-TW.ts +2 -0
  66. package/corpus/templates/brain/app/i18n-data.ts +20 -0
  67. package/corpus/templates/brain/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  68. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +29 -1
  69. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +417 -299
  70. package/corpus/templates/calendar/app/i18n/zh-TW.ts +2 -0
  71. package/corpus/templates/calendar/app/i18n-data.ts +20 -0
  72. package/corpus/templates/calendar/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  73. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +6 -19
  74. package/corpus/templates/chat/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  75. package/corpus/templates/clips/AGENTS.md +4 -0
  76. package/corpus/templates/clips/actions/cleanup-transcript.ts +39 -9
  77. package/corpus/templates/clips/actions/finalize-meeting.ts +81 -12
  78. package/corpus/templates/clips/actions/lib/agents-md-context.ts +4 -1
  79. package/corpus/templates/clips/app/components/library/library-layout.tsx +3 -3
  80. package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +1 -1
  81. package/corpus/templates/clips/app/components/player/share-dialog.tsx +2 -2
  82. package/corpus/templates/clips/changelog/2026-06-28-left-sidebar-footer-controls-use-less-divider-chrome.md +6 -0
  83. package/corpus/templates/clips/desktop/src/lib/personal-vocabulary.ts +13 -8
  84. package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +60 -1
  85. package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +1 -1
  86. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +1 -1
  87. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +5 -5
  88. package/corpus/templates/content/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  89. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +137 -0
  90. package/corpus/templates/design/AGENTS.md +95 -5
  91. package/corpus/templates/design/DESIGN.md +82 -0
  92. package/corpus/templates/design/DEVELOPING.md +43 -0
  93. package/corpus/templates/design/actions/add-localhost-screens.ts +426 -0
  94. package/corpus/templates/design/actions/apply-shader.ts +277 -0
  95. package/corpus/templates/design/actions/apply-visual-edit.ts +303 -0
  96. package/corpus/templates/design/actions/connect-localhost.ts +183 -0
  97. package/corpus/templates/design/actions/edit-design.ts +195 -42
  98. package/corpus/templates/design/actions/generate-design.ts +71 -1
  99. package/corpus/templates/design/actions/generate-screens.ts +193 -0
  100. package/corpus/templates/design/actions/get-code-layer-projection.ts +191 -0
  101. package/corpus/templates/design/actions/get-shader.ts +119 -0
  102. package/corpus/templates/design/actions/list-localhost-connections.ts +95 -0
  103. package/corpus/templates/design/actions/navigate.ts +55 -2
  104. package/corpus/templates/design/actions/view-screen.ts +68 -1
  105. package/corpus/templates/design/agent-native.app-skill.json +10 -0
  106. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +761 -0
  107. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +2057 -103
  108. package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +74 -38
  109. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +399 -0
  110. package/corpus/templates/design/app/components/design/EditPanel.tsx +3185 -439
  111. package/corpus/templates/design/app/components/design/LayersPanel.tsx +1124 -0
  112. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +3116 -147
  113. package/corpus/templates/design/app/components/design/QuestionFlow.tsx +700 -13
  114. package/corpus/templates/design/app/components/design/TweaksPanel.tsx +107 -63
  115. package/corpus/templates/design/app/components/design/index.ts +0 -5
  116. package/corpus/templates/design/app/components/design/inspector/AlignmentMatrix.tsx +286 -0
  117. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +699 -0
  118. package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +461 -0
  119. package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +166 -0
  120. package/corpus/templates/design/app/components/design/inspector/FigmaColorPicker.tsx +1420 -0
  121. package/corpus/templates/design/app/components/design/inspector/SHADER_INTEGRATION.md +420 -0
  122. package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +215 -0
  123. package/corpus/templates/design/app/components/design/inspector/ShaderControls.stories.tsx +71 -0
  124. package/corpus/templates/design/app/components/design/inspector/ShaderControls.tsx +518 -0
  125. package/corpus/templates/design/app/components/design/inspector/ShaderEffectRow.tsx +106 -0
  126. package/corpus/templates/design/app/components/design/inspector/figma-icons.tsx +361 -0
  127. package/corpus/templates/design/app/components/design/inspector/index.ts +60 -0
  128. package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +201 -0
  129. package/corpus/templates/design/app/components/design/types.ts +23 -0
  130. package/corpus/templates/design/app/components/layout/Layout.tsx +24 -13
  131. package/corpus/templates/design/app/components/layout/Sidebar.tsx +4 -4
  132. package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +474 -36
  133. package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +22 -5
  134. package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +24 -11
  135. package/corpus/templates/design/app/global.css +121 -3
  136. package/corpus/templates/design/app/hooks/use-agent-generating.ts +4 -0
  137. package/corpus/templates/design/app/hooks/use-navigation-state.ts +130 -8
  138. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +329 -0
  139. package/corpus/templates/design/app/i18n/zh-TW.ts +264 -0
  140. package/corpus/templates/design/app/i18n-data.ts +2790 -1
  141. package/corpus/templates/design/app/pages/DesignEditor.tsx +5108 -851
  142. package/corpus/templates/design/changelog/2026-06-28-annotate-mode-now-combines-drawing-and-comment-pins-in-one-c.md +6 -0
  143. package/corpus/templates/design/changelog/2026-06-28-design-editor-panel-borders-are-cleaner-so-the-canvas-edge-s.md +6 -0
  144. package/corpus/templates/design/changelog/2026-06-28-drawing-prompts-now-reliably-open-and-submit-to-the-design-a.md +6 -0
  145. package/corpus/templates/design/changelog/2026-06-28-editor-app-menus-now-use-an-outline-agent-native-mark-with-b.md +6 -0
  146. package/corpus/templates/design/changelog/2026-06-28-figma-style-code-design-mode.md +6 -0
  147. package/corpus/templates/design/changelog/2026-06-28-layer-selection-now-updates-chat-context-without-opening-the.md +6 -0
  148. package/corpus/templates/design/changelog/2026-06-28-layer-selections-now-preserve-hidden-and-locked-canvas-state.md +6 -0
  149. package/corpus/templates/design/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  150. package/corpus/templates/design/changelog/2026-06-28-live-cursors-now-keep-names-beside-a-cleaner-pointer-marker.md +6 -0
  151. package/corpus/templates/design/changelog/2026-06-28-mode-switching-now-lives-in-a-compact-bottom-right-icon-dock.md +6 -0
  152. package/corpus/templates/design/changelog/2026-06-28-screen-overview-now-handles-zooming-drawing-opening-and-dele.md +6 -0
  153. package/corpus/templates/design/changelog/2026-06-28-screen-overview-now-selects-screens-on-click-and-opens-them-.md +6 -0
  154. package/corpus/templates/design/changelog/2026-06-28-screen-overview-zooms-into-the-active-screen-with-smoother-e.md +6 -0
  155. package/corpus/templates/design/changelog/2026-06-28-selected-element-chips-in-chat-are-shorter-and-easier-to-sca.md +6 -0
  156. package/corpus/templates/design/changelog/2026-06-28-the-design-editor-toolbar-is-more-compact-and-the-app-menu-m.md +6 -0
  157. package/corpus/templates/design/changelog/2026-06-28-tweaks-now-live-at-the-top-of-the-design-sidebar-instead-of-.md +6 -0
  158. package/corpus/templates/design/changelog/2026-06-28-tweaks-now-live-in-the-right-inspector-beside-the-design-tab.md +6 -0
  159. package/corpus/templates/design/changelog/2026-06-29-active-sidebar-rows-use-soft-highlights.md +6 -0
  160. package/corpus/templates/design/changelog/2026-06-29-agents-can-now-open-screen-overview-focus-screens-and-add.md +6 -0
  161. package/corpus/templates/design/changelog/2026-06-29-design-agents-now-edit-broad-copy-changes-more-reliably.md +6 -0
  162. package/corpus/templates/design/changelog/2026-06-29-design-editor-extensions-now-run-inline-beside-the-artboard.md +6 -0
  163. package/corpus/templates/design/changelog/2026-06-29-sidebars-use-darker-chrome-and-chat-warns-immediately.md +6 -0
  164. package/corpus/templates/design/changelog/2026-06-29-visual-edit-can-open-localhost-routes-as-url-backed-screens.md +6 -0
  165. package/corpus/templates/design/package.json +1 -0
  166. package/corpus/templates/design/server/db/schema.ts +26 -0
  167. package/corpus/templates/design/server/lib/design-snapshot.ts +1 -1
  168. package/corpus/templates/design/server/plugins/agent-chat.ts +3 -0
  169. package/corpus/templates/design/shared/api.ts +27 -0
  170. package/corpus/templates/design/shared/canvas-frames.ts +103 -0
  171. package/corpus/templates/design/shared/canvas-math.ts +1058 -0
  172. package/corpus/templates/design/shared/code-layer.ts +2212 -0
  173. package/corpus/templates/design/shared/color-utils.ts +180 -0
  174. package/corpus/templates/design/shared/generation-session.ts +61 -0
  175. package/corpus/templates/design/shared/shader-presets.ts +782 -0
  176. package/corpus/templates/design/shared/shader-safety.ts +137 -0
  177. package/corpus/templates/design/shared/source-mode.ts +237 -0
  178. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +149 -6
  179. package/corpus/templates/forms/app/i18n/ar-SA.ts +2 -0
  180. package/corpus/templates/forms/app/i18n/de-DE.ts +2 -0
  181. package/corpus/templates/forms/app/i18n/en-US.ts +2 -0
  182. package/corpus/templates/forms/app/i18n/es-ES.ts +2 -0
  183. package/corpus/templates/forms/app/i18n/fr-FR.ts +2 -0
  184. package/corpus/templates/forms/app/i18n/hi-IN.ts +2 -0
  185. package/corpus/templates/forms/app/i18n/ja-JP.ts +2 -0
  186. package/corpus/templates/forms/app/i18n/ko-KR.ts +2 -0
  187. package/corpus/templates/forms/app/i18n/pt-BR.ts +2 -0
  188. package/corpus/templates/forms/app/i18n/zh-CN.ts +2 -0
  189. package/corpus/templates/forms/app/i18n/zh-TW.ts +2 -0
  190. package/corpus/templates/forms/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  191. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +2 -2
  192. package/corpus/templates/macros/changelog/2026-06-28-left-sidebar-footer-controls-use-less-divider-chrome.md +6 -0
  193. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +408 -247
  194. package/corpus/templates/mail/app/i18n/ar-SA.ts +4 -0
  195. package/corpus/templates/mail/app/i18n/de-DE.ts +4 -0
  196. package/corpus/templates/mail/app/i18n/en-US.ts +4 -0
  197. package/corpus/templates/mail/app/i18n/es-ES.ts +4 -0
  198. package/corpus/templates/mail/app/i18n/fr-FR.ts +4 -0
  199. package/corpus/templates/mail/app/i18n/hi-IN.ts +4 -0
  200. package/corpus/templates/mail/app/i18n/ja-JP.ts +4 -0
  201. package/corpus/templates/mail/app/i18n/ko-KR.ts +4 -0
  202. package/corpus/templates/mail/app/i18n/pt-BR.ts +4 -0
  203. package/corpus/templates/mail/app/i18n/zh-CN.ts +4 -0
  204. package/corpus/templates/mail/app/i18n/zh-TW.ts +4 -0
  205. package/corpus/templates/mail/changelog/2026-06-28-pinned-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  206. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +6 -8
  207. package/corpus/templates/plan/app/components/plan/wireframe/Wireframe.tsx +1 -1
  208. package/corpus/templates/plan/app/global.css +61 -78
  209. package/corpus/templates/plan/app/pages/PlansPage.tsx +8 -0
  210. package/corpus/templates/plan/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  211. package/corpus/templates/plan/changelog/2026-06-28-plans-use-the-shared-neutral-light-and-dark-theme.md +6 -0
  212. package/corpus/templates/plan/changelog/2026-06-28-sending-open-feedback-from-a-plan-now-opens-the-inline-plan-.md +6 -0
  213. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +5 -5
  214. package/corpus/templates/slides/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  215. package/corpus/templates/videos/app/components/Sidebar.tsx +2 -2
  216. package/corpus/templates/videos/app/components/layout/Layout.tsx +29 -2
  217. package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +113 -30
  218. package/corpus/templates/videos/app/i18n/ar-SA.ts +2 -0
  219. package/corpus/templates/videos/app/i18n/de-DE.ts +2 -0
  220. package/corpus/templates/videos/app/i18n/en-US.ts +2 -0
  221. package/corpus/templates/videos/app/i18n/es-ES.ts +2 -0
  222. package/corpus/templates/videos/app/i18n/fr-FR.ts +2 -0
  223. package/corpus/templates/videos/app/i18n/hi-IN.ts +2 -0
  224. package/corpus/templates/videos/app/i18n/ja-JP.ts +2 -0
  225. package/corpus/templates/videos/app/i18n/ko-KR.ts +2 -0
  226. package/corpus/templates/videos/app/i18n/pt-BR.ts +2 -0
  227. package/corpus/templates/videos/app/i18n/zh-CN.ts +2 -0
  228. package/corpus/templates/videos/app/i18n/zh-TW.ts +2 -0
  229. package/corpus/templates/videos/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  230. package/dist/agent/engine/index.d.ts +1 -1
  231. package/dist/agent/engine/index.d.ts.map +1 -1
  232. package/dist/agent/engine/index.js +1 -1
  233. package/dist/agent/engine/index.js.map +1 -1
  234. package/dist/agent/engine/registry.d.ts +9 -0
  235. package/dist/agent/engine/registry.d.ts.map +1 -1
  236. package/dist/agent/engine/registry.js +37 -0
  237. package/dist/agent/engine/registry.js.map +1 -1
  238. package/dist/agent/production-agent.d.ts.map +1 -1
  239. package/dist/agent/production-agent.js +4 -3
  240. package/dist/agent/production-agent.js.map +1 -1
  241. package/dist/cli/design-connect.d.ts +52 -0
  242. package/dist/cli/design-connect.d.ts.map +1 -0
  243. package/dist/cli/design-connect.js +409 -0
  244. package/dist/cli/design-connect.js.map +1 -0
  245. package/dist/cli/index.js +15 -0
  246. package/dist/cli/index.js.map +1 -1
  247. package/dist/cli/skills.d.ts +3 -0
  248. package/dist/cli/skills.d.ts.map +1 -1
  249. package/dist/cli/skills.js +121 -3
  250. package/dist/cli/skills.js.map +1 -1
  251. package/dist/client/AssistantChat.d.ts.map +1 -1
  252. package/dist/client/AssistantChat.js +38 -8
  253. package/dist/client/AssistantChat.js.map +1 -1
  254. package/dist/client/agent-chat.d.ts +6 -0
  255. package/dist/client/agent-chat.d.ts.map +1 -1
  256. package/dist/client/agent-chat.js +17 -3
  257. package/dist/client/agent-chat.js.map +1 -1
  258. package/dist/client/blocks/library/MermaidBlock.js +1 -1
  259. package/dist/client/blocks/library/MermaidBlock.js.map +1 -1
  260. package/dist/client/blocks/library/diagram.js +1 -1
  261. package/dist/client/blocks/library/diagram.js.map +1 -1
  262. package/dist/client/blocks/library/wireframe.js +1 -1
  263. package/dist/client/blocks/library/wireframe.js.map +1 -1
  264. package/dist/client/chat/message-components.js +1 -1
  265. package/dist/client/chat/message-components.js.map +1 -1
  266. package/dist/client/chat-model-groups.d.ts.map +1 -1
  267. package/dist/client/chat-model-groups.js +1 -2
  268. package/dist/client/chat-model-groups.js.map +1 -1
  269. package/dist/client/components/LiveCursorOverlay.d.ts +1 -2
  270. package/dist/client/components/LiveCursorOverlay.d.ts.map +1 -1
  271. package/dist/client/components/LiveCursorOverlay.js +19 -40
  272. package/dist/client/components/LiveCursorOverlay.js.map +1 -1
  273. package/dist/client/composer/TiptapComposer.d.ts +3 -1
  274. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  275. package/dist/client/composer/TiptapComposer.js +86 -24
  276. package/dist/client/composer/TiptapComposer.js.map +1 -1
  277. package/dist/client/composer/useVoiceDictation.d.ts +9 -0
  278. package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
  279. package/dist/client/composer/useVoiceDictation.js +154 -32
  280. package/dist/client/composer/useVoiceDictation.js.map +1 -1
  281. package/dist/client/frame-protocol.d.ts +17 -2
  282. package/dist/client/frame-protocol.d.ts.map +1 -1
  283. package/dist/client/frame-protocol.js.map +1 -1
  284. package/dist/client/rich-markdown-editor/RegistryBlockNode.js +2 -2
  285. package/dist/client/rich-markdown-editor/RegistryBlockNode.js.map +1 -1
  286. package/dist/client/sharing/ShareButton.d.ts +2 -0
  287. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  288. package/dist/client/sharing/ShareButton.js +7 -6
  289. package/dist/client/sharing/ShareButton.js.map +1 -1
  290. package/dist/client/use-agent-engine-configured.d.ts +5 -0
  291. package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
  292. package/dist/client/use-agent-engine-configured.js +51 -25
  293. package/dist/client/use-agent-engine-configured.js.map +1 -1
  294. package/dist/collab/awareness.d.ts +2 -2
  295. package/dist/collab/awareness.d.ts.map +1 -1
  296. package/dist/collab/routes.d.ts +1 -1
  297. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  298. package/dist/notifications/routes.d.ts +3 -3
  299. package/dist/observability/routes.d.ts +8 -8
  300. package/dist/progress/routes.d.ts +1 -1
  301. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  302. package/dist/server/transcribe-voice.d.ts.map +1 -1
  303. package/dist/server/transcribe-voice.js +40 -24
  304. package/dist/server/transcribe-voice.js.map +1 -1
  305. package/dist/shared/mcp-embed-headers.d.ts +1 -0
  306. package/dist/shared/mcp-embed-headers.d.ts.map +1 -1
  307. package/dist/shared/mcp-embed-headers.js +20 -1
  308. package/dist/shared/mcp-embed-headers.js.map +1 -1
  309. package/dist/styles/agent-native.css +56 -7
  310. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
  311. package/dist/vite/client.d.ts.map +1 -1
  312. package/dist/vite/client.js +2 -0
  313. package/dist/vite/client.js.map +1 -1
  314. package/dist/voice/index.d.ts +5 -0
  315. package/dist/voice/index.d.ts.map +1 -0
  316. package/dist/voice/index.js +4 -0
  317. package/dist/voice/index.js.map +1 -0
  318. package/dist/voice/voice-cleanup-prompt.d.ts +6 -0
  319. package/dist/voice/voice-cleanup-prompt.d.ts.map +1 -0
  320. package/dist/voice/voice-cleanup-prompt.js +26 -0
  321. package/dist/voice/voice-cleanup-prompt.js.map +1 -0
  322. package/dist/voice/voice-context.d.ts +25 -0
  323. package/dist/voice/voice-context.d.ts.map +1 -0
  324. package/dist/voice/voice-context.js +156 -0
  325. package/dist/voice/voice-context.js.map +1 -0
  326. package/dist/voice/voice-replacements.d.ts +4 -0
  327. package/dist/voice/voice-replacements.d.ts.map +1 -0
  328. package/dist/voice/voice-replacements.js +52 -0
  329. package/dist/voice/voice-replacements.js.map +1 -0
  330. package/docs/content/locales/ar-SA/template-design.mdx +41 -0
  331. package/docs/content/locales/de-DE/template-design.mdx +51 -0
  332. package/docs/content/locales/es-ES/template-design.mdx +50 -0
  333. package/docs/content/locales/fr-FR/template-design.mdx +49 -0
  334. package/docs/content/locales/hi-IN/template-design.mdx +44 -0
  335. package/docs/content/locales/ja-JP/template-design.mdx +46 -0
  336. package/docs/content/locales/ko-KR/template-design.mdx +44 -0
  337. package/docs/content/locales/pt-BR/template-design.mdx +48 -0
  338. package/docs/content/locales/zh-CN/template-design.mdx +36 -0
  339. package/docs/content/locales/zh-TW/template-design.mdx +38 -0
  340. package/docs/content/template-design.mdx +45 -0
  341. package/package.json +2 -1
  342. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
  343. package/corpus/templates/design/app/components/design/DesignToolbar.tsx +0 -339
  344. package/corpus/templates/design/app/components/design/PresentMode.tsx +0 -68
  345. package/corpus/templates/design/app/components/design/ViewportTabs.tsx +0 -149
  346. package/corpus/templates/design/app/components/design/ZoomControls.tsx +0 -157
@@ -1,4 +1,8 @@
1
1
  const messages = {
2
+ sidebar: {
3
+ collapseSidebar: "طي الشريط الجانبي",
4
+ expandSidebar: "توسيع الشريط الجانبي",
5
+ },
2
6
  mail: {
3
7
  appName: "البريد",
4
8
  pages: {
@@ -1,4 +1,8 @@
1
1
  const messages = {
2
+ sidebar: {
3
+ collapseSidebar: "Seitenleiste einklappen",
4
+ expandSidebar: "Seitenleiste erweitern",
5
+ },
2
6
  mail: {
3
7
  appName: "Mail",
4
8
  pages: {
@@ -1,4 +1,8 @@
1
1
  const messages = {
2
+ sidebar: {
3
+ collapseSidebar: "Collapse sidebar",
4
+ expandSidebar: "Expand sidebar",
5
+ },
2
6
  mail: {
3
7
  appName: "Mail",
4
8
  pages: {
@@ -1,4 +1,8 @@
1
1
  const messages = {
2
+ sidebar: {
3
+ collapseSidebar: "Contraer barra lateral",
4
+ expandSidebar: "Expandir barra lateral",
5
+ },
2
6
  mail: {
3
7
  appName: "Correo",
4
8
  pages: {
@@ -1,4 +1,8 @@
1
1
  const messages = {
2
+ sidebar: {
3
+ collapseSidebar: "Réduire la barre latérale",
4
+ expandSidebar: "Développer la barre latérale",
5
+ },
2
6
  mail: {
3
7
  appName: "Mail",
4
8
  pages: {
@@ -1,4 +1,8 @@
1
1
  const messages = {
2
+ sidebar: {
3
+ collapseSidebar: "साइडबार समेटें",
4
+ expandSidebar: "साइडबार फैलाएं",
5
+ },
2
6
  mail: {
3
7
  appName: "मेल",
4
8
  pages: {
@@ -1,4 +1,8 @@
1
1
  const messages = {
2
+ sidebar: {
3
+ collapseSidebar: "サイドバーを折りたたむ",
4
+ expandSidebar: "サイドバーを展開",
5
+ },
2
6
  mail: {
3
7
  appName: "メール",
4
8
  pages: {
@@ -1,4 +1,8 @@
1
1
  const messages = {
2
+ sidebar: {
3
+ collapseSidebar: "사이드바 접기",
4
+ expandSidebar: "사이드바 펼치기",
5
+ },
2
6
  mail: {
3
7
  appName: "메일",
4
8
  pages: {
@@ -1,4 +1,8 @@
1
1
  const messages = {
2
+ sidebar: {
3
+ collapseSidebar: "Recolher barra lateral",
4
+ expandSidebar: "Expandir barra lateral",
5
+ },
2
6
  mail: {
3
7
  appName: "E-mail",
4
8
  pages: {
@@ -1,4 +1,8 @@
1
1
  const messages = {
2
+ sidebar: {
3
+ collapseSidebar: "折叠侧边栏",
4
+ expandSidebar: "展开侧边栏",
5
+ },
2
6
  mail: {
3
7
  appName: "邮件",
4
8
  pages: {
@@ -1,4 +1,8 @@
1
1
  const messages = {
2
+ sidebar: {
3
+ collapseSidebar: "收合側邊欄",
4
+ expandSidebar: "展開側邊欄",
5
+ },
2
6
  mail: {
3
7
  appName: "郵件",
4
8
  pages: {
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-06-28
4
+ ---
5
+
6
+ The pinned sidebar now collapses into an animated icon rail with quieter footer controls.
@@ -666,7 +666,7 @@ export function Sidebar({
666
666
  <aside
667
667
  data-collapsed={collapsed ? "true" : "false"}
668
668
  className={cn(
669
- "flex h-full min-w-0 shrink-0 flex-col overflow-hidden border-e border-border bg-sidebar text-sidebar-foreground transition-[width] duration-150",
669
+ "flex h-full min-w-0 shrink-0 flex-col overflow-hidden border-e border-border bg-sidebar text-sidebar-foreground transition-[width] duration-200 ease-out",
670
670
  collapsed ? "w-14" : "w-60",
671
671
  )}
672
672
  >
@@ -752,11 +752,11 @@ export function Sidebar({
752
752
 
753
753
  {!collapsed && session && (
754
754
  <>
755
- <div className="border-t border-border px-2 py-2">
755
+ <div className="px-2 py-2">
756
756
  <ExtensionsSidebarSection />
757
757
  </div>
758
758
 
759
- <div className="space-y-2 border-t border-border px-3 py-2">
759
+ <div className="space-y-2 px-3 py-2">
760
760
  <DevDatabaseLink />
761
761
  <FeedbackButton />
762
762
  <OrgSwitcher />
@@ -765,7 +765,7 @@ export function Sidebar({
765
765
  )}
766
766
 
767
767
  {!collapsed && !sessionLoading && !session && (
768
- <div className="space-y-2 border-t border-border px-3 py-2">
768
+ <div className="space-y-2 px-3 py-2">
769
769
  <DevDatabaseLink />
770
770
  <FeedbackButton />
771
771
  <div className="flex items-center justify-between gap-2">
@@ -786,7 +786,7 @@ export function Sidebar({
786
786
  {collapsed && collapsible ? (
787
787
  <div
788
788
  className={cn(
789
- "border-t border-border px-2 py-2",
789
+ "px-2 py-2",
790
790
  collapsed ? "flex justify-center" : "flex justify-end",
791
791
  )}
792
792
  >
@@ -795,9 +795,7 @@ export function Sidebar({
795
795
  ) : null}
796
796
 
797
797
  {!collapsed && (session || sessionLoading) && collapsible ? (
798
- <div className="flex justify-end border-t border-border px-2 py-2">
799
- {collapseButton}
800
- </div>
798
+ <div className="flex justify-end px-2 py-2">{collapseButton}</div>
801
799
  ) : null}
802
800
  </aside>
803
801
  );
@@ -316,7 +316,7 @@ function WireframeStyleToggleButton() {
316
316
  event.stopPropagation();
317
317
  toggleWireframeStyle();
318
318
  }}
319
- className="absolute right-2 top-2 z-30 inline-flex h-7 items-center gap-1 rounded-md border border-border/60 bg-background/90 px-2 text-xs font-medium text-muted-foreground opacity-0 shadow-sm backdrop-blur transition-[color,opacity] hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring group-hover/wireframe-artboard:opacity-100"
319
+ className="absolute right-2 top-2 z-30 inline-flex h-7 items-center gap-1 rounded-md border border-border/60 bg-background px-2 text-xs font-medium text-muted-foreground opacity-0 shadow-sm transition-[color,opacity] hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring group-hover/wireframe-artboard:opacity-100"
320
320
  >
321
321
  <IconPencil className="size-3.5" aria-hidden="true" />
322
322
  <span>{label}</span>
@@ -27,25 +27,25 @@
27
27
  }
28
28
 
29
29
  :root {
30
- --background: 40 23% 97%;
31
- --foreground: 30 5% 10%;
32
- --card: 40 23% 99%;
33
- --card-foreground: 30 5% 10%;
34
- --popover: 40 23% 99%;
35
- --popover-foreground: 30 5% 10%;
36
- --primary: 30 5% 13%;
30
+ --background: 0 0% 100%;
31
+ --foreground: 220 10% 10%;
32
+ --card: 0 0% 100%;
33
+ --card-foreground: 220 10% 10%;
34
+ --popover: 0 0% 100%;
35
+ --popover-foreground: 220 10% 10%;
36
+ --primary: 220 10% 15%;
37
37
  --primary-foreground: 0 0% 100%;
38
- --secondary: 45 14% 94%;
39
- --secondary-foreground: 30 5% 13%;
40
- --muted: 45 14% 94%;
41
- --muted-foreground: 30 6% 43%;
42
- --accent: 45 14% 94%;
43
- --accent-foreground: 30 5% 13%;
38
+ --secondary: 220 10% 95%;
39
+ --secondary-foreground: 220 10% 15%;
40
+ --muted: 220 10% 95%;
41
+ --muted-foreground: 220 5% 45%;
42
+ --accent: 220 10% 95%;
43
+ --accent-foreground: 220 10% 15%;
44
44
  --destructive: 0 84% 60%;
45
45
  --destructive-foreground: 0 0% 98%;
46
- --border: 36 10% 86%;
47
- --input: 36 10% 86%;
48
- --ring: 218 85% 57%;
46
+ --border: 220 10% 90%;
47
+ --input: 220 10% 90%;
48
+ --ring: 220 10% 40%;
49
49
  --radius: 0.5rem;
50
50
  /* Callout tone accents — info/decision/risk/warning/success. */
51
51
  --plan-tone-info: 218 85% 57%;
@@ -53,14 +53,14 @@
53
53
  --plan-tone-risk: 0 84% 60%;
54
54
  --plan-tone-warning: 25 95% 48%;
55
55
  --plan-tone-success: 142 71% 38%;
56
- --sidebar-background: 42 18% 96%;
57
- --sidebar-foreground: 30 6% 43%;
58
- --sidebar-primary: 30 5% 13%;
56
+ --sidebar-background: 220 10% 97%;
57
+ --sidebar-foreground: 220 5% 45%;
58
+ --sidebar-primary: 220 10% 15%;
59
59
  --sidebar-primary-foreground: 0 0% 100%;
60
- --sidebar-accent: 45 14% 93%;
61
- --sidebar-accent-foreground: 30 5% 13%;
62
- --sidebar-border: 36 10% 86%;
63
- --sidebar-ring: 218 85% 57%;
60
+ --sidebar-accent: 220 10% 95%;
61
+ --sidebar-accent-foreground: 220 10% 15%;
62
+ --sidebar-border: 220 10% 90%;
63
+ --sidebar-ring: 220 10% 40%;
64
64
  /* ── Plan document font sizes — edit here to resize globally ──────────────
65
65
  --plan-code-size : general monospace code surfaces and editors
66
66
  --plan-doc-code-size: dense read-only code surfaces such as diffs,
@@ -72,25 +72,25 @@
72
72
  }
73
73
 
74
74
  .dark {
75
- --background: 30 4% 11%;
76
- --foreground: 40 9% 95%;
77
- --card: 30 5% 13%;
78
- --card-foreground: 40 9% 95%;
79
- --popover: 30 5% 13%;
80
- --popover-foreground: 40 9% 95%;
81
- --primary: 40 9% 92%;
82
- --primary-foreground: 30 4% 11%;
83
- --secondary: 36 5% 16%;
84
- --secondary-foreground: 40 9% 95%;
85
- --muted: 36 5% 16%;
86
- --muted-foreground: 38 7% 63%;
87
- --accent: 36 5% 17%;
88
- --accent-foreground: 40 9% 95%;
75
+ --background: 220 6% 6%;
76
+ --foreground: 0 0% 90%;
77
+ --card: 220 5% 6%;
78
+ --card-foreground: 0 0% 90%;
79
+ --popover: 220 5% 6%;
80
+ --popover-foreground: 0 0% 90%;
81
+ --primary: 0 0% 75%;
82
+ --primary-foreground: 220 6% 6%;
83
+ --secondary: 220 4% 12%;
84
+ --secondary-foreground: 0 0% 90%;
85
+ --muted: 220 4% 10%;
86
+ --muted-foreground: 220 4% 60%;
87
+ --accent: 220 4% 13%;
88
+ --accent-foreground: 0 0% 90%;
89
89
  --destructive: 0 63% 51%;
90
90
  --destructive-foreground: 0 0% 98%;
91
- --border: 35 5% 21%;
92
- --input: 35 5% 21%;
93
- --ring: 218 85% 67%;
91
+ --border: 220 4% 14%;
92
+ --input: 220 4% 14%;
93
+ --ring: 0 0% 60%;
94
94
  --radius: 0.5rem;
95
95
  /* Callout tone accents — brighter so they read on the dark surface. */
96
96
  --plan-tone-info: 218 85% 67%;
@@ -98,14 +98,14 @@
98
98
  --plan-tone-risk: 0 84% 67%;
99
99
  --plan-tone-warning: 28 96% 60%;
100
100
  --plan-tone-success: 142 60% 52%;
101
- --sidebar-background: 30 5% 10%;
102
- --sidebar-foreground: 38 7% 63%;
103
- --sidebar-primary: 40 9% 92%;
104
- --sidebar-primary-foreground: 30 4% 11%;
105
- --sidebar-accent: 36 5% 16%;
106
- --sidebar-accent-foreground: 40 9% 95%;
107
- --sidebar-border: 35 5% 18%;
108
- --sidebar-ring: 218 85% 67%;
101
+ --sidebar-background: 220 6% 4%;
102
+ --sidebar-foreground: 220 4% 60%;
103
+ --sidebar-primary: 0 0% 75%;
104
+ --sidebar-primary-foreground: 220 6% 6%;
105
+ --sidebar-accent: 220 4% 10%;
106
+ --sidebar-accent-foreground: 0 0% 90%;
107
+ --sidebar-border: 220 4% 10%;
108
+ --sidebar-ring: 0 0% 60%;
109
109
  }
110
110
 
111
111
  @layer base {
@@ -129,37 +129,20 @@
129
129
 
130
130
  @layer utilities {
131
131
  .plan-content-surface {
132
- --plan-document: hsl(42 18% 97%);
132
+ --plan-document: hsl(var(--background));
133
133
  --plan-canvas: color-mix(in srgb, var(--plan-document) 96%, black);
134
- --plan-block: hsl(42 16% 94%);
135
- --plan-chrome: hsl(42 15% 96% / 0.92);
136
- --plan-line: hsl(36 9% 82%);
137
- --plan-grid-line: hsl(36 9% 70% / 0.08);
138
- --plan-text: hsl(30 5% 11%);
139
- --plan-muted: hsl(30 5% 45%);
140
- --plan-wireframe: hsl(42 16% 98%);
141
- --plan-sketch-line: hsl(28 4% 20%);
142
- --plan-muted-line: hsl(36 6% 78%);
143
- --plan-placeholder-line: hsl(36 5% 72% / 0.72);
144
- --plan-code: hsl(40 12% 96%);
145
- --plan-code-text: hsl(28 5% 14%);
146
- }
147
-
148
- .dark .plan-content-surface {
149
- --plan-document: hsl(32 3% 13%);
150
- --plan-canvas: color-mix(in srgb, var(--plan-document) 80%, black);
151
- --plan-block: hsl(32 3% 15.5%);
152
- --plan-chrome: hsl(32 3% 15.5% / 0.92);
153
- --plan-line: hsl(34 4% 24%);
154
- --plan-grid-line: hsl(34 4% 36% / 0.08);
155
- --plan-text: hsl(40 8% 94%);
156
- --plan-muted: hsl(36 5% 65%);
157
- --plan-wireframe: hsl(34 3% 13.4%);
158
- --plan-sketch-line: hsl(38 5% 84%);
159
- --plan-muted-line: hsl(36 4% 44%);
160
- --plan-placeholder-line: hsl(36 4% 54% / 0.62);
161
- --plan-code: hsl(32 4% 9.8%);
162
- --plan-code-text: hsl(40 9% 92%);
134
+ --plan-block: hsl(var(--secondary));
135
+ --plan-chrome: hsl(var(--background) / 0.92);
136
+ --plan-line: hsl(var(--border));
137
+ --plan-grid-line: hsl(var(--foreground) / 0.08);
138
+ --plan-text: hsl(var(--foreground));
139
+ --plan-muted: hsl(var(--muted-foreground));
140
+ --plan-wireframe: hsl(var(--card));
141
+ --plan-sketch-line: hsl(var(--foreground) / 0.86);
142
+ --plan-muted-line: hsl(var(--border));
143
+ --plan-placeholder-line: hsl(var(--muted-foreground) / 0.42);
144
+ --plan-code: hsl(var(--muted));
145
+ --plan-code-text: hsl(var(--foreground));
163
146
  }
164
147
 
165
148
  .plan-content-surface[data-recap-screenshot-theme="light"] {
@@ -5116,6 +5116,8 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
5116
5116
  sendToAgentChat({
5117
5117
  type: "content",
5118
5118
  submit: true,
5119
+ chatTarget: "local",
5120
+ openSidebar: true,
5119
5121
  context,
5120
5122
  images: capture.images,
5121
5123
  message: buildApplyFeedbackMessage(openCommentCount),
@@ -5125,6 +5127,12 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
5125
5127
  ? t("plansPage.reader.sentCommentsWithScreenshots")
5126
5128
  : t("plansPage.reader.sentComments"),
5127
5129
  );
5130
+ } catch (error) {
5131
+ console.error(
5132
+ "[PlansPage] Failed to send plan feedback to inline agent:",
5133
+ error,
5134
+ );
5135
+ toast.error(t("plansPage.comments.sendFailed"));
5128
5136
  } finally {
5129
5137
  setSendingFeedback(false);
5130
5138
  }
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-06-28
4
+ ---
5
+
6
+ Left sidebar collapse motion and footer controls now feel smoother and use less divider chrome.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-28
4
+ ---
5
+
6
+ Plans now use the shared neutral light and dark theme instead of a warm-tinted palette.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-28
4
+ ---
5
+
6
+ Sending open feedback from a plan now opens the inline Plan agent reliably.
@@ -50,7 +50,7 @@ export function Sidebar({ collapsed, onToggleCollapsed }: SidebarProps) {
50
50
 
51
51
  if (collapsed) {
52
52
  return (
53
- <aside className="flex h-full w-12 shrink-0 flex-col items-center gap-1 overflow-hidden border-e border-border bg-sidebar py-2 text-sidebar-foreground">
53
+ <aside className="flex h-full w-12 shrink-0 flex-col items-center gap-1 overflow-hidden border-e border-border bg-sidebar py-2 text-sidebar-foreground transition-[width] duration-200 ease-out">
54
54
  {onToggleCollapsed && (
55
55
  <Tooltip delayDuration={0}>
56
56
  <TooltipTrigger asChild>
@@ -97,7 +97,7 @@ export function Sidebar({ collapsed, onToggleCollapsed }: SidebarProps) {
97
97
  }
98
98
 
99
99
  return (
100
- <aside className="flex h-full w-56 min-w-0 shrink-0 flex-col overflow-hidden border-e border-border bg-sidebar text-sidebar-foreground">
100
+ <aside className="flex h-full w-56 min-w-0 shrink-0 flex-col overflow-hidden border-e border-border bg-sidebar text-sidebar-foreground transition-[width] duration-200 ease-out">
101
101
  <div className="flex h-12 shrink-0 items-center justify-between border-b border-border px-4">
102
102
  <div className="flex items-center gap-2">
103
103
  <img
@@ -156,15 +156,15 @@ export function Sidebar({ collapsed, onToggleCollapsed }: SidebarProps) {
156
156
  </nav>
157
157
 
158
158
  <div className="mt-auto shrink-0">
159
- <div className="border-t border-border px-2 py-1">
159
+ <div className="px-2 py-1">
160
160
  <ExtensionsSidebarSection />
161
161
  </div>
162
162
 
163
- <div className="border-t border-border px-3 py-2">
163
+ <div className="px-3 py-2">
164
164
  <OrgSwitcher />
165
165
  </div>
166
166
 
167
- <div className="border-t border-border px-3 py-2">
167
+ <div className="px-3 py-2">
168
168
  <DevDatabaseLink />
169
169
  <FeedbackButton />
170
170
  </div>
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-06-28
4
+ ---
5
+
6
+ Left sidebar collapse motion and footer controls now feel smoother and use less divider chrome.
@@ -594,11 +594,11 @@ export function Sidebar({
594
594
  </TabsContent>
595
595
  </Tabs>
596
596
 
597
- <div className="border-t border-border px-2 py-1.5 shrink-0">
597
+ <div className="shrink-0 px-2 py-1.5">
598
598
  <ExtensionsSidebarSection />
599
599
  </div>
600
600
 
601
- <div className="border-t border-border px-3 py-1.5 shrink-0 space-y-2">
601
+ <div className="shrink-0 space-y-2 px-3 py-1.5">
602
602
  <DevDatabaseLink />
603
603
  <FeedbackButton />
604
604
  <OrgSwitcher />
@@ -14,6 +14,17 @@ interface LayoutProps {
14
14
  children: React.ReactNode;
15
15
  }
16
16
 
17
+ const SIDEBAR_COLLAPSE_KEY = "videos.sidebar.collapsed";
18
+
19
+ function readSidebarCollapsed() {
20
+ if (typeof window === "undefined") return false;
21
+ try {
22
+ return window.localStorage.getItem(SIDEBAR_COLLAPSE_KEY) === "1";
23
+ } catch {
24
+ return false;
25
+ }
26
+ }
27
+
17
28
  /**
18
29
  * Routes whose page renders its own h-12 toolbar (with title + AgentToggleButton).
19
30
  * Layout still wraps these with the AgentSidebar but skips the global Header
@@ -39,11 +50,24 @@ export function Layout({ children }: LayoutProps) {
39
50
  const location = useLocation();
40
51
  const t = useT();
41
52
  const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);
53
+ const [sidebarCollapsed, setSidebarCollapsed] =
54
+ useState(readSidebarCollapsed);
42
55
 
43
56
  useEffect(() => {
44
57
  setMobileSidebarOpen(false);
45
58
  }, [location.pathname]);
46
59
 
60
+ useEffect(() => {
61
+ try {
62
+ window.localStorage.setItem(
63
+ SIDEBAR_COLLAPSE_KEY,
64
+ sidebarCollapsed ? "1" : "0",
65
+ );
66
+ } catch {
67
+ // Ignore storage failures; the in-memory preference still works.
68
+ }
69
+ }, [sidebarCollapsed]);
70
+
47
71
  const isStudio = studioRoute(location.pathname);
48
72
  const ownsToolbar = routeOwnsToolbar(location.pathname);
49
73
 
@@ -58,14 +82,17 @@ export function Layout({ children }: LayoutProps) {
58
82
  <HeaderActionsProvider>
59
83
  <div className="agent-layout-shell flex h-screen w-full overflow-hidden bg-background text-foreground">
60
84
  <div className="agent-layout-left-drawer hidden md:block">
61
- <NavSidebar />
85
+ <NavSidebar
86
+ collapsed={sidebarCollapsed}
87
+ onCollapsedChange={setSidebarCollapsed}
88
+ />
62
89
  </div>
63
90
  <Sheet open={mobileSidebarOpen} onOpenChange={setMobileSidebarOpen}>
64
91
  <SheetContent side="left" className="p-0 w-[260px]">
65
92
  <SheetTitle className="sr-only">
66
93
  {t("sidebar.navigation")}
67
94
  </SheetTitle>
68
- <NavSidebar />
95
+ <NavSidebar collapsed={false} collapsible={false} />
69
96
  </SheetContent>
70
97
  </Sheet>
71
98
  <AgentSidebar