@vibe-agent-toolkit/agent-skills 0.1.31 → 0.1.32-rc.1

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.
Files changed (48) hide show
  1. package/README.md +6 -3
  2. package/dist/evidence/derive-observations.d.ts +24 -0
  3. package/dist/evidence/derive-observations.d.ts.map +1 -0
  4. package/dist/evidence/derive-observations.js +85 -0
  5. package/dist/evidence/derive-observations.js.map +1 -0
  6. package/dist/evidence/index.d.ts +4 -0
  7. package/dist/evidence/index.d.ts.map +1 -0
  8. package/dist/evidence/index.js +3 -0
  9. package/dist/evidence/index.js.map +1 -0
  10. package/dist/evidence/pattern-registry.d.ts +12 -0
  11. package/dist/evidence/pattern-registry.d.ts.map +1 -0
  12. package/dist/evidence/pattern-registry.js +176 -0
  13. package/dist/evidence/pattern-registry.js.map +1 -0
  14. package/dist/evidence/types.d.ts +50 -0
  15. package/dist/evidence/types.d.ts.map +1 -0
  16. package/dist/evidence/types.js +10 -0
  17. package/dist/evidence/types.js.map +1 -0
  18. package/dist/index.d.ts +5 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +3 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/schemas/plugin-json.d.ts +2 -2
  23. package/dist/skill-packager.d.ts +3 -0
  24. package/dist/skill-packager.d.ts.map +1 -1
  25. package/dist/skill-packager.js +38 -11
  26. package/dist/skill-packager.js.map +1 -1
  27. package/dist/validators/code-registry.d.ts +2 -2
  28. package/dist/validators/code-registry.d.ts.map +1 -1
  29. package/dist/validators/code-registry.js +6 -3
  30. package/dist/validators/code-registry.js.map +1 -1
  31. package/dist/validators/compat-detectors.d.ts +21 -25
  32. package/dist/validators/compat-detectors.d.ts.map +1 -1
  33. package/dist/validators/compat-detectors.js +140 -111
  34. package/dist/validators/compat-detectors.js.map +1 -1
  35. package/dist/validators/packaging-validator.d.ts +22 -1
  36. package/dist/validators/packaging-validator.d.ts.map +1 -1
  37. package/dist/validators/packaging-validator.js +18 -2
  38. package/dist/validators/packaging-validator.js.map +1 -1
  39. package/dist/validators/skill-validator.d.ts.map +1 -1
  40. package/dist/validators/skill-validator.js +20 -8
  41. package/dist/validators/skill-validator.js.map +1 -1
  42. package/dist/validators/source-only-codes.d.ts +6 -0
  43. package/dist/validators/source-only-codes.d.ts.map +1 -0
  44. package/dist/validators/source-only-codes.js +12 -0
  45. package/dist/validators/source-only-codes.js.map +1 -0
  46. package/dist/validators/types.d.ts +5 -7
  47. package/dist/validators/types.d.ts.map +1 -1
  48. 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
- - `COMPAT_REQUIRES_LOCAL_SHELL` - References Write, Edit, Bash, or NotebookEdit tools (see [validation-codes.md](../../docs/validation-codes.md#compat_requires_local_shell))
160
- - `COMPAT_REQUIRES_BROWSER_AUTH` - Requires a browser login flow (MSAL, cloud SSO, OAuth redirect) (see [validation-codes.md](../../docs/validation-codes.md#compat_requires_browser_auth))
161
- - `COMPAT_REQUIRES_EXTERNAL_CLI` - Invokes an unbundled external CLI (az, aws, gcloud, kubectl, docker, terraform, gh, op) (see [validation-codes.md](../../docs/validation-codes.md#compat_requires_external_cli))
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,3 @@
1
+ export { PATTERN_REGISTRY, getPatternDefinition, assertPatternRegistered, } from './pattern-registry.js';
2
+ export { deriveObservationsFromEvidence, EXTERNAL_CLI_BINARIES, } from './derive-observations.js';
3
+ //# sourceMappingURL=index.js.map
@@ -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,CAsK9D,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,176 @@
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
+ // Frontmatter allowed-tools entry pattern (broader than the local-shell-only variant)
161
+ FRONTMATTER_ALLOWED_TOOLS_ENTRY: {
162
+ patternId: 'FRONTMATTER_ALLOWED_TOOLS_ENTRY',
163
+ source: 'code',
164
+ description: 'Allowed-tools entry in skill frontmatter.',
165
+ confidence: 'high',
166
+ },
167
+ };
168
+ export function getPatternDefinition(patternId) {
169
+ return PATTERN_REGISTRY[patternId];
170
+ }
171
+ export function assertPatternRegistered(patternId) {
172
+ if (!(patternId in PATTERN_REGISTRY)) {
173
+ throw new Error(`Unregistered pattern ID: ${patternId}. Add it to PATTERN_REGISTRY.`);
174
+ }
175
+ }
176
+ //# 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
@@ -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,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,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"}
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,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,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"}
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;
@@ -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,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AASrG;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,aAAa,GAAG,eAAe,CAAC;AAElF;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,YAAY,CAAC;AAK3D,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC;IAE1D;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;IAExC;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAE9C,kGAAkG;IAClG,sBAAsB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAE7C,mEAAmE;IACnE,2BAA2B,CAAC,EAAE;QAC5B,KAAK,CAAC,EAAE,KAAK,CAAC;YACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;YACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;SAC/B,CAAC,GAAG,SAAS,CAAC;QACf,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KACtC,GAAG,SAAS,CAAC;IAEd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAExC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAErC;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;IAErC;;;OAGG;IACH,UAAU,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;IAErB;;OAEG;IACH,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF,sCAAsC;IACtC,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAE1C;;;OAGG;IACH,eAAe,CAAC,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC;IAEhD,iEAAiE;IACjE,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EAAE,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAe/B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAiO7B;AA8fD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASlE;AA0HD;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAUlD"}
1
+ {"version":3,"file":"skill-packager.d.ts","sourceRoot":"","sources":["../src/skill-packager.ts"],"names":[],"mappings":"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"}
@@ -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 — hasErrors is always set (non-optional)
228
- const result = {
230
+ // Build result
231
+ return assemblePackageResult({
229
232
  outputPath,
230
- skill: skillMetadata,
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
- hasErrors: framework.hasErrors,
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
- // Deduplicate excluded reference paths for the result
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;