agmon 0.2.0 → 0.2.2
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 -13
- package/.next/server/app/_not-found.segments/_full.segment.rsc +15 -13
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +8 -6
- 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 +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 +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 +22 -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 +10 -9
- 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 +6 -5
- 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 +7 -6
- package/.next/server/chunks/[root-of-the-server]__0dw97_pahi8uf._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0dw97_pahi8uf._.js.map +1 -0
- package/.next/server/chunks/_0ao-_t4jkb46h._.js +2 -2
- package/.next/server/chunks/_0ao-_t4jkb46h._.js.map +1 -1
- package/.next/server/chunks/_1-8ipqazoyrrk._.js +1 -1
- package/.next/server/chunks/_1-8ipqazoyrrk._.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/_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/_0zel-n0h--cnl._.js +3 -0
- package/.next/server/chunks/ssr/_0zel-n0h--cnl._.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_0f773uqgzj7y7._.js → node_modules_01avo0bde3tpo._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0z3elum1675ve._.js → node_modules_01l0208e5kqic._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1c8i3jrmo4393._.js → node_modules_033x29yqle_sj._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1kr1c-ncf8q9t._.js → node_modules_03wbg__aslvui._.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_0z7rdbaf13024._.js → node_modules_08-bqkrz7sh0l._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_13nsmuhey_ti_._.js → node_modules_089w9jm7s2qa3._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_0m3ihe65818y_._.js → node_modules_08q6a-f2itxyo._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0__m9_odts7_e._.js → node_modules_0cy47-s63xjzh._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_0b8ndnuql44z1._.js → node_modules_0czh0jcnsm5e6._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_0fs8mckuwk2tj._.js → node_modules_0e6qoh__e4a69._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_05w7qhtrzvnk6._.js → node_modules_0fv321j1nslkb._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_061uaylfjwqk7._.js → node_modules_0g-wb7h-hsdwc._.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_0dq0dsblt-q0g._.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_1xyxigbqzb8vs._.js → node_modules_0o63z1gd17rhb._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1-sz_-qddwilq._.js → node_modules_0oz_zzlh8exwx._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0oukyh0iq21ow._.js → node_modules_0so2agzqd9p8l._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_12qw2ucebdvol._.js → node_modules_0w2w61b8bh769._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1dff7b_kvngr-._.js → node_modules_0wd6szix_zku7._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_0fd1swhk15cx3._.js → node_modules_0wp7omf0xblv8._.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_0f4xh33v3iltc._.js → node_modules_0zb0i39mnjdf3._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1iovyom0-y7o_._.js → node_modules_10c51o2qv6mbi._.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_1-iyhsn_1p9nx._.js → node_modules_19vqq7rvf-_ar._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_0hqa9oxz17hip._.js → node_modules_1hd7j-tdb8drq._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1rlnehdn16ay-._.js → node_modules_1hu83gui7_nj2._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_07maxxr-t28ql._.js → node_modules_1i3x2csuq_-jt._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0kovk4b6czb22._.js → node_modules_1j8hpoiygrs5e._.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_0t4h1rucl35hl._.js → node_modules_1n4kig4mj6n4s._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules_0vn0kjn_84lmn._.js → node_modules_1nz3ckv6tu_66._.js} +1 -1
- 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_1s8oxeqa5_i3k._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1216007ogd5om._.js → node_modules_1tskcaktx6ods._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_02vtgweceovke._.js → node_modules_1xz1dstlo5ri-._.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_067omoj5szuys._.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/0jo6fy2c_gmqn.js +1 -0
- package/.next/static/chunks/0r9apkv3exqv-.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/2q9cwykv6ox1t.css +1 -0
- package/.next/static/chunks/2rx7xvi55ohln.js +1 -0
- package/.next/static/chunks/2zf44j8sjo0w0.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/api/traces/stream/route.js +41 -5
- package/src/app/chat/page.js +14 -14
- package/src/app/globals.css +128 -0
- package/src/app/layout.js +8 -2
- package/src/app/page.js +18 -2
- 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 +42 -42
- 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 +165 -3
- package/src/components/factory/scene/characters.js +267 -32
- package/src/components/layout/BottomPanel.jsx +6 -6
- 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 +88 -6
- package/src/components/layout/RightSidebar.jsx +8 -8
- package/src/components/layout/StatusBar.jsx +1 -1
- package/src/components/layout/TitleBar.jsx +76 -2
- package/src/components/layout/VSCodeWorkbench.jsx +99 -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 +28 -26
- package/src/lib/parsers/codexParser.js +373 -0
- package/src/lib/parsers/transcriptParser.js +35 -3
- package/src/lib/supporterStore.js +1 -1
- package/src/lib/traceContract.js +1 -1
- package/src/lib/useFactoryTraces.js +70 -5
- package/src/lib/watchers/antigravityWatcher.js +15 -1
- package/src/lib/watchers/claudeWatcher.js +86 -70
- package/src/lib/watchers/codexWatcher.js +482 -0
- package/src/lib/watchers/watcherManager.js +46 -30
- package/.next/server/chunks/src_lib_watchers_antigravityWatcher_0w1-atg39y__p.js +0 -3
- package/.next/server/chunks/src_lib_watchers_antigravityWatcher_0w1-atg39y__p.js.map +0 -1
- 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_0f773uqgzj7y7._.js.map → node_modules_01avo0bde3tpo._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0z3elum1675ve._.js.map → node_modules_01l0208e5kqic._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1wlwrgnt65zus._.js.map → node_modules_033x29yqle_sj._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1kr1c-ncf8q9t._.js.map → node_modules_03wbg__aslvui._.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_0fs8mckuwk2tj._.js.map → node_modules_08-bqkrz7sh0l._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0-6sb1gkbjo93._.js.map → node_modules_089w9jm7s2qa3._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_02vtgweceovke._.js.map → node_modules_08q6a-f2itxyo._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0__m9_odts7_e._.js.map → node_modules_0cy47-s63xjzh._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_02nv3yff2pqh8._.js.map → node_modules_0czh0jcnsm5e6._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0z7rdbaf13024._.js.map → node_modules_0e6qoh__e4a69._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0-nvg0c4pgfb8._.js.map → node_modules_0fv321j1nslkb._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_061uaylfjwqk7._.js.map → node_modules_0g-wb7h-hsdwc._.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_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_1xyxigbqzb8vs._.js.map → node_modules_0o63z1gd17rhb._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1-iyhsn_1p9nx._.js.map → node_modules_0oz_zzlh8exwx._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0oukyh0iq21ow._.js.map → node_modules_0so2agzqd9p8l._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_07maxxr-t28ql._.js.map → node_modules_0w2w61b8bh769._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1dff7b_kvngr-._.js.map → node_modules_0wd6szix_zku7._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0fd1swhk15cx3._.js.map → node_modules_0wp7omf0xblv8._.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_0f4xh33v3iltc._.js.map → node_modules_0zb0i39mnjdf3._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1-sz_-qddwilq._.js.map → node_modules_10c51o2qv6mbi._.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_13nsmuhey_ti_._.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_1iovyom0-y7o_._.js.map → node_modules_19vqq7rvf-_ar._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0hqa9oxz17hip._.js.map → node_modules_1hd7j-tdb8drq._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1rlnehdn16ay-._.js.map → node_modules_1hu83gui7_nj2._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_12qw2ucebdvol._.js.map → node_modules_1i3x2csuq_-jt._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0kovk4b6czb22._.js.map → node_modules_1j8hpoiygrs5e._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1ll-58c1c-qab._.js.map → node_modules_1l2g7btuh3e4s._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1zs2nou5uogby._.js.map → node_modules_1n4kig4mj6n4s._.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_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_1s8oxeqa5_i3k._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_1216007ogd5om._.js.map → node_modules_1tskcaktx6ods._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules_0m3ihe65818y_._.js.map → node_modules_1xz1dstlo5ri-._.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_067omoj5szuys._.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 → dGN2VKPk5TJgezxS3JvRc}/_buildManifest.js +0 -0
- /package/.next/static/{sQnXeiP8rV6y2v0az_xw3 → dGN2VKPk5TJgezxS3JvRc}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{sQnXeiP8rV6y2v0az_xw3 → dGN2VKPk5TJgezxS3JvRc}/_ssgManifest.js +0 -0
|
@@ -53,12 +53,12 @@ export default function BottomPanel({
|
|
|
53
53
|
return new Date().toLocaleTimeString();
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
-
traces.forEach((t) => {
|
|
56
|
+
traces.forEach((t, tIdx) => {
|
|
57
57
|
const account = t.account || "Agent";
|
|
58
58
|
const model = t.model || "gemini-3.8-flash";
|
|
59
59
|
const clientType = t.clientType || (t.provider?.includes("app") ? "app" : "cli");
|
|
60
60
|
const provider = t.provider || "gemini";
|
|
61
|
-
const
|
|
61
|
+
const traceUniqueId = t.traceId || t.connectionId || `trace-${tIdx}`;
|
|
62
62
|
|
|
63
63
|
// 1. Incorporate actual real-time event logs if present
|
|
64
64
|
if (Array.isArray(t.logs) && t.logs.length > 0) {
|
|
@@ -66,7 +66,7 @@ export default function BottomPanel({
|
|
|
66
66
|
const rawType = (logItem.type || "").toUpperCase();
|
|
67
67
|
const level = rawType.includes("ERR") ? "ERROR" : rawType.includes("TOOL") ? "TOOL" : "STREAM";
|
|
68
68
|
list.push({
|
|
69
|
-
id: `${
|
|
69
|
+
id: `${traceUniqueId}-${logItem.timestamp || lIdx}-${lIdx}`,
|
|
70
70
|
time: formatLogTime(logItem.timestamp),
|
|
71
71
|
level,
|
|
72
72
|
provider,
|
|
@@ -81,7 +81,7 @@ export default function BottomPanel({
|
|
|
81
81
|
// Fallback to trace state snapshot with stable IDs
|
|
82
82
|
if (t.activeTool) {
|
|
83
83
|
list.push({
|
|
84
|
-
id: `${
|
|
84
|
+
id: `${traceUniqueId}-tool-${t.activeTool}`,
|
|
85
85
|
time: formatLogTime(t.timestamp),
|
|
86
86
|
level: "TOOL",
|
|
87
87
|
provider,
|
|
@@ -95,7 +95,7 @@ export default function BottomPanel({
|
|
|
95
95
|
|
|
96
96
|
if (t.state === "streaming" || t.state === "busy") {
|
|
97
97
|
list.push({
|
|
98
|
-
id: `${
|
|
98
|
+
id: `${traceUniqueId}-stream`,
|
|
99
99
|
time: formatLogTime(t.timestamp),
|
|
100
100
|
level: "STREAM",
|
|
101
101
|
provider,
|
|
@@ -108,7 +108,7 @@ export default function BottomPanel({
|
|
|
108
108
|
|
|
109
109
|
if (t.state === "error") {
|
|
110
110
|
list.push({
|
|
111
|
-
id: `${
|
|
111
|
+
id: `${traceUniqueId}-err`,
|
|
112
112
|
time: formatLogTime(t.timestamp),
|
|
113
113
|
level: "ERROR",
|
|
114
114
|
provider,
|
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
Type,
|
|
23
23
|
Files,
|
|
24
24
|
FolderTree,
|
|
25
|
+
Maximize2,
|
|
25
26
|
} from "lucide-react";
|
|
26
27
|
import { openChatInNewWindow } from "../../lib/windowManager.js";
|
|
27
28
|
|
|
@@ -34,6 +35,7 @@ export default function CommandPalette({
|
|
|
34
35
|
onToggleLeftSidebar,
|
|
35
36
|
onToggleBottomPanel,
|
|
36
37
|
onToggleRightSidebar,
|
|
38
|
+
onToggleZenFullscreen,
|
|
37
39
|
onOpenChatSidebar,
|
|
38
40
|
onOpenFilesExplorer,
|
|
39
41
|
onToggleSound,
|
|
@@ -96,6 +98,16 @@ export default function CommandPalette({
|
|
|
96
98
|
onClose();
|
|
97
99
|
},
|
|
98
100
|
},
|
|
101
|
+
{
|
|
102
|
+
id: "toggle-zen-fullscreen",
|
|
103
|
+
title: "View: Toggle Virtual Office Chill Mode (Full Screen)",
|
|
104
|
+
shortcut: "Shift+F",
|
|
105
|
+
icon: Maximize2,
|
|
106
|
+
action: () => {
|
|
107
|
+
onToggleZenFullscreen?.();
|
|
108
|
+
onClose();
|
|
109
|
+
},
|
|
110
|
+
},
|
|
99
111
|
{
|
|
100
112
|
id: "toggle-right",
|
|
101
113
|
title: "View: Toggle Secondary Side Bar (Live Chat & Inspector)",
|
|
@@ -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,11 @@ import {
|
|
|
20
20
|
Bot,
|
|
21
21
|
ShoppingBag,
|
|
22
22
|
Blocks,
|
|
23
|
+
Monitor,
|
|
24
|
+
TerminalSquare,
|
|
23
25
|
} from "lucide-react";
|
|
24
26
|
import FileExplorer from "./FileExplorer";
|
|
27
|
+
import { TOTAL_CATALOG_COUNT } from "@/lib/catalog/index.js";
|
|
25
28
|
|
|
26
29
|
export default function LeftSidebar({
|
|
27
30
|
workstations = [],
|
|
@@ -72,6 +75,9 @@ export default function LeftSidebar({
|
|
|
72
75
|
const groupedAgents = useMemo(() => {
|
|
73
76
|
const groups = {
|
|
74
77
|
extensions: [],
|
|
78
|
+
desktop: [],
|
|
79
|
+
codexDesktop: [],
|
|
80
|
+
codexCli: [],
|
|
75
81
|
geminiApp: [],
|
|
76
82
|
geminiCli: [],
|
|
77
83
|
claude: [],
|
|
@@ -85,11 +91,23 @@ export default function LeftSidebar({
|
|
|
85
91
|
const conn = (w.connectionId || "").toLowerCase();
|
|
86
92
|
const model = (w.model || "").toLowerCase();
|
|
87
93
|
|
|
94
|
+
const isCodex = cli === "codex" || p.includes("codex") || conn.includes("codex");
|
|
88
95
|
const isExtension = ct === "extension" || ct === "ide" || conn.includes("extension");
|
|
96
|
+
const isDesktop = ct === "desktop" || conn.includes("desktop");
|
|
89
97
|
const isClaude = cli === "claude" || p.includes("claude") || p.includes("anthropic") || model.includes("claude");
|
|
90
98
|
|
|
91
|
-
if (
|
|
99
|
+
if (isCodex) {
|
|
100
|
+
if (isExtension) {
|
|
101
|
+
groups.extensions.push(w);
|
|
102
|
+
} else if (isDesktop || ct === "app" || conn.includes("app")) {
|
|
103
|
+
groups.codexDesktop.push(w);
|
|
104
|
+
} else {
|
|
105
|
+
groups.codexCli.push(w);
|
|
106
|
+
}
|
|
107
|
+
} else if (isExtension) {
|
|
92
108
|
groups.extensions.push(w);
|
|
109
|
+
} else if (isDesktop) {
|
|
110
|
+
groups.desktop.push(w);
|
|
93
111
|
} else if (ct === "app" || p.includes("app") || conn.includes("app")) {
|
|
94
112
|
groups.geminiApp.push(w);
|
|
95
113
|
} else if (isClaude) {
|
|
@@ -118,6 +136,10 @@ export default function LeftSidebar({
|
|
|
118
136
|
agent.clientType === "extension" ||
|
|
119
137
|
(agent.provider || "").includes("extension") ||
|
|
120
138
|
(agent.connectionId || "").toLowerCase().includes("extension");
|
|
139
|
+
const isDesktop =
|
|
140
|
+
agent.clientType === "desktop" ||
|
|
141
|
+
(agent.connectionId || "").toLowerCase().includes("desktop");
|
|
142
|
+
const isCodex = agent.cli === "codex" || (agent.connectionId || "").toLowerCase().includes("codex");
|
|
121
143
|
|
|
122
144
|
const previewText = agent.lastText
|
|
123
145
|
? `${agent.lastTextRole === "assistant" ? "AI: " : agent.lastTextRole === "user" ? "You: " : ""}${agent.lastText}`
|
|
@@ -125,7 +147,7 @@ export default function LeftSidebar({
|
|
|
125
147
|
|
|
126
148
|
return (
|
|
127
149
|
<div
|
|
128
|
-
key={agent.connectionId || `agent-${idx}`}
|
|
150
|
+
key={agent.traceId || agent.connectionId || `agent-${idx}`}
|
|
129
151
|
onClick={() => {
|
|
130
152
|
onSelectAgent?.(agent.connectionId);
|
|
131
153
|
onOpenAgentTab?.(agent);
|
|
@@ -156,11 +178,27 @@ export default function LeftSidebar({
|
|
|
156
178
|
{sessionTitle}
|
|
157
179
|
</span>
|
|
158
180
|
|
|
159
|
-
{/* Client Tag: EXT vs APP vs CLI */}
|
|
160
|
-
{
|
|
181
|
+
{/* Client Tag: CODEX vs EXT vs DESKTOP vs APP vs CLI */}
|
|
182
|
+
{isCodex ? (
|
|
183
|
+
<span
|
|
184
|
+
className={`shrink-0 text-[9px] font-bold px-1 rounded uppercase tracking-wider border ${
|
|
185
|
+
isExt
|
|
186
|
+
? "bg-sky-950/80 text-sky-300 border-sky-500/40"
|
|
187
|
+
: isDesktop || isApp
|
|
188
|
+
? "bg-teal-950/80 text-teal-300 border-teal-500/40"
|
|
189
|
+
: "bg-teal-950/80 text-teal-300 border-teal-500/40"
|
|
190
|
+
}`}
|
|
191
|
+
>
|
|
192
|
+
{isExt ? "EXT" : isDesktop || isApp ? "DESK" : "CLI"}
|
|
193
|
+
</span>
|
|
194
|
+
) : isExt ? (
|
|
161
195
|
<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
196
|
EXT
|
|
163
197
|
</span>
|
|
198
|
+
) : isDesktop ? (
|
|
199
|
+
<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">
|
|
200
|
+
DESK
|
|
201
|
+
</span>
|
|
164
202
|
) : isApp ? (
|
|
165
203
|
<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
204
|
APP
|
|
@@ -321,6 +359,39 @@ export default function LeftSidebar({
|
|
|
321
359
|
</div>
|
|
322
360
|
)}
|
|
323
361
|
|
|
362
|
+
{/* Claude Desktop */}
|
|
363
|
+
{groupedAgents.desktop?.length > 0 && (
|
|
364
|
+
<div className="mb-2">
|
|
365
|
+
<div className="px-3 py-1 text-[9px] font-bold uppercase tracking-wider text-orange-400/90 flex items-center gap-1">
|
|
366
|
+
<Monitor className="w-2.5 h-2.5" />
|
|
367
|
+
<span>Claude Desktop ({groupedAgents.desktop.length})</span>
|
|
368
|
+
</div>
|
|
369
|
+
{groupedAgents.desktop.map(renderAgentRow)}
|
|
370
|
+
</div>
|
|
371
|
+
)}
|
|
372
|
+
|
|
373
|
+
{/* Codex Desktop App */}
|
|
374
|
+
{groupedAgents.codexDesktop?.length > 0 && (
|
|
375
|
+
<div className="mb-2">
|
|
376
|
+
<div className="px-3 py-1 text-[9px] font-bold uppercase tracking-wider text-teal-400/90 flex items-center gap-1">
|
|
377
|
+
<Monitor className="w-2.5 h-2.5" />
|
|
378
|
+
<span>Codex Desktop App ({groupedAgents.codexDesktop.length})</span>
|
|
379
|
+
</div>
|
|
380
|
+
{groupedAgents.codexDesktop.map(renderAgentRow)}
|
|
381
|
+
</div>
|
|
382
|
+
)}
|
|
383
|
+
|
|
384
|
+
{/* Codex CLI */}
|
|
385
|
+
{groupedAgents.codexCli?.length > 0 && (
|
|
386
|
+
<div className="mb-2">
|
|
387
|
+
<div className="px-3 py-1 text-[9px] font-bold uppercase tracking-wider text-teal-400/90 flex items-center gap-1">
|
|
388
|
+
<TerminalSquare className="w-2.5 h-2.5" />
|
|
389
|
+
<span>Codex CLI ({groupedAgents.codexCli.length})</span>
|
|
390
|
+
</div>
|
|
391
|
+
{groupedAgents.codexCli.map(renderAgentRow)}
|
|
392
|
+
</div>
|
|
393
|
+
)}
|
|
394
|
+
|
|
324
395
|
{/* Gemini App Agents */}
|
|
325
396
|
{groupedAgents.geminiApp.length > 0 && (
|
|
326
397
|
<div className="mb-2">
|
|
@@ -423,6 +494,17 @@ export default function LeftSidebar({
|
|
|
423
494
|
<Folder className="w-3.5 h-3.5 text-amber-400 shrink-0" />
|
|
424
495
|
<span className="truncate font-mono text-[10px]">~/.claude/projects</span>
|
|
425
496
|
</div>
|
|
497
|
+
<div
|
|
498
|
+
onClick={() => {
|
|
499
|
+
setExplorerPath("~/.codex/sessions");
|
|
500
|
+
setActiveSidebarTab("files");
|
|
501
|
+
}}
|
|
502
|
+
className="flex items-center gap-2 text-slate-400 hover:text-teal-300 cursor-pointer p-1 rounded hover:bg-[#252526] transition-colors"
|
|
503
|
+
title="Click to browse Codex Sessions files"
|
|
504
|
+
>
|
|
505
|
+
<Folder className="w-3.5 h-3.5 text-teal-400 shrink-0" />
|
|
506
|
+
<span className="truncate font-mono text-[10px]">~/.codex/sessions</span>
|
|
507
|
+
</div>
|
|
426
508
|
</div>
|
|
427
509
|
)}
|
|
428
510
|
</div>
|
|
@@ -470,13 +552,13 @@ export default function LeftSidebar({
|
|
|
470
552
|
type="button"
|
|
471
553
|
onClick={onOpenStore}
|
|
472
554
|
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=
|
|
555
|
+
title={`Open Supporter Store: ${TOTAL_CATALOG_COUNT} Tech Items & 3D Effects`}
|
|
474
556
|
>
|
|
475
557
|
<div className="flex items-center gap-2">
|
|
476
558
|
<ShoppingBag className="w-4 h-4 text-amber-400" />
|
|
477
559
|
<div className="text-left">
|
|
478
560
|
<div className="font-bold text-white text-[11px] leading-tight">Supporter Store</div>
|
|
479
|
-
<div className="text-[10px] text-amber-400/80">
|
|
561
|
+
<div className="text-[10px] text-amber-400/80">{TOTAL_CATALOG_COUNT} Tech Items & 3D Effects</div>
|
|
480
562
|
</div>
|
|
481
563
|
</div>
|
|
482
564
|
<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>
|
|
@@ -69,7 +69,7 @@ export default function StatusBar({
|
|
|
69
69
|
<span>({selectedAgent.model || "gemini-3.8-flash"})</span>
|
|
70
70
|
</div>
|
|
71
71
|
) : (
|
|
72
|
-
<span>Ready · Real-time monitoring Antigravity
|
|
72
|
+
<span>Ready · Real-time monitoring Antigravity, Claude & Codex (CLI & Desktop)</span>
|
|
73
73
|
)}
|
|
74
74
|
</div>
|
|
75
75
|
|
|
@@ -15,6 +15,8 @@ import {
|
|
|
15
15
|
Coffee,
|
|
16
16
|
Palette,
|
|
17
17
|
Sparkles,
|
|
18
|
+
ListFilter,
|
|
19
|
+
Clock,
|
|
18
20
|
} from "lucide-react";
|
|
19
21
|
import LayoutToggles from "./LayoutToggles";
|
|
20
22
|
|
|
@@ -34,6 +36,12 @@ const PRESETS = [
|
|
|
34
36
|
|
|
35
37
|
export default function TitleBar({
|
|
36
38
|
stats = {},
|
|
39
|
+
traces = [],
|
|
40
|
+
totalCount = 0,
|
|
41
|
+
top = 20,
|
|
42
|
+
onTopChange,
|
|
43
|
+
timeframe = "24h",
|
|
44
|
+
onTimeframeChange,
|
|
37
45
|
mode = "live",
|
|
38
46
|
mockPreset = "cases",
|
|
39
47
|
onModeChange,
|
|
@@ -53,6 +61,8 @@ export default function TitleBar({
|
|
|
53
61
|
onToggleLeftSidebar,
|
|
54
62
|
onToggleBottomPanel,
|
|
55
63
|
onToggleRightSidebar,
|
|
64
|
+
isZenFullscreen = false,
|
|
65
|
+
onToggleZenFullscreen = null,
|
|
56
66
|
}) {
|
|
57
67
|
return (
|
|
58
68
|
<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">
|
|
@@ -101,7 +111,11 @@ export default function TitleBar({
|
|
|
101
111
|
className="hidden xl:flex items-center gap-1.5 bg-[#252526] hover:bg-[#2d2d2e] border border-[#333333] hover:border-[#007acc] px-2 py-0.5 rounded text-[11px] cursor-pointer transition-colors"
|
|
102
112
|
>
|
|
103
113
|
<span className="text-slate-400">Desks:</span>
|
|
104
|
-
<span className="font-bold text-slate-200">
|
|
114
|
+
<span className="font-bold text-slate-200">
|
|
115
|
+
{totalCount > 0 && traces.length > 0 && traces.length < totalCount
|
|
116
|
+
? `${traces.length}/${totalCount}`
|
|
117
|
+
: (stats?.agents ?? traces.length ?? 0)}
|
|
118
|
+
</span>
|
|
105
119
|
<span className="text-slate-600">|</span>
|
|
106
120
|
<span className="text-slate-400">Active:</span>
|
|
107
121
|
<span className="font-bold text-cyan-400">{stats?.busy ?? 0}</span>
|
|
@@ -110,6 +124,64 @@ export default function TitleBar({
|
|
|
110
124
|
<span className="font-bold text-emerald-400">{stats?.tokensLabel ?? "0k"}</span>
|
|
111
125
|
</div>
|
|
112
126
|
|
|
127
|
+
{/* Filter Controls: Top N & Timeframe */}
|
|
128
|
+
<div
|
|
129
|
+
data-testid="telemetry-filter-controls"
|
|
130
|
+
title="Filter active conversations by quantity and time range"
|
|
131
|
+
className="flex items-center rounded bg-[#252526] border border-[#333333] px-1.5 py-0.5 text-[11px] text-slate-300 gap-1.5 shadow-sm"
|
|
132
|
+
>
|
|
133
|
+
<div className="flex items-center gap-1 text-slate-400">
|
|
134
|
+
<ListFilter className="w-3 h-3 text-cyan-400 shrink-0" />
|
|
135
|
+
<span className="hidden 2xl:inline text-[10px] uppercase font-bold tracking-wider text-slate-400">Filter</span>
|
|
136
|
+
</div>
|
|
137
|
+
|
|
138
|
+
{/* Top N Dropdown */}
|
|
139
|
+
<select
|
|
140
|
+
data-testid="filter-top-select"
|
|
141
|
+
aria-label="Filter Top Conversations"
|
|
142
|
+
value={top}
|
|
143
|
+
onChange={(e) => onTopChange?.(e.target.value === "all" ? "all" : Number(e.target.value))}
|
|
144
|
+
className="bg-transparent text-[11px] text-slate-200 outline-none cursor-pointer hover:text-white font-medium pr-0.5"
|
|
145
|
+
>
|
|
146
|
+
<option value={10} className="bg-[#1e1e1e] text-slate-200">Top 10</option>
|
|
147
|
+
<option value={20} className="bg-[#1e1e1e] text-slate-200">Top 20</option>
|
|
148
|
+
<option value={30} className="bg-[#1e1e1e] text-slate-200">Top 30</option>
|
|
149
|
+
<option value={50} className="bg-[#1e1e1e] text-slate-200">Top 50</option>
|
|
150
|
+
<option value="all" className="bg-[#1e1e1e] text-slate-200">All Desks</option>
|
|
151
|
+
</select>
|
|
152
|
+
|
|
153
|
+
<span className="text-slate-600">|</span>
|
|
154
|
+
|
|
155
|
+
{/* Timeframe Dropdown */}
|
|
156
|
+
<div className="flex items-center gap-1">
|
|
157
|
+
<Clock className="w-3 h-3 text-amber-400 shrink-0" />
|
|
158
|
+
<select
|
|
159
|
+
data-testid="filter-timeframe-select"
|
|
160
|
+
aria-label="Filter Time Range"
|
|
161
|
+
value={timeframe}
|
|
162
|
+
onChange={(e) => onTimeframeChange?.(e.target.value)}
|
|
163
|
+
className="bg-transparent text-[11px] text-slate-200 outline-none cursor-pointer hover:text-white font-medium"
|
|
164
|
+
>
|
|
165
|
+
<option value="1h" className="bg-[#1e1e1e] text-slate-200">1h</option>
|
|
166
|
+
<option value="6h" className="bg-[#1e1e1e] text-slate-200">6h</option>
|
|
167
|
+
<option value="24h" className="bg-[#1e1e1e] text-slate-200">24h</option>
|
|
168
|
+
<option value="3d" className="bg-[#1e1e1e] text-slate-200">3d</option>
|
|
169
|
+
<option value="7d" className="bg-[#1e1e1e] text-slate-200">7d</option>
|
|
170
|
+
<option value="all" className="bg-[#1e1e1e] text-slate-200">All time</option>
|
|
171
|
+
</select>
|
|
172
|
+
</div>
|
|
173
|
+
|
|
174
|
+
{/* Filtered badge */}
|
|
175
|
+
{totalCount > 0 && traces.length > 0 && traces.length < totalCount && (
|
|
176
|
+
<span
|
|
177
|
+
title={`Showing ${traces.length} of ${totalCount} recorded conversations`}
|
|
178
|
+
className="hidden lg:inline-flex items-center px-1.5 py-0.2 rounded text-[10px] font-mono bg-cyan-950/60 text-cyan-300 border border-cyan-800/50"
|
|
179
|
+
>
|
|
180
|
+
{traces.length}/{totalCount}
|
|
181
|
+
</span>
|
|
182
|
+
)}
|
|
183
|
+
</div>
|
|
184
|
+
|
|
113
185
|
{/* Quick Reports Button */}
|
|
114
186
|
<button
|
|
115
187
|
onClick={onOpenReports}
|
|
@@ -239,7 +311,7 @@ export default function TitleBar({
|
|
|
239
311
|
{notifEnabled ? <Bell className="w-3 h-3" /> : <BellOff className="w-3 h-3" />}
|
|
240
312
|
</button>
|
|
241
313
|
|
|
242
|
-
{/* Layout Toggles (Left, Bottom, Right) */}
|
|
314
|
+
{/* Layout Toggles (Left, Bottom, Right, Chill Fullscreen) */}
|
|
243
315
|
<LayoutToggles
|
|
244
316
|
isLeftSidebarVisible={layout?.isLeftSidebarVisible}
|
|
245
317
|
isBottomPanelVisible={layout?.isBottomPanelVisible}
|
|
@@ -247,6 +319,8 @@ export default function TitleBar({
|
|
|
247
319
|
onToggleLeftSidebar={onToggleLeftSidebar}
|
|
248
320
|
onToggleBottomPanel={onToggleBottomPanel}
|
|
249
321
|
onToggleRightSidebar={onToggleRightSidebar}
|
|
322
|
+
isZenFullscreen={isZenFullscreen}
|
|
323
|
+
onToggleZenFullscreen={onToggleZenFullscreen}
|
|
250
324
|
/>
|
|
251
325
|
</div>
|
|
252
326
|
</header>
|