diff --git a/Cargo.lock b/Cargo.lock index eb272758c..22b1c35d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1747,7 +1747,7 @@ dependencies = [ [[package]] name = "cloud-service" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" dependencies = [ "anyhow", "async-trait", @@ -1761,7 +1761,6 @@ dependencies = [ "darling", "figment", "futures", - "futures-util", "golem-api-grpc 0.0.0", "golem-common 0.0.0", "golem-service-base", @@ -3746,7 +3745,7 @@ dependencies = [ [[package]] name = "golem-api-grpc" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" dependencies = [ "async-trait", "bincode", @@ -3763,16 +3762,16 @@ dependencies = [ [[package]] name = "golem-api-grpc" -version = "1.3.0-dev.21" +version = "1.3.0-dev.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "204ac174cb1337917bc2130fd9741bcf35d5f88fa9582c44ca086894dfe468ba" +checksum = "75dea31ecab145717c25e006c0f46d50e344ca5f888040c7f83c6ee2ca5426b9" dependencies = [ "async-trait", "bincode", "bytes 1.10.1", "cargo_metadata 0.19.2", - "golem-wasm-ast 1.3.0-dev.21", - "golem-wasm-rpc 1.3.0-dev.21", + "golem-wasm-ast 1.3.0-dev.25", + "golem-wasm-rpc 1.3.0-dev.25", "prost 0.13.5", "prost-types 0.13.5", "tonic", @@ -3811,13 +3810,13 @@ dependencies = [ "futures-util", "fuzzy-matcher", "golem-client", - "golem-common 1.3.0-dev.21", - "golem-rib 1.3.0-dev.21", + "golem-common 1.3.0-dev.25", + "golem-rib 1.3.0-dev.25", "golem-rib-repl", "golem-templates", - "golem-wasm-ast 1.3.0-dev.21", - "golem-wasm-rpc 1.3.0-dev.21", - "golem-wasm-rpc-derive 1.3.0-dev.21", + "golem-wasm-ast 1.3.0-dev.25", + "golem-wasm-rpc 1.3.0-dev.25", + "golem-wasm-rpc-derive 1.3.0-dev.25", "golem-wit", "heck 0.5.0", "humansize", @@ -3884,17 +3883,17 @@ dependencies = [ [[package]] name = "golem-client" -version = "1.3.0-dev.21" +version = "1.3.0-dev.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "017ea90814f90e9864d011344070e7e6287f2620d523d489399c22a2d9db3535" +checksum = "ec6975892a26533c5c39af0b83802304cb4d85ab086cea5b42f49b0e01edd0b4" dependencies = [ "async-trait", "bytes 1.10.1", "chrono", - "golem-common 1.3.0-dev.21", + "golem-common 1.3.0-dev.25", "golem-openapi-client-generator", - "golem-wasm-ast 1.3.0-dev.21", - "golem-wasm-rpc 1.3.0-dev.21", + "golem-wasm-ast 1.3.0-dev.25", + "golem-wasm-rpc 1.3.0-dev.25", "http 1.3.1", "reqwest 0.12.20", "serde", @@ -3908,7 +3907,7 @@ dependencies = [ [[package]] name = "golem-common" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" dependencies = [ "anyhow", "async-trait", @@ -3928,6 +3927,7 @@ dependencies = [ "golem-wasm-ast 0.0.0", "golem-wasm-rpc 0.0.0", "golem-wasm-rpc-derive 0.0.0", + "heck 0.5.0", "http 1.3.1", "humantime-serde", "iso8601-timestamp", @@ -3966,9 +3966,9 @@ dependencies = [ [[package]] name = "golem-common" -version = "1.3.0-dev.21" +version = "1.3.0-dev.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d6ac398e7e07d5e117954e72f8e1dcf550f306d8678d29802e2f4535750ef05" +checksum = "614fc5778362cfa6a7c368520ac726fe01a3006b2fcbd16db7ef4033638a75ce" dependencies = [ "anyhow", "async-trait", @@ -3983,11 +3983,12 @@ dependencies = [ "derive_more 2.0.1", "figment", "fred", - "golem-api-grpc 1.3.0-dev.21", - "golem-rib 1.3.0-dev.21", - "golem-wasm-ast 1.3.0-dev.21", - "golem-wasm-rpc 1.3.0-dev.21", - "golem-wasm-rpc-derive 1.3.0-dev.21", + "golem-api-grpc 1.3.0-dev.25", + "golem-rib 1.3.0-dev.25", + "golem-wasm-ast 1.3.0-dev.25", + "golem-wasm-rpc 1.3.0-dev.25", + "golem-wasm-rpc-derive 1.3.0-dev.25", + "heck 0.5.0", "http 1.3.1", "humantime-serde", "iso8601-timestamp", @@ -4022,16 +4023,17 @@ dependencies = [ "url", "uuid", "wasmtime", + "wasmtime-wasi", + "wit-parser 0.235.0", ] [[package]] name = "golem-component-compilation-service" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" dependencies = [ "async-trait", "futures", - "futures-util", "golem-api-grpc 0.0.0", "golem-common 0.0.0", "golem-service-base", @@ -4053,7 +4055,7 @@ dependencies = [ [[package]] name = "golem-component-service" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" dependencies = [ "anyhow", "async-trait", @@ -4066,7 +4068,6 @@ dependencies = [ "darling", "figment", "futures", - "futures-util", "golem-api-grpc 0.0.0", "golem-common 0.0.0", "golem-rib 0.0.0", @@ -4136,7 +4137,7 @@ checksum = "1270134f61673cd221121fad55752b4692a5bc3f7a5f9b30e4d45d7b2e044946" [[package]] name = "golem-rib" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" dependencies = [ "async-trait", "bigdecimal", @@ -4155,17 +4156,17 @@ dependencies = [ [[package]] name = "golem-rib" -version = "1.3.0-dev.21" +version = "1.3.0-dev.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1029a76bc6be6ee7655c18ca35c3a12618a88288e9bd74231d4b8074bbb9e32b" +checksum = "5f08b047b501955e1c757218b74a04d82c3a881abf3001c98f7c4c7afa7dfd04" dependencies = [ "async-trait", "bigdecimal", "bincode", "combine", - "golem-api-grpc 1.3.0-dev.21", - "golem-wasm-ast 1.3.0-dev.21", - "golem-wasm-rpc 1.3.0-dev.21", + "golem-api-grpc 1.3.0-dev.25", + "golem-wasm-ast 1.3.0-dev.25", + "golem-wasm-rpc 1.3.0-dev.25", "poem-openapi", "poem-openapi-derive", "semver", @@ -4176,9 +4177,9 @@ dependencies = [ [[package]] name = "golem-rib-repl" -version = "1.3.0-dev.21" +version = "1.3.0-dev.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14bf9e0899e8df18954fe1ab4a5d431f8faed11202075b8f0163dce5cc50e53a" +checksum = "0e5e0e2c5c80195d070f72bdf12b6c303ec00a6ffaa0bbc2ad43e009e6c165f4" dependencies = [ "anyhow", "async-trait", @@ -4187,9 +4188,9 @@ dependencies = [ "convert_case 0.8.0", "crossterm 0.28.1", "dirs 4.0.0", - "golem-rib 1.3.0-dev.21", - "golem-wasm-ast 1.3.0-dev.21", - "golem-wasm-rpc 1.3.0-dev.21", + "golem-rib 1.3.0-dev.25", + "golem-wasm-ast 1.3.0-dev.25", + "golem-wasm-rpc 1.3.0-dev.25", "prometheus 0.13.4", "rustyline", "serde_json", @@ -4204,7 +4205,7 @@ dependencies = [ [[package]] name = "golem-service-base" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" dependencies = [ "anyhow", "applying", @@ -4260,7 +4261,7 @@ dependencies = [ [[package]] name = "golem-shard-manager" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" dependencies = [ "anyhow", "async-rwlock", @@ -4320,7 +4321,7 @@ dependencies = [ [[package]] name = "golem-wasm-ast" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" dependencies = [ "bincode", "bincode_derive", @@ -4339,15 +4340,15 @@ dependencies = [ "wasm-metadata 0.227.1", "wasm-wave", "wasmparser 0.227.1", - "wit-component 0.229.0", - "wit-parser 0.229.0", + "wit-component 0.235.0", + "wit-parser 0.235.0", ] [[package]] name = "golem-wasm-ast" -version = "1.3.0-dev.21" +version = "1.3.0-dev.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1f1498e5eef4c273a4ac6525908f3b5885fe56b5d41b97ecb56e9a3a1d120e6" +checksum = "ad0fb3fc254e8815ef90b8a7c3fcfc14c72803197dab9582e5fb1c11fdbb6e51" dependencies = [ "bincode", "bincode_derive", @@ -4366,14 +4367,14 @@ dependencies = [ "wasm-metadata 0.227.1", "wasm-wave", "wasmparser 0.227.1", - "wit-component 0.229.0", - "wit-parser 0.229.0", + "wit-component 0.235.0", + "wit-parser 0.235.0", ] [[package]] name = "golem-wasm-rpc" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" dependencies = [ "arbitrary", "async-recursion", @@ -4402,9 +4403,9 @@ dependencies = [ [[package]] name = "golem-wasm-rpc" -version = "1.3.0-dev.21" +version = "1.3.0-dev.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb59ace8286dd608a9efe2ed55075aad9b21f0e3f5a1417754e3dc5feb1b315" +checksum = "e1657acd01d3238efb2f7e09e11d17fdd765c4e921d4f062d951ea70b8dd40f4" dependencies = [ "arbitrary", "async-recursion", @@ -4415,7 +4416,7 @@ dependencies = [ "cargo_metadata 0.19.2", "chrono", "git-version", - "golem-wasm-ast 1.3.0-dev.21", + "golem-wasm-ast 1.3.0-dev.25", "poem-openapi", "poem-openapi-derive", "prost 0.13.5", @@ -4432,7 +4433,7 @@ dependencies = [ [[package]] name = "golem-wasm-rpc-derive" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -4442,9 +4443,9 @@ dependencies = [ [[package]] name = "golem-wasm-rpc-derive" -version = "1.3.0-dev.21" +version = "1.3.0-dev.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fd44d020dd03bd8c483a6a4c84e78017f8241229ee753d2e6c533c77d96919e" +checksum = "2d07778973734f7b3c4d87d277396f52e8d832bd45c47524946f8e24be893010" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -4454,14 +4455,14 @@ dependencies = [ [[package]] name = "golem-wit" -version = "1.3.0-dev.5" +version = "1.3.0-dev.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6552cbc30303cdbed1ac24a9352287fbc8e97b26a28472b3972e296e5509734" +checksum = "02e0ac59fbab5d8b57743298453cccbce2408a6cca2e1bbfba75a9b922c36546" [[package]] name = "golem-worker-executor" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" dependencies = [ "anyhow", "applying", @@ -4485,7 +4486,6 @@ dependencies = [ "fred", "fs-set-times", "futures", - "futures-util", "gethostname", "golem-api-grpc 0.0.0", "golem-common 0.0.0", @@ -4537,7 +4537,7 @@ dependencies = [ [[package]] name = "golem-worker-service" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" dependencies = [ "anyhow", "async-trait", @@ -4551,7 +4551,6 @@ dependencies = [ "figment", "fred", "futures", - "futures-util", "golem-api-grpc 0.0.0", "golem-common 0.0.0", "golem-rib 0.0.0", @@ -4563,6 +4562,7 @@ dependencies = [ "http-body-util", "hyper 1.6.0", "include_dir", + "indexmap 2.10.0", "mime", "mime_guess", "nom 7.1.3", @@ -11293,18 +11293,6 @@ dependencies = [ "wasmparser 0.228.0", ] -[[package]] -name = "wasm-metadata" -version = "0.229.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78fdb7d29a79191ab363dc90c1ddd3a1e880ffd5348d92d48482393a9e6c5f4d" -dependencies = [ - "anyhow", - "indexmap 2.10.0", - "wasm-encoder 0.229.0", - "wasmparser 0.229.0", -] - [[package]] name = "wasm-metadata" version = "0.235.0" @@ -11409,14 +11397,14 @@ dependencies = [ [[package]] name = "wasm-wave" -version = "0.229.0" +version = "0.235.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd33c30a68c41ff354d7b3741f5d2d3dfbf8eb52033176bb01364cbdf016c17c" +checksum = "034bc908dc5c1257ffc63b42c7ac7039092bd369e858c5e78e3242b662a8b7d1" dependencies = [ "indexmap 2.10.0", "logos", "thiserror 1.0.69", - "wit-parser 0.229.0", + "wit-parser 0.235.0", ] [[package]] @@ -12583,25 +12571,6 @@ dependencies = [ "wit-parser 0.227.1", ] -[[package]] -name = "wit-component" -version = "0.229.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f550067740e223bfe6c4878998e81cdbe2529dd9a793dc49248dd6613394e8b" -dependencies = [ - "anyhow", - "bitflags 2.9.1", - "indexmap 2.10.0", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder 0.229.0", - "wasm-metadata 0.229.0", - "wasmparser 0.229.0", - "wit-parser 0.229.0", -] - [[package]] name = "wit-component" version = "0.235.0" @@ -13048,9 +13017,9 @@ dependencies = [ [[patch.unused]] name = "golem-client" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" [[patch.unused]] name = "golem-rib-repl" version = "0.0.0" -source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.21#02b343f95f50b29b0c3f60b6e61c59fb59409cde" +source = "git+https://github.com/golemcloud/golem.git?tag=v1.3.0-dev.25#3b14a53f776b3e9430c69d898c34bc8c29b68a9c" diff --git a/Cargo.toml b/Cargo.toml index ec9e92e04..beaeb3a2f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,22 +11,22 @@ license-file = "LICENSE" [workspace.dependencies] # Golem dep -golem-client = "=1.3.0-dev.21" -golem-common = "=1.3.0-dev.21" -golem-rib = "=1.3.0-dev.21" -golem-rib-repl = "=1.3.0-dev.21" -golem-service-base = "=1.3.0-dev.21" -golem-wasm-ast = { version = "=1.3.0-dev.21", default-features = false, features = [ +golem-client = "=1.3.0-dev.25" +golem-common = { version = "=1.3.0-dev.25", features = ["agent-extraction"] } +golem-rib = "=1.3.0-dev.25" +golem-rib-repl = "=1.3.0-dev.25" +golem-service-base = "=1.3.0-dev.25" +golem-wasm-ast = { version = "=1.3.0-dev.25", default-features = false, features = [ "analysis", "wave", ] } -golem-wasm-rpc = { version = "=1.3.0-dev.21", default-features = false, features = [ +golem-wasm-rpc = { version = "=1.3.0-dev.25", default-features = false, features = [ "host", ] } -golem-wasm-rpc-derive = "=1.3.0-dev.21" +golem-wasm-rpc-derive = "=1.3.0-dev.25" golem-rdbms = "=0.0.2" -golem-wit = "=1.3.0-dev.5" +golem-wit = "=1.3.0-dev.6" # External deps anyhow = "1.0.97" @@ -135,14 +135,14 @@ wit-encoder = "0.235" wit-parser = "0.235" [patch.crates-io] -golem-client = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.21" } -golem-common = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.21" } -golem-rib = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.21" } -golem-rib-repl = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.21" } -golem-service-base = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.21" } -golem-wasm-ast = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.21" } -golem-wasm-rpc = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.21" } -golem-wasm-rpc-derive = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.21" } +golem-client = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.25" } +golem-common = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.25" } +golem-rib = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.25" } +golem-rib-repl = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.25" } +golem-service-base = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.25" } +golem-wasm-ast = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.25" } +golem-wasm-rpc = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.25" } +golem-wasm-rpc-derive = { git = "https://github.com/golemcloud/golem.git", tag = "v1.3.0-dev.25" } redis-protocol = { git = "https://github.com/golemcloud/redis-protocol.rs.git", branch = "unpin-cookie-factory" } wasmtime = { git = "https://github.com/golemcloud/wasmtime.git", branch = "golem-wasmtime-v33.0.0" } diff --git a/golem-cli/agent_wrapper/guest.mbt b/golem-cli/agent_wrapper/guest.mbt index 91292563a..614d3e29c 100644 --- a/golem-cli/agent_wrapper/guest.mbt +++ b/golem-cli/agent_wrapper/guest.mbt @@ -91,3 +91,9 @@ pub fn discover_agents() -> Array[Agent] { pub fn discover_agent_types() -> Array[@common.AgentType] { @guest.discover_agent_types() } + +///| +pub fn invoke_agent(agent_type : String, agent_id : String, method_name : String, input : @common.DataValue) -> Result[@common.DataValue, @common.AgentError] { + let inner_agent = @guest.get_agent(agent_type, agent_id) + inner_agent.invoke(method_name, input) +} \ No newline at end of file diff --git a/golem-cli/src/command_handler/partial_match.rs b/golem-cli/src/command_handler/partial_match.rs index 5327500ee..91148200b 100644 --- a/golem-cli/src/command_handler/partial_match.rs +++ b/golem-cli/src/command_handler/partial_match.rs @@ -180,10 +180,7 @@ impl ErrorHandler { { log_text_view(&AvailableFunctionNamesHelp { component_name: worker_name_match.component_name.0, - function_names: show_exported_functions( - component.metadata.exports.as_slice(), - true, - ), + function_names: show_exported_functions(component.metadata.exports(), true), }); logln(""); } diff --git a/golem-cli/src/command_handler/rib_repl.rs b/golem-cli/src/command_handler/rib_repl.rs index ec36962d0..b0fe00ea3 100644 --- a/golem-cli/src/command_handler/rib_repl.rs +++ b/golem-cli/src/command_handler/rib_repl.rs @@ -80,15 +80,15 @@ impl RibReplHandler { let component_dependency_key = ComponentDependencyKey { component_name: component.component_name.0.clone(), component_id: component.versioned_component_id.component_id, - root_package_name: component.metadata.root_package_name.clone(), - root_package_version: component.metadata.root_package_version.clone(), + root_package_name: component.metadata.root_package_name().clone(), + root_package_version: component.metadata.root_package_version().clone(), }; self.ctx .set_rib_repl_dependencies(ReplComponentDependencies { component_dependencies: vec![ComponentDependency::new( component_dependency_key, - component.metadata.exports.clone(), + component.metadata.exports().to_vec(), )], }) .await; diff --git a/golem-cli/src/command_handler/worker/mod.rs b/golem-cli/src/command_handler/worker/mod.rs index 2b1d21445..871e2d392 100644 --- a/golem-cli/src/command_handler/worker/mod.rs +++ b/golem-cli/src/command_handler/worker/mod.rs @@ -57,6 +57,7 @@ use golem_client::model::{ WorkerCreationRequest as WorkerCreationRequestCloud, }; use golem_common::model::public_oplog::OplogCursor; +use golem_common::model::worker::WasiConfigVars; use golem_wasm_ast::analysis::AnalysedType; use golem_wasm_rpc::json::OptionallyValueAndTypeJson; use golem_wasm_rpc::{parse_value_and_type, ValueAndType}; @@ -278,7 +279,7 @@ impl WorkerCommandHandler { .await?; let matched_function_name = - fuzzy_match_function_name(function_name, &component.metadata.exports); + fuzzy_match_function_name(function_name, component.metadata.exports()); let function_name = match matched_function_name { Ok(match_) => { log_fuzzy_match(&match_); @@ -286,7 +287,7 @@ impl WorkerCommandHandler { } Err(error) => { let component_functions = - show_exported_functions(&component.metadata.exports, false); + show_exported_functions(component.metadata.exports(), false); match error { Error::Ambiguous { @@ -808,7 +809,7 @@ impl WorkerCommandHandler { .await .map_service_error()?; - WorkerMetadata::from_cloud(worker_name_match.component_name, result) + WorkerMetadata::from(worker_name_match.component_name, result) }; self.ctx @@ -861,6 +862,7 @@ impl WorkerCommandHandler { name: worker_name, args, env, + wasi_config_vars: WasiConfigVars::default(), }, ) .await @@ -1001,7 +1003,7 @@ impl WorkerCommandHandler { .await .map_service_error()?; - Ok(WorkerMetadata::from_cloud(component_name.clone(), result)) + Ok(WorkerMetadata::from(component_name.clone(), result)) } async fn delete(&self, component_id: Uuid, worker_name: &str) -> anyhow::Result<()> { @@ -1369,7 +1371,7 @@ impl WorkerCommandHandler { results .workers .into_iter() - .map(|meta| WorkerMetadata::from_cloud(component_name.clone(), meta)), + .map(|meta| WorkerMetadata::from(component_name.clone(), meta)), ); results.cursor diff --git a/golem-cli/src/model/agent/extraction.rs b/golem-cli/src/model/agent/extraction.rs index ea1f0e99e..1e83654a3 100644 --- a/golem-cli/src/model/agent/extraction.rs +++ b/golem-cli/src/model/agent/extraction.rs @@ -13,23 +13,8 @@ // limitations under the License. use crate::log::{log_action, LogColorize}; -use anyhow::anyhow; use golem_common::model::agent::AgentType; -use rib::ParsedFunctionName; use std::path::Path; -use std::sync::{Arc, Mutex}; -use tracing::{debug, error}; -use wasmtime::component::types::{ComponentInstance, ComponentItem}; -use wasmtime::component::{ - Component, Func, Instance, Linker, LinkerInstance, ResourceTable, ResourceType, Type, -}; -use wasmtime::{AsContextMut, Engine, Store}; -use wasmtime_wasi::p2::{WasiCtx, WasiView}; -use wasmtime_wasi::{IoCtx, IoView}; -use wit_parser::{PackageId, Resolve, WorldItem}; - -const INTERFACE_NAME: &str = "golem:agent/guest"; -const FUNCTION_NAME: &str = "discover-agent-types"; /// Extracts the implemented agent types from the given WASM component, assuming it implements the `golem:agent/guest` interface. /// If it does not, it fails. @@ -45,250 +30,5 @@ pub async fn extract_agent_types(wasm_path: &Path) -> anyhow::Result = Linker::new(&engine); - linker.allow_shadowing(true); - - wasmtime_wasi::p2::add_to_linker_with_options_async( - &mut linker, - &wasmtime_wasi::p2::bindings::LinkOptions::default(), - )?; - - let (wasi, io) = WasiCtx::builder().inherit_stdout().inherit_stderr().build(); - let host = Host { - table: Arc::new(Mutex::new(ResourceTable::new())), - wasi: Arc::new(Mutex::new(wasi)), - io: Arc::new(Mutex::new(io)), - }; - - let component = Component::from_file(&engine, wasm_path)?; - let mut store = Store::new(&engine, host); - - let mut linker_instance = linker.root(); - let component_type = component.component_type(); - for (name, item) in component_type.imports(&engine) { - let name = name.to_string(); - match item { - ComponentItem::ComponentFunc(_) => {} - ComponentItem::CoreFunc(_) => {} - ComponentItem::Module(_) => {} - ComponentItem::Component(_) => {} - ComponentItem::ComponentInstance(ref inst) => { - dynamic_import(&name, &engine, &mut linker_instance, inst)?; - } - ComponentItem::Type(_) => {} - ComponentItem::Resource(_) => {} - } - } - - debug!("Instantiating component"); - let instance = linker.instantiate_async(&mut store, &component).await?; - - let func = find_discover_function(&mut store, &instance)?; - let typed_func = func.typed::<(), ( - Vec, - )>(&mut store)?; - let results = typed_func.call_async(&mut store, ()).await?; - typed_func.post_return_async(&mut store).await?; - - let agent_types = results.0.into_iter().map(AgentType::from).collect(); - debug!("Discovered agent types: {:#?}", agent_types); - Ok(agent_types) -} - -/// Checks if the given resolved component implements the `golem:agent/guest` interface. -pub fn is_agent( - resolve: &Resolve, - root_package_id: &PackageId, - world: Option<&str>, -) -> anyhow::Result { - let golem_agent_package = wit_parser::PackageName { - namespace: "golem".to_string(), - name: "agent".to_string(), - version: None, - }; - const GOLEM_AGENT_INTERFACE_NAME: &str = "guest"; - - let world_id = resolve.select_world(*root_package_id, world)?; - let world = resolve - .worlds - .get(world_id) - .ok_or_else(|| anyhow!("Could not get {world_id:?}"))?; - let world_name = &world.name; - for (key, item) in &world.exports { - if let WorldItem::Interface { id, .. } = &item { - let interface = resolve.interfaces.get(*id).ok_or_else(|| { - anyhow!("Could not get exported interface {key:?} exported from world {world_name}") - })?; - if let Some(interface_name) = interface.name.as_ref() { - if interface_name == GOLEM_AGENT_INTERFACE_NAME { - if let Some(package_id) = &interface.package { - let package = resolve.packages.get(*package_id).ok_or_else(|| { - anyhow!( - "Could not get owner package of exported interface {interface_name}" - ) - })?; - - if package.name == golem_agent_package { - return Ok(true); - } - } - } - } - } - } - - Ok(false) -} - -fn find_discover_function( - mut store: impl AsContextMut, - instance: &Instance, -) -> anyhow::Result { - let (_, exported_instance_id) = instance - .get_export(&mut store, None, INTERFACE_NAME) - .ok_or_else(|| anyhow!("Interface {INTERFACE_NAME} not found"))?; - let (_, func_id) = instance - .get_export(&mut store, Some(&exported_instance_id), FUNCTION_NAME) - .ok_or_else(|| { - anyhow!("Function {FUNCTION_NAME} not found in interface {INTERFACE_NAME}") - })?; - let func = instance - .get_func(&mut store, func_id) - .ok_or_else(|| anyhow!("Function {FUNCTION_NAME} not found"))?; - - Ok(func) -} - -#[derive(Clone)] -struct Host { - pub table: Arc>, - pub wasi: Arc>, - pub io: Arc>, + golem_common::model::agent::extraction::extract_agent_types(wasm_path).await } - -impl IoView for Host { - fn table(&mut self) -> &mut ResourceTable { - Arc::get_mut(&mut self.table) - .expect("ResourceTable is shared and cannot be borrowed mutably") - .get_mut() - .expect("ResourceTable mutex must never fail") - } - - fn io_ctx(&mut self) -> &mut IoCtx { - Arc::get_mut(&mut self.io) - .expect("IoCtx is shared and cannot be borrowed mutably") - .get_mut() - .expect("IoCtx mutex must never fail") - } -} - -impl WasiView for Host { - fn ctx(&mut self) -> &mut WasiCtx { - Arc::get_mut(&mut self.wasi) - .expect("WasiCtx is shared and cannot be borrowed mutably") - .get_mut() - .expect("WasiCtx mutex must never fail") - } -} - -fn dynamic_import( - name: &str, - engine: &Engine, - root: &mut LinkerInstance, - inst: &ComponentInstance, -) -> anyhow::Result<()> { - if name.starts_with("wasi:cli") - || name.starts_with("wasi:clocks") - || name.starts_with("wasi:filesystem") - || name.starts_with("wasi:io") - || name.starts_with("wasi:random") - || name.starts_with("wasi:sockets") - { - // These does not have to be mocked, we allow them through wasmtime-wasi - Ok(()) - } else { - let mut instance = root.instance(name)?; - let mut functions = Vec::new(); - - for (inner_name, inner_item) in inst.exports(engine) { - let name = name.to_owned(); - let inner_name = inner_name.to_owned(); - - match inner_item { - ComponentItem::ComponentFunc(fun) => { - let param_types: Vec = fun.params().map(|(_, t)| t).collect(); - let result_types: Vec = fun.results().collect(); - - let function_name = ParsedFunctionName::parse(format!( - "{name}.{{{inner_name}}}" - )) - .map_err(|err| anyhow!(format!("Unexpected linking error: {name}.{{{inner_name}}} is not a valid function name: {err}")))?; - - functions.push(FunctionInfo { - name: function_name, - params: param_types, - results: result_types, - }); - } - ComponentItem::CoreFunc(_) => {} - ComponentItem::Module(_) => {} - ComponentItem::Component(_) => {} - ComponentItem::ComponentInstance(_) => {} - ComponentItem::Type(_) => {} - ComponentItem::Resource(_resource) => { - if &inner_name != "pollable" - && &inner_name != "input-stream" - && &inner_name != "output-stream" - { - // TODO: figure out how to do this properly - instance.resource( - &inner_name, - ResourceType::host::(), - |_store, _rep| Ok(()), - )?; - } - } - } - } - - for function in functions { - instance.func_new_async( - &function.name.function.function_name(), - move |_store, _params, _results| { - let function_name = function.name.clone(); - Box::new(async move { - error!( - "External function called in get-agent-definitions: {function_name}", - ); - Err(anyhow!( - "External function called in get-agent-definitions: {function_name}" - )) - }) - }, - )?; - } - - Ok(()) - } -} - -#[allow(unused)] -struct MethodInfo { - method_name: String, - params: Vec, - results: Vec, -} - -#[allow(unused)] -struct FunctionInfo { - name: ParsedFunctionName, - params: Vec, - results: Vec, -} - -struct ResourceEntry; diff --git a/golem-cli/src/model/agent/wit.rs b/golem-cli/src/model/agent/wit.rs index 879c68ea3..3ec84754d 100644 --- a/golem-cli/src/model/agent/wit.rs +++ b/golem-cli/src/model/agent/wit.rs @@ -644,6 +644,7 @@ fn add_golem_host(resolve: &mut Resolve) -> anyhow::Result { fn add_golem_agent(resolve: &mut Resolve) -> anyhow::Result { const GOLEM_AGENT_GUEST_WIT: &str = include_str!("../../../wit/deps/golem-agent/guest.wit"); + const GOLEM_AGENT_HOST_WIT: &str = include_str!("../../../wit/deps/golem-agent/host.wit"); const GOLEM_AGENT_COMMON_WIT: &str = include_str!("../../../wit/deps/golem-agent/common.wit"); let mut golem_agent_source = SourceMap::default(); @@ -655,6 +656,10 @@ fn add_golem_agent(resolve: &mut Resolve) -> anyhow::Result { Path::new("wit/deps/golem-agent/guest.wit"), GOLEM_AGENT_GUEST_WIT, ); + golem_agent_source.push( + Path::new("wit/deps/golem-agent/host.wit"), + GOLEM_AGENT_HOST_WIT, + ); let golem_agent_pkg_group = golem_agent_source.parse()?; resolve.push_group(golem_agent_pkg_group) } diff --git a/golem-cli/src/model/component.rs b/golem-cli/src/model/component.rs index 18c5f4474..497a2190f 100644 --- a/golem-cli/src/model/component.rs +++ b/golem-cli/src/model/component.rs @@ -179,14 +179,14 @@ impl ComponentView { component_size: value.component_size, created_at: value.created_at, project_id: value.project_id, - exports: show_exported_functions(&value.metadata.exports, true), + exports: show_exported_functions(value.metadata.exports(), true), dynamic_linking: value .metadata - .dynamic_linking - .into_iter() + .dynamic_linking() + .iter() .map(|(name, link)| { ( - name, + name.clone(), match link { DynamicLinkedInstance::WasmRpc(links) => links .targets @@ -363,7 +363,7 @@ fn resolve_function<'t>( let parsed = ParsedFunctionName::parse(function).map_err(|err| anyhow!(err))?; let mut functions = Vec::new(); - for export in &component.metadata.exports { + for export in component.metadata.exports() { match export { AnalysedExport::Instance(interface) => { if matches!(parsed.site().interface_name(), Some(name) if name == interface.name) { diff --git a/golem-cli/src/model/deploy_diff/component.rs b/golem-cli/src/model/deploy_diff/component.rs index 34ecc8828..743435276 100644 --- a/golem-cli/src/model/deploy_diff/component.rs +++ b/golem-cli/src/model/deploy_diff/component.rs @@ -57,7 +57,7 @@ impl DiffableComponent { files, dynamic_linking: component .metadata - .dynamic_linking + .dynamic_linking() .iter() .map(|(name, link)| { ( diff --git a/golem-cli/src/model/mod.rs b/golem-cli/src/model/mod.rs index f0989c55f..63f3904b8 100644 --- a/golem-cli/src/model/mod.rs +++ b/golem-cli/src/model/mod.rs @@ -40,6 +40,9 @@ use clap_verbosity_flag::Verbosity; use colored::control::SHOULD_COLORIZE; use golem_client::model::PluginTypeSpecificDefinition; use golem_common::model::trim_date::TrimDateTime; +use golem_common::model::{ + AgentInstanceDescription, AgentInstanceKey, ExportedResourceInstanceDescription, +}; use golem_templates::model::{ GuestLanguage, GuestLanguageTier, PackageName, Template, TemplateName, }; @@ -152,7 +155,7 @@ impl FromStr for PluginReference { let version = segments.pop().unwrap().to_string(); let name = segments.pop().unwrap().to_string(); Ok(Self::RelativeToCurrentAccount { name, version }) - }, + } 3 => { let version = segments.pop().unwrap().to_string(); let name = segments.pop().unwrap().to_string(); @@ -462,7 +465,8 @@ pub struct WorkerMetadataView { pub last_error: Option, pub component_size: u64, pub total_linear_memory_size: u64, - pub owned_resources: HashMap, + pub exported_resource_instances: HashMap, + pub agent_instances: HashMap, } impl TrimDateTime for WorkerMetadataView { @@ -492,7 +496,8 @@ impl From for WorkerMetadataView { last_error: value.last_error, component_size: value.component_size, total_linear_memory_size: value.total_linear_memory_size, - owned_resources: value.owned_resources, + exported_resource_instances: value.exported_resource_instances, + agent_instances: value.agent_instances, } } } @@ -514,14 +519,12 @@ pub struct WorkerMetadata { pub last_error: Option, pub component_size: u64, pub total_linear_memory_size: u64, - pub owned_resources: HashMap, + pub exported_resource_instances: HashMap, + pub agent_instances: HashMap, } impl WorkerMetadata { - pub fn from_oss( - component_name: ComponentName, - value: golem_client::model::WorkerMetadata, - ) -> Self { + pub fn from(component_name: ComponentName, value: golem_client::model::WorkerMetadata) -> Self { WorkerMetadata { worker_id: value.worker_id, component_name, @@ -538,31 +541,18 @@ impl WorkerMetadata { last_error: value.last_error, component_size: value.component_size, total_linear_memory_size: value.total_linear_memory_size, - owned_resources: value.owned_resources, - } - } - - pub fn from_cloud( - component_name: ComponentName, - value: golem_client::model::WorkerMetadata, - ) -> Self { - WorkerMetadata { - worker_id: value.worker_id, - component_name, - created_by: Some(AccountId(value.created_by)), - project_id: Some(ProjectId(value.project_id)), - args: value.args, - env: value.env, - status: value.status, - component_version: value.component_version, - retry_count: value.retry_count, - pending_invocation_count: value.pending_invocation_count, - updates: value.updates, - created_at: value.created_at, - last_error: value.last_error, - component_size: value.component_size, - total_linear_memory_size: value.total_linear_memory_size, - owned_resources: value.owned_resources, + exported_resource_instances: HashMap::from_iter( + value.exported_resource_instances.into_iter().map(|desc| { + let key = desc.key.resource_id.to_string(); + (key, desc.description) + }), + ), + agent_instances: HashMap::from_iter( + value + .agent_instances + .into_iter() + .map(|desc| (desc.key, desc.description)), + ), } } } diff --git a/golem-cli/src/model/text/worker.rs b/golem-cli/src/model/text/worker.rs index d46abcf8b..bfa9f0fbf 100644 --- a/golem-cli/src/model/text/worker.rs +++ b/golem-cli/src/model/text/worker.rs @@ -25,6 +25,7 @@ use chrono::{DateTime, Utc}; use cli_table::{format::Justify, Table}; use colored::Colorize; use golem_client::model::{PublicOplogEntry, UpdateRecord}; +use golem_common::model::agent::{BinaryReference, DataValue, ElementValue, TextReference}; use golem_common::model::public_oplog::{ PluginInstallationDescription, PublicAttributeValue, PublicUpdateDescription, PublicWorkerInvocation, StringAttributeValue, @@ -798,6 +799,38 @@ impl TextView for PublicOplogEntry { format_id(&format!("{:?}", ¶ms.persistence_level)) )); } + PublicOplogEntry::CreateAgentInstance(params) => { + logln(format_message_highlight("CREATE AGENT INSTANCE")); + logln(format!( + "{pad}at: {}", + format_id(¶ms.timestamp) + )); + logln(format!( + "{pad}agent type: {}", + format_id(¶ms.key.agent_type) + )); + logln(format!( + "{pad}agent id: {}", + format_id(¶ms.key.agent_id) + )); + logln(format!("{pad}constructor params:")); + log_data_value(pad, ¶ms.parameters); + } + PublicOplogEntry::DropAgentInstance(params) => { + logln(format_message_highlight("DROP AGENT INSTANCE")); + logln(format!( + "{pad}at: {}", + format_id(¶ms.timestamp) + )); + logln(format!( + "{pad}agent type: {}", + format_id(¶ms.key.agent_type) + )); + logln(format!( + "{pad}agent id: {}", + format_id(¶ms.key.agent_id) + )); + } } } } @@ -823,3 +856,57 @@ fn log_plugin_description(pad: &str, value: &PluginInstallationDescription) { fn value_to_string(value: &ValueAndType) -> String { print_value_and_type(value).expect("Failed to convert value to string") } + +fn log_data_value(pad: &str, value: &DataValue) { + match value { + DataValue::Tuple(values) => { + logln(format!("{pad} tuple:")); + for value in &values.elements { + log_element_value(&format!("{pad} "), value); + } + } + DataValue::Multimodal(values) => { + logln(format!("{pad} multi-modal:")); + for value in &values.elements { + log_element_value(&format!("{pad} "), &value.value); + } + } + } +} + +fn log_element_value(pad: &str, value: &ElementValue) { + match value { + ElementValue::ComponentModel(value) => { + logln(format!("{pad}- {}", value_to_string(value))); + } + ElementValue::UnstructuredText(value) => match value { + TextReference::Url(url) => { + logln(format!("{pad}- URL: {}", format_id(&url.value))); + } + TextReference::Inline(inline) => { + logln(format!("{pad}- Inline: {}", format_id(&inline.data))); + if let Some(text_type) = &inline.text_type { + logln(format!( + "{pad} Language code: {}", + format_id(&text_type.language_code) + )); + } + } + }, + ElementValue::UnstructuredBinary(value) => match value { + BinaryReference::Url(url) => { + logln(format!("{pad}- URL: {}", format_id(&url.value))); + } + BinaryReference::Inline(inline) => { + logln(format!( + "{pad}- Inline: {} bytes", + format_id(&inline.data.len().to_string()) + )); + logln(format!( + "{pad} MIME type: {}", + format_id(&inline.binary_type.mime_type) + )); + } + }, + } +} diff --git a/golem-cli/src/wasm_rpc_stubgen/wit_generate.rs b/golem-cli/src/wasm_rpc_stubgen/wit_generate.rs index b244c249b..a3e698b1f 100644 --- a/golem-cli/src/wasm_rpc_stubgen/wit_generate.rs +++ b/golem-cli/src/wasm_rpc_stubgen/wit_generate.rs @@ -551,6 +551,7 @@ pub fn add_client_as_dependency_to_wit_dir(config: AddClientAsDepConfig) -> anyh &naming::wit::client_import_exports_prefix_from_client_package_name(&client_package.name)?, ); add_world_named_interface_import(package, &naming::wit::client_import_name(client_package)?); + let content = package.to_string(); actions.add(OverwriteSafeAction::WriteFile { diff --git a/golem-cli/src/wasm_rpc_stubgen/wit_resolve.rs b/golem-cli/src/wasm_rpc_stubgen/wit_resolve.rs index ea81d7a4e..738b7230e 100644 --- a/golem-cli/src/wasm_rpc_stubgen/wit_resolve.rs +++ b/golem-cli/src/wasm_rpc_stubgen/wit_resolve.rs @@ -148,7 +148,7 @@ impl ResolvedWitDir { } pub fn is_agent(&self) -> anyhow::Result { - crate::model::agent::extraction::is_agent(&self.resolve, &self.package_id, None) + golem_common::model::agent::extraction::is_agent(&self.resolve, &self.package_id, None) } } diff --git a/golem-cli/test-data/cargo/Cargo.toml.with_deps_and_comments b/golem-cli/test-data/cargo/Cargo.toml.with_deps_and_comments index dd4660802..32f07473c 100644 --- a/golem-cli/test-data/cargo/Cargo.toml.with_deps_and_comments +++ b/golem-cli/test-data/cargo/Cargo.toml.with_deps_and_comments @@ -4,7 +4,7 @@ version = "0.0.1" edition = "2021" [dependencies] -golem-rust = "1.7.0" +golem-rust = "1.7.2" serde_json = "1.0.139" # Hello wit-bindgen-rt = "0.40.0" diff --git a/golem-cli/tests/stubgen/stub_wasm.rs b/golem-cli/tests/stubgen/stub_wasm.rs index f8a6ff1ca..3547c5c69 100644 --- a/golem-cli/tests/stubgen/stub_wasm.rs +++ b/golem-cli/tests/stubgen/stub_wasm.rs @@ -653,7 +653,7 @@ fn assert_has_stub( mode: AnalysedResourceMode::Owned, resource_id, .. - }) => resource_id.clone(), + }) => *resource_id, _ => panic!("unexpected constructor return type"), }; @@ -701,6 +701,7 @@ fn assert_has_stub( resource_id, mode: AnalysedResourceMode::Borrowed, name: None, + owner: None, })], parameters, ] @@ -727,7 +728,8 @@ fn assert_has_stub( mode: AnalysedResourceMode::Owned, resource_id, name: None, - }) => resource_id.clone(), + owner: None, + }) => *resource_id, _ => panic!("unexpected async result return type"), }; @@ -759,9 +761,10 @@ fn assert_valid_polling_resource( .filter(|r| { r.parameters[0].typ == AnalysedType::Handle(TypeHandle { - resource_id: resource_id.clone(), + resource_id, mode: AnalysedResourceMode::Borrowed, name: None, + owner: None, }) }) .collect::>(); diff --git a/golem-cli/wit/deps.lock b/golem-cli/wit/deps.lock index e906775ae..de5720d09 100644 --- a/golem-cli/wit/deps.lock +++ b/golem-cli/wit/deps.lock @@ -1,7 +1,7 @@ [agent] -url = "https://github.com/golemcloud/golem-agentic/archive/main.tar.gz" -sha256 = "860bbac7d96cfcdfb2c31bbb8c8d8430e55f87300042ee94228228c37d554872" -sha512 = "cb3d758b6b8c834131479ebd17e63a83ac9f376e33183bb00947e269da0ffefbeb1c945be5a51fc30497d8f6e833e20124f3f1ff6a63e9b67afeed094cfa8961" +url = "https://github.com/golemcloud/golem-agentic/archive/type-owner.tar.gz" +sha256 = "92738a15004db69c4c7dd4c7d531d3fb40d10779ff130d2c0d008d3984d2f73f" +sha512 = "b37e4979adfe4f35c44786a1b79db9455ab56a02f28dfc6ae1cfb8d658bd92793d87e6aef98fa8b21c5ffdef1016893887199011953cae6744e74efefbd186af" deps = ["all", "blobstore", "cli", "clocks", "config", "filesystem", "golem-1.x", "golem-agent", "golem-durability", "golem-rpc", "http", "io", "keyvalue", "logging", "random", "sockets"] [all] @@ -29,20 +29,20 @@ sha256 = "69d42fb10a04a33545b17e055f13db9b1e10e82ba0ed5bdb52334e40dc07c679" sha512 = "612effbac6f4804fe0c29dae20b78bbba59e52cb754c15402f5fe229c3153a221e0fbdff1d9d00ceaa3fe049c6a95523a5b99f772f1c16d972eade2c88326a30" ["golem-1.x"] -sha256 = "d707888500487684ea753aa86547665221803d64445fcb1ef23470ded04eaab7" -sha512 = "7558b6110b7f8b43b8b9858e9236eba2569babf9a23204d186785e6693172c94856e271406b7753ed75c8e1fefb2558e7038b10f3dead448a4ea23975f3d10df" +sha256 = "831dbbcffd5061289633f68704593d4d22e8c7a6c95b65493f0d103a8d1eed04" +sha512 = "4830f5095505702aeaeb5838810be9fe2d69929f3b7a2156621e34d350f270ab224d13e007ceab9b9a4f4990593b88c211209f644253767a04eb7f2bd4333fc9" [golem-agent] -sha256 = "7a7bab29059c195c95878c1ad3cacdb2e82ba7a89e309684eedfe02cbe2c5bcf" -sha512 = "71c638d2f5c75627423f31ce4e8b518831636ebb32b1948384df3a47595a408e8b3a4a415f20ec571135ca2a5e1fc5684bb9c91f0b7f00fcb79bef3f00e11d8f" +sha256 = "6be6440f46d8dfe021950d9bfd90749f41015e01ead9a08442c66288121b8e96" +sha512 = "f0db1297f3bfa15ed8fa76bfae5b0accc2a6eabe2243f415b8398540d801509160ab0965aa60e52d744dc28ce068b23aab730daaf0317b0b8f41d25a9f42788f" [golem-durability] sha256 = "c5f8b9b4bda5a8d5d1d008978abed617c18da7d9c24167bf20a81a379d10d688" sha512 = "40e09d412fd6faee904ce6f8abdcf3f83a604eca3628bf5605b7667540874ea53f9e29392059dac327ca96a0f1298372cb0626abcf66a1df4f4180731c13646a" [golem-rpc] -sha256 = "a73f66a61e81b237057117b14aecc6c4c20eb004a4244ae10a51a876f71cf626" -sha512 = "396a1738320f7dc34a9a066755397b132b976e81c7cd28a8f45ff32aa5ea3226eb91d1e26d73995104b397fbd063ff83090550718f805773ceb78eb4f2155acf" +sha256 = "5ba11ce01c333b3e9ef877431c8d447c9617711cf40cb2f41c1261ea7b883f14" +sha512 = "fafc17bdc2bdc4eb84510272e4ddec587ad0d835d764124b20cd67cb8d91551d4b603e63cb8d04721b43843de56249c0420e4cdfd788367fd746c3196c1d46c6" [http] sha256 = "72d3a00dbf39eed40a134e8b1dee85834961153f9d205ee4dd56657270c084ce" diff --git a/golem-cli/wit/deps.toml b/golem-cli/wit/deps.toml index f1ad03aa3..0c6d02cdd 100644 --- a/golem-cli/wit/deps.toml +++ b/golem-cli/wit/deps.toml @@ -1 +1 @@ -agent = "https://github.com/golemcloud/golem-agentic/archive/main.tar.gz" +agent = "https://github.com/golemcloud/golem-agentic/archive/type-owner.tar.gz" diff --git a/golem-cli/wit/deps/agent/main.wit b/golem-cli/wit/deps/agent/main.wit index 1c300786e..0e5cb88b3 100644 --- a/golem-cli/wit/deps/agent/main.wit +++ b/golem-cli/wit/deps/agent/main.wit @@ -1 +1,5 @@ -package unused:agentic; +package golem:agent-guest; + +world agent-guest { + include golem:agent/agent-guest; +} diff --git a/golem-cli/wit/deps/golem-1.x/golem-host.wit b/golem-cli/wit/deps/golem-1.x/golem-host.wit index bb932f767..62dcef06e 100644 --- a/golem-cli/wit/deps/golem-1.x/golem-host.wit +++ b/golem-cli/wit/deps/golem-1.x/golem-host.wit @@ -4,7 +4,7 @@ package golem:api@1.1.7; /// the durability and transactional guarantees the executor provides. interface host { use wasi:clocks/monotonic-clock@0.2.3.{duration}; - use golem:rpc/types@0.2.2.{component-id, uuid, worker-id}; + use golem:rpc/types@0.2.2.{component-id, uuid, value-and-type, worker-id}; /// An index into the persistent log storing all performed operations of a worker type oplog-index = u64; diff --git a/golem-cli/wit/deps/golem-agent/guest.wit b/golem-cli/wit/deps/golem-agent/guest.wit index e71b8c8e7..4fe6473ee 100644 --- a/golem-cli/wit/deps/golem-agent/guest.wit +++ b/golem-cli/wit/deps/golem-agent/guest.wit @@ -15,6 +15,10 @@ interface guest { get-agent: func(agent-type: string, agent-id: string) -> agent; + /// Invokes an agent method on an agent of a given type and ID. + /// Equivalent of getting an agent with `get-agent` and calling `invoke` on that. + invoke-agent: func(agent-type: string, agent-id: string, method-name: string, input: data-value) -> result; + discover-agents: func() -> list; discover-agent-types: func() -> list; @@ -25,3 +29,7 @@ world agent-guest { import golem:rpc/types@0.2.2; export guest; } + +world agent-host { + export host; +} diff --git a/golem-cli/wit/deps/golem-agent/host.wit b/golem-cli/wit/deps/golem-agent/host.wit new file mode 100644 index 000000000..46018ced9 --- /dev/null +++ b/golem-cli/wit/deps/golem-agent/host.wit @@ -0,0 +1,9 @@ +package golem:agent; + +interface host { + use guest.{agent}; + use golem:rpc/types@0.2.2.{value-and-type}; + + register-agent: func(agent-type: string, agent-id: string, constructor-parameters: list); + unregister-agent: func(agent-id: string, constructor-parameters: list); +} diff --git a/golem-cli/wit/deps/golem-rpc/wasm-rpc.wit b/golem-cli/wit/deps/golem-rpc/wasm-rpc.wit index c4ed84cc3..372919b05 100644 --- a/golem-cli/wit/deps/golem-rpc/wasm-rpc.wit +++ b/golem-cli/wit/deps/golem-rpc/wasm-rpc.wit @@ -71,6 +71,7 @@ interface types { record named-wit-type-node { name: option, + owner: option, %type: wit-type-node } diff --git a/golem-templates/templates/rust/rust-app-common/Cargo.toml._ b/golem-templates/templates/rust/rust-app-common/Cargo.toml._ index 56559d5ed..7685ae5bf 100644 --- a/golem-templates/templates/rust/rust-app-common/Cargo.toml._ +++ b/golem-templates/templates/rust/rust-app-common/Cargo.toml._ @@ -7,7 +7,7 @@ opt-level = "s" lto = true [workspace.dependencies] -golem-rust = { version = "1.7.0", features = ["export_load_snapshot", "export_save_snapshot", "export_oplog_processor"] } +golem-rust = { version = "1.7.2", features = ["export_load_snapshot", "export_save_snapshot", "export_oplog_processor"] } reqwest = { git = "https://github.com/zivergetech/reqwest", branch = "update-july-2025", features = ["json"] } serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/golem/Cargo.toml b/golem/Cargo.toml index 3bac2b570..c326b3f86 100644 --- a/golem/Cargo.toml +++ b/golem/Cargo.toml @@ -23,14 +23,14 @@ golem-cli = { path = "../golem-cli", features = [ ], version = "=0.0.0" } # Golem - git deps -golem-common = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.21" } -golem-service-base = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.21" } -cloud-service = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.21" } -golem-component-compilation-service = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.21" } -golem-component-service = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.21" } -golem-shard-manager = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.21" } -golem-worker-executor = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.21" } -golem-worker-service = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.21" } +golem-common = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.25" } +golem-service-base = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.25" } +cloud-service = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.25" } +golem-component-compilation-service = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.25" } +golem-component-service = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.25" } +golem-shard-manager = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.25" } +golem-worker-executor = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.25" } +golem-worker-service = { git = "https://github.com/golemcloud/golem", tag="v1.3.0-dev.25" } # External deps anyhow = { workspace = true }