agmon 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/fallback-build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +8 -8
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  10. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  11. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/_not-found.html +1 -1
  13. package/.next/server/app/_not-found.rsc +15 -14
  14. package/.next/server/app/_not-found.segments/_full.segment.rsc +15 -14
  15. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -3
  16. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  17. package/.next/server/app/api/media/route.js.nft.json +1 -1
  18. package/.next/server/app/api/reports/tokens/route.js.nft.json +1 -1
  19. package/.next/server/app/api/sessions/[id]/transcript/route.js.nft.json +1 -1
  20. package/.next/server/app/api/traces/stream/route.js.nft.json +1 -1
  21. package/.next/server/app/api/version/route.js.nft.json +1 -1
  22. package/.next/server/app/api/workspace/file-content/route.js.nft.json +1 -1
  23. package/.next/server/app/api/workspace/files/route.js.nft.json +1 -1
  24. package/.next/server/app/chat/page.js.nft.json +1 -1
  25. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/chat.html +1 -1
  27. package/.next/server/app/chat.rsc +20 -19
  28. package/.next/server/app/chat.segments/_full.segment.rsc +20 -19
  29. package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
  30. package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +21 -20
  31. package/.next/server/app/index.html +1 -1
  32. package/.next/server/app/index.rsc +20 -18
  33. package/.next/server/app/index.segments/__PAGE__.segment.rsc +8 -8
  34. package/.next/server/app/index.segments/_full.segment.rsc +20 -18
  35. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  36. package/.next/server/app/page.js.nft.json +1 -1
  37. package/.next/server/app/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/reports/page.js.nft.json +1 -1
  39. package/.next/server/app/reports/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/reports.html +1 -1
  41. package/.next/server/app/reports.rsc +4 -4
  42. package/.next/server/app/reports.segments/_full.segment.rsc +4 -4
  43. package/.next/server/app/reports.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/reports.segments/reports/__PAGE__.segment.rsc +4 -4
  45. package/.next/server/app/store/page.js.nft.json +1 -1
  46. package/.next/server/app/store/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/store.html +1 -1
  48. package/.next/server/app/store.rsc +5 -5
  49. package/.next/server/app/store.segments/_full.segment.rsc +5 -5
  50. package/.next/server/app/store.segments/_tree.segment.rsc +2 -2
  51. package/.next/server/app/store.segments/store/__PAGE__.segment.rsc +5 -5
  52. package/.next/server/chunks/_0ao-_t4jkb46h._.js +2 -2
  53. package/.next/server/chunks/_0ao-_t4jkb46h._.js.map +1 -1
  54. package/.next/server/chunks/src_lib_watchers_antigravityWatcher_0w1-atg39y__p.js.map +1 -1
  55. package/.next/server/chunks/ssr/[root-of-the-server]__0i2rbwbkxbdog._.js +3 -0
  56. package/.next/server/chunks/ssr/[root-of-the-server]__0i2rbwbkxbdog._.js.map +1 -0
  57. package/.next/server/chunks/ssr/[root-of-the-server]__0qzscpxebh28_._.js +3 -0
  58. package/.next/server/chunks/ssr/[root-of-the-server]__0qzscpxebh28_._.js.map +1 -0
  59. package/.next/server/chunks/ssr/[root-of-the-server]__1jwplflwix8wi._.js +427 -0
  60. package/.next/server/chunks/ssr/[root-of-the-server]__1jwplflwix8wi._.js.map +1 -0
  61. package/.next/server/chunks/ssr/[root-of-the-server]__1kt7h7bz59mdn._.js +1 -1
  62. package/.next/server/chunks/ssr/[root-of-the-server]__1kt7h7bz59mdn._.js.map +1 -1
  63. package/.next/server/chunks/ssr/[root-of-the-server]__1otsvjy81s8my._.js +427 -0
  64. package/.next/server/chunks/ssr/[root-of-the-server]__1otsvjy81s8my._.js.map +1 -0
  65. package/.next/server/chunks/ssr/_0--937zhi743v._.js +3 -0
  66. package/.next/server/chunks/ssr/_0--937zhi743v._.js.map +1 -0
  67. package/.next/server/chunks/ssr/_0e3frtjrk-wi9._.js +3 -0
  68. package/.next/server/chunks/ssr/_0e3frtjrk-wi9._.js.map +1 -0
  69. package/.next/server/chunks/ssr/_0h29jdf4relbq._.js +3 -0
  70. package/.next/server/chunks/ssr/_0h29jdf4relbq._.js.map +1 -0
  71. package/.next/server/chunks/ssr/_1487-zi23c5eb._.js +1 -1
  72. package/.next/server/chunks/ssr/_1487-zi23c5eb._.js.map +1 -1
  73. package/.next/server/chunks/ssr/_1vgwoe-shb9z7._.js +3 -0
  74. package/.next/server/chunks/ssr/_1vgwoe-shb9z7._.js.map +1 -0
  75. package/.next/server/chunks/ssr/_1zm4m-s8k7oe3._.js +3 -0
  76. package/.next/server/chunks/ssr/_1zm4m-s8k7oe3._.js.map +1 -0
  77. package/.next/server/chunks/ssr/_202tntue-jj6s._.js +3 -0
  78. package/.next/server/chunks/ssr/_202tntue-jj6s._.js.map +1 -0
  79. package/.next/server/chunks/ssr/{node_modules_1wlwrgnt65zus._.js → node_modules_00ebs67b4u61w._.js} +1 -1
  80. package/.next/server/chunks/ssr/{node_modules_0m3ihe65818y_._.js → node_modules_01p9ctt-n2dxp._.js} +1 -1
  81. package/.next/server/chunks/ssr/{node_modules_1kr1c-ncf8q9t._.js → node_modules_05i69rc9pwcdx._.js} +1 -1
  82. package/.next/server/chunks/ssr/{node_modules_02jwra-d9iqim._.js → node_modules_06mgkab1v5iox._.js} +2 -2
  83. package/.next/server/chunks/ssr/{node_modules_1dff7b_kvngr-._.js → node_modules_07bjxeq9dfgn1._.js} +2 -2
  84. package/.next/server/chunks/ssr/{node_modules_02vtgweceovke._.js → node_modules_08q6a-f2itxyo._.js} +1 -1
  85. package/.next/server/chunks/ssr/{node_modules_13nsmuhey_ti_._.js → node_modules_09v49jhajmvl4._.js} +2 -2
  86. package/.next/server/chunks/ssr/{node_modules_0oukyh0iq21ow._.js → node_modules_0b8zi3pbl-y9n._.js} +2 -2
  87. package/.next/server/chunks/ssr/{node_modules_061uaylfjwqk7._.js → node_modules_0d2ios01ot1in._.js} +1 -1
  88. package/.next/server/chunks/ssr/{node_modules_0b8ndnuql44z1._.js → node_modules_0dw0vozejrnml._.js} +2 -2
  89. package/.next/server/chunks/ssr/{node_modules_05w7qhtrzvnk6._.js → node_modules_0e3njj436xau-._.js} +1 -1
  90. package/.next/server/chunks/ssr/{node_modules_0z7rdbaf13024._.js → node_modules_0e6qoh__e4a69._.js} +1 -1
  91. package/.next/server/chunks/ssr/{node_modules_1ll-58c1c-qab._.js → node_modules_0hb0q0epwvp--._.js} +1 -1
  92. package/.next/server/chunks/ssr/{node_modules_0f773uqgzj7y7._.js → node_modules_0jla9ugf1y6rb._.js} +1 -1
  93. package/.next/server/chunks/ssr/{node_modules_0fd1swhk15cx3._.js → node_modules_0l-y0kqtu_r3o._.js} +1 -1
  94. package/.next/server/chunks/ssr/{node_modules_1zs2nou5uogby._.js → node_modules_0l814qpw677vm._.js} +1 -1
  95. package/.next/server/chunks/ssr/{node_modules_1c8i3jrmo4393._.js → node_modules_0lqovp8j8ld76._.js} +1 -1
  96. package/.next/server/chunks/ssr/{node_modules_0z3elum1675ve._.js → node_modules_0o63z1gd17rhb._.js} +1 -1
  97. package/.next/server/chunks/ssr/{node_modules_1xyxigbqzb8vs._.js → node_modules_0sjdrli5douui._.js} +1 -1
  98. package/.next/server/chunks/ssr/{node_modules_1iovyom0-y7o_._.js → node_modules_0xh8tnq1niblb._.js} +1 -1
  99. package/.next/server/chunks/ssr/{node_modules_0nde84kzuwv2n._.js → node_modules_0yayrqhzfk8wy._.js} +1 -1
  100. package/.next/server/chunks/ssr/{node_modules_0__m9_odts7_e._.js → node_modules_0z1e37smavebg._.js} +2 -2
  101. package/.next/server/chunks/ssr/{node_modules_0f4xh33v3iltc._.js → node_modules_0zb0i39mnjdf3._.js} +1 -1
  102. package/.next/server/chunks/ssr/{node_modules_02nv3yff2pqh8._.js → node_modules_10g1mmrf63d8a._.js} +2 -2
  103. package/.next/server/chunks/ssr/{node_modules_0-6sb1gkbjo93._.js → node_modules_152txg4c7ose3._.js} +2 -2
  104. package/.next/server/chunks/ssr/{node_modules_12qn4bepdou5v._.js → node_modules_185fuy4cv7loa._.js} +2 -2
  105. package/.next/server/chunks/ssr/{node_modules_0dq0dsblt-q0g._.js → node_modules_1aqaelh-8fme6._.js} +1 -1
  106. package/.next/server/chunks/ssr/{node_modules_1-iyhsn_1p9nx._.js → node_modules_1d4sreyq0ubqg._.js} +2 -2
  107. package/.next/server/chunks/ssr/{node_modules_0hqa9oxz17hip._.js → node_modules_1e_nc2eyg4djz._.js} +1 -1
  108. package/.next/server/chunks/ssr/{node_modules_1rlnehdn16ay-._.js → node_modules_1hd7j-tdb8drq._.js} +1 -1
  109. package/.next/server/chunks/ssr/{node_modules_12qw2ucebdvol._.js → node_modules_1i3x2csuq_-jt._.js} +1 -1
  110. package/.next/server/chunks/ssr/{node_modules_0zc49fdcopqu9._.js → node_modules_1l2g7btuh3e4s._.js} +2 -2
  111. package/.next/server/chunks/ssr/{node_modules_1-sz_-qddwilq._.js → node_modules_1l46or7mgko0z._.js} +1 -1
  112. package/.next/server/chunks/ssr/{node_modules_0fs8mckuwk2tj._.js → node_modules_1ltys5mwtcv-n._.js} +1 -1
  113. package/.next/server/chunks/ssr/{node_modules_0vn0kjn_84lmn._.js → node_modules_1nz3ckv6tu_66._.js} +1 -1
  114. package/.next/server/chunks/ssr/{node_modules_0t4h1rucl35hl._.js → node_modules_1pquu5wprusnc._.js} +2 -2
  115. package/.next/server/chunks/ssr/{node_modules_0-nvg0c4pgfb8._.js → node_modules_1qnypguag6s_l._.js} +1 -1
  116. package/.next/server/chunks/ssr/{node_modules_1v4lexrfhnlhs._.js → node_modules_1r6w-jlme6d10._.js} +1 -1
  117. package/.next/server/chunks/ssr/{node_modules_1f4geuvkvlxj1._.js → node_modules_1st9dwe66yx93._.js} +1 -1
  118. package/.next/server/chunks/ssr/{node_modules_0kovk4b6czb22._.js → node_modules_1tskcaktx6ods._.js} +1 -1
  119. package/.next/server/chunks/ssr/{node_modules_07maxxr-t28ql._.js → node_modules_1wew4nn7i1uup._.js} +1 -1
  120. package/.next/server/chunks/ssr/{node_modules_1216007ogd5om._.js → node_modules_1zbmc81s-4zsm._.js} +1 -1
  121. package/.next/server/chunks/ssr/{node_modules_1kv6lsckqs-m0._.js → node_modules_1zii7uk468cay._.js} +2 -2
  122. package/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_0bmuudv_6eypr._.js → node_modules_katex_dist_katex_mjs_0kqo9zl9cgwbo._.js} +1 -1
  123. package/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_0qyy6pq9uzpk0._.js → node_modules_katex_dist_katex_mjs_1604s1ky8db8u._.js} +1 -1
  124. package/.next/server/chunks/ssr/{node_modules_lucide-react_dist_esm_1d8fezw1qsiob._.js → node_modules_lucide-react_dist_esm_0-5bcc79665lq._.js} +2 -2
  125. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_0-5bcc79665lq._.js.map +1 -0
  126. package/.next/server/chunks/ssr/{node_modules_lucide-react_dist_esm_0pezg1352q13j._.js → node_modules_lucide-react_dist_esm_0axoa1eg51x1-._.js} +2 -2
  127. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_0axoa1eg51x1-._.js.map +1 -0
  128. package/.next/server/chunks/ssr/{node_modules_lucide-react_dist_esm_131i-tjzse3ye._.js → node_modules_lucide-react_dist_esm_18ei1-na3kusb._.js} +2 -2
  129. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_18ei1-na3kusb._.js.map +1 -0
  130. package/.next/server/chunks/ssr/{node_modules_lucide-react_dist_esm_1to-9cv1ysvs6._.js → node_modules_lucide-react_dist_esm_1tx493x2_auzs._.js} +2 -2
  131. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_1tx493x2_auzs._.js.map +1 -0
  132. package/.next/server/chunks/ssr/node_modules_mermaid_dist_mermaid_core_mjs_06it7ktosm1dr._.js +3 -0
  133. package/.next/server/chunks/ssr/node_modules_mermaid_dist_mermaid_core_mjs_06it7ktosm1dr._.js.map +1 -0
  134. package/.next/server/chunks/ssr/src_app_page_1vqfk0-j72fp6.js +1 -1
  135. package/.next/server/chunks/ssr/src_app_page_1vqfk0-j72fp6.js.map +1 -1
  136. package/.next/server/chunks/ssr/src_components_reports_TokenReportView_jsx_1g3p_enbbsadt._.js +1 -1
  137. package/.next/server/chunks/ssr/src_components_reports_TokenReportView_jsx_1g3p_enbbsadt._.js.map +1 -1
  138. package/.next/server/middleware-build-manifest.js +3 -3
  139. package/.next/server/pages/404.html +1 -1
  140. package/.next/server/pages/500.html +1 -1
  141. package/.next/server/preview-props.json +3 -3
  142. package/.next/server/server-reference-manifest.js +1 -1
  143. package/.next/server/server-reference-manifest.json +1 -1
  144. package/.next/static/chunks/0r9apkv3exqv-.js +1 -0
  145. package/.next/static/chunks/17jorrh_pfel_.js +1 -0
  146. package/.next/static/chunks/1n_lb7wmn81jj.js +1 -0
  147. package/.next/static/chunks/2-w116ewoshm1.js +1 -0
  148. package/.next/static/chunks/23uup1e8841av.js +1 -0
  149. package/.next/static/chunks/25l0z48vlvdu4.css +1 -0
  150. package/.next/static/chunks/2rx7xvi55ohln.js +1 -0
  151. package/.next/static/chunks/3og0e9qcff393.js +425 -0
  152. package/.next/static/chunks/3rtpnpqd981z9.js +1 -0
  153. package/.next/trace +1 -1
  154. package/.next/trace-build +1 -1
  155. package/bin/cli.js +12 -0
  156. package/package.json +1 -1
  157. package/src/app/chat/page.js +14 -14
  158. package/src/app/globals.css +128 -0
  159. package/src/app/layout.js +6 -1
  160. package/src/app/page.js +1 -1
  161. package/src/components/chat/ChatMessageItem.js +12 -12
  162. package/src/components/chat/CodeBlock.js +5 -5
  163. package/src/components/chat/DiffViewer.js +27 -27
  164. package/src/components/chat/MarkdownRenderer.js +19 -19
  165. package/src/components/chat/SessionChatView.js +41 -41
  166. package/src/components/chat/SessionSearch.js +8 -8
  167. package/src/components/chat/ThinkingAccordion.js +3 -3
  168. package/src/components/chat/ToolCallCard.js +6 -6
  169. package/src/components/chat/ToolOutputView.js +19 -19
  170. package/src/components/factory/office-canvas.js +134 -3
  171. package/src/components/factory/scene/characters.js +267 -32
  172. package/src/components/layout/CommandPalette.jsx +12 -0
  173. package/src/components/layout/EditorTabs.jsx +17 -0
  174. package/src/components/layout/LayoutToggles.jsx +31 -2
  175. package/src/components/layout/LeftSidebar.jsx +27 -3
  176. package/src/components/layout/RightSidebar.jsx +8 -8
  177. package/src/components/layout/TitleBar.jsx +5 -1
  178. package/src/components/layout/VSCodeWorkbench.jsx +78 -14
  179. package/src/components/store/Item3DRenderer.jsx +602 -48
  180. package/src/components/store/LiveFittingRoom.jsx +55 -791
  181. package/src/components/store/LiveReactAgent.jsx +1637 -0
  182. package/src/components/store/SupporterStoreModal.jsx +3 -2
  183. package/src/components/store/SupporterStoreView.jsx +94 -34
  184. package/src/components/theme/ThemeSettingsModal.jsx +40 -40
  185. package/src/components/ui/Button.jsx +4 -4
  186. package/src/components/ui/Input.jsx +1 -1
  187. package/src/components/ui/Modal.jsx +6 -6
  188. package/src/components/ui/Select.jsx +3 -3
  189. package/src/lib/catalog/auras.js +226 -1199
  190. package/src/lib/catalog/index.js +60 -1
  191. package/src/lib/catalog/pets.js +291 -2398
  192. package/src/lib/catalog/props.js +488 -4199
  193. package/src/lib/catalog/skins.js +773 -3249
  194. package/src/lib/catalog/trophies.js +226 -1199
  195. package/src/lib/mockTraces.js +15 -15
  196. package/src/lib/supporterStore.js +1 -1
  197. package/src/lib/traceContract.js +1 -1
  198. package/src/lib/watchers/claudeWatcher.js +24 -19
  199. package/.next/server/chunks/ssr/[root-of-the-server]__19s2v5rryc14o._.js +0 -3
  200. package/.next/server/chunks/ssr/[root-of-the-server]__19s2v5rryc14o._.js.map +0 -1
  201. package/.next/server/chunks/ssr/[root-of-the-server]__1_jerxrctq6ev._.js +0 -427
  202. package/.next/server/chunks/ssr/[root-of-the-server]__1_jerxrctq6ev._.js.map +0 -1
  203. package/.next/server/chunks/ssr/[root-of-the-server]__1pvso-uyf--97._.js +0 -427
  204. package/.next/server/chunks/ssr/[root-of-the-server]__1pvso-uyf--97._.js.map +0 -1
  205. package/.next/server/chunks/ssr/[root-of-the-server]__1y78dc7oiz7ks._.js +0 -3
  206. package/.next/server/chunks/ssr/[root-of-the-server]__1y78dc7oiz7ks._.js.map +0 -1
  207. package/.next/server/chunks/ssr/_0ozao7omdwbvd._.js +0 -3
  208. package/.next/server/chunks/ssr/_0ozao7omdwbvd._.js.map +0 -1
  209. package/.next/server/chunks/ssr/_0rcmpdyxc1qwj._.js +0 -3
  210. package/.next/server/chunks/ssr/_0rcmpdyxc1qwj._.js.map +0 -1
  211. package/.next/server/chunks/ssr/_0wv0xnhun3mk7._.js +0 -3
  212. package/.next/server/chunks/ssr/_0wv0xnhun3mk7._.js.map +0 -1
  213. package/.next/server/chunks/ssr/_17rmaft1zusua._.js +0 -3
  214. package/.next/server/chunks/ssr/_17rmaft1zusua._.js.map +0 -1
  215. package/.next/server/chunks/ssr/_1e-d4pcj59a7a._.js +0 -3
  216. package/.next/server/chunks/ssr/_1e-d4pcj59a7a._.js.map +0 -1
  217. package/.next/server/chunks/ssr/_1qr5gnh64z8pg._.js +0 -3
  218. package/.next/server/chunks/ssr/_1qr5gnh64z8pg._.js.map +0 -1
  219. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_0pezg1352q13j._.js.map +0 -1
  220. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_131i-tjzse3ye._.js.map +0 -1
  221. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_1d8fezw1qsiob._.js.map +0 -1
  222. package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_1to-9cv1ysvs6._.js.map +0 -1
  223. package/.next/static/chunks/0_3s_e4gd9xl0.js +0 -1
  224. package/.next/static/chunks/0i4kx4yl-dwfg.js +0 -425
  225. package/.next/static/chunks/0z0jbobmmvqoc.js +0 -1
  226. package/.next/static/chunks/1_a_gmob5qzho.js +0 -1
  227. package/.next/static/chunks/1ifqr4qo4697b.js +0 -1
  228. package/.next/static/chunks/2ccq9i8ev4dsx.js +0 -1
  229. package/.next/static/chunks/2mif7onk_9jy-.css +0 -1
  230. package/.next/static/chunks/40wyf-mv0tiu3.js +0 -1
  231. /package/.next/server/chunks/ssr/{node_modules_1c8i3jrmo4393._.js.map → node_modules_00ebs67b4u61w._.js.map} +0 -0
  232. /package/.next/server/chunks/ssr/{node_modules_02vtgweceovke._.js.map → node_modules_01p9ctt-n2dxp._.js.map} +0 -0
  233. /package/.next/server/chunks/ssr/{node_modules_1kr1c-ncf8q9t._.js.map → node_modules_05i69rc9pwcdx._.js.map} +0 -0
  234. /package/.next/server/chunks/ssr/{node_modules_02jwra-d9iqim._.js.map → node_modules_06mgkab1v5iox._.js.map} +0 -0
  235. /package/.next/server/chunks/ssr/{node_modules_1dff7b_kvngr-._.js.map → node_modules_07bjxeq9dfgn1._.js.map} +0 -0
  236. /package/.next/server/chunks/ssr/{node_modules_0m3ihe65818y_._.js.map → node_modules_08q6a-f2itxyo._.js.map} +0 -0
  237. /package/.next/server/chunks/ssr/{node_modules_0-6sb1gkbjo93._.js.map → node_modules_09v49jhajmvl4._.js.map} +0 -0
  238. /package/.next/server/chunks/ssr/{node_modules_0oukyh0iq21ow._.js.map → node_modules_0b8zi3pbl-y9n._.js.map} +0 -0
  239. /package/.next/server/chunks/ssr/{node_modules_061uaylfjwqk7._.js.map → node_modules_0d2ios01ot1in._.js.map} +0 -0
  240. /package/.next/server/chunks/ssr/{node_modules_02nv3yff2pqh8._.js.map → node_modules_0dw0vozejrnml._.js.map} +0 -0
  241. /package/.next/server/chunks/ssr/{node_modules_0-nvg0c4pgfb8._.js.map → node_modules_0e3njj436xau-._.js.map} +0 -0
  242. /package/.next/server/chunks/ssr/{node_modules_0fs8mckuwk2tj._.js.map → node_modules_0e6qoh__e4a69._.js.map} +0 -0
  243. /package/.next/server/chunks/ssr/{node_modules_0t4h1rucl35hl._.js.map → node_modules_0hb0q0epwvp--._.js.map} +0 -0
  244. /package/.next/server/chunks/ssr/{node_modules_0f773uqgzj7y7._.js.map → node_modules_0jla9ugf1y6rb._.js.map} +0 -0
  245. /package/.next/server/chunks/ssr/{node_modules_0dq0dsblt-q0g._.js.map → node_modules_0l-y0kqtu_r3o._.js.map} +0 -0
  246. /package/.next/server/chunks/ssr/{node_modules_0zc49fdcopqu9._.js.map → node_modules_0l814qpw677vm._.js.map} +0 -0
  247. /package/.next/server/chunks/ssr/{node_modules_1wlwrgnt65zus._.js.map → node_modules_0lqovp8j8ld76._.js.map} +0 -0
  248. /package/.next/server/chunks/ssr/{node_modules_0z3elum1675ve._.js.map → node_modules_0o63z1gd17rhb._.js.map} +0 -0
  249. /package/.next/server/chunks/ssr/{node_modules_1xyxigbqzb8vs._.js.map → node_modules_0sjdrli5douui._.js.map} +0 -0
  250. /package/.next/server/chunks/ssr/{node_modules_1-iyhsn_1p9nx._.js.map → node_modules_0xh8tnq1niblb._.js.map} +0 -0
  251. /package/.next/server/chunks/ssr/{node_modules_0nde84kzuwv2n._.js.map → node_modules_0yayrqhzfk8wy._.js.map} +0 -0
  252. /package/.next/server/chunks/ssr/{node_modules_0__m9_odts7_e._.js.map → node_modules_0z1e37smavebg._.js.map} +0 -0
  253. /package/.next/server/chunks/ssr/{node_modules_0f4xh33v3iltc._.js.map → node_modules_0zb0i39mnjdf3._.js.map} +0 -0
  254. /package/.next/server/chunks/ssr/{node_modules_0b8ndnuql44z1._.js.map → node_modules_10g1mmrf63d8a._.js.map} +0 -0
  255. /package/.next/server/chunks/ssr/{node_modules_1-sz_-qddwilq._.js.map → node_modules_152txg4c7ose3._.js.map} +0 -0
  256. /package/.next/server/chunks/ssr/{node_modules_12qn4bepdou5v._.js.map → node_modules_185fuy4cv7loa._.js.map} +0 -0
  257. /package/.next/server/chunks/ssr/{node_modules_0fd1swhk15cx3._.js.map → node_modules_1aqaelh-8fme6._.js.map} +0 -0
  258. /package/.next/server/chunks/ssr/{node_modules_13nsmuhey_ti_._.js.map → node_modules_1d4sreyq0ubqg._.js.map} +0 -0
  259. /package/.next/server/chunks/ssr/{node_modules_0hqa9oxz17hip._.js.map → node_modules_1e_nc2eyg4djz._.js.map} +0 -0
  260. /package/.next/server/chunks/ssr/{node_modules_1rlnehdn16ay-._.js.map → node_modules_1hd7j-tdb8drq._.js.map} +0 -0
  261. /package/.next/server/chunks/ssr/{node_modules_07maxxr-t28ql._.js.map → node_modules_1i3x2csuq_-jt._.js.map} +0 -0
  262. /package/.next/server/chunks/ssr/{node_modules_1iovyom0-y7o_._.js.map → node_modules_1l2g7btuh3e4s._.js.map} +0 -0
  263. /package/.next/server/chunks/ssr/{node_modules_1ll-58c1c-qab._.js.map → node_modules_1l46or7mgko0z._.js.map} +0 -0
  264. /package/.next/server/chunks/ssr/{node_modules_0z7rdbaf13024._.js.map → node_modules_1ltys5mwtcv-n._.js.map} +0 -0
  265. /package/.next/server/chunks/ssr/{node_modules_0vn0kjn_84lmn._.js.map → node_modules_1nz3ckv6tu_66._.js.map} +0 -0
  266. /package/.next/server/chunks/ssr/{node_modules_1zs2nou5uogby._.js.map → node_modules_1pquu5wprusnc._.js.map} +0 -0
  267. /package/.next/server/chunks/ssr/{node_modules_05w7qhtrzvnk6._.js.map → node_modules_1qnypguag6s_l._.js.map} +0 -0
  268. /package/.next/server/chunks/ssr/{node_modules_1v4lexrfhnlhs._.js.map → node_modules_1r6w-jlme6d10._.js.map} +0 -0
  269. /package/.next/server/chunks/ssr/{node_modules_1f4geuvkvlxj1._.js.map → node_modules_1st9dwe66yx93._.js.map} +0 -0
  270. /package/.next/server/chunks/ssr/{node_modules_0kovk4b6czb22._.js.map → node_modules_1tskcaktx6ods._.js.map} +0 -0
  271. /package/.next/server/chunks/ssr/{node_modules_12qw2ucebdvol._.js.map → node_modules_1wew4nn7i1uup._.js.map} +0 -0
  272. /package/.next/server/chunks/ssr/{node_modules_1216007ogd5om._.js.map → node_modules_1zbmc81s-4zsm._.js.map} +0 -0
  273. /package/.next/server/chunks/ssr/{node_modules_1kv6lsckqs-m0._.js.map → node_modules_1zii7uk468cay._.js.map} +0 -0
  274. /package/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_0bmuudv_6eypr._.js.map → node_modules_katex_dist_katex_mjs_0kqo9zl9cgwbo._.js.map} +0 -0
  275. /package/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_0qyy6pq9uzpk0._.js.map → node_modules_katex_dist_katex_mjs_1604s1ky8db8u._.js.map} +0 -0
  276. /package/.next/static/{sQnXeiP8rV6y2v0az_xw3 → 1y6Da0YgnPr2_6ncpWrbV}/_buildManifest.js +0 -0
  277. /package/.next/static/{sQnXeiP8rV6y2v0az_xw3 → 1y6Da0YgnPr2_6ncpWrbV}/_clientMiddlewareManifest.js +0 -0
  278. /package/.next/static/{sQnXeiP8rV6y2v0az_xw3 → 1y6Da0YgnPr2_6ncpWrbV}/_ssgManifest.js +0 -0
