mirror of
https://github.com/stablyai/orca.git
synced 2026-09-29 16:02:50 +00:00
Shorten orchestration skill description under the Agent Skills 1024-char limit
The folded description was 1038 chars, so spec-conforming installers such as SkillStar rejected the bundled orchestration skill. Drop the two clauses already covered elsewhere in the same description: "decomposing work across agents" (implied by "structured multi-agent coordination") and "automation of the browser embedded inside Orca" (restated by the locked `orca-cli` embedded-pages sentence). Every routing trigger asserted by orchestration-skill-guidance.test.mjs, the orca-cli handoff boundary, and the Computer Use boundary are unchanged. Result: 958 chars. Add config/scripts/skill-description-length.test.mjs, which parses every skills/*/SKILL.md frontmatter with `yaml` and fails on an empty or >1024 char description, so the regression cannot return. orca-cli sits at 1015 and is left as is. Fixes #17935
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import { readdirSync, readFileSync } from 'node:fs'
|
||||
import { join, resolve } from 'node:path'
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { parse } from 'yaml'
|
||||
|
||||
const skillsDir = resolve(import.meta.dirname, '../../skills')
|
||||
// Why: the Agent Skills spec caps `description` at 1024 chars and conforming installers
|
||||
// reject the whole skill (#17935); the frontmatter is what the installer parses, so check it.
|
||||
const MAX_DESCRIPTION_LENGTH = 1024
|
||||
|
||||
function readDescription(skillName) {
|
||||
const skillMarkdown = readFileSync(join(skillsDir, skillName, 'SKILL.md'), 'utf8')
|
||||
const frontmatter = /^---\r?\n([\s\S]*?)\r?\n---\r?\n/u.exec(skillMarkdown)?.[1]
|
||||
|
||||
expect(frontmatter, `${skillName}: missing frontmatter`).toBeDefined()
|
||||
|
||||
return parse(frontmatter ?? '').description
|
||||
}
|
||||
|
||||
describe('bundled skill descriptions', () => {
|
||||
const skillNames = readdirSync(skillsDir, { withFileTypes: true })
|
||||
.filter((entry) => entry.isDirectory())
|
||||
.map((entry) => entry.name)
|
||||
|
||||
it('discovers the bundled skills', () => {
|
||||
expect(skillNames).toContain('orchestration')
|
||||
})
|
||||
|
||||
it.each(skillNames)('%s keeps description within the Agent Skills spec limit', (name) => {
|
||||
const description = readDescription(name)
|
||||
|
||||
expect(typeof description, `${name}: description must be a string`).toBe('string')
|
||||
expect(description.trim().length, `${name}: description is empty`).toBeGreaterThan(0)
|
||||
expect(
|
||||
description.length,
|
||||
`${name}: description is ${description.length} chars`
|
||||
).toBeLessThanOrEqual(MAX_DESCRIPTION_LENGTH)
|
||||
})
|
||||
})
|
||||
@@ -131,17 +131,17 @@
|
||||
"name": "orchestration",
|
||||
"sourcePath": "skills/orchestration",
|
||||
"releaseRevision": 29,
|
||||
"packageDigest": "7a386ce558ba54abe02b4a0de5d71fe3d63c944ef0888ddde130c729b37f7cc8",
|
||||
"gitTreeSha": "4199ec6988801dd491631706cba62631b4bed8fb",
|
||||
"packageDigest": "ec23f60ac90751e3f714a3f3833d335b92e8923c3a1dec338fc9f8e882dc4e0f",
|
||||
"gitTreeSha": "a46215169ad52b5f0d4793bc484ef000500a67d4",
|
||||
"files": [
|
||||
{
|
||||
"path": "SKILL.md",
|
||||
"size": 4451,
|
||||
"size": 4371,
|
||||
"executable": false,
|
||||
"classification": "text",
|
||||
"exactSha256": "a7e3350f037698ebbce36b2818d8383ec6e96c2a4825537caab39a83b4fb4b7f",
|
||||
"textNormalizedSha256": "a7e3350f037698ebbce36b2818d8383ec6e96c2a4825537caab39a83b4fb4b7f",
|
||||
"identitySha256": "a7e3350f037698ebbce36b2818d8383ec6e96c2a4825537caab39a83b4fb4b7f"
|
||||
"exactSha256": "0f062bd6c2046fa4436b2a27d4812f32ac797da0d9b915addff80248aec28860",
|
||||
"textNormalizedSha256": "0f062bd6c2046fa4436b2a27d4812f32ac797da0d9b915addff80248aec28860",
|
||||
"identitySha256": "0f062bd6c2046fa4436b2a27d4812f32ac797da0d9b915addff80248aec28860"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1046,17 +1046,17 @@
|
||||
},
|
||||
{
|
||||
"releaseRevision": 29,
|
||||
"packageDigest": "7a386ce558ba54abe02b4a0de5d71fe3d63c944ef0888ddde130c729b37f7cc8",
|
||||
"gitTreeSha": "4199ec6988801dd491631706cba62631b4bed8fb",
|
||||
"packageDigest": "ec23f60ac90751e3f714a3f3833d335b92e8923c3a1dec338fc9f8e882dc4e0f",
|
||||
"gitTreeSha": "a46215169ad52b5f0d4793bc484ef000500a67d4",
|
||||
"files": [
|
||||
{
|
||||
"path": "SKILL.md",
|
||||
"size": 4451,
|
||||
"size": 4371,
|
||||
"executable": false,
|
||||
"classification": "text",
|
||||
"exactSha256": "a7e3350f037698ebbce36b2818d8383ec6e96c2a4825537caab39a83b4fb4b7f",
|
||||
"textNormalizedSha256": "a7e3350f037698ebbce36b2818d8383ec6e96c2a4825537caab39a83b4fb4b7f",
|
||||
"identitySha256": "a7e3350f037698ebbce36b2818d8383ec6e96c2a4825537caab39a83b4fb4b7f"
|
||||
"exactSha256": "0f062bd6c2046fa4436b2a27d4812f32ac797da0d9b915addff80248aec28860",
|
||||
"textNormalizedSha256": "0f062bd6c2046fa4436b2a27d4812f32ac797da0d9b915addff80248aec28860",
|
||||
"identitySha256": "0f062bd6c2046fa4436b2a27d4812f32ac797da0d9b915addff80248aec28860"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -3,18 +3,18 @@ name: orchestration
|
||||
description: >-
|
||||
Use Orca orchestration for structured multi-agent coordination: threaded
|
||||
messages, blocking ask/reply flows, task dispatch, worker_done/escalation
|
||||
waits, task DAGs, decision gates, coordinator loops, or decomposing work
|
||||
across agents. Use `orca-cli` instead for full ownership handoffs, including
|
||||
requests phrased as "hand off", "handoff", "handover", "give this to another
|
||||
agent", or "another worktree" when the user did not explicitly ask to
|
||||
supervise, monitor, wait for results, or coordinate a DAG. Use `orca-cli` for
|
||||
terminal control, lightweight terminal prompts, shell commands, Orca
|
||||
worktree management, reading or waiting on terminals, and automation of the
|
||||
browser embedded inside Orca. Use Computer Use for external browser windows,
|
||||
webviews, Orca app UI, or desktop UI outside Orca's embedded browser only when
|
||||
the task requires OS/window-level control such as focus, menus, dialogs,
|
||||
coordinates, or screenshots. Use `orca-cli` for Orca's embedded pages and a
|
||||
page-automation tool such as Playwright or CDP for external pages.
|
||||
waits, task DAGs, decision gates, or coordinator loops. Use `orca-cli`
|
||||
instead for full ownership handoffs, including requests phrased as "hand
|
||||
off", "handoff", "handover", "give this to another agent", or "another
|
||||
worktree" when the user did not explicitly ask to supervise, monitor, wait
|
||||
for results, or coordinate a DAG. Use `orca-cli` for terminal control,
|
||||
lightweight terminal prompts, shell commands, Orca worktree management, and
|
||||
reading or waiting on terminals. Use Computer Use for external browser
|
||||
windows, webviews, Orca app UI, or desktop UI outside Orca's embedded browser
|
||||
only when the task requires OS/window-level control such as focus, menus,
|
||||
dialogs, coordinates, or screenshots. Use `orca-cli` for Orca's embedded
|
||||
pages and a page-automation tool such as Playwright or CDP for external
|
||||
pages.
|
||||
---
|
||||
|
||||
# Orca Inter-Agent Orchestration
|
||||
|
||||
@@ -3,18 +3,18 @@ name: orchestration
|
||||
description: >-
|
||||
Use Orca orchestration for structured multi-agent coordination: threaded
|
||||
messages, blocking ask/reply flows, task dispatch, worker_done/escalation
|
||||
waits, task DAGs, decision gates, coordinator loops, or decomposing work
|
||||
across agents. Use `orca-cli` instead for full ownership handoffs, including
|
||||
requests phrased as "hand off", "handoff", "handover", "give this to another
|
||||
agent", or "another worktree" when the user did not explicitly ask to
|
||||
supervise, monitor, wait for results, or coordinate a DAG. Use `orca-cli` for
|
||||
terminal control, lightweight terminal prompts, shell commands, Orca
|
||||
worktree management, reading or waiting on terminals, and automation of the
|
||||
browser embedded inside Orca. Use Computer Use for external browser windows,
|
||||
webviews, Orca app UI, or desktop UI outside Orca's embedded browser only when
|
||||
the task requires OS/window-level control such as focus, menus, dialogs,
|
||||
coordinates, or screenshots. Use `orca-cli` for Orca's embedded pages and a
|
||||
page-automation tool such as Playwright or CDP for external pages.
|
||||
waits, task DAGs, decision gates, or coordinator loops. Use `orca-cli`
|
||||
instead for full ownership handoffs, including requests phrased as "hand
|
||||
off", "handoff", "handover", "give this to another agent", or "another
|
||||
worktree" when the user did not explicitly ask to supervise, monitor, wait
|
||||
for results, or coordinate a DAG. Use `orca-cli` for terminal control,
|
||||
lightweight terminal prompts, shell commands, Orca worktree management, and
|
||||
reading or waiting on terminals. Use Computer Use for external browser
|
||||
windows, webviews, Orca app UI, or desktop UI outside Orca's embedded browser
|
||||
only when the task requires OS/window-level control such as focus, menus,
|
||||
dialogs, coordinates, or screenshots. Use `orca-cli` for Orca's embedded
|
||||
pages and a page-automation tool such as Playwright or CDP for external
|
||||
pages.
|
||||
---
|
||||
|
||||
# Orca Orchestration
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user