@vibe-agent-toolkit/cli 0.1.39-rc.9 → 0.1.39
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/dist/commands/audit/provenance.d.ts +1 -1
- package/dist/commands/audit/provenance.d.ts.map +1 -1
- package/dist/commands/audit/provenance.js +4 -1
- package/dist/commands/audit/provenance.js.map +1 -1
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +21 -107
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/build.d.ts +2 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +92 -0
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/claude/plugin/build.d.ts +39 -0
- package/dist/commands/claude/plugin/build.d.ts.map +1 -1
- package/dist/commands/claude/plugin/build.js +174 -64
- package/dist/commands/claude/plugin/build.js.map +1 -1
- package/dist/commands/claude/plugin/tree-copy.d.ts +6 -0
- package/dist/commands/claude/plugin/tree-copy.d.ts.map +1 -1
- package/dist/commands/claude/plugin/tree-copy.js +6 -2
- package/dist/commands/claude/plugin/tree-copy.js.map +1 -1
- package/dist/commands/consistency-check.d.ts +8 -3
- package/dist/commands/consistency-check.d.ts.map +1 -1
- package/dist/commands/consistency-check.js +29 -6
- package/dist/commands/consistency-check.js.map +1 -1
- package/dist/commands/corpus/seed.d.ts +12 -12
- package/dist/commands/resources/index.d.ts.map +1 -1
- package/dist/commands/resources/index.js +9 -0
- package/dist/commands/resources/index.js.map +1 -1
- package/dist/commands/resources/validate.d.ts +1 -0
- package/dist/commands/resources/validate.d.ts.map +1 -1
- package/dist/commands/resources/validate.js +1 -0
- package/dist/commands/resources/validate.js.map +1 -1
- package/dist/commands/skill/review.d.ts.map +1 -1
- package/dist/commands/skill/review.js +6 -39
- package/dist/commands/skill/review.js.map +1 -1
- package/dist/commands/skill/test/auth-flags.d.ts +17 -0
- package/dist/commands/skill/test/auth-flags.d.ts.map +1 -0
- package/dist/commands/skill/test/auth-flags.js +23 -0
- package/dist/commands/skill/test/auth-flags.js.map +1 -0
- package/dist/commands/skill/test/configure.d.ts.map +1 -1
- package/dist/commands/skill/test/configure.js +2 -4
- package/dist/commands/skill/test/configure.js.map +1 -1
- package/dist/commands/skill/test/run.d.ts +61 -2
- package/dist/commands/skill/test/run.d.ts.map +1 -1
- package/dist/commands/skill/test/run.js +289 -62
- package/dist/commands/skill/test/run.js.map +1 -1
- package/dist/commands/skills/build.d.ts.map +1 -1
- package/dist/commands/skills/build.js +4 -23
- package/dist/commands/skills/build.js.map +1 -1
- package/dist/commands/verify.d.ts +20 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +51 -20
- package/dist/commands/verify.js.map +1 -1
- package/dist/skill-resolution/classify.d.ts +28 -0
- package/dist/skill-resolution/classify.d.ts.map +1 -0
- package/dist/skill-resolution/classify.js +58 -0
- package/dist/skill-resolution/classify.js.map +1 -0
- package/dist/skill-resolution/index.d.ts +5 -0
- package/dist/skill-resolution/index.d.ts.map +1 -0
- package/dist/skill-resolution/index.js +4 -0
- package/dist/skill-resolution/index.js.map +1 -0
- package/dist/skill-resolution/packaging-config.d.ts +31 -0
- package/dist/skill-resolution/packaging-config.d.ts.map +1 -0
- package/dist/skill-resolution/packaging-config.js +72 -0
- package/dist/skill-resolution/packaging-config.js.map +1 -0
- package/dist/skill-resolution/resolve-skill-reference.d.ts +3 -0
- package/dist/skill-resolution/resolve-skill-reference.d.ts.map +1 -0
- package/dist/skill-resolution/resolve-skill-reference.js +106 -0
- package/dist/skill-resolution/resolve-skill-reference.js.map +1 -0
- package/dist/skill-resolution/types.d.ts +59 -0
- package/dist/skill-resolution/types.d.ts.map +1 -0
- package/dist/skill-resolution/types.js +7 -0
- package/dist/skill-resolution/types.js.map +1 -0
- package/dist/utils/config-loader.d.ts +23 -3
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +45 -7
- package/dist/utils/config-loader.js.map +1 -1
- package/package.json +11 -11
|
@@ -13,4 +13,24 @@ export interface VerifyCommandOptions {
|
|
|
13
13
|
debug?: boolean;
|
|
14
14
|
}
|
|
15
15
|
export declare function createVerifyTopLevelCommand(): Command;
|
|
16
|
+
/** Result of checking files config dests for a single (skill, outputDir) pair */
|
|
17
|
+
export interface FilesDestCheckResult {
|
|
18
|
+
skillName: string;
|
|
19
|
+
/** The actual output directory that was checked (pool dir or plugin-tree dir). */
|
|
20
|
+
outputDir: string;
|
|
21
|
+
missing: string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check that all dest paths from the merged files config exist in the built output.
|
|
25
|
+
*
|
|
26
|
+
* Checks each skill's dests in the location(s) where `vat build` actually wrote them:
|
|
27
|
+
* - Pool skills: `dist/skills/<fsName>/` (only when that dir exists)
|
|
28
|
+
* - Tree-copy skills: `dist/.claude/plugins/.../skills/<name>/` (only when that dir exists)
|
|
29
|
+
*
|
|
30
|
+
* A dest is "missing" ONLY when absent from a candidate dir that exists. If a skill
|
|
31
|
+
* has no existing candidate dir, it is not reported (build didn't run for that mode).
|
|
32
|
+
*
|
|
33
|
+
* @returns One result per (skill, outputDir) pair where dests are absent.
|
|
34
|
+
*/
|
|
35
|
+
export declare function checkFilesConfigDests(cwd: string): FilesDestCheckResult[];
|
|
16
36
|
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,2BAA2B,IAAI,OAAO,CA4CrD"}
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,2BAA2B,IAAI,OAAO,CA4CrD;AAED,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAwCD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,EAAE,CA8CzE"}
|
package/dist/commands/verify.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* 4. consistency check (skill distribution integrity — package.json, plugin assignment)
|
|
9
9
|
*/
|
|
10
10
|
import { existsSync } from 'node:fs';
|
|
11
|
-
import { mergeFilesConfig } from '@vibe-agent-toolkit/agent-skills';
|
|
11
|
+
import { computeTreeCopiedSkillLocations, mergeFilesConfig } from '@vibe-agent-toolkit/agent-skills';
|
|
12
12
|
import { safePath } from '@vibe-agent-toolkit/utils';
|
|
13
13
|
import { Command } from 'commander';
|
|
14
14
|
import { handleCommandError } from '../utils/command-error.js';
|
|
@@ -66,31 +66,62 @@ Example:
|
|
|
66
66
|
function skillNameToFsPath(name) {
|
|
67
67
|
return name.replaceAll(':', '__');
|
|
68
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Register a check for (skillName, outputDir, mergedFiles) in the dedup map.
|
|
71
|
+
*
|
|
72
|
+
* Skips silently if:
|
|
73
|
+
* - mergedFiles is empty (no entries to verify)
|
|
74
|
+
* - outputDir does not exist on disk (not a candidate)
|
|
75
|
+
* - the key was already added (dedup guard)
|
|
76
|
+
*/
|
|
77
|
+
function tryAddCheckEntry(checks, skillName, outputDir, mergedFiles) {
|
|
78
|
+
if (mergedFiles.length === 0)
|
|
79
|
+
return;
|
|
80
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- outputDir is resolved from config, not user input
|
|
81
|
+
if (!existsSync(outputDir))
|
|
82
|
+
return;
|
|
83
|
+
const key = `${skillName}\0${outputDir}`;
|
|
84
|
+
if (!checks.has(key)) {
|
|
85
|
+
checks.set(key, { skillName, outputDir, mergedFiles });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
69
88
|
/**
|
|
70
89
|
* Check that all dest paths from the merged files config exist in the built output.
|
|
71
|
-
*
|
|
90
|
+
*
|
|
91
|
+
* Checks each skill's dests in the location(s) where `vat build` actually wrote them:
|
|
92
|
+
* - Pool skills: `dist/skills/<fsName>/` (only when that dir exists)
|
|
93
|
+
* - Tree-copy skills: `dist/.claude/plugins/.../skills/<name>/` (only when that dir exists)
|
|
94
|
+
*
|
|
95
|
+
* A dest is "missing" ONLY when absent from a candidate dir that exists. If a skill
|
|
96
|
+
* has no existing candidate dir, it is not reported (build didn't run for that mode).
|
|
97
|
+
*
|
|
98
|
+
* @returns One result per (skill, outputDir) pair where dests are absent.
|
|
72
99
|
*/
|
|
73
|
-
function checkFilesConfigDests(cwd) {
|
|
100
|
+
export function checkFilesConfigDests(cwd) {
|
|
74
101
|
try {
|
|
75
102
|
const config = loadConfig(cwd);
|
|
76
|
-
if (!config
|
|
103
|
+
if (!config)
|
|
77
104
|
return [];
|
|
78
|
-
}
|
|
79
105
|
const skillsConfig = config.skills;
|
|
80
|
-
const
|
|
81
|
-
//
|
|
82
|
-
const
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
for (const skillName of skillNames) {
|
|
87
|
-
const perSkill = skillsConfig.config?.[skillName];
|
|
88
|
-
const defaults = skillsConfig.defaults;
|
|
106
|
+
const defaults = skillsConfig?.defaults;
|
|
107
|
+
// Dedup map: key = `skillName\0outputDir` → check entry
|
|
108
|
+
const checks = new Map();
|
|
109
|
+
// --- Pool/config skills: candidate dir is dist/skills/<fsName> ---
|
|
110
|
+
for (const skillName of Object.keys(skillsConfig?.config ?? {})) {
|
|
111
|
+
const perSkill = skillsConfig?.config?.[skillName];
|
|
89
112
|
const mergedFiles = mergeFilesConfig(defaults?.files, perSkill?.files);
|
|
90
|
-
if (mergedFiles.length === 0) {
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
113
|
const outputDir = safePath.resolve(cwd, 'dist', 'skills', skillNameToFsPath(skillName));
|
|
114
|
+
tryAddCheckEntry(checks, skillName, outputDir, mergedFiles);
|
|
115
|
+
}
|
|
116
|
+
// --- Tree-copy skills: candidate dirs are plugin output skill dirs ---
|
|
117
|
+
for (const loc of computeTreeCopiedSkillLocations(config, cwd)) {
|
|
118
|
+
const perSkill = skillsConfig?.config?.[loc.skillDirName];
|
|
119
|
+
const mergedFiles = mergeFilesConfig(defaults?.files, perSkill?.files);
|
|
120
|
+
tryAddCheckEntry(checks, loc.skillDirName, loc.skillOutputDir, mergedFiles);
|
|
121
|
+
}
|
|
122
|
+
// --- Run each pending check and collect results ---
|
|
123
|
+
const results = [];
|
|
124
|
+
for (const { skillName, outputDir, mergedFiles } of checks.values()) {
|
|
94
125
|
const missing = [];
|
|
95
126
|
for (const entry of mergedFiles) {
|
|
96
127
|
const destPath = safePath.resolve(outputDir, entry.dest);
|
|
@@ -100,7 +131,7 @@ function checkFilesConfigDests(cwd) {
|
|
|
100
131
|
}
|
|
101
132
|
}
|
|
102
133
|
if (missing.length > 0) {
|
|
103
|
-
results.push({ skillName, missing });
|
|
134
|
+
results.push({ skillName, outputDir, missing });
|
|
104
135
|
}
|
|
105
136
|
}
|
|
106
137
|
return results;
|
|
@@ -130,8 +161,8 @@ function getClaudeMarketplaceNames() {
|
|
|
130
161
|
*/
|
|
131
162
|
function reportFilesDestErrors(results, logger) {
|
|
132
163
|
logger.error('\n▶ Phase: files-config-dests');
|
|
133
|
-
for (const { skillName, missing } of results) {
|
|
134
|
-
logger.error(` Skill '${skillName}': missing dest file(s) in
|
|
164
|
+
for (const { skillName, outputDir, missing } of results) {
|
|
165
|
+
logger.error(` Skill '${skillName}': missing dest file(s) in ${outputDir}/:`);
|
|
135
166
|
for (const dest of missing) {
|
|
136
167
|
logger.error(` - ${dest}`);
|
|
137
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,+BAA+B,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACrG,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,EAAE,oBAAoB,EAAyB,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAgC,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAOvE,MAAM,UAAU,2BAA2B;IACzC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEtC,OAAO;SACJ,WAAW,CAAC,mGAAmG,CAAC;SAChH,MAAM,CAAC,gBAAgB,EAAE,2EAA2E,CAAC;SACrG,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;SACzC,MAAM,CAAC,qBAAqB,CAAC;SAC7B,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BL,CACI,CAAC;IAEJ,OAAO,OAAO,CAAC;AACjB,CAAC;AAUD;;;GAGG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AASD;;;;;;;GAOG;AACH,SAAS,gBAAgB,CACvB,MAA+B,EAC/B,SAAiB,EACjB,SAAiB,EACjB,WAAgD;IAEhD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACrC,wHAAwH;IACxH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO;IACnC,MAAM,GAAG,GAAG,GAAG,SAAS,KAAK,SAAS,EAAE,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEvB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QACnC,MAAM,QAAQ,GAAG,YAAY,EAAE,QAAQ,CAAC;QAExC,wDAAwD;QACxD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;QAE7C,oEAAoE;QACpE,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;YAChE,MAAM,QAAQ,GAAG,YAAY,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvE,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;YACxF,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAC9D,CAAC;QAED,wEAAwE;QACxE,KAAK,MAAM,GAAG,IAAI,+BAA+B,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YAC/D,MAAM,QAAQ,GAAG,YAAY,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1D,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvE,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAC9E,CAAC;QAED,qDAAqD;QACrD,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACpE,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzD,oGAAoG;gBACpG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,yBAAyB;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACzC,IAAI,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,OAA+B,EAC/B,MAAuC;IAEvC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC9C,KAAK,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,YAAY,SAAS,8BAA8B,SAAS,IAAI,CAAC,CAAC;QAC/E,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAC9B,MAA0B,EAC1B,MAAuC;IAEvC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IAE1D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,OAA6B;IACnD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QACpC,wEAAwE;QACxE,MAAM,gBAAgB,GAAG,yBAAyB,EAAE,CAAC;QACrD,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;YACpC,MAAM,oBAAoB,GAAG,qCAAqC,IAAI,EAAE,CAAC;YACzE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,eAAe,IAAI,EAAE;gBAC3B,IAAI,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,CAAC;aAClE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAChC,MAAuC,EACvC,YAA2B;IAE3B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACtF,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAExF,IAAI,iBAAiB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,uBAAuB,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1D,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,iBAAiB,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAClF,uBAAuB,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IACD,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,OAA6B;IAChE,gDAAgD;IAChD,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAEvC,iFAAiF;IACjF,8DAA8D;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,CAAC,IAAI,IAAI,EAAE,6DAA6D,CAAC,CAAC;IACrH,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IAEjC,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEhF,MAAM,YAAY,GAAkB,EAAE,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;QAEhE,6EAA6E;QAC7E,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9D,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,SAAS,GAAG,IAAI,CAAC;gBACjB,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;gBAChD,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,8FAA8F;QAC9F,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjF,MAAM,oBAAoB,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAC7E,IAAI,oBAAoB,EAAE,CAAC;gBACzB,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,eAAe,CAAC;YACd,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACvC,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE,GAAG,QAAQ,IAAI;SAC1B,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SkillSource } from '@vibe-agent-toolkit/agent-skills';
|
|
2
|
+
/**
|
|
3
|
+
* Parse the `kind:value` source half of a reference (also used by `--with`).
|
|
4
|
+
* Grammar: `vendored` | `workspace:<x>` | `npm:<x>` | `url:<x>` | `path:<x>`.
|
|
5
|
+
* (No `sha256` here — it arrives only via config descriptors, matching the
|
|
6
|
+
* pre-existing `--with` grammar.)
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseSourceSpec(src: string): SkillSource;
|
|
9
|
+
/** Syntactic shape of a reference token (pure ladder rule 1). */
|
|
10
|
+
export type TokenShape = {
|
|
11
|
+
shape: 'source-spec';
|
|
12
|
+
source: SkillSource;
|
|
13
|
+
} | {
|
|
14
|
+
shape: 'definite-path';
|
|
15
|
+
} | {
|
|
16
|
+
shape: 'bare-name';
|
|
17
|
+
token: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Classify a reference token's syntactic shape (no IO):
|
|
21
|
+
* - a `kind:` prefix / `vendored` → `source-spec`
|
|
22
|
+
* - absolute, or contains a path separator, or starts with `.` → `definite-path`
|
|
23
|
+
* (ladder rule 1: "always a path; never name-resolved" — incl. the `./<name>`
|
|
24
|
+
* escape that forces a colliding local dir over a declared skill)
|
|
25
|
+
* - otherwise a bare word → `bare-name` (resolved against config + fs by the caller)
|
|
26
|
+
*/
|
|
27
|
+
export declare function classifyToken(ref: string): TokenShape;
|
|
28
|
+
//# sourceMappingURL=classify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/skill-resolution/classify.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAKpE;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAmBxD;AAED,iEAAiE;AACjE,MAAM,MAAM,UAAU,GAClB;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GAC7C;IAAE,KAAK,EAAE,eAAe,CAAA;CAAE,GAC1B;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAS1C;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAOrD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PURE classification of a skill reference token — no filesystem, no config.
|
|
3
|
+
* The IO-bound disambiguation (existing-dir vs declared-skill) lives in
|
|
4
|
+
* {@link resolveSkillReference}; this module decides only the *syntactic* shape.
|
|
5
|
+
*/
|
|
6
|
+
import { isAbsolute } from 'node:path';
|
|
7
|
+
import { toForwardSlash } from '@vibe-agent-toolkit/utils';
|
|
8
|
+
const SOURCE_KINDS = new Set(['workspace', 'npm', 'url', 'path']);
|
|
9
|
+
/**
|
|
10
|
+
* Parse the `kind:value` source half of a reference (also used by `--with`).
|
|
11
|
+
* Grammar: `vendored` | `workspace:<x>` | `npm:<x>` | `url:<x>` | `path:<x>`.
|
|
12
|
+
* (No `sha256` here — it arrives only via config descriptors, matching the
|
|
13
|
+
* pre-existing `--with` grammar.)
|
|
14
|
+
*/
|
|
15
|
+
export function parseSourceSpec(src) {
|
|
16
|
+
if (src === 'vendored')
|
|
17
|
+
return { vendored: true };
|
|
18
|
+
const colon = src.indexOf(':');
|
|
19
|
+
const kind = colon === -1 ? src : src.slice(0, colon);
|
|
20
|
+
const value = colon === -1 ? '' : src.slice(colon + 1);
|
|
21
|
+
if (!SOURCE_KINDS.has(kind)) {
|
|
22
|
+
throw new Error(`skill source must be workspace:|npm:|url:|path:|vendored. Got: ${src}`);
|
|
23
|
+
}
|
|
24
|
+
if (value === '') {
|
|
25
|
+
throw new Error(`skill source is missing a value: ${src}`);
|
|
26
|
+
}
|
|
27
|
+
switch (kind) {
|
|
28
|
+
case 'workspace': return { workspace: value };
|
|
29
|
+
case 'npm': return { npm: value };
|
|
30
|
+
case 'url': return { url: value };
|
|
31
|
+
default: return { path: value };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** True when the token carries a recognized `kind:` prefix or is `vendored`. */
|
|
35
|
+
function isSourceSpec(ref) {
|
|
36
|
+
if (ref === 'vendored')
|
|
37
|
+
return true;
|
|
38
|
+
const colon = ref.indexOf(':');
|
|
39
|
+
return colon > 0 && SOURCE_KINDS.has(ref.slice(0, colon));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Classify a reference token's syntactic shape (no IO):
|
|
43
|
+
* - a `kind:` prefix / `vendored` → `source-spec`
|
|
44
|
+
* - absolute, or contains a path separator, or starts with `.` → `definite-path`
|
|
45
|
+
* (ladder rule 1: "always a path; never name-resolved" — incl. the `./<name>`
|
|
46
|
+
* escape that forces a colliding local dir over a declared skill)
|
|
47
|
+
* - otherwise a bare word → `bare-name` (resolved against config + fs by the caller)
|
|
48
|
+
*/
|
|
49
|
+
export function classifyToken(ref) {
|
|
50
|
+
if (isSourceSpec(ref))
|
|
51
|
+
return { shape: 'source-spec', source: parseSourceSpec(ref) };
|
|
52
|
+
const fwd = toForwardSlash(ref);
|
|
53
|
+
if (isAbsolute(ref) || fwd.includes('/') || fwd.startsWith('.')) {
|
|
54
|
+
return { shape: 'definite-path' };
|
|
55
|
+
}
|
|
56
|
+
return { shape: 'bare-name', token: ref };
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=classify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/skill-resolution/classify.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAElE;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,GAAG,KAAK,UAAU;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAClD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACvD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,kEAAkE,GAAG,EAAE,CACxE,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9C,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAClC,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAClC,OAAO,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC;AACH,CAAC;AAQD,gFAAgF;AAChF,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,GAAG,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,KAAK,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,YAAY,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;IACrF,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { resolveSkillReference } from './resolve-skill-reference.js';
|
|
2
|
+
export { classifyToken, parseSourceSpec } from './classify.js';
|
|
3
|
+
export { getDiscoveredSkillsByPath, resetSkillDiscoveryCache, resolveSkillPackagingConfig, stripValidationAllowForDisplay, } from './packaging-config.js';
|
|
4
|
+
export type { BuildableReference, SkillDistribution, SkillReference } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill-resolution/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { resolveSkillReference } from './resolve-skill-reference.js';
|
|
2
|
+
export { classifyToken, parseSourceSpec } from './classify.js';
|
|
3
|
+
export { getDiscoveredSkillsByPath, resetSkillDiscoveryCache, resolveSkillPackagingConfig, stripValidationAllowForDisplay, } from './packaging-config.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill-resolution/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared per-skill packaging-config resolution.
|
|
3
|
+
*
|
|
4
|
+
* The nearest-ancestor config walk-up that {@link resolveSkillReference},
|
|
5
|
+
* `vat audit`, and `vat skill review` all use to resolve a single SKILL.md to
|
|
6
|
+
* its governing `skills.config` block. Lives here (not in audit) because three
|
|
7
|
+
* commands depend on it; future CLI work extends THIS, not a fourth copy.
|
|
8
|
+
*
|
|
9
|
+
* Does NOT compose configs across VAT projects — only the nearest-ancestor
|
|
10
|
+
* `vibe-agent-toolkit.config.yaml` contributes.
|
|
11
|
+
*/
|
|
12
|
+
import type { SkillPackagingConfig } from '@vibe-agent-toolkit/agent-skills';
|
|
13
|
+
import { type loadConfig } from '../utils/config-loader.js';
|
|
14
|
+
/** Clear the per-root discovery cache (call when fixtures mutate between in-process runs). */
|
|
15
|
+
export declare function resetSkillDiscoveryCache(): void;
|
|
16
|
+
export declare function getDiscoveredSkillsByPath(skillsSection: NonNullable<ReturnType<typeof loadConfig>>['skills'], configRoot: string): Promise<Map<string, string>>;
|
|
17
|
+
/**
|
|
18
|
+
* Resolve the merged packaging config for one SKILL.md by walking UP to its
|
|
19
|
+
* nearest-ancestor config and matching the skill by absolute path. Returns the
|
|
20
|
+
* FULL merge (`skills.defaults` + `skills.config[name]`, keeping
|
|
21
|
+
* `validation.allow`). `null` when there is no governing config, no `skills`
|
|
22
|
+
* section, or the skill is not declared (wild mode).
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveSkillPackagingConfig(skillPath: string): Promise<SkillPackagingConfig | null>;
|
|
25
|
+
/**
|
|
26
|
+
* Audit's display variant: keep `validation.severity`, drop `validation.allow`
|
|
27
|
+
* (audit shows every finding, including ones an `allow` entry would suppress).
|
|
28
|
+
* Drops `validation` entirely when no severity is present.
|
|
29
|
+
*/
|
|
30
|
+
export declare function stripValidationAllowForDisplay(config: SkillPackagingConfig): SkillPackagingConfig;
|
|
31
|
+
//# sourceMappingURL=packaging-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packaging-config.d.ts","sourceRoot":"","sources":["../../src/skill-resolution/packaging-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAI7E,OAAO,EAAE,KAAK,UAAU,EAAoB,MAAM,2BAA2B,CAAC;AAM9E,8FAA8F;AAC9F,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EACnE,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAY9B;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAsBtC;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB,CAYjG"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { findProjectRoot, safePath } from '@vibe-agent-toolkit/utils';
|
|
2
|
+
import { discoverSkillsFromConfig } from '../commands/skills/skill-discovery.js';
|
|
3
|
+
import { loadConfigCached } from '../utils/config-loader.js';
|
|
4
|
+
import { mergeSkillPackagingConfig } from '../utils/skill-packaging-config.js';
|
|
5
|
+
/** configRoot → (abs SKILL.md path → declared skill name). One expansion per root. */
|
|
6
|
+
const skillDiscoveryCache = new Map();
|
|
7
|
+
/** Clear the per-root discovery cache (call when fixtures mutate between in-process runs). */
|
|
8
|
+
export function resetSkillDiscoveryCache() {
|
|
9
|
+
skillDiscoveryCache.clear();
|
|
10
|
+
}
|
|
11
|
+
export async function getDiscoveredSkillsByPath(skillsSection, configRoot) {
|
|
12
|
+
const cached = skillDiscoveryCache.get(configRoot);
|
|
13
|
+
if (cached !== undefined)
|
|
14
|
+
return cached;
|
|
15
|
+
const map = new Map();
|
|
16
|
+
if (skillsSection !== undefined) {
|
|
17
|
+
const discovered = await discoverSkillsFromConfig(skillsSection, configRoot);
|
|
18
|
+
for (const entry of discovered) {
|
|
19
|
+
map.set(safePath.resolve(entry.sourcePath), entry.name);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
skillDiscoveryCache.set(configRoot, map);
|
|
23
|
+
return map;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the merged packaging config for one SKILL.md by walking UP to its
|
|
27
|
+
* nearest-ancestor config and matching the skill by absolute path. Returns the
|
|
28
|
+
* FULL merge (`skills.defaults` + `skills.config[name]`, keeping
|
|
29
|
+
* `validation.allow`). `null` when there is no governing config, no `skills`
|
|
30
|
+
* section, or the skill is not declared (wild mode).
|
|
31
|
+
*/
|
|
32
|
+
export async function resolveSkillPackagingConfig(skillPath) {
|
|
33
|
+
const absSkillPath = safePath.resolve(skillPath);
|
|
34
|
+
const skillDir = safePath.resolve(safePath.join(absSkillPath, '..'));
|
|
35
|
+
const projectRoot = findProjectRoot(skillDir);
|
|
36
|
+
if (projectRoot === null)
|
|
37
|
+
return null;
|
|
38
|
+
const config = loadConfigCached(projectRoot);
|
|
39
|
+
if (config?.skills === undefined)
|
|
40
|
+
return null;
|
|
41
|
+
let matchedName;
|
|
42
|
+
try {
|
|
43
|
+
const byPath = await getDiscoveredSkillsByPath(config.skills, projectRoot);
|
|
44
|
+
matchedName = byPath.get(absSkillPath);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
if (matchedName === undefined)
|
|
50
|
+
return null;
|
|
51
|
+
const { defaults, config: perSkillConfig } = config.skills;
|
|
52
|
+
return mergeSkillPackagingConfig(defaults, perSkillConfig?.[matchedName]);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Audit's display variant: keep `validation.severity`, drop `validation.allow`
|
|
56
|
+
* (audit shows every finding, including ones an `allow` entry would suppress).
|
|
57
|
+
* Drops `validation` entirely when no severity is present.
|
|
58
|
+
*/
|
|
59
|
+
export function stripValidationAllowForDisplay(config) {
|
|
60
|
+
const out = {};
|
|
61
|
+
for (const [key, value] of Object.entries(config)) {
|
|
62
|
+
if (value !== undefined && key !== 'validation') {
|
|
63
|
+
out[key] = value;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const validation = config.validation;
|
|
67
|
+
if (validation?.severity !== undefined) {
|
|
68
|
+
out['validation'] = { severity: validation.severity };
|
|
69
|
+
}
|
|
70
|
+
return out;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=packaging-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packaging-config.js","sourceRoot":"","sources":["../../src/skill-resolution/packaging-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-skill-reference.d.ts","sourceRoot":"","sources":["../../src/skill-resolution/resolve-skill-reference.ts"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAyC,cAAc,EAAE,MAAM,YAAY,CAAC;AAOxF,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA+C7F"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* resolveSkillReference — the project-aware front door for resolving a skill
|
|
3
|
+
* reference (the `vat skill test run` subject; also the shared classifier `audit`
|
|
4
|
+
* and `skill review` build on for per-skill config).
|
|
5
|
+
*
|
|
6
|
+
* THIS IS THE CANONICAL ENTRY POINT for "take a skill by name or path." Route
|
|
7
|
+
* every command that accepts a skill reference through it (mirrors the
|
|
8
|
+
* `resolveAssetReference` rule for config file references). Do NOT write a
|
|
9
|
+
* parallel path-only resolver — that is the bug this module exists to prevent.
|
|
10
|
+
*
|
|
11
|
+
* Accepted grammar (subject and `--with` share it):
|
|
12
|
+
* <bare-name> | <path> | workspace:<pkg> | npm:<spec> | url:<u> | path:<dir> | vendored
|
|
13
|
+
*
|
|
14
|
+
* Two-consumer contract:
|
|
15
|
+
* - `vat skill test` calls this directly and BUILDS `buildable` results, then
|
|
16
|
+
* stages + tests the dist.
|
|
17
|
+
* - `audit` / `skill review` use {@link resolveSkillPackagingConfig} (re-exported
|
|
18
|
+
* here) to classify + validate SOURCE; they never materialize a build.
|
|
19
|
+
* Callers should support the FULL surface, not narrow to paths.
|
|
20
|
+
*
|
|
21
|
+
* Disambiguation ladder:
|
|
22
|
+
* 1. kind-prefixed / `vendored` → { kind: 'source', source }
|
|
23
|
+
* 2. absolute / has `/` / starts `.` → { kind: 'source', source: { path } } (as-is; the `./<name>` escape lands here)
|
|
24
|
+
* 3. bare name, no governing config → existing dir ? source : not-found
|
|
25
|
+
* 4. bare name matching a declared skill → buildable (preferred even on a dir collision; note the `./` escape)
|
|
26
|
+
* 5. bare name, undeclared, existing dir → { kind: 'source', source: { path } }
|
|
27
|
+
* 6. bare name, undeclared, not a dir → name-miss
|
|
28
|
+
*
|
|
29
|
+
* PURE LOOKUP/CLASSIFICATION — no side effects, no build. Build is the caller's job.
|
|
30
|
+
*/
|
|
31
|
+
import { existsSync } from 'node:fs';
|
|
32
|
+
import { findDistributedSkillLocationBySource, skillNameToFsPath, } from '@vibe-agent-toolkit/agent-skills';
|
|
33
|
+
import { findProjectRoot, safePath } from '@vibe-agent-toolkit/utils';
|
|
34
|
+
import { loadConfigCached } from '../utils/config-loader.js';
|
|
35
|
+
import { classifyToken } from './classify.js';
|
|
36
|
+
import { getDiscoveredSkillsByPath, resolveSkillPackagingConfig } from './packaging-config.js';
|
|
37
|
+
function existingDir(p) {
|
|
38
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- user-supplied reference
|
|
39
|
+
return existsSync(p);
|
|
40
|
+
}
|
|
41
|
+
export async function resolveSkillReference(ref, cwd) {
|
|
42
|
+
const shape = classifyToken(ref);
|
|
43
|
+
if (shape.shape === 'source-spec')
|
|
44
|
+
return { kind: 'source', source: shape.source };
|
|
45
|
+
if (shape.shape === 'definite-path')
|
|
46
|
+
return { kind: 'source', source: { path: ref } };
|
|
47
|
+
// bare-name: needs config + fs.
|
|
48
|
+
const configRoot = findProjectRoot(cwd);
|
|
49
|
+
const dirCandidate = safePath.resolve(cwd, ref);
|
|
50
|
+
if (configRoot === null) {
|
|
51
|
+
return existingDir(dirCandidate)
|
|
52
|
+
? { kind: 'source', source: { path: ref } }
|
|
53
|
+
: { kind: 'not-found', ref };
|
|
54
|
+
}
|
|
55
|
+
const config = loadConfigCached(configRoot);
|
|
56
|
+
if (config?.skills === undefined) {
|
|
57
|
+
// findProjectRoot can anchor on a bare `.git` dir with no governing VAT config
|
|
58
|
+
// (or a config that declares no skills). That is the spec's "wild" rung — there
|
|
59
|
+
// is nothing to name-resolve against, so it is an existing dir or `not-found`,
|
|
60
|
+
// never a name-miss.
|
|
61
|
+
return existingDir(dirCandidate)
|
|
62
|
+
? { kind: 'source', source: { path: ref } }
|
|
63
|
+
: { kind: 'not-found', ref };
|
|
64
|
+
}
|
|
65
|
+
const byName = new Map(); // name → abs SKILL.md path
|
|
66
|
+
const byPath = await getDiscoveredSkillsByPath(config.skills, configRoot);
|
|
67
|
+
for (const [skillMdPath, name] of byPath.entries())
|
|
68
|
+
byName.set(name, skillMdPath);
|
|
69
|
+
const sourcePath = byName.get(ref);
|
|
70
|
+
if (sourcePath !== undefined) {
|
|
71
|
+
if (existingDir(dirCandidate)) {
|
|
72
|
+
process.stderr.write(`note: '${ref}' matched a declared skill; testing its built dist. Use './${ref}' to test the local directory as-is.\n`);
|
|
73
|
+
}
|
|
74
|
+
return buildBuildable(ref, sourcePath, configRoot, config);
|
|
75
|
+
}
|
|
76
|
+
if (existingDir(dirCandidate))
|
|
77
|
+
return { kind: 'source', source: { path: ref } };
|
|
78
|
+
return {
|
|
79
|
+
kind: 'name-miss',
|
|
80
|
+
name: ref,
|
|
81
|
+
configRoot,
|
|
82
|
+
knownSkills: [...byName.keys()].sort((a, b) => a.localeCompare(b)),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
async function buildBuildable(name, sourcePath, configRoot, config) {
|
|
86
|
+
const packagingConfig = (await resolveSkillPackagingConfig(sourcePath)) ?? {};
|
|
87
|
+
const skillDir = safePath.resolve(safePath.join(safePath.resolve(sourcePath), '..'));
|
|
88
|
+
const location = findDistributedSkillLocationBySource(config, configRoot, skillDir);
|
|
89
|
+
let distribution;
|
|
90
|
+
let expectedDistDir;
|
|
91
|
+
if (location === undefined) {
|
|
92
|
+
distribution = { kind: 'pool' };
|
|
93
|
+
expectedDistDir = safePath.join(configRoot, 'dist', 'skills', skillNameToFsPath(name));
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
distribution = {
|
|
97
|
+
kind: 'plugin-local',
|
|
98
|
+
marketplaceName: location.marketplaceName,
|
|
99
|
+
pluginName: location.pluginName,
|
|
100
|
+
skillDirName: location.skillDirName,
|
|
101
|
+
};
|
|
102
|
+
expectedDistDir = location.skillOutputDir;
|
|
103
|
+
}
|
|
104
|
+
return { kind: 'buildable', name, sourcePath, configRoot, packagingConfig, distribution, expectedDistDir };
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=resolve-skill-reference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-skill-reference.js","sourceRoot":"","sources":["../../src/skill-resolution/resolve-skill-reference.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result of resolving a skill reference (a CLI subject like `my-skill`,
|
|
3
|
+
* `./dist/skills/x`, or `npm:@scope/s@1.2.3`). See {@link resolveSkillReference}
|
|
4
|
+
* for the full grammar and the disambiguation ladder.
|
|
5
|
+
*/
|
|
6
|
+
import type { SkillPackagingConfig, SkillSource } from '@vibe-agent-toolkit/agent-skills';
|
|
7
|
+
/** Where `vat build` places a declared skill's output. */
|
|
8
|
+
export type SkillDistribution =
|
|
9
|
+
/** Pool skill: built by `packageSkill` to `dist/skills/<fsSafeName>`. */
|
|
10
|
+
{
|
|
11
|
+
kind: 'pool';
|
|
12
|
+
}
|
|
13
|
+
/** Plugin-local tree-copy skill: shipped via `vat claude plugin build`. */
|
|
14
|
+
| {
|
|
15
|
+
kind: 'plugin-local';
|
|
16
|
+
marketplaceName: string;
|
|
17
|
+
pluginName: string;
|
|
18
|
+
skillDirName: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* A project-local reference (a bare NAME matching a declared skill) that must be
|
|
22
|
+
* BUILT and then tested from its dist. The new path this plan adds.
|
|
23
|
+
*/
|
|
24
|
+
export interface BuildableReference {
|
|
25
|
+
kind: 'buildable';
|
|
26
|
+
/** The declared skill name. */
|
|
27
|
+
name: string;
|
|
28
|
+
/** Absolute path to the skill's authored SKILL.md (the build input). */
|
|
29
|
+
sourcePath: string;
|
|
30
|
+
/** Absolute path to the governing config root (holds vibe-agent-toolkit.config.yaml). */
|
|
31
|
+
configRoot: string;
|
|
32
|
+
/** Merged packaging config (defaults + per-skill), used to drive the build. */
|
|
33
|
+
packagingConfig: SkillPackagingConfig;
|
|
34
|
+
/** How/where this skill ships. */
|
|
35
|
+
distribution: SkillDistribution;
|
|
36
|
+
/** Absolute dir where the build places the skill (what gets staged + tested). */
|
|
37
|
+
expectedDistDir: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The full result union of {@link resolveSkillReference}.
|
|
41
|
+
*
|
|
42
|
+
* - `buildable` → build (real entry points), then test the dist.
|
|
43
|
+
* - `source` → test the tree as-is (already-built dist, external, or undeclared).
|
|
44
|
+
* - `name-miss` → a bare name in a project that declares no such skill (error).
|
|
45
|
+
* - `not-found` → not a path and no governing config to resolve a name (error).
|
|
46
|
+
*/
|
|
47
|
+
export type SkillReference = BuildableReference | {
|
|
48
|
+
kind: 'source';
|
|
49
|
+
source: SkillSource;
|
|
50
|
+
} | {
|
|
51
|
+
kind: 'name-miss';
|
|
52
|
+
name: string;
|
|
53
|
+
configRoot: string;
|
|
54
|
+
knownSkills: string[];
|
|
55
|
+
} | {
|
|
56
|
+
kind: 'not-found';
|
|
57
|
+
ref: string;
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skill-resolution/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAE1F,0DAA0D;AAC1D,MAAM,MAAM,iBAAiB;AAC3B,yEAAyE;AACvE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;AAClB,2EAA2E;GACzE;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC;IAClB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,eAAe,EAAE,oBAAoB,CAAC;IACtC,kCAAkC;IAClC,YAAY,EAAE,iBAAiB,CAAC;IAChC,iFAAiF;IACjF,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result of resolving a skill reference (a CLI subject like `my-skill`,
|
|
3
|
+
* `./dist/skills/x`, or `npm:@scope/s@1.2.3`). See {@link resolveSkillReference}
|
|
4
|
+
* for the full grammar and the disambiguation ladder.
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/skill-resolution/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|