feat: add actor skill — frontmatter protocol + CAS reference

Adds 'uwf skill actor' command for agents executing workflow roles.
Covers the two things an actor needs to know:
1. Frontmatter output protocol (status field, schema-defined fields)
2. CAS operations (put, get, refs, walk, merkle DAG pattern)

Refs #540
This commit is contained in:
2026-05-26 15:31:11 +00:00
parent d50159c5a7
commit 95a130136b
5 changed files with 91 additions and 2 deletions
@@ -6,6 +6,7 @@ import { describe, expect, test } from "vitest";
const __dirname = dirname(fileURLToPath(import.meta.url));
import {
cmdSkillActor,
cmdSkillArchitecture,
cmdSkillCli,
cmdSkillList,
@@ -21,8 +22,8 @@ describe("skill commands", () => {
expect(result).toContain("architecture");
expect(result).toContain("yaml");
expect(result).toContain("moderator");
expect(result).toContain("actor");
for (const name of result) {
expect(typeof name).toBe("string");
expect(name).toMatch(/^\S+$/);
}
});
@@ -62,6 +63,15 @@ describe("skill commands", () => {
expect(result).toContain("uwf");
});
test("skill actor returns non-empty markdown string", () => {
const result = cmdSkillActor();
expect(typeof result).toBe("string");
expect(result).toContain("frontmatter");
expect(result).toContain("CAS");
expect(result).toContain("status");
expect(result.length).toBeGreaterThan(200);
});
test("skill help subcommand is suppressed", () => {
const output = execFileSync("bun", ["src/cli.ts", "skill", "--help"], {
cwd: join(__dirname, "..", ".."),
@@ -73,6 +83,7 @@ describe("skill commands", () => {
expect(output).toContain("architecture");
expect(output).toContain("yaml");
expect(output).toContain("moderator");
expect(output).toContain("actor");
expect(output).toContain("list");
});
});
+8
View File
@@ -17,6 +17,7 @@ import { cmdConfigGet, cmdConfigList, cmdConfigSet } from "./commands/config.js"
import { cmdLogClean, cmdLogList, cmdLogShow } from "./commands/log.js";
import { cmdSetup, cmdSetupInteractive } from "./commands/setup.js";
import {
cmdSkillActor,
cmdSkillArchitecture,
cmdSkillCli,
cmdSkillList,
@@ -503,6 +504,13 @@ skill
console.log(cmdSkillYaml());
});
skill
.command("actor")
.description("Print the actor reference (frontmatter protocol + CAS)")
.action(() => {
console.log(cmdSkillActor());
});
skill
.command("moderator")
.description("Print the moderator reference")
+2 -1
View File
@@ -1,11 +1,12 @@
export {
generateActorReference as cmdSkillActor,
generateArchitectureReference as cmdSkillArchitecture,
generateCliReference as cmdSkillCli,
generateModeratorReference as cmdSkillModerator,
generateYamlReference as cmdSkillYaml,
} from "@uncaged/workflow-util";
const SKILL_NAMES = ["cli", "architecture", "yaml", "moderator"] as const;
const SKILL_NAMES = ["cli", "architecture", "yaml", "moderator", "actor"] as const;
export function cmdSkillList(): ReadonlyArray<string> {
return [...SKILL_NAMES];