@@ -1659,6 +1659,20 @@ fn make_agent_metadata_row(id: &str, backend: &str, icon: &str) -> AgentMetadata
16591659 }
16601660}
16611661
1662+ fn acp_agent_metadata_row ( id : & str , backend : & str , yolo_id : Option < & str > ) -> AgentMetadataRow {
1663+ let mut row = make_agent_metadata_row ( id, backend, "" ) ;
1664+ row. yolo_id = yolo_id. map ( str:: to_owned) ;
1665+ row
1666+ }
1667+
1668+ fn seeded_agent_metadata_repo ( ) -> Arc < dyn IAgentMetadataRepository > {
1669+ Arc :: new ( StubAgentMetadataRepo :: with_rows ( vec ! [
1670+ acp_agent_metadata_row( "claude-id" , "claude" , Some ( "bypassPermissions" ) ) ,
1671+ acp_agent_metadata_row( "codex-id" , "codex" , Some ( "full-access" ) ) ,
1672+ acp_agent_metadata_row( "gemini-id" , "gemini" , Some ( "yolo" ) ) ,
1673+ ] ) )
1674+ }
1675+
16621676fn word_creator_definition ( ) -> AssistantDefinitionRow {
16631677 AssistantDefinitionRow {
16641678 id : "def-word-creator" . into ( ) ,
@@ -1941,7 +1955,7 @@ async fn tc_create_team_prefers_assistant_avatar_over_backend_logo() {
19411955
19421956#[ tokio:: test]
19431957async fn tc_create_team_carries_assistant_identity_into_lead_conversation_extra ( ) {
1944- let agent_metadata_repo: Arc < dyn IAgentMetadataRepository > = Arc :: new ( StubAgentMetadataRepo :: empty ( ) ) ;
1958+ let agent_metadata_repo: Arc < dyn IAgentMetadataRepository > = seeded_agent_metadata_repo ( ) ;
19451959 let definition_repo: Arc < dyn IAssistantDefinitionRepository > = Arc :: new ( SingleAssistantDefinitionRepo {
19461960 row : AssistantDefinitionRow {
19471961 id : "def-team-lead" . into ( ) ,
@@ -2017,7 +2031,7 @@ async fn tc_create_team_carries_assistant_identity_into_lead_conversation_extra(
20172031
20182032#[ tokio:: test]
20192033async fn tc_create_team_derives_backend_from_assistant_when_backend_missing ( ) {
2020- let agent_metadata_repo: Arc < dyn IAgentMetadataRepository > = Arc :: new ( StubAgentMetadataRepo :: empty ( ) ) ;
2034+ let agent_metadata_repo: Arc < dyn IAgentMetadataRepository > = seeded_agent_metadata_repo ( ) ;
20212035 let definition_repo: Arc < dyn IAssistantDefinitionRepository > = Arc :: new ( SingleAssistantDefinitionRepo {
20222036 row : AssistantDefinitionRow {
20232037 id : "def-team-lead" . into ( ) ,
@@ -2104,7 +2118,7 @@ async fn tc_create_team_derives_backend_from_assistant_when_backend_missing() {
21042118
21052119#[ tokio:: test]
21062120async fn tc_create_team_ignores_requested_backend_when_assistant_id_present ( ) {
2107- let agent_metadata_repo: Arc < dyn IAgentMetadataRepository > = Arc :: new ( StubAgentMetadataRepo :: empty ( ) ) ;
2121+ let agent_metadata_repo: Arc < dyn IAgentMetadataRepository > = seeded_agent_metadata_repo ( ) ;
21082122 let definition_repo: Arc < dyn IAssistantDefinitionRepository > = Arc :: new ( SingleAssistantDefinitionRepo {
21092123 row : AssistantDefinitionRow {
21102124 id : "def-team-lead" . into ( ) ,
@@ -2208,7 +2222,7 @@ async fn team_preset_assistant_snapshot_is_frozen() {
22082222 } ) ;
22092223 let ( svc, _team_repo, conversation_ports, conv_repo) = setup_with_ports_metadata_assistants_and_conversation_repo (
22102224 success_factory ( ) ,
2211- Arc :: new ( StubAgentMetadataRepo :: empty ( ) ) ,
2225+ seeded_agent_metadata_repo ( ) ,
22122226 definition_repo,
22132227 Arc :: new ( EmptyAssistantOverlayRepo ) ,
22142228 ) ;
@@ -2255,7 +2269,7 @@ async fn spawned_preset_assistant_snapshot_is_frozen() {
22552269 } ) ;
22562270 let ( svc, _team_repo, conversation_ports, conv_repo) = setup_with_ports_metadata_assistants_and_conversation_repo (
22572271 success_factory ( ) ,
2258- Arc :: new ( StubAgentMetadataRepo :: empty ( ) ) ,
2272+ seeded_agent_metadata_repo ( ) ,
22592273 definition_repo,
22602274 Arc :: new ( EmptyAssistantOverlayRepo ) ,
22612275 ) ;
@@ -2400,7 +2414,7 @@ async fn ta_add_agent_derives_backend_from_assistant_when_backend_missing() {
24002414 updated_at : 0 ,
24012415 } ,
24022416 } ) ;
2403- let agent_metadata_repo: Arc < dyn IAgentMetadataRepository > = Arc :: new ( StubAgentMetadataRepo :: empty ( ) ) ;
2417+ let agent_metadata_repo: Arc < dyn IAgentMetadataRepository > = seeded_agent_metadata_repo ( ) ;
24042418 let ( svc, _team_repo, _task_manager, _conv_repo) = setup_with_factory_metadata_assistants_and_conversation_repo (
24052419 success_factory ( ) ,
24062420 agent_metadata_repo,
@@ -2495,7 +2509,7 @@ async fn ta_add_agent_ignores_requested_backend_when_assistant_id_present() {
24952509 updated_at : 0 ,
24962510 } ,
24972511 } ) ;
2498- let agent_metadata_repo: Arc < dyn IAgentMetadataRepository > = Arc :: new ( StubAgentMetadataRepo :: empty ( ) ) ;
2512+ let agent_metadata_repo: Arc < dyn IAgentMetadataRepository > = seeded_agent_metadata_repo ( ) ;
24992513 let ( svc, _team_repo, _task_manager, _conv_repo) = setup_with_factory_metadata_assistants_and_conversation_repo (
25002514 success_factory ( ) ,
25012515 agent_metadata_repo,
@@ -3267,6 +3281,59 @@ async fn provisioning_writes_typed_team_binding_for_create_and_add_agent() {
32673281 ) ;
32683282}
32693283
3284+ #[ tokio:: test]
3285+ async fn provisioning_resolves_acp_backend_from_agent_metadata ( ) {
3286+ let agent_metadata_repo: Arc < dyn IAgentMetadataRepository > =
3287+ Arc :: new ( StubAgentMetadataRepo :: with_rows ( vec ! [ acp_agent_metadata_row(
3288+ "future-acp-id" ,
3289+ "future-acp" ,
3290+ Some ( "turbo" ) ,
3291+ ) ] ) ) ;
3292+ let ( svc, _, conv_repo) =
3293+ setup_with_factory_and_metadata_and_conversation_repo ( success_factory ( ) , agent_metadata_repo) ;
3294+
3295+ let created = svc
3296+ . create_team (
3297+ "user1" ,
3298+ CreateTeamRequest {
3299+ name : "Metadata ACP" . into ( ) ,
3300+ agents : vec ! [ TeamAgentInput {
3301+ name: "Lead" . into( ) ,
3302+ role: "lead" . into( ) ,
3303+ backend: Some ( "future-acp" . into( ) ) ,
3304+ model: "model-x" . into( ) ,
3305+ assistant_id: None ,
3306+ conversation_id: None ,
3307+ } ] ,
3308+ workspace : None ,
3309+ } ,
3310+ )
3311+ . await
3312+ . unwrap ( ) ;
3313+
3314+ let row = conv_repo
3315+ . get ( & created. assistants [ 0 ] . conversation_id )
3316+ . await
3317+ . unwrap ( )
3318+ . expect ( "conversation row" ) ;
3319+ assert_eq ! ( row. r#type, "acp" ) ;
3320+ let extra = conv_repo
3321+ . get_extra ( & created. assistants [ 0 ] . conversation_id )
3322+ . expect ( "conversation extra" ) ;
3323+ assert_eq ! (
3324+ extra. get( "backend" ) . and_then( serde_json:: Value :: as_str) ,
3325+ Some ( "future-acp" )
3326+ ) ;
3327+ assert_eq ! (
3328+ extra. get( "session_mode" ) . and_then( serde_json:: Value :: as_str) ,
3329+ Some ( "turbo" )
3330+ ) ;
3331+ assert_eq ! (
3332+ extra. get( "provider_id" ) . and_then( serde_json:: Value :: as_str) ,
3333+ Some ( "future-acp" )
3334+ ) ;
3335+ }
3336+
32703337#[ tokio:: test]
32713338async fn aa4_add_agent_to_nonexistent_team ( ) {
32723339 let svc = setup ( ) ;
@@ -3443,7 +3510,7 @@ async fn spawn_agent_in_session_succeeds_without_active_team_run() {
34433510 updated_at : 0 ,
34443511 } ,
34453512 } ) ;
3446- let agent_metadata_repo: Arc < dyn IAgentMetadataRepository > = Arc :: new ( StubAgentMetadataRepo :: empty ( ) ) ;
3513+ let agent_metadata_repo: Arc < dyn IAgentMetadataRepository > = seeded_agent_metadata_repo ( ) ;
34473514 let ( svc, _team_repo, _task_manager, _conv_repo) = setup_with_factory_metadata_assistants_and_conversation_repo (
34483515 success_factory ( ) ,
34493516 agent_metadata_repo,
@@ -3539,7 +3606,7 @@ async fn lead_send_agent_message_in_session_requires_active_team_run() {
35393606async fn spawn_agent_in_session_aborts_lease_when_persistence_fails ( ) {
35403607 let ( svc, team_repo, _, _) = setup_with_factory_metadata_assistants_and_conversation_repo (
35413608 success_factory ( ) ,
3542- Arc :: new ( StubAgentMetadataRepo :: empty ( ) ) ,
3609+ seeded_agent_metadata_repo ( ) ,
35433610 Arc :: new ( SingleAssistantDefinitionRepo {
35443611 row : word_creator_definition ( ) ,
35453612 } ) ,
@@ -3586,7 +3653,7 @@ async fn spawn_agent_in_session_aborts_lease_when_persistence_fails() {
35863653async fn spawn_agent_in_session_compensates_when_welcome_mailbox_write_fails ( ) {
35873654 let ( svc, team_repo, _, _) = setup_with_factory_metadata_assistants_and_conversation_repo (
35883655 success_factory ( ) ,
3589- Arc :: new ( StubAgentMetadataRepo :: empty ( ) ) ,
3656+ seeded_agent_metadata_repo ( ) ,
35903657 Arc :: new ( SingleAssistantDefinitionRepo {
35913658 row : word_creator_definition ( ) ,
35923659 } ) ,
0 commit comments