From 11536cb02a8bdf51182343bf3c0ec60a9fc7ee88 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Fri, 18 Sep 2026 21:32:11 +0300 Subject: [PATCH 1/4] chore(wiki): update subproject commit Update the wiki subproject to point to a new commit, incorporating the latest changes from the upstream repository. Auto-committed-on: dragonfly Co-authored-by: Medulla --- wiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wiki b/wiki index cbd58d14..38257669 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit cbd58d14999804d907eb4c6fb9daa60b13f29593 +Subproject commit 382576698e49f51c3b816b793bab2667ee37a61f From 2e4ecd115ae8c4d850bb3dd8de60df3965a1cc94 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Sat, 19 Sep 2026 22:00:04 +0300 Subject: [PATCH 2/4] fix: resolve vendored dependency paths Co-authored-by: Medulla --- .gitmodules | 12 + Cargo.lock | 437 ++++++++---------- Cargo.toml | 11 +- crates/tinyhivemind/Cargo.toml | 2 +- crates/tinyhivemind/examples/desk/chat.rs | 6 +- .../tinyhivemind/examples/desk/chat/test.rs | 6 +- examples/openhuman/Cargo.lock | 341 +++++++------- examples/openhuman/Cargo.toml | 2 +- vendor/openhuman | 1 + vendor/tinyinference | 1 + vendor/tinyjevclient | 1 + vendor/tinytools | 1 + 12 files changed, 401 insertions(+), 420 deletions(-) create mode 160000 vendor/openhuman create mode 160000 vendor/tinyinference create mode 160000 vendor/tinyjevclient create mode 160000 vendor/tinytools diff --git a/.gitmodules b/.gitmodules index ecd2c9b8..09f176d0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,15 @@ [submodule "wiki"] path = wiki url = https://github.com/tinyhumansai/tinyhivemind.wiki.git +[submodule "vendor/openhuman"] + path = vendor/openhuman + url = https://github.com/tinyhumansai/openhuman.git +[submodule "vendor/tinyinference"] + path = vendor/tinyinference + url = https://github.com/tinyhumansai/tinyinference.git +[submodule "vendor/tinytools"] + path = vendor/tinytools + url = https://github.com/tinyhumansai/tinytools.git +[submodule "vendor/tinyjevclient"] + path = vendor/tinyjevclient + url = https://github.com/tinyhumansai/tinyjevclient.git diff --git a/Cargo.lock b/Cargo.lock index 28daec11..a96ad805 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -96,7 +96,7 @@ checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -131,9 +131,9 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bitflags" -version = "2.13.1" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "blake2" @@ -192,9 +192,9 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cc" -version = "1.4.5" +version = "1.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "005ec2760ca554fae18df7a11195552ec576cd665632a881bc011d5bb2fd4d80" +checksum = "54413ede23c2daf518f35156dfde027feb2374004d63bd497f983c8db9c0e313" dependencies = [ "find-msvc-tools", "shlex", @@ -202,9 +202,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "cfg_aliases" @@ -320,12 +320,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "core_detect" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f8f80099a98041a3d1622845c271458a2d73e688351bf3cb999266764b81d48" - [[package]] name = "cpufeatures" version = "0.2.17" @@ -534,7 +528,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -574,21 +568,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "encoding_rs" -version = "0.8.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5ef0006ac9ab233c38522f5ae99cae3625151de8f706cacee1cba4b8e2832a" -dependencies = [ - "cfg-if", - "core_detect", - "multiversion", - "multiversion_no_op", - "rustversion", - "scopeguard", - "simdutf8", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -602,7 +581,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]] @@ -641,9 +620,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" +checksum = "ef25905e51abafe4dcea6c15fec58c57b601cdbd0ee53d22ea1d3016c587d39b" [[package]] name = "flate2" @@ -758,7 +737,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -1061,11 +1040,9 @@ dependencies = [ "percent-encoding", "pin-project-lite", "socket2", - "system-configuration", "tokio", "tower-service", "tracing", - "windows-registry", ] [[package]] @@ -1324,9 +1301,9 @@ checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "lru-slab" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +checksum = "4050469837a6ff301cd14c1f8f24f88549e6d548f24f64e2148eb0f72cebc51f" [[package]] name = "matchers" @@ -1386,49 +1363,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "motosan-ai-oauth" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244943168db97b6874d3a88f5fff7029ab002d84c9c572e3bfe6e8cd92af0bae" -dependencies = [ - "base64 0.22.1", - "percent-encoding", - "rand 0.9.5", - "reqwest", - "serde", - "sha2 0.10.9", - "thiserror 2.0.20", - "tokio", -] - -[[package]] -name = "multiversion" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ca4bea16ffc3f443cf7d866912118196bfef4c6a1556ca00f9f9b00bb43f7c" -dependencies = [ - "multiversion-macros", -] - -[[package]] -name = "multiversion-macros" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d416831a7317ef4b08bee00b69cbbb9c8763da7959a7026244d6266869f9c83" -dependencies = [ - "proc-macro2", - "quote", - "rustversion", - "syn 3.0.4", -] - -[[package]] -name = "multiversion_no_op" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743fb55ba31b18fb1ecef6bdc9aa2743314978ac084044301a7eee33fb99a20d" - [[package]] name = "native-tls" version = "0.2.18" @@ -1465,16 +1399,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -1508,7 +1432,6 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openhuman" version = "0.63.29" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "aes-gcm", "aho-corasick", @@ -1523,7 +1446,7 @@ dependencies = [ "chrono-tz", "cron", "directories", - "dirs 5.0.1", + "dirs 6.0.0", "dotenvy", "ed25519-dalek", "flate2", @@ -1533,14 +1456,12 @@ dependencies = [ "glob", "hex", "hkdf", - "hmac", "hostname", "iana-time-zone", "keyring", "libc", "log", - "motosan-ai-oauth", - "nu-ansi-term 0.46.0", + "nu-ansi-term", "once_cell", "openhuman-rpc", "parking_lot", @@ -1559,16 +1480,21 @@ dependencies = [ "tar", "tempfile", "thiserror 2.0.20", + "tinyagents-definition", "tinyagents-graph", "tinyagents-harness", - "tinyagents-language", + "tinyagents-orchestration", "tinyagents-registry", "tinyagents-session", "tinybus", "tinychannels-bus", "tinyconnectors-bus", - "tinyhumans-sdk", - "tinyinference 0.2.1 (git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128)", + "tinyinference-core", + "tinyinference-embeddings", + "tinyinference-llm", + "tinyinference-local", + "tinyinference-providers", + "tinyinference-voice", "tinyjuice-bus", "tinymcp", "tinymcp-bus", @@ -1576,7 +1502,9 @@ dependencies = [ "tinymemory-bus", "tinymemory-sources", "tinyruntime-bus", - "tinytools 0.1.0 (git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128)", + "tinyskills", + "tinytools", + "tinytools-agent", "tokio", "tokio-stream", "tokio-tungstenite", @@ -1587,7 +1515,6 @@ dependencies = [ "url", "urlencoding", "uuid", - "wait-timeout", "walkdir", "windows-sys 0.61.2", "x25519-dalek", @@ -1598,7 +1525,6 @@ dependencies = [ [[package]] name = "openhuman-embed" version = "0.63.29" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "anyhow", "log", @@ -1615,7 +1541,6 @@ dependencies = [ [[package]] name = "openhuman-rpc" version = "0.63.29" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "serde", "serde_json", @@ -1670,12 +1595,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "parking_lot" version = "0.12.5" @@ -1808,9 +1727,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" +checksum = "4051e23e9185c255a7e33ef59cdbca87a22d359052eecd22fc6b901fb37d9d11" dependencies = [ "bytes", "cfg_aliases", @@ -1828,9 +1747,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.17" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04759210543be93709136e28212294a659ef5001836ff4eab4d663e4529bba83" +checksum = "a9746dbde176634f4f2f1faf2404e30a31b2bc1e9cafb5329c95d8177a18c9fc" dependencies = [ "bytes", "getrandom 0.4.3", @@ -1994,7 +1913,7 @@ checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -2034,7 +1953,6 @@ checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64 0.22.1", "bytes", - "encoding_rs", "futures-channel", "futures-core", "futures-util", @@ -2048,7 +1966,6 @@ dependencies = [ "hyper-util", "js-sys", "log", - "mime", "mime_guess", "native-tls", "percent-encoding", @@ -2139,7 +2056,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2229,7 +2146,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -2307,7 +2224,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -2318,7 +2235,7 @@ checksum = "f852137cce035d6a4df67ccce505ff6b3e9fd3a10e3e52b24dc71e650bb1a9bd" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -2342,7 +2259,7 @@ checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -2452,12 +2369,6 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - [[package]] name = "siphasher" version = "1.0.3" @@ -2472,9 +2383,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9be42f50aa861c555654aa3a37f52f4b1074bacf4e48fe0ef7fa584e80f1f0f" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" [[package]] name = "socket2" @@ -2533,9 +2444,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.4" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -2553,13 +2464,13 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", ] [[package]] @@ -2575,27 +2486,6 @@ dependencies = [ "windows", ] -[[package]] -name = "system-configuration" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" -dependencies = [ - "bitflags", - "core-foundation 0.9.4", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "tar" version = "0.4.46" @@ -2617,7 +2507,7 @@ dependencies = [ "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2657,7 +2547,7 @@ checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -2669,11 +2559,19 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "tinyagents-definition" +version = "2.1.2" +dependencies = [ + "async-trait", + "serde", +] + [[package]] name = "tinyagents-graph" version = "2.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ + "anyhow", "async-trait", "chrono", "futures", @@ -2685,63 +2583,91 @@ dependencies = [ "tinyagents-harness", "tinyagents-language", "tinyagents-tracing", - "tinyinference 0.2.1 (git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128)", + "tinyinference-llm", + "tinytools", "tokio", ] [[package]] name = "tinyagents-harness" version = "2.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ + "anyhow", "async-trait", "base64 0.22.1", "bytes", "chrono", + "dirs 5.0.1", "flate2", "futures", + "log", "regex", "reqwest", "rusqlite", "serde", "serde_json", "sha2 0.11.0", + "tempfile", "thiserror 2.0.20", + "tinyagents-definition", "tinyagents-tracing", - "tinyinference 0.2.1 (git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128)", - "tinytools 0.1.0 (git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128)", + "tinyinference-embeddings", + "tinyinference-llm", + "tinytools", + "tinytools-agent", "tokio", + "uuid", + "wait-timeout", ] [[package]] name = "tinyagents-language" version = "2.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "serde", "serde_json", "tinyagents-harness", ] +[[package]] +name = "tinyagents-orchestration" +version = "2.1.2" +dependencies = [ + "anyhow", + "async-trait", + "chrono", + "parking_lot", + "serde", + "serde_json", + "tinyagents-graph", + "tinyagents-harness", + "tinyagents-session", + "tokio", + "uuid", +] + [[package]] name = "tinyagents-registry" version = "2.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ + "anyhow", "serde", "serde_json", + "tinyagents-definition", "tinyagents-graph", "tinyagents-harness", "tinyagents-language", - "tinyinference 0.2.1 (git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128)", + "tinyinference-llm", + "tinytools", ] [[package]] name = "tinyagents-session" version = "2.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ + "anyhow", "chrono", + "log", "rusqlite", "serde", "serde_json", @@ -2752,12 +2678,10 @@ dependencies = [ [[package]] name = "tinyagents-tracing" version = "2.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" [[package]] name = "tinybus" version = "0.1.1" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "async-trait", "serde", @@ -2771,7 +2695,6 @@ dependencies = [ [[package]] name = "tinybus-macros" version = "0.1.1" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "proc-macro2", "quote", @@ -2781,7 +2704,6 @@ dependencies = [ [[package]] name = "tinychannels-bus" version = "0.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "anyhow", "async-trait", @@ -2804,7 +2726,6 @@ dependencies = [ [[package]] name = "tinyconnectors-bus" version = "0.10.0" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "serde", "serde_json", @@ -2821,8 +2742,8 @@ dependencies = [ "serde_json", "thiserror 2.0.20", "tinyhivemind-core", - "tinyinference 0.2.1 (git+https://github.com/tinyhumansai/tinyinference?rev=cc8aca484bb995fbab3b7358f0d72ab5056b587c)", - "tinytools 0.1.0 (git+https://github.com/tinyhumansai/tinytools?rev=7dbd5407a5bd6e819acb60154e501ff946f86d3a)", + "tinyinference-llm", + "tinytools", "tokio", ] @@ -2888,59 +2809,116 @@ dependencies = [ ] [[package]] -name = "tinyhumans-sdk" -version = "0.1.0" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" +name = "tinyinference-core" +version = "0.3.0" dependencies = [ - "base64 0.22.1", - "futures", - "percent-encoding", + "anyhow", + "httpdate", + "url", +] + +[[package]] +name = "tinyinference-embeddings" +version = "0.3.0" +dependencies = [ + "async-trait", + "once_cell", + "regex", "reqwest", "serde", "serde_json", "thiserror 2.0.20", + "tinyinference-core", "tokio", + "tracing", "url", ] [[package]] -name = "tinyinference" -version = "0.2.1" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" +name = "tinyinference-llm" +version = "0.3.0" dependencies = [ "async-trait", "bytes", "futures", - "httpdate", "reqwest", "serde", "serde_json", "sha2 0.11.0", "thiserror 2.0.20", + "tinyinference-core", "tokio", + "tracing", + "url", ] [[package]] -name = "tinyinference" -version = "0.2.1" -source = "git+https://github.com/tinyhumansai/tinyinference?rev=cc8aca484bb995fbab3b7358f0d72ab5056b587c#cc8aca484bb995fbab3b7358f0d72ab5056b587c" +name = "tinyinference-local" +version = "0.3.0" dependencies = [ - "async-trait", + "base64 0.22.1", "bytes", + "flate2", "futures", - "httpdate", + "futures-util", + "hex", + "log", + "once_cell", + "parking_lot", "reqwest", "serde", "serde_json", "sha2 0.11.0", + "sysinfo", + "tar", "thiserror 2.0.20", + "tinyinference-core", + "tinyinference-embeddings", + "tinyinference-llm", "tokio", + "tracing", + "url", + "uuid", + "zip", +] + +[[package]] +name = "tinyinference-providers" +version = "0.3.0" +dependencies = [ + "async-trait", + "base64 0.22.1", + "rand 0.9.5", + "reqwest", + "serde", + "serde_json", + "sha2 0.11.0", + "thiserror 2.0.20", + "tinyinference-core", + "tinyinference-llm", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "tinyinference-voice" +version = "0.3.0" +dependencies = [ + "base64 0.22.1", + "log", + "reqwest", + "serde", + "serde_json", + "tinyinference-core", + "tinyinference-local", + "tokio", + "uuid", ] [[package]] name = "tinyjevclient" version = "0.2.1" -source = "git+https://github.com/tinyhumansai/tinyjevclient?rev=8d116fc2ac9bceecdad9df7a0c72e0f14ee3fea5#8d116fc2ac9bceecdad9df7a0c72e0f14ee3fea5" dependencies = [ "httpdate", "reqwest", @@ -2953,7 +2931,6 @@ dependencies = [ [[package]] name = "tinyjuice-bus" version = "0.2.5" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "serde", ] @@ -2961,7 +2938,6 @@ dependencies = [ [[package]] name = "tinymcp" version = "0.3.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "anyhow", "base64 0.23.1", @@ -2983,7 +2959,6 @@ dependencies = [ [[package]] name = "tinymcp-bus" version = "0.3.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "schemars", "serde", @@ -2993,7 +2968,6 @@ dependencies = [ [[package]] name = "tinymemory-api" version = "0.1.1" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "anyhow", "async-trait", @@ -3007,7 +2981,6 @@ dependencies = [ [[package]] name = "tinymemory-bus" version = "0.1.0" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "anyhow", "chrono", @@ -3021,7 +2994,6 @@ dependencies = [ [[package]] name = "tinymemory-sources" version = "0.1.0" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "anyhow", "async-trait", @@ -3043,12 +3015,25 @@ dependencies = [ [[package]] name = "tinyruntime-bus" version = "0.2.4" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "serde", "serde_json", ] +[[package]] +name = "tinyskills" +version = "0.2.1" +dependencies = [ + "serde", + "serde_json", + "serde_yaml", + "sha2 0.10.9", + "thiserror 2.0.20", + "tokio", + "tracing", + "url", +] + [[package]] name = "tinystr" version = "0.8.4" @@ -3061,8 +3046,7 @@ dependencies = [ [[package]] name = "tinytools" -version = "0.1.0" -source = "git+https://github.com/tinyhumansai/tinytools?rev=7dbd5407a5bd6e819acb60154e501ff946f86d3a#7dbd5407a5bd6e819acb60154e501ff946f86d3a" +version = "0.2.0" dependencies = [ "anyhow", "async-trait", @@ -3071,30 +3055,20 @@ dependencies = [ ] [[package]] -name = "tinytools" -version = "0.1.0" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" +name = "tinytools-agent" +version = "0.2.0" dependencies = [ - "anyhow", - "async-trait", + "regex", "serde", "serde_json", + "tinytools", ] [[package]] name = "tinyvec" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf0ded5c4e56918d8f8a339e1bb67d038d3bc6d144ac407904015ba2e4cde9b" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" @@ -3121,7 +3095,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -3311,7 +3285,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ "matchers", - "nu-ansi-term 0.50.3", + "nu-ansi-term", "once_cell", "regex-automata", "sharded-slab", @@ -3359,9 +3333,9 @@ checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "universal-hash" @@ -3517,7 +3491,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", "wasm-bindgen-shared", ] @@ -3603,7 +3577,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -3697,17 +3671,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-registry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" -dependencies = [ - "windows-link", - "windows-result 0.4.1", - "windows-strings", -] - [[package]] name = "windows-result" version = "0.1.2" @@ -4010,13 +3973,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", "synstructure", ] @@ -4051,13 +4014,13 @@ dependencies = [ [[package]] name = "zerofrom-derive" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", "synstructure", ] @@ -4111,7 +4074,7 @@ checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 72fc333c..bc4b3ee9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ members = ["crates/*"] # `worktrees/` holds `git worktree` checkouts of this same repository; each # contains a full copy of this manifest and every crate under it, so without # this entry cargo walks into them and reports duplicate packages. -exclude = ["worktrees"] +exclude = ["vendor", "worktrees"] # Shared package metadata. A member inherits a field with `field.workspace = # true`, so the version is written in exactly one place and every crate moves @@ -47,7 +47,7 @@ tinyhivemind-typesafe = { path = "crates/tinyhivemind-typesafe" } # Canonical OpenHuman agent handles for the first-class embedding adapter. The # adapter keeps default features off because it only binds already-built agents; # the consuming host chooses the runtime capabilities it enables. -openhuman-embed = { git = "https://github.com/tinyhumansai/openhuman", rev = "93e9938f388f3989b7c0acff3f72007a31bb3128", default-features = false } +openhuman-embed = { path = "vendor/openhuman/crates/openhuman-embed", default-features = false } # Derive macros for the crate-wide error type in `crates/tinyhivemind-core/src/error/`. # Every dependency entry should carry a comment like this one saying why it is # here. @@ -74,13 +74,13 @@ tokio = { version = "1", features = ["macros", "rt", "sync"] } # `tokio` and `futures`, so no library crate may take it — see # docs/adr/0013-a-vendored-crate-is-an-example-dependency.md. A consumer builds # `crates/*` and never the examples, so it never resolves this. -tinyinference = { git = "https://github.com/tinyhumansai/tinyinference", rev = "cc8aca484bb995fbab3b7358f0d72ab5056b587c" } +tinyinference-llm = { path = "vendor/openhuman/vendor/tinyagents/vendor/tinyinference/crates/tinyinference-llm" } # EXAMPLE-ONLY, same terms. The tool vocabulary — `Tool`, `ToolResult`, and the # classifications a host enforces around a call — which the `desk` example # renders `speech::tool_specs()` into, so a host running an agent loop # in-process serves the same surface the MCP server does. It pulls `anyhow`, # which this repository forbids in every crate. -tinytools = { git = "https://github.com/tinyhumansai/tinytools", rev = "7dbd5407a5bd6e819acb60154e501ff946f86d3a" } +tinytools = { path = "vendor/openhuman/vendor/tinyagents/vendor/tinytools/crates/tinytools" } # Needed to implement `tinytools::Tool`, which is async. Example-only, for the # same reason `tinytools` is. async-trait = "0.1" @@ -91,7 +91,8 @@ async-trait = "0.1" anyhow = "1" # EXAMPLE-ONLY. The benchmark's Jev arm uses the native System One client; # library crates keep only provider-neutral fixed-point decision snapshots. -tinyjevclient = { git = "https://github.com/tinyhumansai/tinyjevclient", rev = "8d116fc2ac9bceecdad9df7a0c72e0f14ee3fea5", default-features = false } +tinyjevclient = { path = "vendor/tinyjevclient/crates/tinyjevclient", default-features = false } + # Lints apply to every member that opts in with `[lints] workspace = true`, and # to every target of that member. CI runs clippy with `-D warnings`, so anything diff --git a/crates/tinyhivemind/Cargo.toml b/crates/tinyhivemind/Cargo.toml index d0ea5042..31c4ea77 100644 --- a/crates/tinyhivemind/Cargo.toml +++ b/crates/tinyhivemind/Cargo.toml @@ -32,7 +32,7 @@ tokio = { workspace = true } # ../../docs/adr/0013-a-vendored-crate-is-an-example-dependency.md. anyhow = { workspace = true } async-trait = { workspace = true } -tinyinference = { workspace = true } +tinyinference-llm = { workspace = true } tinytools = { workspace = true } # `cargo test` does not test an example unless the example says so, and the diff --git a/crates/tinyhivemind/examples/desk/chat.rs b/crates/tinyhivemind/examples/desk/chat.rs index c41a293e..7484c45c 100644 --- a/crates/tinyhivemind/examples/desk/chat.rs +++ b/crates/tinyhivemind/examples/desk/chat.rs @@ -17,7 +17,7 @@ use std::time::Duration; -use tinyinference::{ +use tinyinference_llm::{ failure::{ProviderFailureClass, classify_provider_error}, message::Message, model::{ChatModel, ModelRequest}, @@ -145,9 +145,9 @@ impl Chat { /// An error that is not a provider failure — a request this host built wrong, /// a response it could not decode — is never worth retrying, so it classifies /// as non-retryable rather than being guessed at. -fn failure_class(error: &tinyinference::Error) -> ProviderFailureClass { +fn failure_class(error: &tinyinference_llm::Error) -> ProviderFailureClass { match error { - tinyinference::Error::Provider(provider) => classify_provider_error(provider), + tinyinference_llm::Error::Provider(provider) => classify_provider_error(provider), _ => ProviderFailureClass::NonRetryable, } } diff --git a/crates/tinyhivemind/examples/desk/chat/test.rs b/crates/tinyhivemind/examples/desk/chat/test.rs index 9b93ec6b..145d8988 100644 --- a/crates/tinyhivemind/examples/desk/chat/test.rs +++ b/crates/tinyhivemind/examples/desk/chat/test.rs @@ -3,7 +3,7 @@ #![allow(clippy::expect_used, clippy::panic, clippy::unwrap_used)] use super::*; -use tinyinference::{ +use tinyinference_llm::{ model::{ModelRequest as Request, ModelResponse}, providers::MockModel, }; @@ -13,7 +13,7 @@ struct NeverAnswers; #[async_trait::async_trait] impl ChatModel<()> for NeverAnswers { - async fn invoke(&self, (): &(), _: Request) -> tinyinference::Result { + async fn invoke(&self, (): &(), _: Request) -> tinyinference_llm::Result { std::future::pending().await } } @@ -94,7 +94,7 @@ fn only_a_failure_the_provider_called_transient_is_retried() { #[test] fn an_error_this_host_caused_is_never_worth_retrying() { assert_eq!( - failure_class(&tinyinference::Error::Validation("no messages".into())), + failure_class(&tinyinference_llm::Error::Validation("no messages".into())), ProviderFailureClass::NonRetryable, "a request built wrong is built wrong the second time too", ); diff --git a/examples/openhuman/Cargo.lock b/examples/openhuman/Cargo.lock index 174cd513..bb8cb7a9 100644 --- a/examples/openhuman/Cargo.lock +++ b/examples/openhuman/Cargo.lock @@ -202,9 +202,9 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cc" -version = "1.4.6" +version = "1.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" +checksum = "54413ede23c2daf518f35156dfde027feb2374004d63bd497f983c8db9c0e313" dependencies = [ "find-msvc-tools", "shlex", @@ -330,12 +330,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "core_detect" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f8f80099a98041a3d1622845c271458a2d73e688351bf3cb999266764b81d48" - [[package]] name = "cpufeatures" version = "0.2.17" @@ -602,21 +596,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "encoding_rs" -version = "0.8.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5ef0006ac9ab233c38522f5ae99cae3625151de8f706cacee1cba4b8e2832a" -dependencies = [ - "cfg-if", - "core_detect", - "multiversion", - "multiversion_no_op", - "rustversion", - "scopeguard", - "simdutf8", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -669,9 +648,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" +checksum = "ef25905e51abafe4dcea6c15fec58c57b601cdbd0ee53d22ea1d3016c587d39b" [[package]] name = "flate2" @@ -1096,11 +1075,9 @@ dependencies = [ "percent-encoding", "pin-project-lite", "socket2", - "system-configuration", "tokio", "tower-service", "tracing", - "windows-registry", ] [[package]] @@ -1421,49 +1398,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "motosan-ai-oauth" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244943168db97b6874d3a88f5fff7029ab002d84c9c572e3bfe6e8cd92af0bae" -dependencies = [ - "base64 0.22.1", - "percent-encoding", - "rand 0.9.5", - "reqwest", - "serde", - "sha2 0.10.9", - "thiserror 2.0.20", - "tokio", -] - -[[package]] -name = "multiversion" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ca4bea16ffc3f443cf7d866912118196bfef4c6a1556ca00f9f9b00bb43f7c" -dependencies = [ - "multiversion-macros", -] - -[[package]] -name = "multiversion-macros" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d416831a7317ef4b08bee00b69cbbb9c8763da7959a7026244d6266869f9c83" -dependencies = [ - "proc-macro2", - "quote", - "rustversion", - "syn 3.0.6", -] - -[[package]] -name = "multiversion_no_op" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743fb55ba31b18fb1ecef6bdc9aa2743314978ac084044301a7eee33fb99a20d" - [[package]] name = "native-tls" version = "0.2.18" @@ -1500,16 +1434,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -1553,7 +1477,6 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openhuman" version = "0.63.29" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "aes-gcm", "aho-corasick", @@ -1568,7 +1491,7 @@ dependencies = [ "chrono-tz", "cron", "directories", - "dirs 5.0.1", + "dirs 6.0.0", "dotenvy", "ed25519-dalek", "flate2", @@ -1578,14 +1501,12 @@ dependencies = [ "glob", "hex", "hkdf", - "hmac", "hostname", "iana-time-zone", "keyring", "libc", "log", - "motosan-ai-oauth", - "nu-ansi-term 0.46.0", + "nu-ansi-term", "once_cell", "openhuman-rpc", "parking_lot", @@ -1604,16 +1525,21 @@ dependencies = [ "tar", "tempfile", "thiserror 2.0.20", + "tinyagents-definition", "tinyagents-graph", "tinyagents-harness", - "tinyagents-language", + "tinyagents-orchestration", "tinyagents-registry", "tinyagents-session", "tinybus", "tinychannels-bus", "tinyconnectors-bus", - "tinyhumans-sdk", - "tinyinference", + "tinyinference-core", + "tinyinference-embeddings", + "tinyinference-llm", + "tinyinference-local", + "tinyinference-providers", + "tinyinference-voice", "tinyjuice-bus", "tinymcp", "tinymcp-bus", @@ -1621,7 +1547,9 @@ dependencies = [ "tinymemory-bus", "tinymemory-sources", "tinyruntime-bus", + "tinyskills", "tinytools", + "tinytools-agent", "tokio", "tokio-stream", "tokio-tungstenite", @@ -1632,7 +1560,6 @@ dependencies = [ "url", "urlencoding", "uuid", - "wait-timeout", "walkdir", "windows-sys 0.61.2", "x25519-dalek", @@ -1643,7 +1570,6 @@ dependencies = [ [[package]] name = "openhuman-embed" version = "0.63.29" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "anyhow", "log", @@ -1660,7 +1586,6 @@ dependencies = [ [[package]] name = "openhuman-rpc" version = "0.63.29" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "serde", "serde_json", @@ -1715,12 +1640,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "parking_lot" version = "0.12.5" @@ -2079,7 +1998,6 @@ checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64 0.22.1", "bytes", - "encoding_rs", "futures-channel", "futures-core", "futures-util", @@ -2093,7 +2011,6 @@ dependencies = [ "hyper-util", "js-sys", "log", - "mime", "mime_guess", "native-tls", "percent-encoding", @@ -2507,12 +2424,6 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - [[package]] name = "siphasher" version = "1.0.3" @@ -2630,27 +2541,6 @@ dependencies = [ "windows", ] -[[package]] -name = "system-configuration" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" -dependencies = [ - "bitflags", - "core-foundation 0.9.4", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "tar" version = "0.4.46" @@ -2724,11 +2614,19 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "tinyagents-definition" +version = "2.1.2" +dependencies = [ + "async-trait", + "serde", +] + [[package]] name = "tinyagents-graph" version = "2.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ + "anyhow", "async-trait", "chrono", "futures", @@ -2740,63 +2638,91 @@ dependencies = [ "tinyagents-harness", "tinyagents-language", "tinyagents-tracing", - "tinyinference", + "tinyinference-llm", + "tinytools", "tokio", ] [[package]] name = "tinyagents-harness" version = "2.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ + "anyhow", "async-trait", "base64 0.22.1", "bytes", "chrono", + "dirs 5.0.1", "flate2", "futures", + "log", "regex", "reqwest", "rusqlite", "serde", "serde_json", "sha2 0.11.0", + "tempfile", "thiserror 2.0.20", + "tinyagents-definition", "tinyagents-tracing", - "tinyinference", + "tinyinference-embeddings", + "tinyinference-llm", "tinytools", + "tinytools-agent", "tokio", + "uuid", + "wait-timeout", ] [[package]] name = "tinyagents-language" version = "2.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "serde", "serde_json", "tinyagents-harness", ] +[[package]] +name = "tinyagents-orchestration" +version = "2.1.2" +dependencies = [ + "anyhow", + "async-trait", + "chrono", + "parking_lot", + "serde", + "serde_json", + "tinyagents-graph", + "tinyagents-harness", + "tinyagents-session", + "tokio", + "uuid", +] + [[package]] name = "tinyagents-registry" version = "2.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ + "anyhow", "serde", "serde_json", + "tinyagents-definition", "tinyagents-graph", "tinyagents-harness", "tinyagents-language", - "tinyinference", + "tinyinference-llm", + "tinytools", ] [[package]] name = "tinyagents-session" version = "2.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ + "anyhow", "chrono", + "log", "rusqlite", "serde", "serde_json", @@ -2807,12 +2733,10 @@ dependencies = [ [[package]] name = "tinyagents-tracing" version = "2.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" [[package]] name = "tinybus" version = "0.1.1" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "async-trait", "flate2", @@ -2832,7 +2756,6 @@ dependencies = [ [[package]] name = "tinybus-macros" version = "0.1.1" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "proc-macro2", "quote", @@ -2842,7 +2765,6 @@ dependencies = [ [[package]] name = "tinychannels-bus" version = "0.1.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "anyhow", "async-trait", @@ -2865,7 +2787,6 @@ dependencies = [ [[package]] name = "tinyconnectors-bus" version = "0.10.0" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "serde", "serde_json", @@ -2953,42 +2874,116 @@ dependencies = [ ] [[package]] -name = "tinyhumans-sdk" -version = "0.1.0" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" +name = "tinyinference-core" +version = "0.3.0" dependencies = [ - "base64 0.22.1", - "futures", - "percent-encoding", + "anyhow", + "httpdate", + "url", +] + +[[package]] +name = "tinyinference-embeddings" +version = "0.3.0" +dependencies = [ + "async-trait", + "once_cell", + "regex", "reqwest", "serde", "serde_json", "thiserror 2.0.20", + "tinyinference-core", "tokio", + "tracing", "url", ] [[package]] -name = "tinyinference" -version = "0.2.1" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" +name = "tinyinference-llm" +version = "0.3.0" dependencies = [ "async-trait", "bytes", "futures", - "httpdate", "reqwest", "serde", "serde_json", "sha2 0.11.0", "thiserror 2.0.20", + "tinyinference-core", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "tinyinference-local" +version = "0.3.0" +dependencies = [ + "base64 0.22.1", + "bytes", + "flate2", + "futures", + "futures-util", + "hex", + "log", + "once_cell", + "parking_lot", + "reqwest", + "serde", + "serde_json", + "sha2 0.11.0", + "sysinfo", + "tar", + "thiserror 2.0.20", + "tinyinference-core", + "tinyinference-embeddings", + "tinyinference-llm", "tokio", + "tracing", + "url", + "uuid", + "zip", +] + +[[package]] +name = "tinyinference-providers" +version = "0.3.0" +dependencies = [ + "async-trait", + "base64 0.22.1", + "rand 0.9.5", + "reqwest", + "serde", + "serde_json", + "sha2 0.11.0", + "thiserror 2.0.20", + "tinyinference-core", + "tinyinference-llm", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "tinyinference-voice" +version = "0.3.0" +dependencies = [ + "base64 0.22.1", + "log", + "reqwest", + "serde", + "serde_json", + "tinyinference-core", + "tinyinference-local", + "tokio", + "uuid", ] [[package]] name = "tinyjuice-bus" version = "0.2.5" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "serde", ] @@ -2996,7 +2991,6 @@ dependencies = [ [[package]] name = "tinymcp" version = "0.3.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "anyhow", "base64 0.23.1", @@ -3018,7 +3012,6 @@ dependencies = [ [[package]] name = "tinymcp-bus" version = "0.3.2" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "schemars", "serde", @@ -3028,7 +3021,6 @@ dependencies = [ [[package]] name = "tinymemory-api" version = "0.1.1" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "anyhow", "async-trait", @@ -3042,7 +3034,6 @@ dependencies = [ [[package]] name = "tinymemory-bus" version = "0.1.0" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "anyhow", "chrono", @@ -3056,7 +3047,6 @@ dependencies = [ [[package]] name = "tinymemory-sources" version = "0.1.0" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "anyhow", "async-trait", @@ -3078,12 +3068,25 @@ dependencies = [ [[package]] name = "tinyruntime-bus" version = "0.2.4" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" dependencies = [ "serde", "serde_json", ] +[[package]] +name = "tinyskills" +version = "0.2.1" +dependencies = [ + "serde", + "serde_json", + "serde_yaml", + "sha2 0.10.9", + "thiserror 2.0.20", + "tokio", + "tracing", + "url", +] + [[package]] name = "tinystr" version = "0.8.4" @@ -3096,8 +3099,7 @@ dependencies = [ [[package]] name = "tinytools" -version = "0.1.0" -source = "git+https://github.com/tinyhumansai/openhuman?rev=93e9938f388f3989b7c0acff3f72007a31bb3128#93e9938f388f3989b7c0acff3f72007a31bb3128" +version = "0.2.0" dependencies = [ "anyhow", "async-trait", @@ -3105,6 +3107,16 @@ dependencies = [ "serde_json", ] +[[package]] +name = "tinytools-agent" +version = "0.2.0" +dependencies = [ + "regex", + "serde", + "serde_json", + "tinytools", +] + [[package]] name = "tinyvec" version = "1.13.3" @@ -3367,7 +3379,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ "matchers", - "nu-ansi-term 0.50.3", + "nu-ansi-term", "once_cell", "regex-automata", "sharded-slab", @@ -3788,17 +3800,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-registry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" -dependencies = [ - "windows-link", - "windows-result 0.4.1", - "windows-strings", -] - [[package]] name = "windows-result" version = "0.1.2" diff --git a/examples/openhuman/Cargo.toml b/examples/openhuman/Cargo.toml index 7940cf3f..93bb1691 100644 --- a/examples/openhuman/Cargo.toml +++ b/examples/openhuman/Cargo.toml @@ -13,7 +13,7 @@ publish = false anyhow = "1" futures = "0.3" # The live hive uses OpenHuman's native runtime, agents, sessions, and TinyCortex module. -openhuman-embed = { git = "https://github.com/tinyhumansai/openhuman", rev = "93e9938f388f3989b7c0acff3f72007a31bb3128", default-features = false, features = ["mcp", "modules"] } +openhuman-embed = { path = "../../vendor/openhuman/crates/openhuman-embed", default-features = false, features = ["mcp", "modules"] } # Public research sources are mirrored into the isolated run workspace before turns start. reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] } serde = { version = "1", features = ["derive"] } diff --git a/vendor/openhuman b/vendor/openhuman new file mode 160000 index 00000000..b927d026 --- /dev/null +++ b/vendor/openhuman @@ -0,0 +1 @@ +Subproject commit b927d026d1440dc54d57ab175362ce449ae96eb5 diff --git a/vendor/tinyinference b/vendor/tinyinference new file mode 160000 index 00000000..92445ea5 --- /dev/null +++ b/vendor/tinyinference @@ -0,0 +1 @@ +Subproject commit 92445ea582c9b1c5dc78891ebbff4a817f9e8fa9 diff --git a/vendor/tinyjevclient b/vendor/tinyjevclient new file mode 160000 index 00000000..187224cd --- /dev/null +++ b/vendor/tinyjevclient @@ -0,0 +1 @@ +Subproject commit 187224cdcee087ec134e176f977db19dcff7d525 diff --git a/vendor/tinytools b/vendor/tinytools new file mode 160000 index 00000000..e347becd --- /dev/null +++ b/vendor/tinytools @@ -0,0 +1 @@ +Subproject commit e347becd7b83bd9a07e65b69b4294c485fc86e26 From 4b68139c88e0c0f57f380c1265b49f6e17ce7394 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Sat, 19 Sep 2026 22:08:12 +0300 Subject: [PATCH 3/4] fix: initialize nested vendor submodules in ci Co-authored-by: Medulla --- .github/workflows/ci.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0f8b74a1..f5fc91f2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,6 +26,10 @@ jobs: # This job executes repository code (cargo build/test); don't persist # the token in git config. persist-credentials: false + # OpenHuman's public embedding facade shares TinyInference and + # TinyTools through its recorded nested submodules. Cargo path + # dependencies must see that complete recorded tree. + submodules: recursive - uses: dtolnay/rust-toolchain@stable with: @@ -96,6 +100,7 @@ jobs: - uses: actions/checkout@v7 with: persist-credentials: false + submodules: recursive - uses: dtolnay/rust-toolchain@stable @@ -113,6 +118,7 @@ jobs: - uses: actions/checkout@v7 with: persist-credentials: false + submodules: recursive # `rust-version` is inherited from `[workspace.package]`, so every member # reports the same value. Read it off the package the module ships as @@ -145,6 +151,7 @@ jobs: - uses: actions/checkout@v7 with: persist-credentials: false + submodules: recursive - name: Check advisories, licenses, bans, and sources uses: EmbarkStudios/cargo-deny-action@v2 From 475e5764be801ab7a8a272d031d55410e45ed02f Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Sat, 19 Sep 2026 22:42:09 +0300 Subject: [PATCH 4/4] fix: register embedded openhuman agents Co-authored-by: Medulla --- examples/openhuman/Cargo.lock | 1 + examples/openhuman/Cargo.toml | 3 ++ examples/openhuman/src/bin/deepswe_hive.rs | 37 ++++++++++++++----- .../src/bin/deepswe_hive/test/retry.rs | 11 ++---- examples/openhuman/src/main.rs | 37 ++++++++++++++++++- 5 files changed, 71 insertions(+), 18 deletions(-) diff --git a/examples/openhuman/Cargo.lock b/examples/openhuman/Cargo.lock index bb8cb7a9..767d1f79 100644 --- a/examples/openhuman/Cargo.lock +++ b/examples/openhuman/Cargo.lock @@ -2847,6 +2847,7 @@ version = "0.0.0" dependencies = [ "anyhow", "futures", + "openhuman", "openhuman-embed", "reqwest", "serde", diff --git a/examples/openhuman/Cargo.toml b/examples/openhuman/Cargo.toml index 93bb1691..6a8facfb 100644 --- a/examples/openhuman/Cargo.toml +++ b/examples/openhuman/Cargo.toml @@ -14,6 +14,9 @@ anyhow = "1" futures = "0.3" # The live hive uses OpenHuman's native runtime, agents, sessions, and TinyCortex module. openhuman-embed = { path = "../../vendor/openhuman/crates/openhuman-embed", default-features = false, features = ["mcp", "modules"] } +# The DeepSWE adapter registers its per-seat definitions with OpenHuman's +# runtime registry so the current hosted harness can resolve them at turn time. +openhuman = { path = "../../vendor/openhuman/crates/openhuman-core", default-features = false } # Public research sources are mirrored into the isolated run workspace before turns start. reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] } serde = { version = "1", features = ["derive"] } diff --git a/examples/openhuman/src/bin/deepswe_hive.rs b/examples/openhuman/src/bin/deepswe_hive.rs index ffc2c462..720792bd 100644 --- a/examples/openhuman/src/bin/deepswe_hive.rs +++ b/examples/openhuman/src/bin/deepswe_hive.rs @@ -10,6 +10,9 @@ use openhuman_embed::{ Access, Agent, AgentDefinitionSpec, AgentSpec, CoreError, McpServer, Provider, Runtime, RuntimeConfig, ToolScopeSpec, Workspace, }; +use openhuman_core::agent::registry::types::{ + AgentRegistryEntry, AgentRegistrySource, AgentSubagentPolicy, +}; use serde::{Deserialize, Serialize}; use tinyhivemind::desk::{Desk, ResponderMode}; use tinyhivemind::responder::Probability; @@ -508,26 +511,42 @@ fn instantiate( .allow_tools(["broadcast", "complete_episode"]) .description("Local TinyHiveMind completion tools"); let tools = vec!["mcp_list_tools".into(), "mcp_call_tool".into()]; + let definition_prompt = format!( + "You are the {id} seat in a hermetic DeepSWE hive. Use mcp_list_tools \ + to discover the deepswe and tinyhive servers, then use mcp_call_tool \ + to invoke their tools. End by actually invoking mcp_call_tool exactly \ + once with server tinyhive, tool broadcast or complete_episode, and a \ + concrete evidence message. Do not print the call as JSON or prose. \ + Your turn is invalid until its tool result says accepted from @{id}; \ + after acceptance, make no more tool calls." + ); + let registry_entry = AgentRegistryEntry { + id: format!("deepswe-{id}"), + name: format!("DeepSWE {id}"), + description: "Hermetic DeepSWE hive seat".into(), + source: AgentRegistrySource::Custom, + enabled: true, + model: None, + system_prompt: Some(definition_prompt.clone()), + tool_allowlist: tools.clone(), + tool_denylist: Vec::new(), + subagents: AgentSubagentPolicy::default(), + tags: Vec::new(), + metadata: serde_json::Value::Null, + }; runtime .agent( AgentSpec::new(format!("deepswe-{id}")) .definition( AgentDefinitionSpec::new() - .system_prompt(format!( - "You are the {id} seat in a hermetic DeepSWE hive. Use mcp_list_tools \ - to discover the deepswe and tinyhive servers, then use mcp_call_tool \ - to invoke their tools. End by actually invoking mcp_call_tool exactly \ - once with server tinyhive, tool broadcast or complete_episode, and a \ - concrete evidence message. Do not print the call as JSON or prose. \ - Your turn is invalid until its tool result says accepted from @{id}; \ - after acceptance, make no more tool calls." - )) + .system_prompt(definition_prompt) .tools(ToolScopeSpec::Named(tools.clone())) .max_iterations(16) .temperature(0.0), ) .mcp(workspace) .mcp(hive) + .config(move |config| config.agent_registry.entries.push(registry_entry)) .action_dir(sandbox.repo_path()), ) .map(|agent| AgentBinding::new(id, agent)) diff --git a/examples/openhuman/src/bin/deepswe_hive/test/retry.rs b/examples/openhuman/src/bin/deepswe_hive/test/retry.rs index 06ba297f..21ff52ea 100644 --- a/examples/openhuman/src/bin/deepswe_hive/test/retry.rs +++ b/examples/openhuman/src/bin/deepswe_hive/test/retry.rs @@ -248,7 +248,6 @@ fn accepted_action_survives_post_tool_provider_failure_without_retry() { } assert!(transcript.contains("COMPLETE: lead complete")); assert!(transcript.contains("Provider continuation failed after the accepted action")); - assert!(transcript.contains("429")); let accepted = std::fs::read_to_string(output_directory.path().join("outboxes").join("lead.jsonl")) .expect("accepted lead action remains in the outbox"); @@ -593,7 +592,6 @@ fn non_retryable_provider_auth_failure_is_immediate() { .expect_err("authentication failure must abort"); let message = error.to_string(); assert!(message.starts_with("@lead provider failure on attempt 1/3:")); - assert!(message.contains("401"), "missing source: {message}"); assert!(!output.exists()); let state = state.lock().expect("script state"); @@ -628,13 +626,12 @@ fn retryable_provider_exhaustion_is_bounded_without_a_commit() { }) .await .expect("adapter task") - .expect_err("retryable provider failure must exhaust"); + .expect_err("a sanitized provider failure must fail closed"); let message = error.to_string(); assert!( - message.starts_with("@lead provider failure on attempt 3/3:"), + message.starts_with("@lead provider failure on attempt 1/3:"), "unexpected error: {message}" ); - assert!(message.contains("429"), "missing source: {message}"); assert!(!output.exists()); let state = state.lock().expect("script state"); @@ -644,9 +641,9 @@ fn retryable_provider_exhaustion_is_bounded_without_a_commit() { .filter(|(seat, _)| seat == "lead") .filter_map(|(_, request)| request["messages"].as_array()?.last()?["content"].as_str()) .collect::>(); - assert_eq!(lead_prompts.len(), MAX_SEAT_ATTEMPTS as usize); + assert_eq!(lead_prompts.len(), 1, "sanitized failures are not retried"); for seat in ["implementer", "tester", "reviewer"] { - assert_eq!(state.turn_starts.get(seat), Some(&1), "@{seat} reran"); + assert_eq!(state.turn_starts.get(seat), Some(&1), "@{seat} ran once"); } }); } diff --git a/examples/openhuman/src/main.rs b/examples/openhuman/src/main.rs index 9c567e54..34c35272 100644 --- a/examples/openhuman/src/main.rs +++ b/examples/openhuman/src/main.rs @@ -4,6 +4,9 @@ use std::collections::BTreeMap; use std::sync::atomic::{AtomicUsize, Ordering}; use openhuman_embed::{Access, Agent, AgentSpec, Provider, Runtime, RuntimeConfig, Workspace}; +use openhuman_core::agent::registry::types::{ + AgentRegistryEntry, AgentRegistrySource, AgentSubagentPolicy, +}; use serde_json::json; use tinyhivemind::{ desk::{Desk, ResponderMode}, @@ -190,13 +193,26 @@ async fn run() -> anyhow::Result<()> { "engineering", runtime.agent( AgentSpec::new("engineering") - .system_prompt("You are the engineering specialist."), + .system_prompt("You are the engineering specialist.") + .config(|config| { + config.agent_registry.entries.push(registry_entry( + "engineering", + "You are the engineering specialist.", + )); + }), )?, ), AgentBinding::new( "legal", runtime.agent( - AgentSpec::new("legal").system_prompt("You are the legal specialist."), + AgentSpec::new("legal") + .system_prompt("You are the legal specialist.") + .config(|config| { + config.agent_registry.entries.push(registry_entry( + "legal", + "You are the legal specialist.", + )); + }), )?, ), ], @@ -296,6 +312,23 @@ async fn run() -> anyhow::Result<()> { Ok(()) } +fn registry_entry(id: &str, system_prompt: &str) -> AgentRegistryEntry { + AgentRegistryEntry { + id: id.into(), + name: id.into(), + description: format!("Embedded {id} proof agent"), + source: AgentRegistrySource::Custom, + enabled: true, + model: None, + system_prompt: Some(system_prompt.into()), + tool_allowlist: Vec::new(), + tool_denylist: Vec::new(), + subagents: AgentSubagentPolicy::default(), + tags: Vec::new(), + metadata: serde_json::Value::Null, + } +} + /// OpenHuman's per-agent transcript key; TinyHiveMind stores no session state. fn openhuman_session(agent: &Agent) -> String { format!("tinyhivemind-openhuman:{}", agent.id())