@vibe-agent-toolkit/agent-schema 0.1.41-rc.6 → 0.1.41-rc.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,7 +19,7 @@ export const CODE_REGISTRY = {
19
19
  LINK_DEFERRED_ARTIFACT: entry('info', 'Link targets a deferred build artifact declared in the skill files: config; it will exist after the build materializes it.', 'No action needed if the files: entry is correct. To silence, set validation.severity.LINK_DEFERRED_ARTIFACT: ignore.', 'link_deferred_artifact'),
20
20
  LINK_TO_SKILL_DEFINITION: entry('error', "Markdown link targets another skill's SKILL.md; bundling it creates duplicate skill definitions.", 'Link to a specific resource inside the other skill, or reference the other skill by name.', 'link_to_skill_definition'),
21
21
  LINK_DROPPED_BY_DEPTH: entry('warning', 'Walker stopped following links at the configured linkFollowDepth; this link was not bundled.', 'Raise linkFollowDepth, bundle the file via files config, declare the drop intentional with validation.allow, or exclude via excludeReferencesFromBundle.rules.', 'link_dropped_by_depth'),
22
- PACKAGED_UNREFERENCED_FILE: entry('error', 'File in the packaged output is not referenced from any packaged markdown.', 'Add a markdown link or code-block mention in SKILL.md or a linked resource. Allow via validation.allow if the file is consumed programmatically.', 'packaged_unreferenced_file'),
22
+ PACKAGED_UNREFERENCED_FILE: entry('error', 'File in the packaged output is not referenced from any packaged markdown.', 'Add a markdown link or code-block mention in SKILL.md or a linked resource. A file consumed programmatically belongs in skills.config.<name>.files as a source/dest pair — a declared dest is exempt, so do NOT restate it in validation.allow.', 'packaged_unreferenced_file'),
23
23
  PACKAGED_TEST_INPUT: entry('warning', "A link or files: entry pointed into the skill's declared test input (its test.evals path) and was NOT packaged; test input — including the expected_output answer key — never ships to consumers.", 'No action needed — the build already excluded it. Remove the link or files: entry to silence this, or move the target out of the test.evals directory if it is genuinely a shipped resource.', 'packaged_test_input'),
24
24
  PACKAGED_BROKEN_LINK: entry('error', 'Link in the packaged output resolves to a file that is not present in the output (likely a link-rewriter bug).', 'Report the issue — this indicates a VAT bug. As a temporary workaround, set severity.PACKAGED_BROKEN_LINK to ignore while the underlying bug is fixed.', 'packaged_broken_link'),
25
25
  DUPLICATE_RESOURCE_ID: entry('error', 'Two files resolve to the same resource id after path normalization.', 'Rename one of the files so they produce distinct resource ids.', 'duplicate_resource_id'),
@@ -37,7 +37,7 @@ export const CODE_REGISTRY = {
37
37
  RESERVED_WORD_IN_NAME: entry('warning', 'Frontmatter `name` contains a reserved word (`anthropic` or `claude`); Claude Code rejects non-certified skills using these words.', 'Rename the skill to avoid `anthropic` or `claude` in the name.', 'reserved_word_in_name'),
38
38
  SKILL_TIME_SENSITIVE_CONTENT: entry('info', 'SKILL.md body contains time-sensitive prose (e.g., "as of November 2025") that may become stale.', 'Remove the time qualifier, or move deprecated guidance into a clearly labeled "## Old patterns" section with a <details> block.', 'skill_time_sensitive_content'),
39
39
  NON_PORTABLE_ASSET_REFERENCE: entry('warning', 'A skill document (SKILL.md or a reachable bundled reference file) references a bundled script/asset via a non-portable anchor (CLAUDE_PLUGIN_ROOT). It is a Claude Code plugin-only variable that points at the plugin, not the skill, so the path breaks when the skill is mounted standalone (claude.ai upload, API container).', 'Reference bundled files by a path relative to the skill directory (e.g. `scripts/run.mjs`), never via CLAUDE_PLUGIN_ROOT, an absolute path, or an env-var anchor. See the vibe-agent-toolkit:vat-skill-authoring skill.', 'non_portable_asset_reference'),
40
- NON_PORTABLE_COMMAND: entry('warning', 'A skill document (SKILL.md or a reachable bundled reference file) instructs an agent to run a shell command that hard-codes a GNU/Linux-only utility or flag (e.g. `timeout`, `grep -P`, `sed -i` with no suffix, `readlink -f`, `date -d`). These fail on macOS/BSD where the agent may execute them.', 'Use a portable equivalent: `grep -E` for PCRE, `sed -i.bak`/an explicit suffix, a temp file instead of bare `-i`, a portable resolve instead of `readlink -f`, and `date -v`/`-j -f` instead of `date -d`. Gate or avoid `timeout` (absent on macOS by default). See the vibe-agent-toolkit:vat-skill-review skill.', 'non_portable_command'),
40
+ NON_PORTABLE_COMMAND: entry('warning', 'A skill document (SKILL.md or a reachable bundled reference file) instructs an agent to run a shell command that hard-codes a GNU/Linux-only utility or flag (e.g. `timeout`, `grep -P`, `sed -i` with no suffix, `readlink -f`, `date -d`). These fail, or behave differently, on macOS/BSD where the agent may execute them.', 'Use a portable equivalent: `grep -E` for PCRE, `sed -i.bak`/an explicit suffix, a temp file instead of bare `-i`, a portable resolve instead of `readlink -f`, and `date -v`/`-j -f` instead of `date -d`. Gate or avoid `timeout` (absent on macOS by default). See the vibe-agent-toolkit:vat-skill-review skill.', 'non_portable_command'),
41
41
  SKILL_FRONTMATTER_EXTRA_FIELDS: entry('warning', 'SKILL.md frontmatter contains a field outside the standard agentskills.io + Claude Code key set.', 'Move custom data under `metadata.<key>`, or remove the field. Per-project config belongs in vibe-agent-toolkit.config.yaml, not SKILL.md frontmatter.', 'skill_frontmatter_extra_fields'),
42
42
  SKILL_CROSS_SKILL_AUTH_UNDECLARED: entry('warning', 'SKILL.md body declares a dependency on a sibling skill or ANTHROPIC_*_KEY environment variable that is not mentioned in the description.', 'Name the dependency in the description (e.g. "Requires ado skill for auth" or "Requires ANTHROPIC_ADMIN_API_KEY") so agents loading the skill discover it without reading the body.', 'skill_cross_skill_auth_undeclared'),
43
43
  SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE: entry('warning', 'Sibling skills in the same package use mixed YAML scalar styles for their `description` frontmatter (e.g., folded `>-` alongside inline double-quoted).', 'Pick one YAML style and apply it to every skill in the package.', 'skill_description_style_mixed_in_package'),
@@ -1 +1 @@
1
- {"version":3,"file":"validation-codes.js","sourceRoot":"","sources":["../src/validation-codes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation-codes.js","sourceRoot":"","sources":["../src/validation-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,MAAM,KAAK,GAAG,CACZ,eAAgC,EAChC,WAAmB,EACnB,GAAW,EACX,MAAc,EACK,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAEzF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,oBAAoB,EAAE,KAAK,CACzB,OAAO,EACP,0DAA0D,EAC1D,gIAAgI,EAChI,sBAAsB,CACvB;IACD,sBAAsB,EAAE,KAAK,CAC3B,OAAO,EACP,mHAAmH,EACnH,iLAAiL,EACjL,wBAAwB,CACzB;IACD,uBAAuB,EAAE,KAAK,CAC5B,SAAS,EACT,yGAAyG,EACzG,wIAAwI,EACxI,yBAAyB,CAC1B;IACD,uBAAuB,EAAE,KAAK,CAC5B,OAAO,EACP,sFAAsF,EACtF,8HAA8H,EAC9H,yBAAyB,CAC1B;IACD,mBAAmB,EAAE,KAAK,CACxB,OAAO,EACP,mFAAmF,EACnF,yGAAyG,EACzG,qBAAqB,CACtB;IACD,sBAAsB,EAAE,KAAK,CAC3B,MAAM,EACN,4HAA4H,EAC5H,sHAAsH,EACtH,wBAAwB,CACzB;IACD,wBAAwB,EAAE,KAAK,CAC7B,OAAO,EACP,kGAAkG,EAClG,2FAA2F,EAC3F,0BAA0B,CAC3B;IACD,qBAAqB,EAAE,KAAK,CAC1B,SAAS,EACT,8FAA8F,EAC9F,gKAAgK,EAChK,uBAAuB,CACxB;IACD,0BAA0B,EAAE,KAAK,CAC/B,OAAO,EACP,2EAA2E,EAC3E,iPAAiP,EACjP,4BAA4B,CAC7B;IACD,mBAAmB,EAAE,KAAK,CACxB,SAAS,EACT,mMAAmM,EACnM,8LAA8L,EAC9L,qBAAqB,CACtB;IACD,oBAAoB,EAAE,KAAK,CACzB,OAAO,EACP,gHAAgH,EAChH,wJAAwJ,EACxJ,sBAAsB,CACvB;IACD,qBAAqB,EAAE,KAAK,CAC1B,OAAO,EACP,qEAAqE,EACrE,gEAAgE,EAChE,uBAAuB,CACxB;IACD,gCAAgC,EAAE,KAAK,CACrC,SAAS,EACT,2FAA2F,EAC3F,mGAAmG,EACnG,kCAAkC,CACnC;IACD,sBAAsB,EAAE,KAAK,CAC3B,SAAS,EACT,0DAA0D,EAC1D,+FAA+F,EAC/F,wBAAwB,CACzB;IACD,oBAAoB,EAAE,KAAK,CACzB,SAAS,EACT,oDAAoD,EACpD,iFAAiF,EACjF,sBAAsB,CACvB;IACD,kBAAkB,EAAE,KAAK,CACvB,SAAS,EACT,kGAAkG,EAClG,mEAAmE,EACnE,oBAAoB,CACrB;IACD,qBAAqB,EAAE,KAAK,CAC1B,SAAS,EACT,kEAAkE,EAClE,8DAA8D,EAC9D,uBAAuB,CACxB;IACD,yBAAyB,EAAE,KAAK,CAC9B,SAAS,EACT,8EAA8E,EAC9E,gFAAgF,EAChF,2BAA2B,CAC5B;IACD,wCAAwC,EAAE,KAAK,CAC7C,SAAS,EACT,mFAAmF,EACnF,0HAA0H,EAC1H,0CAA0C,CAC3C;IACD,+BAA+B,EAAE,KAAK,CACpC,SAAS,EACT,oHAAoH,EACpH,0FAA0F,EAC1F,iCAAiC,CAClC;IACD,8BAA8B,EAAE,KAAK,CACnC,SAAS,EACT,+EAA+E,EAC/E,0HAA0H,EAC1H,gCAAgC,CACjC;IACD,iCAAiC,EAAE,KAAK,CACtC,SAAS,EACT,gFAAgF,EAChF,gNAAgN,EAChN,mCAAmC,CACpC;IACD,yBAAyB,EAAE,KAAK,CAC9B,SAAS,EACT,wEAAwE,EACxE,wFAAwF,EACxF,2BAA2B,CAC5B;IACD,qBAAqB,EAAE,KAAK,CAC1B,SAAS,EACT,oIAAoI,EACpI,gEAAgE,EAChE,uBAAuB,CACxB;IACD,4BAA4B,EAAE,KAAK,CACjC,MAAM,EACN,kGAAkG,EAClG,iIAAiI,EACjI,8BAA8B,CAC/B;IACD,4BAA4B,EAAE,KAAK,CACjC,SAAS,EACT,mUAAmU,EACnU,yNAAyN,EACzN,8BAA8B,CAC/B;IACD,oBAAoB,EAAE,KAAK,CACzB,SAAS,EACT,gUAAgU,EAChU,qTAAqT,EACrT,sBAAsB,CACvB;IACD,8BAA8B,EAAE,KAAK,CACnC,SAAS,EACT,kGAAkG,EAClG,uJAAuJ,EACvJ,gCAAgC,CACjC;IACD,iCAAiC,EAAE,KAAK,CACtC,SAAS,EACT,0IAA0I,EAC1I,qLAAqL,EACrL,mCAAmC,CACpC;IACD,wCAAwC,EAAE,KAAK,CAC7C,SAAS,EACT,yJAAyJ,EACzJ,iEAAiE,EACjE,0CAA0C,CAC3C;IACD,0BAA0B,EAAE,KAAK,CAC/B,MAAM,EACN,6DAA6D,EAC7D,4FAA4F,EAC5F,4BAA4B,CAC7B;IACD,qBAAqB,EAAE,KAAK,CAC1B,MAAM,EACN,wDAAwD,EACxD,kHAAkH,EAClH,uBAAuB,CACxB;IACD,sBAAsB,EAAE,KAAK,CAC3B,MAAM,EACN,yDAAyD,EACzD,mGAAmG,EACnG,wBAAwB,CACzB;IACD,0BAA0B,EAAE,KAAK,CAC/B,MAAM,EACN,4HAA4H,EAC5H,sJAAsJ,EACtJ,4BAA4B,CAC7B;IACD,yBAAyB,EAAE,KAAK,CAC9B,MAAM,EACN,oEAAoE,EACpE,oJAAoJ,EACpJ,2BAA2B,CAC5B;IACD,6BAA6B,EAAE,KAAK,CAClC,MAAM,EACN,oIAAoI,EACpI,6MAA6M,EAC7M,+BAA+B,CAChC;IACD,yBAAyB,EAAE,KAAK,CAC9B,MAAM,EACN,8GAA8G,EAC9G,2QAA2Q,EAC3Q,2BAA2B,CAC5B;IACD,sBAAsB,EAAE,KAAK,CAC3B,MAAM,EACN,wFAAwF,EACxF,8IAA8I,EAC9I,wBAAwB,CACzB;IACD,uBAAuB,EAAE,KAAK,CAC5B,MAAM,EACN,kEAAkE,EAClE,+FAA+F,EAC/F,yBAAyB,CAC1B;IACD,uBAAuB,EAAE,KAAK,CAC5B,MAAM,EACN,6DAA6D,EAC7D,+GAA+G,EAC/G,yBAAyB,CAC1B;IACD,0BAA0B,EAAE,KAAK,CAC/B,SAAS,EACT,2EAA2E,EAC3E,6FAA6F,EAC7F,4BAA4B,CAC7B;IACD,0BAA0B,EAAE,KAAK,CAC/B,SAAS,EACT,4FAA4F,EAC5F,mDAAmD,EACnD,4BAA4B,CAC7B;IACD,wBAAwB,EAAE,KAAK,CAC7B,MAAM,EACN,8DAA8D,EAC9D,+FAA+F,EAC/F,0BAA0B,CAC3B;IACD,aAAa,EAAE,KAAK,CAClB,SAAS,EACT,gHAAgH,EAChH,gJAAgJ,EAChJ,eAAe,CAChB;IACD,YAAY,EAAE,KAAK,CACjB,SAAS,EACT,2FAA2F,EAC3F,kGAAkG,EAClG,cAAc,CACf;IACD,8BAA8B,EAAE,KAAK,CACnC,SAAS,EACT,0EAA0E,EAC1E,8JAA8J,EAC9J,gCAAgC,CACjC;IACD,gCAAgC,EAAE,KAAK,CACrC,MAAM,EACN,0JAA0J,EAC1J,4KAA4K,EAC5K,kCAAkC,CACnC;IACD,wBAAwB,EAAE,KAAK,CAC7B,OAAO,EACP,8FAA8F,EAC9F,8DAA8D,EAC9D,0BAA0B,CAC3B;IACD,iCAAiC,EAAE,KAAK,CACtC,OAAO,EACP,+EAA+E,EAC/E,yEAAyE,EACzE,mCAAmC,CACpC;IAED,2DAA2D;IAC3D,kFAAkF;IAClF,kFAAkF;IAClF,gFAAgF;IAChF,gEAAgE;IAChE,gBAAgB,EAAE,KAAK,CACrB,OAAO,EACP,gDAAgD,EAChD,oCAAoC,EACpC,kBAAkB,CACnB;IACD,kBAAkB,EAAE,KAAK,CACvB,OAAO,EACP,kDAAkD,EAClD,yCAAyC,EACzC,oBAAoB,CACrB;IACD,YAAY,EAAE,KAAK,CACjB,SAAS,EACT,oCAAoC,EACpC,6BAA6B,EAC7B,cAAc,CACf;IACD,kBAAkB,EAAE,KAAK,CACvB,OAAO,EACP,4CAA4C,EAC5C,wCAAwC,EACxC,oBAAoB,CACrB;IACD,yBAAyB,EAAE,KAAK,CAC9B,SAAS,EACT,iIAAiI,EACjI,oFAAoF,EACpF,2BAA2B,CAC5B;IACD,cAAc,EAAE,KAAK,CACnB,MAAM,EACN,kEAAkE,EAClE,0IAA0I,EAC1I,gBAAgB,CACjB;IACD,mBAAmB,EAAE,KAAK,CACxB,OAAO,EACP,oDAAoD,EACpD,+BAA+B,EAC/B,qBAAqB,CACtB;IACD,wBAAwB,EAAE,KAAK,CAC7B,OAAO,EACP,mCAAmC,EACnC,sBAAsB,EACtB,0BAA0B,CAC3B;IACD,wBAAwB,EAAE,KAAK,CAC7B,OAAO,EACP,4CAA4C,EAC5C,6CAA6C,EAC7C,0BAA0B,CAC3B;IACD,uBAAuB,EAAE,KAAK,CAC5B,OAAO,EACP,4DAA4D,EAC5D,yBAAyB,EACzB,yBAAyB,CAC1B;IACD,0BAA0B,EAAE,KAAK,CAC/B,OAAO,EACP,yDAAyD,EACzD,mBAAmB,EACnB,4BAA4B,CAC7B;IACD,8BAA8B,EAAE,KAAK,CACnC,OAAO,EACP,wDAAwD,EACxD,6BAA6B,EAC7B,gCAAgC,CACjC;IACD,wBAAwB,EAAE,KAAK,CAC7B,SAAS,EACT,sDAAsD,EACtD,kCAAkC,EAClC,0BAA0B,CAC3B;IACD,iBAAiB,EAAE,KAAK,CACtB,SAAS,EACT,kDAAkD,EAClD,kDAAkD,EAClD,mBAAmB,CACpB;IACD,oBAAoB,EAAE,KAAK,CACzB,SAAS,EACT,iCAAiC,EACjC,gDAAgD,EAChD,sBAAsB,CACvB;IACD,kBAAkB,EAAE,KAAK,CACvB,SAAS,EACT,+CAA+C,EAC/C,0CAA0C,EAC1C,oBAAoB,CACrB;IACD,cAAc,EAAE,KAAK,CACnB,OAAO,EACP,4HAA4H,EAC5H,2GAA2G,EAC3G,gBAAgB,CACjB;IACD,8BAA8B,EAAE,KAAK,CACnC,SAAS,EACT,wNAAwN,EACxN,sMAAsM,EACtM,gCAAgC,CACjC;IACD,mBAAmB,EAAE,KAAK,CACxB,SAAS,EACT,qIAAqI,EACrI,gLAAgL,EAChL,qBAAqB,CACtB;IACD,sBAAsB,EAAE,KAAK,CAC3B,SAAS,EACT,iGAAiG,EACjG,+KAA+K,EAC/K,wBAAwB,CACzB;IACD,oBAAoB,EAAE,KAAK,CACzB,SAAS,EACT,gJAAgJ,EAChJ,+MAA+M,EAC/M,sBAAsB,CACvB;CACmD,CAAC;AAIvD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CACnC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAgC,CAC1D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation-framework.d.ts","sourceRoot":"","sources":["../src/validation-framework.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAiB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAM1D,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,aAAa,CAMtF;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAoED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,MAAM,EAAE,WAAW,EACnB,GAAG,GAAE,IAAiB,GACrB,iBAAiB,CA8BnB;AAMD,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,iEAAiE;IACjE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IACpG,iEAAiE;IACjE,SAAS,EAAE,OAAO,CAAC;CACpB;AAoDD,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,SAAS,eAAe,EAAE,EACrC,MAAM,EAAE,gBAAgB,EACxB,GAAG,GAAE,IAAiB,GACrB,eAAe,CAyBjB"}
1
+ {"version":3,"file":"validation-framework.d.ts","sourceRoot":"","sources":["../src/validation-framework.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAiB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAM1D,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,aAAa,CAMtF;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAoED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,MAAM,EAAE,WAAW,EACnB,GAAG,GAAE,IAAiB,GACrB,iBAAiB,CAuCnB;AAMD,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,iEAAiE;IACjE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IACpG,iEAAiE;IACjE,SAAS,EAAE,OAAO,CAAC;CACpB;AA8DD,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,SAAS,eAAe,EAAE,EACrC,MAAM,EAAE,gBAAgB,EACxB,GAAG,GAAE,IAAiB,GACrB,eAAe,CAyBjB"}
@@ -84,7 +84,16 @@ export function applyAllowFilter(issues, config, now = new Date()) {
84
84
  const code = issue.code;
85
85
  const byCode = matchers.get(code);
86
86
  const location = issue.location ?? '';
87
- const hit = byCode?.find(m => m.match(location));
87
+ // An allow entry names "a path this finding is about", and a link issue is
88
+ // about TWO: the file that holds the link (`location`) and the target it
89
+ // points at (`link`). Both are legitimate things to suppress, and they want
90
+ // different globs — `LINK_OUTSIDE_PROJECT: ../../docs/**` means "links into
91
+ // the monorepo docs tree are fine anywhere", which is not expressible by
92
+ // naming containing files. Matching either keeps both readings working.
93
+ // (Before the anchor split, `location` WAS the target for walker-derived
94
+ // link issues, so target-keyed allow entries are the ones already in the
95
+ // wild — dropping them would break every adopter config silently.)
96
+ const hit = byCode?.find(m => m.match(location) || (issue.link !== undefined && m.match(issue.link)));
88
97
  if (hit) {
89
98
  hit.used = true;
90
99
  const record = {
@@ -116,13 +125,23 @@ function finalize(issue, config) {
116
125
  return null;
117
126
  return { ...issue, severity: resolved, reference: entry.reference };
118
127
  }
119
- function metaIssue(code, message, location) {
128
+ /**
129
+ * Build an ALLOW_* meta issue.
130
+ *
131
+ * `field` rather than `location`: `validation.allow.<CODE>` is a pointer INTO
132
+ * the project config, not a file path — and it points into a DIFFERENT file
133
+ * than the skill the allow entry was about. The framework is handed a config
134
+ * object, not the path it was loaded from, so it cannot honestly name the file;
135
+ * emitting the pointer alone is the truthful answer, and it no longer
136
+ * masquerades as something a consumer can resolve as a path.
137
+ */
138
+ function metaIssue(code, message, field) {
120
139
  const entry = CODE_REGISTRY[code];
121
140
  return {
122
141
  severity: entry.defaultSeverity,
123
142
  code,
124
143
  message,
125
- location,
144
+ field,
126
145
  fix: entry.fix,
127
146
  reference: entry.reference,
128
147
  };
@@ -1 +1 @@
1
- {"version":3,"file":"validation-framework.js","sourceRoot":"","sources":["../src/validation-framework.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation-framework.js","sourceRoot":"","sources":["../src/validation-framework.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,27 @@
5
5
  * spans the FULL code space: registry codes (overridable via config), plus
6
6
  * `InfoCode` and `NonOverridableCode` (structural reports / prerequisites that
7
7
  * bypass the severity-override framework).
8
+ *
9
+ * ## The anchor contract — one meaning per field
10
+ *
11
+ * An issue points at up to four independent things, and each has its OWN field.
12
+ * None of them is ever packed into another with a separator:
13
+ *
14
+ * | field | means | example |
15
+ * |------------|--------------------------------------------------------------|---------|
16
+ * | `location` | **The file you would open to fix this**, as a project-relative POSIX path | `packages/cli/SKILL.md` |
17
+ * | `line` | 1-based line within `location` | `24` |
18
+ * | `field` | Dotted pointer INSIDE that document | `frontmatter.description` |
19
+ * | `link` | A link href / target the issue is about (never the file to open) | `./refs/missing.md` |
20
+ *
21
+ * `location` is **always relative** — enforced by the schema refinement below.
22
+ * Absolute paths leak the developer's home directory into CI logs and make the
23
+ * `validation.allow` globs (which match against `location`) unwritable. A
24
+ * consumer can therefore resolve every `location` against one known root and
25
+ * `grep`/glob them uniformly.
26
+ *
27
+ * Producers: use `issueLocation(absPath, projectRoot)` from
28
+ * `@vibe-agent-toolkit/utils` rather than hand-rolling the relativization.
8
29
  */
9
30
  import { z } from 'zod';
10
31
  import { type InfoCode, type IssueCode, type IssueSeverity, type NonOverridableCode } from './validation-codes.js';
@@ -14,8 +35,9 @@ export declare const ValidationIssueSchema: z.ZodObject<{
14
35
  code: z.ZodString;
15
36
  severity: z.ZodEnum<["error", "warning", "info", "ignore"]>;
16
37
  message: z.ZodString;
17
- location: z.ZodOptional<z.ZodString>;
38
+ location: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>>;
18
39
  line: z.ZodOptional<z.ZodNumber>;
40
+ field: z.ZodOptional<z.ZodString>;
19
41
  link: z.ZodOptional<z.ZodString>;
20
42
  fix: z.ZodOptional<z.ZodString>;
21
43
  reference: z.ZodOptional<z.ZodString>;
@@ -26,6 +48,7 @@ export declare const ValidationIssueSchema: z.ZodObject<{
26
48
  severity: "error" | "warning" | "info" | "ignore";
27
49
  location?: string | undefined;
28
50
  line?: number | undefined;
51
+ field?: string | undefined;
29
52
  link?: string | undefined;
30
53
  fix?: string | undefined;
31
54
  reference?: string | undefined;
@@ -36,6 +59,7 @@ export declare const ValidationIssueSchema: z.ZodObject<{
36
59
  severity: "error" | "warning" | "info" | "ignore";
37
60
  location?: string | undefined;
38
61
  line?: number | undefined;
62
+ field?: string | undefined;
39
63
  link?: string | undefined;
40
64
  fix?: string | undefined;
41
65
  reference?: string | undefined;
@@ -45,13 +69,54 @@ export interface ValidationIssue {
45
69
  code: ValidationIssueCode;
46
70
  severity: IssueSeverity;
47
71
  message: string;
72
+ /** Project-relative POSIX path of the file to open. Never absolute. */
48
73
  location?: string;
74
+ /** 1-based line within {@link ValidationIssue.location}. */
49
75
  line?: number;
76
+ /** Dotted pointer inside the document at {@link ValidationIssue.location}, e.g. `frontmatter.description`. */
77
+ field?: string;
78
+ /** A link href or target the issue concerns — not the file to open. */
50
79
  link?: string;
51
80
  fix?: string;
52
81
  reference?: string;
53
82
  suggestion?: string;
54
83
  }
55
84
  /** Build an issue from the registry, filling severity/fix/reference from the code entry. */
56
- export declare function createRegistryIssue(code: IssueCode, message: string, extras?: Partial<Pick<ValidationIssue, 'location' | 'line' | 'link' | 'suggestion'>>): ValidationIssue;
85
+ export declare function createRegistryIssue(code: IssueCode, message: string, extras?: Partial<Pick<ValidationIssue, 'location' | 'line' | 'field' | 'link' | 'suggestion'>>): ValidationIssue;
86
+ /**
87
+ * Per-severity issue counts, published beside a status rather than folded into it.
88
+ *
89
+ * A status names the worst ACTIONABLE severity, which is a three-value answer to
90
+ * a four-value question — the distribution is not recoverable from it. Publishing
91
+ * the counts is what makes a two- or three-valued status honest: `success` then
92
+ * means "nothing you must act on", not "there was nothing to see".
93
+ */
94
+ export interface SeverityCounts {
95
+ errors: number;
96
+ warnings: number;
97
+ info: number;
98
+ }
99
+ /**
100
+ * Count issues by resolved severity.
101
+ *
102
+ * `ignore` is excluded from every bucket: those findings were suppressed by the
103
+ * adopter's own `validation.allow` config, and counting them would resurrect
104
+ * something they deliberately silenced.
105
+ */
106
+ export declare function countBySeverity(issues: readonly ValidationIssue[]): SeverityCounts;
107
+ /**
108
+ * The single answer to "issues → status": the worst ACTIONABLE severity.
109
+ *
110
+ * There were five implementations of this and three different answers for an
111
+ * info-only set — `warning` here, `success` in `vat audit`, and in
112
+ * `corpus/runner` a `statusFromCounts(errors, warnings)` whose signature could
113
+ * not see info at all. Two lanes could therefore report different statuses for
114
+ * the same artifact.
115
+ *
116
+ * Info-only resolves to `success` because an informational observation is not
117
+ * something the consumer must act on. That is only defensible when the counts
118
+ * ride alongside — pair every use of this with {@link countBySeverity}, or the
119
+ * status becomes the silence it used to be.
120
+ */
121
+ export declare function calculateValidationStatus(issues: readonly ValidationIssue[]): 'success' | 'warning' | 'error';
57
122
  //# sourceMappingURL=validation-issue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation-issue.d.ts","sourceRoot":"","sources":["../src/validation-issue.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,qGAAqG;AACrG,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,QAAQ,GAAG,kBAAkB,CAAC;AAE5E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUvB,CAAC;AAKZ,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC,CAAM,GACvF,eAAe,CAGjB"}
1
+ {"version":3,"file":"validation-issue.d.ts","sourceRoot":"","sources":["../src/validation-issue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,qGAAqG;AACrG,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,QAAQ,GAAG,kBAAkB,CAAC;AAY5E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBvB,CAAC;AAKZ,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8GAA8G;IAC9G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,YAAY,CAAC,CAAM,GACjG,eAAe,CAGjB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,GAAG,cAAc,CAclF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,eAAe,EAAE,GACjC,SAAS,GAAG,SAAS,GAAG,OAAO,CAMjC"}
@@ -5,15 +5,54 @@
5
5
  * spans the FULL code space: registry codes (overridable via config), plus
6
6
  * `InfoCode` and `NonOverridableCode` (structural reports / prerequisites that
7
7
  * bypass the severity-override framework).
8
+ *
9
+ * ## The anchor contract — one meaning per field
10
+ *
11
+ * An issue points at up to four independent things, and each has its OWN field.
12
+ * None of them is ever packed into another with a separator:
13
+ *
14
+ * | field | means | example |
15
+ * |------------|--------------------------------------------------------------|---------|
16
+ * | `location` | **The file you would open to fix this**, as a project-relative POSIX path | `packages/cli/SKILL.md` |
17
+ * | `line` | 1-based line within `location` | `24` |
18
+ * | `field` | Dotted pointer INSIDE that document | `frontmatter.description` |
19
+ * | `link` | A link href / target the issue is about (never the file to open) | `./refs/missing.md` |
20
+ *
21
+ * `location` is **always relative** — enforced by the schema refinement below.
22
+ * Absolute paths leak the developer's home directory into CI logs and make the
23
+ * `validation.allow` globs (which match against `location`) unwritable. A
24
+ * consumer can therefore resolve every `location` against one known root and
25
+ * `grep`/glob them uniformly.
26
+ *
27
+ * Producers: use `issueLocation(absPath, projectRoot)` from
28
+ * `@vibe-agent-toolkit/utils` rather than hand-rolling the relativization.
8
29
  */
30
+ import path from 'node:path';
9
31
  import { z } from 'zod';
10
32
  import { CODE_REGISTRY, } from './validation-codes.js';
33
+ /**
34
+ * Host-independent absolute-path test, mirroring `isAbsoluteAnyPlatform` in
35
+ * `@vibe-agent-toolkit/utils`. Inlined because `agent-schema` is the bottom of
36
+ * the dependency graph and carries no workspace runtime dependencies; a
37
+ * Windows-absolute `location` must be rejected even when validating on POSIX CI.
38
+ */
39
+ function isAbsoluteAnyPlatform(p) {
40
+ return path.posix.isAbsolute(p) || path.win32.isAbsolute(p);
41
+ }
11
42
  export const ValidationIssueSchema = z.object({
12
43
  code: z.string(), // full code space; narrowed in the TS type below
13
44
  severity: z.enum(['error', 'warning', 'info', 'ignore']),
14
45
  message: z.string(),
15
- location: z.string().optional(),
46
+ location: z.string()
47
+ .refine((v) => !isAbsoluteAnyPlatform(v), {
48
+ message: 'location must be a project-relative POSIX path, not an absolute path',
49
+ })
50
+ .refine((v) => !v.includes('\\'), {
51
+ message: 'location must use forward slashes, not backslashes',
52
+ })
53
+ .optional(),
16
54
  line: z.number().int().positive().optional(),
55
+ field: z.string().optional(),
17
56
  link: z.string().optional(),
18
57
  fix: z.string().optional(),
19
58
  reference: z.string().optional(),
@@ -24,4 +63,49 @@ export function createRegistryIssue(code, message, extras = {}) {
24
63
  const e = CODE_REGISTRY[code];
25
64
  return { code, severity: e.defaultSeverity, message, fix: e.fix, reference: e.reference, ...extras };
26
65
  }
66
+ /**
67
+ * Count issues by resolved severity.
68
+ *
69
+ * `ignore` is excluded from every bucket: those findings were suppressed by the
70
+ * adopter's own `validation.allow` config, and counting them would resurrect
71
+ * something they deliberately silenced.
72
+ */
73
+ export function countBySeverity(issues) {
74
+ let errors = 0;
75
+ let warnings = 0;
76
+ let info = 0;
77
+ for (const issue of issues) {
78
+ if (issue.severity === 'error') {
79
+ errors += 1;
80
+ }
81
+ else if (issue.severity === 'warning') {
82
+ warnings += 1;
83
+ }
84
+ else if (issue.severity === 'info') {
85
+ info += 1;
86
+ }
87
+ }
88
+ return { errors, warnings, info };
89
+ }
90
+ /**
91
+ * The single answer to "issues → status": the worst ACTIONABLE severity.
92
+ *
93
+ * There were five implementations of this and three different answers for an
94
+ * info-only set — `warning` here, `success` in `vat audit`, and in
95
+ * `corpus/runner` a `statusFromCounts(errors, warnings)` whose signature could
96
+ * not see info at all. Two lanes could therefore report different statuses for
97
+ * the same artifact.
98
+ *
99
+ * Info-only resolves to `success` because an informational observation is not
100
+ * something the consumer must act on. That is only defensible when the counts
101
+ * ride alongside — pair every use of this with {@link countBySeverity}, or the
102
+ * status becomes the silence it used to be.
103
+ */
104
+ export function calculateValidationStatus(issues) {
105
+ const { errors, warnings } = countBySeverity(issues);
106
+ if (errors > 0) {
107
+ return 'error';
108
+ }
109
+ return warnings > 0 ? 'warning' : 'success';
110
+ }
27
111
  //# sourceMappingURL=validation-issue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation-issue.js","sourceRoot":"","sources":["../src/validation-issue.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,aAAa,GAKd,MAAM,uBAAuB,CAAC;AAK/B,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAmC,iDAAiD;IACpG,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC,MAAM,EAAE,CAAC;AAiBZ,4FAA4F;AAC5F,MAAM,UAAU,mBAAmB,CACjC,IAAe,EACf,OAAe,EACf,SAAsF,EAAE;IAExF,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,eAAe,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC;AACvG,CAAC"}
1
+ {"version":3,"file":"validation-issue.js","sourceRoot":"","sources":["../src/validation-issue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,aAAa,GAKd,MAAM,uBAAuB,CAAC;AAK/B;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,CAAS;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAmC,iDAAiD;IACpG,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE;QACxC,OAAO,EAAE,sEAAsE;KAChF,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QAChC,OAAO,EAAE,oDAAoD;KAC9D,CAAC;SACD,QAAQ,EAAE;IACb,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC,MAAM,EAAE,CAAC;AAsBZ,4FAA4F;AAC5F,MAAM,UAAU,mBAAmB,CACjC,IAAe,EACf,OAAe,EACf,SAAgG,EAAE;IAElG,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,eAAe,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC;AACvG,CAAC;AAgBD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,MAAkC;IAChE,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACxC,QAAQ,IAAI,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACpC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAkC;IAElC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibe-agent-toolkit/agent-schema",
3
- "version": "0.1.41-rc.6",
3
+ "version": "0.1.41-rc.7",
4
4
  "description": "JSON Schema definitions and TypeScript types for VAT agent manifest format",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/picomatch": "^4.0.2",
42
- "@vibe-agent-toolkit/utils": "0.1.41-rc.6",
42
+ "@vibe-agent-toolkit/utils": "0.1.41-rc.7",
43
43
  "tsx": "^4.21.0",
44
44
  "typescript": "^5.9.3",
45
45
  "vitest": "^3.2.4"