Refine adaptive polish and cross-platform account support

Improve learned-style and clipboard skill presentation while keeping shared account clients buildable in the source-composed macOS target.
This commit is contained in:
Rocky
2026-08-22 17:06:22 +08:00
parent fe8f657c8d
commit 7df5bbdaa0
16 changed files with 243 additions and 66 deletions
@@ -260,6 +260,65 @@ final class AIClipboardSkillTests: XCTestCase {
XCTAssertFalse(prompts.contains { $0.contains("用户选择的操作") })
}
func testReplyUsesConversationalBaselineAndOptionalLearnedStyle() throws {
let skill = try XCTUnwrap(
AIClipboardSkillCatalog.skill(id: AIClipboardSkillCatalog.replyID)
)
let instruction = AIClipboardSkillCatalog.instruction(
for: skill,
locale: "zh",
translationTargetLocaleId: TranslationLanguageCatalog.offLocaleId,
replyStyle: AIClipboardReplyStyleContext(
styleID: "user.learned",
prompt: "喜欢短句,常用“行”“可以”,不说客套话。"
)
)
XCTAssertTrue(instruction.contains("真实的人在聊天软件里"))
XCTAssertTrue(instruction.contains("<user_reply_style"))
XCTAssertTrue(instruction.contains("喜欢短句"))
XCTAssertTrue(instruction.contains("不能改变当前技能的意图"))
}
func testReplyStyleIsNotInjectedIntoNonReplySkill() throws {
let skill = try XCTUnwrap(
AIClipboardSkillCatalog.skill(id: AIClipboardSkillCatalog.summarizeID)
)
let instruction = AIClipboardSkillCatalog.instruction(
for: skill,
locale: "zh",
translationTargetLocaleId: TranslationLanguageCatalog.offLocaleId,
replyStyle: AIClipboardReplyStyleContext(
styleID: "user.learned",
prompt: "这是个人回复风格"
)
)
XCTAssertFalse(instruction.contains("user_reply_style"))
XCTAssertFalse(instruction.contains("这是个人回复风格"))
}
func testReplyStyleResolverAcceptsOnlyUserOwnedStyle() {
let user = PolishStylePack(
id: "user.learned",
name: "我的风格",
prompt: "喜欢短句",
kind: .user
)
let builtIn = PolishStylePack(
id: "builtin.formal",
name: "正式",
prompt: "使用正式表达",
kind: .builtin
)
XCTAssertEqual(
AIClipboardReplyStyleContext.resolve(activeStyle: user)?.prompt,
"喜欢短句"
)
XCTAssertNil(AIClipboardReplyStyleContext.resolve(activeStyle: builtIn))
}
func testExtractTodosAsksForNONEWhenEmpty() {
let prompt = AIClipboardSkillCatalog.instruction(
skillID: AIClipboardSkillCatalog.extractTodosID,