@vibe-agent-toolkit/agent-skills 0.1.33 → 0.1.34
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/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/inventory/detectors/declared-but-missing.d.ts +11 -0
- package/dist/inventory/detectors/declared-but-missing.d.ts.map +1 -0
- package/dist/inventory/detectors/declared-but-missing.js +37 -0
- package/dist/inventory/detectors/declared-but-missing.js.map +1 -0
- package/dist/inventory/detectors/index.d.ts +5 -0
- package/dist/inventory/detectors/index.d.ts.map +1 -0
- package/dist/inventory/detectors/index.js +5 -0
- package/dist/inventory/detectors/index.js.map +1 -0
- package/dist/inventory/detectors/marketplace-source-missing.d.ts +12 -0
- package/dist/inventory/detectors/marketplace-source-missing.d.ts.map +1 -0
- package/dist/inventory/detectors/marketplace-source-missing.js +20 -0
- package/dist/inventory/detectors/marketplace-source-missing.js.map +1 -0
- package/dist/inventory/detectors/present-but-undeclared.d.ts +13 -0
- package/dist/inventory/detectors/present-but-undeclared.d.ts.map +1 -0
- package/dist/inventory/detectors/present-but-undeclared.js +47 -0
- package/dist/inventory/detectors/present-but-undeclared.js.map +1 -0
- package/dist/inventory/detectors/reference-target-missing.d.ts +11 -0
- package/dist/inventory/detectors/reference-target-missing.d.ts.map +1 -0
- package/dist/inventory/detectors/reference-target-missing.js +19 -0
- package/dist/inventory/detectors/reference-target-missing.js.map +1 -0
- package/dist/inventory/index.d.ts +5 -0
- package/dist/inventory/index.d.ts.map +1 -0
- package/dist/inventory/index.js +4 -0
- package/dist/inventory/index.js.map +1 -0
- package/dist/inventory/serialize.d.ts +24 -0
- package/dist/inventory/serialize.d.ts.map +1 -0
- package/dist/inventory/serialize.js +52 -0
- package/dist/inventory/serialize.js.map +1 -0
- package/dist/inventory/types.d.ts +126 -0
- package/dist/inventory/types.d.ts.map +1 -0
- package/dist/inventory/types.js +16 -0
- package/dist/inventory/types.js.map +1 -0
- package/dist/schemas/index.d.ts +0 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +0 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/validators/bundled-resource-link-detection.d.ts +20 -0
- package/dist/validators/bundled-resource-link-detection.d.ts.map +1 -0
- package/dist/validators/bundled-resource-link-detection.js +92 -0
- package/dist/validators/bundled-resource-link-detection.js.map +1 -0
- package/dist/validators/code-registry.d.ts +1 -1
- package/dist/validators/code-registry.d.ts.map +1 -1
- package/dist/validators/code-registry.js +12 -0
- package/dist/validators/code-registry.js.map +1 -1
- package/dist/validators/format-detection.d.ts +21 -1
- package/dist/validators/format-detection.d.ts.map +1 -1
- package/dist/validators/format-detection.js +85 -1
- package/dist/validators/format-detection.js.map +1 -1
- package/dist/validators/imperative-body-detection.d.ts +15 -0
- package/dist/validators/imperative-body-detection.d.ts.map +1 -0
- package/dist/validators/imperative-body-detection.js +49 -0
- package/dist/validators/imperative-body-detection.js.map +1 -0
- package/dist/validators/index.d.ts +6 -4
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +4 -2
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/kebab-case-detection.d.ts +22 -0
- package/dist/validators/kebab-case-detection.d.ts.map +1 -0
- package/dist/validators/kebab-case-detection.js +43 -0
- package/dist/validators/kebab-case-detection.js.map +1 -0
- package/dist/validators/packaging-validator.d.ts +9 -0
- package/dist/validators/packaging-validator.d.ts.map +1 -1
- package/dist/validators/packaging-validator.js +4 -1
- package/dist/validators/packaging-validator.js.map +1 -1
- package/dist/validators/plugin-recommended-fields.d.ts +26 -0
- package/dist/validators/plugin-recommended-fields.d.ts.map +1 -0
- package/dist/validators/plugin-recommended-fields.js +66 -0
- package/dist/validators/plugin-recommended-fields.js.map +1 -0
- package/dist/validators/skill-validator.d.ts.map +1 -1
- package/dist/validators/skill-validator.js +20 -4
- package/dist/validators/skill-validator.js.map +1 -1
- package/dist/validators/types.d.ts +23 -0
- package/dist/validators/types.d.ts.map +1 -1
- package/dist/validators/unified-validator.d.ts +9 -4
- package/dist/validators/unified-validator.d.ts.map +1 -1
- package/dist/validators/unified-validator.js +19 -6
- package/dist/validators/unified-validator.js.map +1 -1
- package/package.json +5 -5
- package/dist/schemas/claude-plugin.d.ts +0 -98
- package/dist/schemas/claude-plugin.d.ts.map +0 -1
- package/dist/schemas/claude-plugin.js +0 -79
- package/dist/schemas/claude-plugin.js.map +0 -1
- package/dist/validators/plugin-validator.d.ts +0 -12
- package/dist/validators/plugin-validator.d.ts.map +0 -1
- package/dist/validators/plugin-validator.js +0 -99
- package/dist/validators/plugin-validator.js.map +0 -1
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
3
|
-
/**
|
|
4
|
-
* Schema for .claude-plugin/plugin.json manifest
|
|
5
|
-
* Based on official Claude Code documentation
|
|
6
|
-
* @see https://code.claude.com/docs/en/plugins-reference
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Component path schemas per official Claude Code plugin spec.
|
|
10
|
-
* @see https://code.claude.com/docs/en/plugins-reference#component-path-fields
|
|
11
|
-
*
|
|
12
|
-
* Path-only fields (commands, agents, skills, outputStyles): string | string[]
|
|
13
|
-
* Config-capable fields (hooks, mcpServers, lspServers): string | string[] | object
|
|
14
|
-
*/
|
|
15
|
-
const ComponentPathsSchema = z.union([
|
|
16
|
-
z.string(),
|
|
17
|
-
z.array(z.string()),
|
|
18
|
-
]);
|
|
19
|
-
const ComponentPathsOrConfigSchema = z.union([
|
|
20
|
-
z.string(),
|
|
21
|
-
z.array(z.string()),
|
|
22
|
-
z.record(z.unknown()),
|
|
23
|
-
]);
|
|
24
|
-
export const ClaudePluginSchema = z
|
|
25
|
-
.object({
|
|
26
|
-
name: z
|
|
27
|
-
.string()
|
|
28
|
-
.min(1, 'Plugin name is required')
|
|
29
|
-
.max(64, 'Plugin name must be 64 characters or less')
|
|
30
|
-
.regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, // eslint-disable-line security/detect-unsafe-regex -- Simple pattern with bounded length, safe from ReDoS
|
|
31
|
-
'Plugin name must be lowercase alphanumeric with hyphens')
|
|
32
|
-
.describe('Unique plugin identifier (required if manifest exists)'),
|
|
33
|
-
version: z
|
|
34
|
-
.string()
|
|
35
|
-
.regex(/^\d+\.\d+\.\d+(-[\w.]+)?$/, // eslint-disable-line security/detect-unsafe-regex -- Simple semver pattern, bounded, safe from ReDoS
|
|
36
|
-
'Version must follow semver format (e.g., 1.0.0 or 1.0.0-rc.1)')
|
|
37
|
-
.optional()
|
|
38
|
-
.describe('Semantic version with optional pre-release suffix'),
|
|
39
|
-
description: z
|
|
40
|
-
.string()
|
|
41
|
-
.min(1)
|
|
42
|
-
.max(1024, 'Description must be 1024 characters or less')
|
|
43
|
-
.optional()
|
|
44
|
-
.describe('Human-readable description of plugin functionality (optional)'),
|
|
45
|
-
author: z
|
|
46
|
-
.object({
|
|
47
|
-
name: z.string().optional(),
|
|
48
|
-
email: z.string().email().optional(),
|
|
49
|
-
url: z.string().url().optional(),
|
|
50
|
-
})
|
|
51
|
-
.optional()
|
|
52
|
-
.describe('Plugin author information'),
|
|
53
|
-
homepage: z.string().url().optional().describe('Plugin homepage URL'),
|
|
54
|
-
repository: z.string().url().optional().describe('Source repository URL'),
|
|
55
|
-
license: z.string().optional().describe('License identifier (e.g., MIT)'),
|
|
56
|
-
keywords: z
|
|
57
|
-
.array(z.string())
|
|
58
|
-
.optional()
|
|
59
|
-
.describe('Search keywords for plugin discovery'),
|
|
60
|
-
// Component paths (all optional) — per official spec, string | string[] or string | string[] | object
|
|
61
|
-
commands: ComponentPathsSchema.optional().describe('Command files or directories'),
|
|
62
|
-
skills: ComponentPathsSchema.optional().describe('Skill directories'),
|
|
63
|
-
agents: ComponentPathsSchema.optional().describe('Agent files or directories'),
|
|
64
|
-
hooks: ComponentPathsOrConfigSchema.optional().describe('Hook config path(s) or inline config'),
|
|
65
|
-
mcpServers: ComponentPathsOrConfigSchema.optional().describe('MCP server config path(s) or inline config'),
|
|
66
|
-
outputStyles: ComponentPathsSchema.optional().describe('Output style files or directories'),
|
|
67
|
-
lspServers: ComponentPathsOrConfigSchema.optional().describe('LSP server config path(s) or inline config'),
|
|
68
|
-
})
|
|
69
|
-
.passthrough() // Accept unknown fields — official spec evolves
|
|
70
|
-
.describe('Claude Code plugin manifest structure');
|
|
71
|
-
/**
|
|
72
|
-
* JSON Schema representation of ClaudePluginSchema
|
|
73
|
-
* For external tools and documentation
|
|
74
|
-
*/
|
|
75
|
-
export const ClaudePluginJsonSchema = zodToJsonSchema(ClaudePluginSchema, {
|
|
76
|
-
name: 'ClaudePluginManifest',
|
|
77
|
-
$refStrategy: 'none',
|
|
78
|
-
});
|
|
79
|
-
//# sourceMappingURL=claude-plugin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-plugin.js","sourceRoot":"","sources":["../../src/schemas/claude-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;GAIG;AAEH;;;;;;GAMG;AACH,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC;IACnC,CAAC,CAAC,MAAM,EAAE;IACV,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC;IAC3C,CAAC,CAAC,MAAM,EAAE;IACV,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACnB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC;SACjC,GAAG,CAAC,EAAE,EAAE,2CAA2C,CAAC;SACpD,KAAK,CACJ,0BAA0B,EAAE,0GAA0G;IACtI,yDAAyD,CAC1D;SACA,QAAQ,CAAC,wDAAwD,CAAC;IAErE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,KAAK,CACJ,2BAA2B,EAAE,sGAAsG;IACnI,+DAA+D,CAChE;SACA,QAAQ,EAAE;SACV,QAAQ,CAAC,mDAAmD,CAAC;IAEhE,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,EAAE,6CAA6C,CAAC;SACxD,QAAQ,EAAE;SACV,QAAQ,CAAC,+DAA+D,CAAC;IAE5E,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;QACpC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KACjC,CAAC;SACD,QAAQ,EAAE;SACV,QAAQ,CAAC,2BAA2B,CAAC;IAExC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACrE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACzE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACzE,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IAEnD,sGAAsG;IACtG,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAClF,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACrE,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC9E,KAAK,EAAE,4BAA4B,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAC/F,UAAU,EAAE,4BAA4B,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IAC1G,YAAY,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC3F,UAAU,EAAE,4BAA4B,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;CAC3G,CAAC;KACD,WAAW,EAAE,CAAC,gDAAgD;KAC9D,QAAQ,CAAC,uCAAuC,CAAC,CAAC;AAIrD;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC,kBAAkB,EAAE;IACxE,IAAI,EAAE,sBAAsB;IAC5B,YAAY,EAAE,MAAM;CACrB,CAAC,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { ValidationResult } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Validate a plugin directory structure against the ClaudePluginSchema.
|
|
4
|
-
*
|
|
5
|
-
* @see https://code.claude.com/docs/en/plugins-reference — Official plugin manifest spec
|
|
6
|
-
* @param pluginPath - Absolute path to plugin directory
|
|
7
|
-
* @returns Validation result with issues
|
|
8
|
-
*/
|
|
9
|
-
export declare function validatePlugin(pluginPath: string, options?: {
|
|
10
|
-
strict?: boolean;
|
|
11
|
-
}): Promise<ValidationResult>;
|
|
12
|
-
//# sourceMappingURL=plugin-validator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-validator.d.ts","sourceRoot":"","sources":["../../src/validators/plugin-validator.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQpE;;;;;;GAMG;AACH,wBAAsB,cAAc,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CA8F3B"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
/* eslint-disable security/detect-non-literal-fs-filename -- File paths are validated before use */
|
|
2
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
-
import { safePath } from '@vibe-agent-toolkit/utils';
|
|
4
|
-
import { ClaudePluginSchema } from '../schemas/claude-plugin.js';
|
|
5
|
-
import { calculateValidationStatus, generateFixSuggestion, } from './validation-utils.js';
|
|
6
|
-
const PLUGIN_TYPE = 'claude-plugin';
|
|
7
|
-
/**
|
|
8
|
-
* Validate a plugin directory structure against the ClaudePluginSchema.
|
|
9
|
-
*
|
|
10
|
-
* @see https://code.claude.com/docs/en/plugins-reference — Official plugin manifest spec
|
|
11
|
-
* @param pluginPath - Absolute path to plugin directory
|
|
12
|
-
* @returns Validation result with issues
|
|
13
|
-
*/
|
|
14
|
-
export async function validatePlugin(pluginPath, options) {
|
|
15
|
-
const issues = [];
|
|
16
|
-
const pluginJsonPath = safePath.join(pluginPath, '.claude-plugin', 'plugin.json');
|
|
17
|
-
// Check plugin.json exists
|
|
18
|
-
if (!existsSync(pluginJsonPath)) {
|
|
19
|
-
issues.push({
|
|
20
|
-
severity: 'error',
|
|
21
|
-
code: 'PLUGIN_MISSING_MANIFEST',
|
|
22
|
-
message: 'Plugin manifest not found',
|
|
23
|
-
location: `${pluginPath}/.claude-plugin/plugin.json`,
|
|
24
|
-
fix: 'Create .claude-plugin/plugin.json with required fields (name, description, version)',
|
|
25
|
-
});
|
|
26
|
-
return {
|
|
27
|
-
path: pluginPath,
|
|
28
|
-
type: PLUGIN_TYPE,
|
|
29
|
-
status: 'error',
|
|
30
|
-
summary: 'Plugin manifest missing',
|
|
31
|
-
issues,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
// Parse and validate plugin.json
|
|
35
|
-
let pluginData;
|
|
36
|
-
try {
|
|
37
|
-
const content = readFileSync(pluginJsonPath, 'utf-8');
|
|
38
|
-
pluginData = JSON.parse(content);
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
issues.push({
|
|
42
|
-
severity: 'error',
|
|
43
|
-
code: 'PLUGIN_INVALID_JSON',
|
|
44
|
-
message: `Failed to parse plugin.json: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
45
|
-
location: pluginJsonPath,
|
|
46
|
-
fix: 'Fix JSON syntax errors in plugin.json',
|
|
47
|
-
});
|
|
48
|
-
return {
|
|
49
|
-
path: pluginPath,
|
|
50
|
-
type: PLUGIN_TYPE,
|
|
51
|
-
status: 'error',
|
|
52
|
-
summary: 'Plugin manifest is invalid JSON',
|
|
53
|
-
issues,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
// Validate against schema
|
|
57
|
-
const result = ClaudePluginSchema.safeParse(pluginData);
|
|
58
|
-
if (!result.success) {
|
|
59
|
-
for (const zodIssue of result.error.issues) {
|
|
60
|
-
issues.push({
|
|
61
|
-
severity: 'error',
|
|
62
|
-
code: 'PLUGIN_INVALID_SCHEMA',
|
|
63
|
-
message: zodIssue.message,
|
|
64
|
-
location: `${pluginJsonPath}:${zodIssue.path.join('.')}`,
|
|
65
|
-
fix: generateFixSuggestion(zodIssue),
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
const status = calculateValidationStatus(issues);
|
|
70
|
-
const validationResult = {
|
|
71
|
-
path: pluginPath,
|
|
72
|
-
type: PLUGIN_TYPE,
|
|
73
|
-
status,
|
|
74
|
-
summary: status === 'success' ? 'Valid plugin' : `Found ${issues.length} issue(s)`,
|
|
75
|
-
issues,
|
|
76
|
-
};
|
|
77
|
-
if (result.success) {
|
|
78
|
-
validationResult.metadata = {
|
|
79
|
-
name: result.data.name,
|
|
80
|
-
...(result.data.version !== undefined && { version: result.data.version }),
|
|
81
|
-
};
|
|
82
|
-
// Warn when version is missing — Claude Code caches plugins by version,
|
|
83
|
-
// and without it the cache directory becomes "unknown/", causing stale
|
|
84
|
-
// skill resolution across upgrades.
|
|
85
|
-
if (result.data.version === undefined) {
|
|
86
|
-
issues.push({
|
|
87
|
-
severity: options?.strict ? 'error' : 'warning',
|
|
88
|
-
code: 'PLUGIN_MISSING_VERSION',
|
|
89
|
-
message: 'plugin.json missing version field — Claude Code will cache as "unknown/", causing stale skill resolution across upgrades',
|
|
90
|
-
location: pluginJsonPath,
|
|
91
|
-
fix: 'Add a "version" field to plugin.json (semver format, e.g. "1.0.0")',
|
|
92
|
-
});
|
|
93
|
-
validationResult.status = calculateValidationStatus(issues);
|
|
94
|
-
validationResult.summary = `Found ${issues.length} issue(s)`;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return validationResult;
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=plugin-validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-validator.js","sourceRoot":"","sources":["../../src/validators/plugin-validator.ts"],"names":[],"mappings":"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"}
|