@@ -21,6 +21,8 @@ export default function EditorTabs({
21
21
  activeTabId = "canvas",
22
22
  onSelectTab,
23
23
  onCloseTab,
24
+ isZenFullscreen = false,
25
+ onToggleZenFullscreen = null,
24
26
  }) {
25
27
  const containerRef = useRef(null);
26
28
 
@@ -93,6 +95,21 @@ export default function EditorTabs({
93
95
 
94
96
  {/* Right Tab Controls */}
95
97
  <div className="flex items-center px-2 gap-1 bg-[#252526] border-l border-[#1e1e1e] shrink-0 h-full">
98
+ {onToggleZenFullscreen && activeTabId === "canvas" && (
99
+ <button
100
+ type="button"
101
+ data-testid="editor-zen-fullscreen-btn"
102
+ onClick={onToggleZenFullscreen}
103
+ title={
104
+ isZenFullscreen
105
+ ? "Thoát toàn màn hình (ESC)"
106
+ : "Chế độ Chill toàn màn hình Virtual Office (Shift+F / ESC để thoát)"
107
+ }
108
+ className="p-1 mr-0.5 rounded text-slate-400 hover:text-cyan-300 hover:bg-[#333333] transition-colors cursor-pointer"
109
+ >
110
+ <Maximize2 className="w-3.5 h-3.5" />
111
+ </button>
112
+ )}
96
113
  <button
97
114
  onClick={() => {
98
115
  if (containerRef.current) {
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
 
3
3
  import React from "react";
4
- import { PanelLeft, PanelBottom, PanelRight } from "lucide-react";
4
+ import { PanelLeft, PanelBottom, PanelRight, Maximize2, Minimize2 } from "lucide-react";
5
5
 
6
6
  /**
7
7
  * VS Code Standard Layout Control Buttons
8
- * Renders 3 toggles: Primary Side Bar (Left), Bottom Panel, Secondary Side Bar (Right)
8
+ * Renders layout toggles: Primary Side Bar (Left), Bottom Panel, Secondary Side Bar (Right), Fullscreen Chill Mode
9
9
  */
10
10
  export default function LayoutToggles({
11
11
  isLeftSidebarVisible,
@@ -14,6 +14,8 @@ export default function LayoutToggles({
14
14
  onToggleLeftSidebar,
15
15
  onToggleBottomPanel,
16
16
  onToggleRightSidebar,
17
+ isZenFullscreen = false,
18
+ onToggleZenFullscreen = null,
17
19
  }) {
18
20
  const getButtonClass = (isActive) =>
19
21
  `inline-flex items-center justify-center p-1 rounded transition-colors ${
@@ -56,6 +58,33 @@ export default function LayoutToggles({
56
58
  >
57
59
  <PanelRight className="w-3.5 h-3.5" />
58
60
  </button>
61
+
62
+ {onToggleZenFullscreen && (
63
+ <>
64
+ <div className="w-[1px] h-3 bg-[#333333] my-auto mx-0.5" />
65
+ <button
66
+ type="button"
67
+ data-testid="toggle-zen-fullscreen"
68
+ title={
69
+ isZenFullscreen
70
+ ? "Thoát chế độ toàn màn hình Chill Mode (ESC)"
71
+ : "Chế độ Chill toàn màn hình Virtual Office (Shift+F / ESC để thoát)"
72
+ }
73
+ onClick={onToggleZenFullscreen}
74
+ className={`inline-flex items-center justify-center p-1 rounded transition-colors ${
75
+ isZenFullscreen
76
+ ? "bg-amber-500/20 border border-amber-500/50 text-amber-300 shadow-sm"
77
+ : "border border-transparent text-[#858585] hover:text-[#4fc1ff] hover:bg-[#2a2d2e]"
78
+ }`}
79
+ >
80
+ {isZenFullscreen ? (
81
+ <Minimize2 className="w-3.5 h-3.5 text-amber-400" />
82
+ ) : (
83
+ <Maximize2 className="w-3.5 h-3.5" />
84
+ )}
85
+ </button>
86
+ </>
87
+ )}
59
88
  </div>
60
89
  );
61
90
  }
@@ -20,8 +20,10 @@ import {
20
20
  Bot,
21
21
  ShoppingBag,
22
22
  Blocks,
23
+ Monitor,
23
24
  } from "lucide-react";
24
25
  import FileExplorer from "./FileExplorer";
26
+ import { TOTAL_CATALOG_COUNT } from "@/lib/catalog/index.js";
25
27
 
26
28
  export default function LeftSidebar({
27
29
  workstations = [],
@@ -72,6 +74,7 @@ export default function LeftSidebar({
72
74
  const groupedAgents = useMemo(() => {
73
75
  const groups = {
74
76
  extensions: [],
77
+ desktop: [],
75
78
  geminiApp: [],
76
79
  geminiCli: [],
77
80
  claude: [],
@@ -86,10 +89,13 @@ export default function LeftSidebar({
86
89
  const model = (w.model || "").toLowerCase();
87
90
 
88
91
  const isExtension = ct === "extension" || ct === "ide" || conn.includes("extension");
92
+ const isDesktop = ct === "desktop" || conn.includes("desktop");
89
93
  const isClaude = cli === "claude" || p.includes("claude") || p.includes("anthropic") || model.includes("claude");
90
94
 
91
95
  if (isExtension) {
92
96
  groups.extensions.push(w);
97
+ } else if (isDesktop) {
98
+ groups.desktop.push(w);
93
99
  } else if (ct === "app" || p.includes("app") || conn.includes("app")) {
94
100
  groups.geminiApp.push(w);
95
101
  } else if (isClaude) {
@@ -118,6 +124,9 @@ export default function LeftSidebar({
118
124
  agent.clientType === "extension" ||
119
125
  (agent.provider || "").includes("extension") ||
120
126
  (agent.connectionId || "").toLowerCase().includes("extension");
127
+ const isDesktop =
128
+ agent.clientType === "desktop" ||
129
+ (agent.connectionId || "").toLowerCase().includes("desktop");
121
130
 
122
131
  const previewText = agent.lastText
123
132
  ? `${agent.lastTextRole === "assistant" ? "AI: " : agent.lastTextRole === "user" ? "You: " : ""}${agent.lastText}`
@@ -156,11 +165,15 @@ export default function LeftSidebar({
156
165
  {sessionTitle}
157
166
  </span>
158
167
 
159
- {/* Client Tag: EXT vs APP vs CLI */}
168
+ {/* Client Tag: EXT vs DESKTOP vs APP vs CLI */}
160
169
  {isExt ? (
161
170
  <span className="shrink-0 bg-sky-950/80 text-sky-300 border border-sky-500/40 text-[9px] font-bold px-1 rounded uppercase tracking-wider">
162
171
  EXT
163
172
  </span>
173
+ ) : isDesktop ? (
174
+ <span className="shrink-0 bg-orange-950/80 text-orange-300 border border-orange-500/40 text-[9px] font-bold px-1 rounded uppercase tracking-wider">
175
+ DESK
176
+ </span>
164
177
  ) : isApp ? (
165
178
  <span className="shrink-0 bg-purple-950/80 text-purple-300 border border-purple-500/40 text-[9px] font-bold px-1 rounded uppercase tracking-wider">
166
179
  APP
@@ -321,6 +334,17 @@ export default function LeftSidebar({
321
334
  </div>
322
335
  )}
323
336
 
337
+ {/* Claude Desktop */}
338
+ {groupedAgents.desktop?.length > 0 && (
339
+ <div className="mb-2">
340
+ <div className="px-3 py-1 text-[9px] font-bold uppercase tracking-wider text-orange-400/90 flex items-center gap-1">
341
+ <Monitor className="w-2.5 h-2.5" />
342
+ <span>Claude Desktop ({groupedAgents.desktop.length})</span>
343
+ </div>
344
+ {groupedAgents.desktop.map(renderAgentRow)}
345
+ </div>
346
+ )}
347
+
324
348
  {/* Gemini App Agents */}
325
349
  {groupedAgents.geminiApp.length > 0 && (
326
350
  <div className="mb-2">
@@ -470,13 +494,13 @@ export default function LeftSidebar({
470
494
  type="button"
471
495
  onClick={onOpenStore}
472
496
  className="w-full flex items-center justify-between p-2 rounded-lg bg-gradient-to-r from-amber-500/15 to-amber-600/10 hover:from-amber-500/25 hover:to-amber-600/20 border border-amber-500/30 text-amber-300 transition-all cursor-pointer text-xs"
473
- title="Open Supporter Store: 1,000 Tech Items & 3D Effects"
497
+ title={`Open Supporter Store: ${TOTAL_CATALOG_COUNT} Tech Items & 3D Effects`}
474
498
  >
475
499
  <div className="flex items-center gap-2">
476
500
  <ShoppingBag className="w-4 h-4 text-amber-400" />
477
501
  <div className="text-left">
478
502
  <div className="font-bold text-white text-[11px] leading-tight">Supporter Store</div>
479
- <div className="text-[10px] text-amber-400/80">1,000 Tech Items & 3D Effects</div>
503
+ <div className="text-[10px] text-amber-400/80">{TOTAL_CATALOG_COUNT} Tech Items & 3D Effects</div>
480
504
  </div>
481
505
  </div>
482
506
  <span className="text-[9px] font-mono px-1.5 py-0.5 rounded bg-amber-500/20 border border-amber-500/40">
@@ -63,10 +63,10 @@ export default function RightSidebar({
63
63
  return (
64
64
  <div
65
65
  data-testid="secondary-sidebar-container"
66
- className="flex flex-col h-full w-full bg-[#1e1e1e] text-[#cccccc] select-none overflow-hidden"
66
+ className="flex flex-col h-full w-full bg-[var(--bg-editor)] text-[var(--text-main)] select-none overflow-hidden"
67
67
  >
68
68
  {/* 1. Header with Tab Switches (Live Chat & Inspector) */}
69
- <div className="h-[36px] min-h-[36px] bg-[#252526] border-b border-[#1e1e1e] px-2 flex items-center justify-between shrink-0">
69
+ <div className="h-[36px] min-h-[36px] bg-[var(--bg-card)] border-b border-[var(--border-subtle)] px-2 flex items-center justify-between shrink-0">
70
70
  {/* Navigation Tabs */}
71
71
  <div className="flex items-center gap-1">
72
72
  {/* Tab 1: Live Chat */}
@@ -75,8 +75,8 @@ export default function RightSidebar({
75
75
  onClick={() => handleTabClick("chat")}
76
76
  className={`flex items-center gap-1.5 px-2.5 py-1 rounded text-xs font-semibold transition-colors cursor-pointer ${
77
77
  currentTab === "chat"
78
- ? "bg-[#1e1e1e] text-cyan-400 border border-[#3e3e42]"
79
- : "text-slate-400 hover:text-slate-200 hover:bg-[#2d2d2d]"
78
+ ? "bg-[var(--bg-editor)] text-[var(--accent-primary)] border border-[var(--border-card)]"
79
+ : "text-[var(--text-muted)] hover:text-[var(--text-bright)] hover:bg-[var(--bg-hover)]"
80
80
  }`}
81
81
  title="View Agent Live Chat & Conversation Transcript"
82
82
  >
@@ -98,8 +98,8 @@ export default function RightSidebar({
98
98
  onClick={() => handleTabClick("inspector")}
99
99
  className={`flex items-center gap-1.5 px-2.5 py-1 rounded text-xs font-semibold transition-colors cursor-pointer ${
100
100
  currentTab === "inspector"
101
- ? "bg-[#1e1e1e] text-cyan-400 border border-[#3e3e42]"
102
- : "text-slate-400 hover:text-slate-200 hover:bg-[#2d2d2d]"
101
+ ? "bg-[var(--bg-editor)] text-[var(--accent-primary)] border border-[var(--border-card)]"
102
+ : "text-[var(--text-muted)] hover:text-[var(--text-bright)] hover:bg-[var(--bg-hover)]"
103
103
  }`}
104
104
  title="View Agent specs, telemetry, and token usage"
105
105
  >
@@ -115,7 +115,7 @@ export default function RightSidebar({
115
115
  <button
116
116
  onClick={() => openChatInNewWindow(selectedAgent.connectionId || selectedAgent.traceId)}
117
117
  title="Open in Detached Window (VS Code style)"
118
- className="p-1 rounded text-slate-400 hover:text-cyan-300 hover:bg-[#333333] transition-colors cursor-pointer"
118
+ className="p-1 rounded text-[var(--text-muted)] hover:text-[var(--accent-primary)] hover:bg-[var(--bg-hover)] transition-colors cursor-pointer"
119
119
  >
120
120
  <AppWindow className="w-3.5 h-3.5" />
121
121
  </button>
@@ -125,7 +125,7 @@ export default function RightSidebar({
125
125
  <button
126
126
  onClick={onClose}
127
127
  title="Close Secondary Sidebar (Cmd+Alt+B)"
128
- className="p-1 rounded text-slate-400 hover:text-white hover:bg-[#333333] transition-colors cursor-pointer"
128
+ className="p-1 rounded text-[var(--text-muted)] hover:text-[var(--text-bright)] hover:bg-[var(--bg-hover)] transition-colors cursor-pointer"
129
129
  >
130
130
  <X className="w-3.5 h-3.5" />
131
131
  </button>
@@ -53,6 +53,8 @@ export default function TitleBar({
53
53
  onToggleLeftSidebar,
54
54
  onToggleBottomPanel,
55
55
  onToggleRightSidebar,
56
+ isZenFullscreen = false,
57
+ onToggleZenFullscreen = null,
56
58
  }) {
57
59
  return (
58
60
  <header className="h-[34px] min-h-[34px] bg-[#1e1e1e] border-b border-[#2b2b2b] flex items-center justify-between px-3 text-[#cccccc] text-xs select-none shrink-0 z-40">
@@ -239,7 +241,7 @@ export default function TitleBar({
239
241
  {notifEnabled ? <Bell className="w-3 h-3" /> : <BellOff className="w-3 h-3" />}
240
242
  </button>
241
243
 
242
- {/* Layout Toggles (Left, Bottom, Right) */}
244
+ {/* Layout Toggles (Left, Bottom, Right, Chill Fullscreen) */}
243
245
  <LayoutToggles
244
246
  isLeftSidebarVisible={layout?.isLeftSidebarVisible}
245
247
  isBottomPanelVisible={layout?.isBottomPanelVisible}
@@ -247,6 +249,8 @@ export default function TitleBar({
247
249
  onToggleLeftSidebar={onToggleLeftSidebar}
248
250
  onToggleBottomPanel={onToggleBottomPanel}
249
251
  onToggleRightSidebar={onToggleRightSidebar}
252
+ isZenFullscreen={isZenFullscreen}
253
+ onToggleZenFullscreen={onToggleZenFullscreen}
250
254
  />
251
255
  </div>
252
256
  </header>
@@ -59,6 +59,36 @@ export default function VSCodeWorkbench({
59
59
  const [isThemeModalOpen, setIsThemeModalOpen] = useState(false);
60
60
  const [themeModalTab, setThemeModalTab] = useState("themes");
61
61
  const [isSupporter, setIsSupporter] = useState(false);
62
+ const [isZenFullscreen, setIsZenFullscreen] = useState(false);
63
+
64
+ // Toggle Zen Fullscreen Chill Mode (with native browser fullscreen integration)
65
+ const handleToggleZenFullscreen = useCallback((forcedState) => {
66
+ setIsZenFullscreen((prev) => {
67
+ const next = typeof forcedState === "boolean" ? forcedState : !prev;
68
+ if (next) {
69
+ setActiveTabId("canvas");
70
+ if (typeof document !== "undefined" && document.documentElement?.requestFullscreen && !document.fullscreenElement) {
71
+ document.documentElement.requestFullscreen().catch(() => {});
72
+ }
73
+ } else {
74
+ if (typeof document !== "undefined" && document.fullscreenElement && document.exitFullscreen) {
75
+ document.exitFullscreen().catch(() => {});
76
+ }
77
+ }
78
+ return next;
79
+ });
80
+ }, []);
81
+
82
+ // Synchronize state when browser native fullscreen changes (e.g. user hits ESC natively)
83
+ useEffect(() => {
84
+ const onFullscreenChange = () => {
85
+ if (typeof document !== "undefined" && !document.fullscreenElement && isZenFullscreen) {
86
+ setIsZenFullscreen(false);
87
+ }
88
+ };
89
+ document.addEventListener("fullscreenchange", onFullscreenChange);
90
+ return () => document.removeEventListener("fullscreenchange", onFullscreenChange);
91
+ }, [isZenFullscreen]);
62
92
 
63
93
  // Initialize and synchronize supporter store and ambient audio
64
94
  useEffect(() => {
@@ -318,11 +348,28 @@ export default function VSCodeWorkbench({
318
348
  setLayout((prev) => ({ ...prev, isRightSidebarVisible: !prev.isRightSidebarVisible }));
319
349
  return;
320
350
  }
351
+
352
+ // Escape -> Exit Zen Fullscreen Chill Mode
353
+ if (e.key === "Escape" && isZenFullscreen) {
354
+ e.preventDefault();
355
+ handleToggleZenFullscreen(false);
356
+ return;
357
+ }
358
+
359
+ // Shift+F -> Toggle Zen Fullscreen Chill Mode
360
+ if (e.shiftKey && (e.key === "f" || e.key === "F") && !modKey && !e.altKey) {
361
+ const tag = document.activeElement?.tagName?.toLowerCase();
362
+ if (tag !== "input" && tag !== "textarea") {
363
+ e.preventDefault();
364
+ handleToggleZenFullscreen();
365
+ return;
366
+ }
367
+ }
321
368
  };
322
369
 
323
370
  window.addEventListener("keydown", handleKeyDown);
324
371
  return () => window.removeEventListener("keydown", handleKeyDown);
325
- }, []);
372
+ }, [isZenFullscreen, handleToggleZenFullscreen]);
326
373
 
327
374
  // When separator is dragged, dispatch resize event to keep Pixi.js Canvas crisp
328
375
  const handlePanelResize = useCallback(() => {
@@ -380,6 +427,8 @@ export default function VSCodeWorkbench({
380
427
  onToggleRightSidebar={() =>
381
428
  setLayout((p) => ({ ...p, isRightSidebarVisible: !p.isRightSidebarVisible }))
382
429
  }
430
+ isZenFullscreen={isZenFullscreen}
431
+ onToggleZenFullscreen={handleToggleZenFullscreen}
383
432
  />
384
433
 
385
434
  {/* 2. Middle Body: ActivityBar + Horizontal Resizable Panels */}
@@ -507,6 +556,8 @@ export default function VSCodeWorkbench({
507
556
  activeTabId={activeTabId}
508
557
  onSelectTab={setActiveTabId}
509
558
  onCloseTab={handleCloseTab}
559
+ isZenFullscreen={isZenFullscreen}
560
+ onToggleZenFullscreen={handleToggleZenFullscreen}
510
561
  />
511
562
 
512
563
  {/* Editor Content */}
@@ -537,6 +588,10 @@ export default function VSCodeWorkbench({
537
588
  traces={effectiveTraces}
538
589
  selectedId={selectedId}
539
590
  onSelect={(id) => handleSelectAgent(id)}
591
+ isZenFullscreen={isZenFullscreen}
592
+ onToggleZenFullscreen={handleToggleZenFullscreen}
593
+ soundEnabled={soundEnabled}
594
+ onToggleSound={onToggleSound}
540
595
  />
541
596
  )}
542
597
  </div>
@@ -547,26 +602,34 @@ export default function VSCodeWorkbench({
547
602
  <div
548
603
  className={`absolute inset-0 transition-opacity ${
549
604
  activeTabId === "canvas" ? "opacity-100 z-10" : "opacity-0 pointer-events-none z-0"
605
+ } ${
606
+ isZenFullscreen
607
+ ? "!fixed !inset-0 !z-40 !w-screen !h-screen !rounded-none !border-none"
608
+ : ""
550
609
  }`}
551
610
  >
552
611
  <OfficeCanvas
553
612
  traces={effectiveTraces}
554
613
  selectedId={selectedId}
555
614
  onSelect={(id) => handleSelectAgent(id)}
615
+ isZenFullscreen={isZenFullscreen}
616
+ onToggleZenFullscreen={handleToggleZenFullscreen}
617
+ soundEnabled={soundEnabled}
618
+ onToggleSound={onToggleSound}
556
619
  />
557
620
  </div>
558
621
 
559
622
  {/* Tab 2: Telemetry Stream */}
560
623
  {activeTabId === "telemetry" && (
561
- <div className="absolute inset-0 p-4 overflow-auto font-mono text-xs bg-[#181818] text-slate-300">
562
- <div className="mb-3 flex items-center justify-between pb-2 border-b border-[#333333]">
563
- <h3 className="font-bold text-sm text-cyan-400">Realtime Telemetry Snapshots</h3>
564
- <span className="text-slate-500">
624
+ <div className="absolute inset-0 p-4 overflow-auto font-mono text-xs bg-[var(--bg-editor)] text-[var(--text-main)]">
625
+ <div className="mb-3 flex items-center justify-between pb-2 border-b border-[var(--border-subtle)]">
626
+ <h3 className="font-bold text-sm text-[var(--accent-primary)]">Realtime Telemetry Snapshots</h3>
627
+ <span className="text-[var(--text-muted)]">
565
628
  {effectiveTraces.length} active sessions
566
629
  {effectiveTraces.length > 30 ? " (latest 30)" : ""}
567
630
  </span>
568
631
  </div>
569
- <pre className="bg-[#121212] p-4 rounded border border-[#2b2b2b] text-[11px] text-emerald-400 leading-relaxed overflow-x-auto">
632
+ <pre className="bg-[var(--bg-chat-code)] p-4 rounded border border-[var(--border-card)] text-[11px] text-[var(--text-chat-code)] leading-relaxed overflow-x-auto">
570
633
  {telemetryJsonPreview}
571
634
  </pre>
572
635
  </div>
@@ -574,21 +637,21 @@ export default function VSCodeWorkbench({
574
637
 
575
638
  {/* Tab 3: Specific Agent View */}
576
639
  {activeTab?.type === "agent" && (
577
- <div className="absolute inset-0 p-4 overflow-auto bg-[#1e1e1e] text-slate-200">
640
+ <div className="absolute inset-0 p-4 overflow-auto bg-[var(--bg-editor)] text-[var(--text-main)]">
578
641
  <div className="max-w-3xl mx-auto space-y-4">
579
- <div className="flex items-center justify-between p-4 bg-[#252526] rounded-lg border border-[#333333]">
642
+ <div className="flex items-center justify-between p-4 bg-[var(--bg-card)] rounded-lg border border-[var(--border-card)]">
580
643
  <div>
581
- <h2 className="text-base font-bold text-white">
644
+ <h2 className="text-base font-bold text-[var(--text-bright)]">
582
645
  {activeTab.title}
583
646
  </h2>
584
- <p className="text-xs text-slate-400">
647
+ <p className="text-xs text-[var(--text-muted)]">
585
648
  Connection ID: {activeTab.agentData?.connectionId}
586
649
  </p>
587
650
  </div>
588
651
  <div className="flex items-center gap-2">
589
652
  <button
590
653
  onClick={() => handleStartReplay(activeTab.agentData?.connectionId)}
591
- className="px-3.5 py-1.5 bg-[#007acc] hover:bg-[#0062a3] text-white rounded text-xs font-semibold cursor-pointer flex items-center gap-1.5 shadow-sm"
654
+ className="px-3.5 py-1.5 bg-[var(--accent-primary)] hover:opacity-90 text-[var(--text-on-accent,#ffffff)] rounded text-xs font-semibold cursor-pointer flex items-center gap-1.5 shadow-sm"
592
655
  title="Replay Session (Default)"
593
656
  >
594
657
  <RotateCcw className="w-3.5 h-3.5" />
@@ -596,17 +659,17 @@ export default function VSCodeWorkbench({
596
659
  </button>
597
660
  <button
598
661
  onClick={() => handleOpenConversation(activeTab.agentData?.connectionId)}
599
- className="px-3.5 py-1.5 bg-[#252526] hover:bg-[#333333] border border-[#3e3e42] text-slate-200 hover:text-white rounded text-xs font-semibold cursor-pointer flex items-center gap-1.5"
662
+ className="px-3.5 py-1.5 bg-[var(--bg-card-inner)] hover:bg-[var(--bg-hover)] border border-[var(--border-card)] text-[var(--text-main)] hover:text-[var(--text-bright)] rounded text-xs font-semibold cursor-pointer flex items-center gap-1.5"
600
663
  title="Pin live chat transcript to Right Sidebar"
601
664
  >
602
- <MessageSquare className="w-3.5 h-3.5 text-cyan-400" />
665
+ <MessageSquare className="w-3.5 h-3.5 text-[var(--accent-secondary)]" />
603
666
  <span>Pin to Sidebar</span>
604
667
  </button>
605
668
  <button
606
669
  onClick={() => {
607
670
  openChatInNewWindow(activeTab.agentData?.connectionId);
608
671
  }}
609
- className="px-3.5 py-1.5 bg-[#252526] hover:bg-[#333333] border border-[#3e3e42] text-cyan-400 hover:text-white rounded text-xs font-semibold cursor-pointer flex items-center gap-1.5"
672
+ className="px-3.5 py-1.5 bg-[var(--bg-card-inner)] hover:bg-[var(--bg-hover)] border border-[var(--border-card)] text-[var(--accent-primary)] hover:text-[var(--text-bright)] rounded text-xs font-semibold cursor-pointer flex items-center gap-1.5"
610
673
  title="Open in Detached Window (VS Code style)"
611
674
  >
612
675
  <AppWindow className="w-3.5 h-3.5" />
@@ -760,6 +823,7 @@ export default function VSCodeWorkbench({
760
823
  onToggleRightSidebar={() =>
761
824
  setLayout((p) => ({ ...p, isRightSidebarVisible: !p.isRightSidebarVisible }))
762
825
  }
826
+ onToggleZenFullscreen={handleToggleZenFullscreen}
763
827
  onOpenChatSidebar={() =>
764
828
  setLayout((p) => ({ ...p, isRightSidebarVisible: true, activeRightSidebarTab: "chat" }))
765
829
  }