import Foundation import Testing @testable import Sybil @Suite struct SybilInlineMentionTests { @Test func recognizesLiteralCaseInsensitiveTokens() { #expect(SybilInlineMention.hasExplicitSybilMention(in: "@sybil")) #expect(SybilInlineMention.hasExplicitSybilMention(in: "Could you help, @SYBIL?")) #expect(SybilInlineMention.hasExplicitSybilMention(in: "Please ask (@SyBiL), thanks.")) } @Test func ignoresEmailAddresses() { #expect(!SybilInlineMention.hasExplicitSybilMention(in: "Send mail to person@sybil.example")) #expect(!SybilInlineMention.hasExplicitSybilMention(in: "Mailbox: first.last+tag@sybil")) } @Test func ignoresInlineFencedAndIndentedCode() { #expect(!SybilInlineMention.hasExplicitSybilMention(in: "Run `@sybil` after the build.")) #expect(!SybilInlineMention.hasExplicitSybilMention(in: "Inline `example\n@sybil` across lines.")) #expect(!SybilInlineMention.hasExplicitSybilMention(in: "```swift\n@sybil\n```")) #expect(!SybilInlineMention.hasExplicitSybilMention(in: "~~~\n@sybil\n~~~")) #expect(!SybilInlineMention.hasExplicitSybilMention(in: " @sybil\n\t@sybil")) } @Test func ignoresMarkdownBlockquotesAndLazyContinuation() { #expect(!SybilInlineMention.hasExplicitSybilMention(in: "> @sybil\ncontinued @sybil")) #expect(!SybilInlineMention.hasExplicitSybilMention(in: " > @SYBIL")) #expect(SybilInlineMention.hasExplicitSybilMention(in: "> quoted @sybil\n\n@sybil")) } @Test func streamMetaAcceptsOptionalAgentAsideFlag() throws { let legacyData = Data(#"{"chatId":"chat-1","provider":"openai","model":"test-model"}"#.utf8) let legacy = try JSONDecoder().decode(CompletionStreamMeta.self, from: legacyData) #expect(legacy.agentAside == nil) let asideData = Data(#"{"chatId":"chat-1","provider":"openai","model":"test-model","agentAside":true}"#.utf8) let aside = try JSONDecoder().decode(CompletionStreamMeta.self, from: asideData) #expect(aside.agentAside == true) } @Test func asidePresentationUsesAssistantMetadata() { let assistantAside = Message( id: "message-1", createdAt: .now, role: .assistant, content: "An Agent reply", name: "Sybil Agent", metadata: .object(["agentAside": .bool(true)]) ) let ordinaryAssistant = Message( id: "message-2", createdAt: .now, role: .assistant, content: "A provider reply", name: nil ) #expect(assistantAside.isAgentAside) #expect(!ordinaryAssistant.isAgentAside) } }