diff --git a/Cargo.lock b/Cargo.lock index 5c8f2d5..9be4f30 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -338,24 +338,12 @@ dependencies = [ "syn", ] -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - [[package]] name = "base64" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" @@ -706,18 +694,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - [[package]] name = "crypto-common" version = "0.1.7" @@ -771,18 +747,8 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - -[[package]] -name = "darling" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" -dependencies = [ - "darling_core 0.23.0", - "darling_macro 0.23.0", + "darling_core", + "darling_macro", ] [[package]] @@ -799,37 +765,13 @@ dependencies = [ "syn", ] -[[package]] -name = "darling_core" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" -dependencies = [ - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - [[package]] name = "darling_macro" version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core 0.20.11", - "quote", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" -dependencies = [ - "darling_core 0.23.0", + "darling_core", "quote", "syn", ] @@ -868,16 +810,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "deranged" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" -dependencies = [ - "powerfmt", - "serde_core", -] - [[package]] name = "derive_builder" version = "0.20.2" @@ -893,7 +825,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" dependencies = [ - "darling 0.20.11", + "darling", "proc-macro2", "quote", "syn", @@ -959,26 +891,6 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" -[[package]] -name = "dyn-clone" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest", - "elliptic-curve", - "rfc6979", - "signature", - "spki", -] - [[package]] name = "ed25519" version = "2.2.3" @@ -1013,27 +925,6 @@ dependencies = [ "serde", ] -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest", - "ff", - "generic-array", - "group", - "hkdf", - "pem-rfc7468", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "subtle", - "zeroize", -] - [[package]] name = "encode_unicode" version = "1.0.0" @@ -1180,16 +1071,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "fiat-crypto" version = "0.2.9" @@ -1377,7 +1258,6 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", - "zeroize", ] [[package]] @@ -1484,17 +1364,6 @@ dependencies = [ "web-time", ] -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "h2" version = "0.4.13" @@ -1507,7 +1376,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.13.0", + "indexmap", "slab", "tokio", "tokio-util", @@ -1525,12 +1394,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hashbrown" version = "0.14.5" @@ -1927,17 +1790,6 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - [[package]] name = "indexmap" version = "2.13.0" @@ -2024,15 +1876,6 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.14.0" @@ -2471,12 +2314,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-conv" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" - [[package]] name = "num-derive" version = "0.4.2" @@ -2535,26 +2372,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" -[[package]] -name = "oauth2" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e219e79014df21a225b1860a479e2dcd7cbd9130f4defd4bd0e191ea31d67d" -dependencies = [ - "base64 0.22.1", - "chrono", - "getrandom 0.2.17", - "http", - "rand 0.8.5", - "reqwest", - "serde", - "serde_json", - "serde_path_to_error", - "sha2", - "thiserror 1.0.69", - "url", -] - [[package]] name = "once_cell" version = "1.21.3" @@ -2606,37 +2423,6 @@ dependencies = [ "pathdiff", ] -[[package]] -name = "openidconnect" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c6709ba2ea764bbed26bce1adf3c10517113ddea6f2d4196e4851757ef2b2" -dependencies = [ - "base64 0.21.7", - "chrono", - "dyn-clone", - "ed25519-dalek", - "hmac", - "http", - "itertools 0.10.5", - "log", - "oauth2", - "p256", - "p384", - "rand 0.8.5", - "rsa", - "serde", - "serde-value", - "serde_json", - "serde_path_to_error", - "serde_plain", - "serde_with", - "sha2", - "subtle", - "thiserror 1.0.69", - "url", -] - [[package]] name = "openssl" version = "0.10.75" @@ -2693,15 +2479,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - [[package]] name = "ort" version = "2.0.0-rc.9" @@ -2726,30 +2503,6 @@ dependencies = [ "ureq", ] -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] - -[[package]] -name = "p384" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] - [[package]] name = "parking" version = "2.2.1" @@ -2940,12 +2693,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - [[package]] name = "ppv-lite86" version = "0.2.21" @@ -2965,15 +2712,6 @@ dependencies = [ "syn", ] -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - [[package]] name = "proc-macro2" version = "1.0.106" @@ -3183,7 +2921,7 @@ dependencies = [ "built", "cfg-if", "interpolate_name", - "itertools 0.14.0", + "itertools", "libc", "libfuzzer-sys", "log", @@ -3249,7 +2987,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2964d0cf57a3e7a06e8183d14a8b527195c706b7983549cd5462d5aa3747438f" dependencies = [ "either", - "itertools 0.14.0", + "itertools", "rayon", ] @@ -3292,26 +3030,6 @@ dependencies = [ "thiserror 2.0.18", ] -[[package]] -name = "ref-cast" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "regex" version = "1.12.3" @@ -3388,16 +3106,6 @@ dependencies = [ "webpki-roots 1.0.6", ] -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", -] - [[package]] name = "rgb" version = "0.8.53" @@ -3523,50 +3231,12 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "schemars" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", -] - [[package]] name = "security-framework" version = "3.7.0" @@ -3606,16 +3276,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde-value" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" -dependencies = [ - "ordered-float", - "serde", -] - [[package]] name = "serde_core" version = "1.0.228" @@ -3660,15 +3320,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "serde_plain" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3681,37 +3332,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_with" -version = "3.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f" -dependencies = [ - "base64 0.22.1", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.13.0", - "schemars 0.9.0", - "schemars 1.2.1", - "serde_core", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65" -dependencies = [ - "darling 0.23.0", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "sha1" version = "0.10.6" @@ -3892,7 +3512,7 @@ dependencies = [ "futures-util", "hashbrown 0.15.5", "hashlink", - "indexmap 2.13.0", + "indexmap", "log", "memchr", "once_cell", @@ -4236,37 +3856,6 @@ dependencies = [ "zune-jpeg", ] -[[package]] -name = "time" -version = "0.3.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde_core", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" - -[[package]] -name = "time-macros" -version = "0.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" -dependencies = [ - "num-conv", - "time-core", -] - [[package]] name = "tinystr" version = "0.8.2" @@ -4305,7 +3894,7 @@ dependencies = [ "derive_builder", "esaxx-rs", "getrandom 0.3.4", - "itertools 0.14.0", + "itertools", "log", "macro_rules_attribute", "monostate", @@ -4462,7 +4051,7 @@ dependencies = [ [[package]] name = "tracevault-cli" -version = "0.7.0" +version = "0.8.0" dependencies = [ "chrono", "clap", @@ -4481,7 +4070,7 @@ dependencies = [ [[package]] name = "tracevault-core" -version = "0.7.0" +version = "0.8.0" dependencies = [ "async-trait", "chrono", @@ -4505,27 +4094,13 @@ dependencies = [ name = "tracevault-enterprise" version = "0.1.0" dependencies = [ - "aes-gcm", "async-trait", - "base64 0.22.1", - "chrono", - "ed25519-dalek", - "glob-match", - "hex", - "openidconnect", - "rand 0.8.5", - "reqwest", - "serde", - "serde_json", - "sha2", "tracevault-core", - "tracing", - "uuid", ] [[package]] name = "tracevault-server" -version = "0.7.0" +version = "0.8.0" dependencies = [ "aes-gcm", "argon2", @@ -4829,7 +4404,6 @@ dependencies = [ "idna", "percent-encoding", "serde", - "serde_derive", ] [[package]] @@ -5006,7 +4580,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" dependencies = [ "anyhow", - "indexmap 2.13.0", + "indexmap", "wasm-encoder", "wasmparser", ] @@ -5032,7 +4606,7 @@ checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ "bitflags", "hashbrown 0.15.5", - "indexmap 2.13.0", + "indexmap", "semver", ] @@ -5441,7 +5015,7 @@ checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" dependencies = [ "anyhow", "heck", - "indexmap 2.13.0", + "indexmap", "prettyplease", "syn", "wasm-metadata", @@ -5472,7 +5046,7 @@ checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", "bitflags", - "indexmap 2.13.0", + "indexmap", "log", "serde", "serde_derive", @@ -5491,7 +5065,7 @@ checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" dependencies = [ "anyhow", "id-arena", - "indexmap 2.13.0", + "indexmap", "log", "semver", "serde", diff --git a/Cargo.toml b/Cargo.toml index 3899bed..4988c37 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = ["crates/tracevault-core", "crates/tracevault-cli", "crates/tracevault resolver = "2" [workspace.package] -version = "0.7.0" +version = "0.8.0" edition = "2021" license = "Apache-2.0" repository = "https://github.com/softwaremill/tracevault" diff --git a/crates/tracevault-cli/Cargo.toml b/crates/tracevault-cli/Cargo.toml index 7afbe04..d26ab7c 100644 --- a/crates/tracevault-cli/Cargo.toml +++ b/crates/tracevault-cli/Cargo.toml @@ -18,7 +18,7 @@ name = "tracevault" path = "src/main.rs" [dependencies] -tracevault-core = { path = "../tracevault-core", version = "0.7" } +tracevault-core = { path = "../tracevault-core", version = "0.8" } clap = { version = "4", features = ["derive"] } chrono.workspace = true tokio.workspace = true diff --git a/crates/tracevault-core/CHANGELOG.md b/crates/tracevault-core/CHANGELOG.md index 315c81b..a4da609 100644 --- a/crates/tracevault-core/CHANGELOG.md +++ b/crates/tracevault-core/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.8.0](https://github.com/softwaremill/tracevault/compare/v0.7.0...v0.8.0) - 2026-04-10 + +### Added + +- add SsoProvider trait and community stub + ## [0.7.0](https://github.com/softwaremill/tracevault/compare/v0.6.2...v0.7.0) - 2026-04-09 ### Added diff --git a/crates/tracevault-server/CHANGELOG.md b/crates/tracevault-server/CHANGELOG.md index b4088ad..e59315b 100644 --- a/crates/tracevault-server/CHANGELOG.md +++ b/crates/tracevault-server/CHANGELOG.md @@ -7,6 +7,172 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.8.0](https://github.com/softwaremill/tracevault/compare/v0.7.0...v0.8.0) - 2026-04-10 + +### Added + +- add detailed logging to chat indexing and summarization pipeline +- auto-reindex sessions when transcript grows beyond indexed chunk count +- accept mention overrides in chat message endpoint +- add GET /chat/mentions endpoint for @ autocomplete +- add chat API endpoints with conversation CRUD and RAG message handler +- add chat query pipeline with filter extraction, two-stage retrieval, and response generation +- add chat indexing pipeline with session completion hook and backfill +- add chat conversations and messages repo layer +- add session summarization service for RAG indexing +- add transcript chunking logic with sliding windows for RAG +- add chat summarization LLM settings endpoints +- add fastembed wrapper service for local text embedding +- add chat_search feature flag, ChatUse permission, and pgvector/fastembed deps +- add migration for chat RAG tables, pgvector, and summarization config +- enrich stories with session transcripts and clickable references +- enrich story with session transcripts and clickable references +- add GET /code/sessions endpoint for function sessions +- add gather_function_sessions for code sessions endpoint +- unify transcript display with timestamps across traces and analytics views +- report attributed_sessions_sealed in CI verification +- include session seal verification in chain verification +- background sweep to seal stale sessions after 30min inactivity +- seal sessions on SessionEnd when signing is enabled +- seal commits on push when signing is enabled +- add SealingService with commit and session sealing logic +- add sealing repo layer for commit and session seals +- migration for multi-seal sessions and verification counts +- add sign method to SigningService +- revamp invite flow UI, add invite acceptance page, improve error handling +- wire invite routes, remove old invite_member endpoint +- add invite link handlers (create, list, revoke, details, accept) +- add generate_invite_token utility +- add invite_expiry_minutes and cors_origin to AppState +- add org_invites migration for invite link flow +- add keyset pagination types and rewrite IN-subqueries +- add hook adapter architecture with multi-tool detection +- add SQL indexes, materialized views, and tool field migration +- add repository layer for analytics, policies, compliance, pricing, code_stories +- add repository layer for sessions, events, commits +- add repository layer for users, orgs, repos, api_keys +- add AppError type with IntoResponse and permission helper +- add top AI tools section to author detail page and fix DataTable clickability +- register AI tools analytics routes +- add AI tools analytics endpoints and software summary +- add AI tool usage tracking (migration + extraction) +- add top authors leaderboard to dashboard +- add author detail endpoint +- add user_id to AuthorLeaderboard, drop unused fields +- register software analytics routes +- add software user detail endpoint +- add software analytics list endpoint +- extract software usage from Bash events at ingest +- add user_software_usage migration +- add manual pricing sync endpoint and sync status endpoint +- wire startup + daily background pricing sync +- add sync_pricing function with diff, update, and recalculation +- add LiteLLM JSON parsing with model mapping and tests +- add source field to PricingEntry struct and queries +- add pricing sync migration (source column + sync log table) +- *(stream)* extract token usage and costs from transcript chunks in real-time +- *(api)* add traces UI endpoints (sessions, commits, timeline, attribution, branches) and remove old traces module +- *(branch-tracking)* track commits reaching branches and tags via webhooks +- *(attribution)* add line-level attribution engine with confidence scoring +- *(api)* add streaming event endpoint +- *(api)* add commit push endpoint with file-level attribution +- *(schema)* add streaming architecture tables +- *(pricing)* add pricing CRUD and recalculate API endpoints +- *(dashboard)* add handler and register GET /dashboard route +- *(dashboard)* add compliance query +- *(dashboard)* add KPI aggregation and sparkline queries +- *(dashboard)* add types, response struct, and period range helper +- register session detail API route +- add session detail transcript parser with per-call breakdown +- add model_pricing table with seed data + +### Changed + +- simplify backfill to rely solely on chunk count comparison +- extract SessionSearchFilter struct to fix clippy too_many_arguments +- make resolve_org_llm public for chat module reuse +- replace regex session linkification with structured Linked Sessions section +- extract collect_file_commit_shas helper from story context +- make is_valid_email public for reuse in invite handler +- migrate all handlers to AppError and repo/service layers +- strip non-software data from software user detail endpoint +- slim get_software to org-wide tools only +- remove git-ai, compute attribution server-side from sessions +- clean up v2 references in comments, remove dead code and legacy script +- extract seal fields into commit_seals table in compliance and CI +- extract seal fields into session_seals in dashboard compliance query +- rename sessions_v2/commits_v2 in analytics +- rename sessions_v2/commits_v2 in remaining files +- rename sessions_v2/commits_v2 in traces_ui +- rename sessions_v2/commits_v2 in stream and commit_push endpoints +- consolidate migrations, remove v2 suffixes from schema +- use real session model names for pricing instead of canonical names +- extract shared recalculate_sessions_for_pricing function +- migrate all queries from old sessions table to sessions_v2 +- remove old traces.rs and legacy endpoints entirely +- pricing module to support DB-backed rates with fallback + +### Fixed + +- replace nightly floor_char_boundary with stable helper +- use div_ceil instead of manual reimplementation +- exclude sessions without transcripts from indexing status and add backfill diagnostics +- segment large transcripts for summarization and fix byte-boundary panic +- use floor_char_boundary for string truncation to avoid panics on multi-byte chars +- index all sessions regardless of status in chat backfill +- grant admin role to API key auth instead of developer +- chat UX improvements and bug fixes +- make pgvector migration conditional for community installs without the extension +- fallback to file_path query when git SHAs miss DB sessions +- query sessions by file_path instead of git-walking +- unify password minimum length to 10 characters +- force-fetch refspecs and normalize deploy key PEM newline +- add sealed_at to session hash, fix chain race condition with advisory lock +- compute avg session duration from timestamps when duration_ms is missing +- remove needless borrows in encryption tests (clippy) +- resolve CI failures — add dead_code allows and avoid CodeQL hard-coded password flag +- use DB pricing rates during ingestion instead of hardcoded fallbacks +- prevent duplicate token/cost accumulation from overlapping transcript batches +- apply repo/author filters to AI summary and filter empty sessions +- apply repo/author filters to software analytics query +- cast SUM(total_tokens) to BIGINT in software user detail query +- resolve TypeScript narrowing errors in software pages +- use git CLI for clone/fetch to support all SSH key formats +- update migration 008 to use renamed sessions table +- populate tool frequency data in session analytics +- compute duration and messages from fallback sources in analytics sessions +- resolve clippy warning in startup sync +- auto-sync repos on startup, improve attribution blame and error UX +- fix attribution confidence scoring and deduplicate file changes +- *(api)* restore legacy POST /traces endpoint for backward compatibility with old CLI +- *(api)* add committed_at to GROUP BY for linked commits query +- *(ui)* fix navigation responsiveness, transcript rendering, file change display, linked commits dedup, and branch tracking from commit-push +- *(stream)* process piggybacked transcript lines on all event types, not just Transcript +- *(dashboard)* cast SUM() results to int8 for sqlx type compatibility +- *(dashboard)* fill sparkline date gaps and parallelize queries +- never drop transcript records when message field is missing +- remove audit log from login to avoid nil org_id FK violation +- fix display github hashes for real commits +- fix warnings +- fix cargo clippy + +### Security + +- implement NIST 800-63B password policy with breached password check +- add email format validation on registration +- add per-IP rate limiting on public and auth endpoints +- add HMAC-SHA256 verification for GitHub webhook signatures +- require CORS_ORIGIN env var, remove permissive fallback +- sanitize Sqlx and Git error responses to prevent info leakage + +### Test + +- add integration tests for invite link flow +- add Tier 2 repo layer integration tests (api_keys, commits, policies, pricing, repos) +- add API layer unit tests (policies, dashboard, pagination) +- add server unit tests (auth, encryption, error, permissions, signing, pricing, config, attribution, stream) +- add repository layer integration tests + ## [0.7.0](https://github.com/softwaremill/tracevault/compare/v0.6.2...v0.7.0) - 2026-04-09 ### Added diff --git a/crates/tracevault-server/Cargo.toml b/crates/tracevault-server/Cargo.toml index 2e9431f..a1cc042 100644 --- a/crates/tracevault-server/Cargo.toml +++ b/crates/tracevault-server/Cargo.toml @@ -10,7 +10,7 @@ keywords = ["tracing", "attribution", "ai", "server"] categories = ["web-programming", "development-tools"] [dependencies] -tracevault-core = { path = "../tracevault-core", version = "0.7" } +tracevault-core = { path = "../tracevault-core", version = "0.8" } axum = { version = "0.8", features = ["macros"] } tokio.workspace = true serde.workspace = true