@vibe-agent-toolkit/agent-skills 0.1.42 → 0.2.0-rc.10
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.
- package/README.md +5 -5
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +7 -17
- package/dist/builder.js.map +1 -1
- package/dist/content-type-routing.d.ts +32 -0
- package/dist/content-type-routing.d.ts.map +1 -1
- package/dist/content-type-routing.js +23 -0
- package/dist/content-type-routing.js.map +1 -1
- package/dist/files-config.d.ts +34 -1
- package/dist/files-config.d.ts.map +1 -1
- package/dist/files-config.js +277 -39
- package/dist/files-config.js.map +1 -1
- package/dist/fs-attribution.d.ts +45 -0
- package/dist/fs-attribution.d.ts.map +1 -0
- package/dist/fs-attribution.js +57 -0
- package/dist/fs-attribution.js.map +1 -0
- package/dist/import.d.ts.map +1 -1
- package/dist/import.js +0 -4
- package/dist/import.js.map +1 -1
- package/dist/index.d.ts +13 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -7
- package/dist/index.js.map +1 -1
- package/dist/inventory/detectors/declared-but-missing.d.ts +1 -1
- package/dist/inventory/detectors/declared-but-missing.d.ts.map +1 -1
- package/dist/inventory/detectors/marketplace-source-missing.d.ts +1 -1
- package/dist/inventory/detectors/marketplace-source-missing.d.ts.map +1 -1
- package/dist/inventory/detectors/present-but-undeclared.d.ts +1 -1
- package/dist/inventory/detectors/present-but-undeclared.d.ts.map +1 -1
- package/dist/inventory/detectors/reference-target-missing.d.ts +1 -1
- package/dist/inventory/detectors/reference-target-missing.d.ts.map +1 -1
- package/dist/inventory/index.d.ts +1 -1
- package/dist/inventory/index.d.ts.map +1 -1
- package/dist/inventory/index.js +1 -1
- package/dist/inventory/index.js.map +1 -1
- package/dist/inventory/serialize.d.ts +4 -4
- package/dist/inventory/serialize.d.ts.map +1 -1
- package/dist/inventory/serialize.js +6 -6
- package/dist/inventory/serialize.js.map +1 -1
- package/dist/inventory/types.d.ts +8 -0
- package/dist/inventory/types.d.ts.map +1 -1
- package/dist/inventory/types.js.map +1 -1
- package/dist/link-graph-members.d.ts +18 -0
- package/dist/link-graph-members.d.ts.map +1 -0
- package/dist/link-graph-members.js +18 -0
- package/dist/link-graph-members.js.map +1 -0
- package/dist/parsers/frontmatter-parser.d.ts.map +1 -1
- package/dist/parsers/frontmatter-parser.js +30 -6
- package/dist/parsers/frontmatter-parser.js.map +1 -1
- package/dist/plugin-distribution-layout.d.ts +70 -6
- package/dist/plugin-distribution-layout.d.ts.map +1 -1
- package/dist/plugin-distribution-layout.js +84 -11
- package/dist/plugin-distribution-layout.js.map +1 -1
- package/dist/post-build-checks.d.ts +38 -1
- package/dist/post-build-checks.d.ts.map +1 -1
- package/dist/post-build-checks.js +68 -17
- package/dist/post-build-checks.js.map +1 -1
- package/dist/projection/skill-extent.d.ts +247 -0
- package/dist/projection/skill-extent.d.ts.map +1 -0
- package/dist/projection/skill-extent.js +560 -0
- package/dist/projection/skill-extent.js.map +1 -0
- package/dist/schemas/agent-skill-frontmatter.js +1 -1
- package/dist/schemas/agent-skill-frontmatter.js.map +1 -1
- package/dist/schemas/allowed-tools.d.ts +31 -0
- package/dist/schemas/allowed-tools.d.ts.map +1 -0
- package/dist/schemas/allowed-tools.js +88 -0
- package/dist/schemas/allowed-tools.js.map +1 -0
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +1 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/installed-plugins-registry.d.ts.map +1 -1
- package/dist/schemas/installed-plugins-registry.js +7 -1
- package/dist/schemas/installed-plugins-registry.js.map +1 -1
- package/dist/schemas/marketplace-manifest.d.ts.map +1 -1
- package/dist/schemas/marketplace-manifest.js +17 -6
- package/dist/schemas/marketplace-manifest.js.map +1 -1
- package/dist/skill-identity.d.ts +18 -3
- package/dist/skill-identity.d.ts.map +1 -1
- package/dist/skill-identity.js +25 -6
- package/dist/skill-identity.js.map +1 -1
- package/dist/skill-packager.d.ts +144 -20
- package/dist/skill-packager.d.ts.map +1 -1
- package/dist/skill-packager.js +447 -105
- package/dist/skill-packager.js.map +1 -1
- package/dist/skill-source/content-hash.d.ts.map +1 -1
- package/dist/skill-source/content-hash.js +21 -10
- package/dist/skill-source/content-hash.js.map +1 -1
- package/dist/skill-source/fetch-cache.d.ts.map +1 -1
- package/dist/skill-source/fetch-cache.js +0 -5
- package/dist/skill-source/fetch-cache.js.map +1 -1
- package/dist/skill-source/git-clone.d.ts +1 -1
- package/dist/skill-source/git-clone.d.ts.map +1 -1
- package/dist/skill-source/git-clone.js +10 -10
- package/dist/skill-source/git-clone.js.map +1 -1
- package/dist/skill-source/sources/url-source.d.ts.map +1 -1
- package/dist/skill-source/sources/url-source.js +2 -2
- package/dist/skill-source/sources/url-source.js.map +1 -1
- package/dist/skill-source/stage.d.ts.map +1 -1
- package/dist/skill-source/stage.js +0 -6
- package/dist/skill-source/stage.js.map +1 -1
- package/dist/skill-test/baseline-delta.d.ts +1575 -0
- package/dist/skill-test/baseline-delta.d.ts.map +1 -0
- package/dist/skill-test/baseline-delta.js +272 -0
- package/dist/skill-test/baseline-delta.js.map +1 -0
- package/dist/skill-test/baseline-integrity.d.ts +944 -0
- package/dist/skill-test/baseline-integrity.d.ts.map +1 -0
- package/dist/skill-test/baseline-integrity.js +3090 -0
- package/dist/skill-test/baseline-integrity.js.map +1 -0
- package/dist/skill-test/build-hook.d.ts +3 -2
- package/dist/skill-test/build-hook.d.ts.map +1 -1
- package/dist/skill-test/build-hook.js +4 -5
- package/dist/skill-test/build-hook.js.map +1 -1
- package/dist/skill-test/configure-writer.js +1 -1
- package/dist/skill-test/configure-writer.js.map +1 -1
- package/dist/skill-test/declared-env.d.ts +5 -4
- package/dist/skill-test/declared-env.d.ts.map +1 -1
- package/dist/skill-test/declared-env.js +8 -9
- package/dist/skill-test/declared-env.js.map +1 -1
- package/dist/skill-test/eval-executor.d.ts +21 -5
- package/dist/skill-test/eval-executor.d.ts.map +1 -1
- package/dist/skill-test/eval-executor.js +6 -6
- package/dist/skill-test/eval-executor.js.map +1 -1
- package/dist/skill-test/eval-fragment.d.ts +106 -28
- package/dist/skill-test/eval-fragment.d.ts.map +1 -1
- package/dist/skill-test/eval-fragment.js +78 -16
- package/dist/skill-test/eval-fragment.js.map +1 -1
- package/dist/skill-test/eval-grader.d.ts +65 -7
- package/dist/skill-test/eval-grader.d.ts.map +1 -1
- package/dist/skill-test/eval-grader.js +263 -64
- package/dist/skill-test/eval-grader.js.map +1 -1
- package/dist/skill-test/eval-inputs.d.ts +110 -8
- package/dist/skill-test/eval-inputs.d.ts.map +1 -1
- package/dist/skill-test/eval-inputs.js +177 -22
- package/dist/skill-test/eval-inputs.js.map +1 -1
- package/dist/skill-test/eval-lint.d.ts +17 -4
- package/dist/skill-test/eval-lint.d.ts.map +1 -1
- package/dist/skill-test/eval-lint.js +22 -9
- package/dist/skill-test/eval-lint.js.map +1 -1
- package/dist/skill-test/eval-suite-isolation.d.ts.map +1 -1
- package/dist/skill-test/eval-suite-isolation.js +8 -5
- package/dist/skill-test/eval-suite-isolation.js.map +1 -1
- package/dist/skill-test/evals-template.d.ts +1 -1
- package/dist/skill-test/evals-template.d.ts.map +1 -1
- package/dist/skill-test/evals-template.js +1 -3
- package/dist/skill-test/evals-template.js.map +1 -1
- package/dist/skill-test/executor-prompt.d.ts +15 -7
- package/dist/skill-test/executor-prompt.d.ts.map +1 -1
- package/dist/skill-test/executor-prompt.js +10 -7
- package/dist/skill-test/executor-prompt.js.map +1 -1
- package/dist/skill-test/failure-reason.d.ts +113 -0
- package/dist/skill-test/failure-reason.d.ts.map +1 -0
- package/dist/skill-test/failure-reason.js +124 -0
- package/dist/skill-test/failure-reason.js.map +1 -0
- package/dist/skill-test/fragment-merge.d.ts +3 -20
- package/dist/skill-test/fragment-merge.d.ts.map +1 -1
- package/dist/skill-test/fragment-merge.js +67 -8
- package/dist/skill-test/fragment-merge.js.map +1 -1
- package/dist/skill-test/grader-prompt.d.ts +29 -9
- package/dist/skill-test/grader-prompt.d.ts.map +1 -1
- package/dist/skill-test/grader-prompt.js +264 -68
- package/dist/skill-test/grader-prompt.js.map +1 -1
- package/dist/skill-test/grader-text.d.ts +145 -0
- package/dist/skill-test/grader-text.d.ts.map +1 -0
- package/dist/skill-test/grader-text.js +410 -0
- package/dist/skill-test/grader-text.js.map +1 -0
- package/dist/skill-test/grading-adapter.d.ts +38 -2
- package/dist/skill-test/grading-adapter.d.ts.map +1 -1
- package/dist/skill-test/grading-adapter.js +57 -9
- package/dist/skill-test/grading-adapter.js.map +1 -1
- package/dist/skill-test/grading-schema.d.ts +160 -5
- package/dist/skill-test/grading-schema.d.ts.map +1 -1
- package/dist/skill-test/grading-schema.js +66 -7
- package/dist/skill-test/grading-schema.js.map +1 -1
- package/dist/skill-test/harness-location.d.ts +3 -2
- package/dist/skill-test/harness-location.d.ts.map +1 -1
- package/dist/skill-test/harness-location.js +5 -16
- package/dist/skill-test/harness-location.js.map +1 -1
- package/dist/skill-test/index.d.ts +2 -2
- package/dist/skill-test/index.d.ts.map +1 -1
- package/dist/skill-test/index.js +2 -2
- package/dist/skill-test/index.js.map +1 -1
- package/dist/skill-test/lock.d.ts +58 -1
- package/dist/skill-test/lock.d.ts.map +1 -1
- package/dist/skill-test/lock.js +78 -6
- package/dist/skill-test/lock.js.map +1 -1
- package/dist/skill-test/pipeline.d.ts +19 -1
- package/dist/skill-test/pipeline.d.ts.map +1 -1
- package/dist/skill-test/pipeline.js +21 -10
- package/dist/skill-test/pipeline.js.map +1 -1
- package/dist/skill-test/preflight.d.ts +1 -1
- package/dist/skill-test/preflight.d.ts.map +1 -1
- package/dist/skill-test/preflight.js +59 -16
- package/dist/skill-test/preflight.js.map +1 -1
- package/dist/skill-test/prompt-invariants.d.ts +4 -2
- package/dist/skill-test/prompt-invariants.d.ts.map +1 -1
- package/dist/skill-test/prompt-invariants.js +5 -4
- package/dist/skill-test/prompt-invariants.js.map +1 -1
- package/dist/skill-test/run-harness.d.ts +665 -85
- package/dist/skill-test/run-harness.d.ts.map +1 -1
- package/dist/skill-test/run-harness.js +1522 -237
- package/dist/skill-test/run-harness.js.map +1 -1
- package/dist/skill-test/staging.d.ts +20 -8
- package/dist/skill-test/staging.d.ts.map +1 -1
- package/dist/skill-test/staging.js +25 -18
- package/dist/skill-test/staging.js.map +1 -1
- package/dist/skill-test/tier-plan.d.ts +1 -1
- package/dist/skill-test/tier-plan.js +1 -1
- package/dist/skill-test/tool-eval-schema.d.ts +6 -6
- package/dist/skill-test/tool-eval-schema.js +2 -2
- package/dist/skill-test/vendor-manifest.d.ts +2 -1
- package/dist/skill-test/vendor-manifest.d.ts.map +1 -1
- package/dist/skill-test/vendor-manifest.js +10 -10
- package/dist/skill-test/vendor-manifest.js.map +1 -1
- package/dist/test-input.d.ts +59 -8
- package/dist/test-input.d.ts.map +1 -1
- package/dist/test-input.js +64 -19
- package/dist/test-input.js.map +1 -1
- package/dist/validators/agent-instruction-presence.d.ts +1 -1
- package/dist/validators/agent-instruction-presence.d.ts.map +1 -1
- package/dist/validators/agent-instruction-presence.js +45 -2
- package/dist/validators/agent-instruction-presence.js.map +1 -1
- package/dist/validators/bundled-resource-link-detection.d.ts +6 -4
- package/dist/validators/bundled-resource-link-detection.d.ts.map +1 -1
- package/dist/validators/bundled-resource-link-detection.js +39 -39
- package/dist/validators/bundled-resource-link-detection.js.map +1 -1
- package/dist/validators/compat-detectors.d.ts +18 -1
- package/dist/validators/compat-detectors.d.ts.map +1 -1
- package/dist/validators/compat-detectors.js +47 -20
- package/dist/validators/compat-detectors.js.map +1 -1
- package/dist/validators/cross-skill-dependency-detection.d.ts +1 -1
- package/dist/validators/cross-skill-dependency-detection.d.ts.map +1 -1
- package/dist/validators/cross-skill-dependency-detection.js +1 -1
- package/dist/validators/cross-skill-dependency-detection.js.map +1 -1
- package/dist/validators/description-style-detection.d.ts +1 -1
- package/dist/validators/description-style-detection.d.ts.map +1 -1
- package/dist/validators/description-style-detection.js +1 -1
- package/dist/validators/description-style-detection.js.map +1 -1
- package/dist/validators/format-detection.d.ts +3 -0
- package/dist/validators/format-detection.d.ts.map +1 -1
- package/dist/validators/format-detection.js +41 -26
- package/dist/validators/format-detection.js.map +1 -1
- package/dist/validators/frontmatter-validation.d.ts +1 -1
- package/dist/validators/frontmatter-validation.d.ts.map +1 -1
- package/dist/validators/frontmatter-validation.js +2 -2
- package/dist/validators/frontmatter-validation.js.map +1 -1
- package/dist/validators/imperative-body-detection.d.ts +1 -1
- package/dist/validators/imperative-body-detection.d.ts.map +1 -1
- package/dist/validators/imperative-body-detection.js +1 -1
- package/dist/validators/imperative-body-detection.js.map +1 -1
- package/dist/validators/index.d.ts +1 -1
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/kebab-case-detection.d.ts +1 -1
- package/dist/validators/kebab-case-detection.d.ts.map +1 -1
- package/dist/validators/kebab-case-detection.js +1 -1
- package/dist/validators/kebab-case-detection.js.map +1 -1
- package/dist/validators/marketplace-validator.d.ts.map +1 -1
- package/dist/validators/marketplace-validator.js +7 -2
- package/dist/validators/marketplace-validator.js.map +1 -1
- package/dist/validators/mcp-tool-qualification.d.ts +158 -0
- package/dist/validators/mcp-tool-qualification.d.ts.map +1 -0
- package/dist/validators/mcp-tool-qualification.js +467 -0
- package/dist/validators/mcp-tool-qualification.js.map +1 -0
- package/dist/validators/packaged-size-limit.d.ts +296 -0
- package/dist/validators/packaged-size-limit.d.ts.map +1 -0
- package/dist/validators/packaged-size-limit.js +492 -0
- package/dist/validators/packaged-size-limit.js.map +1 -0
- package/dist/validators/packaging-validator.d.ts +149 -10
- package/dist/validators/packaging-validator.d.ts.map +1 -1
- package/dist/validators/packaging-validator.js +371 -55
- package/dist/validators/packaging-validator.js.map +1 -1
- package/dist/validators/plugin-hosted-shape.d.ts +4 -2
- package/dist/validators/plugin-hosted-shape.d.ts.map +1 -1
- package/dist/validators/plugin-hosted-shape.js +6 -7
- package/dist/validators/plugin-hosted-shape.js.map +1 -1
- package/dist/validators/plugin-recommended-fields.d.ts +1 -1
- package/dist/validators/plugin-recommended-fields.d.ts.map +1 -1
- package/dist/validators/plugin-recommended-fields.js +1 -1
- package/dist/validators/plugin-recommended-fields.js.map +1 -1
- package/dist/validators/referenced-path-missing.d.ts +211 -0
- package/dist/validators/referenced-path-missing.d.ts.map +1 -0
- package/dist/validators/referenced-path-missing.js +378 -0
- package/dist/validators/referenced-path-missing.js.map +1 -0
- package/dist/validators/registry-validator.d.ts.map +1 -1
- package/dist/validators/registry-validator.js +1 -2
- package/dist/validators/registry-validator.js.map +1 -1
- package/dist/validators/rule-engine/index.d.ts +1 -1
- package/dist/validators/rule-engine/rule-context.d.ts +20 -3
- package/dist/validators/rule-engine/rule-context.d.ts.map +1 -1
- package/dist/validators/rule-engine/rule-context.js +3 -1
- package/dist/validators/rule-engine/rule-context.js.map +1 -1
- package/dist/validators/rule-engine/rule-engine.d.ts +2 -2
- package/dist/validators/rule-engine/rule-engine.d.ts.map +1 -1
- package/dist/validators/rule-engine/rule-engine.js +52 -13
- package/dist/validators/rule-engine/rule-engine.js.map +1 -1
- package/dist/validators/skill-validator.d.ts.map +1 -1
- package/dist/validators/skill-validator.js +91 -54
- package/dist/validators/skill-validator.js.map +1 -1
- package/dist/validators/source-only-codes.js +1 -1
- package/dist/validators/source-only-codes.js.map +1 -1
- package/dist/validators/types.d.ts +21 -1
- package/dist/validators/types.d.ts.map +1 -1
- package/dist/validators/unified-validator.d.ts.map +1 -1
- package/dist/validators/unified-validator.js +4 -5
- package/dist/validators/unified-validator.js.map +1 -1
- package/dist/validators/validation-rules.d.ts +4 -4
- package/dist/validators/validation-rules.d.ts.map +1 -1
- package/dist/validators/validation-rules.js +9 -38
- package/dist/validators/validation-rules.js.map +1 -1
- package/dist/validators/walker-to-issues.d.ts +9 -3
- package/dist/validators/walker-to-issues.d.ts.map +1 -1
- package/dist/validators/walker-to-issues.js +64 -19
- package/dist/validators/walker-to-issues.js.map +1 -1
- package/dist/walk-link-graph.d.ts +64 -5
- package/dist/walk-link-graph.d.ts.map +1 -1
- package/dist/walk-link-graph.js +376 -92
- package/dist/walk-link-graph.js.map +1 -1
- package/package.json +14 -22
- package/dist/skill-test/exit-codes.d.ts +0 -97
- package/dist/skill-test/exit-codes.d.ts.map +0 -1
- package/dist/skill-test/exit-codes.js +0 -141
- package/dist/skill-test/exit-codes.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter-parser.js","sourceRoot":"","sources":["../../src/parsers/frontmatter-parser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAexB;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,yBAAyB;IACzB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEpD,uCAAuC;IACvC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,qEAAqE;SAC7E,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAEvD,IAAI,YAAY,KAAK,CAAC,CAAC,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,4BAA4B;SACpC,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,MAAM,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC;IAChF,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAE5D,yCAAyC;IACzC,MAAM,cAAc,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC,eAAe;IAC9D,MAAM,IAAI,GAAG,cAAc,GAAG,UAAU,CAAC,MAAM;QAC7C,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,yBAAyB;QAChE,CAAC,CAAC,EAAE,CAAC;IAEP,aAAa;IACb,IAAI,CAAC;QACH,MAAM,
|
|
1
|
+
{"version":3,"file":"frontmatter-parser.js","sourceRoot":"","sources":["../../src/parsers/frontmatter-parser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAexB;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,yBAAyB;IACzB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEpD,uCAAuC;IACvC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,qEAAqE;SAC7E,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAEvD,IAAI,YAAY,KAAK,CAAC,CAAC,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,4BAA4B;SACpC,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,MAAM,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC;IAChF,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAE5D,yCAAyC;IACzC,MAAM,cAAc,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC,eAAe;IAC9D,MAAM,IAAI,GAAG,cAAc,GAAG,UAAU,CAAC,MAAM;QAC7C,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,yBAAyB;QAChE,CAAC,CAAC,EAAE,CAAC;IAEP,aAAa;IACb,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACrG,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,8EAA8E;IAC9E,sEAAsE;IACtE,wEAAwE;IACxE,uEAAuE;IACvE,8EAA8E;IAC9E,uEAAuE;IACvE,0EAA0E;IAC1E,+DAA+D;IAC/D,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnG,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,gFAAgF,kBAAkB,CAAC,MAAM,CAAC,EAAE;SACpH,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,MAAiC;QAC9C,IAAI;KACL,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,SAAS,kBAAkB,CAAC,MAAe;IACzC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,mCAAmC,CAAC;IACtE,OAAO,aAAa,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,0BAA0B,CAAC;AACvE,CAAC"}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Shared primitives for locating where `vat build --only claude` places
|
|
5
5
|
* tree-copied plugin skills in the output tree, and where it reads them from.
|
|
6
6
|
*
|
|
7
|
-
* Consumed by `vat build`, `vat verify`,
|
|
8
|
-
* conventions can never drift between those commands.
|
|
7
|
+
* Consumed by `vat build`, `vat verify`, consistency-check and skill-reference
|
|
8
|
+
* resolution so the path conventions can never drift between those commands.
|
|
9
9
|
*/
|
|
10
10
|
import type { ProjectConfig } from '@vibe-agent-toolkit/resources';
|
|
11
11
|
/**
|
|
@@ -109,9 +109,73 @@ export declare function computeTreeCopiedSkillLocations(config: ProjectConfig, c
|
|
|
109
109
|
/** FS-safe single path segment for a skill name (colon → `__`, invalid on Windows). */
|
|
110
110
|
export declare function skillNameToFsPath(name: string): string;
|
|
111
111
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
112
|
+
* Why a skill sitting under a plugin's `skills/` directory is NOT plugin-local — the
|
|
113
|
+
* plugin build does not ship it:
|
|
114
|
+
* - `untracked` — its directory IS `skillSourceDir`: a skill directory under plugin
|
|
115
|
+
* `pluginName`'s `skills/` that git does not track ({@link listUntrackedPluginSkillDirs});
|
|
116
|
+
* `git add` makes it ship.
|
|
117
|
+
* - `nested` — its directory is inside `outer`, another skill's directory under plugin
|
|
118
|
+
* `outer.pluginName`'s `skills/` (tracked or not), and the plugin build packages only
|
|
119
|
+
* the outermost skill directory — so `git add` changes nothing for it.
|
|
115
120
|
*/
|
|
116
|
-
export
|
|
121
|
+
export type PluginSkillExclusion = ({
|
|
122
|
+
readonly kind: 'untracked';
|
|
123
|
+
} & UntrackedPluginSkillDir) | {
|
|
124
|
+
readonly kind: 'nested';
|
|
125
|
+
readonly outer: UntrackedPluginSkillDir;
|
|
126
|
+
};
|
|
127
|
+
/** The plugin-local skills a project ships — see {@link indexPluginLocalSkills}. */
|
|
128
|
+
export interface PluginLocalSkillIndex {
|
|
129
|
+
/** Every plugin-local skill location, as {@link computeTreeCopiedSkillLocations} lists them. */
|
|
130
|
+
readonly locations: readonly DistributedSkillLocation[];
|
|
131
|
+
/**
|
|
132
|
+
* The location of the skill whose `SKILL.md` is at `skillMdPath` — matched by the
|
|
133
|
+
* directory holding that file — or `undefined` when the skill is not plugin-local.
|
|
134
|
+
* One plugin listed in several marketplaces yields one location per listing; this is
|
|
135
|
+
* the FIRST, in config order (see {@link locationsOf} for all of them).
|
|
136
|
+
*/
|
|
137
|
+
locationOf(skillMdPath: string): DistributedSkillLocation | undefined;
|
|
138
|
+
/** Every location of the skill whose `SKILL.md` is at `skillMdPath`, in config order; `[]` when not plugin-local. */
|
|
139
|
+
locationsOf(skillMdPath: string): readonly DistributedSkillLocation[];
|
|
140
|
+
/**
|
|
141
|
+
* Why the skill whose `SKILL.md` is at `skillMdPath` is NOT plugin-local although it sits
|
|
142
|
+
* under a plugin's `skills/` dir — or `undefined` when it IS plugin-local, or is under no
|
|
143
|
+
* plugin's `skills/` dir at all (or is gitignored there: ignoring it is the instruction).
|
|
144
|
+
* Diagnostic: the untracked half lists the disk, so it runs only when first asked.
|
|
145
|
+
*/
|
|
146
|
+
exclusionOf(skillMdPath: string): PluginSkillExclusion | undefined;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* THE answer to "is this skill plugin-local — does it ship with its plugin?", for every
|
|
150
|
+
* lane that asks: `vat build` / `vat skills build` and `vat verify` (what they report as
|
|
151
|
+
* in-place), the consistency check (plugin assignment, `SKILL_UNPUBLISHED`), and
|
|
152
|
+
* skill-reference resolution (where a skill builds to).
|
|
153
|
+
*
|
|
154
|
+
* Derived from what the claude phase actually PACKAGES — {@link computeTreeCopiedSkillLocations},
|
|
155
|
+
* i.e. git-visible, outermost skill directories under a plugin's `skills/` — never from a
|
|
156
|
+
* path prefix. A prefix also claimed a skill the plugin build does not ship: one not yet
|
|
157
|
+
* `git add`ed (reported as shipping while the build warned it was not packaged), or one
|
|
158
|
+
* nested inside another skill's directory.
|
|
159
|
+
*
|
|
160
|
+
* Keyed by the skill's SOURCE DIRECTORY, never its declared name: a name is not unique
|
|
161
|
+
* across a project (a repo-only skill may share one with a plugin-local skill) and is
|
|
162
|
+
* unrelated to the directory the build lists. Exact directories also make the
|
|
163
|
+
* `skills/` vs `skills-extra/` boundary structural.
|
|
164
|
+
*
|
|
165
|
+
* Build ONCE per invocation: listing the locations runs the crawl for every plugin.
|
|
166
|
+
*/
|
|
167
|
+
export declare function indexPluginLocalSkills(config: ProjectConfig, configDir: string): PluginLocalSkillIndex;
|
|
168
|
+
/** An untracked skill directory under a plugin's `skills/` — see {@link listUntrackedPluginSkillDirs}. */
|
|
169
|
+
export interface UntrackedPluginSkillDir {
|
|
170
|
+
readonly pluginName: string;
|
|
171
|
+
/** Absolute source directory. */
|
|
172
|
+
readonly skillSourceDir: string;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* The pure half of {@link indexPluginLocalSkills}: index `locations` (config order) by
|
|
176
|
+
* source directory, the first listing winning `locationOf`. `listUntracked` — every
|
|
177
|
+
* untracked skill directory under a plugin's `skills/` — is called at most once, and
|
|
178
|
+
* only when {@link PluginLocalSkillIndex.exclusionOf} first gets past the nested check.
|
|
179
|
+
*/
|
|
180
|
+
export declare function indexSkillLocations(locations: readonly DistributedSkillLocation[], listUntracked: () => readonly UntrackedPluginSkillDir[]): PluginLocalSkillIndex;
|
|
117
181
|
//# sourceMappingURL=plugin-distribution-layout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-distribution-layout.d.ts","sourceRoot":"","sources":["../src/plugin-distribution-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin-distribution-layout.d.ts","sourceRoot":"","sources":["../src/plugin-distribution-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAKnE;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,GACjB,MAAM,CAWR;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACpD,MAAM,CAKR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE,CAE3E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE,CAS9E;AAwDD,+DAA+D;AAC/D,MAAM,WAAW,wBAAwB;IACvC,wDAAwD;IACxD,eAAe,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,gHAAgH;IAChH,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,GAChB,wBAAwB,EAAE,CA0B5B;AAED,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,oBAAoB,GAC5B,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG,uBAAuB,CAAC,GAC1D;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAEzE,oFAAoF;AACpF,MAAM,WAAW,qBAAqB;IACpC,gGAAgG;IAChG,QAAQ,CAAC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACxD;;;;;OAKG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAAC;IACtE,qHAAqH;IACrH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,wBAAwB,EAAE,CAAC;IACtE;;;;;OAKG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAAC;CACpE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,CActG;AAED,0GAA0G;AAC1G,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,iCAAiC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,wBAAwB,EAAE,EAC9C,aAAa,EAAE,MAAM,SAAS,uBAAuB,EAAE,GACtD,qBAAqB,CA8BvB"}
|
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
* Shared primitives for locating where `vat build --only claude` places
|
|
5
5
|
* tree-copied plugin skills in the output tree, and where it reads them from.
|
|
6
6
|
*
|
|
7
|
-
* Consumed by `vat build`, `vat verify`,
|
|
8
|
-
* conventions can never drift between those commands.
|
|
7
|
+
* Consumed by `vat build`, `vat verify`, consistency-check and skill-reference
|
|
8
|
+
* resolution so the path conventions can never drift between those commands.
|
|
9
9
|
*/
|
|
10
10
|
import { existsSync } from 'node:fs';
|
|
11
11
|
import { dirname } from 'node:path';
|
|
12
|
-
import {
|
|
12
|
+
import { safePath, toForwardSlash } from '@vibe-agent-toolkit/utils';
|
|
13
|
+
import { crawlDirectorySync } from '@vibe-agent-toolkit/utils/crawl';
|
|
14
|
+
import { gitFindRoot, isGitIgnored } from '@vibe-agent-toolkit/utils/git';
|
|
13
15
|
/**
|
|
14
16
|
* Absolute path to the built plugin output directory.
|
|
15
17
|
*
|
|
@@ -82,7 +84,6 @@ export function listPluginSourceSkillDirs(pluginSourceDir) {
|
|
|
82
84
|
*/
|
|
83
85
|
export function listUntrackedPluginSkillDirs(pluginSourceDir) {
|
|
84
86
|
const skillsDir = safePath.join(pluginSourceDir, 'skills');
|
|
85
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- caller validates pluginSourceDir
|
|
86
87
|
if (!existsSync(skillsDir))
|
|
87
88
|
return [];
|
|
88
89
|
if (gitFindRoot(safePath.resolve(skillsDir)) === null)
|
|
@@ -98,11 +99,17 @@ export function listUntrackedPluginSkillDirs(pluginSourceDir) {
|
|
|
98
99
|
*/
|
|
99
100
|
function crawlSkillDirs(pluginSourceDir, respectGitignore) {
|
|
100
101
|
const skillsDir = safePath.join(pluginSourceDir, 'skills');
|
|
101
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- caller validates pluginSourceDir
|
|
102
102
|
if (!existsSync(skillsDir))
|
|
103
103
|
return [];
|
|
104
104
|
// `exclude: []` (not the crawler's default) so this sees exactly what
|
|
105
105
|
// treeCopyPlugin sees — the only filter either applies is git visibility.
|
|
106
|
+
//
|
|
107
|
+
// A directory this crawl cannot LIST stops the build, by name, for the same
|
|
108
|
+
// reason the tree-copy stops: this listing decides which skills get packaged,
|
|
109
|
+
// and a shorter answer ships a plugin missing every skill beneath the refused
|
|
110
|
+
// directory while the build reports success — the one silent drop property 3
|
|
111
|
+
// above exists to prevent. Expressed against the plugin source dir so the
|
|
112
|
+
// message reads `skills/<group>`, the path the author sees.
|
|
106
113
|
const skillFiles = crawlDirectorySync({
|
|
107
114
|
baseDir: skillsDir,
|
|
108
115
|
include: ['**/SKILL.md'],
|
|
@@ -110,6 +117,12 @@ function crawlSkillDirs(pluginSourceDir, respectGitignore) {
|
|
|
110
117
|
absolute: false,
|
|
111
118
|
filesOnly: true,
|
|
112
119
|
respectGitignore,
|
|
120
|
+
unreadable: {
|
|
121
|
+
refuse: {
|
|
122
|
+
root: pluginSourceDir,
|
|
123
|
+
remedy: 'Fix the permissions on that directory, or move it out of the plugin\'s `skills/` tree so the build no longer has to list it.',
|
|
124
|
+
},
|
|
125
|
+
},
|
|
113
126
|
});
|
|
114
127
|
const dirs = skillFiles
|
|
115
128
|
.map((rel) => toForwardSlash(dirname(rel)))
|
|
@@ -169,12 +182,72 @@ export function skillNameToFsPath(name) {
|
|
|
169
182
|
return name.replaceAll(':', '__');
|
|
170
183
|
}
|
|
171
184
|
/**
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
185
|
+
* THE answer to "is this skill plugin-local — does it ship with its plugin?", for every
|
|
186
|
+
* lane that asks: `vat build` / `vat skills build` and `vat verify` (what they report as
|
|
187
|
+
* in-place), the consistency check (plugin assignment, `SKILL_UNPUBLISHED`), and
|
|
188
|
+
* skill-reference resolution (where a skill builds to).
|
|
189
|
+
*
|
|
190
|
+
* Derived from what the claude phase actually PACKAGES — {@link computeTreeCopiedSkillLocations},
|
|
191
|
+
* i.e. git-visible, outermost skill directories under a plugin's `skills/` — never from a
|
|
192
|
+
* path prefix. A prefix also claimed a skill the plugin build does not ship: one not yet
|
|
193
|
+
* `git add`ed (reported as shipping while the build warned it was not packaged), or one
|
|
194
|
+
* nested inside another skill's directory.
|
|
195
|
+
*
|
|
196
|
+
* Keyed by the skill's SOURCE DIRECTORY, never its declared name: a name is not unique
|
|
197
|
+
* across a project (a repo-only skill may share one with a plugin-local skill) and is
|
|
198
|
+
* unrelated to the directory the build lists. Exact directories also make the
|
|
199
|
+
* `skills/` vs `skills-extra/` boundary structural.
|
|
200
|
+
*
|
|
201
|
+
* Build ONCE per invocation: listing the locations runs the crawl for every plugin.
|
|
202
|
+
*/
|
|
203
|
+
export function indexPluginLocalSkills(config, configDir) {
|
|
204
|
+
// First plugin per source dir: two listings of one source dir list the same disk.
|
|
205
|
+
const pluginBySourceDir = new Map();
|
|
206
|
+
for (const marketplace of Object.values(config.claude?.marketplaces ?? {})) {
|
|
207
|
+
for (const plugin of marketplace.plugins) {
|
|
208
|
+
const sourceDir = getPluginSourceDir(configDir, plugin);
|
|
209
|
+
if (!pluginBySourceDir.has(sourceDir))
|
|
210
|
+
pluginBySourceDir.set(sourceDir, plugin.name);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return indexSkillLocations(computeTreeCopiedSkillLocations(config, configDir), () => [...pluginBySourceDir].flatMap(([sourceDir, pluginName]) => listUntrackedPluginSkillDirs(sourceDir).map((dir) => ({ pluginName, skillSourceDir: safePath.join(sourceDir, 'skills', dir) }))));
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* The pure half of {@link indexPluginLocalSkills}: index `locations` (config order) by
|
|
217
|
+
* source directory, the first listing winning `locationOf`. `listUntracked` — every
|
|
218
|
+
* untracked skill directory under a plugin's `skills/` — is called at most once, and
|
|
219
|
+
* only when {@link PluginLocalSkillIndex.exclusionOf} first gets past the nested check.
|
|
175
220
|
*/
|
|
176
|
-
export function
|
|
177
|
-
const
|
|
178
|
-
|
|
221
|
+
export function indexSkillLocations(locations, listUntracked) {
|
|
222
|
+
const bySourceDir = new Map();
|
|
223
|
+
for (const loc of locations) {
|
|
224
|
+
const key = safePath.resolve(loc.skillSourceDir);
|
|
225
|
+
bySourceDir.set(key, [...(bySourceDir.get(key) ?? []), loc]);
|
|
226
|
+
}
|
|
227
|
+
const skillDirOf = (skillMdPath) => safePath.resolve(dirname(safePath.resolve(skillMdPath)));
|
|
228
|
+
const locationsOf = (skillMdPath) => bySourceDir.get(skillDirOf(skillMdPath)) ?? [];
|
|
229
|
+
const isUnder = (dir, ancestor) => toForwardSlash(dir).startsWith(`${toForwardSlash(safePath.resolve(ancestor))}/`);
|
|
230
|
+
let untracked;
|
|
231
|
+
return {
|
|
232
|
+
locations,
|
|
233
|
+
locationsOf,
|
|
234
|
+
locationOf: (skillMdPath) => locationsOf(skillMdPath)[0],
|
|
235
|
+
exclusionOf: (skillMdPath) => {
|
|
236
|
+
if (locationsOf(skillMdPath).length > 0)
|
|
237
|
+
return undefined;
|
|
238
|
+
const skillDir = skillDirOf(skillMdPath);
|
|
239
|
+
const outer = locations.find((loc) => isUnder(skillDir, loc.skillSourceDir));
|
|
240
|
+
if (outer !== undefined)
|
|
241
|
+
return { kind: 'nested', outer: { pluginName: outer.pluginName, skillSourceDir: outer.skillSourceDir } };
|
|
242
|
+
untracked ??= listUntracked();
|
|
243
|
+
// Inside an UNTRACKED outer skill is still nested: `git add` on the outer dir ships
|
|
244
|
+
// the outer skill and leaves this one nested inside it.
|
|
245
|
+
const untrackedOuter = untracked.find((dir) => isUnder(skillDir, dir.skillSourceDir));
|
|
246
|
+
if (untrackedOuter !== undefined)
|
|
247
|
+
return { kind: 'nested', outer: untrackedOuter };
|
|
248
|
+
const own = untracked.find((dir) => safePath.resolve(dir.skillSourceDir) === skillDir);
|
|
249
|
+
return own === undefined ? undefined : { kind: 'untracked', ...own };
|
|
250
|
+
},
|
|
251
|
+
};
|
|
179
252
|
}
|
|
180
253
|
//# sourceMappingURL=plugin-distribution-layout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-distribution-layout.js","sourceRoot":"","sources":["../src/plugin-distribution-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"plugin-distribution-layout.js","sourceRoot":"","sources":["../src/plugin-distribution-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* Run after packageSkill() completes — all files are copied, all links rewritten.
|
|
5
5
|
* Detects unreferenced files and broken links in the packaged output.
|
|
6
6
|
*/
|
|
7
|
-
import { type ValidationIssue } from '@vibe-agent-toolkit/
|
|
7
|
+
import { type ValidationIssue } from '@vibe-agent-toolkit/schema';
|
|
8
|
+
import { type PackagingTarget } from './content-type-routing.js';
|
|
8
9
|
/**
|
|
9
10
|
* Check that every file in the packaged output is referenced from some markdown or HTML file.
|
|
10
11
|
*
|
|
@@ -31,6 +32,42 @@ import { type ValidationIssue } from '@vibe-agent-toolkit/agent-schema';
|
|
|
31
32
|
* `./x` or with backslashes still matches.
|
|
32
33
|
*/
|
|
33
34
|
export declare function checkUnreferencedFiles(outputDir: string, filesConfigDests?: readonly string[]): Promise<ValidationIssue[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Check that every bundled-subdirectory path the packaged docs NAME is present in
|
|
37
|
+
* the packaged output — the inverse of {@link checkUnreferencedFiles}.
|
|
38
|
+
*
|
|
39
|
+
* Markdown links are deliberately out of scope here; {@link checkBrokenPackagedLinks}
|
|
40
|
+
* already covers a link with a missing target, at error severity. This lane sees
|
|
41
|
+
* only the bare tokens the markdown AST did not claim — a path inside a code
|
|
42
|
+
* block, a code span, or prose — which is the population nothing else can reach.
|
|
43
|
+
*
|
|
44
|
+
* See `validators/referenced-path-missing.ts` for the measured precision argument
|
|
45
|
+
* behind each filter, and for why this is a warning rather than an error.
|
|
46
|
+
*
|
|
47
|
+
* SKILL-LOCAL, and there is nothing wider to be local to. `detectMissingReferencedPaths`
|
|
48
|
+
* once took a `siblingSearchRoot` that measured better (1.9% vs 3.8% on a 52-skill
|
|
49
|
+
* corpus) and had no caller able to supply one — the packager knows its own output
|
|
50
|
+
* directory, not the plugin the skill will be installed into. That parameter and its
|
|
51
|
+
* ~90-line walk are now deleted rather than kept as a seam; the shipped rate is 3.8%.
|
|
52
|
+
*
|
|
53
|
+
* ⚠️ This walk has NO exclusions, unlike `checkPackagedSizeLimit`'s, and the two are
|
|
54
|
+
* asking different questions rather than disagreeing. The size check asks what the
|
|
55
|
+
* Skills API will WEIGH, so it drops `evals/`, `node_modules/` and `.git/` because the
|
|
56
|
+
* uploader does. This one asks whether the packaged BUNDLE is self-consistent, and the
|
|
57
|
+
* bundle is what installs as a Claude Code plugin — `evals/` and all. A `.md` inside a
|
|
58
|
+
* bundled `evals/` really is shipped to a plugin user, so a path it names really is
|
|
59
|
+
* missing from what they get.
|
|
60
|
+
*
|
|
61
|
+
* ⛔ `target` is required and is not defaulted. The routed-spelling guard inside
|
|
62
|
+
* the detector has to ask the SAME routing function the packager asked, and a
|
|
63
|
+
* default here is exactly how it came to ask a different one: it used the
|
|
64
|
+
* extension-only `claude-code` rule for every target, so `claude-web` bundles
|
|
65
|
+
* reported files that shipped.
|
|
66
|
+
*
|
|
67
|
+
* @param outputDir Absolute path to the packaged skill output.
|
|
68
|
+
* @param target The packaging target the output was produced for.
|
|
69
|
+
*/
|
|
70
|
+
export declare function checkMissingReferencedPaths(outputDir: string, target: PackagingTarget): Promise<ValidationIssue[]>;
|
|
34
71
|
/**
|
|
35
72
|
* Check that every local file link in packaged markdown and HTML files resolves to a file
|
|
36
73
|
* that exists in the packaged output.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-build-checks.d.ts","sourceRoot":"","sources":["../src/post-build-checks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"post-build-checks.d.ts","sourceRoot":"","sources":["../src/post-build-checks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAgSjE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,gBAAgB,GAAE,SAAS,MAAM,EAAO,GACvC,OAAO,CAAC,eAAe,EAAE,CAAC,CAuC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,eAAe,EAAE,CAAC,CAG5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,YAAY,GAAE,SAAS,MAAM,EAAO,GACnC,OAAO,CAAC,eAAe,EAAE,CAAC,CAgB5B"}
|
|
@@ -7,16 +7,27 @@
|
|
|
7
7
|
import { existsSync, readdirSync, statSync } from 'node:fs';
|
|
8
8
|
import { readFile } from 'node:fs/promises';
|
|
9
9
|
import { dirname } from 'node:path';
|
|
10
|
-
import {
|
|
11
|
-
import { safePath, toForwardSlash } from '@vibe-agent-toolkit/utils';
|
|
10
|
+
import { parseFileCached } from '@vibe-agent-toolkit/resources';
|
|
11
|
+
import { direntKindFollowingSync, FollowedWalk, safePath, toForwardSlash } from '@vibe-agent-toolkit/utils';
|
|
12
12
|
import { normalizeRelPath } from './files-config.js';
|
|
13
|
+
import { detectMissingReferencedPaths } from './validators/referenced-path-missing.js';
|
|
13
14
|
import { evaluate, makeRuleContext, materializeIssue } from './validators/rule-engine/index.js';
|
|
14
15
|
/**
|
|
15
16
|
* Regex matching markdown inline links: [text](href).
|
|
16
|
-
*
|
|
17
|
+
*
|
|
18
|
+
* The negated character classes were once documented here as "non-backtracking
|
|
19
|
+
* by design". That was wrong, and it is why this regex sat quadratic behind a
|
|
20
|
+
* disable comment for so long: they backtrack, each step just fails fast — and
|
|
21
|
+
* the cost was never inside one match attempt, it was the scan RESTARTING at
|
|
22
|
+
* every bracket of a run. See the note on the lookbehind below.
|
|
17
23
|
*/
|
|
18
|
-
//
|
|
19
|
-
|
|
24
|
+
// The `(?<!\[)` is load-bearing, not cosmetic. Without it a run of `[` with no
|
|
25
|
+
// closing bracket makes the engine restart the `[^\]]*` scan at EVERY bracket,
|
|
26
|
+
// which is quadratic: measured 2,632 ms on 40k brackets. Because any match
|
|
27
|
+
// starting at the second `[` of a run is also matchable from the first (the
|
|
28
|
+
// negated class admits `[`), skipping non-initial brackets loses no match and
|
|
29
|
+
// makes the scan linear — the same input drops to 0.1 ms.
|
|
30
|
+
const INLINE_LINK_REGEX = /(?<!\[)\[(?:[^\]\\]|\\.)*\]\(([^)]*)\)/g;
|
|
20
31
|
/**
|
|
21
32
|
* Regex matching fenced code blocks (``` ... ```), including optional language hint.
|
|
22
33
|
* Non-greedy body keeps matches scoped to a single block.
|
|
@@ -38,13 +49,19 @@ function stripCodeBlocks(content) {
|
|
|
38
49
|
/**
|
|
39
50
|
* Recursively collect all file paths in a directory.
|
|
40
51
|
*/
|
|
41
|
-
function walkDir(dir) {
|
|
52
|
+
function walkDir(dir, walk) {
|
|
53
|
+
const guard = walk ?? new FollowedWalk();
|
|
54
|
+
if (walk === undefined)
|
|
55
|
+
guard.enter(dir);
|
|
42
56
|
const files = [];
|
|
43
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- dir from validated output path
|
|
44
57
|
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
45
58
|
const fullPath = safePath.join(dir, entry.name);
|
|
46
|
-
|
|
47
|
-
|
|
59
|
+
// Output tree: a link is how the entry got there, so follow it. A dangling
|
|
60
|
+
// one is still an entry the package ships, and is listed like any file. A
|
|
61
|
+
// link back into the tree is refused by the walk guard, not recursed.
|
|
62
|
+
if (direntKindFollowingSync(dir, entry) === 'directory') {
|
|
63
|
+
guard.enter(fullPath);
|
|
64
|
+
files.push(...walkDir(fullPath, guard));
|
|
48
65
|
}
|
|
49
66
|
else {
|
|
50
67
|
files.push(fullPath);
|
|
@@ -81,12 +98,12 @@ function extractLocalLinks(content) {
|
|
|
81
98
|
* Extract local file hrefs from a content file — markdown or HTML.
|
|
82
99
|
*
|
|
83
100
|
* For markdown: regex-matches `[text](href)` links, skipping code blocks.
|
|
84
|
-
* For HTML/HTM: uses
|
|
101
|
+
* For HTML/HTM: uses the parse5-based HTML parser and returns `local_file` hrefs only.
|
|
85
102
|
* Fragments are stripped from all returned hrefs.
|
|
86
103
|
*/
|
|
87
104
|
async function extractLocalHrefs(filePath) {
|
|
88
105
|
if (filePath.endsWith('.html') || filePath.endsWith('.htm')) {
|
|
89
|
-
const result = await
|
|
106
|
+
const result = await parseFileCached(filePath, 'html');
|
|
90
107
|
return result.links
|
|
91
108
|
.filter(link => link.type === 'local_file')
|
|
92
109
|
.map(link => {
|
|
@@ -96,7 +113,6 @@ async function extractLocalHrefs(filePath) {
|
|
|
96
113
|
.filter(href => href.length > 0);
|
|
97
114
|
}
|
|
98
115
|
// Markdown: read content and regex-match
|
|
99
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- filePath from walkDir
|
|
100
116
|
const content = await readFile(filePath, 'utf-8');
|
|
101
117
|
return extractLocalLinks(content);
|
|
102
118
|
}
|
|
@@ -159,7 +175,6 @@ function collectBrokenLinkIssues(sourceFile, hrefs, allFileSet, outputDir, dropp
|
|
|
159
175
|
// (`concepts/`) survived rewrite verbatim and landed here pointing at a
|
|
160
176
|
// directory the output does not have — failing the build under
|
|
161
177
|
// PACKAGED_BROKEN_LINK, whose remediation text blames a VAT bug.
|
|
162
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- resolved is a normalized path from a validated output directory
|
|
163
178
|
const isExistingDirectory = statSync(resolved, { throwIfNoEntry: false })?.isDirectory() === true;
|
|
164
179
|
if (isExistingDirectory) {
|
|
165
180
|
continue;
|
|
@@ -203,7 +218,6 @@ async function collectReferencedPaths(outputDir, allFileSet) {
|
|
|
203
218
|
if (visited.has(normalized))
|
|
204
219
|
continue;
|
|
205
220
|
visited.add(normalized);
|
|
206
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- filePath from walkDir output
|
|
207
221
|
if (!existsSync(filePath))
|
|
208
222
|
continue;
|
|
209
223
|
const hrefs = await extractLocalHrefs(filePath);
|
|
@@ -236,9 +250,7 @@ async function addMentionReferences(outputDir, referenced, candidates, contentFi
|
|
|
236
250
|
if (candidates.length === 0 || contentFiles.length === 0) {
|
|
237
251
|
return;
|
|
238
252
|
}
|
|
239
|
-
const contents = await Promise.all(
|
|
240
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- contentFile from walkDir
|
|
241
|
-
contentFiles.map(f => readFile(f, 'utf-8')));
|
|
253
|
+
const contents = await Promise.all(contentFiles.map(f => readFile(f, 'utf-8')));
|
|
242
254
|
const haystack = contents.join('\n');
|
|
243
255
|
for (const candidate of candidates) {
|
|
244
256
|
const relativePath = toForwardSlash(safePath.relative(outputDir, candidate));
|
|
@@ -307,6 +319,45 @@ export async function checkUnreferencedFiles(outputDir, filesConfigDests = []) {
|
|
|
307
319
|
}
|
|
308
320
|
return issues;
|
|
309
321
|
}
|
|
322
|
+
/**
|
|
323
|
+
* Check that every bundled-subdirectory path the packaged docs NAME is present in
|
|
324
|
+
* the packaged output — the inverse of {@link checkUnreferencedFiles}.
|
|
325
|
+
*
|
|
326
|
+
* Markdown links are deliberately out of scope here; {@link checkBrokenPackagedLinks}
|
|
327
|
+
* already covers a link with a missing target, at error severity. This lane sees
|
|
328
|
+
* only the bare tokens the markdown AST did not claim — a path inside a code
|
|
329
|
+
* block, a code span, or prose — which is the population nothing else can reach.
|
|
330
|
+
*
|
|
331
|
+
* See `validators/referenced-path-missing.ts` for the measured precision argument
|
|
332
|
+
* behind each filter, and for why this is a warning rather than an error.
|
|
333
|
+
*
|
|
334
|
+
* SKILL-LOCAL, and there is nothing wider to be local to. `detectMissingReferencedPaths`
|
|
335
|
+
* once took a `siblingSearchRoot` that measured better (1.9% vs 3.8% on a 52-skill
|
|
336
|
+
* corpus) and had no caller able to supply one — the packager knows its own output
|
|
337
|
+
* directory, not the plugin the skill will be installed into. That parameter and its
|
|
338
|
+
* ~90-line walk are now deleted rather than kept as a seam; the shipped rate is 3.8%.
|
|
339
|
+
*
|
|
340
|
+
* ⚠️ This walk has NO exclusions, unlike `checkPackagedSizeLimit`'s, and the two are
|
|
341
|
+
* asking different questions rather than disagreeing. The size check asks what the
|
|
342
|
+
* Skills API will WEIGH, so it drops `evals/`, `node_modules/` and `.git/` because the
|
|
343
|
+
* uploader does. This one asks whether the packaged BUNDLE is self-consistent, and the
|
|
344
|
+
* bundle is what installs as a Claude Code plugin — `evals/` and all. A `.md` inside a
|
|
345
|
+
* bundled `evals/` really is shipped to a plugin user, so a path it names really is
|
|
346
|
+
* missing from what they get.
|
|
347
|
+
*
|
|
348
|
+
* ⛔ `target` is required and is not defaulted. The routed-spelling guard inside
|
|
349
|
+
* the detector has to ask the SAME routing function the packager asked, and a
|
|
350
|
+
* default here is exactly how it came to ask a different one: it used the
|
|
351
|
+
* extension-only `claude-code` rule for every target, so `claude-web` bundles
|
|
352
|
+
* reported files that shipped.
|
|
353
|
+
*
|
|
354
|
+
* @param outputDir Absolute path to the packaged skill output.
|
|
355
|
+
* @param target The packaging target the output was produced for.
|
|
356
|
+
*/
|
|
357
|
+
export async function checkMissingReferencedPaths(outputDir, target) {
|
|
358
|
+
const docFiles = walkDir(outputDir).filter(f => f.endsWith('.md'));
|
|
359
|
+
return detectMissingReferencedPaths(docFiles, outputDir, target);
|
|
360
|
+
}
|
|
310
361
|
/**
|
|
311
362
|
* Check that every local file link in packaged markdown and HTML files resolves to a file
|
|
312
363
|
* that exists in the packaged output.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-build-checks.js","sourceRoot":"","sources":["../src/post-build-checks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"post-build-checks.js","sourceRoot":"","sources":["../src/post-build-checks.ts"],"names":[],"mappings":"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"}
|