feat(omo-codex): rework skill set around ulw-loop and planner agents
Rename ultragoal skill to ulw-loop with a CLI bootstrap fallback and openai.yaml hint metadata, while keeping ultragoal as a discoverable alias. Drop the metis and momus skills in favor of bundled ultrawork planner agents and rewrite the planing-prometheustic skill. Update aggregate and sync-skills tests to match.
This commit is contained in:
@@ -45,6 +45,7 @@ test("#given isolated components #when hooks are inspected #then commands stay i
|
||||
"components/comment-checker/dist/cli.js",
|
||||
"components/lsp/dist/cli.js",
|
||||
"components/rules/dist/cli.js",
|
||||
"components/start-work-continuation/dist/cli.js",
|
||||
"components/telemetry/dist/cli.js",
|
||||
"components/ultragoal/dist/cli.js",
|
||||
"components/ultrawork/dist/cli.js",
|
||||
@@ -121,7 +122,15 @@ test("#given component directories #when scanned #then only intentional resource
|
||||
const componentNames = components.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort();
|
||||
|
||||
// then
|
||||
assert.deepEqual(componentNames, ["comment-checker", "lsp", "rules", "telemetry", "ultragoal", "ultrawork"]);
|
||||
assert.deepEqual(componentNames, [
|
||||
"comment-checker",
|
||||
"lsp",
|
||||
"rules",
|
||||
"start-work-continuation",
|
||||
"telemetry",
|
||||
"ultragoal",
|
||||
"ultrawork",
|
||||
]);
|
||||
for (const name of componentNames) {
|
||||
const expectedManifest = expectedComponentManifests.get(name);
|
||||
if (expectedManifest !== undefined) {
|
||||
@@ -136,7 +145,7 @@ test("#given component directories #when scanned #then only intentional resource
|
||||
}
|
||||
});
|
||||
|
||||
test("#given bundled Codex agents #when components/ultrawork/agents directory is scanned #then explorer librarian and reviewer TOMLs are present and match expected schema keys", async () => {
|
||||
test("#given bundled Codex agents #when components/ultrawork/agents directory is scanned #then planner support TOMLs are present and match expected schema keys", async () => {
|
||||
const agentsDir = join(root, "components", "ultrawork", "agents");
|
||||
const entries = (await readdir(agentsDir, { withFileTypes: true }))
|
||||
.filter((entry) => entry.isFile() && entry.name.endsWith(".toml"))
|
||||
@@ -147,6 +156,8 @@ test("#given bundled Codex agents #when components/ultrawork/agents directory is
|
||||
"codex-ultrawork-reviewer.toml",
|
||||
"explorer.toml",
|
||||
"librarian.toml",
|
||||
"metis.toml",
|
||||
"momus.toml",
|
||||
"plan.toml",
|
||||
]);
|
||||
|
||||
@@ -161,7 +172,7 @@ test("#given bundled Codex agents #when components/ultrawork/agents directory is
|
||||
}
|
||||
});
|
||||
|
||||
test("#given synced skills with Codex compatibility guidance #when explorer/librarian agent_type is referenced #then a matching TOML is bundled", async () => {
|
||||
test("#given synced skills with Codex compatibility guidance #when a bundled agent_type is referenced #then a matching TOML is bundled", async () => {
|
||||
const skillsDir = join(root, "skills");
|
||||
const skillEntries = await readdir(skillsDir, { withFileTypes: true });
|
||||
const skillFiles = skillEntries
|
||||
@@ -180,7 +191,7 @@ test("#given synced skills with Codex compatibility guidance #when explorer/libr
|
||||
}
|
||||
|
||||
const expected = [...referencedAgentTypes].sort();
|
||||
assert.deepEqual(expected, ["explorer", "librarian", "plan"]);
|
||||
assert.deepEqual(expected, ["explorer", "librarian", "metis", "momus", "plan"]);
|
||||
|
||||
for (const agentType of expected) {
|
||||
const tomlPath = join(root, "components", "ultrawork", "agents", `${agentType}.toml`);
|
||||
|
||||
@@ -13,8 +13,6 @@ const expectedSkills = [
|
||||
"frontend-ui-ux",
|
||||
"init-deep",
|
||||
"lsp",
|
||||
"metis",
|
||||
"momus",
|
||||
"planing-prometheustic",
|
||||
"programming",
|
||||
"refactor",
|
||||
@@ -43,6 +41,35 @@ test("#given synced aggregate Codex skills #when inspected #then component and s
|
||||
}
|
||||
});
|
||||
|
||||
test("#given synced ultragoal skill #when Codex hint metadata is inspected #then ulw-loop surfaces the ultragoal alias", async () => {
|
||||
// given
|
||||
const skillRoot = join(root, "skills", "ultragoal");
|
||||
|
||||
// when
|
||||
const skill = await readFile(join(skillRoot, "SKILL.md"), "utf8");
|
||||
const interfaceMetadata = await readFile(join(skillRoot, "agents", "openai.yaml"), "utf8");
|
||||
|
||||
// then
|
||||
assert.match(skill, /^---\nname: ulw-loop\n/m);
|
||||
assert.match(skill, /Goal-like loop that uses ultrawork mode to decompose work into systematic, evidence-bound steps\./);
|
||||
assert.match(interfaceMetadata, /display_name: "ulw loop"/);
|
||||
assert.doesNotMatch(interfaceMetadata, /ulw-loop \/ ultragoal/);
|
||||
assert.match(interfaceMetadata, /short_description: "Goal-like ultrawork loop for systematic decomposition"/);
|
||||
assert.match(interfaceMetadata, /default_prompt: "Use \$ulw-loop/);
|
||||
});
|
||||
|
||||
test("#given synced ultragoal skill #when Codex hint metadata is inspected #then ultragoal remains discoverable as an alias", async () => {
|
||||
// given
|
||||
const skillRoot = join(root, "skills", "ultragoal");
|
||||
|
||||
// when
|
||||
const interfaceMetadata = await readFile(join(skillRoot, "agents", "openai.yaml"), "utf8");
|
||||
|
||||
// then
|
||||
assert.match(interfaceMetadata, /search_terms:/);
|
||||
assert.match(interfaceMetadata, /- "ultragoal"/);
|
||||
});
|
||||
|
||||
test("#given synced aggregate Codex skills #when they contain OpenCode orchestration examples #then Codex tool compatibility guidance is injected", async () => {
|
||||
// given
|
||||
const skillsRoot = join(root, "skills");
|
||||
|
||||
Reference in New Issue
Block a user