Files
Sybil-2/ios/Packages/Sybil/Tests/SybilTests/SybilInlineMentionTests.swift
T
Sybil Agent 5d738f897b
TestFlight / Build and upload (push) Successful in 1m57s
Add inline persistent Agent mentions
2026-10-29 18:28:52 -07:00

62 lines
2.7 KiB
Swift

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)
}
}