oh-my-agent-web 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/README.md +108 -450
  2. package/dist/server/approval/read-only.js +107 -0
  3. package/dist/server/approval/rules.js +85 -0
  4. package/dist/server/approval/scope.js +150 -0
  5. package/dist/server/brand.js +2 -0
  6. package/dist/server/cli-config.js +52 -0
  7. package/dist/server/cli-info.js +101 -0
  8. package/dist/server/cli.js +304 -0
  9. package/dist/server/engine/builtin.js +84 -0
  10. package/dist/server/engine/catalog.js +8 -0
  11. package/dist/server/engine/codex-approvals.js +45 -0
  12. package/dist/server/engine/codex-map.js +298 -0
  13. package/dist/server/engine/codex-sessions.js +159 -0
  14. package/dist/server/engine/codex-transport.js +49 -0
  15. package/dist/server/engine/codex.js +314 -0
  16. package/dist/server/engine/dsh-history.js +195 -0
  17. package/dist/server/engine/dsh-log.js +245 -0
  18. package/dist/server/engine/dsh-map.js +221 -0
  19. package/dist/server/engine/dsh-sessions.js +207 -0
  20. package/dist/server/engine/dsh-transport.js +37 -0
  21. package/dist/server/engine/dsh.js +284 -0
  22. package/dist/server/engine/fake.js +231 -0
  23. package/dist/server/engine/jsonrpc-stdio.js +241 -0
  24. package/dist/server/engine/model-registry-reload.js +115 -0
  25. package/dist/server/engine/narrate-guidance.js +22 -0
  26. package/dist/server/engine/opencode-map.js +499 -0
  27. package/dist/server/engine/opencode-projects.js +61 -0
  28. package/dist/server/engine/opencode-sessions.js +195 -0
  29. package/dist/server/engine/opencode-transport.js +48 -0
  30. package/dist/server/engine/opencode.js +394 -0
  31. package/dist/server/engine/pi-events.js +148 -0
  32. package/dist/server/engine/pi-plugins.js +310 -0
  33. package/dist/server/engine/pi-rename.js +14 -0
  34. package/dist/server/engine/pi-sdk.js +503 -0
  35. package/dist/server/engine/pi-session-model.js +23 -0
  36. package/dist/server/engine/pi-subagent-tool.js +166 -0
  37. package/dist/server/engine/pi-subagents.js +372 -0
  38. package/dist/server/engine/pi-thinking.js +34 -0
  39. package/dist/server/engine/pi-transcript.js +225 -0
  40. package/dist/server/engine/pi-version.js +11 -0
  41. package/dist/server/engine/port.js +1 -0
  42. package/dist/server/engine/registry.js +47 -0
  43. package/dist/server/engine/scratch.js +13 -0
  44. package/dist/server/engine/subagent-guidance.js +22 -0
  45. package/dist/server/engine/suggestion-guidance.js +9 -0
  46. package/dist/server/engine/switchable.js +22 -0
  47. package/dist/server/engine/wiring.js +166 -0
  48. package/dist/server/files/dir-routes.js +40 -0
  49. package/dist/server/files/file-search.js +63 -0
  50. package/dist/server/files/file-service.js +232 -0
  51. package/dist/server/files/files-routes.js +210 -0
  52. package/dist/server/files/git-info.js +361 -0
  53. package/dist/server/http/auth-routes.js +99 -0
  54. package/dist/server/http/auth.js +191 -0
  55. package/dist/server/http/aux-routes.js +40 -0
  56. package/dist/server/http/compress.js +77 -0
  57. package/dist/server/http/health-and-static.js +33 -0
  58. package/dist/server/http/live-routes.js +113 -0
  59. package/dist/server/http/login-page.js +200 -0
  60. package/dist/server/index.js +363 -520
  61. package/dist/server/markers/actions.js +262 -0
  62. package/dist/server/mcp/mcp-auth.js +184 -0
  63. package/dist/server/mcp/mcp-command.js +94 -0
  64. package/dist/server/mcp/mcp-import.js +290 -0
  65. package/dist/server/mcp/mcp-market-sources.js +192 -0
  66. package/dist/server/mcp/mcp-market-types.js +5 -0
  67. package/dist/server/mcp/mcp-market.js +175 -0
  68. package/dist/server/mcp/mcp-probe.js +134 -0
  69. package/dist/server/mcp/mcp-routes.js +70 -0
  70. package/dist/server/mcp/mcp-store.js +286 -0
  71. package/dist/server/mcp/pi-mcp-config.js +280 -0
  72. package/dist/server/plugins/plugin-routes.js +21 -0
  73. package/dist/server/protocol-parse.js +262 -0
  74. package/dist/server/protocol-settings.js +1 -0
  75. package/dist/server/protocol.js +6 -0
  76. package/dist/server/providers/catalog-store.js +85 -0
  77. package/dist/server/providers/catalog-writes.js +197 -0
  78. package/dist/server/providers/catalog.js +77 -0
  79. package/dist/server/providers/codex-models.js +96 -0
  80. package/dist/server/providers/codex-test.js +124 -0
  81. package/dist/server/providers/enabled-models.js +118 -0
  82. package/dist/server/providers/import-models.js +69 -0
  83. package/dist/server/providers/import-routes.js +203 -0
  84. package/dist/server/providers/model-test.js +52 -0
  85. package/dist/server/providers/probe.js +64 -0
  86. package/dist/server/providers/provider-handlers.js +223 -0
  87. package/dist/server/providers/provider-store.js +359 -0
  88. package/dist/server/providers/request-headers.js +7 -0
  89. package/dist/server/providers/subscription-routes.js +181 -0
  90. package/dist/server/providers/validate.js +241 -0
  91. package/dist/server/push/push-routes.js +114 -0
  92. package/dist/server/push/push.js +120 -0
  93. package/dist/server/session/approval-bridge.js +103 -0
  94. package/dist/server/session/attachment-resolve.js +21 -0
  95. package/dist/server/session/client-view.js +82 -0
  96. package/dist/server/session/conversation-create.js +65 -0
  97. package/dist/server/session/delete-session.js +84 -0
  98. package/dist/server/session/engine-switch.js +108 -0
  99. package/dist/server/session/lock.js +82 -0
  100. package/dist/server/session/model-controller.js +119 -0
  101. package/dist/server/session/notices.js +31 -0
  102. package/dist/server/session/pi-opener.js +123 -0
  103. package/dist/server/session/pi-refresh.js +51 -0
  104. package/dist/server/session/pi-sessions-provider.js +46 -0
  105. package/dist/server/session/pi-sessions.js +272 -0
  106. package/dist/server/session/refresh-actions.js +42 -0
  107. package/dist/server/session/rename-session.js +23 -0
  108. package/dist/server/session/runtime-services.js +28 -0
  109. package/dist/server/session/runtime-types.js +1 -0
  110. package/dist/server/session/runtime.js +380 -0
  111. package/dist/server/session/session-stats.js +91 -0
  112. package/dist/server/session/settings.js +367 -0
  113. package/dist/server/session/snapshot-for.js +7 -0
  114. package/dist/server/session/stats-refresher.js +50 -0
  115. package/dist/server/session/subagents.js +116 -0
  116. package/dist/server/session/switch-conversation.js +86 -0
  117. package/dist/server/session/throttle.js +14 -0
  118. package/dist/server/session/turn-events.js +126 -0
  119. package/dist/server/session/turn-finish.js +79 -0
  120. package/dist/server/session/turn-markers.js +26 -0
  121. package/dist/server/session/turn-queue.js +111 -0
  122. package/dist/server/session/turn-send.js +108 -0
  123. package/dist/server/session/turn-watchdog.js +77 -0
  124. package/dist/server/sessions/session-routes.js +17 -0
  125. package/dist/server/skills/skill-install.js +186 -0
  126. package/dist/server/skills/skill-routes.js +134 -0
  127. package/dist/server/skills/skill-store.js +163 -0
  128. package/dist/server/skills/skillhub.js +214 -0
  129. package/dist/server/skills/zip.js +121 -0
  130. package/dist/server/snapshot/fan-out.js +10 -0
  131. package/dist/server/snapshot/messages.js +75 -0
  132. package/dist/server/snapshot/sender.js +62 -0
  133. package/dist/server/snapshot/state.js +202 -0
  134. package/dist/server/subagents/profile-store.js +287 -0
  135. package/dist/server/terminal/terminal-routes.js +176 -0
  136. package/dist/server/terminal/terminal-session.js +140 -0
  137. package/dist/server/uploads/upload-routes.js +64 -0
  138. package/dist/server/uploads/upload-store.js +115 -0
  139. package/dist/server/util/data-dir.js +36 -0
  140. package/dist/server/util/env.js +146 -0
  141. package/dist/server/util/ids.js +28 -0
  142. package/dist/server/util/log-file.js +67 -0
  143. package/dist/server/util/log.js +52 -0
  144. package/dist/server/util/origin.js +75 -0
  145. package/dist/server/util/paths.js +60 -0
  146. package/dist/server/util/pricing-index.js +121 -0
  147. package/dist/server/util/pricing.js +214 -0
  148. package/dist/server/util/startup.js +34 -0
  149. package/dist/server/util/upstream-version.js +140 -0
  150. package/dist/server/util/usage.js +19 -0
  151. package/dist/server/util/version.js +50 -0
  152. package/dist/server/ws/handle-message.js +107 -0
  153. package/package.json +50 -63
  154. package/web/dist/apple-touch-icon-precomposed.png +0 -0
  155. package/web/dist/apple-touch-icon.png +0 -0
  156. package/web/dist/assets/abnfDiagram-WEYOIA3C-VUKLHHSn.js +1 -0
  157. package/web/dist/assets/arc-BeUkaHhk.js +1 -0
  158. package/web/dist/assets/architecture-WOLXFQ4H-B9I4s0NV.js +1 -0
  159. package/web/dist/assets/architectureDiagram-ZHVYKT53-CaEkLhfq.js +36 -0
  160. package/web/dist/assets/array-BifhSqXX.js +1 -0
  161. package/web/dist/assets/blockDiagram-RJAE7QA3-IR49UNE_.js +140 -0
  162. package/web/dist/assets/c4Diagram-XDPPPE54-B-81CloB.js +38 -0
  163. package/web/dist/assets/channel-B_mTTjGt.js +1 -0
  164. package/web/dist/assets/chunk-2E7WHVMD-CaWVF7qv.js +88 -0
  165. package/web/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  166. package/web/dist/assets/chunk-4EMNKR2T-BvXf2tq-.js +1 -0
  167. package/web/dist/assets/chunk-55XCU76K-Bz_d2e2D.js +1 -0
  168. package/web/dist/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  169. package/web/dist/assets/chunk-7S6XSTFO-B_SPMiU8.js +2 -0
  170. package/web/dist/assets/chunk-AQDTSKZB-Cen-_xej.js +72 -0
  171. package/web/dist/assets/chunk-DSNLSHJZ-DEw1kFwj.js +129 -0
  172. package/web/dist/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
  173. package/web/dist/assets/chunk-HAGFOTED-BwpOOcw8.js +62 -0
  174. package/web/dist/assets/chunk-HNE4Q36P-BjCwi2uW.js +1 -0
  175. package/web/dist/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
  176. package/web/dist/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  177. package/web/dist/assets/chunk-NGNAAXSQ-C2Wy9Xmz.js +136 -0
  178. package/web/dist/assets/chunk-NQOKRVIF-WcqhWFS5.js +213 -0
  179. package/web/dist/assets/chunk-UHW7PFBP-quDvQby8.js +1 -0
  180. package/web/dist/assets/chunk-VQ5W62QI-DZBwmhzq.js +1 -0
  181. package/web/dist/assets/chunk-WQQL4CDK-wYyHYuui.js +10 -0
  182. package/web/dist/assets/chunk-XXDRQBXY-DfJzC7nt.js +1 -0
  183. package/web/dist/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  184. package/web/dist/assets/chunk-YZO67HFG-CWLraGk_.js +1 -0
  185. package/web/dist/assets/chunk-ZAUX2LTX-ChBUt_FJ.js +1 -0
  186. package/web/dist/assets/chunk-ZCHMQSOR-C57UFT60.js +2 -0
  187. package/web/dist/assets/classDiagram-v2-4MYWR3UA-Bo4i7SNY.js +217 -0
  188. package/web/dist/assets/cose-bilkent-JH36ORCC-CK360NdH.js +1 -0
  189. package/web/dist/assets/cynefin-EF2NZ3EQ-DlXFjIFm.js +1 -0
  190. package/web/dist/assets/cynefinDiagram-WF24UDRP-zvZIqA1c.js +62 -0
  191. package/web/dist/assets/cytoscape.esm-BegBNzOV.js +321 -0
  192. package/web/dist/assets/dagre-NK4GIZVX-CnKhCu-v.js +4 -0
  193. package/web/dist/assets/defaultLocale-BFoDCU3G.js +1 -0
  194. package/web/dist/assets/diagram-CBK3MWTC-3QTR8Fjx.js +24 -0
  195. package/web/dist/assets/diagram-I5XIIV2D-D9lSd7z6.js +24 -0
  196. package/web/dist/assets/diagram-ODIL2UCW-DWJD6lPM.js +30 -0
  197. package/web/dist/assets/diagram-PFBEJUXE-CWJmoUg4.js +3 -0
  198. package/web/dist/assets/diagram-RJA3I4VV-D1SZHQcQ.js +41 -0
  199. package/web/dist/assets/diagram-TYUNFSNR-DCCjGi1x.js +200 -0
  200. package/web/dist/assets/dist-VOk_Iv17.js +1 -0
  201. package/web/dist/assets/ebnfDiagram-V4P3TTPT-CQLdqEiW.js +1 -0
  202. package/web/dist/assets/elk-QONTBCTQ-Dp2pEp6b.js +27 -0
  203. package/web/dist/assets/erDiagram-KYQIGQAA-BFGNoFQ-.js +99 -0
  204. package/web/dist/assets/eventmodeling-K75KTNOO-CFfAemGw.js +1 -0
  205. package/web/dist/assets/flowDiagram-IUGLLWBU-DmSp3cbW.js +1 -0
  206. package/web/dist/assets/ganttDiagram-R7GPNTJY-vK3jPGDq.js +292 -0
  207. package/web/dist/assets/gitGraph-VSP46ZUC-rXBgHTdq.js +1 -0
  208. package/web/dist/assets/gitGraphDiagram-PDYL7XHY-CBbGhago.js +106 -0
  209. package/web/dist/assets/graphlib-DS17s2tU.js +1 -0
  210. package/web/dist/assets/index-DBOF_OJe.js +104 -0
  211. package/web/dist/assets/index-nlY_-OaR.css +1 -0
  212. package/web/dist/assets/info-OHQRW6UA-Cd9vp-6C.js +1 -0
  213. package/web/dist/assets/infoDiagram-MVDRKAX5-Ce-Sg_qu.js +2 -0
  214. package/web/dist/assets/init-C-OQMol4.js +1 -0
  215. package/web/dist/assets/ishikawaDiagram-HPEHV2GE-DWlmR6BY.js +70 -0
  216. package/web/dist/assets/journeyDiagram-BOSHW7O7-DmDG97ae.js +139 -0
  217. package/web/dist/assets/kanban-definition-FNSA4HC5-1Z4sDrgV.js +89 -0
  218. package/web/dist/assets/katex-B_JcIwqj.js +257 -0
  219. package/web/dist/assets/line-DGM1-9KW.js +1 -0
  220. package/web/dist/assets/linear-B6hyeGHu.js +1 -0
  221. package/web/dist/assets/mermaid-parser.core-D1HmdkA4.js +7 -0
  222. package/web/dist/assets/mermaid.core-DeUJrhO1.js +44 -0
  223. package/web/dist/assets/mindmap-definition-6OY57UG3-C3-FByy8.js +98 -0
  224. package/web/dist/assets/ordinal-BDEzSJ7C.js +1 -0
  225. package/web/dist/assets/packet-JDAUHWVQ-BoOr7DaW.js +1 -0
  226. package/web/dist/assets/path-fybaL0A-.js +1 -0
  227. package/web/dist/assets/pegDiagram-ECIUJNBX-Bn7m75TZ.js +1 -0
  228. package/web/dist/assets/pie-XZMESJXO-CGuMTDBp.js +1 -0
  229. package/web/dist/assets/pieDiagram-GNMPY74T-DHhaPwZe.js +39 -0
  230. package/web/dist/assets/quadrantDiagram-D57K4MC3-DxTgFHLK.js +7 -0
  231. package/web/dist/assets/radar-ABXABTNO-BiKxmALL.js +1 -0
  232. package/web/dist/assets/railroad-I3PHUGI6-BKYufgg4.js +1 -0
  233. package/web/dist/assets/railroad-abnf-LNEFI6M7-DmOrjlyL.js +1 -0
  234. package/web/dist/assets/railroad-ebnf-DWYD2UWJ-BgMyVDd1.js +1 -0
  235. package/web/dist/assets/railroad-peg-JR7BVNR7-BN6NL8S-.js +1 -0
  236. package/web/dist/assets/railroadDiagram-Y72NRBL7-BsbA-9gP.js +1 -0
  237. package/web/dist/assets/requirementDiagram-EQYSW5RA-HUw4YqWd.js +84 -0
  238. package/web/dist/assets/rough.esm-Dy-Kn_BL.js +1 -0
  239. package/web/dist/assets/sankeyDiagram-SY24JHO5-Dx1MOFRu.js +40 -0
  240. package/web/dist/assets/sequenceDiagram-BLEHNHQU-C0-Rzg3g.js +169 -0
  241. package/web/dist/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
  242. package/web/dist/assets/src-CuHygcpj.js +1 -0
  243. package/web/dist/assets/stateDiagram-v2-A6IESKWZ-BnEICGtg.js +291 -0
  244. package/web/dist/assets/swimlanes-B3ENRKFQ-CwDRCHZD.js +1 -0
  245. package/web/dist/assets/swimlanesDiagram-AYQRV4AK-DZ_aAXmG.js +8 -0
  246. package/web/dist/assets/timeline-definition-JXYKGLGB-C4BVpgzc.js +120 -0
  247. package/web/dist/assets/treeView-D4JQ5SDB-BBsvEMP3.js +1 -0
  248. package/web/dist/assets/treemap-SAJKECNS-BYw6cxC8.js +1 -0
  249. package/web/dist/assets/usecaseDiagram-WPOLBNNX-BkOXLgwP.js +328 -0
  250. package/web/dist/assets/vennDiagram-Q3Y3IDCW-Kgjk_n6B.js +34 -0
  251. package/web/dist/assets/wardley-7MLQ67FV-BGVObhvJ.js +1 -0
  252. package/web/dist/assets/wardleyDiagram-IVAIDKWA-i97uD6tL.js +78 -0
  253. package/web/dist/assets/xychartDiagram-4URNHDU4-awJi5TfJ.js +7 -0
  254. package/web/dist/favicon-32.png +0 -0
  255. package/web/dist/favicon.ico +0 -0
  256. package/web/dist/favicon.svg +20 -8
  257. package/web/dist/icons/apple-touch-icon-180.png +0 -0
  258. package/web/dist/icons/icon-192.png +0 -0
  259. package/web/dist/icons/icon-512.png +0 -0
  260. package/web/dist/icons/icon-maskable-512.png +0 -0
  261. package/web/dist/index.html +31 -24
  262. package/web/dist/manifest.webmanifest +17 -0
  263. package/web/dist/maskable.svg +25 -0
  264. package/web/dist/sw.js +40 -0
  265. package/bin/oh-my-agent-web-ps.mjs +0 -203
  266. package/bin/oh-my-agent-web-ws.mjs +0 -782
  267. package/bin/oh-my-agent-web.mjs +0 -321
  268. package/bin/update-check.mjs +0 -142
  269. package/dist/server/codex-client.js +0 -310
  270. package/dist/server/codex-supervisor.js +0 -446
  271. package/dist/server/fs-service.js +0 -144
  272. package/dist/server/request-inspector.js +0 -458
  273. package/dist/shared/protocol.js +0 -112
  274. package/scripts/manage-server.mjs +0 -155
  275. package/scripts/omaw.mjs +0 -74
  276. package/shared/protocol.ts +0 -228
  277. package/web/dist/assets/index-5LJ5fRcO.js +0 -42
  278. package/web/dist/assets/index-QiDfPKFo.css +0 -1
  279. package/web/dist/assets/markdown-CYXe6JZx.js +0 -55
