The agent-roles catalog content files move from JSON to YAML so each role's long `instructions` system prompt is stored as a literal block scalar (`|-`): editing one sentence now produces a line-by-line diff and the prompt is editable as plain multi-line text instead of a single escaped JSON string. Data: - `index.json` -> `index.yaml`, `bundles/<id>/<lang>.json` -> `<lang>.yaml` (old `.json` deleted). Converted programmatically via the `yaml` library with `lineWidth: 0`; round-trip verified deepEqual against the old JSON, so the resolved role content is byte-for-byte identical and no `version` is bumped (content-hash lock unchanged). Server (`AiAgentRolesCatalogProvider`): - parse with `yaml`'s safe default (JSON-compatible) schema instead of `JSON.parse` — `strict: true` (rejects unknown tags / duplicate keys) and `maxAliasCount: 100` (billion-laughs guard); no custom `!!` tags / no code execution. Fetched paths become `index.yaml` / `<lang>.yaml`. The streaming 1 MB size cap, `redirect: 'error'`, 10s timeout and `^[a-z0-9-]+$` path-traversal/SSRF guard are unchanged; the hand-written type guards are untouched (`instructions` is still a string after parsing). - add `yaml` as a direct server dependency (already in the lockfile as a transitive dep). Catalog tooling: - `scripts/check.mjs` parses the catalog as YAML (lockfile stays JSON); pin `yaml` as a devDependency of the catalog package. Tests: - provider spec fixtures serialized with `yaml`; new tests for the block-scalar `instructions` round-trip (exact multi-line string), malformed YAML and strict duplicate-key rejection -> BadGateway; size-cap and path-traversal cases retargeted to the `.yaml` paths. Docs: README, `.env.example`, `catalog-types.ts` comments and CHANGELOG updated to the YAML layout. `AI_AGENT_ROLES_CATALOG_URL` base-URL contract unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
12 lines
182 B
JSON
12 lines
182 B
JSON
{
|
|
"name": "agent-roles-catalog",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"check": "node scripts/check.mjs"
|
|
},
|
|
"devDependencies": {
|
|
"yaml": "^2.8.3"
|
|
}
|
|
}
|