Skip to content

Commit c4030d0

Browse files
authored
Merge pull request #30 from nikomatsakis/main
cleanup component trait, access connection_cx explicitly
2 parents 137c20a + b98cffa commit c4030d0

File tree

17 files changed

+353
-237
lines changed

17 files changed

+353
-237
lines changed

src/elizacp/src/lib.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,14 +109,16 @@ impl ElizaAgent {
109109

110110
tracing::debug!("Eliza response: {}", response_text);
111111

112-
request_cx.send_notification(SessionNotification {
113-
session_id: session_id.clone(),
114-
update: SessionUpdate::AgentMessageChunk(ContentChunk {
115-
content: response_text.into(),
112+
request_cx
113+
.connection_cx()
114+
.send_notification(SessionNotification {
115+
session_id: session_id.clone(),
116+
update: SessionUpdate::AgentMessageChunk(ContentChunk {
117+
content: response_text.into(),
118+
meta: None,
119+
}),
116120
meta: None,
117-
}),
118-
meta: None,
119-
})?;
121+
})?;
120122

121123
// Complete the request
122124
request_cx.respond(PromptResponse {

src/sacp-conductor/src/conductor.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,8 @@ impl Conductor {
223223
}
224224

225225
impl sacp::Component for Conductor {
226-
async fn serve(self, channels: sacp::Channels) -> Result<(), sacp::Error> {
227-
self.run(channels).await
226+
async fn serve(self, client: impl sacp::Component) -> Result<(), sacp::Error> {
227+
self.run(client).await
228228
}
229229
}
230230

@@ -824,7 +824,7 @@ impl ConductorHandlerState {
824824
for mcp_server in &mut request.mcp_servers {
825825
self.bridge_listeners
826826
.transform_mcp_servers(
827-
&request_cx,
827+
&request_cx.connection_cx(),
828828
mcp_server,
829829
conductor_tx,
830830
&self.conductor_command,

src/sacp-conductor/tests/initialization_sequence.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
//! 4. Last component (agent) never receives proxy capability offer
88
99
use sacp::schema::{AgentCapabilities, InitializeRequest, InitializeResponse};
10-
use sacp::{Channels, Component, JrHandlerChain, MetaCapabilityExt, Proxy};
10+
use sacp::{Component, JrHandlerChain, MetaCapabilityExt, Proxy};
1111
use sacp_conductor::conductor::Conductor;
1212
use sacp_proxy::JrCxExt;
1313
use std::sync::Arc;
@@ -69,7 +69,7 @@ impl InitComponent {
6969
}
7070

7171
impl Component for InitComponent {
72-
async fn serve(self, channels: Channels) -> Result<(), sacp::Error> {
72+
async fn serve(self, client: impl Component) -> Result<(), sacp::Error> {
7373
let config = Arc::clone(&self.config);
7474

7575
{
@@ -86,6 +86,7 @@ impl Component for InitComponent {
8686

8787
if config.respond_with_proxy {
8888
request_cx
89+
.connection_cx()
8990
.send_request_to_successor(request)
9091
.await_when_result_received(async move |response| {
9192
let mut response = response?;
@@ -105,7 +106,7 @@ impl Component for InitComponent {
105106
request_cx.respond(response)
106107
}
107108
})
108-
.serve(channels)
109+
.serve(client)
109110
.await
110111
}
111112
}

src/sacp-conductor/tests/mcp-integration.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ mod mcp_integration;
99

1010
use expect_test::expect;
1111
use futures::{SinkExt, StreamExt, channel::mpsc};
12-
use sacp::Component;
1312
use sacp::JrHandlerChain;
1413
use sacp::schema::{
1514
ContentBlock, InitializeRequest, NewSessionRequest, PromptRequest, SessionNotification,

src/sacp-conductor/tests/mcp_integration/agent.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use sacp::schema::{
66
McpServer, NewSessionRequest, NewSessionResponse, PromptRequest, PromptResponse,
77
SessionNotification, SessionUpdate, StopReason, TextContent,
88
};
9-
use sacp::{BoxFuture, Channels, Component, JrHandlerChain, JrRequestCx};
9+
use sacp::{Component, JrHandlerChain, JrRequestCx};
1010
use std::sync::Arc;
1111
use tokio::sync::Mutex;
1212

@@ -22,7 +22,7 @@ struct AgentState {
2222
}
2323

2424
impl Component for AgentComponent {
25-
async fn serve(self, channels: Channels) -> Result<(), sacp::Error> {
25+
async fn serve(self, client: impl Component) -> Result<(), sacp::Error> {
2626
let state = AgentState {
2727
mcp_servers: Arc::new(Mutex::new(Vec::new())),
2828
};
@@ -95,7 +95,7 @@ impl Component for AgentComponent {
9595
connection_cx.spawn(Self::respond_to_prompt(state, request, request_cx))
9696
}
9797
})
98-
.serve(channels)
98+
.serve(client)
9999
.await
100100
}
101101
}

src/sacp-conductor/tests/mcp_integration/proxy.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
//! Proxy component that provides MCP tools
22
3-
use sacp::{BoxFuture, Channels, Component, JrHandlerChain};
3+
use sacp::{Component, JrHandlerChain};
44
use sacp_proxy::{AcpProxyExt, McpServiceRegistry};
55

66
use crate::mcp_integration::mcp_server::TestMcpServer;
77

88
pub struct ProxyComponent;
99

1010
impl Component for ProxyComponent {
11-
async fn serve(self, channels: Channels) -> Result<(), sacp::Error> {
11+
async fn serve(self, client: impl Component) -> Result<(), sacp::Error> {
1212
JrHandlerChain::new()
1313
.name("proxy-component")
1414
.provide_mcp(
1515
McpServiceRegistry::default().with_rmcp_server("test", TestMcpServer::new)?,
1616
)
1717
.proxy()
18-
.serve(channels)
18+
.serve(client)
1919
.await
2020
}
2121
}

src/sacp-conductor/tests/nested_conductor.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
//! - Inner conductor operates in proxy mode, forwarding to eliza
1818
//! - Outer conductor receives the ">>" prefixed response
1919
20-
use sacp::{BoxFuture, Channels, Component};
20+
use sacp::Component;
2121
use sacp_conductor::conductor::Conductor;
2222
use sacp_test::arrow_proxy::run_arrow_proxy;
2323
use sacp_test::test_client::yolo_prompt;
@@ -31,8 +31,8 @@ use tokio_util::compat::{TokioAsyncReadCompatExt, TokioAsyncWriteCompatExt};
3131
struct MockArrowProxy;
3232

3333
impl Component for MockArrowProxy {
34-
async fn serve(self, channels: Channels) -> Result<(), sacp::Error> {
35-
run_arrow_proxy(channels).await
34+
async fn serve(self, client: impl Component) -> Result<(), sacp::Error> {
35+
run_arrow_proxy(client).await
3636
}
3737
}
3838

@@ -41,8 +41,8 @@ impl Component for MockArrowProxy {
4141
struct MockEliza;
4242

4343
impl Component for MockEliza {
44-
async fn serve(self, channels: Channels) -> Result<(), sacp::Error> {
45-
elizacp::run_elizacp(channels).await
44+
async fn serve(self, client: impl Component) -> Result<(), sacp::Error> {
45+
elizacp::run_elizacp(client).await
4646
}
4747
}
4848

@@ -59,7 +59,7 @@ impl MockInnerConductor {
5959
}
6060

6161
impl Component for MockInnerConductor {
62-
async fn serve(self, channels: Channels) -> Result<(), sacp::Error> {
62+
async fn serve(self, client: impl Component) -> Result<(), sacp::Error> {
6363
// Create mock arrow proxy components for the inner conductor
6464
// This conductor is ONLY proxies - no actual agent
6565
let mut components: Vec<sacp::DynComponent> = Vec::new();
@@ -68,7 +68,7 @@ impl Component for MockInnerConductor {
6868
}
6969

7070
Conductor::new("inner-conductor".to_string(), components, None)
71-
.run(channels)
71+
.run(client)
7272
.await
7373
}
7474
}

src/sacp-proxy/src/mcp_server.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,9 +232,10 @@ impl McpServiceRegistry {
232232
// Every request/notification that is sent over `mcp_server_tx` we will
233233
// send to the MCP server.
234234
let spawn_results = request_cx
235+
.connection_cx()
235236
.spawn({
236237
let connection_id = connection_id.clone();
237-
let outer_cx = request_cx.clone();
238+
let outer_cx = request_cx.connection_cx();
238239

239240
let transport = sacp::ByteStreams::new(
240241
mcp_client_write.compat_write(),
@@ -277,7 +278,7 @@ impl McpServiceRegistry {
277278
})
278279
.and_then(|()| {
279280
// Spawn MCP server task
280-
request_cx.spawn(async move {
281+
request_cx.connection_cx().spawn(async move {
281282
registered_server
282283
.spawn
283284
.spawn(Box::pin(mcp_server_write), Box::pin(mcp_server_read))
@@ -386,7 +387,7 @@ impl McpServiceRegistry {
386387
let mut request = match result {
387388
Ok(request) => request,
388389
Err(err) => {
389-
request_cx.send_error_notification(err)?;
390+
request_cx.connection_cx().send_error_notification(err)?;
390391
return Ok(Handled::Yes);
391392
}
392393
};
@@ -403,6 +404,7 @@ impl McpServiceRegistry {
403404

404405
// Forward it to the successor.
405406
request_cx
407+
.connection_cx()
406408
.send_request_to_successor(request)
407409
.forward_to_request_cx(request_cx.cast())?;
408410

src/sacp-proxy/src/to_from_successor.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,7 @@ impl JrMessageHandler for ProxyHandler {
525525
) {
526526
let request = result?;
527527
request_cx
528+
.connection_cx()
528529
.send_request(request.request)
529530
.forward_to_request_cx(request_cx)?;
530531
return Ok(Handled::Yes);
@@ -543,6 +544,7 @@ impl JrMessageHandler for ProxyHandler {
543544

544545
// If we receive any other request, send it to our successor.
545546
request_cx
547+
.connection_cx()
546548
.send_request_to_successor(request)
547549
.forward_to_request_cx(request_cx)?;
548550
Ok(Handled::Yes)
@@ -596,6 +598,7 @@ impl ProxyHandler {
596598

597599
request = request.remove_meta_capability(Proxy);
598600
request_cx
601+
.connection_cx()
599602
.send_request_to_successor(request)
600603
.await_when_result_received(async move |mut result| {
601604
result = result.map(|r| r.add_meta_capability(Proxy));

src/sacp-test/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pub mod test_client;
1010
pub struct MockTransport;
1111

1212
impl Component for MockTransport {
13-
async fn serve(self, _channels: Channels) -> Result<(), Error> {
13+
async fn serve(self, _client: impl Component) -> Result<(), Error> {
1414
panic!("MockTransport should never be used in running code - it's only for doctests")
1515
}
1616
}

0 commit comments

Comments
 (0)