From 2ecb8822de46f180fcaaf5fd7eefd5238ec73703 Mon Sep 17 00:00:00 2001 From: Emil Date: Sun, 1 Nov 2026 02:27:44 +0300 Subject: [PATCH] P2c: in-app choir agent with proposals and approval --- Cargo.lock | 831 ++++++++++++++++++++++++++++++- README.md | 12 +- crates/zhila-core/src/lib.rs | 6 +- crates/zhila-daemon/Cargo.toml | 1 + crates/zhila-daemon/src/agent.rs | 440 ++++++++++++++++ crates/zhila-daemon/src/lib.rs | 248 ++++++++- crates/zhila-protocol/src/lib.rs | 40 ++ docs/P2.md | 22 +- docs/PLAN.md | 2 +- docs/PROTOCOL.md | 4 + preview-p2-agent.png | Bin 0 -> 252209 bytes scripts/agent-smoke.mjs | 53 ++ ui/package.json | 1 + ui/scripts/agent-ui-smoke.mjs | 40 ++ ui/src/App.svelte | 67 ++- ui/src/app.css | 314 ++++++++++++ ui/src/components/Choir.svelte | 146 ++++++ ui/src/lib/bridge.ts | 6 + ui/src/lib/format.ts | 4 + ui/src/lib/types.ts | 29 +- 20 files changed, 2236 insertions(+), 30 deletions(-) create mode 100644 crates/zhila-daemon/src/agent.rs create mode 100644 preview-p2-agent.png create mode 100644 scripts/agent-smoke.mjs create mode 100644 ui/scripts/agent-ui-smoke.mjs create mode 100644 ui/src/components/Choir.svelte diff --git a/Cargo.lock b/Cargo.lock index 64758a6..c6feba8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -69,7 +69,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -80,7 +80,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -95,12 +95,30 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + [[package]] name = "bitflags" version = "1.3.2" @@ -178,6 +196,12 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" +[[package]] +name = "cfg_aliases" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + [[package]] name = "chacha20" version = "0.10.2" @@ -358,6 +382,17 @@ dependencies = [ "objc2", ] +[[package]] +name = "displaydoc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + [[package]] name = "encoding_rs" version = "0.8.44" @@ -385,7 +420,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -424,6 +459,24 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" +dependencies = [ + "futures-core", +] + [[package]] name = "futures-core" version = "0.3.34" @@ -467,6 +520,19 @@ dependencies = [ "slab", ] +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + [[package]] name = "getrandom" version = "0.4.3" @@ -474,9 +540,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi", "rand_core", + "wasm-bindgen", ] [[package]] @@ -519,6 +587,29 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + [[package]] name = "httparse" version = "1.10.1" @@ -534,6 +625,169 @@ dependencies = [ "typenum", ] +[[package]] +name = "hyper" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c3e324da4c95177d6291d4c8730197c0d1822f8a9766814a4a44fa5ab797c9c" +dependencies = [ + "atomic-waker", + "bytes", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa8e654703247911e29c23fbeaa261834bd9bb74efba2f9acddc37bfb127f53" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc03d96684f9226b8a787cdb71488417b53ab5ea8fdb1dac946cb9431cc8bff" +dependencies = [ + "base64 0.23.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "httparse", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "icu_collections" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe090a42a0d3140fed8c63263ed1fecc02422cb2f4bfe55cd8de2de1b8e105dd" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25d29b57c17c6528d0dc4c2141cfa2d08200465acb537a3909c8b9b8a4a984c0" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "404a3b8c486f205c87fe7f23ab6894d84a4ad76d6e4671ae1981ba7def87c599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20f0088bfb7441f7a37fa0c9e20cb1e9cba1cac6b9ce8cd2a6dc44294f8e8cbc" + +[[package]] +name = "icu_properties" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ea83d991c56158f7cf898bf86436c1dfe7c07ee82fe88951f2695c9f37a379f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98f29af82d02b163fe50161388350e743bb3107cc8e8c2f7314cb505faddfcf" + +[[package]] +name = "icu_provider" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413099315636c588ee8f011190b329b971a09a8fae9d157e01dcae8379468514" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "indexmap" version = "2.14.2" @@ -544,6 +798,12 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "ipnet" +version = "2.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" + [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -654,12 +914,24 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" +[[package]] +name = "litemap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" + [[package]] name = "log" version = "0.4.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d15f86d12da44cd8d4ec3c73984537eb7f4cadcb9776a575a0a8a05ca11005c" +[[package]] +name = "lru-slab" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4050469837a6ff301cd14c1f8f24f88549e6d548f24f64e2148eb0f72cebc51f" + [[package]] name = "mach2" version = "0.6.0" @@ -689,7 +961,7 @@ checksum = "1788edb87fdc09c7e26304471e2f5be8cdefb1b6930d6e3985fc02ff53bf86ee" dependencies = [ "libc", "wasi", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -733,7 +1005,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -880,6 +1152,12 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + [[package]] name = "pin-project-lite" version = "0.2.17" @@ -892,6 +1170,15 @@ version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" +[[package]] +name = "potential_utf" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" +dependencies = [ + "zerovec", +] + [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -910,6 +1197,62 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "quinn" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4051e23e9185c255a7e33ef59cdbca87a22d359052eecd22fc6b901fb37d9d11" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror 2.0.21", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e750cca55fe4f0439a15d0bb529da9651e79993e8e72c61a899a36d462befbe" +dependencies = [ + "bytes", + "getrandom 0.4.3", + "lru-slab", + "rand", + "rand_pcg", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.21", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af66907df18639dcf4db56ca65490cabc4b27a97dbadd96f2926cca73298f016" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.61.2", +] + [[package]] name = "quote" version = "1.0.47" @@ -932,7 +1275,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af" dependencies = [ "chacha20", - "getrandom", + "getrandom 0.4.3", "rand_core", ] @@ -942,6 +1285,15 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core", +] + [[package]] name = "regex-automata" version = "0.4.18" @@ -959,6 +1311,58 @@ version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" +[[package]] +name = "reqwest" +version = "0.12.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rsqlite-vfs" version = "0.2.0" @@ -989,6 +1393,12 @@ dependencies = [ "sqlite-wasm-rs", ] +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + [[package]] name = "rustc_version" version = "0.4.1" @@ -1008,7 +1418,42 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443b1b6d39d7c663139942cc4558262562d2c84123bb6282ef177009ca8b281" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] @@ -1017,6 +1462,12 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + [[package]] name = "same-file" version = "1.0.6" @@ -1081,6 +1532,18 @@ dependencies = [ "zmij", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "sha1" version = "0.11.0" @@ -1152,7 +1615,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -1165,12 +1628,24 @@ dependencies = [ "rsqlite-vfs", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "symphonia" version = "0.5.5" @@ -1326,6 +1801,26 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + [[package]] name = "tempfile" version = "3.27.0" @@ -1333,10 +1828,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom", + "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -1388,6 +1883,22 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "tinystr" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abc840c238154d58f9e86b2792261edfde565a17696e1cda1a449de27979801a" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" + [[package]] name = "tokio" version = "1.54.1" @@ -1401,7 +1912,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -1415,6 +1926,16 @@ dependencies = [ "syn 3.0.9", ] +[[package]] +name = "tokio-rustls" +version = "0.26.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9cc2678c2cdd569ef8215e2afd7954ada2ae20b4fdd2c5fe6139a3b02d105db" +dependencies = [ + "rustls", + "tokio", +] + [[package]] name = "tokio-tungstenite" version = "0.30.0" @@ -1457,6 +1978,51 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags 2.13.2", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + [[package]] name = "tracing" version = "0.1.44" @@ -1518,6 +2084,12 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "tungstenite" version = "0.30.0" @@ -1546,12 +2118,45 @@ version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8_iter" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af3bd9d3e571c26fcce9d033b87ea5ab061b8d2ffe9b7a5675d810d68f03edf0" +dependencies = [ + "utf_types", +] + [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "utf_types" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a3b425286980a367278453f3b6d28cdcb134b574e5a35824a6ff5eebad50bb6" + [[package]] name = "valuable" version = "0.1.1" @@ -1574,6 +2179,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec4cdd0dd910afe868b7ef477227d8d538b46b3075031afee8a9f2acb0a2ed0b" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -1592,6 +2206,17 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e14e0327cb5368ad60ccb22d04a9827a693c95a926d8d125e9fa39e0baec501" +dependencies = [ + "js-sys", + "tokio", + "wasm-bindgen", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.130" @@ -1634,13 +2259,32 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5f280bbb2b287bc8e7de7e3852945a0ff50d1bbcb5ed42b6c7a568c546df171" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "winapi-util" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -1744,6 +2388,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.61.2" @@ -1753,6 +2406,22 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + [[package]] name = "windows-threading" version = "0.2.1" @@ -1762,6 +2431,54 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + [[package]] name = "winnow" version = "1.0.4" @@ -1771,6 +2488,95 @@ dependencies = [ "memchr", ] +[[package]] +name = "writeable" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" + +[[package]] +name = "yoke" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "417ef3fcf6c300b7dbd25c85531a746931c02ad536f3cf4786ed1e88223340b3" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13084392c5e4bc371903e2935a5eaeed24905a7511356b883835e18a78f6879" + +[[package]] +name = "zerotrie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58a2799cfe9a1670c7ea8edbd52ef8edb93cb37a7f83bf31ba9e35d9dae6a40" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3743ddbf47738d929cd1ae2e199d40d0162979dfe31aef8ae646d2bf00bf97a" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + [[package]] name = "zhila-core" version = "0.1.0" @@ -1788,6 +2594,7 @@ dependencies = [ "clap", "futures-util", "hound", + "reqwest", "serde_json", "tokio", "tokio-tungstenite", diff --git a/README.md b/README.md index d15f89c..85610b4 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Sound is terrain. A sampling instrument where material is cut in a quarry, laid as stones in a nave, and played by a hand or an agent through the same verbs. -This repository is **P2 in progress**: the engine, the wire, the descent, the quarry, a persistent project, recording, manual faces, undo across restarts, a native host, an **8-bar arrangement of four sections**, and an **offline WAV render**. A found or recorded sound is cut into sixteen faces, laid on a vein, arranged across A–D, heard as an eight-bar loop and rendered to a 16.5-second WAV; the agent is the remaining P2 slice. The visual demo in [`reference/demo`](reference/demo) remains a design reference, not the codebase. The roadmap is in [`docs/PLAN.md`](docs/PLAN.md). +This repository is **P2 complete**: the engine, the wire, the descent, the quarry, a persistent project, recording, manual faces, undo across restarts, a native host, an **8-bar arrangement of four sections**, an **offline WAV render**, and the **choir** — an in-app LLM agent on the same verbs. A found or recorded sound is cut into sixteen faces, laid on a vein, arranged across A–D, heard as an eight-bar loop, rendered to a 16.5-second WAV, and moved by a performer that hears the levels and asks the hand to approve its edits. The visual demo in [`reference/demo`](reference/demo) remains a design reference, not the codebase. The roadmap is in [`docs/PLAN.md`](docs/PLAN.md). ![The quarry](preview-p1-quarry.png) @@ -20,6 +20,8 @@ This repository is **P2 in progress**: the engine, the wire, the descent, the qu ![P2 · an offline render](preview-p2-render.png) +![P2 · the choir](preview-p2-agent.png) + ## What is real - **Rust engine.** `cpal` output at 48 kHz, five veins, a sixteen-step phrase, a fixed voice pool, per-vein levels and gains, a bar clock. Procedural voices for empty pattern rows; real sample voices for rows with a face. No Web Audio. @@ -35,6 +37,7 @@ This repository is **P2 in progress**: the engine, the wire, the descent, the qu - **Native host.** The Tauri app starts the same host inside its own process: engine, session, SQLite project, assets and loopback wire. The built window is self-contained; the browser path uses the standalone daemon. One process owns `127.0.0.1:4317` at a time. - **Arrangement.** Four 2-bar sections (A–D) make an 8-bar loop. The engine plays the sections in order; the descent draws all eight bars with section seams and letters; the quarry edits the active section, selects, copies and clears. The sections, the active section and their edits are persisted and undoable; the pattern rows and faces stay per section. - **Render.** The `render` button (or the `render` command) renders the full 8-bar arrangement offline with the same voices, gains, sample faces and master as the live engine, then writes a 32-bit float stereo WAV to `/renders/`. The `rendered` event carries the path and duration; no device is opened for the render. +- **Choir.** An in-app LLM performer on the same command verbs. It receives the project, the sections and the live levels, speaks in short concrete moves, performs safe verbs immediately and turns project edits into proposals the hand approves or rejects. The `choir` room carries the conversation, the proposals and the section/level readout. Without an API key it runs a deterministic mock; set `ZHILA_AGENT_KEY` (or `DEEPSEEK_API_KEY`) and optionally `ZHILA_AGENT_URL`/`ZHILA_AGENT_MODEL` for the live provider. - **Verification.** Rust unit tests, a live wire test, a material import test, a browser quarry test and the P0 regression smoke, plus `svelte-check` and a production build. The Tauri 2 app is **built and running with its own engine**: the native window loads the embedded surface and the host starts the engine, session, project and wire in the app process. It is built with Tauri 2.12.5 / CLI 2.12.4 against WebKitGTK 2.54.2, GTK 3.24.52 and dbus 1.16.2. The binary is `app/src-tauri/target/release/zhila-app` (14 MB); installers are a later step. @@ -110,6 +113,8 @@ npm --prefix ui run faces-smoke # daemon + Vite: drag a seam, trim, save, npm --prefix ui run arrangement-smoke # daemon + Vite: sections, edit B, 8-bar descent node scripts/render-smoke.mjs # daemon running: render, parse the WAV npm --prefix ui run render-ui-smoke # daemon + Vite: render button, wire, screenshot +node scripts/agent-smoke.mjs # daemon running: ask, proposal, approve, tempo +npm --prefix ui run agent-ui-smoke # daemon + Vite: choir ask/approve, screenshot cd app && ./node_modules/.bin/tauri build --no-bundle # native app with the embedded host npm --prefix ui run restored-smoke # after restarting the daemon on the saved project ``` @@ -120,7 +125,8 @@ npm --prefix ui run restored-smoke # after restarting the daemon on the saved - The arrangement is exactly four 2-bar sections; no section length, reorder, insert or per-section mute yet. - Render is 48 kHz stereo 32-bit float with a 1.5 s tail; no stems, normalisation or per-section export. -- The agent is the remaining P2 slice. +- The choir is in-app only; no MCP server yet. Without a key it is the deterministic mock. The provider path is OpenAI-compatible, one tool round per ask, and the conversation lives in daemon memory (not the project). +- The agent's proposals are applied with `Actor::Agent` and saved; the chat is not persisted across host restarts. ## P1 limits (kept honest) @@ -135,4 +141,4 @@ npm --prefix ui run restored-smoke # after restarting the daemon on the saved - No agent/MCP in this phase. - The Tauri shell now builds and runs; the engine is still the separate daemon (embedding is next). -P2 is the arrangement, the offline WAV render and the in-app agent. P2a (the arrangement) and P2b (the render) are in this tree; P2c follows. The plan is in [`docs/PLAN.md`](docs/PLAN.md); the phase notes are in [`docs/P2.md`](docs/P2.md). The plan is in [`docs/PLAN.md`](docs/PLAN.md); the phase notes are in [`docs/P1.md`](docs/P1.md). +P2 is complete: the arrangement, the offline WAV render and the choir. P2a, P2b and P2c are in this tree. The plan is in [`docs/PLAN.md`](docs/PLAN.md); the phase notes are in [`docs/P2.md`](docs/P2.md). The next phase is P3: the arrangement across scenes, MCP for external agents, and the deeper mix. The plan is in [`docs/PLAN.md`](docs/PLAN.md); the phase notes are in [`docs/P1.md`](docs/P1.md). diff --git a/crates/zhila-core/src/lib.rs b/crates/zhila-core/src/lib.rs index dce25cf..e46fafe 100644 --- a/crates/zhila-core/src/lib.rs +++ b/crates/zhila-core/src/lib.rs @@ -587,7 +587,11 @@ impl Session { Command::SelectSection { index } => self.select_section(index, actor), Command::ClearSection { index } => self.clear_section(index, actor), Command::CopySection { from, to } => self.copy_section(from, to, actor), - Command::Render => Ok(( + Command::Render + | Command::AgentAsk { .. } + | Command::AgentApprove { .. } + | Command::AgentReject { .. } + | Command::AgentReset => Ok(( CommandResult::State { state: self.snapshot(), }, diff --git a/crates/zhila-daemon/Cargo.toml b/crates/zhila-daemon/Cargo.toml index b3309ef..83a7a4e 100644 --- a/crates/zhila-daemon/Cargo.toml +++ b/crates/zhila-daemon/Cargo.toml @@ -27,3 +27,4 @@ clap.workspace = true tracing.workspace = true tracing-subscriber.workspace = true hound = "3" +reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] } diff --git a/crates/zhila-daemon/src/agent.rs b/crates/zhila-daemon/src/agent.rs new file mode 100644 index 0000000..24b1a48 --- /dev/null +++ b/crates/zhila-daemon/src/agent.rs @@ -0,0 +1,440 @@ +//! The choir: an LLM performer on the same verbs as the hand. +//! +//! The model never touches the session directly. It returns tool calls; safe +//! performance verbs execute immediately, project edits become proposals that +//! the hand approves. With no key (or ZHILA_AGENT_MOCK=1) a deterministic mock +//! keeps the whole path testable. + +use std::collections::HashMap; +use std::time::Duration; + +use serde_json::{Value, json}; +use zhila_protocol::{AgentMessage, AgentRole, Command, MeterFrame, State, VeinId}; + +#[derive(Clone)] +pub struct AgentConfig { + key: Option, + base_url: String, + model: String, + mock: bool, +} + +impl AgentConfig { + pub fn from_env() -> Self { + let key = std::env::var("ZHILA_AGENT_KEY") + .ok() + .or_else(|| std::env::var("DEEPSEEK_API_KEY").ok()) + .filter(|value| !value.trim().is_empty()); + let mock = std::env::var("ZHILA_AGENT_MOCK").is_ok() || key.is_none(); + Self { + key, + base_url: std::env::var("ZHILA_AGENT_URL") + .unwrap_or_else(|_| "https://api.deepseek.com".into()), + model: std::env::var("ZHILA_AGENT_MODEL").unwrap_or_else(|_| "deepseek-chat".into()), + mock, + } + } + + pub fn is_mock(&self) -> bool { + self.mock + } +} + +#[derive(Clone)] +pub struct Proposal { + pub id: u64, + pub description: String, + pub commands: Vec, +} + +pub struct Turn { + pub reply: String, + pub immediate: Vec, + pub proposal: Option, +} + +pub struct Agent { + config: AgentConfig, + client: reqwest::Client, + messages: Vec, + pending: HashMap, + next_id: u64, +} + +impl Agent { + pub fn new(config: AgentConfig) -> Self { + let client = reqwest::Client::builder() + .timeout(Duration::from_secs(60)) + .build() + .expect("agent http client"); + Self { + config, + client, + messages: Vec::new(), + pending: HashMap::new(), + next_id: 0, + } + } + + pub fn messages(&self) -> &[AgentMessage] { + &self.messages + } + + pub async fn ask(&mut self, text: &str, context: &str) -> Turn { + self.messages.push(AgentMessage { + role: AgentRole::User, + text: text.to_string(), + }); + let (reply, calls) = if self.config.mock { + mock_turn(text) + } else { + match self.llm(text, context).await { + Ok(result) => result, + Err(error) => ( + format!("The provider is not answering: {error}. The room is still yours."), + Vec::new(), + ), + } + }; + self.messages.push(AgentMessage { + role: AgentRole::Agent, + text: reply.clone(), + }); + let mut immediate = Vec::new(); + let mut project = Vec::new(); + for command in calls { + if is_safe(&command) { + immediate.push(command); + } else { + project.push(command); + } + } + let proposal = if project.is_empty() { + None + } else { + self.next_id += 1; + let proposal = Proposal { + id: self.next_id, + description: reply.clone(), + commands: project, + }; + self.pending.insert(proposal.id, proposal.clone()); + Some(proposal) + }; + Turn { + reply, + immediate, + proposal, + } + } + + pub fn take(&mut self, id: u64) -> Option { + self.pending.remove(&id) + } + + pub fn note(&mut self, text: impl Into) { + self.messages.push(AgentMessage { + role: AgentRole::Agent, + text: text.into(), + }); + } + + pub fn reset(&mut self) { + self.messages.clear(); + self.pending.clear(); + } + + async fn llm(&self, text: &str, context: &str) -> anyhow::Result<(String, Vec)> { + let key = self + .config + .key + .as_ref() + .ok_or_else(|| anyhow::anyhow!("no agent key"))?; + let mut messages = vec![json!({ + "role": "system", + "content": system_prompt(context), + })]; + for message in self.messages.iter().rev().take(12).rev() { + let role = match message.role { + AgentRole::User => "user", + AgentRole::Agent => "assistant", + AgentRole::System => "system", + }; + messages.push(json!({ "role": role, "content": message.text })); + } + let body = json!({ + "model": self.config.model, + "messages": messages, + "tools": tools(), + "tool_choice": "auto", + "temperature": 0.7, + "max_tokens": 500, + }); + let response = self + .client + .post(format!( + "{}/chat/completions", + self.config.base_url.trim_end_matches('/') + )) + .bearer_auth(key) + .json(&body) + .send() + .await?; + if !response.status().is_success() { + let status = response.status(); + let text = response.text().await.unwrap_or_default(); + anyhow::bail!("{status}: {text}"); + } + let value: Value = response.json().await?; + let message = &value["choices"][0]["message"]; + let mut content = message["content"].as_str().unwrap_or("").trim().to_string(); + let mut commands = Vec::new(); + if let Some(calls) = message["tool_calls"].as_array() { + for call in calls { + if let Some(command) = command_from_tool( + call["function"]["name"].as_str().unwrap_or_default(), + call["function"]["arguments"].as_str().unwrap_or("{}"), + ) { + commands.push(command); + } + } + } + if content.is_empty() { + content = if commands.is_empty() { + "I am listening.".into() + } else { + "I would move these.".into() + }; + } + let _ = text; + Ok((content, commands)) + } +} + +fn is_safe(command: &Command) -> bool { + matches!( + command, + Command::Play + | Command::Stop + | Command::Strike { .. } + | Command::StrikeFace { .. } + | Command::Render + ) +} + +fn mock_turn(text: &str) -> (String, Vec) { + let lower = text.to_lowercase(); + if lower.contains("tempo") || lower.contains("faster") || lower.contains("быстр") { + ( + "A little more forward. I would take the room to 132 bpm and let the low end breathe." + .into(), + vec![Command::SetTempo { bpm: 132.0 }], + ) + } else if lower.contains("play") { + ("Opening the loop.".into(), vec![Command::Play]) + } else if lower.contains("stop") { + ("Stopping on the stone.".into(), vec![Command::Stop]) + } else if lower.contains("render") { + ( + "Rendering the eight bars to disk.".into(), + vec![Command::Render], + ) + } else if lower.contains("listen") || lower.contains("hear") || lower.contains("слыш") { + ( + "The low end holds the room; the high seam is thin. I would strike the bass face once and let it ring." + .into(), + vec![Command::Strike { + vein: VeinId::Bass, + velocity: 0.82, + }], + ) + } else if lower.contains("bass") || lower.contains("бас") { + ( + "The bass wants a little more weight; I would lift it to 0.9.".into(), + vec![Command::SetVeinGain { + vein: VeinId::Bass, + gain: 0.9, + }], + ) + } else if lower.contains("section") || lower.contains("секци") { + ( + "Section B is where the room turns; I would open it.".into(), + vec![Command::SelectSection { index: 1 }], + ) + } else if lower.contains("render") { + ("Rendering the arrangement.".into(), vec![Command::Render]) + } else { + ( + "I am here, listening to the room. Ask me to move something, or press listen.".into(), + Vec::new(), + ) + } +} + +fn system_prompt(context: &str) -> String { + format!( + "You are the choir of ZHILA: a second performer in a sampling instrument where sound is terrain. \ +You speak in short, concrete sentences and you listen to the current room, not to a generic idea of it. \ +You have the same verbs as the hand.\n\ +Project edits (tempo, gains, pattern steps, faces, sections, cuts, undo, redo) are proposals: call the tool, and the hand will approve or reject. \ +Performance (play, stop, strike, strike_face, render) is immediate. Never invent cores, faces or sections that are not in the context. \ +Do not ask for a plan; move one or two things at a time. If the user asks to listen, answer with what you hear in the levels and propose a small move.\n\nContext:\n{context}" + ) +} + +pub fn describe(state: &State, meter: &MeterFrame) -> String { + let mut text = format!( + "project {} · {:.0} bpm · revision {} · {:.0} bars\nsections: ", + state.project_name, state.transport.bpm, state.revision, state.transport.loop_bars + ); + for (index, section) in state.arrangement.iter().enumerate() { + let notes: usize = section + .rows + .iter() + .map(|row| row.velocities.iter().filter(|value| **value > 0).count()) + .sum(); + let faces: usize = section.rows.iter().filter(|row| row.face.is_some()).count(); + let letter = (b'A' + index as u8) as char; + let active = if index == state.active_section as usize { + "*" + } else { + "" + }; + text.push_str(&format!("{letter}{active}({notes} notes, {faces} faces) ")); + } + text.push('\n'); + text.push_str("veins: "); + for vein in &state.veins { + let level = meter.veins.get(vein.id.index()).copied().unwrap_or(0.0); + text.push_str(&format!( + "{} gain {:.2} level {:.2}; ", + vein.name, vein.gain, level + )); + } + text.push_str(&format!( + "\nmaster {:.3} · bar {:.2} · playing {}\n", + meter.master, meter.bar, state.transport.playing + )); + for core in &state.cores { + let top = core + .faces + .iter() + .find(|face| face.rank == 0) + .map(|face| face.index + 1) + .unwrap_or(0); + text.push_str(&format!( + "core {} (seal {:?}): {} faces, top f{}, duration {:.2}s\n", + core.name, + core.seal, + core.faces.len(), + top, + core.duration_sec + )); + } + text +} + +fn tools() -> Value { + json!([ + {"type":"function","function":{"name":"play","description":"Start the arrangement.","parameters":{"type":"object","properties":{},"additionalProperties":false}}}, + {"type":"function","function":{"name":"stop","description":"Stop the arrangement.","parameters":{"type":"object","properties":{},"additionalProperties":false}}}, + {"type":"function","function":{"name":"render","description":"Render the current arrangement to a WAV.","parameters":{"type":"object","properties":{},"additionalProperties":false}}}, + {"type":"function","function":{"name":"strike","description":"Strike a vein once.","parameters":{"type":"object","properties":{"vein":{"type":"string","enum":["bass","crack","voice","noise","silt"]},"velocity":{"type":"number"}},"required":["vein"]}}}, + {"type":"function","function":{"name":"strike_face","description":"Audition a face of a core.","parameters":{"type":"object","properties":{"core":{"type":"string"},"face":{"type":"integer"},"velocity":{"type":"number"}},"required":["core","face"]}}}, + {"type":"function","function":{"name":"set_tempo","description":"Propose a tempo (40–220 bpm).","parameters":{"type":"object","properties":{"bpm":{"type":"number"}},"required":["bpm"]}}}, + {"type":"function","function":{"name":"set_vein_gain","description":"Propose a vein gain (0–1.2).","parameters":{"type":"object","properties":{"vein":{"type":"string","enum":["bass","crack","voice","noise","silt"]},"gain":{"type":"number"}},"required":["vein","gain"]}}}, + {"type":"function","function":{"name":"set_pattern_step","description":"Propose a step velocity (0–127) on a pattern row (0–4) of the active section.","parameters":{"type":"object","properties":{"row":{"type":"integer"},"step":{"type":"integer"},"velocity":{"type":"integer"}},"required":["row","step","velocity"]}}}, + {"type":"function","function":{"name":"set_pattern_face","description":"Propose laying a core face on a row of the active section.","parameters":{"type":"object","properties":{"row":{"type":"integer"},"core":{"type":"string"},"face":{"type":"integer"}},"required":["row","core","face"]}}}, + {"type":"function","function":{"name":"select_section","description":"Propose selecting a section (0–3).","parameters":{"type":"object","properties":{"index":{"type":"integer"}},"required":["index"]}}}, + {"type":"function","function":{"name":"copy_section","description":"Propose copying a section.","parameters":{"type":"object","properties":{"from":{"type":"integer"},"to":{"type":"integer"}},"required":["from","to"]}}}, + {"type":"function","function":{"name":"clear_section","description":"Propose clearing a section.","parameters":{"type":"object","properties":{"index":{"type":"integer"}},"required":["index"]}}}, + {"type":"function","function":{"name":"set_core_faces","description":"Propose new face boundaries (17 seconds, ascending) for a core.","parameters":{"type":"object","properties":{"core":{"type":"string"},"boundaries":{"type":"array","items":{"type":"number"}}},"required":["core","boundaries"]}}}, + {"type":"function","function":{"name":"undo","description":"Propose undo.","parameters":{"type":"object","properties":{},"additionalProperties":false}}}, + {"type":"function","function":{"name":"redo","description":"Propose redo.","parameters":{"type":"object","properties":{},"additionalProperties":false}}} + ]) +} + +fn command_from_tool(name: &str, arguments: &str) -> Option { + let args: Value = serde_json::from_str(arguments).unwrap_or(Value::Null); + let vein = |value: &Value| serde_json::from_value::(value.clone()).ok(); + let subject = |value: &Value| serde_json::from_value::(value.clone()).ok(); + let _ = subject; + match name { + "play" => Some(Command::Play), + "stop" => Some(Command::Stop), + "render" => Some(Command::Render), + "strike" => Some(Command::Strike { + vein: vein(&args["vein"])?, + velocity: args["velocity"].as_f64().unwrap_or(0.8) as f32, + }), + "strike_face" => Some(Command::StrikeFace { + core: args["core"].as_str()?.to_string(), + face: args["face"].as_u64()? as u8, + velocity: args["velocity"].as_f64().unwrap_or(0.8) as f32, + }), + "set_tempo" => Some(Command::SetTempo { + bpm: args["bpm"].as_f64()? as f32, + }), + "set_vein_gain" => Some(Command::SetVeinGain { + vein: vein(&args["vein"])?, + gain: args["gain"].as_f64()? as f32, + }), + "set_pattern_step" => Some(Command::SetPatternStep { + row: args["row"].as_u64()? as u8, + step: args["step"].as_u64()? as u8, + velocity: args["velocity"].as_u64()? as u8, + }), + "set_pattern_face" => Some(Command::SetPatternFace { + row: args["row"].as_u64()? as u8, + core: args["core"].as_str()?.to_string(), + face: args["face"].as_u64()? as u8, + }), + "select_section" => Some(Command::SelectSection { + index: args["index"].as_u64()? as u8, + }), + "copy_section" => Some(Command::CopySection { + from: args["from"].as_u64()? as u8, + to: args["to"].as_u64()? as u8, + }), + "clear_section" => Some(Command::ClearSection { + index: args["index"].as_u64()? as u8, + }), + "set_core_faces" => Some(Command::SetCoreFaces { + core: args["core"].as_str()?.to_string(), + boundaries: serde_json::from_value(args["boundaries"].clone()).ok()?, + }), + "undo" => Some(Command::Undo), + "redo" => Some(Command::Redo), + _ => None, + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn mock_proposes_tempo_and_plays() { + let (reply, commands) = mock_turn("raise the tempo"); + assert!(reply.to_lowercase().contains("132")); + assert!(matches!(commands.as_slice(), [Command::SetTempo { .. }])); + let (_, commands) = mock_turn("play"); + assert!(matches!(commands.as_slice(), [Command::Play])); + } + + #[test] + fn tool_calls_become_commands() { + assert!(matches!( + command_from_tool("set_tempo", r#"{"bpm":132}"#), + Some(Command::SetTempo { bpm }) if bpm == 132.0 + )); + assert!(matches!( + command_from_tool("strike", r#"{"vein":"bass","velocity":0.7}"#), + Some(Command::Strike { + vein: VeinId::Bass, + .. + }) + )); + assert!(command_from_tool("nonsense", "{}").is_none()); + } +} diff --git a/crates/zhila-daemon/src/lib.rs b/crates/zhila-daemon/src/lib.rs index 18627fc..2c5478f 100644 --- a/crates/zhila-daemon/src/lib.rs +++ b/crates/zhila-daemon/src/lib.rs @@ -1,8 +1,10 @@ -//! ZHILA local daemon: one WebSocket endpoint, one session, one engine. +//! ZHILA local host: one WebSocket endpoint, one session, one engine, one choir. //! //! Text frames are JSON control messages; meter frames are binary. The daemon //! binds to loopback only and requires a token in the hello. +mod agent; + use std::path::PathBuf; use std::sync::Arc; use std::time::{Duration, SystemTime, UNIX_EPOCH}; @@ -21,8 +23,8 @@ use zhila_core::{CoreError, Engine, MaterialSnapshot, Session, default_pattern}; use zhila_engine::{AudioEngine, NullEngine, RenderRequest, render_arrangement}; use zhila_project::{ProjectSnapshot, ProjectStore}; use zhila_protocol::{ - Actor, ClientMessage, Command, CommandResult, ErrorCode, Event, PROTOCOL_VERSION, Pattern, - Seal, ServerMessage, VEIN_COUNT, + Actor, AgentMessage, AgentRole, ClientMessage, Command, CommandResult, ErrorCode, Event, + PROTOCOL_VERSION, Pattern, Seal, ServerMessage, State, VEIN_COUNT, }; const HELLO_TIMEOUT: Duration = Duration::from_secs(5); @@ -48,6 +50,8 @@ enum Outbound { struct Shared { session: Arc>, store: Arc>, + engine: Arc, + agent: Arc>, out: broadcast::Sender, token: Arc, session_id: Arc, @@ -106,11 +110,20 @@ pub async fn run(config: HostConfig) -> anyhow::Result<()> { }; let session = Arc::new(Mutex::new(session)); let store = Arc::new(std::sync::Mutex::new(store)); + let agent_config = agent::AgentConfig::from_env(); + let agent_mode = if agent_config.is_mock() { + "mock" + } else { + "live" + }; + let agent = Arc::new(Mutex::new(agent::Agent::new(agent_config))); let (out, _) = broadcast::channel::(128); let session_id = format!("zhila-{:x}", now_ms()); let shared = Shared { session, store, + engine: control.clone(), + agent, out: out.clone(), token: Arc::new(token.clone()), session_id: Arc::new(session_id.clone()), @@ -139,6 +152,7 @@ pub async fn run(config: HostConfig) -> anyhow::Result<()> { &session_id, &project_name, &project_path, + agent_mode, ); if token == "dev" { warn!("using the development token; pass --token or ZHILA_TOKEN to change it"); @@ -173,11 +187,13 @@ fn print_banner( session_id: &str, project_name: &str, project_path: &std::path::Path, + agent_mode: &str, ) { println!(); println!(" ZHILA engine"); println!(" ws://127.0.0.1:{port} · token {token}"); println!(" project {project_name} · {}", project_path.display()); + println!(" choir {agent_mode}"); if info.running { let buffer = if info.buffer_frames == 0 { "default".to_string() @@ -249,6 +265,211 @@ fn sanitize_name(name: &str) -> String { } } +async fn handle_agent( + shared: &Shared, + direct_tx: &mpsc::UnboundedSender, + id: u64, + command: Command, +) { + match command { + Command::AgentAsk { text } => { + let (context, revision) = { + let session = shared.session.lock().await; + let state = session.snapshot(); + ( + agent::describe(&state, &shared.engine.meter()), + state.revision, + ) + }; + broadcast_event( + shared, + revision, + Event::AgentMessage { + message: AgentMessage { + role: AgentRole::User, + text: text.clone(), + }, + }, + ); + let turn = { + let mut agent = shared.agent.lock().await; + agent.ask(&text, &context).await + }; + for immediate in &turn.immediate { + apply_agent_immediate(shared, immediate).await; + } + let revision = shared.session.lock().await.revision(); + broadcast_event( + shared, + revision, + Event::AgentMessage { + message: AgentMessage { + role: AgentRole::Agent, + text: turn.reply.clone(), + }, + }, + ); + if let Some(proposal) = turn.proposal { + broadcast_event( + shared, + revision, + Event::AgentProposal { + id: proposal.id, + description: proposal.description, + commands: proposal.commands, + }, + ); + } + send_agent_result(shared, direct_tx, id).await; + } + Command::AgentApprove { id: proposal_id } => { + let proposal = { + let mut agent = shared.agent.lock().await; + agent.take(proposal_id) + }; + if let Some(proposal) = proposal { + for command in &proposal.commands { + let outcome = { + let mut session = shared.session.lock().await; + session.apply(command.clone(), Actor::Agent) + }; + if let Ok((result, events)) = outcome { + let revision = match result { + CommandResult::State { state } | CommandResult::Snapshot { state } => { + state.revision + } + }; + for event in events { + broadcast_event(shared, revision, event); + } + } + } + save_now(shared).await; + let note = "Applied. The room has moved."; + { + let mut agent = shared.agent.lock().await; + agent.note(note); + } + let revision = shared.session.lock().await.revision(); + broadcast_event( + shared, + revision, + Event::AgentMessage { + message: AgentMessage { + role: AgentRole::Agent, + text: note.into(), + }, + }, + ); + broadcast_event( + shared, + revision, + Event::AgentResolved { + id: proposal_id, + applied: true, + }, + ); + } + send_agent_result(shared, direct_tx, id).await; + } + Command::AgentReject { id: proposal_id } => { + let note = "Rejected. I will leave the room as it is."; + { + let mut agent = shared.agent.lock().await; + agent.take(proposal_id); + agent.note(note); + } + let revision = shared.session.lock().await.revision(); + broadcast_event( + shared, + revision, + Event::AgentMessage { + message: AgentMessage { + role: AgentRole::Agent, + text: note.into(), + }, + }, + ); + broadcast_event( + shared, + revision, + Event::AgentResolved { + id: proposal_id, + applied: false, + }, + ); + send_agent_result(shared, direct_tx, id).await; + } + Command::AgentReset => { + { + let mut agent = shared.agent.lock().await; + agent.reset(); + } + send_agent_result(shared, direct_tx, id).await; + } + _ => {} + } +} + +async fn apply_agent_immediate(shared: &Shared, command: &Command) { + if matches!(command, Command::Render) { + let input = render_input(shared).await; + let root = shared + .store + .lock() + .expect("project store lock poisoned") + .root() + .to_path_buf(); + let rendered = tokio::task::spawn_blocking(move || render_to_wav(input, &root)).await; + if let Ok(Ok((path, duration_sec))) = rendered { + let revision = shared.session.lock().await.revision(); + broadcast_event(shared, revision, Event::Rendered { path, duration_sec }); + } + return; + } + let outcome = { + let mut session = shared.session.lock().await; + session.apply(command.clone(), Actor::Agent) + }; + if let Ok((result, events)) = outcome { + let revision = match result { + CommandResult::State { state } | CommandResult::Snapshot { state } => state.revision, + }; + for event in events { + broadcast_event(shared, revision, event); + } + } +} + +async fn render_input(shared: &Shared) -> RenderInput { + let session = shared.session.lock().await; + RenderInput { + sections: session.sections().to_vec(), + material: session.material_snapshot(), + gains: session.gains(), + bpm: session.bpm(), + project: session.project_name().to_string(), + } +} + +fn broadcast_event(shared: &Shared, revision: u64, event: Event) { + let message = ServerMessage::Event { revision, event }; + let _ = shared.out.send(Outbound::Text( + serde_json::to_string(&message).expect("event serializes"), + )); +} + +async fn send_agent_result(shared: &Shared, direct_tx: &mpsc::UnboundedSender, id: u64) { + let state: State = shared.session.lock().await.snapshot(); + let message = ServerMessage::Result { + id, + result: CommandResult::State { state }, + }; + let _ = direct_tx.send(Outbound::Text( + serde_json::to_string(&message).expect("agent result serializes"), + )); +} + async fn save_now(shared: &Shared) { let session = shared.session.lock().await; let state = session.snapshot(); @@ -392,6 +613,17 @@ async fn handle(stream: TcpStream, shared: Shared) -> anyhow::Result<()> { ), ) .await?; + let agent_messages = shared.agent.lock().await.messages().to_vec(); + send_out( + &mut sink, + Outbound::Text( + serde_json::to_string(&ServerMessage::AgentHistory { + messages: agent_messages, + }) + .expect("agent history serializes"), + ), + ) + .await?; let (direct_tx, mut direct_rx) = mpsc::unbounded_channel::(); let mut events = shared.out.subscribe(); @@ -588,6 +820,16 @@ async fn handle(stream: TcpStream, shared: Shared) -> anyhow::Result<()> { } continue; } + if matches!( + &command, + Command::AgentAsk { .. } + | Command::AgentApprove { .. } + | Command::AgentReject { .. } + | Command::AgentReset + ) { + handle_agent(&shared, &direct_tx, id, command).await; + continue; + } let should_save = !matches!( &command, Command::Play diff --git a/crates/zhila-protocol/src/lib.rs b/crates/zhila-protocol/src/lib.rs index 183486d..d943c10 100644 --- a/crates/zhila-protocol/src/lib.rs +++ b/crates/zhila-protocol/src/lib.rs @@ -75,6 +75,7 @@ impl VeinId { #[serde(rename_all = "snake_case")] pub enum Actor { Hand, + Agent, Api, Mcp, System, @@ -165,6 +166,9 @@ pub enum ServerMessage { id: u64, core: CoreSummary, }, + AgentHistory { + messages: Vec, + }, Error { id: Option, code: ErrorCode, @@ -219,6 +223,16 @@ pub enum Command { to: u8, }, Render, + AgentAsk { + text: String, + }, + AgentApprove { + id: u64, + }, + AgentReject { + id: u64, + }, + AgentReset, Undo, Redo, /// Journal-only: a core was imported through the binary path. @@ -282,6 +296,32 @@ pub enum Event { path: String, duration_sec: f32, }, + AgentMessage { + message: AgentMessage, + }, + AgentProposal { + id: u64, + description: String, + commands: Vec, + }, + AgentResolved { + id: u64, + applied: bool, + }, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum AgentRole { + User, + Agent, + System, +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct AgentMessage { + pub role: AgentRole, + pub text: String, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] diff --git a/docs/P2.md b/docs/P2.md index 5f8d394..93dc945 100644 --- a/docs/P2.md +++ b/docs/P2.md @@ -28,6 +28,24 @@ Verification: `cargo test -p zhila-engine` (non-silent 16.5 s buffer, correct fr Limits: WAV only, stereo float, fixed 48 kHz and 1.5 s tail; no stems, normalisation or section ranges. -## P2c · agent (next) +## P2c · the choir -An in-app LLM agent on the same verbs, with state/sound context and approval for project edits. +`crates/zhila-daemon/src/agent.rs` is the performer. It receives the project state and live meter as text, a system prompt with the ZHILA rules, and an OpenAI-compatible tool list. Safe verbs (play, stop, strike, strike_face, render) execute immediately; project verbs (tempo, gains, pattern, faces, sections, cuts, undo/redo) are collected into one proposal stored with an id. The hand approves or rejects; approval applies every command with `Actor::Agent`, saves the project, and emits the normal events plus an agent confirmation. + +Wire: `agent_ask { text }`, `agent_approve { id }`, `agent_reject { id }`, `agent_reset`; events `agent_message { role, text }`, `agent_proposal { id, description, commands }`, `agent_resolved { id, applied }`; `agent_history { messages }` on hello. The host keeps the conversation and pending proposals in memory. + +Config: `ZHILA_AGENT_KEY` or `DEEPSEEK_API_KEY` enables the live provider (`ZHILA_AGENT_URL`, default `https://api.deepseek.com`; `ZHILA_AGENT_MODEL`, default `deepseek-chat`). No key, or `ZHILA_AGENT_MOCK=1`, uses the deterministic mock: "tempo" proposes 132 bpm, "listen" strikes the bass, "play"/"stop"/"render" perform, "bass" proposes a gain. + +Surface: the `choir` room (top rail) with the conversation, proposals (commands labelled, approve/reject), a listen button, an input, and a readout of sections, levels, bpm and cores. The agent's voice is Cormorant; the commands are mono. + +Verification: `node scripts/agent-smoke.mjs` (mock: ask → proposal → approve → tempo 132, resolved, history); `npm --prefix ui run agent-ui-smoke` (choir ask/approve, readout 132, screenshot `preview-p2-agent.png`); `cargo test -p zhila-daemon` (mock turn, tool mapping). + +Limits: in-app only, no MCP; one tool round per ask; the conversation is daemon memory; the mock is the default without a key; the host restart clears the chat (the project keeps the approved edits). + +## P2 acceptance + +- Arrangement: four 2-bar sections, 8-bar playback, per-section editing, persisted and undoable. +- Render: a valid 48 kHz stereo float WAV of the arrangement (16.5 s, non-silent, peak 0.442). +- Agent: ask → proposal → approve → a project edit applied with `Actor::Agent`, on the same wire. +- The native Tauri app hosts all of it in-process; the browser path uses the standalone daemon. +- `./scripts/check.sh`, the persistence smoke and the three P2 smokes pass. diff --git a/docs/PLAN.md b/docs/PLAN.md index 9b61679..4c85546 100644 --- a/docs/PLAN.md +++ b/docs/PLAN.md @@ -1,7 +1,7 @@ # ZHILA — план проекта Черновик v1.1 · 1 ноября 2026 -Статус: **P2 в работе** (P0, P1a–P1f, P2a, P2b; см. `P0.md`, `P1.md`, `P2.md`). Демо `reference/demo/` — референс, не кодовая база. Осталось: агент. +Статус: **P2 полностью выполнен** (P0, P1a–P1f, P2a–P2c; см. `P0.md`, `P1.md`, `P2.md`). Демо `reference/demo/` — референс, не кодовая база. Следующая фаза — P3. **Зафиксировано 1 ноября:** descent — основной вид; камень = паттерн; климат — на жилу (концепт погоды остаётся); платформа v1 — Linux; UI — Svelte 5. Журнал — §9. diff --git a/docs/PROTOCOL.md b/docs/PROTOCOL.md index 2731206..5c6ef63 100644 --- a/docs/PROTOCOL.md +++ b/docs/PROTOCOL.md @@ -176,3 +176,7 @@ The Tauri app starts the same host in-process, so the wire contract is unchanged ## P2b additions `Command::render` (no arguments). The host renders the current arrangement to a WAV in the project, answers with the unchanged state, and broadcasts `rendered { path, duration_sec }`. The render is not journaled and does not push undo. The file is 48 kHz stereo 32-bit float. + +## P2c additions + +Agent commands: `agent_ask { text }`, `agent_approve { id }`, `agent_reject { id }`, `agent_reset`. Events: `agent_message { message: { role, text } }` (roles `user`/`agent`/`system`), `agent_proposal { id, description, commands }`, `agent_resolved { id, applied }`. On hello the host sends `agent_history { messages }`. Agent-approved project edits journal as `Actor::agent`; safe performance verbs execute immediately. The provider stays server-side; the key is never in the surface. diff --git a/preview-p2-agent.png b/preview-p2-agent.png new file mode 100644 index 0000000000000000000000000000000000000000..6c91d766f00e56cb10beddd19ee3e611ce6774d6 GIT binary patch literal 252209 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 z�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 literal 0 HcmV?d00001 diff --git a/scripts/agent-smoke.mjs b/scripts/agent-smoke.mjs new file mode 100644 index 0000000..4941e46 --- /dev/null +++ b/scripts/agent-smoke.mjs @@ -0,0 +1,53 @@ +#!/usr/bin/env node +// Mock choir: ask, get a proposal, approve it, see the tempo move. +const ws = new WebSocket('ws://127.0.0.1:4317'); +const pending = new Map(); +const waiters = []; +let proposal = null; +let resolved = null; +let history = null; +const waitFor = (predicate) => new Promise((resolve, reject) => { + const timer = setTimeout(() => reject(new Error('timeout')), 20000); + waiters.push({ predicate, resolve: (value) => { clearTimeout(timer); resolve(value); } }); + const existing = messages.find(predicate); + if (existing) resolve(existing); +}); +const messages = []; +ws.onopen = () => ws.send(JSON.stringify({ type: 'hello', protocol: 1, token: 'dev', client: 'agent-smoke' })); +ws.onmessage = (message) => { + if (typeof message.data !== 'string') return; + const parsed = JSON.parse(message.data); + messages.push(parsed); + if (parsed.type === 'agent_history') history = parsed.messages; + if (parsed.type === 'event' && parsed.event?.kind === 'agent_proposal') proposal = parsed.event; + if (parsed.type === 'event' && parsed.event?.kind === 'agent_resolved') resolved = parsed.event; + if (parsed.type === 'result') pending.set(parsed.id, parsed.result); + for (const waiter of [...waiters]) { + if (waiter.predicate(parsed)) { waiters.splice(waiters.indexOf(waiter), 1); waiter.resolve(parsed); } + } +}; +const send = (id, command) => ws.send(JSON.stringify({ type: 'command', id, command })); +await waitFor((message) => message.type === 'snapshot'); +send(1, { type: 'agent_ask', text: 'raise the tempo a little' }); +await waitFor((message) => message.type === 'event' && message.event?.kind === 'agent_proposal'); +if (!proposal) throw new Error('no proposal'); +if (!proposal.commands.some((command) => command.type === 'set_tempo')) throw new Error('expected a tempo proposal'); +const before = pending.get(1)?.state?.transport?.bpm; +send(2, { type: 'agent_approve', id: proposal.id }); +await waitFor((message) => message.type === 'event' && message.event?.kind === 'agent_resolved'); +const state = pending.get(2)?.state; +if (!resolved?.applied) throw new Error('proposal was not applied'); +if (state?.transport?.bpm !== 132) throw new Error(`tempo did not move: ${state?.transport?.bpm}`); +const userLines = messages.filter((message) => message.type === 'event' && message.event?.kind === 'agent_message' && message.event.message.role === 'user').length; +const agentLines = messages.filter((message) => message.type === 'event' && message.event?.kind === 'agent_message' && message.event.message.role === 'agent').length; +console.log(JSON.stringify({ + history: history?.length ?? 0, + proposal: { id: proposal.id, commands: proposal.commands, description: proposal.description }, + resolved, + bpm: state.transport.bpm, + userLines, + agentLines, + journal: state.journal_len +}, null, 2)); +ws.close(); +console.log('agent smoke passed'); diff --git a/ui/package.json b/ui/package.json index d43d600..0021d7d 100644 --- a/ui/package.json +++ b/ui/package.json @@ -15,6 +15,7 @@ "faces-smoke": "node scripts/faces-smoke.mjs", "arrangement-smoke": "node scripts/arrangement-smoke.mjs", "render-ui-smoke": "node scripts/render-ui-smoke.mjs", + "agent-ui-smoke": "node scripts/agent-ui-smoke.mjs", "restored-smoke": "node scripts/restored-smoke.mjs" }, "devDependencies": { diff --git a/ui/scripts/agent-ui-smoke.mjs b/ui/scripts/agent-ui-smoke.mjs new file mode 100644 index 0000000..3203889 --- /dev/null +++ b/ui/scripts/agent-ui-smoke.mjs @@ -0,0 +1,40 @@ +import { chromium } from 'playwright-core'; +const chrome = process.env.CHROME_PATH ?? '/home/emil/.cache/ms-playwright/chromium-1248/chrome-linux64/chrome'; +const browser = await chromium.launch({ executablePath: chrome, args: ['--no-sandbox'] }); +const page = await browser.newPage({ viewport: { width: 1600, height: 1000 }, deviceScaleFactor: 1 }); +const errors = []; +page.on('pageerror', (error) => errors.push(error.message)); +page.on('console', (message) => { if (message.type() === 'error') errors.push(message.text()); }); +await page.goto('http://127.0.0.1:5173/', { waitUntil: 'load' }); +await page.waitForTimeout(2200); +await page.locator('.room', { hasText: 'choir' }).click(); +await page.waitForTimeout(400); +await page.locator('.choir-form input').fill('raise the tempo a little'); +await page.locator('.choir-send').click(); +await page.waitForSelector('.choir-proposal', { timeout: 20000 }); +const proposal = (await page.locator('.choir-proposal').last().textContent())?.replace(/\s+/g, ' ').trim(); +await page.locator('.choir-proposal-actions button').first().click(); +await page.waitForFunction( + () => document.querySelector('.choir-readout')?.textContent?.includes('132'), + null, + { timeout: 20000 } +); +await page.waitForTimeout(600); +await page.screenshot({ path: '../preview-p2-agent.png' }); +const report = await page.evaluate(() => ({ + readout: document.querySelector('.choir-readout')?.textContent?.replace(/\s+/g, ' ').trim(), + messages: [...document.querySelectorAll('.choir-message')].map((el) => el.textContent?.replace(/\s+/g, ' ').trim()), + proposals: document.querySelectorAll('.choir-proposal').length, + wire: [...document.querySelectorAll('.wire-label')].map((el) => el.textContent).slice(-8), + choir: document.querySelector('.choir-head h1')?.textContent +})); +console.log(JSON.stringify({ proposal, report, errors }, null, 2)); +const failures = []; +if (!proposal?.includes('tempo')) failures.push('no tempo proposal'); +if (!report.readout?.includes('132')) failures.push('tempo did not move in the readout'); +if (!report.messages.some((line) => line?.includes('Applied'))) failures.push('no applied message'); +if (report.proposals !== 0) failures.push('proposal was not resolved'); +if (errors.length) failures.push('console errors'); +await browser.close(); +if (failures.length) { console.error('AGENT UI SMOKE FAILED: ' + failures.join('; ')); process.exit(1); } +console.log('agent UI smoke passed'); diff --git a/ui/src/App.svelte b/ui/src/App.svelte index c42d8d9..f910189 100644 --- a/ui/src/App.svelte +++ b/ui/src/App.svelte @@ -14,6 +14,8 @@ CoreSummary, Event, HelloMessage, + AgentMessage, + AgentProposal, MeterFrame, Seal, State, @@ -23,6 +25,7 @@ WireEntry } from './lib/types'; import { VEINS } from './lib/types'; + import Choir from './components/Choir.svelte'; const WIRE_URL = import.meta.env.VITE_ZHILA_WS ?? 'ws://127.0.0.1:4317'; const TOKEN = import.meta.env.VITE_ZHILA_TOKEN ?? 'dev'; @@ -33,13 +36,16 @@ let selected: VeinId = $state('bass'); let entries: WireEntry[] = $state([]); let hello: HelloMessage | null = $state(null); - let view: 'nave' | 'quarry' = $state('nave'); + let view: 'nave' | 'quarry' | 'choir' = $state('nave'); let selectedCoreId: string | null = $state(null); let selectedFace: number = $state(-1); let selectedRow: number = $state(0); let importing: boolean = $state(false); let rendering: boolean = $state(false); let lastRender: string | null = $state(null); + let agentMessages: AgentMessage[] = $state([]); + let agentProposals: AgentProposal[] = $state([]); + let agentBusy: boolean = $state(false); let bridge: Bridge | null = null; let entryId = 0; let snapshotLogged = false; @@ -114,6 +120,15 @@ } else if (event.kind === 'rendered') { lastRender = event.path; addEntry('recv', 'render', `${event.duration_sec.toFixed(1)} s · ${event.path}`); + } else if (event.kind === 'agent_message') { + agentMessages = [...agentMessages.slice(-60), event.message]; + } else if (event.kind === 'agent_proposal') { + agentProposals = [ + ...agentProposals, + { id: event.id, description: event.description, commands: event.commands } + ]; + } else if (event.kind === 'agent_resolved') { + agentProposals = agentProposals.filter((proposal) => proposal.id !== event.id); } } @@ -221,6 +236,26 @@ void run({ type: 'copy_section', from, to }); } + async function askAgent(text: string) { + if (!bridge || agentBusy) return; + agentBusy = true; + try { + await run({ type: 'agent_ask', text }); + } finally { + agentBusy = false; + } + } + + async function approveAgent(id: number) { + if (!bridge) return; + await run({ type: 'agent_approve', id }); + } + + async function rejectAgent(id: number) { + if (!bridge) return; + await run({ type: 'agent_reject', id }); + } + async function renderProject() { if (!bridge || rendering) return; rendering = true; @@ -297,7 +332,10 @@ onMeter, onEvent, onError, - onImported + onImported, + onAgentHistory: (messages) => { + agentMessages = messages; + } }); bridge.connect(); window.addEventListener('keydown', onKey); @@ -324,13 +362,19 @@ quarry + + hand {view === 'quarry' ? `${project?.cores.length ?? 0} core${(project?.cores.length ?? 0) === 1 ? '' : 's'}` - : project - ? `${project.veins.length} veins` - : 'five veins'} + : view === 'choir' + ? `${agentMessages.length} line${agentMessages.length === 1 ? '' : 's'}` + : project + ? `${project.veins.length} veins` + : 'five veins'}

@@ -355,7 +399,7 @@
{#if view === 'nave'} - {:else} + {:else if view === 'quarry'} + {:else} + {/if} diff --git a/ui/src/app.css b/ui/src/app.css index bd39f17..20cdc42 100644 --- a/ui/src/app.css +++ b/ui/src/app.css @@ -1731,6 +1731,281 @@ button.room { font-weight: 400; } + +/* — choir — */ + +.choir { + position: absolute; + inset: 0; + z-index: 2; + display: flex; + flex-direction: column; + padding: 22px calc(var(--panel-r) + 20px) 0 calc(var(--panel-l) + 22px); + background: + radial-gradient(ellipse at 50% 0%, rgba(232, 64, 42, 0.05), transparent 55%), + var(--resin); + animation: fade 0.7s 0.05s ease both; +} + +.choir-head { + display: flex; + align-items: flex-end; + justify-content: space-between; + gap: 14px; + padding-bottom: 13px; + border-bottom: 1px solid rgba(155, 133, 121, 0.12); +} + +.choir-head h1 { + margin: 0; + font-family: var(--font-display); + font-size: 30px; + font-style: italic; + font-weight: 300; + line-height: 1; + color: var(--bone); +} + +.choir-head p { + margin: 5px 0 0; + font-size: 8.5px; + letter-spacing: 0.12em; + color: var(--ash-2); +} + +.choir-readout { + display: flex; + gap: 12px; + font-size: 8px; + letter-spacing: 0.08em; + color: var(--ash); + font-variant-numeric: tabular-nums; +} + +.choir-log { + flex: 1; + min-height: 0; + overflow-y: auto; + display: flex; + flex-direction: column; + gap: 15px; + padding: 20px 4px 18px 0; + scrollbar-width: thin; + scrollbar-color: rgba(155, 133, 121, 0.3) transparent; +} + +.choir-empty { + max-width: 530px; + margin: 7vh auto 0; + font-family: var(--font-display); + font-size: 22px; + font-style: italic; + font-weight: 300; + line-height: 1.5; + text-align: center; + color: var(--ash); +} + +.choir-message { + max-width: 760px; +} + +.choir-role { + display: block; + margin-bottom: 4px; + font-size: 8px; + letter-spacing: 0.16em; + color: var(--ash-2); +} + +.choir-message p { + margin: 0; + font-family: var(--font-display); + font-size: 20px; + font-weight: 300; + line-height: 1.45; + color: var(--bone); +} + +.choir-message.is-user { + align-self: flex-end; + max-width: 560px; + text-align: right; +} + +.choir-message.is-user .choir-role { + color: var(--ash-2); +} + +.choir-message.is-user p { + font-family: var(--font-mono); + font-size: 11px; + line-height: 1.7; + color: var(--ash); +} + +.choir-proposal { + max-width: 760px; + padding: 12px 0 0; + border-top: 1px solid rgba(232, 64, 42, 0.38); +} + +.choir-proposal-head { + display: flex; + justify-content: space-between; + font-size: 8px; + letter-spacing: 0.12em; + color: var(--ash-2); +} + +.choir-proposal p { + margin: 7px 0 9px; + font-family: var(--font-display); + font-size: 18px; + font-style: italic; + font-weight: 300; + line-height: 1.45; + color: var(--bone); +} + +.choir-moves { + display: flex; + flex-wrap: wrap; + gap: 5px; +} + +.choir-move { + padding: 3px 6px; + border: 1px solid rgba(155, 133, 121, 0.2); + font-size: 8.5px; + color: var(--ash); +} + +.choir-proposal-actions { + display: flex; + gap: 8px; + margin-top: 10px; +} + +.choir-proposal-actions button, +.choir-form button { + padding: 6px 10px; + border: 1px solid rgba(155, 133, 121, 0.25); + font-size: 9px; + letter-spacing: 0.04em; + color: var(--bone); +} + +.choir-proposal-actions button:first-child { + border-color: rgba(232, 64, 42, 0.5); + color: var(--ember); +} + +.choir-proposal-actions button:hover:not(:disabled), +.choir-form button:hover:not(:disabled) { + border-color: var(--ember); +} + +.choir-proposal-actions button:disabled, +.choir-form button:disabled { + opacity: 0.35; + cursor: default; +} + +.choir-live { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + padding: 9px 0; + border-top: 1px solid rgba(155, 133, 121, 0.12); +} + +.choir-sections { + display: flex; + gap: 3px; +} + +.choir-section { + display: inline-flex; + align-items: baseline; + gap: 5px; + padding: 3px 6px; + border: 1px solid rgba(155, 133, 121, 0.16); + font-size: 8px; + color: var(--ash-2); + font-variant-numeric: tabular-nums; +} + +.choir-section b { + font-family: var(--font-display); + font-size: 14px; + font-style: italic; + font-weight: 300; + color: var(--ash); +} + +.choir-section.is-on { + border-color: var(--ember); + color: var(--bone); +} + +.choir-section.is-on b { + color: var(--ember); +} + +.choir-veins { + display: flex; + gap: 9px; +} + +.choir-vein { + display: inline-flex; + align-items: center; + gap: 4px; + font-size: 8px; + color: var(--ash-2); +} + +.choir-vein i { + display: block; + width: 3px; + height: 16px; + background: linear-gradient(to top, rgba(232, 64, 42, 0.85) calc(var(--level) * 100%), rgba(155, 133, 121, 0.12) calc(var(--level) * 100%)); +} + +.choir-form { + display: flex; + gap: 7px; + padding: 11px 0 14px; + border-top: 1px solid rgba(155, 133, 121, 0.12); +} + +.choir-form input { + flex: 1; + min-width: 0; + padding: 8px 10px; + border: 1px solid rgba(155, 133, 121, 0.24); + background: transparent; + color: var(--bone); + font-family: var(--font-mono); + font-size: 11px; +} + +.choir-form input:focus { + outline: none; + border-color: rgba(232, 64, 42, 0.55); +} + +.choir-form input::placeholder { + color: var(--ash-2); +} + +.choir-listen { + border-color: rgba(232, 64, 42, 0.42) !important; + color: var(--ember) !important; +} + /* — responsive — */ @media (max-width: 1240px) { @@ -1780,6 +2055,16 @@ button.room { width: 100%; padding: 20px 18px 24px; } + .choir { + position: relative; + inset: auto; + width: 100%; + min-height: 80vh; + padding: 20px 18px 0; + } + .choir-log { + min-height: 300px; + } .quarry-grid { grid-template-columns: 1fr; } @@ -1940,6 +2225,35 @@ button.room { .quarry { padding: 18px 14px 22px; } + .choir { + min-height: 82vh; + padding: 18px 14px 0; + } + .choir-head { + flex-wrap: wrap; + } + .choir-readout { + display: none; + } + .choir-message p { + font-size: 18px; + } + .choir-message.is-user p { + font-size: 10.5px; + } + .choir-live { + flex-wrap: wrap; + } + .choir-veins { + gap: 6px; + } + .choir-form { + gap: 5px; + } + .choir-form button { + padding: 6px 8px; + font-size: 8.5px; + } .quarry-head h1 { font-size: 26px; } diff --git a/ui/src/components/Choir.svelte b/ui/src/components/Choir.svelte new file mode 100644 index 0000000..9ae22a0 --- /dev/null +++ b/ui/src/components/Choir.svelte @@ -0,0 +1,146 @@ + + + + +
+
+
+

choir

+

the second performer · same verbs · proposals need a hand

+
+
+ {project?.transport.playing ? 'playing' : 'still'} + {Math.round(project?.transport.bpm ?? 128)} bpm + {project?.transport.loop_bars ?? 8} bars + {project?.cores.length ?? 0} cores +
+
+ +
+ {#if messages.length === 0} +

+ Ask the choir to listen, to lift the bass, to open section B, or to render the eight bars. + It hears the levels; project edits arrive as proposals. +

+ {/if} + {#each messages as message} +
+ {message.role === 'agent' ? 'choir' : message.role} +

{message.text}

+
+ {/each} + {#each proposals as proposal} +
+
+ proposal + {proposal.commands.length} move{proposal.commands.length === 1 ? '' : 's'} +
+

{proposal.description}

+
+ {#each proposal.commands as command} + {commandLabel(command)} + {/each} +
+
+ + +
+
+ {/each} +
+ +
+
+ {#each project?.arrangement ?? [] as section, index} + + {String.fromCharCode(65 + index)} + {notes(section)} + + {/each} +
+
+ {#each VEINS as vein, index} + + + {vein.slice(0, 3)} + + {/each} +
+
+ +
{ + event.preventDefault(); + send(); + }} + > + + + +
+
diff --git a/ui/src/lib/bridge.ts b/ui/src/lib/bridge.ts index 75f1796..fcf5233 100644 --- a/ui/src/lib/bridge.ts +++ b/ui/src/lib/bridge.ts @@ -7,6 +7,7 @@ import type { MeterFrame, Seal, ServerMessage, + AgentMessage, State, Status } from './types'; @@ -20,6 +21,7 @@ export interface BridgeHandlers { onEvent: (event: Event) => void; onError: (message: string) => void; onImported?: (core: CoreSummary) => void; + onAgentHistory?: (messages: AgentMessage[]) => void; } interface Pending { @@ -190,6 +192,10 @@ export class Bridge { case 'event': this.handlers.onEvent(message.event); break; + case 'agent_history': { + this.handlers.onAgentHistory?.(message.messages); + break; + } case 'imported': { const pending = this.imports.get(message.id); if (!pending) break; diff --git a/ui/src/lib/format.ts b/ui/src/lib/format.ts index c7d001d..46b321f 100644 --- a/ui/src/lib/format.ts +++ b/ui/src/lib/format.ts @@ -38,6 +38,10 @@ export function commandLabel(command: Command): string { case 'clear_section': return `clear section ${String.fromCharCode(65 + command.index)}`; case 'copy_section': return `copy ${String.fromCharCode(65 + command.from)} → ${String.fromCharCode(65 + command.to)}`; case 'render': return 'render wav'; + case 'agent_ask': return `choir: ${command.text.slice(0, 42)}`; + case 'agent_approve': return `approve ${command.id}`; + case 'agent_reject': return `reject ${command.id}`; + case 'agent_reset': return 'reset choir'; case 'undo': return 'undo'; case 'redo': return 'redo'; case 'get_snapshot': return 'snapshot'; diff --git a/ui/src/lib/types.ts b/ui/src/lib/types.ts index ccdb238..9574d1f 100644 --- a/ui/src/lib/types.ts +++ b/ui/src/lib/types.ts @@ -85,7 +85,10 @@ export type Event = | { kind: 'history'; can_undo: boolean; can_redo: boolean } | { kind: 'core_faces'; core: CoreSummary } | { kind: 'arrangement'; sections: Pattern[]; active: number } - | { kind: 'rendered'; path: string; duration_sec: number }; + | { kind: 'rendered'; path: string; duration_sec: number } + | { kind: 'agent_message'; message: AgentMessage } + | { kind: 'agent_proposal'; id: number; description: string; commands: Command[] } + | { kind: 'agent_resolved'; id: number; applied: boolean }; export type Command = | { type: 'get_snapshot' } @@ -102,6 +105,10 @@ export type Command = | { type: 'clear_section'; index: number } | { type: 'copy_section'; from: number; to: number } | { type: 'render' } + | { type: 'agent_ask'; text: string } + | { type: 'agent_approve'; id: number } + | { type: 'agent_reject'; id: number } + | { type: 'agent_reset' } | { type: 'undo' } | { type: 'redo' }; @@ -147,7 +154,25 @@ export interface ImportedMessage { core: CoreSummary; } -export type ServerMessage = HelloMessage | SnapshotMessage | EventMessage | ResultMessage | ErrorMessage | ImportedMessage; +export type AgentRole = 'user' | 'agent' | 'system'; + +export interface AgentMessage { + role: AgentRole; + text: string; +} + +export interface AgentProposal { + id: number; + description: string; + commands: Command[]; +} + +export interface AgentHistoryMessage { + type: 'agent_history'; + messages: AgentMessage[]; +} + +export type ServerMessage = HelloMessage | SnapshotMessage | EventMessage | ResultMessage | ErrorMessage | ImportedMessage | AgentHistoryMessage; export interface MeterFrame { bar: number;