const __vite_ssr_import_0__ = await __vite_ssr_import__("claude-code/testing", {"importedNames":["expect","mock","test"]}); const __vite_ssr_import_1__ = await __vite_ssr_import__("/hooks/skillgen.ts", {"importedNames":["bumpVersion","parseEntries","renderGuide","upsertEntry","validateSkill"]}); const SKILL = "---\nname: anima-greet\ndescription: 打招呼\n---\n\n用角色口吻向使用者打招呼,並簡短說明今天的待辦。\n"; const GENERATED = JSON.stringify({ skill: SKILL, example: "早安" }); // 啟動角色並替身所有外部:模型、檔案系統、git/tea。 async function setup($, on, opts = {}) { const writes = {}; const procs = []; __vite_ssr_import_0__.mock.store(on); on("command.register", () => ({ value: { name: "x" } })); on("session.start", () => ({ cwd: "/repo" })); on("session.cwd", () => ({ value: "/repo" })); on("command.run", () => ({ text: "" })); on("prompt.compose", () => ({ sections: [] })); on("model.complete", (_, e) => { const t = opts.reply ? opts.reply(String(e.prompt)) : String(e.prompt).startsWith("請撰寫") ? GENERATED : "嗨!"; return { value: t === undefined ? { isAnswered: false, reason: "empty-reply" } : { isAnswered: true, text: t, usage: {} } }; }); on("process.run", (_, e) => { procs.push({ argv: [...e.argv] }); const s = e.argv.join(" "); if (s.startsWith("git rev-parse")) return { value: { exitCode: 0, stdout: "/repo\n", stderr: "" } }; if (s.startsWith("git symbolic-ref")) return { value: { exitCode: 0, stdout: "origin/main\n", stderr: "" } }; if (s.startsWith("tea logins")) return { value: { exitCode: 0, stdout: "admin\n", stderr: "" } }; if (s.startsWith("tea pulls")) return { value: { exitCode: 0, stdout: "https://g/pulls/1\n", stderr: "" } }; return { value: { exitCode: 0, stdout: "", stderr: "" } }; }); on("fs.exists", (_, e) => ({ value: Boolean(opts.existing && String(e.path).endsWith("anima-greet/SKILL.md")) })); on("fs.read", (_, e) => ({ value: String(e.path).endsWith("plugin.json") ? "{\n \"version\": \"0.3.0\"\n}" : String(e.path).endsWith("README.md") ? "# jsc-anima\n" : "" })); on("fs.write", (_, e) => { writes[e.path] = e.text; return { value: undefined }; }); await $.session.start({ source: "startup", cwd: "/repo" }); return { writes, procs }; } const run = ($, args) => $.command.run({ command: "anima-skill", args }); (0,__vite_ssr_import_0__.test)("未啟動角色時工具二被拒絕並提示先啟動", async ($, on) => { const { procs } = await setup($, on); const r = await run($, "greet 打招呼"); (0,__vite_ssr_import_0__.expect)(r.text.includes("請先啟動角色")).toBe(true); (0,__vite_ssr_import_0__.expect)(procs.length).toBe(0); }); (0,__vite_ssr_import_0__.test)("新增技能:寫檔、升 minor、更新 README、建立 PR", async ($, on) => { const { writes, procs } = await setup($, on); await $.command.run({ command: "sao-asuna", args: "" }); const r = await run($, "greet 打招呼"); const key = (suffix) => Object.keys(writes).find((k) => k.endsWith(suffix)); (0,__vite_ssr_import_0__.expect)(writes[key("skills/anima-greet/SKILL.md")].includes("name: anima-greet")).toBe(true); (0,__vite_ssr_import_0__.expect)(writes[key(".claude-plugin/plugin.json")].includes("\"0.4.0\"")).toBe(true); (0,__vite_ssr_import_0__.expect)(writes[key("/README.md")].includes("目前版本:0.4.0") || Object.values(writes).some((v) => v.includes("目前版本:0.4.0"))).toBe(true); (0,__vite_ssr_import_0__.expect)(writes[key("skills/jsc-anima/README.md")].includes("/jsc-anima:anima-greet")).toBe(true); (0,__vite_ssr_import_0__.expect)(procs.some((p) => p.argv.join(" ").startsWith("git commit") && p.argv.join(" ").includes("feat: 新增技能"))).toBe(true); const pr = procs.find((p) => p.argv[0] === "tea" && p.argv[1] === "pulls"); (0,__vite_ssr_import_0__.expect)(pr.argv.includes("main")).toBe(true); (0,__vite_ssr_import_0__.expect)(pr.argv.includes("feat/anima-greet")).toBe(true); (0,__vite_ssr_import_0__.expect)(r.text.includes("https://g/pulls/1")).toBe(true); }); (0,__vite_ssr_import_0__.test)("技能已存在則覆蓋並升 patch", async ($, on) => { const { writes } = await setup($, on, { existing: true }); await $.command.run({ command: "sao-asuna", args: "" }); await run($, "greet 打招呼"); (0,__vite_ssr_import_0__.expect)(Object.entries(writes).some(([k, v]) => k.endsWith("plugin.json") && v.includes("\"0.3.1\""))).toBe(true); }); (0,__vite_ssr_import_0__.test)("驗證失敗或實跑失敗就不建立 PR", async ($, on) => { const bad = await setup($, on, { reply: () => JSON.stringify({ skill: "no frontmatter", example: "x" }) }); await $.command.run({ command: "sao-asuna", args: "" }); const r1 = await run($, "greet 打招呼"); (0,__vite_ssr_import_0__.expect)(r1.text.includes("驗證失敗")).toBe(true); (0,__vite_ssr_import_0__.expect)(bad.procs.some((p) => p.argv[0] === "tea")).toBe(false); (0,__vite_ssr_import_0__.expect)(Object.keys(bad.writes).length).toBe(0); }); (0,__vite_ssr_import_0__.test)("實跑無回應就不建立 PR", async ($, on) => { const s = await setup($, on, { reply: (p) => p.startsWith("請撰寫") ? GENERATED : undefined }); await $.command.run({ command: "sao-asuna", args: "" }); const r = await run($, "greet 打招呼"); (0,__vite_ssr_import_0__.expect)(r.text.includes("實跑失敗")).toBe(true); (0,__vite_ssr_import_0__.expect)(s.procs.some((p) => p.argv[0] === "tea")).toBe(false); }); (0,__vite_ssr_import_0__.test)("技能驗證與版本規則", () => { (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.validateSkill)(SKILL, "greet").length).toBe(0); (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.validateSkill)(SKILL, "other").length).toBe(1); (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.bumpVersion)("0.3.4", "minor")).toBe("0.4.0"); (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.bumpVersion)("0.3.4", "patch")).toBe("0.3.5"); const list = (0,__vite_ssr_import_1__.upsertEntry)((0,__vite_ssr_import_1__.parseEntries)((0,__vite_ssr_import_1__.renderGuide)([{ skill: "a", description: "A" }])), { skill: "b", description: "B" }); (0,__vite_ssr_import_0__.expect)(list.length).toBe(2); (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.renderGuide)(list).includes("# /jsc-anima:jsc-anima")).toBe(true); }); //# sourceMappingSource=vite-generated //# sourceMappingURL=data:application/json;base64,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QUFDeEUsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsic2tpbGx0b29sLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCBtb2NrLCB0ZXN0IH0gZnJvbSAnY2xhdWRlLWNvZGUvdGVzdGluZydcblxuaW1wb3J0IHsgYnVtcFZlcnNpb24sIHBhcnNlRW50cmllcywgcmVuZGVyR3VpZGUsIHVwc2VydEVudHJ5LCB2YWxpZGF0ZVNraWxsIH0gZnJvbSAnLi9za2lsbGdlbidcblxuY29uc3QgU0tJTEwgPSAnLS0tXFxubmFtZTogYW5pbWEtZ3JlZXRcXG5kZXNjcmlwdGlvbjog5omT5oub5ZG8XFxuLS0tXFxuXFxu55So6KeS6Imy5Y+j5ZC75ZCR5L2/55So6ICF5omT5oub5ZG877yM5Lim57Ch55+t6Kqq5piO5LuK5aSp55qE5b6F6L6m44CCXFxuJ1xuY29uc3QgR0VORVJBVEVEID0gSlNPTi5zdHJpbmdpZnkoeyBza2lsbDogU0tJTEwsIGV4YW1wbGU6ICfml6nlroknIH0pXG5cbnR5cGUgQ2FsbHMgPSB7IGFyZ3Y6IHN0cmluZ1tdIH1bXVxuXG4vLyDllZ/li5Xop5LoibLkuKbmm7/ouqvmiYDmnInlpJbpg6jvvJrmqKHlnovjgIHmqpTmoYjns7vntbHjgIFnaXTvvI90ZWHjgIJcbmFzeW5jIGZ1bmN0aW9uIHNldHVwKCQ6IGFueSwgb246IGFueSwgb3B0czogeyByZXBseT86IChwcm9tcHQ6IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkOyBleGlzdGluZz86IGJvb2xlYW4gfSA9IHt9KSB7XG4gIGNvbnN0IHdyaXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9XG4gIGNvbnN0IHByb2NzOiBDYWxscyA9IFtdXG4gIG1vY2suc3RvcmUob24pXG4gIG9uKCdjb21tYW5kLnJlZ2lzdGVyJywgKCkgPT4gKHsgdmFsdWU6IHsgbmFtZTogJ3gnIH0gfSkgYXMgbmV2ZXIpXG4gIG9uKCdzZXNzaW9uLnN0YXJ0JywgKCkgPT4gKHsgY3dkOiAnL3JlcG8nIH0pIGFzIG5ldmVyKVxuICBvbignc2Vzc2lvbi5jd2QnLCAoKSA9PiAoeyB2YWx1ZTogJy9yZXBvJyB9KSlcbiAgb24oJ2NvbW1hbmQucnVuJywgKCkgPT4gKHsgdGV4dDogJycgfSkpXG4gIG9uKCdwcm9tcHQuY29tcG9zZScsICgpID0+ICh7IHNlY3Rpb25zOiBbXSB9KSlcbiAgb24oJ21vZGVsLmNvbXBsZXRlJywgKF86IGFueSwgZTogYW55KSA9PiB7XG4gICAgY29uc3QgdCA9IG9wdHMucmVwbHkgPyBvcHRzLnJlcGx5KFN0cmluZyhlLnByb21wdCkpIDogU3RyaW5nKGUucHJvbXB0KS5zdGFydHNXaXRoKCfoq4vmkrDlr6snKSA/IEdFTkVSQVRFRCA6ICfll6jvvIEnXG4gICAgcmV0dXJuIHsgdmFsdWU6IHQgPT09IHVuZGVmaW5lZCA/IHsgaXNBbnN3ZXJlZDogZmFsc2UsIHJlYXNvbjogJ2VtcHR5LXJlcGx5JyB9IDogeyBpc0Fuc3dlcmVkOiB0cnVlLCB0ZXh0OiB0LCB1c2FnZToge30gfSB9XG4gIH0pXG4gIG9uKCdwcm9jZXNzLnJ1bicsIChfOiBhbnksIGU6IGFueSkgPT4ge1xuICAgIHByb2NzLnB1c2goeyBhcmd2OiBbLi4uZS5hcmd2XSB9KVxuICAgIGNvbnN0IHMgPSBlLmFyZ3Yuam9pbignICcpXG4gICAgaWYgKHMuc3RhcnRzV2l0aCgnZ2l0IHJldi1wYXJzZScpKSByZXR1cm4geyB2YWx1ZTogeyBleGl0Q29kZTogMCwgc3Rkb3V0OiAnL3JlcG9cXG4nLCBzdGRlcnI6ICcnIH0gfVxuICAgIGlmIChzLnN0YXJ0c1dpdGgoJ2dpdCBzeW1ib2xpYy1yZWYnKSkgcmV0dXJuIHsgdmFsdWU6IHsgZXhpdENvZGU6IDAsIHN0ZG91dDogJ29yaWdpbi9tYWluXFxuJywgc3RkZXJyOiAnJyB9IH1cbiAgICBpZiAocy5zdGFydHNXaXRoKCd0ZWEgbG9naW5zJykpIHJldHVybiB7IHZhbHVlOiB7IGV4aXRDb2RlOiAwLCBzdGRvdXQ6ICdhZG1pblxcbicsIHN0ZGVycjogJycgfSB9XG4gICAgaWYgKHMuc3RhcnRzV2l0aCgndGVhIHB1bGxzJykpIHJldHVybiB7IHZhbHVlOiB7IGV4aXRDb2RlOiAwLCBzdGRvdXQ6ICdodHRwczovL2cvcHVsbHMvMVxcbicsIHN0ZGVycjogJycgfSB9XG4gICAgcmV0dXJuIHsgdmFsdWU6IHsgZXhpdENvZGU6IDAsIHN0ZG91dDogJycsIHN0ZGVycjogJycgfSB9XG4gIH0pXG4gIG9uKCdmcy5leGlzdHMnLCAoXzogYW55LCBlOiBhbnkpID0+ICh7IHZhbHVlOiBCb29sZWFuKG9wdHMuZXhpc3RpbmcgJiYgU3RyaW5nKGUucGF0aCkuZW5kc1dpdGgoJ2FuaW1hLWdyZWV0L1NLSUxMLm1kJykpIH0pKVxuICBvbignZnMucmVhZCcsIChfOiBhbnksIGU6IGFueSkgPT4gKHtcbiAgICB2YWx1ZTogU3RyaW5nKGUucGF0aCkuZW5kc1dpdGgoJ3BsdWdpbi5qc29uJykgPyAne1xcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4zLjBcIlxcbn0nIDogU3RyaW5nKGUucGF0aCkuZW5kc1dpdGgoJ1JFQURNRS5tZCcpID8gJyMganNjLWFuaW1hXFxuJyA6ICcnLFxuICB9KSlcbiAgb24oJ2ZzLndyaXRlJywgKF86IGFueSwgZTogYW55KSA9PiB7XG4gICAgd3JpdGVzW2UucGF0aF0gPSBlLnRleHRcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkIH1cbiAgfSlcbiAgYXdhaXQgJC5zZXNzaW9uLnN0YXJ0KHsgc291cmNlOiAnc3RhcnR1cCcsIGN3ZDogJy9yZXBvJyB9IGFzIG5ldmVyKVxuICByZXR1cm4geyB3cml0ZXMsIHByb2NzIH1cbn1cblxuY29uc3QgcnVuID0gKCQ6IGFueSwgYXJnczogc3RyaW5nKSA9PiAkLmNvbW1hbmQucnVuKHsgY29tbWFuZDogJ2FuaW1hLXNraWxsJywgYXJncyB9IGFzIG5ldmVyKVxuXG50ZXN0KCfmnKrllZ/li5Xop5LoibLmmYLlt6Xlhbfkuozooqvmi5LntZXkuKbmj5DnpLrlhYjllZ/li5UnLCBhc3luYyAoJCwgb24pID0+IHtcbiAgY29uc3QgeyBwcm9jcyB9ID0gYXdhaXQgc2V0dXAoJCwgb24pXG4gIGNvbnN0IHIgPSBhd2FpdCBydW4oJCwgJ2dyZWV0IOaJk+aLm+WRvCcpXG4gIGV4cGVjdChyLnRleHQuaW5jbHVkZXMoJ+iri+WFiOWVn+WLleinkuiJsicpKS50b0JlKHRydWUpXG4gIGV4cGVjdChwcm9jcy5sZW5ndGgpLnRvQmUoMClcbn0pXG5cbnRlc3QoJ+aWsOWinuaKgOiDve+8muWvq+aqlOOAgeWNhyBtaW5vcuOAgeabtOaWsCBSRUFETUXjgIHlu7rnq4sgUFInLCBhc3luYyAoJCwgb24pID0+IHtcbiAgY29uc3QgeyB3cml0ZXMsIHByb2NzIH0gPSBhd2FpdCBzZXR1cCgkLCBvbilcbiAgYXdhaXQgJC5jb21tYW5kLnJ1bih7IGNvbW1hbmQ6ICdzYW8tYXN1bmEnLCBhcmdzOiAnJyB9IGFzIG5ldmVyKVxuICBjb25zdCByID0gYXdhaXQgcnVuKCQsICdncmVldCDmiZPmi5vlkbwnKVxuICBjb25zdCBrZXkgPSAoc3VmZml4OiBzdHJpbmcpID0+IE9iamVjdC5rZXlzKHdyaXRlcykuZmluZChrID0+IGsuZW5kc1dpdGgoc3VmZml4KSkhXG4gIGV4cGVjdCh3cml0ZXNba2V5KCdza2lsbHMvYW5pbWEtZ3JlZXQvU0tJTEwubWQnKV0hLmluY2x1ZGVzKCduYW1lOiBhbmltYS1ncmVldCcpKS50b0JlKHRydWUpXG4gIGV4cGVjdCh3cml0ZXNba2V5KCcuY2xhdWRlLXBsdWdpbi9wbHVnaW4uanNvbicpXSEuaW5jbHVkZXMoJ1wiMC40LjBcIicpKS50b0JlKHRydWUpXG4gIGV4cGVjdCh3cml0ZXNba2V5KCcvUkVBRE1FLm1kJyldIS5pbmNsdWRlcygn55uu5YmN54mI5pys77yaMC40LjAnKSB8fCBPYmplY3QudmFsdWVzKHdyaXRlcykuc29tZSh2ID0+IHYuaW5jbHVkZXMoJ+ebruWJjeeJiOacrO+8mjAuNC4wJykpKS50b0JlKHRydWUpXG4gIGV4cGVjdCh3cml0ZXNba2V5KCdza2lsbHMvanNjLWFuaW1hL1JFQURNRS5tZCcpXSEuaW5jbHVkZXMoJy9qc2MtYW5pbWE6YW5pbWEtZ3JlZXQnKSkudG9CZSh0cnVlKVxuICBleHBlY3QocHJvY3Muc29tZShwID0+IHAuYXJndi5qb2luKCcgJykuc3RhcnRzV2l0aCgnZ2l0IGNvbW1pdCcpICYmIHAuYXJndi5qb2luKCcgJykuaW5jbHVkZXMoJ2ZlYXQ6IOaWsOWinuaKgOiDvScpKSkudG9CZSh0cnVlKVxuICBjb25zdCBwciA9IHByb2NzLmZpbmQocCA9PiBwLmFyZ3ZbMF0gPT09ICd0ZWEnICYmIHAuYXJndlsxXSA9PT0gJ3B1bGxzJykhXG4gIGV4cGVjdChwci5hcmd2LmluY2x1ZGVzKCdtYWluJykpLnRvQmUodHJ1ZSlcbiAgZXhwZWN0KHByLmFyZ3YuaW5jbHVkZXMoJ2ZlYXQvYW5pbWEtZ3JlZXQnKSkudG9CZSh0cnVlKVxuICBleHBlY3Qoci50ZXh0LmluY2x1ZGVzKCdodHRwczovL2cvcHVsbHMvMScpKS50b0JlKHRydWUpXG59KVxuXG50ZXN0KCfmioDog73lt7LlrZjlnKjliYfopobok4vkuKbljYcgcGF0Y2gnLCBhc3luYyAoJCwgb24pID0+IHtcbiAgY29uc3QgeyB3cml0ZXMgfSA9IGF3YWl0IHNldHVwKCQsIG9uLCB7IGV4aXN0aW5nOiB0cnVlIH0pXG4gIGF3YWl0ICQuY29tbWFuZC5ydW4oeyBjb21tYW5kOiAnc2FvLWFzdW5hJywgYXJnczogJycgfSBhcyBuZXZlcilcbiAgYXdhaXQgcnVuKCQsICdncmVldCDmiZPmi5vlkbwnKVxuICBleHBlY3QoT2JqZWN0LmVudHJpZXMod3JpdGVzKS5zb21lKChbaywgdl0pID0+IGsuZW5kc1dpdGgoJ3BsdWdpbi5qc29uJykgJiYgdi5pbmNsdWRlcygnXCIwLjMuMVwiJykpKS50b0JlKHRydWUpXG59KVxuXG50ZXN0KCfpqZforYnlpLHmlZfmiJblr6bot5HlpLHmlZflsLHkuI3lu7rnq4sgUFInLCBhc3luYyAoJCwgb24pID0+IHtcbiAgY29uc3QgYmFkID0gYXdhaXQgc2V0dXAoJCwgb24sIHsgcmVwbHk6ICgpID0+IEpTT04uc3RyaW5naWZ5KHsgc2tpbGw6ICdubyBmcm9udG1hdHRlcicsIGV4YW1wbGU6ICd4JyB9KSB9KVxuICBhd2FpdCAkLmNvbW1hbmQucnVuKHsgY29tbWFuZDogJ3Nhby1hc3VuYScsIGFyZ3M6ICcnIH0gYXMgbmV2ZXIpXG4gIGNvbnN0IHIxID0gYXdhaXQgcnVuKCQsICdncmVldCDmiZPmi5vlkbwnKVxuICBleHBlY3QocjEudGV4dC5pbmNsdWRlcygn6amX6K2J5aSx5pWXJykpLnRvQmUodHJ1ZSlcbiAgZXhwZWN0KGJhZC5wcm9jcy5zb21lKHAgPT4gcC5hcmd2WzBdID09PSAndGVhJykpLnRvQmUoZmFsc2UpXG4gIGV4cGVjdChPYmplY3Qua2V5cyhiYWQud3JpdGVzKS5sZW5ndGgpLnRvQmUoMClcbn0pXG5cbnRlc3QoJ+Wvpui3keeEoeWbnuaHieWwseS4jeW7uueriyBQUicsIGFzeW5jICgkLCBvbikgPT4ge1xuICBjb25zdCBzID0gYXdhaXQgc2V0dXAoJCwgb24sIHsgcmVwbHk6IHAgPT4gKHAuc3RhcnRzV2l0aCgn6KuL5pKw5a+rJykgPyBHRU5FUkFURUQgOiB1bmRlZmluZWQpIH0pXG4gIGF3YWl0ICQuY29tbWFuZC5ydW4oeyBjb21tYW5kOiAnc2FvLWFzdW5hJywgYXJnczogJycgfSBhcyBuZXZlcilcbiAgY29uc3QgciA9IGF3YWl0IHJ1bigkLCAnZ3JlZXQg5omT5oub5ZG8JylcbiAgZXhwZWN0KHIudGV4dC5pbmNsdWRlcygn5a+m6LeR5aSx5pWXJykpLnRvQmUodHJ1ZSlcbiAgZXhwZWN0KHMucHJvY3Muc29tZShwID0+IHAuYXJndlswXSA9PT0gJ3RlYScpKS50b0JlKGZhbHNlKVxufSlcblxudGVzdCgn5oqA6IO96amX6K2J6IiH54mI5pys6KaP5YmHJywgKCkgPT4ge1xuICBleHBlY3QodmFsaWRhdGVTa2lsbChTS0lMTCwgJ2dyZWV0JykubGVuZ3RoKS50b0JlKDApXG4gIGV4cGVjdCh2YWxpZGF0ZVNraWxsKFNLSUxMLCAnb3RoZXInKS5sZW5ndGgpLnRvQmUoMSlcbiAgZXhwZWN0KGJ1bXBWZXJzaW9uKCcwLjMuNCcsICdtaW5vcicpKS50b0JlKCcwLjQuMCcpXG4gIGV4cGVjdChidW1wVmVyc2lvbignMC4zLjQnLCAncGF0Y2gnKSkudG9CZSgnMC4zLjUnKVxuICBjb25zdCBsaXN0ID0gdXBzZXJ0RW50cnkocGFyc2VFbnRyaWVzKHJlbmRlckd1aWRlKFt7IHNraWxsOiAnYScsIGRlc2NyaXB0aW9uOiAnQScgfV0pKSwgeyBza2lsbDogJ2InLCBkZXNjcmlwdGlvbjogJ0InIH0pXG4gIGV4cGVjdChsaXN0Lmxlbmd0aCkudG9CZSgyKVxuICBleHBlY3QocmVuZGVyR3VpZGUobGlzdCkuaW5jbHVkZXMoJyMgL2pzYy1hbmltYTpqc2MtYW5pbWEnKSkudG9CZSh0cnVlKVxufSlcbiJdLCJmaWxlIjoiL2hvb2tzL3NraWxsdG9vbC50ZXN0LnRzIn0= //# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvcm9vdC9qc2MtYW5pbWEvaG9va3Mvc2tpbGx0b29sLnRlc3QudHMiLCIvaG9va3Mvc2tpbGx0b29sLnRlc3QudHMiLHsidXJscyI6IjYiLCJpZHMiOiI3In0sWyI4IiwiOSJdLFtdLFsiOCIsIjkiXSx7fSwiY2xhdWRlLWNvZGUvdGVzdGluZyIsIi9ob29rcy9za2lsbGdlbi50cyJd