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
|
@@ -7,8 +7,32 @@ export async function GET(request) {
|
|
|
7
7
|
const { searchParams } = new URL(request.url);
|
|
8
8
|
const source = searchParams.get("source") || "live";
|
|
9
9
|
const mockPreset = searchParams.get("mockPreset") || searchParams.get("preset");
|
|
10
|
-
const
|
|
11
|
-
|
|
10
|
+
const rawHours = searchParams.get("hours");
|
|
11
|
+
let hours = 24;
|
|
12
|
+
if (rawHours !== null) {
|
|
13
|
+
if (rawHours === "0" || rawHours === "all") {
|
|
14
|
+
hours = 0;
|
|
15
|
+
} else {
|
|
16
|
+
const parsedHours = Number(rawHours);
|
|
17
|
+
if (!Number.isNaN(parsedHours) && parsedHours >= 0) {
|
|
18
|
+
hours = parsedHours;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const maxAgeMs = hours > 0 ? hours * 60 * 60 * 1000 : Infinity;
|
|
23
|
+
|
|
24
|
+
const rawLimit = searchParams.get("limit") || searchParams.get("top");
|
|
25
|
+
let limit = 20;
|
|
26
|
+
if (rawLimit !== null) {
|
|
27
|
+
if (rawLimit === "0" || rawLimit === "all") {
|
|
28
|
+
limit = 0;
|
|
29
|
+
} else {
|
|
30
|
+
const parsedLimit = Number(rawLimit);
|
|
31
|
+
if (!Number.isNaN(parsedLimit) && parsedLimit >= 0) {
|
|
32
|
+
limit = parsedLimit;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
12
36
|
|
|
13
37
|
const encoder = new TextEncoder();
|
|
14
38
|
|
|
@@ -30,24 +54,35 @@ export async function GET(request) {
|
|
|
30
54
|
|
|
31
55
|
if (source === "mock" || mockPreset) {
|
|
32
56
|
const presetConfig = MOCK_PRESETS[mockPreset] || MOCK_PRESETS.cases;
|
|
33
|
-
const
|
|
57
|
+
const rawTraces = generateMockTraces({
|
|
34
58
|
count: presetConfig.agents,
|
|
35
59
|
errorRatio: presetConfig.errorRatio,
|
|
36
60
|
cases: !!presetConfig.cases,
|
|
37
61
|
preset: mockPreset,
|
|
38
62
|
seed: 42,
|
|
39
63
|
});
|
|
64
|
+
const totalCount = rawTraces.length;
|
|
65
|
+
const traces = (limit > 0 && limit < totalCount) ? rawTraces.slice(0, limit) : rawTraces;
|
|
40
66
|
const providers = mockProviderDescriptors(traces);
|
|
41
|
-
send({
|
|
67
|
+
send({
|
|
68
|
+
traces,
|
|
69
|
+
totalCount,
|
|
70
|
+
providers,
|
|
71
|
+
timestamp: Date.now(),
|
|
72
|
+
mode: "mock",
|
|
73
|
+
preset: mockPreset || "cases",
|
|
74
|
+
activeAgents: traces.filter((t) => t.state === "streaming" || t.state === "pending").length,
|
|
75
|
+
});
|
|
42
76
|
return;
|
|
43
77
|
}
|
|
44
78
|
|
|
45
79
|
// Live Mode
|
|
46
80
|
try {
|
|
47
|
-
const { traces, errors } = await getLiveTraceSnapshot(false, maxAgeMs);
|
|
81
|
+
const { traces, totalCount, errors } = await getLiveTraceSnapshot(false, maxAgeMs, limit);
|
|
48
82
|
const providers = getProvidersFromTraces(traces);
|
|
49
83
|
send({
|
|
50
84
|
traces,
|
|
85
|
+
totalCount,
|
|
51
86
|
providers,
|
|
52
87
|
errors,
|
|
53
88
|
timestamp: Date.now(),
|
|
@@ -58,6 +93,7 @@ export async function GET(request) {
|
|
|
58
93
|
console.error("[SSE] Failed to fetch live traces:", err);
|
|
59
94
|
send({
|
|
60
95
|
traces: [],
|
|
96
|
+
totalCount: 0,
|
|
61
97
|
providers: [],
|
|
62
98
|
errors: [{ source: "telemetry", message: err.message || "Failed to read live traces" }],
|
|
63
99
|
timestamp: Date.now(),
|
package/src/app/chat/page.js
CHANGED
|
@@ -69,30 +69,30 @@ function StandaloneChatContent() {
|
|
|
69
69
|
};
|
|
70
70
|
|
|
71
71
|
return (
|
|
72
|
-
<div className="h-screen w-screen overflow-hidden bg-[
|
|
72
|
+
<div className="h-screen w-screen overflow-hidden bg-[var(--bg-workbench)] flex flex-col select-none text-[var(--text-main)] font-sans">
|
|
73
73
|
{/* Detached Window Title Bar (VS Code Auxiliary Window style) */}
|
|
74
|
-
<header className="h-[38px] min-h-[38px] bg-[
|
|
74
|
+
<header className="h-[38px] min-h-[38px] bg-[var(--bg-card)] border-b border-[var(--border-subtle)] px-3 flex items-center justify-between shrink-0 z-30">
|
|
75
75
|
{/* Left: Brand & Return Navigation */}
|
|
76
76
|
<div className="flex items-center gap-3">
|
|
77
77
|
<Link
|
|
78
78
|
href="/"
|
|
79
79
|
title="Back to Virtual Office"
|
|
80
|
-
className="flex items-center gap-1.5 text-xs text-
|
|
80
|
+
className="flex items-center gap-1.5 text-xs text-[var(--text-muted)] hover:text-[var(--text-bright)] transition-colors"
|
|
81
81
|
>
|
|
82
82
|
<ArrowLeft className="w-3.5 h-3.5" />
|
|
83
83
|
<span className="hidden sm:inline font-medium">Virtual Office</span>
|
|
84
84
|
</Link>
|
|
85
85
|
|
|
86
|
-
<span className="text-
|
|
86
|
+
<span className="text-[var(--border-card)]">|</span>
|
|
87
87
|
|
|
88
88
|
<div className="flex items-center gap-2">
|
|
89
|
-
<div className="w-5 h-5 rounded bg-[
|
|
90
|
-
<Bot className="w-3.5 h-3.5 text-[
|
|
89
|
+
<div className="w-5 h-5 rounded bg-[var(--accent-primary)]/20 border border-[var(--accent-primary)]/40 flex items-center justify-center">
|
|
90
|
+
<Bot className="w-3.5 h-3.5 text-[var(--accent-primary)]" />
|
|
91
91
|
</div>
|
|
92
|
-
<span className="text-xs font-bold text-
|
|
92
|
+
<span className="text-xs font-bold text-[var(--text-bright)] tracking-wide">
|
|
93
93
|
AGMon
|
|
94
94
|
</span>
|
|
95
|
-
<span className="text-[10px] bg-[
|
|
95
|
+
<span className="text-[10px] bg-[var(--bg-card-inner)] px-1.5 py-0.2 rounded border border-[var(--border-card)] text-[var(--text-muted)] hidden sm:inline">
|
|
96
96
|
Detached Window
|
|
97
97
|
</span>
|
|
98
98
|
</div>
|
|
@@ -100,18 +100,18 @@ function StandaloneChatContent() {
|
|
|
100
100
|
|
|
101
101
|
{/* Center: Agent Quick Switcher */}
|
|
102
102
|
{traces.length > 1 && (
|
|
103
|
-
<div className="flex items-center gap-1.5 bg-[
|
|
104
|
-
<Layers className="w-3 h-3 text-
|
|
103
|
+
<div className="flex items-center gap-1.5 bg-[var(--bg-card-inner)] border border-[var(--border-card)] rounded px-2 py-0.5 text-xs">
|
|
104
|
+
<Layers className="w-3 h-3 text-[var(--accent-secondary)] shrink-0" />
|
|
105
105
|
<select
|
|
106
106
|
value={activeId}
|
|
107
107
|
onChange={(e) => setSelectedId(e.target.value)}
|
|
108
|
-
className="bg-transparent text-
|
|
108
|
+
className="bg-transparent text-[var(--text-main)] text-xs font-mono outline-none cursor-pointer"
|
|
109
109
|
>
|
|
110
110
|
{traces.map((t) => (
|
|
111
111
|
<option
|
|
112
112
|
key={t.connectionId || t.traceId}
|
|
113
113
|
value={t.connectionId || t.traceId}
|
|
114
|
-
className="bg-[
|
|
114
|
+
className="bg-[var(--bg-card)] text-[var(--text-main)]"
|
|
115
115
|
>
|
|
116
116
|
{t.account || t.connectionId} ({t.model || "gemini"})
|
|
117
117
|
</option>
|
|
@@ -125,7 +125,7 @@ function StandaloneChatContent() {
|
|
|
125
125
|
{/* Fullscreen Toggle */}
|
|
126
126
|
<button
|
|
127
127
|
onClick={toggleBrowserFullscreen}
|
|
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
|
title={isBrowserFullscreen ? "Exit Fullscreen" : "Fullscreen (F11)"}
|
|
130
130
|
>
|
|
131
131
|
{isBrowserFullscreen ? (
|
|
@@ -138,7 +138,7 @@ function StandaloneChatContent() {
|
|
|
138
138
|
{/* Close Window */}
|
|
139
139
|
<button
|
|
140
140
|
onClick={handleCloseWindow}
|
|
141
|
-
className="p-1 rounded text-
|
|
141
|
+
className="p-1 rounded text-[var(--text-muted)] hover:text-rose-400 hover:bg-[var(--bg-hover)] transition-colors cursor-pointer"
|
|
142
142
|
title="Close auxiliary window"
|
|
143
143
|
>
|
|
144
144
|
<X className="w-4 h-4" />
|
package/src/app/globals.css
CHANGED
|
@@ -38,6 +38,20 @@
|
|
|
38
38
|
--text-main: #cccccc;
|
|
39
39
|
--text-muted: #858585;
|
|
40
40
|
--text-bright: #ffffff;
|
|
41
|
+
--text-on-accent: #ffffff;
|
|
42
|
+
|
|
43
|
+
/* Chat Semantics */
|
|
44
|
+
--bg-chat-user: rgba(8, 47, 73, 0.6);
|
|
45
|
+
--border-chat-user: rgba(6, 182, 212, 0.35);
|
|
46
|
+
--text-chat-user: #67e8f9;
|
|
47
|
+
--text-chat-user-body: #f1f5f9;
|
|
48
|
+
--bg-chat-agent: #1e1e1e;
|
|
49
|
+
--border-chat-agent: #2b2b2b;
|
|
50
|
+
--bg-chat-tool: #141414;
|
|
51
|
+
--border-chat-tool: #2b2b2b;
|
|
52
|
+
--bg-chat-code: #141414;
|
|
53
|
+
--text-chat-code: #e2e8f0;
|
|
54
|
+
--bg-input: #252526;
|
|
41
55
|
}
|
|
42
56
|
|
|
43
57
|
/* 1. One Dark Pro */
|
|
@@ -61,6 +75,20 @@
|
|
|
61
75
|
--text-main: #abb2bf;
|
|
62
76
|
--text-muted: #5c6370;
|
|
63
77
|
--text-bright: #e5e5e5;
|
|
78
|
+
--text-on-accent: #ffffff;
|
|
79
|
+
|
|
80
|
+
/* Chat Semantics */
|
|
81
|
+
--bg-chat-user: #21252b;
|
|
82
|
+
--border-chat-user: rgba(97, 175, 239, 0.4);
|
|
83
|
+
--text-chat-user: #61afef;
|
|
84
|
+
--text-chat-user-body: #e5e5e5;
|
|
85
|
+
--bg-chat-agent: #282c34;
|
|
86
|
+
--border-chat-agent: #353b45;
|
|
87
|
+
--bg-chat-tool: #1e2227;
|
|
88
|
+
--border-chat-tool: #181a1f;
|
|
89
|
+
--bg-chat-code: #1e2227;
|
|
90
|
+
--text-chat-code: #abb2bf;
|
|
91
|
+
--bg-input: #21252b;
|
|
64
92
|
}
|
|
65
93
|
|
|
66
94
|
/* 2. Tokyo Night */
|
|
@@ -84,6 +112,20 @@
|
|
|
84
112
|
--text-main: #a9b1d6;
|
|
85
113
|
--text-muted: #565f89;
|
|
86
114
|
--text-bright: #c0caf5;
|
|
115
|
+
--text-on-accent: #ffffff;
|
|
116
|
+
|
|
117
|
+
/* Chat Semantics */
|
|
118
|
+
--bg-chat-user: #1f2335;
|
|
119
|
+
--border-chat-user: rgba(122, 162, 247, 0.4);
|
|
120
|
+
--text-chat-user: #7aa2f7;
|
|
121
|
+
--text-chat-user-body: #c0caf5;
|
|
122
|
+
--bg-chat-agent: #1a1b26;
|
|
123
|
+
--border-chat-agent: #292e42;
|
|
124
|
+
--bg-chat-tool: #16161e;
|
|
125
|
+
--border-chat-tool: #292e42;
|
|
126
|
+
--bg-chat-code: #13141c;
|
|
127
|
+
--text-chat-code: #a9b1d6;
|
|
128
|
+
--bg-input: #1f2335;
|
|
87
129
|
}
|
|
88
130
|
|
|
89
131
|
/* 3. GitHub Dark */
|
|
@@ -107,6 +149,20 @@
|
|
|
107
149
|
--text-main: #c9d1d9;
|
|
108
150
|
--text-muted: #8b949e;
|
|
109
151
|
--text-bright: #f0f6fc;
|
|
152
|
+
--text-on-accent: #ffffff;
|
|
153
|
+
|
|
154
|
+
/* Chat Semantics */
|
|
155
|
+
--bg-chat-user: #161b22;
|
|
156
|
+
--border-chat-user: rgba(47, 129, 247, 0.4);
|
|
157
|
+
--text-chat-user: #58a6ff;
|
|
158
|
+
--text-chat-user-body: #f0f6fc;
|
|
159
|
+
--bg-chat-agent: #161b22;
|
|
160
|
+
--border-chat-agent: #30363d;
|
|
161
|
+
--bg-chat-tool: #0d1117;
|
|
162
|
+
--border-chat-tool: #21262d;
|
|
163
|
+
--bg-chat-code: #0a0c10;
|
|
164
|
+
--text-chat-code: #c9d1d9;
|
|
165
|
+
--bg-input: #0d1117;
|
|
110
166
|
}
|
|
111
167
|
|
|
112
168
|
/* 4. Monokai Pro */
|
|
@@ -130,6 +186,20 @@
|
|
|
130
186
|
--text-main: #fcfcfa;
|
|
131
187
|
--text-muted: #939293;
|
|
132
188
|
--text-bright: #ffffff;
|
|
189
|
+
--text-on-accent: #19181a;
|
|
190
|
+
|
|
191
|
+
/* Chat Semantics */
|
|
192
|
+
--bg-chat-user: #2d2a2e;
|
|
193
|
+
--border-chat-user: rgba(255, 216, 102, 0.4);
|
|
194
|
+
--text-chat-user: #ffd866;
|
|
195
|
+
--text-chat-user-body: #fcfcfa;
|
|
196
|
+
--bg-chat-agent: #221f22;
|
|
197
|
+
--border-chat-agent: #403e41;
|
|
198
|
+
--bg-chat-tool: #19181a;
|
|
199
|
+
--border-chat-tool: #403e41;
|
|
200
|
+
--bg-chat-code: #171618;
|
|
201
|
+
--text-chat-code: #fcfcfa;
|
|
202
|
+
--bg-input: #2d2a2e;
|
|
133
203
|
}
|
|
134
204
|
|
|
135
205
|
/* 5. Light+ (VS Code Modern) */
|
|
@@ -154,6 +224,20 @@
|
|
|
154
224
|
--text-main: #24292f;
|
|
155
225
|
--text-muted: #6e7781;
|
|
156
226
|
--text-bright: #09090b;
|
|
227
|
+
--text-on-accent: #ffffff;
|
|
228
|
+
|
|
229
|
+
/* Chat Semantics for Light Mode */
|
|
230
|
+
--bg-chat-user: #e0f2fe;
|
|
231
|
+
--border-chat-user: #7dd3fc;
|
|
232
|
+
--text-chat-user: #0284c7;
|
|
233
|
+
--text-chat-user-body: #0f172a;
|
|
234
|
+
--bg-chat-agent: #ffffff;
|
|
235
|
+
--border-chat-agent: #e2e8f0;
|
|
236
|
+
--bg-chat-tool: #f8fafc;
|
|
237
|
+
--border-chat-tool: #e2e8f0;
|
|
238
|
+
--bg-chat-code: #f1f5f9;
|
|
239
|
+
--text-chat-code: #0f172a;
|
|
240
|
+
--bg-input: #ffffff;
|
|
157
241
|
}
|
|
158
242
|
|
|
159
243
|
html {
|
|
@@ -206,6 +290,16 @@ samp {
|
|
|
206
290
|
.bg-\[\#37373d\] { background-color: var(--bg-selection) !important; }
|
|
207
291
|
.bg-\[\#007acc\] { background-color: var(--accent-primary) !important; }
|
|
208
292
|
|
|
293
|
+
/* Dynamic mappings for auxiliary dark shades */
|
|
294
|
+
.bg-\[\#141414\] { background-color: var(--bg-chat-code) !important; }
|
|
295
|
+
.bg-\[\#121214\] { background-color: var(--bg-workbench) !important; }
|
|
296
|
+
.bg-\[\#18181b\] { background-color: var(--bg-card) !important; }
|
|
297
|
+
.bg-\[\#1f1f23\] { background-color: var(--bg-card-inner) !important; }
|
|
298
|
+
.bg-\[\#27272a\] { background-color: var(--bg-hover) !important; }
|
|
299
|
+
.bg-\[\#17171e\] { background-color: var(--bg-card) !important; }
|
|
300
|
+
.bg-\[\#242632\] { background-color: var(--bg-card-inner) !important; }
|
|
301
|
+
.bg-\[\#2e3142\] { background-color: var(--bg-hover) !important; }
|
|
302
|
+
|
|
209
303
|
.hover\:bg-\[\#2a2d2e\]:hover { background-color: var(--bg-hover) !important; }
|
|
210
304
|
.hover\:bg-\[\#333333\]:hover { background-color: var(--bg-hover) !important; }
|
|
211
305
|
.hover\:bg-\[\#2d2d2e\]:hover { background-color: var(--bg-hover) !important; }
|
|
@@ -216,11 +310,45 @@ samp {
|
|
|
216
310
|
.border-\[\#3e3e42\] { border-color: var(--border-card) !important; }
|
|
217
311
|
.border-\[\#1e1e1e\] { border-color: var(--border-subtle) !important; }
|
|
218
312
|
.border-\[\#007acc\] { border-color: var(--border-focus) !important; }
|
|
313
|
+
.border-\[\#27272a\] { border-color: var(--border-subtle) !important; }
|
|
314
|
+
.border-\[\#333338\] { border-color: var(--border-card) !important; }
|
|
315
|
+
.border-\[\#2b2b36\] { border-color: var(--border-card) !important; }
|
|
316
|
+
.border-\[\#3b3e52\] { border-color: var(--border-card) !important; }
|
|
219
317
|
|
|
220
318
|
.text-\[\#cccccc\] { color: var(--text-main) !important; }
|
|
221
319
|
.text-\[\#858585\] { color: var(--text-muted) !important; }
|
|
222
320
|
.text-\[\#007acc\] { color: var(--accent-primary) !important; }
|
|
223
321
|
|
|
322
|
+
/* Light+ theme adaptations for slate elements & text contrast */
|
|
323
|
+
[data-theme="light-plus"] .text-slate-100,
|
|
324
|
+
[data-theme="light-plus"] .text-slate-200 {
|
|
325
|
+
color: var(--text-bright) !important;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
[data-theme="light-plus"] .text-slate-300 {
|
|
329
|
+
color: var(--text-main) !important;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
[data-theme="light-plus"] .text-slate-400 {
|
|
333
|
+
color: var(--text-muted) !important;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
[data-theme="light-plus"] .text-white:not([class*="bg-indigo-"]):not([class*="bg-cyan-"]):not([class*="bg-sky-"]):not([class*="bg-emerald-"]):not([class*="bg-rose-"]):not([class*="bg-blue-"]):not([class*="bg-purple-"]):not([class*="bg-[#007acc]"]):not([class*="accent-primary"]):not([class*="bg-gradient-"]):not(.keep-white) {
|
|
337
|
+
color: var(--text-bright) !important;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/* Light mode selection and input styling */
|
|
341
|
+
[data-theme="light-plus"] select {
|
|
342
|
+
background-color: var(--bg-card) !important;
|
|
343
|
+
color: var(--text-main) !important;
|
|
344
|
+
border-color: var(--border-card) !important;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
[data-theme="light-plus"] select option {
|
|
348
|
+
background-color: var(--bg-card) !important;
|
|
349
|
+
color: var(--text-main) !important;
|
|
350
|
+
}
|
|
351
|
+
|
|
224
352
|
/* Global cursor: pointer for all buttons, interactive controls, and action elements */
|
|
225
353
|
button:not(:disabled),
|
|
226
354
|
[role="button"]:not([aria-disabled="true"]),
|
package/src/app/layout.js
CHANGED
|
@@ -26,7 +26,7 @@ export const viewport = {
|
|
|
26
26
|
|
|
27
27
|
export default function RootLayout({ children }) {
|
|
28
28
|
return (
|
|
29
|
-
<html lang="en" className="dark">
|
|
29
|
+
<html lang="en" className="dark" suppressHydrationWarning>
|
|
30
30
|
<head>
|
|
31
31
|
<link rel="manifest" href="/manifest.json" />
|
|
32
32
|
<link rel="apple-touch-icon" href="/icons/icon.svg" />
|
|
@@ -38,8 +38,14 @@ export default function RootLayout({ children }) {
|
|
|
38
38
|
href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&family=Roboto:wght@400;500;700&display=swap"
|
|
39
39
|
rel="stylesheet"
|
|
40
40
|
/>
|
|
41
|
+
<script
|
|
42
|
+
suppressHydrationWarning
|
|
43
|
+
dangerouslySetInnerHTML={{
|
|
44
|
+
__html: `(function(){try{var raw=localStorage.getItem("agmon_theme_settings");var t="dark-plus";var fz="13";var uf="";var cf="";if(raw){var s=JSON.parse(raw);if(s.theme)t=s.theme;if(s.fontSize)fz=s.fontSize;if(s.uiFont)uf=s.uiFont;if(s.codeFont)cf=s.codeFont;}document.documentElement.setAttribute("data-theme",t);if(t==="light-plus"){document.documentElement.classList.remove("dark");document.documentElement.classList.add("light");}else{document.documentElement.classList.remove("light");document.documentElement.classList.add("dark");}document.documentElement.style.setProperty("--font-size-ui",fz+"px");document.documentElement.style.setProperty("--font-size-base",fz+"px");}catch(e){}})();`,
|
|
45
|
+
}}
|
|
46
|
+
/>
|
|
41
47
|
</head>
|
|
42
|
-
<body className="antialiased bg-[
|
|
48
|
+
<body className="antialiased bg-[var(--bg-workbench)] text-[var(--text-main)] select-none">
|
|
43
49
|
<PwaRegister />
|
|
44
50
|
{children}
|
|
45
51
|
</body>
|
package/src/app/page.js
CHANGED
|
@@ -26,7 +26,18 @@ export default function FactoryPage() {
|
|
|
26
26
|
}
|
|
27
27
|
}, []);
|
|
28
28
|
|
|
29
|
-
const {
|
|
29
|
+
const {
|
|
30
|
+
traces,
|
|
31
|
+
totalCount,
|
|
32
|
+
top,
|
|
33
|
+
setTop,
|
|
34
|
+
timeframe,
|
|
35
|
+
setTimeframe,
|
|
36
|
+
connected,
|
|
37
|
+
live,
|
|
38
|
+
isRefreshing,
|
|
39
|
+
refresh,
|
|
40
|
+
} = useFactoryTraces({
|
|
30
41
|
mode,
|
|
31
42
|
preset: mockPreset,
|
|
32
43
|
});
|
|
@@ -34,10 +45,15 @@ export default function FactoryPage() {
|
|
|
34
45
|
const office = useMemo(() => buildOffice(traces), [traces]);
|
|
35
46
|
|
|
36
47
|
return (
|
|
37
|
-
<main className="h-screen w-screen overflow-hidden bg-[
|
|
48
|
+
<main className="h-screen w-screen overflow-hidden bg-[var(--bg-workbench)]">
|
|
38
49
|
<UpdateNotification />
|
|
39
50
|
<VSCodeWorkbench
|
|
40
51
|
traces={traces}
|
|
52
|
+
totalCount={totalCount}
|
|
53
|
+
top={top}
|
|
54
|
+
onTopChange={setTop}
|
|
55
|
+
timeframe={timeframe}
|
|
56
|
+
onTimeframeChange={setTimeframe}
|
|
41
57
|
office={office}
|
|
42
58
|
mode={mode}
|
|
43
59
|
mockPreset={mockPreset}
|
|
@@ -36,18 +36,18 @@ export default function ChatMessageItem({ turn, agentColor = "38bdf8", filter =
|
|
|
36
36
|
id={`chat-turn-${turn.id}`}
|
|
37
37
|
className="flex gap-3 justify-end my-4 animate-in fade-in slide-in-from-bottom-1 scroll-mt-20"
|
|
38
38
|
>
|
|
39
|
-
<div className="max-w-[85%] rounded-2xl rounded-tr-sm bg-
|
|
40
|
-
<div className="flex items-center justify-between gap-2 mb-1.5 text-[11px] text-
|
|
39
|
+
<div className="max-w-[85%] rounded-2xl rounded-tr-sm bg-[var(--bg-chat-user)] border border-[var(--border-chat-user)] p-3.5 shadow-lg">
|
|
40
|
+
<div className="flex items-center justify-between gap-2 mb-1.5 text-[11px] text-[var(--text-chat-user)]">
|
|
41
41
|
<span className="font-semibold uppercase tracking-wider">User Request</span>
|
|
42
|
-
<span className="font-mono text-[10px]
|
|
42
|
+
<span className="font-mono text-[10px] opacity-75">{formatTime(turn.timestamp)}</span>
|
|
43
43
|
</div>
|
|
44
|
-
<div className="text-
|
|
44
|
+
<div className="text-[var(--text-chat-user-body)] text-sm whitespace-pre-wrap leading-relaxed">
|
|
45
45
|
{turn.content}
|
|
46
46
|
</div>
|
|
47
47
|
|
|
48
48
|
{/* User Attached Media / Images */}
|
|
49
49
|
{Array.isArray(turn.media) && turn.media.length > 0 && (
|
|
50
|
-
<div className="flex flex-wrap gap-2 mt-2 pt-2 border-t border-
|
|
50
|
+
<div className="flex flex-wrap gap-2 mt-2 pt-2 border-t border-[var(--border-chat-user)]">
|
|
51
51
|
{turn.media.map((med, mIdx) => {
|
|
52
52
|
const src = med.uri
|
|
53
53
|
? `/api/media?path=${encodeURIComponent(med.uri)}`
|
|
@@ -56,7 +56,7 @@ export default function ChatMessageItem({ turn, agentColor = "38bdf8", filter =
|
|
|
56
56
|
<div
|
|
57
57
|
key={mIdx}
|
|
58
58
|
onClick={() => onImageClick?.({ src, alt: `User Attachment ${mIdx + 1}` })}
|
|
59
|
-
className="group relative cursor-pointer overflow-hidden rounded-lg border border-
|
|
59
|
+
className="group relative cursor-pointer overflow-hidden rounded-lg border border-[var(--border-chat-user)] bg-black/40 shadow hover:border-[var(--accent-secondary)] transition-colors"
|
|
60
60
|
>
|
|
61
61
|
{/* eslint-disable-next-line @next/next/no-img-element */}
|
|
62
62
|
<img
|
|
@@ -74,8 +74,8 @@ export default function ChatMessageItem({ turn, agentColor = "38bdf8", filter =
|
|
|
74
74
|
</div>
|
|
75
75
|
)}
|
|
76
76
|
</div>
|
|
77
|
-
<div className="w-8 h-8 rounded-full bg-
|
|
78
|
-
<User className="w-4 h-4
|
|
77
|
+
<div className="w-8 h-8 rounded-full bg-[var(--bg-chat-user)] border border-[var(--border-chat-user)] flex items-center justify-center shrink-0 shadow-md text-[var(--text-chat-user)]">
|
|
78
|
+
<User className="w-4 h-4" />
|
|
79
79
|
</div>
|
|
80
80
|
</div>
|
|
81
81
|
);
|
|
@@ -98,17 +98,17 @@ export default function ChatMessageItem({ turn, agentColor = "38bdf8", filter =
|
|
|
98
98
|
<Bot className="w-4 h-4" style={{ color: hexColor }} />
|
|
99
99
|
</div>
|
|
100
100
|
|
|
101
|
-
<div className="flex-1 min-w-0 max-w-[92%] rounded-2xl rounded-tl-sm bg-
|
|
101
|
+
<div className="flex-1 min-w-0 max-w-[92%] rounded-2xl rounded-tl-sm bg-[var(--bg-chat-agent)] border border-[var(--border-chat-agent)] p-4 shadow-xl">
|
|
102
102
|
{/* Header */}
|
|
103
|
-
<div className="flex items-center justify-between gap-2 mb-2 pb-1.5 border-b border-
|
|
104
|
-
<div className="flex items-center gap-1.5 font-semibold text-
|
|
103
|
+
<div className="flex items-center justify-between gap-2 mb-2 pb-1.5 border-b border-[var(--border-subtle)] text-[11px]">
|
|
104
|
+
<div className="flex items-center gap-1.5 font-semibold text-[var(--text-bright)]">
|
|
105
105
|
<span
|
|
106
106
|
className="inline-block w-2 h-2 rounded-full"
|
|
107
107
|
style={{ backgroundColor: hexColor }}
|
|
108
108
|
/>
|
|
109
109
|
<span>Agent Assistant</span>
|
|
110
110
|
</div>
|
|
111
|
-
<span className="font-mono text-[10px] text-
|
|
111
|
+
<span className="font-mono text-[10px] text-[var(--text-muted)]">{formatTime(turn.timestamp)}</span>
|
|
112
112
|
</div>
|
|
113
113
|
|
|
114
114
|
{/* 1. Thinking / Chain of Thought */}
|
|
@@ -39,15 +39,15 @@ export default function CodeBlock({ language = "text", code = "" }) {
|
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
return (
|
|
42
|
-
<div className="my-3 rounded-lg border border-
|
|
42
|
+
<div className="my-3 rounded-lg border border-[var(--border-card)] bg-[var(--bg-chat-code)] overflow-hidden shadow-md text-xs font-mono">
|
|
43
43
|
{/* Header bar */}
|
|
44
|
-
<div className="flex items-center justify-between px-3 py-1.5 bg-
|
|
45
|
-
<span className="font-semibold uppercase tracking-wider text-
|
|
44
|
+
<div className="flex items-center justify-between px-3 py-1.5 bg-[var(--bg-card-inner)] border-b border-[var(--border-subtle)] text-[11px] text-[var(--text-muted)]">
|
|
45
|
+
<span className="font-semibold uppercase tracking-wider text-[var(--text-bright)]">
|
|
46
46
|
{cleanLang || "code"}
|
|
47
47
|
</span>
|
|
48
48
|
<button
|
|
49
49
|
onClick={handleCopy}
|
|
50
|
-
className="flex items-center gap-1 px-2 py-0.5 rounded hover:bg-
|
|
50
|
+
className="flex items-center gap-1 px-2 py-0.5 rounded hover:bg-[var(--bg-hover)] hover:text-[var(--text-bright)] transition-colors text-[var(--text-muted)] cursor-pointer"
|
|
51
51
|
title="Copy code"
|
|
52
52
|
>
|
|
53
53
|
{copied ? (
|
|
@@ -65,7 +65,7 @@ export default function CodeBlock({ language = "text", code = "" }) {
|
|
|
65
65
|
</div>
|
|
66
66
|
|
|
67
67
|
{/* Code body */}
|
|
68
|
-
<pre className="p-3 overflow-x-auto text-
|
|
68
|
+
<pre className="p-3 overflow-x-auto text-[var(--text-chat-code)] leading-relaxed font-mono whitespace-pre text-[12px]">
|
|
69
69
|
<code dangerouslySetInnerHTML={{ __html: highlighted }} />
|
|
70
70
|
</pre>
|
|
71
71
|
</div>
|
|
@@ -132,13 +132,13 @@ export default function DiffViewer({
|
|
|
132
132
|
};
|
|
133
133
|
|
|
134
134
|
return (
|
|
135
|
-
<div className="my-2 rounded-xl border border-
|
|
135
|
+
<div className="my-2 rounded-xl border border-[var(--border-card)] bg-[var(--bg-chat-code)] overflow-hidden shadow-lg font-mono text-[11px]">
|
|
136
136
|
{/* Diff Header */}
|
|
137
|
-
<div className="flex items-center justify-between px-3 py-2 bg-
|
|
137
|
+
<div className="flex items-center justify-between px-3 py-2 bg-[var(--bg-card-inner)] border-b border-[var(--border-subtle)]">
|
|
138
138
|
<div className="flex items-center gap-2 min-w-0">
|
|
139
139
|
<FileDiff className="w-3.5 h-3.5 text-cyan-400 shrink-0" />
|
|
140
140
|
{filePath && (
|
|
141
|
-
<span className="text-
|
|
141
|
+
<span className="text-[var(--text-bright)] font-semibold truncate text-[11px]">{filePath}</span>
|
|
142
142
|
)}
|
|
143
143
|
<div className="flex items-center gap-1.5 text-[10px]">
|
|
144
144
|
<span className="px-1.5 py-0.5 rounded bg-emerald-950/70 text-emerald-400 border border-emerald-800/60 font-bold">
|
|
@@ -152,14 +152,14 @@ export default function DiffViewer({
|
|
|
152
152
|
|
|
153
153
|
<div className="flex items-center gap-1.5 shrink-0">
|
|
154
154
|
{/* Mode Switcher */}
|
|
155
|
-
<div className="flex items-center gap-0.5 bg-
|
|
155
|
+
<div className="flex items-center gap-0.5 bg-[var(--bg-card)] p-0.5 rounded-lg border border-[var(--border-card)]">
|
|
156
156
|
<button
|
|
157
157
|
onClick={() => setViewMode("unified")}
|
|
158
158
|
title="Unified View (Inline)"
|
|
159
159
|
className={`p-1 rounded flex items-center gap-1 text-[10px] cursor-pointer transition-colors ${
|
|
160
160
|
viewMode === "unified"
|
|
161
|
-
? "bg-
|
|
162
|
-
: "text-
|
|
161
|
+
? "bg-[var(--bg-selection)] text-[var(--accent-secondary)] font-semibold"
|
|
162
|
+
: "text-[var(--text-muted)] hover:text-[var(--text-bright)]"
|
|
163
163
|
}`}
|
|
164
164
|
>
|
|
165
165
|
<AlignJustify className="w-3 h-3" />
|
|
@@ -170,8 +170,8 @@ export default function DiffViewer({
|
|
|
170
170
|
title="Split View (Side-by-side)"
|
|
171
171
|
className={`p-1 rounded flex items-center gap-1 text-[10px] cursor-pointer transition-colors ${
|
|
172
172
|
viewMode === "split"
|
|
173
|
-
? "bg-
|
|
174
|
-
: "text-
|
|
173
|
+
? "bg-[var(--bg-selection)] text-[var(--accent-secondary)] font-semibold"
|
|
174
|
+
: "text-[var(--text-muted)] hover:text-[var(--text-bright)]"
|
|
175
175
|
}`}
|
|
176
176
|
>
|
|
177
177
|
<Columns className="w-3 h-3" />
|
|
@@ -182,7 +182,7 @@ export default function DiffViewer({
|
|
|
182
182
|
<button
|
|
183
183
|
onClick={handleCopyUnified}
|
|
184
184
|
title="Copy Unified Diff"
|
|
185
|
-
className="flex items-center gap-1 px-2 py-1 rounded bg-
|
|
185
|
+
className="flex items-center gap-1 px-2 py-1 rounded bg-[var(--bg-card)] hover:bg-[var(--bg-hover)] text-[var(--text-muted)] hover:text-[var(--text-bright)] border border-[var(--border-subtle)] transition-colors cursor-pointer text-[10px]"
|
|
186
186
|
>
|
|
187
187
|
{copied ? <Check className="w-3 h-3 text-emerald-400" /> : <Copy className="w-3 h-3" />}
|
|
188
188
|
<span>{copied ? "Copied" : "Copy"}</span>
|
|
@@ -192,7 +192,7 @@ export default function DiffViewer({
|
|
|
192
192
|
|
|
193
193
|
{/* Diff Body */}
|
|
194
194
|
{viewMode === "unified" ? (
|
|
195
|
-
<div className="overflow-x-auto max-h-[380px] divide-y divide-
|
|
195
|
+
<div className="overflow-x-auto max-h-[380px] divide-y divide-[var(--border-subtle)]">
|
|
196
196
|
{lineDiffs.map((line, idx) => {
|
|
197
197
|
const isAdd = line.type === "add";
|
|
198
198
|
const isDel = line.type === "del";
|
|
@@ -202,24 +202,24 @@ export default function DiffViewer({
|
|
|
202
202
|
key={idx}
|
|
203
203
|
className={`flex items-start px-2 py-0.5 leading-5 select-text ${
|
|
204
204
|
isAdd
|
|
205
|
-
? "bg-emerald-950/30 text-emerald-
|
|
205
|
+
? "bg-emerald-950/30 text-emerald-400"
|
|
206
206
|
: isDel
|
|
207
|
-
? "bg-rose-950/30 text-rose-
|
|
208
|
-
: "text-
|
|
207
|
+
? "bg-rose-950/30 text-rose-400"
|
|
208
|
+
: "text-[var(--text-main)] hover:bg-[var(--bg-hover)]"
|
|
209
209
|
}`}
|
|
210
210
|
>
|
|
211
211
|
{/* Old line num */}
|
|
212
|
-
<span className="w-9 shrink-0 text-right pr-2 text-
|
|
212
|
+
<span className="w-9 shrink-0 text-right pr-2 text-[var(--text-muted)] opacity-60 select-none">
|
|
213
213
|
{line.oldNum}
|
|
214
214
|
</span>
|
|
215
215
|
{/* New line num */}
|
|
216
|
-
<span className="w-9 shrink-0 text-right pr-2 text-
|
|
216
|
+
<span className="w-9 shrink-0 text-right pr-2 text-[var(--text-muted)] opacity-60 select-none">
|
|
217
217
|
{line.newNum}
|
|
218
218
|
</span>
|
|
219
219
|
{/* Prefix */}
|
|
220
220
|
<span
|
|
221
221
|
className={`w-4 shrink-0 text-center font-bold select-none ${
|
|
222
|
-
isAdd ? "text-emerald-400" : isDel ? "text-rose-400" : "text-
|
|
222
|
+
isAdd ? "text-emerald-400" : isDel ? "text-rose-400" : "text-[var(--text-muted)] opacity-60"
|
|
223
223
|
}`}
|
|
224
224
|
>
|
|
225
225
|
{isAdd ? "+" : isDel ? "-" : " "}
|
|
@@ -232,21 +232,21 @@ export default function DiffViewer({
|
|
|
232
232
|
</div>
|
|
233
233
|
) : (
|
|
234
234
|
/* Split Side-by-Side View */
|
|
235
|
-
<div className="grid grid-cols-2 divide-x divide-
|
|
235
|
+
<div className="grid grid-cols-2 divide-x divide-[var(--border-subtle)] overflow-x-auto max-h-[380px]">
|
|
236
236
|
{/* Left: Original */}
|
|
237
|
-
<div className="divide-y divide-
|
|
237
|
+
<div className="divide-y divide-[var(--border-subtle)]">
|
|
238
238
|
{splitLines.left.map((line, idx) => (
|
|
239
239
|
<div
|
|
240
240
|
key={idx}
|
|
241
241
|
className={`flex items-start px-2 py-0.5 leading-5 select-text min-h-[20px] ${
|
|
242
242
|
line.type === "del"
|
|
243
|
-
? "bg-rose-950/30 text-rose-
|
|
243
|
+
? "bg-rose-950/30 text-rose-400"
|
|
244
244
|
: line.type === "empty"
|
|
245
|
-
? "bg-
|
|
246
|
-
: "text-
|
|
245
|
+
? "bg-[var(--bg-card-inner)] opacity-40"
|
|
246
|
+
: "text-[var(--text-main)]"
|
|
247
247
|
}`}
|
|
248
248
|
>
|
|
249
|
-
<span className="w-8 shrink-0 text-right pr-2 text-
|
|
249
|
+
<span className="w-8 shrink-0 text-right pr-2 text-[var(--text-muted)] opacity-60 select-none text-[10px]">
|
|
250
250
|
{line.num || ""}
|
|
251
251
|
</span>
|
|
252
252
|
<span className="w-3 shrink-0 text-center text-rose-400 select-none">
|
|
@@ -258,19 +258,19 @@ export default function DiffViewer({
|
|
|
258
258
|
</div>
|
|
259
259
|
|
|
260
260
|
{/* Right: Modified */}
|
|
261
|
-
<div className="divide-y divide-
|
|
261
|
+
<div className="divide-y divide-[var(--border-subtle)]">
|
|
262
262
|
{splitLines.right.map((line, idx) => (
|
|
263
263
|
<div
|
|
264
264
|
key={idx}
|
|
265
265
|
className={`flex items-start px-2 py-0.5 leading-5 select-text min-h-[20px] ${
|
|
266
266
|
line.type === "add"
|
|
267
|
-
? "bg-emerald-950/30 text-emerald-
|
|
267
|
+
? "bg-emerald-950/30 text-emerald-400"
|
|
268
268
|
: line.type === "empty"
|
|
269
|
-
? "bg-
|
|
270
|
-
: "text-
|
|
269
|
+
? "bg-[var(--bg-card-inner)] opacity-40"
|
|
270
|
+
: "text-[var(--text-main)]"
|
|
271
271
|
}`}
|
|
272
272
|
>
|
|
273
|
-
<span className="w-8 shrink-0 text-right pr-2 text-
|
|
273
|
+
<span className="w-8 shrink-0 text-right pr-2 text-[var(--text-muted)] opacity-60 select-none text-[10px]">
|
|
274
274
|
{line.num || ""}
|
|
275
275
|
</span>
|
|
276
276
|
<span className="w-3 shrink-0 text-center text-emerald-400 select-none">
|