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.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +8 -8
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +15 -14
- package/.next/server/app/_not-found.segments/_full.segment.rsc +15 -14
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/media/route.js.nft.json +1 -1
- package/.next/server/app/api/reports/tokens/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/transcript/route.js.nft.json +1 -1
- package/.next/server/app/api/traces/stream/route.js.nft.json +1 -1
- package/.next/server/app/api/version/route.js.nft.json +1 -1
- package/.next/server/app/api/workspace/file-content/route.js.nft.json +1 -1
- package/.next/server/app/api/workspace/files/route.js.nft.json +1 -1
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +20 -19
- package/.next/server/app/chat.segments/_full.segment.rsc +20 -19
- package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +21 -20
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +20 -18
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +8 -8
- package/.next/server/app/index.segments/_full.segment.rsc +20 -18
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/reports/page.js.nft.json +1 -1
- package/.next/server/app/reports/page_client-reference-manifest.js +1 -1
- package/.next/server/app/reports.html +1 -1
- package/.next/server/app/reports.rsc +4 -4
- package/.next/server/app/reports.segments/_full.segment.rsc +4 -4
- package/.next/server/app/reports.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/reports.segments/reports/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/store/page.js.nft.json +1 -1
- package/.next/server/app/store/page_client-reference-manifest.js +1 -1
- package/.next/server/app/store.html +1 -1
- package/.next/server/app/store.rsc +5 -5
- package/.next/server/app/store.segments/_full.segment.rsc +5 -5
- package/.next/server/app/store.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/store.segments/store/__PAGE__.segment.rsc +5 -5
- package/.next/server/chunks/_0ao-_t4jkb46h._.js +2 -2
- package/.next/server/chunks/_0ao-_t4jkb46h._.js.map +1 -1
- package/.next/server/chunks/src_lib_watchers_antigravityWatcher_0w1-atg39y__p.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0i2rbwbkxbdog._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0i2rbwbkxbdog._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0qzscpxebh28_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0qzscpxebh28_._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1jwplflwix8wi._.js +427 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1jwplflwix8wi._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1kt7h7bz59mdn._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1kt7h7bz59mdn._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1otsvjy81s8my._.js +427 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1otsvjy81s8my._.js.map +1 -0
- package/.next/server/chunks/ssr/_0--937zhi743v._.js +3 -0
- package/.next/server/chunks/ssr/_0--937zhi743v._.js.map +1 -0
- package/.next/server/chunks/ssr/_0e3frtjrk-wi9._.js +3 -0
- package/.next/server/chunks/ssr/_0e3frtjrk-wi9._.js.map +1 -0
- package/.next/server/chunks/ssr/_0h29jdf4relbq._.js +3 -0
- package/.next/server/chunks/ssr/_0h29jdf4relbq._.js.map +1 -0
- package/.next/server/chunks/ssr/_1487-zi23c5eb._.js +1 -1
- package/.next/server/chunks/ssr/_1487-zi23c5eb._.js.map +1 -1
- package/.next/server/chunks/ssr/_1vgwoe-shb9z7._.js +3 -0
- package/.next/server/chunks/ssr/_1vgwoe-shb9z7._.js.map +1 -0
- package/.next/server/chunks/ssr/_1zm4m-s8k7oe3._.js +3 -0
- package/.next/server/chunks/ssr/_1zm4m-s8k7oe3._.js.map +1 -0
- package/.next/server/chunks/ssr/_202tntue-jj6s._.js +3 -0
- package/.next/server/chunks/ssr/_202tntue-jj6s._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_1wlwrgnt65zus._.js → node_modules_00ebs67b4u61w._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0m3ihe65818y_._.js → node_modules_01p9ctt-n2dxp._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1kr1c-ncf8q9t._.js → node_modules_05i69rc9pwcdx._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_02jwra-d9iqim._.js → node_modules_06mgkab1v5iox._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_1dff7b_kvngr-._.js → node_modules_07bjxeq9dfgn1._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_02vtgweceovke._.js → node_modules_08q6a-f2itxyo._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_13nsmuhey_ti_._.js → node_modules_09v49jhajmvl4._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_0oukyh0iq21ow._.js → node_modules_0b8zi3pbl-y9n._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_061uaylfjwqk7._.js → node_modules_0d2ios01ot1in._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0b8ndnuql44z1._.js → node_modules_0dw0vozejrnml._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_05w7qhtrzvnk6._.js → node_modules_0e3njj436xau-._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0z7rdbaf13024._.js → node_modules_0e6qoh__e4a69._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1ll-58c1c-qab._.js → node_modules_0hb0q0epwvp--._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0f773uqgzj7y7._.js → node_modules_0jla9ugf1y6rb._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0fd1swhk15cx3._.js → node_modules_0l-y0kqtu_r3o._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1zs2nou5uogby._.js → node_modules_0l814qpw677vm._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1c8i3jrmo4393._.js → node_modules_0lqovp8j8ld76._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0z3elum1675ve._.js → node_modules_0o63z1gd17rhb._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1xyxigbqzb8vs._.js → node_modules_0sjdrli5douui._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1iovyom0-y7o_._.js → node_modules_0xh8tnq1niblb._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0nde84kzuwv2n._.js → node_modules_0yayrqhzfk8wy._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0__m9_odts7_e._.js → node_modules_0z1e37smavebg._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_0f4xh33v3iltc._.js → node_modules_0zb0i39mnjdf3._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_02nv3yff2pqh8._.js → node_modules_10g1mmrf63d8a._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_0-6sb1gkbjo93._.js → node_modules_152txg4c7ose3._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_12qn4bepdou5v._.js → node_modules_185fuy4cv7loa._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_0dq0dsblt-q0g._.js → node_modules_1aqaelh-8fme6._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1-iyhsn_1p9nx._.js → node_modules_1d4sreyq0ubqg._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_0hqa9oxz17hip._.js → node_modules_1e_nc2eyg4djz._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1rlnehdn16ay-._.js → node_modules_1hd7j-tdb8drq._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_12qw2ucebdvol._.js → node_modules_1i3x2csuq_-jt._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0zc49fdcopqu9._.js → node_modules_1l2g7btuh3e4s._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_1-sz_-qddwilq._.js → node_modules_1l46or7mgko0z._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0fs8mckuwk2tj._.js → node_modules_1ltys5mwtcv-n._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0vn0kjn_84lmn._.js → node_modules_1nz3ckv6tu_66._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0t4h1rucl35hl._.js → node_modules_1pquu5wprusnc._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_0-nvg0c4pgfb8._.js → node_modules_1qnypguag6s_l._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1v4lexrfhnlhs._.js → node_modules_1r6w-jlme6d10._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1f4geuvkvlxj1._.js → node_modules_1st9dwe66yx93._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0kovk4b6czb22._.js → node_modules_1tskcaktx6ods._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_07maxxr-t28ql._.js → node_modules_1wew4nn7i1uup._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1216007ogd5om._.js → node_modules_1zbmc81s-4zsm._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1kv6lsckqs-m0._.js → node_modules_1zii7uk468cay._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_0bmuudv_6eypr._.js → node_modules_katex_dist_katex_mjs_0kqo9zl9cgwbo._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_katex_dist_katex_mjs_0qyy6pq9uzpk0._.js → node_modules_katex_dist_katex_mjs_1604s1ky8db8u._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_lucide-react_dist_esm_1d8fezw1qsiob._.js → node_modules_lucide-react_dist_esm_0-5bcc79665lq._.js} +2 -2
- package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_0-5bcc79665lq._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules_lucide-react_dist_esm_0pezg1352q13j._.js → node_modules_lucide-react_dist_esm_0axoa1eg51x1-._.js} +2 -2
- package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_0axoa1eg51x1-._.js.map +1 -0
- 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
- package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_18ei1-na3kusb._.js.map +1 -0
- 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
- package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_1tx493x2_auzs._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_mermaid_dist_mermaid_core_mjs_06it7ktosm1dr._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_mermaid_dist_mermaid_core_mjs_06it7ktosm1dr._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_page_1vqfk0-j72fp6.js +1 -1
- package/.next/server/chunks/ssr/src_app_page_1vqfk0-j72fp6.js.map +1 -1
- package/.next/server/chunks/ssr/src_components_reports_TokenReportView_jsx_1g3p_enbbsadt._.js +1 -1
- package/.next/server/chunks/ssr/src_components_reports_TokenReportView_jsx_1g3p_enbbsadt._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/preview-props.json +3 -3
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/0r9apkv3exqv-.js +1 -0
- package/.next/static/chunks/17jorrh_pfel_.js +1 -0
- package/.next/static/chunks/1n_lb7wmn81jj.js +1 -0
- package/.next/static/chunks/2-w116ewoshm1.js +1 -0
- package/.next/static/chunks/23uup1e8841av.js +1 -0
- package/.next/static/chunks/25l0z48vlvdu4.css +1 -0
- package/.next/static/chunks/2rx7xvi55ohln.js +1 -0
- package/.next/static/chunks/3og0e9qcff393.js +425 -0
- package/.next/static/chunks/3rtpnpqd981z9.js +1 -0
- package/.next/trace +1 -1
- package/.next/trace-build +1 -1
- package/bin/cli.js +12 -0
- package/package.json +1 -1
- package/src/app/chat/page.js +14 -14
- package/src/app/globals.css +128 -0
- package/src/app/layout.js +6 -1
- package/src/app/page.js +1 -1
- package/src/components/chat/ChatMessageItem.js +12 -12
- package/src/components/chat/CodeBlock.js +5 -5
- package/src/components/chat/DiffViewer.js +27 -27
- package/src/components/chat/MarkdownRenderer.js +19 -19
- package/src/components/chat/SessionChatView.js +41 -41
- package/src/components/chat/SessionSearch.js +8 -8
- package/src/components/chat/ThinkingAccordion.js +3 -3
- package/src/components/chat/ToolCallCard.js +6 -6
- package/src/components/chat/ToolOutputView.js +19 -19
- package/src/components/factory/office-canvas.js +134 -3
- package/src/components/factory/scene/characters.js +267 -32
- package/src/components/layout/CommandPalette.jsx +12 -0
- package/src/components/layout/EditorTabs.jsx +17 -0
- package/src/components/layout/LayoutToggles.jsx +31 -2
- package/src/components/layout/LeftSidebar.jsx +27 -3
- package/src/components/layout/RightSidebar.jsx +8 -8
- package/src/components/layout/TitleBar.jsx +5 -1
- package/src/components/layout/VSCodeWorkbench.jsx +78 -14
- package/src/components/store/Item3DRenderer.jsx +602 -48
- package/src/components/store/LiveFittingRoom.jsx +55 -791
- package/src/components/store/LiveReactAgent.jsx +1637 -0
- package/src/components/store/SupporterStoreModal.jsx +3 -2
- package/src/components/store/SupporterStoreView.jsx +94 -34
- package/src/components/theme/ThemeSettingsModal.jsx +40 -40
- package/src/components/ui/Button.jsx +4 -4
- package/src/components/ui/Input.jsx +1 -1
- package/src/components/ui/Modal.jsx +6 -6
- package/src/components/ui/Select.jsx +3 -3
- package/src/lib/catalog/auras.js +226 -1199
- package/src/lib/catalog/index.js +60 -1
- package/src/lib/catalog/pets.js +291 -2398
- package/src/lib/catalog/props.js +488 -4199
- package/src/lib/catalog/skins.js +773 -3249
- package/src/lib/catalog/trophies.js +226 -1199
- package/src/lib/mockTraces.js +15 -15
- package/src/lib/supporterStore.js +1 -1
- package/src/lib/traceContract.js +1 -1
- package/src/lib/watchers/claudeWatcher.js +24 -19
- package/.next/server/chunks/ssr/[root-of-the-server]__19s2v5rryc14o._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__19s2v5rryc14o._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1_jerxrctq6ev._.js +0 -427
- package/.next/server/chunks/ssr/[root-of-the-server]__1_jerxrctq6ev._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1pvso-uyf--97._.js +0 -427
- package/.next/server/chunks/ssr/[root-of-the-server]__1pvso-uyf--97._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1y78dc7oiz7ks._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__1y78dc7oiz7ks._.js.map +0 -1
- package/.next/server/chunks/ssr/_0ozao7omdwbvd._.js +0 -3
- package/.next/server/chunks/ssr/_0ozao7omdwbvd._.js.map +0 -1
- package/.next/server/chunks/ssr/_0rcmpdyxc1qwj._.js +0 -3
- package/.next/server/chunks/ssr/_0rcmpdyxc1qwj._.js.map +0 -1
- package/.next/server/chunks/ssr/_0wv0xnhun3mk7._.js +0 -3
- package/.next/server/chunks/ssr/_0wv0xnhun3mk7._.js.map +0 -1
- package/.next/server/chunks/ssr/_17rmaft1zusua._.js +0 -3
- package/.next/server/chunks/ssr/_17rmaft1zusua._.js.map +0 -1
- package/.next/server/chunks/ssr/_1e-d4pcj59a7a._.js +0 -3
- package/.next/server/chunks/ssr/_1e-d4pcj59a7a._.js.map +0 -1
- package/.next/server/chunks/ssr/_1qr5gnh64z8pg._.js +0 -3
- package/.next/server/chunks/ssr/_1qr5gnh64z8pg._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_0pezg1352q13j._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_131i-tjzse3ye._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_1d8fezw1qsiob._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_1to-9cv1ysvs6._.js.map +0 -1
- package/.next/static/chunks/0_3s_e4gd9xl0.js +0 -1
- package/.next/static/chunks/0i4kx4yl-dwfg.js +0 -425
- package/.next/static/chunks/0z0jbobmmvqoc.js +0 -1
- package/.next/static/chunks/1_a_gmob5qzho.js +0 -1
- package/.next/static/chunks/1ifqr4qo4697b.js +0 -1
- package/.next/static/chunks/2ccq9i8ev4dsx.js +0 -1
- package/.next/static/chunks/2mif7onk_9jy-.css +0 -1
- package/.next/static/chunks/40wyf-mv0tiu3.js +0 -1
- /package/.next/server/chunks/ssr/{node_modules_1c8i3jrmo4393._.js.map → node_modules_00ebs67b4u61w._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_02vtgweceovke._.js.map → node_modules_01p9ctt-n2dxp._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1kr1c-ncf8q9t._.js.map → node_modules_05i69rc9pwcdx._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_02jwra-d9iqim._.js.map → node_modules_06mgkab1v5iox._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1dff7b_kvngr-._.js.map → node_modules_07bjxeq9dfgn1._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0m3ihe65818y_._.js.map → node_modules_08q6a-f2itxyo._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0-6sb1gkbjo93._.js.map → node_modules_09v49jhajmvl4._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0oukyh0iq21ow._.js.map → node_modules_0b8zi3pbl-y9n._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_061uaylfjwqk7._.js.map → node_modules_0d2ios01ot1in._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_02nv3yff2pqh8._.js.map → node_modules_0dw0vozejrnml._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0-nvg0c4pgfb8._.js.map → node_modules_0e3njj436xau-._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0fs8mckuwk2tj._.js.map → node_modules_0e6qoh__e4a69._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0t4h1rucl35hl._.js.map → node_modules_0hb0q0epwvp--._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0f773uqgzj7y7._.js.map → node_modules_0jla9ugf1y6rb._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0dq0dsblt-q0g._.js.map → node_modules_0l-y0kqtu_r3o._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0zc49fdcopqu9._.js.map → node_modules_0l814qpw677vm._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1wlwrgnt65zus._.js.map → node_modules_0lqovp8j8ld76._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0z3elum1675ve._.js.map → node_modules_0o63z1gd17rhb._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1xyxigbqzb8vs._.js.map → node_modules_0sjdrli5douui._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1-iyhsn_1p9nx._.js.map → node_modules_0xh8tnq1niblb._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0nde84kzuwv2n._.js.map → node_modules_0yayrqhzfk8wy._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0__m9_odts7_e._.js.map → node_modules_0z1e37smavebg._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0f4xh33v3iltc._.js.map → node_modules_0zb0i39mnjdf3._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0b8ndnuql44z1._.js.map → node_modules_10g1mmrf63d8a._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1-sz_-qddwilq._.js.map → node_modules_152txg4c7ose3._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_12qn4bepdou5v._.js.map → node_modules_185fuy4cv7loa._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0fd1swhk15cx3._.js.map → node_modules_1aqaelh-8fme6._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_13nsmuhey_ti_._.js.map → node_modules_1d4sreyq0ubqg._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0hqa9oxz17hip._.js.map → node_modules_1e_nc2eyg4djz._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1rlnehdn16ay-._.js.map → node_modules_1hd7j-tdb8drq._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_07maxxr-t28ql._.js.map → node_modules_1i3x2csuq_-jt._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1iovyom0-y7o_._.js.map → node_modules_1l2g7btuh3e4s._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1ll-58c1c-qab._.js.map → node_modules_1l46or7mgko0z._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0z7rdbaf13024._.js.map → node_modules_1ltys5mwtcv-n._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0vn0kjn_84lmn._.js.map → node_modules_1nz3ckv6tu_66._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1zs2nou5uogby._.js.map → node_modules_1pquu5wprusnc._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_05w7qhtrzvnk6._.js.map → node_modules_1qnypguag6s_l._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1v4lexrfhnlhs._.js.map → node_modules_1r6w-jlme6d10._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1f4geuvkvlxj1._.js.map → node_modules_1st9dwe66yx93._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0kovk4b6czb22._.js.map → node_modules_1tskcaktx6ods._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_12qw2ucebdvol._.js.map → node_modules_1wew4nn7i1uup._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1216007ogd5om._.js.map → node_modules_1zbmc81s-4zsm._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1kv6lsckqs-m0._.js.map → node_modules_1zii7uk468cay._.js.map} +0 -0
- /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
- /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
- /package/.next/static/{sQnXeiP8rV6y2v0az_xw3 → 1y6Da0YgnPr2_6ncpWrbV}/_buildManifest.js +0 -0
- /package/.next/static/{sQnXeiP8rV6y2v0az_xw3 → 1y6Da0YgnPr2_6ncpWrbV}/_clientMiddlewareManifest.js +0 -0
- /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
|
|
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=
|
|
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">
|
|
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-[
|
|
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-[
|
|
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-[
|
|
79
|
-
: "text-
|
|
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-[
|
|
102
|
-
: "text-
|
|
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-
|
|
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-
|
|
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-[
|
|
562
|
-
<div className="mb-3 flex items-center justify-between pb-2 border-b border-[
|
|
563
|
-
<h3 className="font-bold text-sm text-
|
|
564
|
-
<span className="text-
|
|
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-[
|
|
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-[
|
|
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-[
|
|
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-
|
|
644
|
+
<h2 className="text-base font-bold text-[var(--text-bright)]">
|
|
582
645
|
{activeTab.title}
|
|
583
646
|
</h2>
|
|
584
|
-
<p className="text-xs text-
|
|
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-[
|
|
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-[
|
|
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-
|
|
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-[
|
|
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
|
}
|