Make English the repository working language (#5)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Yaowei Zheng
2026-07-20 17:45:02 +08:00
committed by GitHub
parent e80cde0ea6
commit 0eaaa54e25
136 changed files with 1515 additions and 1352 deletions
+15 -14
View File
@@ -7,31 +7,31 @@
import { describe, expect, it } from "vitest";
import { buildSkillsMessage, parseSkillsMessage } from "../src/features/chat/skill-use";
describe("buildSkillsMessage(<use_skills> 块 + 正文)", () => {
it("单技能:块(首行标签、次行 skills:、闭合标签)+ 空行 + 正文", () => {
expect(buildSkillsMessage(["penguin-sdk"], "帮我写个 demo")).toBe(
"<use_skills>\nskills: penguin-sdk\n</use_skills>\n\n帮我写个 demo",
describe("buildSkillsMessage (<use_skills> block + body)", () => {
it("single skill: block (tag line, skills: line, closing tag) + blank line + body", () => {
expect(buildSkillsMessage(["penguin-sdk"], "write me a demo")).toBe(
"<use_skills>\nskills: penguin-sdk\n</use_skills>\n\nwrite me a demo",
);
});
it("多技能:skills: 行逗号 + 空格分隔", () => {
it("multiple skills: the skills: line is comma + space separated", () => {
expect(buildSkillsMessage(["agent-creation", "penguin-cli"], "x")).toBe(
"<use_skills>\nskills: agent-creation, penguin-cli\n</use_skills>\n\nx",
);
});
it("空名单不包块:原样返回正文", () => {
it("an empty list adds no block: the body returns unchanged", () => {
expect(buildSkillsMessage([], "hello")).toBe("hello");
expect(buildSkillsMessage([], "")).toBe("");
});
it("无正文时只有块,无尾随空行", () => {
it("block only without a body, no trailing blank line", () => {
expect(buildSkillsMessage(["solo"], "")).toBe("<use_skills>\nskills: solo\n</use_skills>");
});
});
describe("parseSkillsMessage(逆向解析,驱动「使用技能」横幅)", () => {
it("与 build 往返一致(多技能、多行正文)", () => {
describe("parseSkillsMessage (reverse parsing, driving the use-skills banner)", () => {
it("round-trips with build (multiple skills, multi-line body)", () => {
const text = buildSkillsMessage(["agent-creation", "penguin-cli"], "use them\nline2");
expect(parseSkillsMessage(text)).toEqual({
skills: ["agent-creation", "penguin-cli"],
@@ -39,29 +39,30 @@ describe("parseSkillsMessage(逆向解析,驱动「使用技能」横幅)"
});
});
it("正文含 < 字符(含尖括号标签样式的文本)不受影响", () => {
const body = "compare a < b and keep <tag> markers\n<use_skills> 字样也只是正文";
it("a body containing < characters (including tag-like text) is unaffected", () => {
const body =
"compare a < b and keep <tag> markers\n<use_skills> appearing here is still just body text";
expect(parseSkillsMessage(buildSkillsMessage(["x-skill"], body))).toEqual({
skills: ["x-skill"],
rest: body,
});
});
it("只含块无正文:rest 为空串", () => {
it("block only, no body: rest is an empty string", () => {
expect(parseSkillsMessage("<use_skills>\nskills: solo\n</use_skills>")).toEqual({
skills: ["solo"],
rest: "",
});
});
it("块不在消息开头(前置正文/空白)不解析;普通消息不解析", () => {
it("a block not at the start of the message (preceding body/whitespace) does not parse; plain messages do not parse", () => {
const block = buildSkillsMessage(["a"], "b");
expect(parseSkillsMessage(`hi\n${block}`)).toBeNull();
expect(parseSkillsMessage(` ${block}`)).toBeNull();
expect(parseSkillsMessage("plain text mentioning <use_skills> only")).toBeNull();
});
it("skills: 行为空白视为非来源块", () => {
it("a blank skills: line means it is not a skills block", () => {
expect(parseSkillsMessage("<use_skills>\nskills: \n</use_skills>\n\nbody")).toBeNull();
expect(parseSkillsMessage("<use_skills>\nskills: , ,\n</use_skills>")).toBeNull();
});