@@ -13,6 +13,7 @@ pub struct ParsedPersonaPreview {
1313 pub display_name : String ,
1414 pub system_prompt : String ,
1515 pub avatar_data_url : Option < String > ,
16+ pub avatar_ref : Option < String > ,
1617 pub runtime : Option < String > ,
1718 pub model : Option < String > ,
1819 pub provider : Option < String > ,
@@ -81,6 +82,7 @@ pub fn parse_png_persona(png_bytes: &[u8]) -> Result<ParsedPersonaPreview, Strin
8182 display_name : fields. display_name ,
8283 system_prompt : fields. system_prompt ,
8384 avatar_data_url,
85+ avatar_ref : None ,
8486 runtime : fields. runtime ,
8587 model : fields. model ,
8688 provider : fields. provider ,
@@ -240,6 +242,7 @@ pub fn parse_json_persona(json_bytes: &[u8]) -> Result<ParsedPersonaPreview, Str
240242 display_name : fields. display_name ,
241243 system_prompt : fields. system_prompt ,
242244 avatar_data_url : fields. avatar_url ,
245+ avatar_ref : None ,
243246 runtime : fields. runtime ,
244247 model : fields. model ,
245248 provider : fields. provider ,
@@ -304,6 +307,7 @@ pub fn parse_md_persona(md_bytes: &[u8]) -> Result<ParsedPersonaPreview, String>
304307 display_name : config. display_name ,
305308 system_prompt : config. prompt ,
306309 avatar_data_url : None , // .persona.md avatars are paths, not data URIs
310+ avatar_ref : config. avatar ,
307311 runtime : config. runtime ,
308312 model,
309313 provider : None , // .persona.md format does not carry llmProvider
@@ -405,6 +409,7 @@ pub fn parse_zip_pack(zip_bytes: &[u8]) -> Result<ParsePersonaFilesResult, Strin
405409 display_name : p. display_name . clone ( ) ,
406410 system_prompt : p. system_prompt . clone ( ) ,
407411 avatar_data_url : None ,
412+ avatar_ref : p. avatar . clone ( ) ,
408413 runtime : p. runtime . clone ( ) ,
409414 model : p. model . clone ( ) ,
410415 provider : None , // persona packs do not carry llmProvider
@@ -834,6 +839,16 @@ mod tests {
834839 assert ! ( result. source_file. is_empty( ) ) ;
835840 }
836841
842+ #[ test]
843+ fn parse_md_carries_avatar_ref ( ) {
844+ let md = b"---\n name: goosey\n display_name: Goosey\n avatar: app-avatar:gloopies-19\n description: A goose persona.\n ---\n You are Goosey.\n " ;
845+ let result = parse_md_persona ( md) . unwrap ( ) ;
846+
847+ assert_eq ! ( result. display_name, "Goosey" ) ;
848+ assert ! ( result. avatar_data_url. is_none( ) ) ;
849+ assert_eq ! ( result. avatar_ref. as_deref( ) , Some ( "app-avatar:gloopies-19" ) ) ;
850+ }
851+
837852 #[ test]
838853 fn parse_json_round_trip_no_avatar ( ) {
839854 let bytes =
0 commit comments