diff --git a/CHANGELOG.md b/CHANGELOG.md index edb4066..13029e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,17 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +## [0.11.4] - 2026-02-21 + ### Added - `validate_skill_references(body, skill_dir)` in zeph-skills loader: parses Markdown links targeting `references/`, `scripts/`, or `assets/` subdirs, warns on missing files and symlink traversal attempts (#689) - `sanitize_skill_body(body)` in zeph-skills prompt: escapes XML structural tags (``, ``, ``) to prevent prompt injection (#689) - Body sanitization applied automatically to all non-`Trusted` skills in `format_skills_prompt()` (#689) - -### Changed -- `requires-secrets` SKILL.md frontmatter field renamed to `x-requires-secrets` to follow JSON Schema vendor extension convention and avoid future spec collisions — **breaking change**: update skill frontmatter to use `x-requires-secrets`; the old `requires-secrets` form is still parsed with a deprecation warning (#688) -- `allowed-tools` SKILL.md field now uses space-separated values per agentskills.io spec (was comma-separated) — **breaking change** for skills using comma-delimited allowed-tools (#686) -- Skill resource files (references, scripts, assets) are no longer eagerly injected into the system prompt on skill activation; only filenames are listed as available resources — **breaking change** for skills relying on auto-injected reference content (#687) - -### Added - `load_skill_resource(skill_dir, relative_path)` public function in `zeph-skills::resource` for on-demand loading of skill resource files with path traversal protection (#687) - Nested `metadata:` block support in SKILL.md frontmatter: indented key-value pairs under `metadata:` are parsed as structured metadata (#686) - Field length validation in SKILL.md loader: `description` capped at 1024 characters, `compatibility` capped at 500 characters (#686) @@ -35,6 +30,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - Gate skill activation on required secrets availability in system prompt builder (#682) - Inject active skill's secrets as scoped env vars into `ShellExecutor` at execution time (#682) - Custom secrets step in interactive config wizard (`--init`) (#682) +- crates.io publishing metadata (description, readme, homepage, keywords, categories) for all workspace crates (#702) + +### Changed +- `requires-secrets` SKILL.md frontmatter field renamed to `x-requires-secrets` to follow JSON Schema vendor extension convention and avoid future spec collisions — **breaking change**: update skill frontmatter to use `x-requires-secrets`; the old `requires-secrets` form is still parsed with a deprecation warning (#688) +- `allowed-tools` SKILL.md field now uses space-separated values per agentskills.io spec (was comma-separated) — **breaking change** for skills using comma-delimited allowed-tools (#686) +- Skill resource files (references, scripts, assets) are no longer eagerly injected into the system prompt on skill activation; only filenames are listed as available resources — **breaking change** for skills relying on auto-injected reference content (#687) ## [0.11.3] - 2026-02-20 @@ -1083,7 +1084,8 @@ let agent = Agent::new(provider, channel, &skills_prompt, executor); - Agent calls channel.send_typing() before each LLM request - Agent::run() uses tokio::select! to race channel messages against shutdown signal -[Unreleased]: https://github.com/bug-ops/zeph/compare/v0.11.3...HEAD +[Unreleased]: https://github.com/bug-ops/zeph/compare/v0.11.4...HEAD +[0.11.4]: https://github.com/bug-ops/zeph/compare/v0.11.3...v0.11.4 [0.11.3]: https://github.com/bug-ops/zeph/compare/v0.11.2...v0.11.3 [0.11.2]: https://github.com/bug-ops/zeph/compare/v0.11.1...v0.11.2 [0.11.1]: https://github.com/bug-ops/zeph/compare/v0.11.0...v0.11.1 diff --git a/Cargo.lock b/Cargo.lock index adbb764..5cb8e10 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -27,6 +27,17 @@ dependencies = [ "generic-array", ] +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + [[package]] name = "age" version = "0.11.2" @@ -42,7 +53,7 @@ dependencies = [ "i18n-embed", "i18n-embed-fl", "lazy_static", - "nom", + "nom 7.1.3", "pin-project", "rand 0.8.5", "rust-embed", @@ -64,7 +75,7 @@ dependencies = [ "cookie-factory", "hkdf", "io_tee", - "nom", + "nom 7.1.3", "rand 0.8.5", "secrecy", "sha2", @@ -159,7 +170,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -170,14 +181,14 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anyhow" -version = "1.0.101" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "aquamarine" @@ -190,7 +201,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -268,7 +279,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -279,7 +290,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -306,6 +317,43 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "audio-core" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ebbf82d06013f4c41fe71303feb980cddd78496d904d06be627972de51a24" + +[[package]] +name = "audioadapter" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e25c5bb54993ad4693d8b68b6f29f872c5fd9f92a6469d0acb0cbaf80a13d0f9" +dependencies = [ + "audio-core", + "num-traits", +] + +[[package]] +name = "audioadapter-buffers" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6af89882334c4e501faa08992888593ada468f9e1ab211635c32f9ada7786e0" +dependencies = [ + "audioadapter", + "audioadapter-sample", + "num-traits", +] + +[[package]] +name = "audioadapter-sample" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e9a3d502fec0b21aa420febe0b110875cf8a7057c49e83a0cace1df6a73e03e" +dependencies = [ + "audio-core", + "num-traits", +] + [[package]] name = "autocfg" version = "1.5.0" @@ -442,7 +490,7 @@ checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -569,6 +617,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + [[package]] name = "block2" version = "0.6.2" @@ -617,7 +674,7 @@ dependencies = [ "tokio", "tokio-stream", "tokio-util", - "tonic 0.14.4", + "tonic 0.14.5", "tower-service", "url", "winapi", @@ -631,9 +688,9 @@ checksum = "85a885520bf6249ab931a764ffdb87b0ceef48e6e7d807cfdb21b751e086e1ad" dependencies = [ "prost 0.14.3", "prost-types 0.14.3", - "tonic 0.14.4", + "tonic 0.14.5", "tonic-prost", - "ureq 3.2.0", + "ureq", ] [[package]] @@ -664,9 +721,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.1" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6f81257d10a0f602a294ae4182251151ff97dbb504ef9afcdda4a64b24d9b4" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" + +[[package]] +name = "bytecount" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" [[package]] name = "bytemuck" @@ -685,7 +748,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -816,6 +879,15 @@ dependencies = [ "rustversion", ] +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher", +] + [[package]] name = "cc" version = "1.2.56" @@ -834,6 +906,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +[[package]] +name = "cff-parser" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31f5b6e9141c036f3ff4ce7b2f7e432b0f00dee416ddcd4f17741d189ddc2e9d" + [[package]] name = "cfg-if" version = "1.0.4" @@ -924,9 +1002,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.59" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5caf74d17c3aec5495110c34cc3f78644bfa89af6c8993ed4de2790e49b6499" +checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" dependencies = [ "clap_builder", "clap_derive", @@ -934,9 +1012,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.59" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "370daa45065b80218950227371916a1633217ae42b2715b2287b606dcd618e24" +checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" dependencies = [ "anstream", "anstyle", @@ -953,7 +1031,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -983,7 +1061,7 @@ version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -1038,10 +1116,22 @@ dependencies = [ "encode_unicode", "libc", "once_cell", - "unicode-width", "windows-sys 0.59.0", ] +[[package]] +name = "console" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03e45a4a8926227e4197636ba97a9fc9b00477e9f4bd711395687c5f0734bec4" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width", + "windows-sys 0.61.2", +] + [[package]] name = "const-oid" version = "0.9.6" @@ -1063,6 +1153,17 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + [[package]] name = "cookie-factory" version = "0.3.3" @@ -1072,6 +1173,24 @@ dependencies = [ "futures", ] +[[package]] +name = "cookie_store" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b2c103cf610ec6cae3da84a766285b42fd16aad564758459e6ecf128c75206" +dependencies = [ + "cookie", + "document-features", + "idna", + "indexmap 2.13.0", + "log", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -1295,7 +1414,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1342,7 +1461,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1386,7 +1505,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1400,7 +1519,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1413,7 +1532,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1424,7 +1543,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1435,7 +1554,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1446,7 +1565,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core 0.23.0", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1527,7 +1646,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1537,7 +1656,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1566,7 +1685,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "unicode-xid", ] @@ -1580,19 +1699,18 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "dialoguer" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" +checksum = "25f104b501bf2364e78d0d3974cbc774f738f5865306ed128e1e0d7499c0ad96" dependencies = [ - "console", + "console 0.16.2", "shell-words", "tempfile", - "thiserror 1.0.69", "zeroize", ] @@ -1626,7 +1744,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1647,7 +1765,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1729,6 +1847,15 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d926b4d407d372f141f93bb444696142c29d32962ccbd3531117cf3aa0bfa9" +[[package]] +name = "ecb" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a8bfa975b1aec2145850fcaa1c6fe269a16578c44705a532ae3edc92b8881c7" +dependencies = [ + "cipher", +] + [[package]] name = "either" version = "1.15.0" @@ -1762,7 +1889,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1788,7 +1915,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1854,7 +1981,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74fef4569247a5f429d9156b9d0a2599914385dd189c539334c625d8099d90ab" dependencies = [ "futures-core", - "nom", + "nom 7.1.3", "pin-project-lite", ] @@ -2103,7 +2230,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2203,7 +2330,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2644,9 +2771,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hf-hub" -version = "0.4.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "629d8f3bbeda9d148036d6b0de0a3ab947abd08ce90626327fc3547a49d59d97" +checksum = "aef3982638978efa195ff11b305f51f1f22f4f0a6cabee7af79b383ebee6a213" dependencies = [ "dirs", "futures", @@ -2661,8 +2788,8 @@ dependencies = [ "serde_json", "thiserror 2.0.18", "tokio", - "ureq 2.12.1", - "windows-sys 0.60.2", + "ureq", + "windows-sys 0.61.2", ] [[package]] @@ -2904,7 +3031,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.116", + "syn 2.0.117", "unic-langid", ] @@ -2918,7 +3045,7 @@ dependencies = [ "i18n-config", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -3119,14 +3246,14 @@ dependencies = [ [[package]] name = "indicatif" -version = "0.17.11" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" +checksum = "25470f23803092da7d239834776d653104d551bc4d7eacaf31e6837854b8e9eb" dependencies = [ - "console", - "number_prefix", + "console 0.16.2", "portable-atomic", "unicode-width", + "unit-prefix", "web-time", ] @@ -3165,6 +3292,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ + "block-padding", "generic-array", ] @@ -3174,7 +3302,7 @@ version = "1.46.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e82db8c87c7f1ccecb34ce0c24399b8a73081427f3c7c50a5d597925356115e4" dependencies = [ - "console", + "console 0.15.11", "once_cell", "regex", "serde", @@ -3194,7 +3322,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -3311,9 +3439,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.85" +version = "0.3.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +checksum = "93f0862381daaec758576dcc22eb7bbf4d7efd67328553f3b45a412a51a3fb21" dependencies = [ "once_cell", "wasm-bindgen", @@ -3469,19 +3597,29 @@ checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lopdf" -version = "0.34.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5c8ecfc6c72051981c0459f75ccc585e7ff67c70829560cda8e647882a9abff" +checksum = "c7184fdea2bc3cd272a1acec4030c321a8f9875e877b3f92a53f2f6033fdc289" dependencies = [ + "aes", + "bitflags 2.11.0", + "cbc", + "ecb", "encoding_rs", "flate2", + "getrandom 0.3.4", "indexmap 2.13.0", "itoa", "log", "md-5", - "nom", + "nom 8.0.0", + "nom_locate", + "rand 0.9.2", "rangemap", - "time", + "sha2", + "stringprep", + "thiserror 2.0.18", + "ttf-parser", "weezl", ] @@ -3707,7 +3845,7 @@ checksum = "e4db6d5580af57bf992f59068d4ea26fd518574ff48d7639b255a36f9de6e7e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -3764,6 +3902,26 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nom" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" +dependencies = [ + "memchr", +] + +[[package]] +name = "nom_locate" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b577e2d69827c4740cba2b52efaad1c4cc7c73042860b199710b3575c68438d" +dependencies = [ + "bytecount", + "memchr", + "nom 8.0.0", +] + [[package]] name = "notify" version = "8.2.0" @@ -3809,7 +3967,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3886,7 +4044,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -3949,12 +4107,6 @@ dependencies = [ "libc", ] -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "objc" version = "0.2.7" @@ -4117,7 +4269,7 @@ dependencies = [ "reqwest 0.12.28", "thiserror 2.0.18", "tokio", - "tonic 0.14.4", + "tonic 0.14.5", "tracing", ] @@ -4130,7 +4282,7 @@ dependencies = [ "opentelemetry", "opentelemetry_sdk", "prost 0.14.3", - "tonic 0.14.4", + "tonic 0.14.5", "tonic-prost", ] @@ -4227,7 +4379,7 @@ dependencies = [ "regex", "regex-syntax", "structmeta", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4254,13 +4406,15 @@ dependencies = [ [[package]] name = "pdf-extract" -version = "0.7.12" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbb3a5387b94b9053c1e69d8abfd4dd6dae7afda65a5c5279bc1f42ab39df575" +checksum = "1e28ba1758a3d3f361459645780e09570b573fc3c82637449e9963174c813a98" dependencies = [ "adobe-cmap-parser", + "cff-parser", "encoding_rs", "euclid 0.20.14", + "log", "lopdf", "postscript", "type1-encoding-parser", @@ -4312,7 +4466,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4396,7 +4550,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4409,7 +4563,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4447,7 +4601,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4583,7 +4737,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4614,7 +4768,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4689,7 +4843,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4702,7 +4856,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4800,9 +4954,9 @@ checksum = "40e24eee682d89fb193496edf918a7f407d30175b2e785fe057e4392dfd182e0" [[package]] name = "qdrant-client" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76499f3e8385dae785d65a0216e0dfa8fadaddd18038adf04f438631683b26a" +checksum = "f5d0a9b168ecf8f30a3eb7e8f4766e3050701242ffbe99838b58e6c4251e7211" dependencies = [ "anyhow", "derive_builder", @@ -5174,7 +5328,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5318,9 +5472,9 @@ dependencies = [ [[package]] name = "rmcp" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bef41ebc9ebed2c1b1d90203e9d1756091e8a00bbc3107676151f39868ca0ee" +checksum = "cc4c9c94680f75470ee8083a0667988b5d7b5beb70b9f998a8e51de7c682ce60" dependencies = [ "async-trait", "base64 0.22.1", @@ -5330,7 +5484,7 @@ dependencies = [ "pastey", "pin-project-lite", "process-wrap", - "reqwest 0.12.28", + "reqwest 0.13.2", "rmcp-macros", "schemars 1.2.1", "serde", @@ -5345,15 +5499,15 @@ dependencies = [ [[package]] name = "rmcp-macros" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e88ad84b8b6237a934534a62b379a5be6388915663c0cc598ceb9b3292bbbfe" +checksum = "90c23c8f26cae4da838fbc3eadfaecf2d549d97c04b558e7bd90526a9c28b42a" dependencies = [ "darling 0.23.0", "proc-macro2", "quote", "serde_json", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5378,14 +5532,18 @@ dependencies = [ [[package]] name = "rubato" -version = "0.16.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5258099699851cfd0082aeb645feb9c084d9a5e1f1b8d5372086b989fc5e56a1" +checksum = "90173154a8a14e6adb109ea641743bc95ec81c093d94e70c6763565f7108ebeb" dependencies = [ + "audioadapter", + "audioadapter-buffers", "num-complex", "num-integer", "num-traits", "realfft", + "visibility", + "windowfunctions", ] [[package]] @@ -5408,7 +5566,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.116", + "syn 2.0.117", "walkdir", ] @@ -5467,7 +5625,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -5535,7 +5693,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -5672,7 +5830,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5683,9 +5841,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scrape-core" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53cd0cb49d13b913b2f7a6da2a302ae3cb85b3550c0d7f283fec21873edf43a" +checksum = "07605b9e626725f5a0e0f7ce5d6a6d2a6c6c0ef5f91d91335cc320fa84e178a7" dependencies = [ "cssparser", "html5ever", @@ -5725,9 +5883,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.6.0" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d17b898a6d6948c3a8ee4372c17cb384f90d2e6e912ef00895b14fd7ab54ec38" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ "bitflags 2.11.0", "core-foundation 0.10.1", @@ -5738,9 +5896,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.16.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321c8673b092a9a42605034a9879d73cb79101ed5fd117bc9a597b89b4e9e61a" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -5819,7 +5977,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5830,7 +5988,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5875,7 +6033,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5927,7 +6085,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5953,7 +6111,7 @@ checksum = "6f50427f258fb77356e4cd4aa0e87e2bd2c66dbcee41dc405282cae2bfc26c83" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6145,7 +6303,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5851699c4033c63636f7ea4cf7b7c1f1bf06d0cc03cfb42e711de5a5c46cf326" dependencies = [ "base64 0.13.1", - "nom", + "nom 7.1.3", "serde", "unicode-segmentation", ] @@ -6209,7 +6367,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6230,7 +6388,7 @@ dependencies = [ "sha2", "sqlx-core", "sqlx-sqlite", - "syn 2.0.116", + "syn 2.0.117", "tokio", "url", ] @@ -6438,7 +6596,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6449,7 +6607,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6470,7 +6628,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6601,9 +6759,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.116" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -6627,7 +6785,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6744,7 +6902,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6754,10 +6912,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.1", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -6777,7 +6935,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662" dependencies = [ "fnv", - "nom", + "nom 7.1.3", "phf 0.11.3", "phf_codegen 0.11.3", ] @@ -6890,7 +7048,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6901,7 +7059,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7049,7 +7207,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7210,9 +7368,9 @@ dependencies = [ [[package]] name = "tonic" -version = "0.14.4" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f32a6f80051a4111560201420c7885d0082ba9efe2ab61875c587bb6b18b9a0" +checksum = "fec7c61a0695dc1887c1b53952990f3ad2e3a31453e1f49f10e75424943a93ec" dependencies = [ "async-trait", "axum 0.8.8", @@ -7239,13 +7397,13 @@ dependencies = [ [[package]] name = "tonic-prost" -version = "0.14.4" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f86539c0089bfd09b1f8c0ab0239d80392af74c21bc9e0f15e1b4aca4c1647f" +checksum = "a55376a0bbaa4975a3f10d009ad763d8f4108f067c7c2e74f3001fb49778d309" dependencies = [ "bytes", "prost 0.14.3", - "tonic 0.14.4", + "tonic 0.14.5", ] [[package]] @@ -7339,7 +7497,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7535,6 +7693,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "ttf-parser" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" + [[package]] name = "tungstenite" version = "0.28.0" @@ -7740,6 +7904,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" +[[package]] +name = "unit-prefix" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3" + [[package]] name = "universal-hash" version = "0.5.1" @@ -7758,36 +7928,23 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.12.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" +checksum = "fdc97a28575b85cfedf2a7e7d3cc64b3e11bd8ac766666318003abbacc7a21fc" dependencies = [ "base64 0.22.1", + "cookie_store", "flate2", "log", - "once_cell", + "percent-encoding", "rustls", "rustls-pki-types", "serde", "serde_json", "socks", - "url", - "webpki-roots 0.26.11", -] - -[[package]] -name = "ureq" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc97a28575b85cfedf2a7e7d3cc64b3e11bd8ac766666318003abbacc7a21fc" -dependencies = [ - "base64 0.22.1", - "log", - "percent-encoding", - "rustls", - "rustls-pki-types", "ureq-proto", "utf-8", + "webpki-roots 1.0.6", ] [[package]] @@ -7865,6 +8022,17 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "visibility" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "vtparse" version = "0.6.2" @@ -7934,9 +8102,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.108" +version = "0.2.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +checksum = "1de241cdc66a9d91bd84f097039eb140cdc6eec47e0cdbaf9d932a1dd6c35866" dependencies = [ "cfg-if", "once_cell", @@ -7947,9 +8115,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.58" +version = "0.4.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" +checksum = "a42e96ea38f49b191e08a1bab66c7ffdba24b06f9995b39a9dd60222e5b6f1da" dependencies = [ "cfg-if", "futures-util", @@ -7961,9 +8129,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.108" +version = "0.2.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +checksum = "e12fdf6649048f2e3de6d7d5ff3ced779cdedee0e0baffd7dff5cdfa3abc8a52" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7971,22 +8139,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.108" +version = "0.2.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +checksum = "0e63d1795c565ac3462334c1e396fd46dbf481c40f51f5072c310717bc4fb309" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.108" +version = "0.2.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +checksum = "e9f9cdac23a5ce71f6bf9f8824898a501e511892791ea2a0c6b8568c68b9cb53" dependencies = [ "unicode-ident", ] @@ -8053,9 +8221,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.85" +version = "0.3.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" +checksum = "f2c7c5718134e770ee62af3b6b4a84518ec10101aad610c024b64d6ff29bb1ff" dependencies = [ "js-sys", "wasm-bindgen", @@ -8220,7 +8388,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -8229,6 +8397,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windowfunctions" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90628d739333b7c5d2ee0b70210b97b8cddc38440c682c96fd9e2c24c2db5f3a" +dependencies = [ + "num-traits", +] + [[package]] name = "windows" version = "0.44.0" @@ -8291,7 +8468,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8302,7 +8479,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8727,7 +8904,7 @@ dependencies = [ "heck", "indexmap 2.13.0", "prettyplease", - "syn 2.0.116", + "syn 2.0.117", "wasm-metadata", "wit-bindgen-core", "wit-component", @@ -8743,7 +8920,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "wit-bindgen-core", "wit-bindgen-rust", ] @@ -8854,7 +9031,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "synstructure", ] @@ -8866,13 +9043,13 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "synstructure", ] [[package]] name = "zeph" -version = "0.11.3" +version = "0.11.4" dependencies = [ "anyhow", "clap", @@ -8907,7 +9084,7 @@ dependencies = [ [[package]] name = "zeph-a2a" -version = "0.11.3" +version = "0.11.4" dependencies = [ "axum 0.8.8", "eventsource-stream", @@ -8930,7 +9107,7 @@ dependencies = [ [[package]] name = "zeph-channels" -version = "0.11.3" +version = "0.11.4" dependencies = [ "axum 0.8.8", "criterion", @@ -8955,7 +9132,7 @@ dependencies = [ [[package]] name = "zeph-core" -version = "0.11.3" +version = "0.11.4" dependencies = [ "age", "anyhow", @@ -8988,7 +9165,7 @@ dependencies = [ [[package]] name = "zeph-gateway" -version = "0.11.3" +version = "0.11.4" dependencies = [ "axum 0.8.8", "blake3", @@ -9005,7 +9182,7 @@ dependencies = [ [[package]] name = "zeph-index" -version = "0.11.3" +version = "0.11.4" dependencies = [ "blake3", "ignore", @@ -9036,7 +9213,7 @@ dependencies = [ [[package]] name = "zeph-llm" -version = "0.11.3" +version = "0.11.4" dependencies = [ "base64 0.22.1", "candle-core", @@ -9062,7 +9239,7 @@ dependencies = [ [[package]] name = "zeph-mcp" -version = "0.11.3" +version = "0.11.4" dependencies = [ "blake3", "qdrant-client", @@ -9081,7 +9258,7 @@ dependencies = [ [[package]] name = "zeph-memory" -version = "0.11.3" +version = "0.11.4" dependencies = [ "blake3", "criterion", @@ -9103,7 +9280,7 @@ dependencies = [ [[package]] name = "zeph-scheduler" -version = "0.11.3" +version = "0.11.4" dependencies = [ "chrono", "cron", @@ -9121,7 +9298,7 @@ dependencies = [ [[package]] name = "zeph-skills" -version = "0.11.3" +version = "0.11.4" dependencies = [ "blake3", "criterion", @@ -9144,7 +9321,7 @@ dependencies = [ [[package]] name = "zeph-tools" -version = "0.11.3" +version = "0.11.4" dependencies = [ "dirs", "filetime", @@ -9170,7 +9347,7 @@ dependencies = [ [[package]] name = "zeph-tui" -version = "0.11.3" +version = "0.11.4" dependencies = [ "crossterm", "expectrl", @@ -9216,7 +9393,7 @@ checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -9236,7 +9413,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "synstructure", ] @@ -9257,7 +9434,7 @@ checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -9291,7 +9468,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 90e925a..30fb34e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ resolver = "3" [workspace.package] edition = "2024" rust-version = "1.88" -version = "0.11.3" +version = "0.11.4" authors = ["bug-ops"] license = "MIT" repository = "https://github.com/bug-ops/zeph" @@ -28,12 +28,12 @@ clap = { version = "4.5", features = ["derive"] } criterion = "0.8" cron = "0.15" crossterm = "0.29" -dialoguer = "0.11" +dialoguer = "0.12" eventsource-stream = "0.2" futures = "0.3" futures-core = "0.3" glob = "0.3.3" -hf-hub = { version = "0.4", default-features = false, features = ["tokio", "rustls-tls", "ureq"] } +hf-hub = { version = "0.5", default-features = false, features = ["tokio", "rustls-tls", "ureq"] } http-body-util = "0.1" ignore = "0.4" insta = { version = "1.46.3", features = ["toml", "filters"] } @@ -44,15 +44,15 @@ ollama-rs = { version = "0.3", default-features = false, features = ["rustls", " opentelemetry = "0.31" opentelemetry-otlp = { version = "0.31", features = ["grpc-tonic"] } opentelemetry_sdk = { version = "0.31", features = ["rt-tokio"] } -pdf-extract = "0.7" +pdf-extract = "0.10" proptest = "1.10" pulldown-cmark = "0.13" -qdrant-client = { version = "1.16", default-features = false } +qdrant-client = { version = "1.17", default-features = false } ratatui = "0.30" regex = "1.12" reqwest = { version = "0.13", default-features = false } -rmcp = "0.15" -rubato = "0.16" +rmcp = "0.16" +rubato = "1.0" schemars = "1.2" scrape-core = "0.2.2" semver = "1.0.27" @@ -93,18 +93,18 @@ unicode-width = "0.2" url = "2.5" uuid = "1.21" wiremock = "0.6.5" -zeph-a2a = { path = "crates/zeph-a2a", version = "0.11.3" } -zeph-channels = { path = "crates/zeph-channels", version = "0.11.3" } -zeph-core = { path = "crates/zeph-core", version = "0.11.3" } -zeph-gateway = { path = "crates/zeph-gateway", version = "0.11.3" } -zeph-index = { path = "crates/zeph-index", version = "0.11.3" } -zeph-llm = { path = "crates/zeph-llm", version = "0.11.3" } -zeph-mcp = { path = "crates/zeph-mcp", version = "0.11.3" } -zeph-memory = { path = "crates/zeph-memory", version = "0.11.3" } -zeph-scheduler = { path = "crates/zeph-scheduler", version = "0.11.3" } -zeph-skills = { path = "crates/zeph-skills", version = "0.11.3" } -zeph-tools = { path = "crates/zeph-tools", version = "0.11.3" } -zeph-tui = { path = "crates/zeph-tui", version = "0.11.3" } +zeph-a2a = { path = "crates/zeph-a2a", version = "0.11.4" } +zeph-channels = { path = "crates/zeph-channels", version = "0.11.4" } +zeph-core = { path = "crates/zeph-core", version = "0.11.4" } +zeph-gateway = { path = "crates/zeph-gateway", version = "0.11.4" } +zeph-index = { path = "crates/zeph-index", version = "0.11.4" } +zeph-llm = { path = "crates/zeph-llm", version = "0.11.4" } +zeph-mcp = { path = "crates/zeph-mcp", version = "0.11.4" } +zeph-memory = { path = "crates/zeph-memory", version = "0.11.4" } +zeph-scheduler = { path = "crates/zeph-scheduler", version = "0.11.4" } +zeph-skills = { path = "crates/zeph-skills", version = "0.11.4" } +zeph-tools = { path = "crates/zeph-tools", version = "0.11.4" } +zeph-tui = { path = "crates/zeph-tui", version = "0.11.4" } [workspace.lints.clippy] all = "warn" diff --git a/README.md b/README.md index 8f1420e..a994011 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ Single binary. Minimal hardware. Maximum context efficiency.
Every token counts — Zeph makes sure none are wasted. + [![Crates.io](https://img.shields.io/crates/v/zeph)](https://crates.io/crates/zeph) + [![docs.rs](https://img.shields.io/docsrs/zeph)](https://docs.rs/zeph) [![CI](https://img.shields.io/github/actions/workflow/status/bug-ops/zeph/ci.yml?branch=main&label=CI)](https://github.com/bug-ops/zeph/actions) [![codecov](https://codecov.io/gh/bug-ops/zeph/graph/badge.svg?token=S5O0GR9U6G)](https://codecov.io/gh/bug-ops/zeph) [![Trivy](https://img.shields.io/badge/Trivy-0%20CVEs-success)](https://github.com/bug-ops/zeph/security) diff --git a/crates/zeph-a2a/README.md b/crates/zeph-a2a/README.md index 43a57d0..922ec05 100644 --- a/crates/zeph-a2a/README.md +++ b/crates/zeph-a2a/README.md @@ -1,6 +1,11 @@ # zeph-a2a -A2A protocol client and server for agent-to-agent communication. +[![Crates.io](https://img.shields.io/crates/v/zeph-a2a)](https://crates.io/crates/zeph-a2a) +[![docs.rs](https://img.shields.io/docsrs/zeph-a2a)](https://docs.rs/zeph-a2a) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE) +[![MSRV](https://img.shields.io/badge/MSRV-1.88-blue)](https://www.rust-lang.org) + +A2A protocol client and server with agent discovery for Zeph. ## Overview @@ -16,11 +21,10 @@ Implements the Agent-to-Agent (A2A) protocol over JSON-RPC 2.0, enabling Zeph to - **types** — shared protocol types (Task, Message, Artifact, etc.) - **error** — `A2aError` error types -## Usage +## Installation -```toml -# Cargo.toml (workspace root) -zeph-a2a = { path = "crates/zeph-a2a" } +```bash +cargo add zeph-a2a ``` Enabled via the `a2a` feature flag on the root `zeph` crate. diff --git a/crates/zeph-channels/README.md b/crates/zeph-channels/README.md index 28b2785..f47ec4d 100644 --- a/crates/zeph-channels/README.md +++ b/crates/zeph-channels/README.md @@ -1,6 +1,11 @@ # zeph-channels -Channel implementations for the Zeph agent. +[![Crates.io](https://img.shields.io/crates/v/zeph-channels)](https://crates.io/crates/zeph-channels) +[![docs.rs](https://img.shields.io/docsrs/zeph-channels)](https://docs.rs/zeph-channels) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE) +[![MSRV](https://img.shields.io/badge/MSRV-1.88-blue)](https://www.rust-lang.org) + +Multi-channel I/O adapters (CLI, Telegram, Discord, Slack) for Zeph. ## Overview @@ -20,11 +25,10 @@ Implements I/O channel adapters that connect the agent to different frontends. S **Re-exports:** `AnyChannel`, `CliChannel`, `ChannelError` -## Usage +## Installation -```toml -[dependencies] -zeph-channels = { path = "../zeph-channels" } +```bash +cargo add zeph-channels ``` ## License diff --git a/crates/zeph-core/README.md b/crates/zeph-core/README.md index e4c7286..e6c111c 100644 --- a/crates/zeph-core/README.md +++ b/crates/zeph-core/README.md @@ -1,6 +1,11 @@ # zeph-core -Agent loop, configuration loading, and context builder. +[![Crates.io](https://img.shields.io/crates/v/zeph-core)](https://crates.io/crates/zeph-core) +[![docs.rs](https://img.shields.io/docsrs/zeph-core)](https://docs.rs/zeph-core) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE) +[![MSRV](https://img.shields.io/badge/MSRV-1.88-blue)](https://www.rust-lang.org) + +Core agent loop, configuration, context builder, metrics, and vault for Zeph. ## Overview @@ -49,11 +54,10 @@ auto_update_check = true # set to false to disable update notifications Set `ZEPH_AUTO_UPDATE_CHECK=false` to disable without changing the config file. -## Usage +## Installation -```toml -[dependencies] -zeph-core = { path = "../zeph-core" } +```bash +cargo add zeph-core ``` ## License diff --git a/crates/zeph-gateway/README.md b/crates/zeph-gateway/README.md index a864b78..bed0241 100644 --- a/crates/zeph-gateway/README.md +++ b/crates/zeph-gateway/README.md @@ -1,6 +1,11 @@ # zeph-gateway -HTTP gateway for webhook ingestion with bearer auth and health endpoint. +[![Crates.io](https://img.shields.io/crates/v/zeph-gateway)](https://crates.io/crates/zeph-gateway) +[![docs.rs](https://img.shields.io/docsrs/zeph-gateway)](https://docs.rs/zeph-gateway) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE) +[![MSRV](https://img.shields.io/badge/MSRV-1.88-blue)](https://www.rust-lang.org) + +HTTP gateway for webhook ingestion with bearer auth for Zeph. ## Overview @@ -13,11 +18,10 @@ Exposes an axum 0.8 HTTP server that accepts incoming webhooks, validates bearer - **router** — axum router construction with auth middleware - **error** — `GatewayError` error types -## Usage +## Installation -```toml -# Cargo.toml (workspace root) -zeph-gateway = { path = "crates/zeph-gateway" } +```bash +cargo add zeph-gateway ``` Enabled via the `gateway` feature flag on the root `zeph` crate. diff --git a/crates/zeph-index/README.md b/crates/zeph-index/README.md index 56318bb..7225142 100644 --- a/crates/zeph-index/README.md +++ b/crates/zeph-index/README.md @@ -1,6 +1,11 @@ # zeph-index -AST-based code indexing, semantic retrieval, and repo map generation. +[![Crates.io](https://img.shields.io/crates/v/zeph-index)](https://crates.io/crates/zeph-index) +[![docs.rs](https://img.shields.io/docsrs/zeph-index)](https://docs.rs/zeph-index) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE) +[![MSRV](https://img.shields.io/badge/MSRV-1.88-blue)](https://www.rust-lang.org) + +AST-based code indexing and semantic retrieval for Zeph. ## Overview @@ -15,11 +20,10 @@ Parses source files with tree-sitter to extract symbols, chunks them for embeddi - **watcher** — filesystem watcher for incremental re-indexing - **error** — `IndexError` error types -## Usage +## Installation -```toml -# Cargo.toml (workspace root) -zeph-index = { path = "crates/zeph-index" } +```bash +cargo add zeph-index ``` Enabled via the `index` feature flag on the root `zeph` crate. diff --git a/crates/zeph-llm/README.md b/crates/zeph-llm/README.md index 881061c..031cd24 100644 --- a/crates/zeph-llm/README.md +++ b/crates/zeph-llm/README.md @@ -1,6 +1,11 @@ # zeph-llm -LLM provider abstraction and backend implementations. +[![Crates.io](https://img.shields.io/crates/v/zeph-llm)](https://crates.io/crates/zeph-llm) +[![docs.rs](https://img.shields.io/docsrs/zeph-llm)](https://docs.rs/zeph-llm) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE) +[![MSRV](https://img.shields.io/badge/MSRV-1.88-blue)](https://www.rust-lang.org) + +LLM provider abstraction with Ollama, Claude, OpenAI, and Candle backends. ## Overview @@ -28,11 +33,10 @@ Defines the `LlmProvider` trait and ships concrete backends for Ollama, Claude, **Re-exports:** `LlmProvider`, `LlmError` -## Usage +## Installation -```toml -[dependencies] -zeph-llm = { path = "../zeph-llm" } +```bash +cargo add zeph-llm ``` ## License diff --git a/crates/zeph-mcp/README.md b/crates/zeph-mcp/README.md index eac8fde..3651383 100644 --- a/crates/zeph-mcp/README.md +++ b/crates/zeph-mcp/README.md @@ -1,6 +1,11 @@ # zeph-mcp -MCP client lifecycle, tool discovery, and execution. +[![Crates.io](https://img.shields.io/crates/v/zeph-mcp)](https://crates.io/crates/zeph-mcp) +[![docs.rs](https://img.shields.io/docsrs/zeph-mcp)](https://docs.rs/zeph-mcp) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE) +[![MSRV](https://img.shields.io/badge/MSRV-1.88-blue)](https://www.rust-lang.org) + +MCP client with multi-server lifecycle and Qdrant tool registry for Zeph. ## Overview @@ -16,11 +21,10 @@ Implements the Model Context Protocol client for Zeph, managing connections to m - **prompt** — MCP prompt template support - **error** — `McpError` error types -## Usage +## Installation -```toml -# Cargo.toml (workspace root) -zeph-mcp = { path = "crates/zeph-mcp" } +```bash +cargo add zeph-mcp ``` ## License diff --git a/crates/zeph-memory/README.md b/crates/zeph-memory/README.md index 781b457..e30cc1a 100644 --- a/crates/zeph-memory/README.md +++ b/crates/zeph-memory/README.md @@ -1,6 +1,11 @@ # zeph-memory -SQLite-backed conversation persistence with Qdrant vector search. +[![Crates.io](https://img.shields.io/crates/v/zeph-memory)](https://crates.io/crates/zeph-memory) +[![docs.rs](https://img.shields.io/docsrs/zeph-memory)](https://docs.rs/zeph-memory) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE) +[![MSRV](https://img.shields.io/badge/MSRV-1.88-blue)](https://www.rust-lang.org) + +Semantic memory with SQLite and Qdrant for Zeph agent. ## Overview @@ -36,14 +41,13 @@ Includes a document ingestion subsystem for loading, chunking, and storing user | `pdf` | PDF document loading via `pdf-extract` | | `mock` | In-memory `VectorStore` implementation for testing | -## Usage +## Installation -```toml -[dependencies] -zeph-memory = { path = "../zeph-memory" } +```bash +cargo add zeph-memory # With PDF support -zeph-memory = { path = "../zeph-memory", features = ["pdf"] } +cargo add zeph-memory --features pdf ``` ## License diff --git a/crates/zeph-scheduler/README.md b/crates/zeph-scheduler/README.md index 315fe7f..cde4414 100644 --- a/crates/zeph-scheduler/README.md +++ b/crates/zeph-scheduler/README.md @@ -1,6 +1,11 @@ # zeph-scheduler -Cron-based periodic task scheduler with SQLite persistence. +[![Crates.io](https://img.shields.io/crates/v/zeph-scheduler)](https://crates.io/crates/zeph-scheduler) +[![docs.rs](https://img.shields.io/docsrs/zeph-scheduler)](https://docs.rs/zeph-scheduler) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE) +[![MSRV](https://img.shields.io/badge/MSRV-1.88-blue)](https://www.rust-lang.org) + +Cron-based periodic task scheduler with SQLite persistence for Zeph. ## Overview @@ -47,17 +52,16 @@ scheduler.register_handler(&TaskKind::UpdateCheck, Box::new(handler)); Notification format sent via the channel: ``` -New version available: v0.12.0 (current: v0.11.3). +New version available: v0.12.0 (current: v0.11.4). Update: https://github.com/bug-ops/zeph/releases/tag/v0.12.0 ``` Behaviour on error (network failure, non-2xx response, oversized body, parse error, invalid semver) — logs a `warn` message and returns `Ok(())`. The check is best-effort and never crashes the agent. -## Usage +## Installation -```toml -# Cargo.toml (workspace root) -zeph-scheduler = { path = "crates/zeph-scheduler" } +```bash +cargo add zeph-scheduler ``` Enabled via the `scheduler` feature flag on the root `zeph` crate. diff --git a/crates/zeph-skills/README.md b/crates/zeph-skills/README.md index 64c641c..baad07d 100644 --- a/crates/zeph-skills/README.md +++ b/crates/zeph-skills/README.md @@ -1,6 +1,11 @@ # zeph-skills -SKILL.md loader, skill registry, skill manager, and prompt formatter. +[![Crates.io](https://img.shields.io/crates/v/zeph-skills)](https://crates.io/crates/zeph-skills) +[![docs.rs](https://img.shields.io/docsrs/zeph-skills)](https://docs.rs/zeph-skills) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE) +[![MSRV](https://img.shields.io/badge/MSRV-1.88-blue)](https://www.rust-lang.org) + +SKILL.md parser, registry, embedding matcher, and hot-reload for Zeph. ## Overview @@ -22,11 +27,10 @@ Parses SKILL.md files (YAML frontmatter + markdown body) from the `skills/` dire **Re-exports:** `SkillError`, `SkillTrust`, `TrustLevel`, `compute_skill_hash` -## Usage +## Installation -```toml -[dependencies] -zeph-skills = { path = "../zeph-skills" } +```bash +cargo add zeph-skills ``` ## License diff --git a/crates/zeph-tools/README.md b/crates/zeph-tools/README.md index 0789983..0d6fcb7 100644 --- a/crates/zeph-tools/README.md +++ b/crates/zeph-tools/README.md @@ -1,6 +1,11 @@ # zeph-tools -Tool execution abstraction and shell backend. +[![Crates.io](https://img.shields.io/crates/v/zeph-tools)](https://crates.io/crates/zeph-tools) +[![docs.rs](https://img.shields.io/docsrs/zeph-tools)](https://docs.rs/zeph-tools) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE) +[![MSRV](https://img.shields.io/badge/MSRV-1.88-blue)](https://www.rust-lang.org) + +Tool executor trait with shell, web scrape, and composite executors for Zeph. ## Overview @@ -26,11 +31,10 @@ Defines the `ToolExecutor` trait for sandboxed tool invocation and ships concret **Re-exports:** `CompositeExecutor`, `AuditLogger`, `AnomalyDetector` -## Usage +## Installation -```toml -[dependencies] -zeph-tools = { path = "../zeph-tools" } +```bash +cargo add zeph-tools ``` ## License diff --git a/crates/zeph-tui/README.md b/crates/zeph-tui/README.md index 9a4036b..0fd278c 100644 --- a/crates/zeph-tui/README.md +++ b/crates/zeph-tui/README.md @@ -1,6 +1,11 @@ # zeph-tui -ratatui-based TUI dashboard with real-time agent metrics. +[![Crates.io](https://img.shields.io/crates/v/zeph-tui)](https://crates.io/crates/zeph-tui) +[![docs.rs](https://img.shields.io/docsrs/zeph-tui)](https://docs.rs/zeph-tui) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE) +[![MSRV](https://img.shields.io/badge/MSRV-1.88-blue)](https://www.rust-lang.org) + +Ratatui-based TUI dashboard with real-time metrics for Zeph. ## Overview @@ -21,11 +26,10 @@ Provides a terminal UI for monitoring the Zeph agent in real time. Built on rata - **widgets** — reusable ratatui widget components - **error** — `TuiError` typed error enum (Io, Channel) -## Usage +## Installation -```toml -# Cargo.toml (workspace root) -zeph-tui = { path = "crates/zeph-tui" } +```bash +cargo add zeph-tui ``` Enabled via the `tui` feature flag on the root `zeph` crate. diff --git a/crates/zeph-tui/src/widgets/snapshots/zeph_tui__widgets__splash__tests__splash_default.snap b/crates/zeph-tui/src/widgets/snapshots/zeph_tui__widgets__splash__tests__splash_default.snap index f189548..c76ce3b 100644 --- a/crates/zeph-tui/src/widgets/snapshots/zeph_tui__widgets__splash__tests__splash_default.snap +++ b/crates/zeph-tui/src/widgets/snapshots/zeph_tui__widgets__splash__tests__splash_default.snap @@ -14,7 +14,7 @@ expression: output │ ███████╗███████╗██║ ██║ ██║ │ │ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═╝ │ │ │ -│ v0.11.3 │ +│ v0.11.4 │ │ │ │ Type a message to start. │ │ │ diff --git a/docs/src/advanced/skill-trust.md b/docs/src/advanced/skill-trust.md index adc59f4..d56e34b 100644 --- a/docs/src/advanced/skill-trust.md +++ b/docs/src/advanced/skill-trust.md @@ -28,6 +28,10 @@ Quarantined skill bodies are also wrapped with a structural prefix in the system It has restricted tool access (no bash, file_write, web_scrape). ``` +## Body Sanitization + +Skill bodies from non-`Trusted` sources are sanitized before prompt injection. XML-like structural tags (e.g., ``, ``) are escaped to prevent prompt boundary confusion. This is applied automatically — no configuration required. + ## Anomaly Detection An `AnomalyDetector` tracks tool execution outcomes in a sliding window (default: 10 events). If the error/blocked ratio exceeds configurable thresholds, an anomaly is reported: diff --git a/docs/src/advanced/tui.md b/docs/src/advanced/tui.md index 2e55529..55a1dfd 100644 --- a/docs/src/advanced/tui.md +++ b/docs/src/advanced/tui.md @@ -29,7 +29,7 @@ When using `--connect`, the TUI renders token-by-token streaming from the remote ```text +-------------------------------------------------------------+ -| Zeph v0.11.3 | Provider: orchestrator | Model: claude-son... | +| Zeph v0.11.4 | Provider: orchestrator | Model: claude-son...| +----------------------------------------+--------------------+ | | Skills (3/15) | | | - setup-guide | @@ -37,13 +37,13 @@ When using `--connect`, the TUI renders token-by-token streaming from the remote | | | | [user] Can you check my code? +--------------------+ | | Memory | -| [zeph] Sure, let me look at | SQLite: 142 msgs | +| [zeph] Sure, let me look at | SQLite: 142 msgs | | the code structure... | Qdrant: connected | | ▲+--------------------+ +----------------------------------------+--------------------+ | You: write a rust function for fibon_ | +-------------------------------------------------------------+ -| [Insert] | Skills: 3 | Tokens: 4.2k | Qdrant: OK | 2m 15s | +| [Insert] | Skills: 3 | Tokens: 4.2k | Qdrant: OK | 2m 15s | +-------------------------------------------------------------+ ``` diff --git a/docs/src/architecture/crates.md b/docs/src/architecture/crates.md index 5d5d24d..027db8b 100644 --- a/docs/src/architecture/crates.md +++ b/docs/src/architecture/crates.md @@ -46,7 +46,9 @@ SKILL.md loader, skill registry, and prompt formatter. - `QdrantSkillMatcher` — persistent embeddings with BLAKE3 delta sync - `format_skills_prompt()` — assembles prompt with OS-filtered resources - `format_skills_catalog()` — description-only entries for non-matched skills -- `resource.rs` — `discover_resources()` + `load_resource()` with path traversal protection and canonical path validation +- `resource.rs` — `discover_resources()` + `load_resource()` with path traversal protection and canonical path validation; lazy resource loading (resources resolved on first activation, not at startup) +- File reference validation — local links in skill bodies are checked against the skill directory; broken references and path traversal attempts are rejected at load time +- `sanitize_skill_body()` — escapes XML-like structural tags in untrusted (non-`Trusted`) skill bodies before prompt injection, preventing prompt boundary confusion - Filesystem watcher for hot-reload (500ms debounce) ## zeph-memory diff --git a/docs/src/changelog.md b/docs/src/changelog.md index e8bbd9b..d4cc6c3 100644 --- a/docs/src/changelog.md +++ b/docs/src/changelog.md @@ -6,6 +6,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +## [0.11.4] - 2026-02-21 + +### Added +- crates.io publishing metadata (description, readme, homepage, keywords, categories) for all workspace crates (#702) +- Skill file reference validation and untrusted body sanitization (#691) +- Lazy resource loading per spec progressive disclosure (#692) +- `x-requires-secrets` vendor extension rename (#693) +- agentskills.io spec alignment for SKILL.md parser (#690) +- `SkillManager` for installing, removing, verifying skills from git URLs or local paths +- Custom vault secrets support with `list_keys()` on `VaultProvider` trait (#685) + +### Changed +- `requires-secrets` renamed to `x-requires-secrets` — breaking change (#693) +- `allowed-tools` now uses space-separated values per spec — breaking change (#690) +- Skill resource files use lazy loading instead of eager injection — breaking change (#692) + ## [0.11.3] - 2026-02-20 ### Added @@ -1053,7 +1069,8 @@ let agent = Agent::new(provider, channel, &skills_prompt, executor); - Agent calls channel.send_typing() before each LLM request - Agent::run() uses tokio::select! to race channel messages against shutdown signal -[Unreleased]: https://github.com/bug-ops/zeph/compare/v0.11.3...HEAD +[Unreleased]: https://github.com/bug-ops/zeph/compare/v0.11.4...HEAD +[0.11.4]: https://github.com/bug-ops/zeph/compare/v0.11.3...v0.11.4 [0.11.3]: https://github.com/bug-ops/zeph/compare/v0.11.2...v0.11.3 [0.11.2]: https://github.com/bug-ops/zeph/compare/v0.11.1...v0.11.2 [0.11.1]: https://github.com/bug-ops/zeph/compare/v0.11.0...v0.11.1 diff --git a/docs/src/getting-started/installation.md b/docs/src/getting-started/installation.md index 7acde2f..f6d619c 100644 --- a/docs/src/getting-started/installation.md +++ b/docs/src/getting-started/installation.md @@ -19,7 +19,7 @@ ZEPH_INSTALL_DIR=/usr/local/bin curl -fsSL https://github.com/bug-ops/zeph/relea Install a specific version: ```bash -curl -fsSL https://github.com/bug-ops/zeph/releases/latest/download/install.sh | sh -s -- --version v0.11.3 +curl -fsSL https://github.com/bug-ops/zeph/releases/latest/download/install.sh | sh -s -- --version v0.11.4 ``` After installation, run the configuration wizard: diff --git a/docs/src/guides/custom-skills.md b/docs/src/guides/custom-skills.md index e93ebc9..5327fe6 100644 --- a/docs/src/guides/custom-skills.md +++ b/docs/src/guides/custom-skills.md @@ -85,7 +85,9 @@ skills/ └── windows.md ``` -Resources in `scripts/`, `references/`, and `assets/` are loaded on demand. OS-specific files (`linux.md`, `macos.md`, `windows.md`) are filtered by platform automatically. +Resources in `scripts/`, `references/`, and `assets/` are loaded lazily on first skill activation (not at startup). OS-specific files (`linux.md`, `macos.md`, `windows.md`) are filtered by platform automatically. + +Local file references in the skill body (e.g., `[see config](references/config.md)`) are validated at load time. Broken links and path traversal attempts (`../../../etc/passwd`) are rejected. ## Configuration diff --git a/src/init.rs b/src/init.rs index 1fc801b..d4f17a3 100644 --- a/src/init.rs +++ b/src/init.rs @@ -99,7 +99,7 @@ fn prompt_provider_config(label: &str) -> anyhow::Result { ]; let sel = Select::new() .with_prompt(format!("{label} provider")) - .items(&sub_providers) + .items(sub_providers) .default(0) .interact()?; @@ -201,7 +201,7 @@ fn step_llm_provider(state: &mut WizardState, use_age: bool) -> anyhow::Result<( ]; let selection = Select::new() .with_prompt("Select LLM provider") - .items(&providers) + .items(providers) .default(0) .interact()?; @@ -331,7 +331,7 @@ fn step_channel(state: &mut WizardState) -> anyhow::Result<()> { let channels = ["CLI only (default)", "Telegram", "Discord", "Slack"]; let selection = Select::new() .with_prompt("Select communication channel") - .items(&channels) + .items(channels) .default(0) .interact()?; @@ -396,7 +396,7 @@ fn step_vault(state: &mut WizardState) -> anyhow::Result<()> { let backends = ["env (environment variables)", "age (encrypted file)"]; let selection = Select::new() .with_prompt("Select secrets backend") - .items(&backends) + .items(backends) .default(0) .interact()?;