diff --git a/src/hooks/frontmatter.test.ts b/src/hooks/frontmatter.test.ts index 98ba9478b..7e5a188c6 100644 --- a/src/hooks/frontmatter.test.ts +++ b/src/hooks/frontmatter.test.ts @@ -256,4 +256,20 @@ metadata: expect(clawdbot?.requires?.config).toEqual(["workspace.dir"]); expect(clawdbot?.install?.[0].kind).toBe("bundled"); }); + + it("parses YAML metadata map", () => { + const content = `--- +name: yaml-metadata +metadata: + clawdbot: + emoji: disk + events: + - command:new +--- +`; + const frontmatter = parseFrontmatter(content); + const clawdbot = resolveClawdbotMetadata(frontmatter); + expect(clawdbot?.emoji).toBe("disk"); + expect(clawdbot?.events).toEqual(["command:new"]); + }); }); diff --git a/src/markdown/frontmatter.test.ts b/src/markdown/frontmatter.test.ts index 2a6323f11..c20767983 100644 --- a/src/markdown/frontmatter.test.ts +++ b/src/markdown/frontmatter.test.ts @@ -37,6 +37,38 @@ metadata: expect(parsed.clawdbot?.emoji).toBe("disk"); }); + it("preserves inline JSON values", () => { + const content = `--- +name: inline-json +metadata: {"clawdbot": {"events": ["test"]}} +--- +`; + const result = parseFrontmatterBlock(content); + expect(result.metadata).toBe('{"clawdbot": {"events": ["test"]}}'); + }); + + it("stringifies YAML objects and arrays", () => { + const content = `--- +name: yaml-objects +enabled: true +retries: 3 +tags: + - alpha + - beta +metadata: + clawdbot: + events: + - command:new +--- +`; + const result = parseFrontmatterBlock(content); + expect(result.enabled).toBe("true"); + expect(result.retries).toBe("3"); + expect(JSON.parse(result.tags ?? "[]")).toEqual(["alpha", "beta"]); + const parsed = JSON5.parse(result.metadata ?? "") as { clawdbot?: { events?: string[] } }; + expect(parsed.clawdbot?.events).toEqual(["command:new"]); + }); + it("returns empty when frontmatter is missing", () => { const content = "# No frontmatter"; expect(parseFrontmatterBlock(content)).toEqual({});