diff --git a/Cargo.lock b/Cargo.lock
index 9a4986fa1d9bc2beec2decca4e05479842d7a978..9dd3c00221b171cbe821d38e966f1d54f55d9f99 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -111,22 +111,13 @@ dependencies = [
"workspace",
]
-[[package]]
-name = "addr2line"
-version = "0.24.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
-dependencies = [
- "gimli 0.31.1",
-]
-
[[package]]
name = "addr2line"
version = "0.25.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b"
dependencies = [
- "gimli 0.32.3",
+ "gimli",
]
[[package]]
@@ -674,7 +665,7 @@ version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7eb93bbb63b9c227414f6eb3a0adfddca591a8ce1e9b60661bb08969b87e340b"
dependencies = [
- "object 0.37.3",
+ "object",
]
[[package]]
@@ -1821,11 +1812,11 @@ version = "0.3.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6"
dependencies = [
- "addr2line 0.25.1",
+ "addr2line",
"cfg-if",
"libc",
"miniz_oxide",
- "object 0.37.3",
+ "object",
"rustc-demangle",
"windows-link 0.2.1",
]
@@ -3818,36 +3809,36 @@ dependencies = [
[[package]]
name = "cranelift-assembler-x64"
-version = "0.120.2"
+version = "0.123.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5023e06632d8f351c2891793ccccfe4aef957954904392434038745fb6f1f68"
+checksum = "ba33ddc4e157cb1abe9da6c821e8824f99e56d057c2c22536850e0141f281d61"
dependencies = [
"cranelift-assembler-x64-meta",
]
[[package]]
name = "cranelift-assembler-x64-meta"
-version = "0.120.2"
+version = "0.123.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1c4012b4c8c1f6eb05c0a0a540e3e1ee992631af51aa2bbb3e712903ce4fd65"
+checksum = "69b23dd6ea360e6fb28a3f3b40b7f126509668f58076a4729b2cfd656f26a0ad"
dependencies = [
"cranelift-srcgen",
]
[[package]]
name = "cranelift-bforest"
-version = "0.120.2"
+version = "0.123.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d6d883b4942ef3a7104096b8bc6f2d1a41393f159ac8de12aed27b25d67f895"
+checksum = "a9d81afcee8fe27ee2536987df3fadcb2e161af4edb7dbe3ef36838d0ce74382"
dependencies = [
"cranelift-entity",
]
[[package]]
name = "cranelift-bitset"
-version = "0.120.2"
+version = "0.123.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db7b2ee9eec6ca8a716d900d5264d678fb2c290c58c46c8da7f94ee268175d17"
+checksum = "fb33595f1279fe7af03b28245060e9085caf98b10ed3137461a85796eb83972a"
dependencies = [
"serde",
"serde_derive",
@@ -3855,9 +3846,9 @@ dependencies = [
[[package]]
name = "cranelift-codegen"
-version = "0.120.2"
+version = "0.123.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aeda0892577afdce1ac2e9a983a55f8c5b87a59334e1f79d8f735a2d7ba4f4b4"
+checksum = "0230a6ac0660bfe31eb244cbb43dcd4f2b3c1c4e0addc3e0348c6053ea60272e"
dependencies = [
"bumpalo",
"cranelift-assembler-x64",
@@ -3868,7 +3859,7 @@ dependencies = [
"cranelift-control",
"cranelift-entity",
"cranelift-isle",
- "gimli 0.31.1",
+ "gimli",
"hashbrown 0.15.5",
"log",
"postcard",
@@ -3880,40 +3871,42 @@ dependencies = [
"sha2",
"smallvec",
"target-lexicon 0.13.3",
+ "wasmtime-internal-math",
]
[[package]]
name = "cranelift-codegen-meta"
-version = "0.120.2"
+version = "0.123.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e461480d87f920c2787422463313326f67664e68108c14788ba1676f5edfcd15"
+checksum = "96d6817fdc15cb8f236fc9d8e610767d3a03327ceca4abff7a14d8e2154c405e"
dependencies = [
"cranelift-assembler-x64-meta",
"cranelift-codegen-shared",
"cranelift-srcgen",
+ "heck 0.5.0",
"pulley-interpreter",
]
[[package]]
name = "cranelift-codegen-shared"
-version = "0.120.2"
+version = "0.123.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "976584d09f200c6c84c4b9ff7af64fc9ad0cb64dffa5780991edd3fe143a30a1"
+checksum = "0403796328e9e2e7df2b80191cdbb473fd9ea3889eb45ef5632d0fef168ea032"
[[package]]
name = "cranelift-control"
-version = "0.120.2"
+version = "0.123.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46d43d70f4e17c545aa88dbf4c84d4200755d27c6e3272ebe4de65802fa6a955"
+checksum = "188f04092279a3814e0b6235c2f9c2e34028e4beb72da7bfed55cbd184702bcc"
dependencies = [
"arbitrary",
]
[[package]]
name = "cranelift-entity"
-version = "0.120.2"
+version = "0.123.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d75418674520cb400c8772bfd6e11a62736c78fc1b6e418195696841d1bf91f1"
+checksum = "43f5e7391167605d505fe66a337e1a69583b3f34b63d359ffa5a430313c555e8"
dependencies = [
"cranelift-bitset",
"serde",
@@ -3922,9 +3915,9 @@ dependencies = [
[[package]]
name = "cranelift-frontend"
-version = "0.120.2"
+version = "0.123.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c8b1a91c86687a344f3c52dd6dfb6e50db0dfa7f2e9c7711b060b3623e1fdeb"
+checksum = "ea5440792eb2b5ba0a0976df371b9f94031bd853ae56f389de610bca7128a7cb"
dependencies = [
"cranelift-codegen",
"log",
@@ -3934,15 +3927,15 @@ dependencies = [
[[package]]
name = "cranelift-isle"
-version = "0.120.2"
+version = "0.123.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "711baa4e3432d4129295b39ec2b4040cc1b558874ba0a37d08e832e857db7285"
+checksum = "1e5c05fab6fce38d729088f3fa1060eaa1ad54eefd473588887205ed2ab2f79e"
[[package]]
name = "cranelift-native"
-version = "0.120.2"
+version = "0.123.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41c83e8666e3bcc5ffeaf6f01f356f0e1f9dcd69ce5511a1efd7ca5722001a3f"
+checksum = "9c9a0607a028edf5ba5bba7e7cf5ca1b7f0a030e3ae84dcd401e8b9b05192280"
dependencies = [
"cranelift-codegen",
"libc",
@@ -3951,9 +3944,9 @@ dependencies = [
[[package]]
name = "cranelift-srcgen"
-version = "0.120.2"
+version = "0.123.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02e3f4d783a55c64266d17dc67d2708852235732a100fc40dd9f1051adc64d7b"
+checksum = "cb0f2da72eb2472aaac6cfba4e785af42b1f2d82f5155f30c9c30e8cce351e17"
[[package]]
name = "crash-context"
@@ -7054,21 +7047,15 @@ dependencies = [
[[package]]
name = "gimli"
-version = "0.31.1"
+version = "0.32.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
+checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
dependencies = [
"fallible-iterator",
"indexmap",
"stable_deref_trait",
]
-[[package]]
-name = "gimli"
-version = "0.32.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
-
[[package]]
name = "gio-sys"
version = "0.21.5"
@@ -7614,6 +7601,7 @@ dependencies = [
"media",
"metal",
"objc",
+ "objc2-app-kit",
"parking_lot",
"pathfinder_geometry",
"raw-window-handle",
@@ -11224,6 +11212,16 @@ dependencies = [
"objc2-encode",
]
+[[package]]
+name = "objc2-app-kit"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc"
+dependencies = [
+ "objc2",
+ "objc2-foundation",
+]
+
[[package]]
name = "objc2-audio-toolbox"
version = "0.3.2"
@@ -11361,9 +11359,9 @@ dependencies = [
[[package]]
name = "object"
-version = "0.36.7"
+version = "0.37.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
+checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe"
dependencies = [
"crc32fast",
"hashbrown 0.15.5",
@@ -11371,15 +11369,6 @@ dependencies = [
"memchr",
]
-[[package]]
-name = "object"
-version = "0.37.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe"
-dependencies = [
- "memchr",
-]
-
[[package]]
name = "ollama"
version = "0.1.0"
@@ -13518,13 +13507,25 @@ checksum = "bd348ff538bc9caeda7ee8cad2d1d48236a1f443c1fa3913c6a02fe0043b1dd3"
[[package]]
name = "pulley-interpreter"
-version = "33.0.2"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "986beaef947a51d17b42b0ea18ceaa88450d35b6994737065ed505c39172db71"
+checksum = "499d922aa0f9faac8d92351416664f1b7acd914008a90fce2f0516d31efddf67"
dependencies = [
"cranelift-bitset",
"log",
- "wasmtime-math",
+ "pulley-macros",
+ "wasmtime-internal-math",
+]
+
+[[package]]
+name = "pulley-macros"
+version = "36.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3848fb193d6dffca43a21f24ca9492f22aab88af1223d06bac7f8a0ef405b81"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
]
[[package]]
@@ -16195,12 +16196,6 @@ dependencies = [
"der 0.7.10",
]
-[[package]]
-name = "sptr"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a"
-
[[package]]
name = "sqlez"
version = "0.1.0"
@@ -18243,17 +18238,6 @@ dependencies = [
"windows-targets 0.52.6",
]
-[[package]]
-name = "trait-variant"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.117",
-]
-
[[package]]
name = "transpose"
version = "0.2.3"
@@ -18266,9 +18250,9 @@ dependencies = [
[[package]]
name = "tree-sitter"
-version = "0.26.3"
+version = "0.26.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "974d205cc395652cfa8b37daa053fe56eebd429acf8dc055503fee648dae981e"
+checksum = "887bd495d0582c5e3e0d8ece2233666169fa56a9644d172fc22ad179ab2d0538"
dependencies = [
"cc",
"regex",
@@ -19361,12 +19345,12 @@ dependencies = [
[[package]]
name = "wasm-encoder"
-version = "0.229.0"
+version = "0.236.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38ba1d491ecacb085a2552025c10a675a6fddcbd03b1fc9b36c536010ce265d2"
+checksum = "724fccfd4f3c24b7e589d333fc0429c68042897a7e8a5f8694f31792471841e7"
dependencies = [
"leb128fmt",
- "wasmparser 0.229.0",
+ "wasmparser 0.236.1",
]
[[package]]
@@ -19489,9 +19473,9 @@ dependencies = [
[[package]]
name = "wasmparser"
-version = "0.229.0"
+version = "0.236.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0cc3b1f053f5d41aa55640a1fa9b6d1b8a9e4418d118ce308d20e24ff3575a8c"
+checksum = "a9b1e81f3eb254cf7404a82cee6926a4a3ccc5aad80cc3d43608a070c67aa1d7"
dependencies = [
"bitflags 2.10.0",
"hashbrown 0.15.5",
@@ -19514,22 +19498,22 @@ dependencies = [
[[package]]
name = "wasmprinter"
-version = "0.229.0"
+version = "0.236.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d25dac01892684a99b8fbfaf670eb6b56edea8a096438c75392daeb83156ae2e"
+checksum = "2df225df06a6df15b46e3f73ca066ff92c2e023670969f7d50ce7d5e695abbb1"
dependencies = [
"anyhow",
"termcolor",
- "wasmparser 0.229.0",
+ "wasmparser 0.236.1",
]
[[package]]
name = "wasmtime"
-version = "33.0.2"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57373e1d8699662fb791270ac5dfac9da5c14f618ecf940cdb29dc3ad9472a3c"
+checksum = "6a2f8736ddc86e03a9d0e4c477a37939cfc53cd1b052ee38a3133679b87ef830"
dependencies = [
- "addr2line 0.24.2",
+ "addr2line",
"anyhow",
"async-trait",
"bitflags 2.10.0",
@@ -19543,10 +19527,9 @@ dependencies = [
"log",
"mach2 0.4.3",
"memfd",
- "object 0.36.7",
+ "object",
"once_cell",
"postcard",
- "psm",
"pulley-interpreter",
"rayon",
"rustix 1.1.2",
@@ -19554,82 +19537,109 @@ dependencies = [
"serde",
"serde_derive",
"smallvec",
- "sptr",
"target-lexicon 0.13.3",
- "trait-variant",
- "wasmparser 0.229.0",
- "wasmtime-asm-macros",
- "wasmtime-component-macro",
- "wasmtime-component-util",
- "wasmtime-cranelift",
+ "wasmparser 0.236.1",
"wasmtime-environ",
- "wasmtime-fiber",
- "wasmtime-jit-icache-coherence",
- "wasmtime-math",
- "wasmtime-slab",
- "wasmtime-versioned-export-macros",
- "wasmtime-winch",
- "windows-sys 0.59.0",
+ "wasmtime-internal-asm-macros",
+ "wasmtime-internal-component-macro",
+ "wasmtime-internal-component-util",
+ "wasmtime-internal-cranelift",
+ "wasmtime-internal-fiber",
+ "wasmtime-internal-jit-debug",
+ "wasmtime-internal-jit-icache-coherence",
+ "wasmtime-internal-math",
+ "wasmtime-internal-slab",
+ "wasmtime-internal-unwinder",
+ "wasmtime-internal-versioned-export-macros",
+ "wasmtime-internal-winch",
+ "windows-sys 0.60.2",
]
[[package]]
-name = "wasmtime-asm-macros"
-version = "33.0.2"
+name = "wasmtime-c-api-impl"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd0fc91372865167a695dc98d0d6771799a388a7541d3f34e939d0539d6583de"
+checksum = "f3c62ea3fa30e6b0cf61116b3035121b8f515c60ac118ebfdab2ee56d028ed1e"
dependencies = [
- "cfg-if",
+ "anyhow",
+ "log",
+ "tracing",
+ "wasmtime",
+ "wasmtime-internal-c-api-macros",
]
[[package]]
-name = "wasmtime-c-api-impl"
-version = "33.0.2"
+name = "wasmtime-environ"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46db556f1dccdd88e0672bd407162ab0036b72e5eccb0f4398d8251cba32dba1"
+checksum = "733682a327755c77153ac7455b1ba8f2db4d9946c1738f8002fe1fbda1d52e83"
dependencies = [
"anyhow",
+ "cpp_demangle",
+ "cranelift-bitset",
+ "cranelift-entity",
+ "gimli",
+ "indexmap",
"log",
- "tracing",
- "wasmtime",
- "wasmtime-c-api-macros",
+ "object",
+ "postcard",
+ "rustc-demangle",
+ "semver",
+ "serde",
+ "serde_derive",
+ "smallvec",
+ "target-lexicon 0.13.3",
+ "wasm-encoder 0.236.1",
+ "wasmparser 0.236.1",
+ "wasmprinter",
+ "wasmtime-internal-component-util",
]
[[package]]
-name = "wasmtime-c-api-macros"
-version = "33.0.2"
+name = "wasmtime-internal-asm-macros"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "315cc6bc8cdc66f296accb26d7625ae64c1c7b6da6f189e8a72ce6594bf7bd36"
+checksum = "68288980a2e02bcb368d436da32565897033ea21918007e3f2bae18843326cf9"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "wasmtime-internal-c-api-macros"
+version = "36.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c8c61294155a6d23c202f08cf7a2f9392a866edd50517508208818be626ce9f"
dependencies = [
"proc-macro2",
"quote",
]
[[package]]
-name = "wasmtime-component-macro"
-version = "33.0.2"
+name = "wasmtime-internal-component-macro"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25c9c7526675ff9a9794b115023c4af5128e3eb21389bfc3dc1fd344d549258f"
+checksum = "5dea846da68f8e776c8a43bde3386022d7bb74e713b9654f7c0196e5ff2e4684"
dependencies = [
"anyhow",
"proc-macro2",
"quote",
"syn 2.0.117",
- "wasmtime-component-util",
- "wasmtime-wit-bindgen",
- "wit-parser 0.229.0",
+ "wasmtime-internal-component-util",
+ "wasmtime-internal-wit-bindgen",
+ "wit-parser 0.236.1",
]
[[package]]
-name = "wasmtime-component-util"
-version = "33.0.2"
+name = "wasmtime-internal-component-util"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc42ec8b078875804908d797cb4950fec781d9add9684c9026487fd8eb3f6291"
+checksum = "fe1e5735b3c8251510d2a55311562772d6c6fca9438a3d0329eb6e38af4957d6"
[[package]]
-name = "wasmtime-cranelift"
-version = "33.0.2"
+name = "wasmtime-internal-cranelift"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2bd72f0a6a0ffcc6a184ec86ac35c174e48ea0e97bbae277c8f15f8bf77a566"
+checksum = "e89bb9ef571288e2be6b8a3c4763acc56c348dcd517500b1679d3ffad9e4a757"
dependencies = [
"anyhow",
"cfg-if",
@@ -19638,104 +19648,132 @@ dependencies = [
"cranelift-entity",
"cranelift-frontend",
"cranelift-native",
- "gimli 0.31.1",
+ "gimli",
"itertools 0.14.0",
"log",
- "object 0.36.7",
+ "object",
"pulley-interpreter",
"smallvec",
"target-lexicon 0.13.3",
"thiserror 2.0.17",
- "wasmparser 0.229.0",
+ "wasmparser 0.236.1",
"wasmtime-environ",
- "wasmtime-versioned-export-macros",
+ "wasmtime-internal-math",
+ "wasmtime-internal-versioned-export-macros",
]
[[package]]
-name = "wasmtime-environ"
-version = "33.0.2"
+name = "wasmtime-internal-fiber"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6187bb108a23eb25d2a92aa65d6c89fb5ed53433a319038a2558567f3011ff2"
+checksum = "b698d004b15ea1f1ae2d06e5e8b80080cbd684fd245220ce2fac3cdd5ecf87f2"
dependencies = [
"anyhow",
- "cpp_demangle",
- "cranelift-bitset",
- "cranelift-entity",
- "gimli 0.31.1",
- "indexmap",
- "log",
- "object 0.36.7",
- "postcard",
- "rustc-demangle",
- "semver",
- "serde",
- "serde_derive",
- "smallvec",
- "target-lexicon 0.13.3",
- "wasm-encoder 0.229.0",
- "wasmparser 0.229.0",
- "wasmprinter",
- "wasmtime-component-util",
+ "cc",
+ "cfg-if",
+ "libc",
+ "rustix 1.1.2",
+ "wasmtime-internal-asm-macros",
+ "wasmtime-internal-versioned-export-macros",
+ "windows-sys 0.60.2",
]
[[package]]
-name = "wasmtime-fiber"
-version = "33.0.2"
+name = "wasmtime-internal-jit-debug"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc8965d2128c012329f390e24b8b2758dd93d01bf67e1a1a0dd3d8fd72f56873"
+checksum = "c803a9fec05c3d7fa03474d4595079d546e77a3c71c1d09b21f74152e2165c17"
dependencies = [
- "anyhow",
"cc",
- "cfg-if",
- "rustix 1.1.2",
- "wasmtime-asm-macros",
- "wasmtime-versioned-export-macros",
- "windows-sys 0.59.0",
+ "wasmtime-internal-versioned-export-macros",
]
[[package]]
-name = "wasmtime-jit-icache-coherence"
-version = "33.0.2"
+name = "wasmtime-internal-jit-icache-coherence"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7af0e940cb062a45c0b3f01a926f77da5947149e99beb4e3dd9846d5b8f11619"
+checksum = "d3866909d37f7929d902e6011847748147e8734e9d7e0353e78fb8b98f586aee"
dependencies = [
"anyhow",
"cfg-if",
"libc",
- "windows-sys 0.59.0",
+ "windows-sys 0.60.2",
]
[[package]]
-name = "wasmtime-math"
-version = "33.0.2"
+name = "wasmtime-internal-math"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "acfca360e719dda9a27e26944f2754ff2fd5bad88e21919c42c5a5f38ddd93cb"
+checksum = "5a23b03fb14c64bd0dfcaa4653101f94ade76c34a3027ed2d6b373267536e45b"
dependencies = [
"libm",
]
[[package]]
-name = "wasmtime-slab"
-version = "33.0.2"
+name = "wasmtime-internal-slab"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48e240559cada55c4b24af979d5f6c95e0029f5772f32027ec3c62b258aaff65"
+checksum = "fbff220b88cdb990d34a20b13344e5da2e7b99959a5b1666106bec94b58d6364"
[[package]]
-name = "wasmtime-versioned-export-macros"
-version = "33.0.2"
+name = "wasmtime-internal-unwinder"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0963c1438357a3d8c0efe152b4ef5259846c1cf8b864340270744fe5b3bae5e"
+checksum = "13e1ad30e88988b20c0d1c56ea4b4fbc01a8c614653cbf12ca50c0dcc695e2f7"
+dependencies = [
+ "anyhow",
+ "cfg-if",
+ "cranelift-codegen",
+ "log",
+ "object",
+]
+
+[[package]]
+name = "wasmtime-internal-versioned-export-macros"
+version = "36.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "549aefdaa1398c2fcfbf69a7b882956bb5b6e8e5b600844ecb91a3b5bf658ca7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.117",
]
+[[package]]
+name = "wasmtime-internal-winch"
+version = "36.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cc96a84c5700171aeecf96fa9a9ab234f333f5afb295dabf3f8a812b70fe832"
+dependencies = [
+ "anyhow",
+ "cranelift-codegen",
+ "gimli",
+ "object",
+ "target-lexicon 0.13.3",
+ "wasmparser 0.236.1",
+ "wasmtime-environ",
+ "wasmtime-internal-cranelift",
+ "winch-codegen",
+]
+
+[[package]]
+name = "wasmtime-internal-wit-bindgen"
+version = "36.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28dc9efea511598c88564ac1974e0825c07d9c0de902dbf68f227431cd4ff8c"
+dependencies = [
+ "anyhow",
+ "bitflags 2.10.0",
+ "heck 0.5.0",
+ "indexmap",
+ "wit-parser 0.236.1",
+]
+
[[package]]
name = "wasmtime-wasi"
-version = "33.0.2"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ae951b72c7c6749a1c15dcdfb6d940a2614c932b4a54f474636e78e2c744b4c"
+checksum = "c3c2e99fbaa0c26b4680e0c9af07e3f7b25f5fbc1ad97dd34067980bd027d3e5"
dependencies = [
"anyhow",
"async-trait",
@@ -19759,14 +19797,14 @@ dependencies = [
"wasmtime",
"wasmtime-wasi-io",
"wiggle",
- "windows-sys 0.59.0",
+ "windows-sys 0.60.2",
]
[[package]]
name = "wasmtime-wasi-io"
-version = "33.0.2"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a835790dcecc3d7051ec67da52ba9e04af25e1bc204275b9391e3f0042b10797"
+checksum = "de2dc367052562c228ce51ee4426330840433c29c0ea3349eca5ddeb475ecdb9"
dependencies = [
"anyhow",
"async-trait",
@@ -19775,35 +19813,6 @@ dependencies = [
"wasmtime",
]
-[[package]]
-name = "wasmtime-winch"
-version = "33.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbc3b117d03d6eeabfa005a880c5c22c06503bb8820f3aa2e30f0e8d87b6752f"
-dependencies = [
- "anyhow",
- "cranelift-codegen",
- "gimli 0.31.1",
- "object 0.36.7",
- "target-lexicon 0.13.3",
- "wasmparser 0.229.0",
- "wasmtime-cranelift",
- "wasmtime-environ",
- "winch-codegen",
-]
-
-[[package]]
-name = "wasmtime-wit-bindgen"
-version = "33.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1382f4f09390eab0d75d4994d0c3b0f6279f86a571807ec67a8253c87cf6a145"
-dependencies = [
- "anyhow",
- "heck 0.5.0",
- "indexmap",
- "wit-parser 0.229.0",
-]
-
[[package]]
name = "wast"
version = "35.0.2"
@@ -20258,9 +20267,9 @@ dependencies = [
[[package]]
name = "wiggle"
-version = "33.0.2"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "649c1aca13ef9e9dccf2d5efbbebf12025bc5521c3fb7754355ef60f5eb810be"
+checksum = "c13d1ae265bd6e5e608827d2535665453cae5cb64950de66e2d5767d3e32c43a"
dependencies = [
"anyhow",
"async-trait",
@@ -20273,9 +20282,9 @@ dependencies = [
[[package]]
name = "wiggle-generate"
-version = "33.0.2"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "164870fc34214ee42bd81b8ce9e7c179800fa1a7d4046d17a84e7f7bf422c8ad"
+checksum = "607c4966f6b30da20d24560220137cbd09df722f0558eac81c05624700af5e05"
dependencies = [
"anyhow",
"heck 0.5.0",
@@ -20287,9 +20296,9 @@ dependencies = [
[[package]]
name = "wiggle-macro"
-version = "33.0.2"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d873bb5b59ca703b5e41562e96a4796d1af61bf4cf80bf8a7abda755a380ec1c"
+checksum = "fc36e39412fa35f7cc86b3705dbe154168721dd3e71f6dc4a726b266d5c60c55"
dependencies = [
"proc-macro2",
"quote",
@@ -20330,21 +20339,22 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "winch-codegen"
-version = "33.0.2"
+version = "36.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7914c296fbcef59d1b89a15e82384d34dc9669bc09763f2ef068a28dd3a64ebf"
+checksum = "06c0ec09e8eb5e850e432da6271ed8c4a9d459a9db3850c38e98a3ee9d015e79"
dependencies = [
"anyhow",
"cranelift-assembler-x64",
"cranelift-codegen",
- "gimli 0.31.1",
+ "gimli",
"regalloc2",
"smallvec",
"target-lexicon 0.13.3",
"thiserror 2.0.17",
- "wasmparser 0.229.0",
- "wasmtime-cranelift",
+ "wasmparser 0.236.1",
"wasmtime-environ",
+ "wasmtime-internal-cranelift",
+ "wasmtime-internal-math",
]
[[package]]
@@ -21370,9 +21380,9 @@ dependencies = [
[[package]]
name = "wit-parser"
-version = "0.229.0"
+version = "0.236.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "459c6ba62bf511d6b5f2a845a2a736822e38059c1cfa0b644b467bbbfae4efa6"
+checksum = "16e4833a20cd6e85d6abfea0e63a399472d6f88c6262957c17f546879a80ba15"
dependencies = [
"anyhow",
"id-arena",
@@ -21383,7 +21393,7 @@ dependencies = [
"serde_derive",
"serde_json",
"unicode-xid",
- "wasmparser 0.229.0",
+ "wasmparser 0.236.1",
]
[[package]]
diff --git a/Cargo.toml b/Cargo.toml
index 6c8f2a78a401cc2adebb712cd8ce739c696af878..3a393237ab9f5a5a8cd4b02517f6d22382ff51ff 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -604,6 +604,7 @@ nbformat = "1.2.0"
nix = "0.29"
num-format = "0.4.4"
objc = "0.2"
+objc2-app-kit = { version = "0.3", default-features = false, features = [ "NSGraphics" ] }
objc2-foundation = { version = "=0.3.2", default-features = false, features = [
"NSArray",
"NSAttributedString",
@@ -732,7 +733,7 @@ toml_edit = { version = "0.22", default-features = false, features = [
"serde",
] }
tower-http = "0.4.4"
-tree-sitter = { version = "0.26", features = ["wasm"] }
+tree-sitter = { version = "0.26.8", features = ["wasm"] }
tree-sitter-bash = "0.25.1"
tree-sitter-c = "0.24.1"
tree-sitter-cpp = { git = "https://github.com/tree-sitter/tree-sitter-cpp", rev = "5cb9b693cfd7bfacab1d9ff4acac1a4150700609" }
@@ -767,7 +768,7 @@ uuid = { version = "1.1.2", features = ["v4", "v5", "v7", "serde"] }
walkdir = "2.5"
wasm-encoder = "0.221"
wasmparser = "0.221"
-wasmtime = { version = "33", default-features = false, features = [
+wasmtime = { version = "36", default-features = false, features = [
"async",
"demangle",
"runtime",
@@ -776,7 +777,7 @@ wasmtime = { version = "33", default-features = false, features = [
"incremental-cache",
"parallel-compilation",
] }
-wasmtime-wasi = "33"
+wasmtime-wasi = "36"
wax = "0.7"
which = "6.0.0"
wasm-bindgen = "0.2.113"
@@ -821,6 +822,7 @@ features = [
"Win32_System_Com",
"Win32_System_Com_StructuredStorage",
"Win32_System_Console",
+ "Win32_System_Diagnostics_Debug",
"Win32_System_DataExchange",
"Win32_System_IO",
"Win32_System_LibraryLoader",
diff --git a/assets/icons/maximize_alt.svg b/assets/icons/maximize_alt.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b8b8705f902c2469ed959f93f89ca3caf3b8fc51
--- /dev/null
+++ b/assets/icons/maximize_alt.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/thread_import.svg b/assets/icons/thread_import.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a56b5a7cccc09c5795bfadff06f06d15833232f3
--- /dev/null
+++ b/assets/icons/thread_import.svg
@@ -0,0 +1,5 @@
+
diff --git a/crates/agent_ui/src/agent_panel.rs b/crates/agent_ui/src/agent_panel.rs
index e6ef267a95110e745534010bae32b1b1fd6c0f0c..a32f92942682fc0c5efbbcd35a9848c90b761184 100644
--- a/crates/agent_ui/src/agent_panel.rs
+++ b/crates/agent_ui/src/agent_panel.rs
@@ -21,8 +21,8 @@ use settings::{LanguageModelProviderSetting, LanguageModelSelection};
use feature_flags::{AgentV2FeatureFlag, FeatureFlagAppExt as _};
use zed_actions::agent::{
- AddSelectionToThread, ConflictContent, OpenClaudeAgentOnboardingModal, ReauthenticateAgent,
- ResolveConflictedFilesWithAgent, ResolveConflictsWithAgent, ReviewBranchDiff,
+ AddSelectionToThread, ConflictContent, ReauthenticateAgent, ResolveConflictedFilesWithAgent,
+ ResolveConflictsWithAgent, ReviewBranchDiff,
};
use crate::{
@@ -40,7 +40,7 @@ use crate::{
};
use crate::{
DEFAULT_THREAD_TITLE,
- ui::{AcpOnboardingModal, ClaudeCodeOnboardingModal, HoldForDefault},
+ ui::{AcpOnboardingModal, HoldForDefault},
};
use crate::{ExpandMessageEditor, ThreadHistoryView};
use crate::{ManageProfiles, ThreadHistoryViewEvent};
@@ -245,11 +245,6 @@ pub fn init(cx: &mut App) {
.register_action(|workspace, _: &OpenAcpOnboardingModal, window, cx| {
AcpOnboardingModal::toggle(workspace, window, cx)
})
- .register_action(
- |workspace, _: &OpenClaudeAgentOnboardingModal, window, cx| {
- ClaudeCodeOnboardingModal::toggle(workspace, window, cx)
- },
- )
.register_action(|_workspace, _: &ResetOnboarding, window, cx| {
window.dispatch_action(workspace::RestoreBanner.boxed_clone(), cx);
window.refresh();
diff --git a/crates/agent_ui/src/config_options.rs b/crates/agent_ui/src/config_options.rs
index b8cf7e5d57921c7710392911829fc2b5045a0f90..44c0baa232222c0ba7c1d54acdecaabacfa85f12 100644
--- a/crates/agent_ui/src/config_options.rs
+++ b/crates/agent_ui/src/config_options.rs
@@ -650,7 +650,7 @@ impl PickerDelegate for ConfigOptionPickerDelegate {
.end_slot(div().pr_2().when(is_selected, |this| {
this.child(Icon::new(IconName::Check).color(Color::Accent))
}))
- .end_hover_slot(div().pr_1p5().child({
+ .end_slot_on_hover(div().pr_1p5().child({
let (icon, color, tooltip) = if is_favorite {
(IconName::StarFilled, Color::Accent, "Unfavorite")
} else {
diff --git a/crates/agent_ui/src/thread_import.rs b/crates/agent_ui/src/thread_import.rs
index 9dd6b5efa0ae1cd3bc19dc6ae6a287218de8c668..f5fc89d3df4991ff5186e2af6d73ad6a840c09a1 100644
--- a/crates/agent_ui/src/thread_import.rs
+++ b/crates/agent_ui/src/thread_import.rs
@@ -121,18 +121,6 @@ impl ThreadImportModal {
.collect()
}
- fn set_agent_checked(&mut self, agent_id: AgentId, state: ToggleState, cx: &mut Context) {
- match state {
- ToggleState::Selected => {
- self.unchecked_agents.remove(&agent_id);
- }
- ToggleState::Unselected | ToggleState::Indeterminate => {
- self.unchecked_agents.insert(agent_id);
- }
- }
- cx.notify();
- }
-
fn toggle_agent_checked(&mut self, agent_id: AgentId, cx: &mut Context) {
if self.unchecked_agents.contains(&agent_id) {
self.unchecked_agents.remove(&agent_id);
@@ -283,6 +271,11 @@ impl ModalView for ThreadImportModal {}
impl Render for ThreadImportModal {
fn render(&mut self, _window: &mut Window, cx: &mut Context) -> impl IntoElement {
+ let has_agents = !self.agent_entries.is_empty();
+ let disabled_import_thread = self.is_importing
+ || !has_agents
+ || self.unchecked_agents.len() == self.agent_entries.len();
+
let agent_rows = self
.agent_entries
.iter()
@@ -295,6 +288,7 @@ impl Render for ThreadImportModal {
.rounded()
.spacing(ListItemSpacing::Sparse)
.focused(is_focused)
+ .disabled(self.is_importing)
.child(
h_flex()
.w_full()
@@ -311,22 +305,14 @@ impl Render for ThreadImportModal {
})
.child(Label::new(entry.display_name.clone())),
)
- .end_slot(
- Checkbox::new(
- ("thread-import-agent-checkbox", ix),
- if is_checked {
- ToggleState::Selected
- } else {
- ToggleState::Unselected
- },
- )
- .on_click({
- let agent_id = entry.agent_id.clone();
- cx.listener(move |this, state: &ToggleState, _window, cx| {
- this.set_agent_checked(agent_id.clone(), *state, cx);
- })
- }),
- )
+ .end_slot(Checkbox::new(
+ ("thread-import-agent-checkbox", ix),
+ if is_checked {
+ ToggleState::Selected
+ } else {
+ ToggleState::Unselected
+ },
+ ))
.on_click({
let agent_id = entry.agent_id.clone();
cx.listener(move |this, _event, _window, cx| {
@@ -336,11 +322,6 @@ impl Render for ThreadImportModal {
})
.collect::>();
- let has_agents = !self.agent_entries.is_empty();
- let disabled_import_thread = self.is_importing
- || !has_agents
- || self.unchecked_agents.len() == self.agent_entries.len();
-
v_flex()
.id("thread-import-modal")
.key_context("ThreadImportModal")
@@ -373,7 +354,7 @@ impl Render for ThreadImportModal {
v_flex()
.id("thread-import-agent-list")
.max_h(rems_from_px(320.))
- .pb_2()
+ .pb_1()
.overflow_y_scroll()
.when(has_agents, |this| this.children(agent_rows))
.when(!has_agents, |this| {
diff --git a/crates/agent_ui/src/threads_archive_view.rs b/crates/agent_ui/src/threads_archive_view.rs
index 445d86c9ad4e37fa8b2502a754a5264cd1d4dc45..74a93129d387e0aaac6e7092d9e086dd64e369f7 100644
--- a/crates/agent_ui/src/threads_archive_view.rs
+++ b/crates/agent_ui/src/threads_archive_view.rs
@@ -1,5 +1,5 @@
use crate::agent_connection_store::AgentConnectionStore;
-use crate::thread_import::{AcpThreadImportOnboarding, ThreadImportModal};
+
use crate::thread_metadata_store::{ThreadMetadata, ThreadMetadataStore};
use crate::{Agent, RemoveSelectedThread};
@@ -15,15 +15,13 @@ use gpui::{
};
use itertools::Itertools as _;
use menu::{Confirm, SelectFirst, SelectLast, SelectNext, SelectPrevious};
-use project::{AgentId, AgentRegistryStore, AgentServerStore};
+use project::{AgentId, AgentServerStore};
use settings::Settings as _;
use theme::ActiveTheme;
use ui::ThreadItem;
use ui::{
Divider, KeyBinding, Tooltip, WithScrollbar, prelude::*, utils::platform_title_bar_height,
};
-use util::ResultExt;
-use workspace::{MultiWorkspace, Workspace};
use zed_actions::agents_sidebar::FocusSidebarFilter;
use zed_actions::editor::{MoveDown, MoveUp};
@@ -114,18 +112,12 @@ pub struct ThreadsArchiveView {
_refresh_history_task: Task<()>,
agent_connection_store: WeakEntity,
agent_server_store: WeakEntity,
- agent_registry_store: WeakEntity,
- workspace: WeakEntity,
- multi_workspace: WeakEntity,
}
impl ThreadsArchiveView {
pub fn new(
agent_connection_store: WeakEntity,
agent_server_store: WeakEntity,
- agent_registry_store: WeakEntity,
- workspace: WeakEntity,
- multi_workspace: WeakEntity,
window: &mut Window,
cx: &mut Context,
) -> Self {
@@ -184,11 +176,8 @@ impl ThreadsArchiveView {
thread_metadata_store_subscription,
],
_refresh_history_task: Task::ready(()),
- agent_registry_store,
agent_connection_store,
agent_server_store,
- workspace,
- multi_workspace,
};
this.update_items(cx);
@@ -550,43 +539,6 @@ impl ThreadsArchiveView {
.detach_and_log_err(cx);
}
- fn should_render_acp_import_onboarding(&self, cx: &App) -> bool {
- let has_external_agents = self
- .agent_server_store
- .upgrade()
- .map(|store| store.read(cx).has_external_agents())
- .unwrap_or(false);
-
- has_external_agents && !AcpThreadImportOnboarding::dismissed(cx)
- }
-
- fn show_thread_import_modal(&mut self, window: &mut Window, cx: &mut Context) {
- let Some(agent_server_store) = self.agent_server_store.upgrade() else {
- return;
- };
- let Some(agent_registry_store) = self.agent_registry_store.upgrade() else {
- return;
- };
-
- let workspace_handle = self.workspace.clone();
- let multi_workspace = self.multi_workspace.clone();
-
- self.workspace
- .update(cx, |workspace, cx| {
- workspace.toggle_modal(window, cx, |window, cx| {
- ThreadImportModal::new(
- agent_server_store,
- agent_registry_store,
- workspace_handle.clone(),
- multi_workspace.clone(),
- window,
- cx,
- )
- });
- })
- .log_err();
- }
-
fn render_header(&self, window: &Window, cx: &mut Context) -> impl IntoElement {
let has_query = !self.filter_editor.read(cx).text(cx).is_empty();
let sidebar_on_left = matches!(
@@ -729,28 +681,5 @@ impl Render for ThreadsArchiveView {
.size_full()
.child(self.render_header(window, cx))
.child(content)
- .when(!self.should_render_acp_import_onboarding(cx), |this| {
- this.child(
- div()
- .w_full()
- .p_1p5()
- .border_t_1()
- .border_color(cx.theme().colors().border)
- .child(
- Button::new("import-acp", "Import ACP Threads")
- .full_width()
- .style(ButtonStyle::OutlinedCustom(cx.theme().colors().border))
- .label_size(LabelSize::Small)
- .start_icon(
- Icon::new(IconName::ArrowDown)
- .size(IconSize::XSmall)
- .color(Color::Muted),
- )
- .on_click(cx.listener(|this, _, window, cx| {
- this.show_thread_import_modal(window, cx);
- })),
- ),
- )
- })
}
}
diff --git a/crates/agent_ui/src/ui.rs b/crates/agent_ui/src/ui.rs
index 16732951ce67d76ca8d65259e309c4b81df30c3b..d43b7e4b043bcd1b155699c5eea3ca695585b94b 100644
--- a/crates/agent_ui/src/ui.rs
+++ b/crates/agent_ui/src/ui.rs
@@ -1,6 +1,5 @@
mod acp_onboarding_modal;
mod agent_notification;
-mod claude_agent_onboarding_modal;
mod end_trial_upsell;
mod hold_for_default;
mod mention_crease;
@@ -9,7 +8,6 @@ mod undo_reject_toast;
pub use acp_onboarding_modal::*;
pub use agent_notification::*;
-pub use claude_agent_onboarding_modal::*;
pub use end_trial_upsell::*;
pub use hold_for_default::*;
pub use mention_crease::*;
diff --git a/crates/agent_ui/src/ui/claude_agent_onboarding_modal.rs b/crates/agent_ui/src/ui/claude_agent_onboarding_modal.rs
deleted file mode 100644
index 5b7e58eb4fd79a5075446dad997c2642fedf32a6..0000000000000000000000000000000000000000
--- a/crates/agent_ui/src/ui/claude_agent_onboarding_modal.rs
+++ /dev/null
@@ -1,261 +0,0 @@
-use agent_servers::CLAUDE_AGENT_ID;
-use gpui::{
- ClickEvent, DismissEvent, Entity, EventEmitter, FocusHandle, Focusable, MouseDownEvent, Render,
- linear_color_stop, linear_gradient,
-};
-use ui::{TintColor, Vector, VectorName, prelude::*};
-use workspace::{ModalView, Workspace};
-
-use crate::{Agent, agent_panel::AgentPanel};
-
-macro_rules! claude_agent_onboarding_event {
- ($name:expr) => {
- telemetry::event!($name, source = "ACP Claude Code Onboarding");
- };
- ($name:expr, $($key:ident $(= $value:expr)?),+ $(,)?) => {
- telemetry::event!($name, source = "ACP Claude Code Onboarding", $($key $(= $value)?),+);
- };
-}
-
-pub struct ClaudeCodeOnboardingModal {
- focus_handle: FocusHandle,
- workspace: Entity,
-}
-
-impl ClaudeCodeOnboardingModal {
- pub fn toggle(workspace: &mut Workspace, window: &mut Window, cx: &mut Context) {
- let workspace_entity = cx.entity();
- workspace.toggle_modal(window, cx, |_window, cx| Self {
- workspace: workspace_entity,
- focus_handle: cx.focus_handle(),
- });
- }
-
- fn open_panel(&mut self, _: &ClickEvent, window: &mut Window, cx: &mut Context) {
- self.workspace.update(cx, |workspace, cx| {
- workspace.focus_panel::(window, cx);
-
- if let Some(panel) = workspace.panel::(cx) {
- panel.update(cx, |panel, cx| {
- panel.new_agent_thread(
- Agent::Custom {
- id: CLAUDE_AGENT_ID.into(),
- },
- window,
- cx,
- );
- });
- }
- });
-
- cx.emit(DismissEvent);
-
- claude_agent_onboarding_event!("Open Panel Clicked");
- }
-
- fn view_docs(&mut self, _: &ClickEvent, window: &mut Window, cx: &mut Context) {
- window.dispatch_action(Box::new(zed_actions::AcpRegistry), cx);
- cx.notify();
-
- claude_agent_onboarding_event!("Documentation Link Clicked");
- }
-
- fn cancel(&mut self, _: &menu::Cancel, _: &mut Window, cx: &mut Context) {
- cx.emit(DismissEvent);
- }
-}
-
-impl EventEmitter for ClaudeCodeOnboardingModal {}
-
-impl Focusable for ClaudeCodeOnboardingModal {
- fn focus_handle(&self, _cx: &App) -> FocusHandle {
- self.focus_handle.clone()
- }
-}
-
-impl ModalView for ClaudeCodeOnboardingModal {}
-
-impl Render for ClaudeCodeOnboardingModal {
- fn render(&mut self, _: &mut Window, cx: &mut Context) -> impl IntoElement {
- let illustration_element = |icon: IconName, label: Option, opacity: f32| {
- h_flex()
- .px_1()
- .py_0p5()
- .gap_1()
- .rounded_sm()
- .bg(cx.theme().colors().element_active.opacity(0.05))
- .border_1()
- .border_color(cx.theme().colors().border)
- .border_dashed()
- .child(
- Icon::new(icon)
- .size(IconSize::Small)
- .color(Color::Custom(cx.theme().colors().text_muted.opacity(0.15))),
- )
- .map(|this| {
- if let Some(label_text) = label {
- this.child(
- Label::new(label_text)
- .size(LabelSize::Small)
- .color(Color::Muted),
- )
- } else {
- this.child(
- div().w_16().h_1().rounded_full().bg(cx
- .theme()
- .colors()
- .element_active
- .opacity(0.6)),
- )
- }
- })
- .opacity(opacity)
- };
-
- let illustration = h_flex()
- .relative()
- .h(rems_from_px(126.))
- .bg(cx.theme().colors().editor_background)
- .border_b_1()
- .border_color(cx.theme().colors().border_variant)
- .justify_center()
- .gap_8()
- .rounded_t_md()
- .overflow_hidden()
- .child(
- div().absolute().inset_0().w(px(515.)).h(px(126.)).child(
- Vector::new(VectorName::AcpGrid, rems_from_px(515.), rems_from_px(126.))
- .color(ui::Color::Custom(cx.theme().colors().text.opacity(0.02))),
- ),
- )
- .child(div().absolute().inset_0().size_full().bg(linear_gradient(
- 0.,
- linear_color_stop(
- cx.theme().colors().elevated_surface_background.opacity(0.1),
- 0.9,
- ),
- linear_color_stop(
- cx.theme().colors().elevated_surface_background.opacity(0.),
- 0.,
- ),
- )))
- .child(
- div()
- .absolute()
- .inset_0()
- .size_full()
- .bg(gpui::black().opacity(0.15)),
- )
- .child(
- Vector::new(
- VectorName::AcpLogoSerif,
- rems_from_px(257.),
- rems_from_px(47.),
- )
- .color(ui::Color::Custom(cx.theme().colors().text.opacity(0.8))),
- )
- .child(
- v_flex()
- .gap_1p5()
- .child(illustration_element(IconName::Stop, None, 0.15))
- .child(illustration_element(
- IconName::AiGemini,
- Some("New Gemini CLI Thread".into()),
- 0.3,
- ))
- .child(
- h_flex()
- .pl_1()
- .pr_2()
- .py_0p5()
- .gap_1()
- .rounded_sm()
- .bg(cx.theme().colors().element_active.opacity(0.2))
- .border_1()
- .border_color(cx.theme().colors().border)
- .child(
- Icon::new(IconName::AiClaude)
- .size(IconSize::Small)
- .color(Color::Muted),
- )
- .child(Label::new("New Claude Agent Thread").size(LabelSize::Small)),
- )
- .child(illustration_element(
- IconName::Stop,
- Some("Your Agent Here".into()),
- 0.3,
- ))
- .child(illustration_element(IconName::Stop, None, 0.15)),
- );
-
- let heading = v_flex()
- .w_full()
- .gap_1()
- .child(
- Label::new("Beta Release")
- .size(LabelSize::Small)
- .color(Color::Muted),
- )
- .child(Headline::new("Claude Agent: Natively in Zed").size(HeadlineSize::Large));
-
- let copy = "Powered by the Agent Client Protocol, you can now run Claude Agent as\na first-class citizen in Zed's agent panel.";
-
- let open_panel_button = Button::new("open-panel", "Start with Claude Agent")
- .style(ButtonStyle::Tinted(TintColor::Accent))
- .full_width()
- .on_click(cx.listener(Self::open_panel));
-
- let docs_button = Button::new("add-other-agents", "Add Other Agents")
- .end_icon(
- Icon::new(IconName::ArrowUpRight)
- .size(IconSize::Indicator)
- .color(Color::Muted),
- )
- .full_width()
- .on_click(cx.listener(Self::view_docs));
-
- let close_button = h_flex().absolute().top_2().right_2().child(
- IconButton::new("cancel", IconName::Close).on_click(cx.listener(
- |_, _: &ClickEvent, _window, cx| {
- claude_agent_onboarding_event!("Canceled", trigger = "X click");
- cx.emit(DismissEvent);
- },
- )),
- );
-
- v_flex()
- .id("acp-onboarding")
- .key_context("AcpOnboardingModal")
- .relative()
- .w(rems(34.))
- .h_full()
- .elevation_3(cx)
- .track_focus(&self.focus_handle(cx))
- .overflow_hidden()
- .on_action(cx.listener(Self::cancel))
- .on_action(cx.listener(|_, _: &menu::Cancel, _window, cx| {
- claude_agent_onboarding_event!("Canceled", trigger = "Action");
- cx.emit(DismissEvent);
- }))
- .on_any_mouse_down(cx.listener(|this, _: &MouseDownEvent, window, cx| {
- this.focus_handle.focus(window, cx);
- }))
- .child(illustration)
- .child(
- v_flex()
- .p_4()
- .gap_2()
- .child(heading)
- .child(Label::new(copy).color(Color::Muted))
- .child(
- v_flex()
- .w_full()
- .mt_2()
- .gap_1()
- .child(open_panel_button)
- .child(docs_button),
- ),
- )
- .child(close_button)
- }
-}
diff --git a/crates/agent_ui/src/ui/model_selector_components.rs b/crates/agent_ui/src/ui/model_selector_components.rs
index 01ba6c4511854e83b97b1fc053e41e5d0e82ff1e..88bf546a0e7beef53c8043fd04f8e6e9e5e92c88 100644
--- a/crates/agent_ui/src/ui/model_selector_components.rs
+++ b/crates/agent_ui/src/ui/model_selector_components.rs
@@ -160,7 +160,7 @@ impl RenderOnce for ModelSelectorListItem {
.end_slot(div().pr_2().when(self.is_selected, |this| {
this.child(Icon::new(IconName::Check).color(Color::Accent))
}))
- .end_hover_slot(div().pr_1p5().when_some(self.on_toggle_favorite, {
+ .end_slot_on_hover(div().pr_1p5().when_some(self.on_toggle_favorite, {
|this, handle_click| {
let (icon, color, tooltip) = if is_favorite {
(IconName::StarFilled, Color::Accent, "Unfavorite Model")
diff --git a/crates/collab/tests/integration/git_tests.rs b/crates/collab/tests/integration/git_tests.rs
index cc96f86261f5e708c745ec232fbbe3fd1762d992..50ce3dddc7f606f1af0f6cb21b7b99d9a1e7c61e 100644
--- a/crates/collab/tests/integration/git_tests.rs
+++ b/crates/collab/tests/integration/git_tests.rs
@@ -401,16 +401,19 @@ async fn test_linked_worktrees_sync(
path: PathBuf::from(path!("/project")),
ref_name: Some("refs/heads/main".into()),
sha: "aaa111".into(),
+ is_main: false,
});
state.worktrees.push(GitWorktree {
path: PathBuf::from(path!("/project/feature-branch")),
ref_name: Some("refs/heads/feature-branch".into()),
sha: "bbb222".into(),
+ is_main: false,
});
state.worktrees.push(GitWorktree {
path: PathBuf::from(path!("/project/bugfix-branch")),
ref_name: Some("refs/heads/bugfix-branch".into()),
sha: "ccc333".into(),
+ is_main: false,
});
})
.unwrap();
@@ -480,6 +483,7 @@ async fn test_linked_worktrees_sync(
path: PathBuf::from(path!("/project/hotfix-branch")),
ref_name: Some("refs/heads/hotfix-branch".into()),
sha: "ddd444".into(),
+ is_main: false,
});
})
.unwrap();
diff --git a/crates/command_palette/src/command_palette.rs b/crates/command_palette/src/command_palette.rs
index 90ed7d0d3518aa4f6d49bb4cc18cbf3c275ce7c5..4a80740c3765f25ee878a60fa061c17e3a795b5f 100644
--- a/crates/command_palette/src/command_palette.rs
+++ b/crates/command_palette/src/command_palette.rs
@@ -43,24 +43,28 @@ pub struct CommandPalette {
picker: Entity>,
}
-/// Removes subsequent whitespace characters and double colons from the query.
+/// Removes subsequent whitespace characters and double colons from the query, and converts
+/// underscores to spaces.
///
/// This improves the likelihood of a match by either humanized name or keymap-style name.
+/// Underscores are converted to spaces because `humanize_action_name` converts them to spaces
+/// when building the search candidates (e.g. `terminal_panel::Toggle` -> `terminal panel: toggle`).
pub fn normalize_action_query(input: &str) -> String {
let mut result = String::with_capacity(input.len());
let mut last_char = None;
for char in input.trim().chars() {
- match (last_char, char) {
+ let normalized_char = if char == '_' { ' ' } else { char };
+ match (last_char, normalized_char) {
(Some(':'), ':') => continue,
- (Some(last_char), char) if last_char.is_whitespace() && char.is_whitespace() => {
+ (Some(last_char), c) if last_char.is_whitespace() && c.is_whitespace() => {
continue;
}
_ => {
- last_char = Some(char);
+ last_char = Some(normalized_char);
}
}
- result.push(char);
+ result.push(normalized_char);
}
result
@@ -775,6 +779,14 @@ mod tests {
normalize_action_query("editor: :GoToDefinition"),
"editor: :GoToDefinition"
);
+ assert_eq!(
+ normalize_action_query("terminal_panel::Toggle"),
+ "terminal panel:Toggle"
+ );
+ assert_eq!(
+ normalize_action_query("project_panel::ToggleFocus"),
+ "project panel:ToggleFocus"
+ );
}
#[gpui::test]
diff --git a/crates/edit_prediction/src/license_detection.rs b/crates/edit_prediction/src/license_detection.rs
index 2b44825c4ceef1a317034966aa1a0b6a7a0f54c2..6f701d13a9d4d915bbfbc2442ea5643afac30ef4 100644
--- a/crates/edit_prediction/src/license_detection.rs
+++ b/crates/edit_prediction/src/license_detection.rs
@@ -308,7 +308,9 @@ impl LicenseDetectionWatcher {
}
}
}
- worktree::Event::DeletedEntry(_) | worktree::Event::UpdatedGitRepositories(_) => {}
+ worktree::Event::DeletedEntry(_)
+ | worktree::Event::UpdatedGitRepositories(_)
+ | worktree::Event::Deleted => {}
});
let worktree_snapshot = worktree.read(cx).snapshot();
diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs
index 48c92f0f22762f95b1d6ef681951355a340d221e..65a872e6035565bb01fdd78e00d6cf0f35d35ef8 100644
--- a/crates/editor/src/editor_tests.rs
+++ b/crates/editor/src/editor_tests.rs
@@ -31952,6 +31952,65 @@ async fn test_sticky_scroll_with_expanded_deleted_diff_hunks(
assert_eq!(sticky_headers(6.0), vec![]);
}
+#[gpui::test]
+async fn test_no_duplicated_sticky_headers(cx: &mut TestAppContext) {
+ init_test(cx, |_| {});
+ let mut cx = EditorTestContext::new(cx).await;
+
+ cx.set_state(indoc! {"
+ ˇimpl Foo { fn bar() {
+ let x = 1;
+ fn baz() {
+ let y = 2;
+ }
+ } }
+ "});
+
+ cx.update_editor(|e, _, cx| {
+ e.buffer()
+ .read(cx)
+ .as_singleton()
+ .unwrap()
+ .update(cx, |buffer, cx| {
+ buffer.set_language(Some(rust_lang()), cx);
+ })
+ });
+
+ let mut sticky_headers = |offset: ScrollOffset| {
+ cx.update_editor(|e, window, cx| {
+ e.scroll(gpui::Point { x: 0., y: offset }, None, window, cx);
+ });
+ cx.run_until_parked();
+ cx.update_editor(|e, window, cx| {
+ EditorElement::sticky_headers(&e, &e.snapshot(window, cx))
+ .into_iter()
+ .map(
+ |StickyHeader {
+ start_point,
+ offset,
+ ..
+ }| { (start_point, offset) },
+ )
+ .collect::>()
+ })
+ };
+
+ let struct_foo = Point { row: 0, column: 0 };
+ let fn_baz = Point { row: 2, column: 4 };
+
+ assert_eq!(sticky_headers(0.0), vec![]);
+ assert_eq!(sticky_headers(0.5), vec![(struct_foo, 0.0)]);
+ assert_eq!(sticky_headers(1.0), vec![(struct_foo, 0.0)]);
+ assert_eq!(sticky_headers(1.5), vec![(struct_foo, 0.0), (fn_baz, 1.0)]);
+ assert_eq!(sticky_headers(2.0), vec![(struct_foo, 0.0), (fn_baz, 1.0)]);
+ assert_eq!(sticky_headers(2.5), vec![(struct_foo, 0.0), (fn_baz, 0.5)]);
+ assert_eq!(sticky_headers(3.0), vec![(struct_foo, 0.0)]);
+ assert_eq!(sticky_headers(3.5), vec![(struct_foo, 0.0)]);
+ assert_eq!(sticky_headers(4.0), vec![(struct_foo, 0.0)]);
+ assert_eq!(sticky_headers(4.5), vec![(struct_foo, -0.5)]);
+ assert_eq!(sticky_headers(5.0), vec![]);
+}
+
#[gpui::test]
fn test_relative_line_numbers(cx: &mut TestAppContext) {
init_test(cx, |_| {});
diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs
index 968048f68513a09c460bb06789103923bbbca828..9ce080c87bf82ec1098e2a4b1db6bc6a65d22828 100644
--- a/crates/editor/src/element.rs
+++ b/crates/editor/src/element.rs
@@ -4674,6 +4674,13 @@ impl EditorElement {
.display_snapshot
.point_to_display_point(start_point, Bias::Left)
.row();
+ if rows
+ .last()
+ .is_some_and(|last| last.sticky_row == sticky_row)
+ {
+ continue;
+ }
+
let end_row = snapshot
.display_snapshot
.point_to_display_point(end_point, Bias::Left)
diff --git a/crates/extension_host/src/wasm_host.rs b/crates/extension_host/src/wasm_host.rs
index 286639cdd67d716b1137290baf269670ecddebe7..87a2032e831fc942f6848428a901a9fe3f613fc8 100644
--- a/crates/extension_host/src/wasm_host.rs
+++ b/crates/extension_host/src/wasm_host.rs
@@ -42,7 +42,7 @@ use wasmtime::{
CacheStore, Engine, Store,
component::{Component, ResourceTable},
};
-use wasmtime_wasi::p2::{self as wasi, IoView as _};
+use wasmtime_wasi::{WasiCtx, WasiCtxBuilder, WasiCtxView, WasiView};
use wit::Extension;
pub struct WasmHost {
@@ -93,7 +93,7 @@ impl extension::Extension for WasmExtension {
) -> Result {
self.call(|extension, store| {
async move {
- let resource = store.data_mut().table().push(worktree)?;
+ let resource = store.data_mut().table.push(worktree)?;
let command = extension
.call_language_server_command(
store,
@@ -119,7 +119,7 @@ impl extension::Extension for WasmExtension {
) -> Result