diff --git a/Cargo.lock b/Cargo.lock index ff00adc2bf..6bfd8fc04d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6693,33 +6693,35 @@ dependencies = [ [[package]] name = "pctx_code_execution_runtime" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9180fee1264bed9613b65e8702b2bd4ba404a4606d802ac237808e032d476e84" +checksum = "a8b66a19b684e077ab0bc39b10922cf76e1685ff6a65198fe0bc4004c4be314f" dependencies = [ "anyhow", "deno_core", "deno_error", "pctx_config", - "rmcp 0.14.0", + "pctx_registry", + "rmcp 1.2.0", "serde", "serde_json", "thiserror 2.0.18", + "tokio", "tracing", "url", ] [[package]] name = "pctx_code_mode" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1006bf745381b3726592032cbee129f27873296810be199e04dfe759820e96f8" +checksum = "3d9f5ffc774d0c440e780aaa2593fbf5c5710e5b5c63a6b498116d3f46a09fe0" dependencies = [ "futures", - "pctx_code_execution_runtime", "pctx_codegen", "pctx_config", "pctx_executor", + "pctx_registry", "schemars 1.2.1", "serde", "serde_json", @@ -6731,9 +6733,9 @@ dependencies = [ [[package]] name = "pctx_codegen" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe8bc4029f5177e4c7a3fd03f702832fe56ef77c34bb165990875fba25980f95" +checksum = "7b05191d9a37d1101f3a78e770e1a2b5521e75ce718f1165fb15ac16025d297b" dependencies = [ "biome_formatter", "biome_js_formatter", @@ -6753,9 +6755,9 @@ dependencies = [ [[package]] name = "pctx_config" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f5d3440e3936b1e06f168ce1657dbb0f05e2be63972ddb51050f81a12e771fb" +checksum = "88750f27b7000e143e8b7c5703947fe9565b1a616e119513578bf08ef40fc24f" dependencies = [ "anyhow", "base64 0.22.1", @@ -6765,8 +6767,8 @@ dependencies = [ "keyring", "opentelemetry-otlp", "opentelemetry_sdk", - "reqwest 0.12.28", - "rmcp 0.14.0", + "reqwest 0.13.2", + "rmcp 1.2.0", "serde", "serde_json", "shlex", @@ -6789,17 +6791,17 @@ dependencies = [ [[package]] name = "pctx_executor" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0d78d239a4840d4452bafa4fde7c5ad1f128af85f14c2e3d4c72360551183f" +checksum = "52c6f6e9ae409b20157d7f60623e32de6627b7a80a159e3ee5c1472c4f36ba64" dependencies = [ "deno_core", "deno_resolver", "futures", "node_resolver", "pctx_code_execution_runtime", - "pctx_config", "pctx_deno_transpiler", + "pctx_registry", "pctx_type_check_runtime", "regex", "serde", @@ -6812,10 +6814,25 @@ dependencies = [ ] [[package]] -name = "pctx_type_check_runtime" -version = "0.1.2" +name = "pctx_registry" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46d99b3ee5c8b345ba4038552ed4f6776a7a702e9739d35b99ffcc4eb7647e9b" +checksum = "9a49c948ffc8c07357e76b2e0008503c9fafaf49d91fd7e00e672bbd7aabd157" +dependencies = [ + "deno_error", + "pctx_config", + "rmcp 1.2.0", + "serde_json", + "thiserror 2.0.18", + "tokio", + "tracing", +] + +[[package]] +name = "pctx_type_check_runtime" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda6e59419494a65a7915ae4780708de2e72c70af21d68b7dfd64e1540c838cc" dependencies = [ "deno_ast", "deno_core", @@ -7707,13 +7724,9 @@ checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64 0.22.1", "bytes", - "cookie", - "cookie_store", - "encoding_rs", "futures-channel", "futures-core", "futures-util", - "h2 0.4.13", "http 1.4.0", "http-body 1.0.1", "http-body-util", @@ -7722,12 +7735,10 @@ dependencies = [ "hyper-util", "js-sys", "log", - "mime", "percent-encoding", "pin-project-lite", "quinn", "rustls 0.23.37", - "rustls-native-certs", "rustls-pki-types", "serde", "serde_json", @@ -7735,14 +7746,12 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-rustls 0.26.4", - "tokio-util", "tower", "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-streams 0.4.2", "web-sys", "webpki-roots 1.0.6", ] @@ -7791,7 +7800,7 @@ dependencies = [ "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-streams 0.5.0", + "wasm-streams", "web-sys", ] @@ -7850,33 +7859,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "rmcp" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a621b37a548ff6ab6292d57841eb25785a7f146d89391a19c9f199414bd13da" -dependencies = [ - "async-trait", - "base64 0.22.1", - "chrono", - "futures", - "http 1.4.0", - "pastey", - "pin-project-lite", - "process-wrap", - "reqwest 0.12.28", - "rmcp-macros 0.14.0", - "schemars 1.2.1", - "serde", - "serde_json", - "sse-stream", - "thiserror 2.0.18", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", -] - [[package]] name = "rmcp" version = "1.2.0" @@ -7925,19 +7907,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "rmcp-macros" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b79ed92303f9262db79575aa8c3652581668e9d136be6fd0b9ededa78954c95" -dependencies = [ - "darling 0.23.0", - "proc-macro2", - "quote", - "serde_json", - "syn 2.0.117", -] - [[package]] name = "rmcp-macros" version = "1.2.0" @@ -11298,19 +11267,6 @@ dependencies = [ "wasmparser", ] -[[package]] -name = "wasm-streams" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "wasm-streams" version = "0.5.0" diff --git a/crates/goose/Cargo.toml b/crates/goose/Cargo.toml index c6c6d17198..ca94fe8d8b 100644 --- a/crates/goose/Cargo.toml +++ b/crates/goose/Cargo.toml @@ -137,7 +137,7 @@ tree-sitter-rust = { workspace = true } tree-sitter-swift = { workspace = true } tree-sitter-typescript = { workspace = true } which = { workspace = true } -pctx_code_mode = { version = "^0.2.3", optional = true } +pctx_code_mode = { version = "^0.3.0", optional = true } pulldown-cmark = "0.13.0" llama-cpp-2 = { version = "0.1.137", features = ["sampler"] } encoding_rs = "0.8.35" diff --git a/crates/goose/src/agents/platform_extensions/code_execution.rs b/crates/goose/src/agents/platform_extensions/code_execution.rs index 98fc0fb228..b30669b56e 100644 --- a/crates/goose/src/agents/platform_extensions/code_execution.rs +++ b/crates/goose/src/agents/platform_extensions/code_execution.rs @@ -5,8 +5,10 @@ use crate::agents::tool_execution::ToolCallContext; use anyhow::Result; use async_trait::async_trait; use indoc::indoc; +use pctx_code_mode::config::ToolDisclosure; use pctx_code_mode::model::{CallbackConfig, ExecuteInput, GetFunctionDetailsInput}; -use pctx_code_mode::{CallbackRegistry, CodeMode}; +use pctx_code_mode::registry::{CallbackFn, PctxRegistry}; +use pctx_code_mode::CodeMode; use rmcp::model::{ CallToolRequestParams, CallToolResult, Content, Implementation, InitializeResult, JsonObject, ListToolsResult, RawContent, Role, ServerCapabilities, Tool as McpTool, ToolAnnotations, @@ -105,7 +107,7 @@ impl CodeExecutionClient { }; cfgs.push(CallbackConfig { name, - namespace, + namespace: Some(namespace), description: tool.description.as_ref().map(|d| d.to_string()), input_schema: Some(json!(tool.input_schema)), output_schema: tool.output_schema.as_ref().map(|s| json!(s)), @@ -152,7 +154,7 @@ impl CodeExecutionClient { &self, session_id: &str, code_mode: &CodeMode, - ) -> Result { + ) -> Result { let manager = self .context .extension_manager @@ -160,12 +162,12 @@ impl CodeExecutionClient { .and_then(|w| w.upgrade()) .ok_or("Extension manager not available")?; - let registry = CallbackRegistry::default(); + let registry = PctxRegistry::default(); for cfg in code_mode.callbacks() { - let full_name = format!("{}__{}", &cfg.namespace, &cfg.name); + let full_name = format!("{}__{}", cfg.namespace.as_deref().unwrap_or(""), &cfg.name); let callback = create_tool_callback(session_id.to_string(), full_name, manager.clone()); registry - .add(&cfg.id(), callback) + .add_callback(&cfg.id(), callback) .map_err(|e| format!("Failed to register callback: {e}"))?; } @@ -224,7 +226,7 @@ impl CodeExecutionClient { rt.block_on(async move { code_mode - .execute(&code, Some(registry)) + .execute_typescript(&code, ToolDisclosure::default(), Some(registry)) .await .map_err(|e| format!("Execution error: {e}")) }) @@ -240,7 +242,7 @@ fn create_tool_callback( session_id: String, full_name: String, manager: Arc, -) -> pctx_code_mode::CallbackFn { +) -> CallbackFn { Arc::new(move |args: Option| { let session_id = session_id.clone(); let full_name = full_name.clone();