@@ -1 +0,0 @@
1
- :root,[data-theme=dark]{--bg: #0a0b0e;--bg-elev: #101218;--bg-elev2: #161923;--bg-inset: #0c0e13;--border: #232733;--border-soft: #1b1f29;--text: #e7e9ef;--text-dim: #9aa1b1;--text-faint: #666d7e;--accent: #8b7bff;--accent-soft: rgba(139, 123, 255, .14);--accent-strong: #a99cff;--green: #3ecf8e;--green-soft: rgba(62, 207, 142, .14);--red: #f16a6a;--red-soft: rgba(241, 106, 106, .14);--amber: #f0b429;--amber-soft: rgba(240, 180, 41, .14);--blue: #4c8dff;--blue-soft: rgba(76, 141, 255, .14);--code-bg: #0b0d12;--code-border: #1e2230;--user-bg: #1c1f2a;--shadow: 0 12px 40px rgba(0, 0, 0, .45);--shadow-soft: 0 4px 16px rgba(0, 0, 0, .3);--scroll-thumb: #2a2f3c;--scroll-thumb-hover: #3a4152;--sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Roboto, Helvetica, Arial, sans-serif;--mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace}[data-theme=light]{color-scheme:light;--bg: #ffffff;--bg-elev: #f6f8fa;--bg-elev2: #eaeef2;--bg-inset: #f6f8fa;--border: #d0d7de;--border-soft: #e4e8ed;--text: #1f2328;--text-dim: #59636e;--text-faint: #8c959f;--accent: #0969da;--accent-soft: rgba(9, 105, 218, .1);--accent-strong: #0550ae;--green: #1a7f37;--green-soft: rgba(26, 127, 55, .1);--red: #cf222e;--red-soft: rgba(207, 34, 46, .09);--amber: #9a6700;--amber-soft: rgba(154, 103, 0, .14);--blue: #0969da;--blue-soft: rgba(9, 105, 218, .1);--code-bg: #f6f8fa;--code-border: #e4e8ed;--user-bg: #ddf4ff;--shadow: 0 12px 32px rgba(31, 35, 40, .13);--shadow-soft: 0 3px 12px rgba(31, 35, 40, .07);--scroll-thumb: #c9d1d9;--scroll-thumb-hover: #afb8c1}[data-theme=paper]{color-scheme:light;--bg: #f7f1e3;--bg-elev: #fffdf6;--bg-elev2: #efe7d3;--bg-inset: #fffdf6;--border: #ddcfae;--border-soft: #e7dcc3;--text: #3f372c;--text-dim: #6f6250;--text-faint: #9c8b70;--accent: #b45309;--accent-soft: rgba(180, 83, 9, .12);--accent-strong: #92400e;--green: #15803d;--green-soft: rgba(21, 128, 61, .12);--red: #b91c1c;--red-soft: rgba(185, 28, 28, .1);--amber: #a16207;--amber-soft: rgba(161, 98, 7, .14);--blue: #1d4ed8;--blue-soft: rgba(29, 78, 216, .1);--code-bg: #efe7d3;--code-border: #e0d3b8;--user-bg: #f3e6c9;--shadow: 0 12px 32px rgba(80, 60, 20, .16);--shadow-soft: 0 3px 12px rgba(80, 60, 20, .09);--scroll-thumb: #d3c4a3;--scroll-thumb-hover: #b8a67f}[data-theme=mist]{color-scheme:light;--bg: #f4f8f7;--bg-elev: #e9f0ee;--bg-elev2: #dde8e4;--bg-inset: #eef4f2;--border: #bfd0c8;--border-soft: #d5e2dc;--text: #202e2b;--text-dim: #4a6159;--text-faint: #7b918a;--accent: #0f766e;--accent-soft: rgba(15, 118, 110, .11);--accent-strong: #115e59;--green: #15803d;--green-soft: rgba(21, 128, 61, .12);--red: #b91c1c;--red-soft: rgba(185, 28, 28, .1);--amber: #a16207;--amber-soft: rgba(161, 98, 7, .14);--blue: #0e7490;--blue-soft: rgba(14, 116, 144, .11);--code-bg: #e9f0ee;--code-border: #d5e2dc;--user-bg: #d8ebe7;--shadow: 0 12px 32px rgba(20, 50, 45, .15);--shadow-soft: 0 3px 12px rgba(20, 50, 45, .08);--scroll-thumb: #b4c8c1;--scroll-thumb-hover: #9bb3ab}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:var(--sans);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--scroll-thumb);border-radius:6px;border:2px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:var(--scroll-thumb-hover);background-clip:padding-box}.muted{color:var(--text-dim)}.small{font-size:12px}.pad{padding:10px 12px}.spacer{flex:1}.error-text{color:var(--red)}.mono{font-family:var(--mono)}.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);background:var(--bg-elev2);color:var(--text);border-radius:8px;padding:7px 12px;font-size:13px;font-weight:500;transition:background .12s ease,border-color .12s ease,transform .05s ease}.btn:hover:not(:disabled){background:var(--bg-elev);border-color:var(--text-faint)}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover:not(:disabled){background:var(--accent-strong);border-color:var(--accent-strong)}.btn.danger{background:var(--red-soft);border-color:var(--red);color:var(--red)}.btn.ghost{background:transparent}.btn.small{padding:5px 9px;font-size:12px}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;border:1px solid transparent;background:transparent;color:var(--text-dim)}.icon-btn:hover{background:var(--bg-elev2);color:var(--text)}.icon-btn.tiny{width:24px;height:24px}.icon-btn.active{background:var(--accent-soft);color:var(--accent-strong)}.kbd{border:1px solid var(--border);border-radius:5px;padding:1px 5px;font-size:11px;color:var(--text-faint);background:var(--bg)}.app{display:flex;height:100%;overflow:hidden}.sidebar-container{width:var(--sidebar-w, 288px);flex:0 0 var(--sidebar-w, 288px);border-right:1px solid var(--border);background:var(--bg-elev);height:100%;z-index:30;position:relative}.sidebar-container.dragging{border-right-color:var(--accent)}.app.sidebar-collapsed .sidebar-container{display:none}.sidebar-rail{display:flex;align-items:flex-start;justify-content:center;padding-top:14px;width:30px;flex:0 0 30px;border:none;border-right:1px solid var(--border);background:var(--bg-elev);color:var(--text-faint);cursor:pointer}.sidebar-rail:hover{background:var(--bg-elev2);color:var(--text)}.resize-handle{position:absolute;z-index:45;touch-action:none}.resize-handle:after{content:"";position:absolute;background:transparent;transition:background .12s ease}.resize-handle.vertical{top:0;bottom:0;width:11px;cursor:col-resize}.resize-handle.vertical:after{top:0;bottom:0;left:5px;width:2px}.resize-handle.vertical.left{left:-6px}.resize-handle.vertical:not(.left){right:-6px}.resize-handle:hover:after,.dragging>.resize-handle:after{background:var(--accent)}.main{display:flex;flex-direction:column;flex:1;min-width:0;height:100%;background:var(--bg)}.sidebar{display:flex;flex-direction:column;height:100%;padding:12px;gap:10px}.sidebar-head{display:flex;align-items:center;justify-content:space-between;padding:2px 2px 4px}.brand{display:flex;align-items:center;gap:9px;font-weight:650;letter-spacing:-.01em}.brand-mark{display:inline-flex;width:26px;height:26px;align-items:center;justify-content:center;border-radius:8px;background:linear-gradient(135deg,var(--accent-strong),var(--accent));color:#fff}.brand-name{font-size:15px}.new-thread{width:100%;justify-content:center}.search-box{display:flex;align-items:center;gap:8px;background:var(--bg);border:1px solid var(--border);border-radius:9px;padding:6px 9px;color:var(--text-faint)}.search-box:focus-within{border-color:var(--accent)}.search-box input{flex:1;min-width:0;border:none;background:transparent;outline:none;color:var(--text);font-size:13px}.sidebar-section-head{display:flex;align-items:center;gap:8px;padding:2px 10px 4px}.sidebar-section-label{font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--text-faint)}.thread-count{margin-left:auto;font-size:11px}.sidebar-scroll{flex:1;overflow-y:auto;margin:0 -4px;padding:0 4px}.thread-list{display:flex;flex-direction:column;gap:2px}.list-empty,.list-error{padding:16px 8px;font-size:13px;text-align:center;display:flex;flex-direction:column;gap:8px;align-items:center}.thread-row{display:flex;align-items:center;border-radius:8px;position:relative}.thread-row:hover{background:var(--bg-elev2)}.thread-row.active{background:var(--accent-soft)}.thread-main{flex:1;min-width:0;display:flex;align-items:center;gap:9px;border:none;background:transparent;text-align:left;padding:7px 8px;border-radius:8px}.thread-texts{display:flex;flex-direction:column;min-width:0;gap:1px}.thread-title{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.thread-row.active .thread-title{color:var(--accent-strong)}.thread-sub{font-size:11.5px;color:var(--text-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.status-dot{width:8px;height:8px;border-radius:50%;flex:0 0 8px;background:var(--text-faint)}.dot-idle{background:var(--text-faint)}.dot-active{background:var(--green);box-shadow:0 0 0 3px var(--green-soft);animation:pulse 1.6s infinite}.dot-error{background:var(--red)}.dot-faint{background:var(--border)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.thread-menu-btn{opacity:0;margin-right:4px}.thread-row:hover .thread-menu-btn,.thread-row.active .thread-menu-btn{opacity:1}.thread-rename{flex:1;margin:4px;padding:5px 8px;border-radius:7px;border:1px solid var(--accent);background:var(--bg);outline:none;font-size:13px}.load-more{margin:8px 4px;justify-content:center}.menu{position:absolute;top:calc(100% + 2px);right:4px;z-index:40;min-width:168px;background:var(--bg-elev2);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);padding:5px;display:flex;flex-direction:column}.menu button{display:flex;align-items:center;gap:9px;border:none;background:transparent;color:var(--text);text-align:left;padding:7px 9px;border-radius:7px;font-size:13px}.menu button:hover{background:var(--bg-elev)}.menu button.danger{color:var(--red)}.menu-sep{height:1px;background:var(--border-soft);margin:4px 6px}.header{display:flex;align-items:center;gap:12px;padding:9px 14px;border-bottom:1px solid var(--border);background:var(--bg-elev);min-height:52px}.header-left{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.header-title{display:flex;flex-direction:column;min-width:0}.header-title-text{font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.header-title-btn{appearance:none;border:0;background:none;padding:0;margin:0;color:inherit;font:inherit;text-align:left;cursor:text;max-width:42vw}.header-title-btn:hover{text-decoration:underline dotted;text-decoration-color:var(--text-faint);text-underline-offset:3px}.header-title-input{font-weight:600;font-size:14px;font-family:inherit;color:var(--text);background:var(--bg);border:1px solid var(--accent);border-radius:7px;padding:1px 6px;outline:none;max-width:42vw;min-width:14ch}.header-cwd{font-size:11.5px;color:var(--text-faint);font-family:var(--mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:42vw}.header-right{display:flex;align-items:center;gap:8px}.inline-select select,.popover select,.popover .text-input{border:1px solid var(--border);background:var(--bg);border-radius:8px;padding:5px 8px;font-size:12.5px;outline:none;max-width:190px}.inline-select select:focus,.popover select:focus,.text-input:focus{border-color:var(--accent)}.popover-wrap{position:relative}.theme-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}.theme-option{display:flex;align-items:center;gap:8px;padding:6px 7px;border:1px solid var(--border);border-radius:9px;background:var(--bg);color:var(--text-dim);font-size:12.5px;text-align:left}.theme-option:hover{border-color:var(--text-faint);color:var(--text)}.theme-option.active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-strong);font-weight:600}.theme-swatch{position:relative;width:20px;height:20px;flex:0 0 20px;border-radius:6px;border:1.5px solid;overflow:hidden}.theme-swatch i{position:absolute;left:0;bottom:0;width:100%;height:44%}.theme-option-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-picker{position:relative}.project-btn{display:flex;align-items:center;gap:8px;width:100%;padding:7px 10px;border:1px solid var(--border);border-radius:10px;background:var(--bg);color:var(--text);font-size:13px;text-align:left}.project-btn:hover{border-color:var(--text-faint)}.project-btn.open{border-color:var(--accent)}.project-btn-path{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-btn .project-dot{width:9px;height:9px;border-radius:50%;background:var(--accent)}.project-btn .project-dot.busy{animation:project-pulse 1s ease-in-out infinite}@keyframes project-pulse{0%,to{opacity:.35}50%{opacity:1}}.project-menu{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:60;background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow);padding:6px;display:flex;flex-direction:column;gap:4px}.project-filter{display:flex;align-items:center;gap:7px;padding:6px 8px;border:1px solid var(--border);border-radius:8px;color:var(--text-faint)}.project-filter:focus-within{border-color:var(--accent)}.project-filter input{flex:1;min-width:0;border:none;background:transparent;outline:none;color:var(--text);font-size:12.5px}.project-list{max-height:47vh;overflow-y:auto;display:flex;flex-direction:column}.project-item{display:flex;align-items:center;gap:8px;width:100%;padding:7px 8px;border:none;border-radius:8px;background:transparent;color:var(--text-dim);font-size:13px;text-align:left}.project-item:hover:not(:disabled){background:var(--bg-elev2);color:var(--text)}.project-item.active{color:var(--accent-strong);font-weight:600}.project-item:disabled{opacity:.45}.project-check{display:flex;align-items:center;justify-content:center;width:14px;flex:0 0 14px;color:var(--accent)}.project-item-path{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-count{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--text-faint);flex:0 0 auto}.project-count.active{color:var(--accent-strong)}.project-item .project-dot{width:7px;height:7px;border-radius:50%;background:var(--text-faint)}.project-count.active .project-dot{background:var(--accent)}.project-empty{padding:10px 8px}.project-footer{border-top:1px solid var(--border-soft);padding-top:4px;display:flex;flex-direction:column}.project-custom{display:flex;flex-direction:column;gap:8px;padding:4px}.project-custom .text-input{width:100%;max-width:none}.project-custom-actions{display:flex;justify-content:flex-end;gap:6px}.popover{position:absolute;top:calc(100% + 8px);right:0;z-index:60;width:320px;background:var(--bg-elev2);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow);padding:14px;display:flex;flex-direction:column;gap:14px}.popover-section{display:flex;flex-direction:column;gap:6px}.popover-title{font-size:12px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.04em}.text-input{width:100%;padding:7px 9px;border:1px solid var(--border);background:var(--bg);border-radius:8px;outline:none;font-size:12.5px;font-family:var(--mono)}.hint{font-size:11.5px;color:var(--text-faint)}.path-static{padding:5px 8px;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:var(--text-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hint.block{display:block;margin-top:2px}.toggle-row{display:flex;gap:10px;align-items:flex-start;font-size:13px;cursor:pointer}.toggle-row input{margin-top:2px;accent-color:var(--accent)}.popover-actions{display:flex;gap:8px;border-top:1px solid var(--border-soft);padding-top:12px}.status-pill{display:inline-flex;align-items:center;gap:6px;padding:4px 9px;border-radius:999px;border:1px solid var(--border);background:var(--bg);font-size:12px;color:var(--text-dim);white-space:nowrap}.status-pill .status-dot{width:7px;height:7px;flex-basis:7px}.pill-ready .status-dot{background:var(--green)}.pill-ready{color:var(--green);border-color:var(--green-soft)}.pill-warn .status-dot{background:var(--amber)}.pill-warn{color:var(--amber)}.pill-error .status-dot,.pill-offline .status-dot{background:var(--red)}.pill-error,.pill-offline{color:var(--red)}.pill-unknown .status-dot{background:var(--text-faint)}.token-meter{display:flex;align-items:center;gap:7px;padding:3px 8px;border:1px solid var(--border);border-radius:999px;background:var(--bg)}.token-bar{width:56px;height:5px;border-radius:3px;background:var(--bg-elev2);overflow:hidden}.token-fill{height:100%;background:var(--blue);border-radius:3px;transition:width .3s ease}.token-meter.warm .token-fill{background:var(--amber)}.token-meter.hot .token-fill{background:var(--red)}.token-label{font-size:11px;color:var(--text-dim);font-variant-numeric:tabular-nums}.chat-wrap,.chat{flex:1;min-height:0;position:relative}.chat{overflow-y:auto;padding:20px 0 8px;scroll-behavior:auto}.chat-wrap{display:flex;flex-direction:column}.chat>.turn,.chat>.inline-error,.chat>.empty-state{max-width:none;margin:0;padding-left:10px;padding-right:10px}.chat-bottom-pad{height:20px}.jump-bottom{position:absolute;bottom:16px;left:50%;transform:translate(-50%);width:34px;height:34px;border-radius:50%;border:1px solid var(--border);background:var(--bg-elev2);color:var(--text);box-shadow:var(--shadow-soft);display:flex;align-items:center;justify-content:center;z-index:10}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center;padding:80px 24px;color:var(--text-dim)}.empty-state.compact{padding:60px 24px}.empty-state h2{margin:0;color:var(--text);font-size:20px;letter-spacing:-.01em}.empty-mark{display:flex;width:58px;height:58px;align-items:center;justify-content:center;border-radius:16px;background:linear-gradient(135deg,var(--accent-strong),var(--accent));color:#fff;box-shadow:var(--shadow-soft)}.empty-state code{font-family:var(--mono);background:var(--bg-elev2);padding:1px 5px;border-radius:5px}.inline-error{display:flex;align-items:flex-start;gap:8px;margin-top:10px;padding:10px 12px;border-radius:10px;border:1px solid var(--red);background:var(--red-soft);color:var(--red);font-size:13px}.connection-banner{display:flex;align-items:center;gap:10px;padding:8px 14px;background:var(--amber-soft);border-bottom:1px solid var(--amber);color:var(--amber);font-size:13px}.connection-banner .btn{margin-left:auto;color:var(--text)}.turn{padding-top:10px}.turn-divider{display:flex;align-items:center;gap:8px;margin:10px 0 4px}.turn-status-dot{width:7px;height:7px;border-radius:50%;background:var(--text-faint)}.turn-status-dot.inProgress{background:var(--green);animation:pulse 1.6s infinite}.turn-status-dot.failed{background:var(--red)}.turn-status-dot.interrupted{background:var(--amber)}.turn-meta{font-size:11.5px;color:var(--text-faint);text-transform:uppercase;letter-spacing:.05em}.working-line{display:flex;align-items:center;gap:8px;margin:10px 0 4px;padding-left:10px;padding-right:10px}.working-line .turn-status-dot{flex:0 0 auto}.working-text{font-size:12px;color:var(--text-dim)}.turn-items{display:flex;flex-direction:column;gap:10px}.turn-details{margin-top:2px}.turn-details-summary{display:flex;align-items:center;gap:7px;min-width:0;color:var(--text-dim);font-size:12.5px}.turn-details-label{font-weight:600;color:var(--text)}.turn-details-count{color:var(--text-faint);white-space:nowrap}.turn-details-items{display:flex;flex-direction:column;gap:10px}.item{position:relative}.item-user{display:flex;gap:10px;justify-content:flex-end}.user-avatar{order:2;display:flex;width:26px;height:26px;flex:0 0 26px;align-items:center;justify-content:center;border-radius:8px;background:var(--bg-elev2);color:var(--text-dim)}.user-bubble{order:1;max-width:82%;background:var(--user-bg);border:1px solid var(--border-soft);border-radius:12px 12px 4px;padding:9px 12px;display:flex;flex-direction:column;gap:8px}.user-text{white-space:pre-wrap;word-break:break-word}.user-image img,.generated-image{max-width:100%;border-radius:8px;border:1px solid var(--border)}.input-chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;background:var(--bg);border:1px solid var(--border);border-radius:999px;padding:3px 9px;color:var(--text-dim);max-width:100%}.input-chip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.input-chip.clickable:hover{border-color:var(--accent);color:var(--accent-strong)}.item-agent{display:flex;gap:10px}.agent-avatar{display:flex;width:26px;height:26px;flex:0 0 26px;align-items:center;justify-content:center;border-radius:8px;background:var(--accent-soft);color:var(--accent-strong)}.agent-body{flex:1;min-width:0}.agent-toolbar{display:flex;align-items:center;gap:8px;margin-bottom:2px;opacity:.9}.agent-toolbar .icon-btn{opacity:0;width:24px;height:24px}.item-agent:hover .agent-toolbar .icon-btn{opacity:1}.phase-badge{font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-faint);border:1px solid var(--border);border-radius:999px;padding:1px 7px}.typing{display:inline-flex;gap:4px;align-items:center;padding:4px 0}.typing .dot{width:6px;height:6px;border-radius:50%;background:var(--text-faint);animation:blink 1.2s infinite}.typing .dot:nth-child(2){animation-delay:.2s}.typing .dot:nth-child(3){animation-delay:.4s}@keyframes blink{0%,to{opacity:.3}50%{opacity:1}}.caret{display:inline-block;width:7px;height:15px;margin-left:2px;background:var(--accent);vertical-align:text-bottom;animation:blink 1s steps(2) infinite}.agent-questions{margin-top:8px;display:flex;flex-direction:column;gap:6px}.agent-question{border:1px solid var(--border);border-radius:9px;padding:8px 10px;background:var(--bg-elev)}.agent-question-title{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600}.agent-question-options{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.disclosure{border:1px solid var(--border-soft);border-radius:11px;background:var(--bg-elev);overflow:hidden}.disclosure-head{display:flex;align-items:center}.disclosure-toggle{flex:1;min-width:0;display:flex;align-items:center;gap:6px;border:none;background:transparent;color:var(--text);text-align:left;padding:9px 11px;font-size:13px}.disclosure-toggle:hover{background:var(--bg-elev2)}.disclosure-caret{display:inline-flex;color:var(--text-faint)}.disclosure-summary{flex:1;min-width:0;display:flex;align-items:center;gap:8px}.disclosure-actions{display:flex;align-items:center;gap:4px;padding-right:8px}.disclosure-body{padding:0 11px 11px}.item-reasoning .disclosure{background:transparent;border-style:dashed}.reasoning-summary{display:flex;align-items:center;gap:8px;color:var(--text-dim);font-size:12.5px;min-width:0}.reasoning-label{font-style:italic}.reasoning-preview{color:var(--text-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-style:italic}.reasoning-content{display:flex;flex-direction:column;gap:10px;color:var(--text-dim);font-size:13px}.reasoning-block p{margin:0 0 8px;white-space:pre-wrap}.reasoning-raw{border-left:2px solid var(--border);padding-left:10px;font-size:12.5px}.command-summary{display:flex;align-items:center;gap:9px;min-width:0;flex:1}.command-text{font-family:var(--mono);font-size:12.5px;white-space:pre-wrap;overflow-wrap:anywhere;background:var(--code-bg);padding:2px 7px;border-radius:6px;border:1px solid var(--code-border)}.command-actions{display:flex;gap:6px;flex-wrap:wrap}.command-action{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--text-faint)}.command-meta{display:flex;align-items:center;gap:6px}.command-body{display:flex;flex-direction:column;gap:6px}.command-cwd{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text-faint);font-family:var(--mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.command-output{margin:0;max-height:340px;overflow:auto;background:var(--code-bg);border:1px solid var(--code-border);border-radius:8px;padding:10px 12px;font-family:var(--mono);font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-word}.filechange-summary{display:flex;align-items:center;gap:9px}.filechange-title{font-weight:500}.filechange-body{display:flex;flex-direction:column;gap:12px}.file-change-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.file-change-path{font-family:var(--mono);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.file-change-move{font-size:11.5px;color:var(--text-faint)}.badge{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;font-weight:600;padding:1px 7px;border-radius:999px;border:1px solid var(--border);color:var(--text-dim);white-space:nowrap}.badge-success,.kind-add{background:var(--green-soft);color:var(--green);border-color:var(--green)}.badge-error,.kind-del{background:var(--red-soft);color:var(--red);border-color:var(--red)}.badge-warn{background:var(--amber-soft);color:var(--amber);border-color:var(--amber)}.kind-update{background:var(--blue-soft);color:var(--blue);border-color:var(--blue)}.badge-running{background:var(--accent-soft);color:var(--accent-strong);border-color:var(--accent)}.chip{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;background:var(--bg);border:1px solid var(--border);border-radius:999px;padding:2px 8px;color:var(--text-dim)}.chip.tiny{font-size:10.5px;padding:1px 6px}.path-chip{font-family:var(--mono);font-size:11.5px;background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:1px 6px;color:var(--text-dim);max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tool-summary{display:flex;align-items:center;gap:9px;min-width:0;flex:1}.tool-name{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tool-sep{color:var(--text-faint)}.tool-body{display:flex;flex-direction:column;gap:12px}.tool-section{display:flex;flex-direction:column;gap:5px}.tool-section-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-faint)}.item-generic .disclosure,.item-tool .disclosure,.item-websearch .disclosure,.item-collab .disclosure{background:var(--bg-elev)}.item-head{display:flex;align-items:center;gap:8px;padding:2px 0}.item-icon{display:inline-flex;color:var(--text-dim)}.item-icon-error{color:var(--red)}.item-title{font-weight:500;font-size:13px}.item-subtitle{color:var(--text-faint);font-size:12px}.item-function-output{border:1px solid var(--border-soft);border-radius:10px;padding:9px 11px;background:var(--bg-elev);display:flex;flex-direction:column;gap:8px}.code-block{margin:0;background:var(--code-bg);border:1px solid var(--code-border);border-radius:8px;padding:10px 12px;font-family:var(--mono);font-size:12px;line-height:1.5;overflow:auto;max-height:300px;white-space:pre-wrap;word-break:break-word}.code-block.small{font-size:11.5px;padding:8px 10px}.code-block.max-h{max-height:360px}.item-error-card{border:1px solid var(--red);border-radius:10px;padding:10px 12px;background:var(--red-soft)}.item-plan{border:1px solid var(--border-soft);border-radius:11px;background:var(--bg-elev);padding:11px 13px}.plan-explanation{font-size:12.5px;margin:4px 0 8px}.plan-steps{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}.plan-step{display:flex;align-items:flex-start;gap:8px;font-size:13px;color:var(--text-dim)}.plan-step-icon{display:inline-flex;margin-top:2px}.plan-step.status-completed .plan-step-text{text-decoration:line-through;color:var(--text-faint)}.plan-step.status-completed .plan-step-icon{color:var(--green)}.plan-step.status-inProgress .plan-step-icon{color:var(--accent)}.plan-step.status-inProgress .plan-step-text{color:var(--text)}.item-compaction,.item-sleep,.item-subagent{display:flex;align-items:center;gap:8px;color:var(--text-faint);font-size:12.5px}.compaction-line{display:flex;align-items:center;gap:8px;width:100%}.compaction-line:before,.compaction-line:after{content:"";flex:1;height:1px;background:var(--border-soft)}.item-imageview{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--border);background:var(--bg-elev);border-radius:9px;padding:7px 10px;color:var(--text)}.item-imageview:hover{border-color:var(--accent)}.item-imagegen{border:1px solid var(--border-soft);border-radius:11px;background:var(--bg-elev);padding:11px;display:flex;flex-direction:column;gap:8px}.item-review{border:1px solid var(--amber);background:var(--amber-soft);border-radius:10px;padding:10px 12px}.review-line{display:flex;align-items:center;gap:8px;color:var(--amber);font-size:12.5px;font-weight:600}.markdown{overflow-wrap:anywhere}.markdown>*:first-child{margin-top:0}.markdown>*:last-child{margin-bottom:0}.markdown p{margin:0 0 10px}.markdown h1,.markdown h2,.markdown h3,.markdown h4{margin:16px 0 8px;line-height:1.3}.markdown h1{font-size:19px}.markdown h2{font-size:17px}.markdown h3{font-size:15px}.markdown ul,.markdown ol{margin:0 0 10px;padding-left:22px}.markdown li{margin:2px 0}.markdown a{color:var(--accent-strong);text-decoration:none}.markdown a:hover{text-decoration:underline}.md-file-link{border:none;background:var(--accent-soft);color:var(--accent-strong);border-radius:5px;padding:0 4px;font-family:var(--mono);font-size:12.5px}.md-file-link:hover{text-decoration:underline}.markdown code{font-family:var(--mono);font-size:12.5px;background:var(--code-bg);border:1px solid var(--code-border);border-radius:5px;padding:1px 5px}.markdown pre{margin:0;background:var(--code-bg);border:1px solid var(--code-border);border-radius:9px;padding:11px 13px;overflow:auto;max-height:420px}.markdown pre code{background:transparent;border:none;padding:0;font-size:12px;line-height:1.55}.md-pre-wrap{position:relative;margin:0 0 10px}.md-pre-bar{position:absolute;top:6px;right:8px;z-index:2;opacity:0;transition:opacity .12s ease}.md-pre-wrap:hover .md-pre-bar{opacity:1}.markdown blockquote{margin:0 0 10px;padding:2px 0 2px 12px;border-left:3px solid var(--border);color:var(--text-dim)}.markdown table{border-collapse:collapse;margin:0 0 10px;font-size:13px;display:block;overflow-x:auto}.markdown th,.markdown td{border:1px solid var(--border);padding:5px 9px;text-align:left}.markdown th{background:var(--bg-elev2)}.markdown img{max-width:100%;border-radius:8px}.markdown hr{border:none;border-top:1px solid var(--border);margin:16px 0}.hljs{color:var(--text)}.hljs-comment,.hljs-quote{color:var(--text-faint);font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-doctag,.hljs-formula{color:#c084fc}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string{color:#3ecf8e}.hljs-number,.hljs-literal,.hljs-variable,.hljs-template-variable,.hljs-type,.hljs-selector-attr,.hljs-selector-pseudo{color:#f0b429}.hljs-title,.hljs-title.function_,.hljs-section,.hljs-name{color:#4c8dff}.hljs-attr,.hljs-selector-class,.hljs-selector-id,.hljs-property{color:#7db8ff}.hljs-built_in,.hljs-symbol,.hljs-bullet,.hljs-link{color:#f16a6a}.hljs-deletion{color:var(--red)}.hljs-addition{color:var(--green)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}[data-scheme=light] .hljs-comment,[data-scheme=light] .hljs-quote{color:#6e7781}[data-scheme=light] .hljs-keyword,[data-scheme=light] .hljs-selector-tag,[data-scheme=light] .hljs-doctag,[data-scheme=light] .hljs-template-tag,[data-scheme=light] .hljs-template-variable,[data-scheme=light] .hljs-type{color:#cf222e}[data-scheme=light] .hljs-title,[data-scheme=light] .hljs-title.class_,[data-scheme=light] .hljs-title.function_,[data-scheme=light] .hljs-section{color:#8250df}[data-scheme=light] .hljs-attr,[data-scheme=light] .hljs-attribute,[data-scheme=light] .hljs-literal,[data-scheme=light] .hljs-meta,[data-scheme=light] .hljs-number,[data-scheme=light] .hljs-operator,[data-scheme=light] .hljs-variable,[data-scheme=light] .hljs-selector-attr,[data-scheme=light] .hljs-selector-class,[data-scheme=light] .hljs-selector-id,[data-scheme=light] .hljs-property{color:#0550ae}[data-scheme=light] .hljs-regexp,[data-scheme=light] .hljs-string,[data-scheme=light] .hljs-meta .hljs-string{color:#0a3069}[data-scheme=light] .hljs-built_in,[data-scheme=light] .hljs-symbol,[data-scheme=light] .hljs-bullet,[data-scheme=light] .hljs-link{color:#953800}[data-scheme=light] .hljs-name,[data-scheme=light] .hljs-selector-pseudo,[data-scheme=light] .hljs-title.class_.inherited__{color:#116329}[data-scheme=light] .hljs-subst{color:#1f2328}[data-scheme=light] .hljs-addition{color:#116329;background:#dafbe1}[data-scheme=light] .hljs-deletion{color:#82071e;background:#ffebe9}.diff-view{display:flex;flex-direction:column;gap:12px}.diff-file{border:1px solid var(--code-border);border-radius:9px;overflow:hidden}.diff-file-head{display:flex;align-items:center;gap:10px;padding:6px 10px;background:var(--bg-elev2);border-bottom:1px solid var(--code-border)}.diff-file-path{font-family:var(--mono);font-size:12px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.diff-stats{display:flex;gap:8px;font-size:11.5px;font-family:var(--mono)}.diff-stats .add{color:var(--green)}.diff-stats .del{color:var(--red)}.diff-body{margin:0;overflow-x:auto;background:var(--code-bg);font-family:var(--mono);font-size:11.5px;line-height:1.5;padding:4px 0}.diff-line{display:flex;gap:8px;padding:0 10px;white-space:pre}.diff-line.add{background:var(--green-soft)}.diff-line.del{background:var(--red-soft)}.diff-line.hunk{color:var(--blue);background:var(--blue-soft)}.diff-line.meta{color:var(--text-faint)}.diff-no{width:38px;flex:0 0 38px;text-align:right;color:var(--text-faint);user-select:none}.diff-sign{width:10px;flex:0 0 10px}.diff-code{flex:1}.diff-view-actions{display:flex;justify-content:flex-end}.diff-empty{padding:8px;font-size:12.5px}.turn-diff{margin-top:8px}.turn-diff-summary{display:inline-flex;align-items:center;gap:7px;font-weight:500}.composer-wrap{border-top:1px solid var(--border);background:var(--bg-elev);padding:10px 10px 12px}.composer{margin:0;border:1px solid var(--border);border-radius:13px;background:var(--bg-elev2);padding:5px 9px;box-shadow:var(--shadow-soft)}.composer:focus-within{border-color:var(--accent)}.composer-row{display:flex;align-items:center;gap:8px}.composer-input{position:relative;flex:1;min-width:0}.composer textarea{display:block;width:100%;resize:none;border:none;background:transparent;outline:none;font-size:14px;line-height:21px;padding:5px 0;max-height:200px;font-family:var(--sans)}.composer-actions{display:flex;align-items:center;gap:8px;flex:0 0 auto}.composer-actions .btn{padding:6px 12px}.composer-hint{display:flex;gap:12px;margin:6px 0 0;font-size:11.5px}.composer-status{display:flex;align-items:center;gap:8px;margin:4px 0 0;font-family:var(--mono);font-size:11.5px;line-height:1.4}.composer-status .status-model{color:var(--accent-strong);font-weight:600}.composer-status .status-effort{color:var(--text-dim);text-transform:lowercase}.composer-status .status-project{color:var(--text-faint);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.running-hint{margin-left:auto;color:var(--accent-strong)}.attach-row{display:flex;flex-wrap:wrap;gap:6px;padding:2px 2px 6px}.attach-chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;background:var(--bg-elev2);border:1px solid var(--border);border-radius:8px;padding:3px 6px;max-width:260px}.attach-chip.image img{width:26px;height:26px;object-fit:cover;border-radius:5px}.attach-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chip-x{display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--text-faint);padding:1px;border-radius:4px}.chip-x:hover{color:var(--red)}.queue-bar{margin:0 0 8px;display:flex;align-items:center;gap:8px;font-size:12px;color:var(--accent-strong)}.mention-menu{position:absolute;bottom:calc(100% + 6px);left:0;right:0;z-index:50;background:var(--bg-elev2);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);max-height:260px;overflow-y:auto;padding:4px}.mention-item{display:flex;flex-direction:column;width:100%;border:none;background:transparent;color:var(--text);text-align:left;padding:6px 9px;border-radius:7px}.mention-item.active,.mention-item:hover{background:var(--accent-soft)}.mention-name{font-size:13px;font-family:var(--mono)}.mention-path{font-size:11px;color:var(--text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-backdrop{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100;padding:20px;backdrop-filter:blur(2px)}.modal{width:100%;background:var(--bg-elev);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow);display:flex;flex-direction:column;max-height:86vh;overflow:hidden}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border-soft)}.modal-title{font-weight:600}.modal-body{padding:14px;overflow-y:auto;display:flex;flex-direction:column;gap:10px}.modal-foot{display:flex;justify-content:flex-end;gap:8px;padding:12px 14px;border-top:1px solid var(--border-soft);flex-wrap:wrap}.modal-body .modal-foot{padding:12px 0 0}.approval-title{display:inline-flex;align-items:center;gap:8px;color:var(--amber)}.approval-method{font-family:var(--mono)}.approval-reason{margin:0}.approval-command{display:flex;align-items:flex-start;gap:8px;background:var(--code-bg);border:1px solid var(--code-border);border-radius:8px;padding:9px 11px}.approval-command code{font-family:var(--mono);font-size:12.5px;white-space:pre-wrap;word-break:break-word}.approval-cwd{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-faint);font-family:var(--mono)}.approval-actions{display:flex;flex-wrap:wrap;gap:6px}.question-form{display:flex;flex-direction:column;gap:14px}.question{display:flex;flex-direction:column;gap:7px}.question-head{font-weight:600;font-size:13px}.question-text{font-size:13px;color:var(--text-dim)}.question-options{display:flex;flex-direction:column;gap:6px}.question-option{display:flex;gap:9px;align-items:flex-start;border:1px solid var(--border);border-radius:8px;padding:7px 9px;cursor:pointer}.question-option:hover{background:var(--bg-elev2)}.question-option input{margin-top:2px;accent-color:var(--accent)}.option-label{display:block;font-size:13px}.option-desc{display:block;font-size:11.5px}.file-panel{position:relative;width:var(--file-panel-w, 560px);border-left:1px solid var(--border);background:var(--bg-elev);display:flex;flex-direction:column;height:100%;z-index:20}.file-panel.dragging{border-left-color:var(--accent)}.file-panel-head{display:flex;align-items:center;gap:8px;padding:9px 12px;border-bottom:1px solid var(--border);min-height:50px}.file-panel-title{display:flex;flex-direction:column;min-width:0;flex:1}.file-name{font-weight:600;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-dir{font-size:11px;color:var(--text-faint);font-family:var(--mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-panel-actions{display:flex;align-items:center;gap:2px}.file-tree{border-bottom:1px solid var(--border);max-height:40%;display:flex;flex-direction:column}.file-tree-head{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;border-bottom:1px solid var(--border-soft)}.file-tree-body{overflow:auto;padding:4px 0 8px}.tree-row{display:flex;align-items:center;gap:6px;width:100%;border:none;background:transparent;color:var(--text);text-align:left;padding:4px 8px;font-size:12.5px}.tree-row:hover{background:var(--bg-elev2)}.tree-row.selected{background:var(--accent-soft);color:var(--accent-strong)}.tree-caret{display:inline-flex;width:12px;color:var(--text-faint)}.tree-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono)}.tree-loading{padding:2px 8px 2px 30px;font-size:11.5px}.file-content{flex:1;overflow:auto}.file-truncated{padding:6px 12px;background:var(--amber-soft);color:var(--amber)}.file-code{margin:0;padding:14px;font-family:var(--mono);font-size:12.5px;line-height:1.55;background:transparent;white-space:pre}.file-code code{display:block}.toasts{position:fixed;bottom:18px;right:18px;display:flex;flex-direction:column;gap:8px;z-index:200;max-width:380px}.toast{display:flex;align-items:flex-start;gap:9px;background:var(--bg-elev2);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);padding:10px 12px;font-size:13px;animation:toast-in .2s ease}@keyframes toast-in{0%{opacity:0;transform:translateY(6px)}}.toast-error{border-color:var(--red)}.toast-error .toast-icon{color:var(--red)}.toast-success .toast-icon{color:var(--green)}.toast-msg{flex:1;word-break:break-word}.drawer-backdrop{position:fixed;inset:0;background:#00000073;z-index:120;display:flex;align-items:flex-end;justify-content:center}.drawer{width:100%;max-width:900px;height:60vh;background:var(--bg-elev);border:1px solid var(--border);border-bottom:none;border-radius:14px 14px 0 0;display:flex;flex-direction:column;box-shadow:var(--shadow)}.drawer-head{display:flex;align-items:center;gap:10px;padding:11px 14px;border-bottom:1px solid var(--border-soft);font-weight:600}.drawer-body{margin:0;padding:12px 14px;overflow:auto;font-family:var(--mono);font-size:11.5px;line-height:1.5;white-space:pre-wrap;flex:1}.session-log-drawer{width:min(1180px,calc(100vw - 28px));height:min(84vh,900px);background:var(--bg-elev);border:1px solid var(--border);border-radius:14px;display:flex;flex-direction:column;box-shadow:var(--shadow);overflow:hidden}.session-log-head{flex:0 0 auto}.session-log-layout{min-height:0;flex:1;display:grid;grid-template-columns:minmax(340px,.9fr) minmax(0,1.4fr)}.session-log-list{min-width:0;overflow:auto;border-right:1px solid var(--border-soft);padding:10px}.session-log-list-title{padding:2px 4px 8px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint)}.session-log-group{border:1px solid var(--border-soft);border-radius:9px;overflow:hidden;margin-bottom:8px}.session-log-group.open{border-color:var(--border)}.session-log-group-head{width:100%;display:flex;align-items:flex-start;gap:7px;padding:9px;border:0;border-radius:0;background:var(--bg);text-align:left}.session-log-group-head:hover{background:var(--bg-elev2)}.session-log-caret{color:var(--text-faint);padding-top:1px}.session-log-group-main{min-width:0;flex:1;display:flex;flex-direction:column;gap:3px}.session-log-group-main strong,.session-log-group-main span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-log-group-main strong{font-size:12.5px}.session-log-group-main span{font-size:11.5px;color:var(--text-dim)}.session-log-group-stats{flex:0 0 auto;display:flex;align-items:flex-end;flex-direction:column;gap:2px;font-size:10.5px;color:var(--text-faint);white-space:nowrap}.session-log-group-rows{border-top:1px solid var(--border-soft);background:var(--bg-inset)}.session-log-row{width:100%;display:grid;grid-template-columns:30px 62px 54px minmax(70px,120px) auto;align-items:center;gap:6px;padding:7px 9px;border:0;border-bottom:1px solid var(--border-soft);border-radius:0;background:transparent;text-align:left;font-size:10.5px;color:var(--text-dim)}.session-log-row:last-child{border-bottom:0}.session-log-row:hover,.session-log-row.selected{background:var(--accent-soft);color:var(--text)}.session-log-row-index{color:var(--text-faint)}.session-log-row-model,.session-log-row-preview{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-log-detail{min-width:0;display:flex;flex-direction:column;background:var(--bg)}.session-log-detail-head{display:flex;align-items:center;gap:8px;padding:11px 14px 8px;border-bottom:1px solid var(--border-soft)}.session-log-tabs{display:flex;gap:5px;padding:8px 14px;border-bottom:1px solid var(--border-soft);overflow-x:auto}.session-log-tabs .btn.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-strong)}.session-log-detail-body{min-height:0;flex:1;overflow:auto;padding:12px 14px}.session-log-section{margin-bottom:14px}.session-log-section h3{margin:0 0 6px;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--text-faint)}.session-log-box{background:var(--bg-inset);border:1px solid var(--border-soft);border-radius:8px}.session-log-text{padding:9px 10px;white-space:pre-wrap;word-break:break-word;font-size:12.5px}.session-log-code{margin:0 0 14px;padding:10px;max-height:58vh;overflow:auto;background:var(--code-bg);border:1px solid var(--code-border);border-radius:8px;font-family:var(--mono);font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-word}.session-log-code.compact{max-height:30vh}.log-status{font-size:10px;line-height:1.2;padding:2px 6px;border:1px solid var(--border);border-radius:999px;white-space:nowrap}.log-status.ok{color:var(--green);border-color:var(--green)}.log-status.bad{color:var(--red);border-color:var(--red)}.log-status.live{color:var(--amber);border-color:var(--amber)}.session-log-empty{padding:24px 10px;color:var(--text-dim);font-size:12px;line-height:1.6}.drawer-scrim{display:none}@media(max-width:900px){.file-panel{position:fixed;right:0;top:0;bottom:0;width:min(92vw,640px)}}@media(max-width:768px){.sidebar-container{position:fixed;top:0;bottom:0;left:0;width:min(86vw,320px);flex:0 0 auto;transform:translate(-100%);transition:transform .2s ease;box-shadow:var(--shadow)}.sidebar-container.open{transform:translate(0)}.sidebar-rail,.sidebar-container>.resize-handle{display:none}.drawer-scrim{display:block;position:fixed;inset:0;background:#00000080;z-index:25}.session-log-drawer{width:calc(100vw - 12px);height:calc(100vh - 12px);border-radius:12px}.session-log-layout{display:flex;flex-direction:column}.session-log-list{flex:0 0 42%;border-right:0;border-bottom:1px solid var(--border-soft)}.session-log-detail{flex:1}.header-cwd{max-width:32vw}.inline-select{display:none}.composer-wrap{padding:10px 10px 12px}.chat>.turn,.chat>.inline-error,.chat>.empty-state{padding-left:12px;padding-right:12px}.token-meter .token-label{display:none}}