@@ -16,7 +16,7 @@ use cortex_protocol::{
1616} ;
1717
1818use crate :: agent_cmd:: load_all_agents;
19- use crate :: export_cmd:: { ExportMessage , SessionExport } ;
19+ use crate :: export_cmd:: { AGENT_MENTION_REGEX , ExportMessage , SessionExport } ;
2020
2121/// Maximum depth for processing messages to prevent stack overflow from deeply nested structures.
2222const MAX_PROCESSING_DEPTH : usize = 10000 ;
@@ -289,7 +289,7 @@ fn validate_agent_references(export: &SessionExport) -> Result<Vec<String>> {
289289 }
290290
291291 // Also scan messages for @agent mentions (in case they weren't pre-extracted)
292- let re = regex:: Regex :: new ( r"@([a-zA-Z][a-zA-Z0-9_-]*)" ) . unwrap ( ) ;
292+ let re = regex:: Regex :: new ( AGENT_MENTION_REGEX ) . unwrap ( ) ;
293293 for message in & export. messages {
294294 for cap in re. captures_iter ( & message. content ) {
295295 if let Some ( agent_name) = cap. get ( 1 ) {
@@ -650,6 +650,38 @@ mod tests {
650650 assert ! ( missing. contains( & "yet-another-missing" . to_string( ) ) ) ;
651651 }
652652
653+ #[ test]
654+ fn test_validate_agent_references_with_dotted_missing_agent ( ) {
655+ use crate :: export_cmd:: SessionMetadata ;
656+
657+ let export = SessionExport {
658+ version : 1 ,
659+ session : SessionMetadata {
660+ id : "test-123" . to_string ( ) ,
661+ title : None ,
662+ created_at : "2024-01-01T00:00:00Z" . to_string ( ) ,
663+ cwd : None ,
664+ model : None ,
665+ agent : None ,
666+ agent_refs : None ,
667+ } ,
668+ messages : vec ! [ ExportMessage {
669+ role: "user" . to_string( ) ,
670+ content: "Please run @acme.deploy for me, then @foo.bar." . to_string( ) ,
671+ tool_calls: None ,
672+ tool_call_id: None ,
673+ timestamp: None ,
674+ } ] ,
675+ } ;
676+
677+ let missing = validate_agent_references ( & export) . unwrap ( ) ;
678+
679+ assert ! ( missing. contains( & "acme.deploy" . to_string( ) ) ) ;
680+ assert ! ( missing. contains( & "foo.bar" . to_string( ) ) ) ;
681+ assert ! ( !missing. contains( & "acme" . to_string( ) ) ) ;
682+ assert ! ( !missing. contains( & "foo" . to_string( ) ) ) ;
683+ }
684+
653685 #[ test]
654686 fn test_validate_agent_references_with_builtin_agents ( ) {
655687 use crate :: export_cmd:: SessionMetadata ;
0 commit comments