@vibe-agent-toolkit/agent-skills 0.1.31 → 0.1.32-rc.2
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 +6 -3
- package/dist/evidence/derive-observations.d.ts +24 -0
- package/dist/evidence/derive-observations.d.ts.map +1 -0
- package/dist/evidence/derive-observations.js +85 -0
- package/dist/evidence/derive-observations.js.map +1 -0
- package/dist/evidence/index.d.ts +4 -0
- package/dist/evidence/index.d.ts.map +1 -0
- package/dist/evidence/index.js +3 -0
- package/dist/evidence/index.js.map +1 -0
- package/dist/evidence/pattern-registry.d.ts +12 -0
- package/dist/evidence/pattern-registry.d.ts.map +1 -0
- package/dist/evidence/pattern-registry.js +169 -0
- package/dist/evidence/pattern-registry.js.map +1 -0
- package/dist/evidence/types.d.ts +50 -0
- package/dist/evidence/types.d.ts.map +1 -0
- package/dist/evidence/types.js +10 -0
- package/dist/evidence/types.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/schemas/plugin-json.d.ts +2 -2
- package/dist/skill-packager.d.ts +3 -0
- package/dist/skill-packager.d.ts.map +1 -1
- package/dist/skill-packager.js +38 -11
- package/dist/skill-packager.js.map +1 -1
- package/dist/validators/code-registry.d.ts +2 -2
- package/dist/validators/code-registry.d.ts.map +1 -1
- package/dist/validators/code-registry.js +6 -3
- package/dist/validators/code-registry.js.map +1 -1
- package/dist/validators/compat-detectors.d.ts +21 -25
- package/dist/validators/compat-detectors.d.ts.map +1 -1
- package/dist/validators/compat-detectors.js +140 -111
- package/dist/validators/compat-detectors.js.map +1 -1
- package/dist/validators/packaging-validator.d.ts +22 -1
- package/dist/validators/packaging-validator.d.ts.map +1 -1
- package/dist/validators/packaging-validator.js +18 -2
- package/dist/validators/packaging-validator.js.map +1 -1
- package/dist/validators/skill-validator.d.ts.map +1 -1
- package/dist/validators/skill-validator.js +20 -8
- package/dist/validators/skill-validator.js.map +1 -1
- package/dist/validators/source-only-codes.d.ts +6 -0
- package/dist/validators/source-only-codes.d.ts.map +1 -0
- package/dist/validators/source-only-codes.js +12 -0
- package/dist/validators/source-only-codes.js.map +1 -0
- package/dist/validators/types.d.ts +5 -7
- package/dist/validators/types.d.ts.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -156,9 +156,12 @@ The validator checks for:
|
|
|
156
156
|
#### Warnings (Non-Blocking)
|
|
157
157
|
|
|
158
158
|
- `SKILL_TOO_LONG` - Skill exceeds 5000 lines
|
|
159
|
-
- `
|
|
160
|
-
- `
|
|
161
|
-
- `
|
|
159
|
+
- `CAPABILITY_LOCAL_SHELL` - References Write, Edit, Bash, or NotebookEdit tools (info; see [validation-codes.md](../../docs/validation-codes.md#capability_local_shell))
|
|
160
|
+
- `CAPABILITY_BROWSER_AUTH` - Requires a browser login flow (MSAL, cloud SSO, OAuth redirect) (info; see [validation-codes.md](../../docs/validation-codes.md#capability_browser_auth))
|
|
161
|
+
- `CAPABILITY_EXTERNAL_CLI` - Invokes an unbundled external CLI (az, aws, gcloud, kubectl, docker, terraform, gh, op) (info; see [validation-codes.md](../../docs/validation-codes.md#capability_external_cli))
|
|
162
|
+
- `COMPAT_TARGET_INCOMPATIBLE` - Declared target runtime lacks a required capability (warning; see [validation-codes.md](../../docs/validation-codes.md#compat_target_incompatible))
|
|
163
|
+
- `COMPAT_TARGET_NEEDS_REVIEW` - Declared target covers the capability but a specific resource is uncertain (warning; see [validation-codes.md](../../docs/validation-codes.md#compat_target_needs_review))
|
|
164
|
+
- `COMPAT_TARGET_UNDECLARED` - Capability observations present but no target declared (info; see [validation-codes.md](../../docs/validation-codes.md#compat_target_undeclared))
|
|
162
165
|
|
|
163
166
|
See [Best Practices Guide](../../docs/guides/agent-skills-best-practices.md) for detailed guidance.
|
|
164
167
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared capability-observation derivation.
|
|
3
|
+
*
|
|
4
|
+
* Rolls `EvidenceRecord`s up into `CAPABILITY_*` observations. Callers
|
|
5
|
+
* supply the local-shell pattern-ID set (which differs per subject — skills
|
|
6
|
+
* check fewer patterns than full plugins) and a subject label for summary
|
|
7
|
+
* wording.
|
|
8
|
+
*/
|
|
9
|
+
import type { EvidenceRecord, Observation } from './types.js';
|
|
10
|
+
/** Subject of derivation — controls observation summary wording. */
|
|
11
|
+
export type DerivationSubject = 'skill' | 'plugin';
|
|
12
|
+
export interface DeriveObservationsOptions {
|
|
13
|
+
/** Pattern IDs that imply CAPABILITY_LOCAL_SHELL for this subject. */
|
|
14
|
+
localShellPatternIds: ReadonlySet<string>;
|
|
15
|
+
/** Subject label used in observation summaries. */
|
|
16
|
+
subject: DerivationSubject;
|
|
17
|
+
}
|
|
18
|
+
/** External-CLI pattern IDs paired with their binary name. */
|
|
19
|
+
export declare const EXTERNAL_CLI_BINARIES: ReadonlyArray<{
|
|
20
|
+
binary: string;
|
|
21
|
+
patternId: string;
|
|
22
|
+
}>;
|
|
23
|
+
export declare function deriveObservationsFromEvidence(evidence: readonly EvidenceRecord[], options: DeriveObservationsOptions): Observation[];
|
|
24
|
+
//# sourceMappingURL=derive-observations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive-observations.d.ts","sourceRoot":"","sources":["../../src/evidence/derive-observations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,oEAAoE;AACpE,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,yBAAyB;IACxC,sEAAsE;IACtE,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,mDAAmD;IACnD,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED,8DAA8D;AAC9D,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAStF,CAAC;AAsBF,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,OAAO,EAAE,yBAAyB,GACjC,WAAW,EAAE,CA8Cf"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared capability-observation derivation.
|
|
3
|
+
*
|
|
4
|
+
* Rolls `EvidenceRecord`s up into `CAPABILITY_*` observations. Callers
|
|
5
|
+
* supply the local-shell pattern-ID set (which differs per subject — skills
|
|
6
|
+
* check fewer patterns than full plugins) and a subject label for summary
|
|
7
|
+
* wording.
|
|
8
|
+
*/
|
|
9
|
+
/** External-CLI pattern IDs paired with their binary name. */
|
|
10
|
+
export const EXTERNAL_CLI_BINARIES = [
|
|
11
|
+
{ binary: 'az', patternId: 'EXTERNAL_CLI_AZ' },
|
|
12
|
+
{ binary: 'aws', patternId: 'EXTERNAL_CLI_AWS' },
|
|
13
|
+
{ binary: 'gcloud', patternId: 'EXTERNAL_CLI_GCLOUD' },
|
|
14
|
+
{ binary: 'kubectl', patternId: 'EXTERNAL_CLI_KUBECTL' },
|
|
15
|
+
{ binary: 'docker', patternId: 'EXTERNAL_CLI_DOCKER' },
|
|
16
|
+
{ binary: 'terraform', patternId: 'EXTERNAL_CLI_TERRAFORM' },
|
|
17
|
+
{ binary: 'gh', patternId: 'EXTERNAL_CLI_GH' },
|
|
18
|
+
{ binary: 'op', patternId: 'EXTERNAL_CLI_OP' },
|
|
19
|
+
];
|
|
20
|
+
const BROWSER_AUTH_PATTERN_IDS = new Set([
|
|
21
|
+
'BROWSER_AUTH_MSAL_PYTHON_IMPORT',
|
|
22
|
+
'BROWSER_AUTH_MSAL_JS_IMPORT',
|
|
23
|
+
'BROWSER_AUTH_AZ_LOGIN',
|
|
24
|
+
'BROWSER_AUTH_GCLOUD_LOGIN',
|
|
25
|
+
'BROWSER_AUTH_AWS_SSO_LOGIN',
|
|
26
|
+
'BROWSER_AUTH_WEBBROWSER_OPEN',
|
|
27
|
+
]);
|
|
28
|
+
function dedupePatternIds(records) {
|
|
29
|
+
const seen = new Set();
|
|
30
|
+
const out = [];
|
|
31
|
+
for (const r of records) {
|
|
32
|
+
if (seen.has(r.patternId))
|
|
33
|
+
continue;
|
|
34
|
+
seen.add(r.patternId);
|
|
35
|
+
out.push(r.patternId);
|
|
36
|
+
}
|
|
37
|
+
return out;
|
|
38
|
+
}
|
|
39
|
+
export function deriveObservationsFromEvidence(evidence, options) {
|
|
40
|
+
const subjectCap = options.subject === 'skill' ? 'Skill' : 'Plugin';
|
|
41
|
+
const out = [];
|
|
42
|
+
const localShell = evidence.filter(e => options.localShellPatternIds.has(e.patternId));
|
|
43
|
+
if (localShell.length > 0) {
|
|
44
|
+
out.push({
|
|
45
|
+
code: 'CAPABILITY_LOCAL_SHELL',
|
|
46
|
+
summary: `${subjectCap} requires a local shell environment.`,
|
|
47
|
+
supportingEvidence: dedupePatternIds(localShell),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
const cliByBinary = new Map();
|
|
51
|
+
for (const e of evidence) {
|
|
52
|
+
const match = EXTERNAL_CLI_BINARIES.find(b => b.patternId === e.patternId);
|
|
53
|
+
if (!match)
|
|
54
|
+
continue;
|
|
55
|
+
const existing = cliByBinary.get(match.binary);
|
|
56
|
+
if (existing) {
|
|
57
|
+
existing.push(e);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
cliByBinary.set(match.binary, [e]);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const sortedBinaries = [...cliByBinary.keys()].sort((a, b) => a.localeCompare(b));
|
|
64
|
+
for (const binary of sortedBinaries) {
|
|
65
|
+
const records = cliByBinary.get(binary);
|
|
66
|
+
if (!records)
|
|
67
|
+
continue;
|
|
68
|
+
out.push({
|
|
69
|
+
code: 'CAPABILITY_EXTERNAL_CLI',
|
|
70
|
+
summary: `${subjectCap} invokes external CLI: ${binary}.`,
|
|
71
|
+
payload: { binary },
|
|
72
|
+
supportingEvidence: dedupePatternIds(records),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
const browserAuth = evidence.filter(e => BROWSER_AUTH_PATTERN_IDS.has(e.patternId));
|
|
76
|
+
if (browserAuth.length > 0) {
|
|
77
|
+
out.push({
|
|
78
|
+
code: 'CAPABILITY_BROWSER_AUTH',
|
|
79
|
+
summary: `${subjectCap} requires an interactive browser authentication flow.`,
|
|
80
|
+
supportingEvidence: dedupePatternIds(browserAuth),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=derive-observations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive-observations.js","sourceRoot":"","sources":["../../src/evidence/derive-observations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type { EvidenceRecord, EvidenceSource, EvidenceConfidence, EvidenceLocation, PatternDefinition, Observation, } from './types.js';
|
|
2
|
+
export { PATTERN_REGISTRY, getPatternDefinition, assertPatternRegistered, } from './pattern-registry.js';
|
|
3
|
+
export { deriveObservationsFromEvidence, EXTERNAL_CLI_BINARIES, type DeriveObservationsOptions, type DerivationSubject, } from './derive-observations.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/evidence/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,GACvB,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/evidence/index.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,GAGtB,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern registry — the authoritative list of things VAT's detectors look for.
|
|
3
|
+
*
|
|
4
|
+
* Every pattern a detector fires references an entry here by stable ID.
|
|
5
|
+
* Naming convention: describe what the pattern matches (the observable
|
|
6
|
+
* phenomenon), not what observation it might support.
|
|
7
|
+
*/
|
|
8
|
+
import type { PatternDefinition } from './types.js';
|
|
9
|
+
export declare const PATTERN_REGISTRY: Record<string, PatternDefinition>;
|
|
10
|
+
export declare function getPatternDefinition(patternId: string): PatternDefinition | undefined;
|
|
11
|
+
export declare function assertPatternRegistered(patternId: string): void;
|
|
12
|
+
//# sourceMappingURL=pattern-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-registry.d.ts","sourceRoot":"","sources":["../../src/evidence/pattern-registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CA8J9D,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAErF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAI/D"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern registry — the authoritative list of things VAT's detectors look for.
|
|
3
|
+
*
|
|
4
|
+
* Every pattern a detector fires references an entry here by stable ID.
|
|
5
|
+
* Naming convention: describe what the pattern matches (the observable
|
|
6
|
+
* phenomenon), not what observation it might support.
|
|
7
|
+
*/
|
|
8
|
+
export const PATTERN_REGISTRY = {
|
|
9
|
+
// Shell-presence patterns
|
|
10
|
+
FENCED_SHELL_BLOCK: {
|
|
11
|
+
patternId: 'FENCED_SHELL_BLOCK',
|
|
12
|
+
source: 'code',
|
|
13
|
+
description: 'Fenced code block with language bash/sh/shell/zsh.',
|
|
14
|
+
confidence: 'high',
|
|
15
|
+
},
|
|
16
|
+
ALLOWED_TOOLS_LOCAL_SHELL: {
|
|
17
|
+
patternId: 'ALLOWED_TOOLS_LOCAL_SHELL',
|
|
18
|
+
source: 'code',
|
|
19
|
+
description: 'Frontmatter allowed-tools list includes Bash/Edit/Write/NotebookEdit.',
|
|
20
|
+
confidence: 'high',
|
|
21
|
+
},
|
|
22
|
+
PROSE_LOCAL_SHELL_TOOL_REFERENCE: {
|
|
23
|
+
patternId: 'PROSE_LOCAL_SHELL_TOOL_REFERENCE',
|
|
24
|
+
source: 'code',
|
|
25
|
+
description: 'Prose mentions "Bash/Edit/Write/NotebookEdit tool" by name.',
|
|
26
|
+
confidence: 'medium',
|
|
27
|
+
},
|
|
28
|
+
// External-CLI patterns
|
|
29
|
+
EXTERNAL_CLI_AZ: {
|
|
30
|
+
patternId: 'EXTERNAL_CLI_AZ',
|
|
31
|
+
source: 'code',
|
|
32
|
+
description: 'az CLI invocation in a shell block.',
|
|
33
|
+
confidence: 'high',
|
|
34
|
+
},
|
|
35
|
+
EXTERNAL_CLI_AWS: {
|
|
36
|
+
patternId: 'EXTERNAL_CLI_AWS',
|
|
37
|
+
source: 'code',
|
|
38
|
+
description: 'aws CLI invocation in a shell block.',
|
|
39
|
+
confidence: 'high',
|
|
40
|
+
},
|
|
41
|
+
EXTERNAL_CLI_GCLOUD: {
|
|
42
|
+
patternId: 'EXTERNAL_CLI_GCLOUD',
|
|
43
|
+
source: 'code',
|
|
44
|
+
description: 'gcloud CLI invocation in a shell block.',
|
|
45
|
+
confidence: 'high',
|
|
46
|
+
},
|
|
47
|
+
EXTERNAL_CLI_KUBECTL: {
|
|
48
|
+
patternId: 'EXTERNAL_CLI_KUBECTL',
|
|
49
|
+
source: 'code',
|
|
50
|
+
description: 'kubectl CLI invocation in a shell block.',
|
|
51
|
+
confidence: 'high',
|
|
52
|
+
},
|
|
53
|
+
EXTERNAL_CLI_DOCKER: {
|
|
54
|
+
patternId: 'EXTERNAL_CLI_DOCKER',
|
|
55
|
+
source: 'code',
|
|
56
|
+
description: 'docker CLI invocation in a shell block.',
|
|
57
|
+
confidence: 'high',
|
|
58
|
+
},
|
|
59
|
+
EXTERNAL_CLI_TERRAFORM: {
|
|
60
|
+
patternId: 'EXTERNAL_CLI_TERRAFORM',
|
|
61
|
+
source: 'code',
|
|
62
|
+
description: 'terraform CLI invocation in a shell block.',
|
|
63
|
+
confidence: 'high',
|
|
64
|
+
},
|
|
65
|
+
EXTERNAL_CLI_GH: {
|
|
66
|
+
patternId: 'EXTERNAL_CLI_GH',
|
|
67
|
+
source: 'code',
|
|
68
|
+
description: 'gh CLI invocation in a shell block.',
|
|
69
|
+
confidence: 'high',
|
|
70
|
+
},
|
|
71
|
+
EXTERNAL_CLI_OP: {
|
|
72
|
+
patternId: 'EXTERNAL_CLI_OP',
|
|
73
|
+
source: 'code',
|
|
74
|
+
description: '1Password CLI (op) invocation in a shell block.',
|
|
75
|
+
confidence: 'high',
|
|
76
|
+
},
|
|
77
|
+
// Browser-auth patterns
|
|
78
|
+
BROWSER_AUTH_AZ_LOGIN: {
|
|
79
|
+
patternId: 'BROWSER_AUTH_AZ_LOGIN',
|
|
80
|
+
source: 'code',
|
|
81
|
+
description: '"az login" invocation in a shell context.',
|
|
82
|
+
confidence: 'high',
|
|
83
|
+
},
|
|
84
|
+
BROWSER_AUTH_GCLOUD_LOGIN: {
|
|
85
|
+
patternId: 'BROWSER_AUTH_GCLOUD_LOGIN',
|
|
86
|
+
source: 'code',
|
|
87
|
+
description: '"gcloud auth login" invocation in a shell context.',
|
|
88
|
+
confidence: 'high',
|
|
89
|
+
},
|
|
90
|
+
BROWSER_AUTH_AWS_SSO_LOGIN: {
|
|
91
|
+
patternId: 'BROWSER_AUTH_AWS_SSO_LOGIN',
|
|
92
|
+
source: 'code',
|
|
93
|
+
description: '"aws sso login" invocation in a shell context.',
|
|
94
|
+
confidence: 'high',
|
|
95
|
+
},
|
|
96
|
+
BROWSER_AUTH_MSAL_PYTHON_IMPORT: {
|
|
97
|
+
patternId: 'BROWSER_AUTH_MSAL_PYTHON_IMPORT',
|
|
98
|
+
source: 'code',
|
|
99
|
+
description: 'Python "from msal" import.',
|
|
100
|
+
confidence: 'medium',
|
|
101
|
+
},
|
|
102
|
+
BROWSER_AUTH_MSAL_JS_IMPORT: {
|
|
103
|
+
patternId: 'BROWSER_AUTH_MSAL_JS_IMPORT',
|
|
104
|
+
source: 'code',
|
|
105
|
+
description: '@azure/msal-* JS import.',
|
|
106
|
+
confidence: 'medium',
|
|
107
|
+
},
|
|
108
|
+
BROWSER_AUTH_WEBBROWSER_OPEN: {
|
|
109
|
+
patternId: 'BROWSER_AUTH_WEBBROWSER_OPEN',
|
|
110
|
+
source: 'code',
|
|
111
|
+
description: 'Python webbrowser.open(...) call.',
|
|
112
|
+
confidence: 'medium',
|
|
113
|
+
},
|
|
114
|
+
// Hook patterns
|
|
115
|
+
HOOK_COMMAND_INVOKES_BINARY: {
|
|
116
|
+
patternId: 'HOOK_COMMAND_INVOKES_BINARY',
|
|
117
|
+
source: 'code',
|
|
118
|
+
description: 'A hook handler executes a shell command.',
|
|
119
|
+
confidence: 'high',
|
|
120
|
+
},
|
|
121
|
+
// MCP server patterns
|
|
122
|
+
MCP_SERVER_COMMAND: {
|
|
123
|
+
patternId: 'MCP_SERVER_COMMAND',
|
|
124
|
+
source: 'code',
|
|
125
|
+
description: '.mcp.json declares a "command" for a stdio MCP server.',
|
|
126
|
+
confidence: 'high',
|
|
127
|
+
},
|
|
128
|
+
MCP_SERVER_URL: {
|
|
129
|
+
patternId: 'MCP_SERVER_URL',
|
|
130
|
+
source: 'code',
|
|
131
|
+
description: '.mcp.json declares a "url" for an HTTP MCP server.',
|
|
132
|
+
confidence: 'high',
|
|
133
|
+
},
|
|
134
|
+
// Script-file patterns
|
|
135
|
+
SCRIPT_FILE_PYTHON: {
|
|
136
|
+
patternId: 'SCRIPT_FILE_PYTHON',
|
|
137
|
+
source: 'code',
|
|
138
|
+
description: 'A .py script file is present in the plugin.',
|
|
139
|
+
confidence: 'high',
|
|
140
|
+
},
|
|
141
|
+
SCRIPT_FILE_SHELL: {
|
|
142
|
+
patternId: 'SCRIPT_FILE_SHELL',
|
|
143
|
+
source: 'code',
|
|
144
|
+
description: 'A .sh/.bash script file is present in the plugin.',
|
|
145
|
+
confidence: 'high',
|
|
146
|
+
},
|
|
147
|
+
SCRIPT_FILE_NODE: {
|
|
148
|
+
patternId: 'SCRIPT_FILE_NODE',
|
|
149
|
+
source: 'code',
|
|
150
|
+
description: 'A .mjs/.cjs/.js script file is present in the plugin.',
|
|
151
|
+
confidence: 'high',
|
|
152
|
+
},
|
|
153
|
+
// Python import pattern
|
|
154
|
+
PYTHON_IMPORT_THIRD_PARTY: {
|
|
155
|
+
patternId: 'PYTHON_IMPORT_THIRD_PARTY',
|
|
156
|
+
source: 'code',
|
|
157
|
+
description: 'Third-party (non-stdlib) Python import statement.',
|
|
158
|
+
confidence: 'high',
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
export function getPatternDefinition(patternId) {
|
|
162
|
+
return PATTERN_REGISTRY[patternId];
|
|
163
|
+
}
|
|
164
|
+
export function assertPatternRegistered(patternId) {
|
|
165
|
+
if (!(patternId in PATTERN_REGISTRY)) {
|
|
166
|
+
throw new Error(`Unregistered pattern ID: ${patternId}. Add it to PATTERN_REGISTRY.`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=pattern-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-registry.js","sourceRoot":"","sources":["../../src/evidence/pattern-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evidence substrate types.
|
|
3
|
+
*
|
|
4
|
+
* Evidence is a neutral, pattern-level observation produced by a parser:
|
|
5
|
+
* "pattern X fired at location Y with match text Z." Evidence has no opinion
|
|
6
|
+
* about whether the match is good or bad — that is the job of the derivation
|
|
7
|
+
* layer, which rolls evidence into domain-specific observations.
|
|
8
|
+
*/
|
|
9
|
+
/** Where the evidence came from. */
|
|
10
|
+
export type EvidenceSource = 'code' | 'ai';
|
|
11
|
+
/** Inherent false-positive risk of the pattern. */
|
|
12
|
+
export type EvidenceConfidence = 'high' | 'medium' | 'low';
|
|
13
|
+
export interface EvidenceLocation {
|
|
14
|
+
file: string;
|
|
15
|
+
line?: number;
|
|
16
|
+
col?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface EvidenceRecord {
|
|
19
|
+
source: EvidenceSource;
|
|
20
|
+
/** Stable ID registered in PATTERN_REGISTRY. */
|
|
21
|
+
patternId: string;
|
|
22
|
+
location: EvidenceLocation;
|
|
23
|
+
/** What the detector saw — short snippet, truncated for display. */
|
|
24
|
+
matchText: string;
|
|
25
|
+
confidence: EvidenceConfidence;
|
|
26
|
+
/** AI-source: short "why"; code-source: rarely used. */
|
|
27
|
+
rationale?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface PatternDefinition {
|
|
30
|
+
patternId: string;
|
|
31
|
+
source: EvidenceSource;
|
|
32
|
+
/** Human-readable description of what the pattern detects. */
|
|
33
|
+
description: string;
|
|
34
|
+
confidence: EvidenceConfidence;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* An observation is a derived capability-level claim about a skill or plugin,
|
|
38
|
+
* referencing the evidence records that support it.
|
|
39
|
+
*/
|
|
40
|
+
export interface Observation {
|
|
41
|
+
/** Validation code (e.g. 'CAPABILITY_LOCAL_SHELL'). */
|
|
42
|
+
code: string;
|
|
43
|
+
/** Human-readable claim. */
|
|
44
|
+
summary: string;
|
|
45
|
+
/** Payload specific to the observation code. */
|
|
46
|
+
payload?: Record<string, unknown>;
|
|
47
|
+
/** patternId[] of evidence records that support this observation. */
|
|
48
|
+
supportingEvidence: string[];
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/evidence/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oCAAoC;AACpC,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,CAAC;AAE3C,mDAAmD;AACnD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evidence substrate types.
|
|
3
|
+
*
|
|
4
|
+
* Evidence is a neutral, pattern-level observation produced by a parser:
|
|
5
|
+
* "pattern X fired at location Y with match text Z." Evidence has no opinion
|
|
6
|
+
* about whether the match is good or bad — that is the job of the derivation
|
|
7
|
+
* layer, which rolls evidence into domain-specific observations.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/evidence/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,7 +12,8 @@ export { ClaudePluginJsonSchema, ClaudePluginSchema, type ClaudePlugin } from '.
|
|
|
12
12
|
export { MarketplaceManifestJsonSchema, MarketplaceManifestSchema, type MarketplaceManifest } from './schemas/marketplace-manifest.js';
|
|
13
13
|
export { PluginJsonSchema, type PluginJson } from './schemas/plugin-json.js';
|
|
14
14
|
export { parseFrontmatter, type FrontmatterResult, } from './parsers/frontmatter-parser.js';
|
|
15
|
-
export { runCompatDetectors } from './validators/compat-detectors.js';
|
|
15
|
+
export { observationToIssue, runCompatDetectors, type DetectorOutput, } from './validators/compat-detectors.js';
|
|
16
|
+
export { CODE_REGISTRY, type CodeRegistryEntry } from './validators/code-registry.js';
|
|
16
17
|
export { validateMarketplace } from './validators/marketplace-validator.js';
|
|
17
18
|
export { validatePlugin } from './validators/plugin-validator.js';
|
|
18
19
|
export { validateSkill } from './validators/skill-validator.js';
|
|
@@ -23,4 +24,7 @@ export { type ValidationConfig } from './validators/validation-framework.js';
|
|
|
23
24
|
export { createIssue, NAVIGATION_FILE_PATTERNS, VALIDATION_RULES, VALIDATION_THRESHOLDS, type RuleCategory, type ValidationRule, type ValidationRuleCode, } from './validators/validation-rules.js';
|
|
24
25
|
export type { ValidationResult, ValidationIssue, ValidateOptions, ResourceFormat, } from './validators/types.js';
|
|
25
26
|
export { importSkillToAgent, type ImportOptions, type ImportResult, } from './import.js';
|
|
27
|
+
export type { EvidenceRecord, EvidenceSource, EvidenceConfidence, EvidenceLocation, PatternDefinition, Observation, } from './evidence/index.js';
|
|
28
|
+
export { PATTERN_REGISTRY, getPatternDefinition, assertPatternRegistered, deriveObservationsFromEvidence, } from './evidence/index.js';
|
|
29
|
+
export type { DeriveObservationsOptions, DerivationSubject } from './evidence/index.js';
|
|
26
30
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAEpF,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,GAC9B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE3G,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAEvI,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EACL,gBAAgB,EAChB,KAAK,iBAAiB,GACvB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAEpF,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,GAC9B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE3G,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAEvI,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EACL,gBAAgB,EAChB,KAAK,iBAAiB,GACvB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,cAAc,GACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EACL,yBAAyB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,GAC1B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACxB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,cAAc,GACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,7 +12,8 @@ export { ClaudePluginJsonSchema, ClaudePluginSchema } from './schemas/claude-plu
|
|
|
12
12
|
export { MarketplaceManifestJsonSchema, MarketplaceManifestSchema } from './schemas/marketplace-manifest.js';
|
|
13
13
|
export { PluginJsonSchema } from './schemas/plugin-json.js';
|
|
14
14
|
export { parseFrontmatter, } from './parsers/frontmatter-parser.js';
|
|
15
|
-
export { runCompatDetectors } from './validators/compat-detectors.js';
|
|
15
|
+
export { observationToIssue, runCompatDetectors, } from './validators/compat-detectors.js';
|
|
16
|
+
export { CODE_REGISTRY } from './validators/code-registry.js';
|
|
16
17
|
export { validateMarketplace } from './validators/marketplace-validator.js';
|
|
17
18
|
export { validatePlugin } from './validators/plugin-validator.js';
|
|
18
19
|
export { validateSkill } from './validators/skill-validator.js';
|
|
@@ -21,4 +22,5 @@ export { detectResourceFormat } from './validators/format-detection.js';
|
|
|
21
22
|
export { validateSkillForPackaging, } from './validators/packaging-validator.js';
|
|
22
23
|
export { createIssue, NAVIGATION_FILE_PATTERNS, VALIDATION_RULES, VALIDATION_THRESHOLDS, } from './validators/validation-rules.js';
|
|
23
24
|
export { importSkillToAgent, } from './import.js';
|
|
25
|
+
export { PATTERN_REGISTRY, getPatternDefinition, assertPatternRegistered, deriveObservationsFromEvidence, } from './evidence/index.js';
|
|
24
26
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAuC,MAAM,cAAc,CAAC;AAEpF,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,GAMlB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,GAMd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,wBAAwB,GAEzB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,GAG/B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAqB,MAAM,4BAA4B,CAAC;AAE3G,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAA4B,MAAM,mCAAmC,CAAC;AAEvI,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EACL,gBAAgB,GAEjB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAuC,MAAM,cAAc,CAAC;AAEpF,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,GAMlB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,GAMd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,wBAAwB,GAEzB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,GAG/B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAqB,MAAM,4BAA4B,CAAC;AAE3G,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAA4B,MAAM,mCAAmC,CAAC;AAEvI,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EACL,gBAAgB,GAEjB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,aAAa,EAA0B,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EACL,yBAAyB,GAI1B,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,GAItB,MAAM,kCAAkC,CAAC;AAQ1C,OAAO,EACL,kBAAkB,GAGnB,MAAM,aAAa,CAAC;AAWrB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC"}
|
|
@@ -21,16 +21,16 @@ export declare const PluginJsonSchema: z.ZodObject<{
|
|
|
21
21
|
}>;
|
|
22
22
|
version: z.ZodOptional<z.ZodString>;
|
|
23
23
|
}, "strict", z.ZodTypeAny, {
|
|
24
|
-
name: string;
|
|
25
24
|
description: string;
|
|
25
|
+
name: string;
|
|
26
26
|
author: {
|
|
27
27
|
name: string;
|
|
28
28
|
email?: string | undefined;
|
|
29
29
|
};
|
|
30
30
|
version?: string | undefined;
|
|
31
31
|
}, {
|
|
32
|
-
name: string;
|
|
33
32
|
description: string;
|
|
33
|
+
name: string;
|
|
34
34
|
author: {
|
|
35
35
|
name: string;
|
|
36
36
|
email?: string | undefined;
|
package/dist/skill-packager.d.ts
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { ResourceRegistry } from '@vibe-agent-toolkit/resources';
|
|
18
18
|
import type { SkillFileEntry } from './files-config.js';
|
|
19
|
+
import { type PackagingValidationResult } from './validators/packaging-validator.js';
|
|
19
20
|
import type { ValidationIssue } from './validators/types.js';
|
|
20
21
|
import { type ValidationConfig } from './validators/validation-framework.js';
|
|
21
22
|
/**
|
|
@@ -159,6 +160,8 @@ export interface PackageSkillResult {
|
|
|
159
160
|
* Empty (or omitted) means all post-build checks passed.
|
|
160
161
|
*/
|
|
161
162
|
postBuildIssues?: ValidationIssue[] | undefined;
|
|
163
|
+
/** Full validation result against the built output. */
|
|
164
|
+
postBuildValidation?: PackagingValidationResult | undefined;
|
|
162
165
|
/** True when any emitted issue has resolved severity 'error'. */
|
|
163
166
|
hasErrors: boolean;
|
|
164
167
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-packager.d.ts","sourceRoot":"","sources":["../src/skill-packager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,EACL,gBAAgB,EAMjB,MAAM,+BAA+B,CAAC;AAIvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"skill-packager.d.ts","sourceRoot":"","sources":["../src/skill-packager.ts"],"names":[],"mappings":"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"}
|
package/dist/skill-packager.js
CHANGED
|
@@ -21,6 +21,7 @@ import { ResourceRegistry, transformContent, parseMarkdown, } from '@vibe-agent-
|
|
|
21
21
|
import { findProjectRoot, toForwardSlash, safePath } from '@vibe-agent-toolkit/utils';
|
|
22
22
|
import { getTargetSubdir } from './content-type-routing.js';
|
|
23
23
|
import { checkBrokenPackagedLinks, checkUnreferencedFiles } from './post-build-checks.js';
|
|
24
|
+
import { validateSkillForPackaging } from './validators/packaging-validator.js';
|
|
24
25
|
import { runValidationFramework } from './validators/validation-framework.js';
|
|
25
26
|
import { walkerExclusionsToIssues } from './validators/walker-to-issues.js';
|
|
26
27
|
import { walkLinkGraph } from './walk-link-graph.js';
|
|
@@ -220,27 +221,53 @@ export async function packageSkill(skillPath, options = {}) {
|
|
|
220
221
|
];
|
|
221
222
|
const rawLinkIssues = walkerExclusionsToIssues(excludedReferences, projectRoot);
|
|
222
223
|
const framework = runValidationFramework([...rawLinkIssues, ...rawPostBuildIssues], options.validation ?? {});
|
|
224
|
+
// 13c. Run full validation suite on built output
|
|
225
|
+
const postBuildValidation = await runPostBuildValidation(outputPath, options.validation);
|
|
223
226
|
// 14. Generate distribution artifacts
|
|
224
227
|
const artifacts = await generatePackageArtifacts(outputPath, skillMetadata, formats, target);
|
|
225
228
|
// Get relative paths for result
|
|
226
229
|
const relativeLinkedFiles = bundledFiles.map(f => safePath.relative(effectiveBasePath, f));
|
|
227
|
-
// Build result
|
|
228
|
-
|
|
230
|
+
// Build result
|
|
231
|
+
return assemblePackageResult({
|
|
229
232
|
outputPath,
|
|
230
|
-
|
|
233
|
+
skillMetadata,
|
|
234
|
+
relativeLinkedFiles,
|
|
235
|
+
artifacts,
|
|
236
|
+
postBuildValidation,
|
|
237
|
+
framework,
|
|
238
|
+
excludedReferences,
|
|
239
|
+
skillRoot,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Run full validation suite against built output (context = 'built').
|
|
244
|
+
* Source-only codes are automatically filtered out by validateSkillForPackaging.
|
|
245
|
+
*/
|
|
246
|
+
async function runPostBuildValidation(outputPath, validation) {
|
|
247
|
+
const builtSkillPath = safePath.join(outputPath, 'SKILL.md');
|
|
248
|
+
return validateSkillForPackaging(builtSkillPath, validation ? { validation } : undefined, 'built');
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Assemble the final PackageSkillResult from intermediate data.
|
|
252
|
+
* Extracted to keep packageSkill() within the cognitive-complexity budget.
|
|
253
|
+
*/
|
|
254
|
+
function assemblePackageResult(input) {
|
|
255
|
+
const result = {
|
|
256
|
+
outputPath: input.outputPath,
|
|
257
|
+
skill: input.skillMetadata,
|
|
231
258
|
files: {
|
|
232
259
|
root: 'SKILL.md',
|
|
233
|
-
dependencies: relativeLinkedFiles,
|
|
260
|
+
dependencies: input.relativeLinkedFiles,
|
|
234
261
|
},
|
|
235
|
-
artifacts,
|
|
236
|
-
|
|
262
|
+
artifacts: input.artifacts,
|
|
263
|
+
postBuildValidation: input.postBuildValidation,
|
|
264
|
+
hasErrors: input.framework.hasErrors || input.postBuildValidation.activeErrors.length > 0,
|
|
237
265
|
};
|
|
238
|
-
if (framework.emitted.length > 0) {
|
|
239
|
-
result.postBuildIssues = framework.emitted;
|
|
266
|
+
if (input.framework.emitted.length > 0) {
|
|
267
|
+
result.postBuildIssues = input.framework.emitted;
|
|
240
268
|
}
|
|
241
|
-
if (excludedReferences.length > 0) {
|
|
242
|
-
|
|
243
|
-
const uniqueExcludedPaths = [...new Set(excludedReferences.map(r => safePath.relative(skillRoot, r.path)))];
|
|
269
|
+
if (input.excludedReferences.length > 0) {
|
|
270
|
+
const uniqueExcludedPaths = [...new Set(input.excludedReferences.map(r => safePath.relative(input.skillRoot, r.path)))];
|
|
244
271
|
result.excludedReferences = uniqueExcludedPaths;
|
|
245
272
|
}
|
|
246
273
|
return result;
|