diff --git a/bun.lock b/bun.lock index ea035a2c59..11ada612a7 100644 --- a/bun.lock +++ b/bun.lock @@ -1,6 +1,5 @@ { "lockfileVersion": 1, - "configVersion": 0, "workspaces": { "": { "name": "mux", @@ -200,8 +199,8 @@ }, "trustedDependencies": [ "esbuild", - "sharp", "node-pty", + "sharp", "ssh2", "@swc/core", "electron", @@ -1469,7 +1468,7 @@ "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + "@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], "@types/plist": ["@types/plist@3.0.5", "", { "dependencies": { "@types/node": "*", "xmlbuilder": ">=11.0.1" } }, "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA=="], @@ -3903,14 +3902,26 @@ "@istanbuljs/load-nyc-config/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], + "@jest/console/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + "@jest/console/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@jest/core/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + "@jest/core/ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], "@jest/core/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "@jest/core/ci-info": ["ci-info@4.3.1", "", {}, "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA=="], + "@jest/environment/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + + "@jest/fake-timers/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + + "@jest/pattern/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + + "@jest/reporters/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + "@jest/reporters/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "@jest/reporters/istanbul-lib-instrument": ["istanbul-lib-instrument@6.0.3", "", { "dependencies": { "@babel/core": "^7.23.9", "@babel/parser": "^7.23.9", "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" } }, "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q=="], @@ -3925,6 +3936,8 @@ "@jest/transform/write-file-atomic": ["write-file-atomic@5.0.1", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" } }, "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw=="], + "@jest/types/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + "@jest/types/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "@malept/flatpak-bundler/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], @@ -4017,33 +4030,17 @@ "@testing-library/jest-dom/dom-accessibility-api": ["dom-accessibility-api@0.6.3", "", {}, "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w=="], - "@types/asn1/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], - - "@types/body-parser/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], - - "@types/cacheable-request/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], - - "@types/connect/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], - - "@types/express-serve-static-core/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], - - "@types/keyv/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], + "@types/cors/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], - "@types/plist/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], + "@types/fs-extra/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], - "@types/responselike/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], - - "@types/send/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], - - "@types/serve-static/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], + "@types/jsdom/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], "@types/ssh2/@types/node": ["@types/node@18.19.130", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="], - "@types/sshpk/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], + "@types/write-file-atomic/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], - "@types/wait-on/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], - - "@types/yauzl/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], + "@types/ws/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -4077,6 +4074,8 @@ "builder-util/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + "bun-types/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + "cacache/fs-minipass": ["fs-minipass@3.0.3", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw=="], "cacache/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], @@ -4119,8 +4118,6 @@ "dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], - "electron/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], - "electron-builder/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "electron-publish/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], @@ -4183,6 +4180,8 @@ "globby/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + "happy-dom/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + "hasha/type-fest": ["type-fest@0.8.1", "", {}, "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="], "hast-util-to-parse5/property-information": ["property-information@6.5.0", "", {}, "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig=="], @@ -4203,8 +4202,6 @@ "istanbul-lib-report/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "jest-circus/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], - "jest-circus/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "jest-cli/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], @@ -4217,7 +4214,7 @@ "jest-each/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "jest-environment-node/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], + "jest-haste-map/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], "jest-haste-map/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], @@ -4229,24 +4226,28 @@ "jest-message-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-mock/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + "jest-process-manager/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "jest-process-manager/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "jest-resolve/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "jest-runner/@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], - "jest-runner/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "jest-runner/source-map-support": ["source-map-support@0.5.13", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w=="], + "jest-runtime/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + "jest-runtime/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "jest-runtime/strip-bom": ["strip-bom@4.0.0", "", {}, "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="], "jest-snapshot/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-util/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + "jest-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "jest-util/ci-info": ["ci-info@4.3.1", "", {}, "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA=="], @@ -4255,12 +4256,16 @@ "jest-watch-typeahead/slash": ["slash@5.1.0", "", {}, "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="], + "jest-watcher/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + "jest-watcher/ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], "jest-watcher/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "jest-watcher/string-length": ["string-length@4.0.2", "", { "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" } }, "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ=="], + "jest-worker/@types/node": ["@types/node@20.19.25", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ=="], + "jsdom/parse5": ["parse5@8.0.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA=="], "jsdom/whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], diff --git a/packages/chat-components/styles/variables.css b/packages/chat-components/styles/variables.css index 8816067eb9..3d8f246125 100644 --- a/packages/chat-components/styles/variables.css +++ b/packages/chat-components/styles/variables.css @@ -7,7 +7,7 @@ :root { /* Base colors - dark theme default */ - --color-background: #1e1e1e; + --color-background: #09090B; --color-foreground: #e4e4e7; --color-text: #e4e4e7; --color-muted: #a1a1aa; @@ -16,7 +16,7 @@ --color-accent: #3f3f46; /* Code blocks */ - --color-code-bg: #0d0d0d; + --color-code-bg: #141416; --color-code-border: #27272a; /* User messages */ @@ -42,6 +42,22 @@ /* Diff colors */ --color-diff-add-bg: rgba(16, 185, 129, 0.1); --color-diff-remove-bg: rgba(239, 68, 68, 0.1); + + /* Links & inline code */ + --color-link: #60A5FA; + --color-inline-code: #94A3B8; + + /* Danger text */ + --color-danger-text: #F87171; + + /* Badge colors */ + --color-success-badge-bg: #052E16; + --color-success-badge-text: #16A34A; + --color-danger-badge-bg: #450A0A; + --color-danger-badge-text: #F87171; + + /* Muted agent */ + --color-muted-agent: #888895; } /* Light theme */ @@ -67,7 +83,7 @@ /* Dark theme (explicit) */ .dark { - --color-background: #1e1e1e; + --color-background: #09090B; --color-foreground: #e4e4e7; --color-text: #e4e4e7; --color-muted: #a1a1aa; @@ -75,7 +91,7 @@ --color-card: #27272a; --color-accent: #3f3f46; - --color-code-bg: #0d0d0d; + --color-code-bg: #141416; --color-code-border: #27272a; --color-user-surface: #27272a; diff --git a/src/browser/components/TodoList/TodoList.tsx b/src/browser/components/TodoList/TodoList.tsx index 2dd25907fd..17d5098d47 100644 --- a/src/browser/components/TodoList/TodoList.tsx +++ b/src/browser/components/TodoList/TodoList.tsx @@ -95,7 +95,7 @@ export const TodoList: React.FC = ({ todos }) => { let pendingIndex = 0; return ( -
+
{todos.map((todo, index) => { const currentCompletedIndex = todo.status === "completed" ? completedIndex++ : undefined; const currentPendingIndex = todo.status === "pending" ? pendingIndex++ : undefined; @@ -111,7 +111,12 @@ export const TodoList: React.FC = ({ todos }) => { return (
= ({ code, language, highlightLanguage ); }; +interface TableProps { + children?: ReactNode; +} + // Custom components for markdown rendering export const markdownComponents = { // Pass through pre element - let code component handle the wrapping pre: ({ children }: PreProps) => <>{children}, + // Wrap tables in a scroll container for horizontal overflow. + table: ({ children }: TableProps) => ( +
+ {children}
+
+ ), + // Custom anchor to open links externally a: ({ href, children }: AnchorProps) => { const normalizedHref = diff --git a/src/browser/features/Messages/MessageWindow.tsx b/src/browser/features/Messages/MessageWindow.tsx index fbb4e80662..4be02c139c 100644 --- a/src/browser/features/Messages/MessageWindow.tsx +++ b/src/browser/features/Messages/MessageWindow.tsx @@ -82,7 +82,7 @@ export const MessageWindow: React.FC = ({
diff --git a/src/browser/features/Messages/ReasoningMessage.tsx b/src/browser/features/Messages/ReasoningMessage.tsx index fb38d1603e..f7b1b414d6 100644 --- a/src/browser/features/Messages/ReasoningMessage.tsx +++ b/src/browser/features/Messages/ReasoningMessage.tsx @@ -5,7 +5,7 @@ import { TypewriterMarkdown } from "./TypewriterMarkdown"; import { normalizeReasoningMarkdown } from "./MarkdownStyles"; import { cn } from "@/common/lib/utils"; import { Shimmer } from "../AIElements/Shimmer"; -import { Lightbulb } from "lucide-react"; +import { ChevronRight, Lightbulb } from "lucide-react"; interface ReasoningMessageProps { message: DisplayedMessage & { type: "reasoning" }; @@ -125,12 +125,14 @@ export const ReasoningMessage: React.FC = ({ message, cla return (
= ({ message, cla
-
+
{isStreaming ? ( Thinking... ) : hasContent ? ( - + {parsedLeadingBoldSummary ? ( <> {parsedLeadingBoldSummary.boldText} @@ -177,11 +179,11 @@ export const ReasoningMessage: React.FC = ({ message, cla {isCollapsible && ( - ▸ + )}
@@ -190,6 +192,7 @@ export const ReasoningMessage: React.FC = ({ message, cla Use CSS transitions for smooth height changes instead of conditional rendering. */}
= ({ const syntheticClassName = cn(className, isSynthetic && "opacity-70"); return ( - - {isLocalCommandOutput ? ( - - ) : ( - - )} - +
+ +
+ {isLocalCommandOutput ? ( + + ) : ( + + )} +
+
+
); }; diff --git a/src/browser/features/Tools/AgentReportToolCall.tsx b/src/browser/features/Tools/AgentReportToolCall.tsx index 2bf50dedd2..51f2964935 100644 --- a/src/browser/features/Tools/AgentReportToolCall.tsx +++ b/src/browser/features/Tools/AgentReportToolCall.tsx @@ -45,7 +45,7 @@ export const AgentReportToolCall: React.FC = ({ return ( - + {title} {getStatusDisplay(status)} diff --git a/src/browser/features/Tools/AgentSkillReadFileToolCall.tsx b/src/browser/features/Tools/AgentSkillReadFileToolCall.tsx index 5e8cafee76..a299c0183a 100644 --- a/src/browser/features/Tools/AgentSkillReadFileToolCall.tsx +++ b/src/browser/features/Tools/AgentSkillReadFileToolCall.tsx @@ -106,7 +106,7 @@ export const AgentSkillReadFileToolCall: React.FC - +
diff --git a/src/browser/features/Tools/AgentSkillReadToolCall.tsx b/src/browser/features/Tools/AgentSkillReadToolCall.tsx index b2b17e7d94..e1d61dc1fd 100644 --- a/src/browser/features/Tools/AgentSkillReadToolCall.tsx +++ b/src/browser/features/Tools/AgentSkillReadToolCall.tsx @@ -87,7 +87,7 @@ export const AgentSkillReadToolCall: React.FC = ({ return ( - +
Read skill: diff --git a/src/browser/features/Tools/AskUserQuestionToolCall.tsx b/src/browser/features/Tools/AskUserQuestionToolCall.tsx index dcdd29df37..76525553f1 100644 --- a/src/browser/features/Tools/AskUserQuestionToolCall.tsx +++ b/src/browser/features/Tools/AskUserQuestionToolCall.tsx @@ -561,7 +561,7 @@ export function AskUserQuestionToolCall(props: { return ( - +
{title}
diff --git a/src/browser/features/Tools/BashBackgroundListToolCall.tsx b/src/browser/features/Tools/BashBackgroundListToolCall.tsx index 2cae48ff13..f7d869c23b 100644 --- a/src/browser/features/Tools/BashBackgroundListToolCall.tsx +++ b/src/browser/features/Tools/BashBackgroundListToolCall.tsx @@ -50,7 +50,7 @@ export const BashBackgroundListToolCall: React.FC - + {result?.success diff --git a/src/browser/features/Tools/BashOutputToolCall.tsx b/src/browser/features/Tools/BashOutputToolCall.tsx index 1bf9fe11ae..329076cbe8 100644 --- a/src/browser/features/Tools/BashOutputToolCall.tsx +++ b/src/browser/features/Tools/BashOutputToolCall.tsx @@ -46,7 +46,7 @@ export const BashOutputToolCall: React.FC = ({ return ( - + {args.process_id} diff --git a/src/browser/features/Tools/BashToolCall.tsx b/src/browser/features/Tools/BashToolCall.tsx index a420d9d000..477bd525d5 100644 --- a/src/browser/features/Tools/BashToolCall.tsx +++ b/src/browser/features/Tools/BashToolCall.tsx @@ -233,11 +233,11 @@ export const BashToolCall: React.FC = ({ toggleExpanded(); }; return ( - - - + + + - {args.script} + {args.script} {isBackground && backgroundProcessId && workspaceId && ( @@ -278,7 +278,7 @@ export const BashToolCall: React.FC = ({ {result && } )} - + {getStatusDisplay(effectiveStatus)} {/* Show "Background" button when bash is executing and can be sent to background. diff --git a/src/browser/features/Tools/DesktopScreenshotToolCall.tsx b/src/browser/features/Tools/DesktopScreenshotToolCall.tsx index e06c69ef16..649c137416 100644 --- a/src/browser/features/Tools/DesktopScreenshotToolCall.tsx +++ b/src/browser/features/Tools/DesktopScreenshotToolCall.tsx @@ -99,7 +99,7 @@ export const DesktopScreenshotToolCall: React.FC return ( hasDetails && toggleExpanded()}> - {hasDetails && } + {hasDetails && } Desktop Screenshot {screenshotDimensions && ( diff --git a/src/browser/features/Tools/FileEditToolCall.tsx b/src/browser/features/Tools/FileEditToolCall.tsx index f7525a33cf..e2b0a09925 100644 --- a/src/browser/features/Tools/FileEditToolCall.tsx +++ b/src/browser/features/Tools/FileEditToolCall.tsx @@ -141,13 +141,13 @@ export const FileEditToolCall: React.FC = ({ : []; return ( - - + +
- +
@@ -165,7 +165,7 @@ export const FileEditToolCall: React.FC = ({ {expanded && ( - + {showInvocation && ( Invocation diff --git a/src/browser/features/Tools/FileReadToolCall.tsx b/src/browser/features/Tools/FileReadToolCall.tsx index 0f1ee6b7d8..1d210a89cb 100644 --- a/src/browser/features/Tools/FileReadToolCall.tsx +++ b/src/browser/features/Tools/FileReadToolCall.tsx @@ -74,7 +74,7 @@ export const FileReadToolCall: React.FC = ({ return ( - +
diff --git a/src/browser/features/Tools/GenericToolCall.tsx b/src/browser/features/Tools/GenericToolCall.tsx index 30945c4ff2..23b3596226 100644 --- a/src/browser/features/Tools/GenericToolCall.tsx +++ b/src/browser/features/Tools/GenericToolCall.tsx @@ -67,12 +67,12 @@ export const GenericToolCall: React.FC = ({ const shouldShowDetails = expanded || hasImages; return ( - - hasDetails && toggleExpanded()}> - {hasDetails && } + + hasDetails && toggleExpanded()} data-tool-header> + {hasDetails && } {TOOL_NAME_TO_ICON[toolName] && } {toolName} - {getStatusDisplay(status)} + {getStatusDisplay(status)} {/* Always show images if present */} diff --git a/src/browser/features/Tools/ProposePlanToolCall.tsx b/src/browser/features/Tools/ProposePlanToolCall.tsx index 524a480213..9b7f9d9dcf 100644 --- a/src/browser/features/Tools/ProposePlanToolCall.tsx +++ b/src/browser/features/Tools/ProposePlanToolCall.tsx @@ -1011,7 +1011,7 @@ export const ProposePlanToolCall: React.FC = (props) = <> - + propose_plan {statusDisplay} diff --git a/src/browser/features/Tools/Shared/ToolPrimitives.tsx b/src/browser/features/Tools/Shared/ToolPrimitives.tsx index 4dcf9fa7e3..d6b74666cb 100644 --- a/src/browser/features/Tools/Shared/ToolPrimitives.tsx +++ b/src/browser/features/Tools/Shared/ToolPrimitives.tsx @@ -10,6 +10,7 @@ import { ArrowRightLeft, Bell, BookOpen, + ChevronRight, Database, FileText, GitCommit, @@ -43,7 +44,7 @@ interface ToolContainerProps extends React.HTMLAttributes { export const ToolContainer: React.FC = ({ expanded, className, ...props }) => (
> = ({ }) => ( { expanded: boolean; } -export const ExpandIcon: React.FC = ({ expanded, className, ...props }) => ( +export const ExpandIcon: React.FC = ({ expanded, className, children: _children, ...props }) => ( + > + + ); export const ToolName: React.FC> = ({ @@ -121,8 +124,8 @@ export const StatusIndicator: React.FC = ({ }) => ( = ({ exitCode, classNam {exitCode} diff --git a/src/browser/features/Tools/SwitchAgentToolCall.tsx b/src/browser/features/Tools/SwitchAgentToolCall.tsx index 758f4a0574..643f2ef4b4 100644 --- a/src/browser/features/Tools/SwitchAgentToolCall.tsx +++ b/src/browser/features/Tools/SwitchAgentToolCall.tsx @@ -57,7 +57,7 @@ export const SwitchAgentToolCall: React.FC = (props) = return ( - {hasReason && } + {hasReason && } {handoffLabel}: {targetAgentLabel} diff --git a/src/browser/features/Tools/TaskApplyGitPatchToolCall.tsx b/src/browser/features/Tools/TaskApplyGitPatchToolCall.tsx index b5b0b5ef09..bf69e7b985 100644 --- a/src/browser/features/Tools/TaskApplyGitPatchToolCall.tsx +++ b/src/browser/features/Tools/TaskApplyGitPatchToolCall.tsx @@ -366,7 +366,7 @@ export const TaskApplyGitPatchToolCall: React.FC return ( - + Apply patch {taskId} diff --git a/src/browser/features/Tools/TaskToolCall.tsx b/src/browser/features/Tools/TaskToolCall.tsx index 93f65d9f71..43a50577c4 100644 --- a/src/browser/features/Tools/TaskToolCall.tsx +++ b/src/browser/features/Tools/TaskToolCall.tsx @@ -813,7 +813,7 @@ export const TaskToolCall: React.FC = ({ return ( - + task {kindBadge} @@ -1024,7 +1024,7 @@ export const TaskAwaitToolCall: React.FC = ({ return ( - + task_await {totalCount > 0 && ( @@ -1191,7 +1191,7 @@ export const TaskListToolCall: React.FC = ({ return ( - + task_list {tasks.length} task(s) @@ -1266,7 +1266,7 @@ export const TaskTerminateToolCall: React.FC = ({ return ( - + task_terminate diff --git a/src/browser/features/Tools/TodoToolCall.tsx b/src/browser/features/Tools/TodoToolCall.tsx index 0138870b6c..d14975c24e 100644 --- a/src/browser/features/Tools/TodoToolCall.tsx +++ b/src/browser/features/Tools/TodoToolCall.tsx @@ -28,7 +28,7 @@ export const TodoToolCall: React.FC = ({ return ( - + {statusDisplay} diff --git a/src/browser/features/Tools/WebFetchToolCall.tsx b/src/browser/features/Tools/WebFetchToolCall.tsx index 3727b9b392..beeb9f8389 100644 --- a/src/browser/features/Tools/WebFetchToolCall.tsx +++ b/src/browser/features/Tools/WebFetchToolCall.tsx @@ -124,7 +124,7 @@ export const WebFetchToolCall: React.FC = ({ return ( - +
{domain} diff --git a/src/browser/features/Tools/WebSearchToolCall.tsx b/src/browser/features/Tools/WebSearchToolCall.tsx index 90522d0344..8e229f8f57 100644 --- a/src/browser/features/Tools/WebSearchToolCall.tsx +++ b/src/browser/features/Tools/WebSearchToolCall.tsx @@ -84,7 +84,7 @@ export const WebSearchToolCall: React.FC = ({ return ( - +
{query ?? "searching..."} diff --git a/src/browser/features/Tools/analyticsQuery/AnalyticsQueryToolCall.tsx b/src/browser/features/Tools/analyticsQuery/AnalyticsQueryToolCall.tsx index 31b4b5991d..3beb7ad5e4 100644 --- a/src/browser/features/Tools/analyticsQuery/AnalyticsQueryToolCall.tsx +++ b/src/browser/features/Tools/analyticsQuery/AnalyticsQueryToolCall.tsx @@ -171,7 +171,7 @@ export function AnalyticsQueryToolCall(props: AnalyticsQueryToolCallProps): JSX. return ( - + {title} {successResult && ( diff --git a/src/browser/styles/globals.css b/src/browser/styles/globals.css index 42f44942f4..51ac1d4606 100644 --- a/src/browser/styles/globals.css +++ b/src/browser/styles/globals.css @@ -107,7 +107,7 @@ --color-git-untracked: #73c991; /* green for new/untracked files */ /* Background & Layout */ - --color-background: hsl(0 0% 12%); + --color-background: #09090B; --color-background-secondary: hsl(60 1% 15%); --color-border: #262626; /* neutral-800 */ --color-foreground: hsl(0 0% 83%); @@ -130,7 +130,7 @@ --color-surface-sky: hsla(193, 67%, 12%, 1); /* Code */ - --color-code-bg: hsl(0 6.43% 8.04%); + --color-code-bg: #141416; /* Buttons */ --color-button-bg: hsl(0 0% 24%); @@ -2325,3 +2325,338 @@ input[type="checkbox"] { :root[data-left-sidebar-collapsed="true"] [data-testid="workspace-menu-bar"] { padding-left: 60px; } + +/* ============================================ + CSS Redesign Overrides (css-redesign branch) + ============================================ */ + +/* --- Typography --- */ +.markdown-content, +[data-streamdown] { + font-weight: 200; + letter-spacing: 0.01em; +} + +.markdown-content code { + color: #94A3B8; + font-weight: 400; +} + +/* --- Links --- */ +.markdown-content a { + color: #60A5FA; +} + +/* --- Lists: remove default bullets, custom counters --- */ +.markdown-content ul, +.markdown-content ol { + list-style: none; + padding-left: 0; +} +.markdown-content ol { + counter-reset: item; +} +.markdown-content ol > li { + counter-increment: item; + padding-left: 24px; + position: relative; +} +.markdown-content ol > li::before { + content: counter(item) "."; + font-weight: 600; + font-family: var(--font-mono, "Geist Mono", monospace); + color: var(--color-foreground); + position: absolute; + left: 0; +} +.markdown-content ul > li { + padding-left: 16px; +} +/* Nested lists get indent back */ +.markdown-content li > ul, +.markdown-content li > ol { + padding-left: 8px; +} +.markdown-content li > ul > li { + padding-left: 16px; + list-style: disc; +} + +/* --- Numbered sections: heading flush left, body indented --- */ +.numbered-section { + margin: 1.2em 0 0.6em; +} +.numbered-section > h3 { + margin-top: 0; +} +.numbered-section-body { + padding-left: 24px; +} + +/* --- Tables: minimal styling --- */ +.markdown-content table { + border-collapse: separate; + border-spacing: 0; + border-radius: 0; + border: none; + width: 100%; + max-width: 100%; + overflow: hidden; +} +.markdown-content table th, +.markdown-content table td { + border: none; + border-bottom: 1px solid var(--color-border); + white-space: nowrap; + padding: 10px 16px; + font-size: 13px; +} +.markdown-content table tr:last-child td { + border-bottom: none; +} +.markdown-content table th { + background: none; + color: var(--color-muted, #a1a1aa); + font-weight: 400; +} +/* Horizontal scroll wrapper for tables */ +.table-scroll-wrapper { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + border-radius: 8px; +} + +/* --- Scrollbars: dark thin style --- */ +* { + scrollbar-width: thin; + scrollbar-color: #333 transparent; +} +*::-webkit-scrollbar { + height: 6px; + width: 6px; +} +*::-webkit-scrollbar-track { + background: transparent; +} +*::-webkit-scrollbar-thumb { + background: #333; + border-radius: 3px; +} +*::-webkit-scrollbar-thumb:hover { + background: #555; +} + +/* --- User message bubble: transparent border, show on hover --- */ +[data-user-message] > div:first-child, +[data-message-role="user"] > div:first-child { + border-color: transparent; +} +[data-user-message] > div:first-child:hover, +[data-message-role="user"] > div:first-child:hover { + border-color: var(--color-user-border); +} + +/* --- Tool calls: muted agent text --- */ +[data-tool-call], +[data-tool-call] [data-tool-header], +[data-tool-call] [data-tool-command] { + color: #888895; + font-size: 13px; +} +[data-tool-call] [data-tool-command] { + color: #94A3B8; + font-family: var(--font-mono, "Geist Mono", monospace); +} + +/* --- Tool status: icon-only (hide text label) --- */ +[data-tool-status] { + font-size: 0; + line-height: 0; +} +[data-tool-status] svg { + font-size: 12px; + width: 14px; + height: 14px; +} + +/* --- Tool pipe separators --- */ +.tool-pipe, +[data-tool-separator] { + color: #888895; + opacity: 0.4; + font-weight: 300; + margin: 0 4px; +} + +/* --- Badge colors --- */ +[data-exit-code="0"], +.exit-code-success { + background: #052E16; + color: #16A34A; +} +[data-exit-code]:not([data-exit-code="0"]), +.exit-code-error { + background: #450A0A; + color: #F87171; +} + +/* --- Error/danger text --- */ +[data-tool-error], +.tool-output-error { + color: #F87171; +} + +/* --- Thinking blocks: rendered as tool-call rows --- */ +[data-reasoning], +[data-thinking-block] { + background: none; + padding-left: 0; + padding-right: 0; +} +[data-reasoning] [data-reasoning-toggle], +[data-thinking-block] [data-toggle] { + padding-left: 0; +} +[data-reasoning] [data-reasoning-badge], +[data-thinking-badge] { + background: none; + color: #94A3B8; + text-transform: capitalize; + font-family: var(--font-mono, "Geist Mono", monospace); + font-size: 13px; +} +[data-reasoning] [data-reasoning-preview], +[data-thinking-preview] { + color: #888895; +} +[data-reasoning] [data-reasoning-content], +[data-reasoning] [data-reasoning-content] p, +[data-reasoning] [data-reasoning-content] li, +[data-thinking-content], +[data-thinking-content] p, +[data-thinking-content] li { + color: #888895; +} + +/* --- Activity group: vertical tree line for grouped thinking + tool calls --- */ +.activity-group { + position: relative; +} +.activity-children { + position: relative; + margin-left: 8px; + padding-left: 16px; +} +.activity-children::before { + content: ''; + position: absolute; + left: 0; + top: 0; + bottom: 8px; + width: 1px; + background: var(--color-border); +} + +/* --- Step progress list (todo_write) --- */ +.step-list { + display: flex; + flex-direction: column; + gap: 0; + margin-left: 3px; +} +.step-item { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 12px; + font-family: var(--font-mono, "Geist Mono", monospace); + font-size: 13px; + color: #888895; +} +.step-item.step-active { + color: var(--color-foreground); +} +.step-item.step-done { + color: #888895; + text-decoration: line-through; + opacity: 0.6; +} + +/* --- File change cards --- */ +.file-change-card { + background: #141416; + border-radius: 8px; + padding: 16px; + border: none; +} +.file-change-header { + display: flex; + align-items: center; + gap: 8px; + font-family: var(--font-mono, "Geist Mono", monospace); + font-size: 14px; + color: var(--color-muted, #a1a1aa); + margin-bottom: 12px; +} +.file-change-body { + padding-left: 22px; +} +.file-change-body p { + margin: 4px 0; + font-size: 14px; + color: var(--color-muted, #a1a1aa); +} + +/* --- Details/summary collapsible: chevron-based --- */ +.markdown-content details { + margin: 1em 0; + border: none; + border-radius: 0; + padding: 0; +} +.markdown-content details summary { + cursor: pointer; + padding: 4px 0; + font-weight: 400; + color: var(--color-foreground); + font-size: 14px; + user-select: none; + list-style: none; + display: flex; + align-items: center; + gap: 8px; +} +.markdown-content details summary::-webkit-details-marker { + display: none; +} +.markdown-content details summary::before { + content: ''; + display: inline-block; + width: 16px; + height: 16px; + min-width: 16px; + flex-shrink: 0; + background: currentColor; + -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E") no-repeat center / 12px 12px; + mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E") no-repeat center / 12px 12px; + transition: transform 0.2s ease; +} +.markdown-content details[open] summary::before { + transform: rotate(90deg); +} +.markdown-content details summary:hover { + background: none; +} +.markdown-content details[open] summary { + border-bottom: none; +} +.markdown-content details > *:not(summary) { + padding: 0 0 0 24px; + color: #888895; +} + +/* --- Pre/code blocks responsive --- */ +.markdown-content pre { + width: 100%; + max-width: 100%; +}