@vibe-agent-toolkit/claude-marketplace 0.1.34-rc.2 → 0.1.35
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 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/inventory/detectors/index.d.ts +2 -0
- package/dist/inventory/detectors/index.d.ts.map +1 -0
- package/dist/inventory/detectors/index.js +2 -0
- package/dist/inventory/detectors/index.js.map +1 -0
- package/dist/inventory/detectors/skill-claude-plugin-name-mismatch.d.ts +18 -0
- package/dist/inventory/detectors/skill-claude-plugin-name-mismatch.d.ts.map +1 -0
- package/dist/inventory/detectors/skill-claude-plugin-name-mismatch.js +37 -0
- package/dist/inventory/detectors/skill-claude-plugin-name-mismatch.js.map +1 -0
- package/dist/inventory/extract-install.d.ts +14 -0
- package/dist/inventory/extract-install.d.ts.map +1 -0
- package/dist/inventory/extract-install.js +111 -0
- package/dist/inventory/extract-install.js.map +1 -0
- package/dist/inventory/extract-marketplace.d.ts +11 -0
- package/dist/inventory/extract-marketplace.d.ts.map +1 -0
- package/dist/inventory/extract-marketplace.js +139 -0
- package/dist/inventory/extract-marketplace.js.map +1 -0
- package/dist/inventory/extract-plugin.d.ts +7 -0
- package/dist/inventory/extract-plugin.d.ts.map +1 -0
- package/dist/inventory/extract-plugin.js +306 -0
- package/dist/inventory/extract-plugin.js.map +1 -0
- package/dist/inventory/extract-skill.d.ts +10 -0
- package/dist/inventory/extract-skill.d.ts.map +1 -0
- package/dist/inventory/extract-skill.js +91 -0
- package/dist/inventory/extract-skill.js.map +1 -0
- package/dist/inventory/index.d.ts +7 -0
- package/dist/inventory/index.d.ts.map +1 -0
- package/dist/inventory/index.js +7 -0
- package/dist/inventory/index.js.map +1 -0
- package/dist/inventory/types.d.ts +65 -0
- package/dist/inventory/types.d.ts.map +1 -0
- package/dist/inventory/types.js +70 -0
- package/dist/inventory/types.js.map +1 -0
- package/dist/paths/claude-paths.d.ts +5 -0
- package/dist/paths/claude-paths.d.ts.map +1 -1
- package/dist/paths/claude-paths.js +20 -12
- package/dist/paths/claude-paths.js.map +1 -1
- package/dist/schemas/claude-plugin.d.ts +98 -0
- package/dist/schemas/claude-plugin.d.ts.map +1 -0
- package/dist/schemas/claude-plugin.js +79 -0
- package/dist/schemas/claude-plugin.js.map +1 -0
- package/dist/validators/plugin-validator.d.ts +12 -0
- package/dist/validators/plugin-validator.d.ts.map +1 -0
- package/dist/validators/plugin-validator.js +131 -0
- package/dist/validators/plugin-validator.js.map +1 -0
- package/package.json +6 -4
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export { readMarketplaceDefaultTargets, resolveEffectiveTargets, } from './marke
|
|
|
9
9
|
export { computeVerdicts } from './verdict-engine.js';
|
|
10
10
|
export type { Verdict, VerdictCode, VerdictInput } from './verdict-engine.js';
|
|
11
11
|
export type { ClaudeProjectPaths, ClaudeUserPaths } from './paths/claude-paths.js';
|
|
12
|
-
export { getClaudeProjectPaths, getClaudeUserPaths, } from './paths/claude-paths.js';
|
|
12
|
+
export { buildClaudeUserPaths, getClaudeProjectPaths, getClaudeUserPaths, } from './paths/claude-paths.js';
|
|
13
13
|
export { getManagedSettingsCandidatePaths, WINDOWS_LEGACY_MANAGED_SETTINGS_PATH, } from './paths/managed-settings-path.js';
|
|
14
14
|
export type { ClaudeAuthConfig, ClaudeModelConfig, HooksConfig, ManagedSettings, McpServerPolicy, PermissionsConfig, ProjectSettings, SandboxConfig, SandboxFilesystem, SandboxNetwork, UserSettings, } from './schemas/index.js';
|
|
15
15
|
export { ClaudeAuthConfigSchema, ClaudeModelConfigSchema, HooksConfigSchema, ManagedSettingsSchema, MarketplaceSourceSchema, McpServerPolicySchema, PermissionsConfigSchema, ProjectSettingsSchema, SandboxConfigSchema, SandboxFilesystemSchema, SandboxNetworkSchema, UserSettingsSchema, } from './schemas/index.js';
|
|
@@ -23,4 +23,12 @@ export type { OrgApiClientOptions, PaginationParams, ReportPaginationParams, Mul
|
|
|
23
23
|
export { createOrgApiClientFromEnv, OrgApiClient, buildMultipartFormData } from './org/org-api-client.js';
|
|
24
24
|
export type { BashRuleType, EffectivePermissions, EffectiveSettings, ParsedBashRule, ProvenanceRule, ProvenanceValue, ReadSettingsOptions, RuleConflict, RuleConflictKind, SettingProvenance, SettingsAuditResult, SettingsLayer, SettingsLevel, SettingsPathEntry, SettingsPathsResult, SettingsValidateResult, } from './settings/index.js';
|
|
25
25
|
export { analyzeRuleConflicts, auditSettings, checkSettingsCompatibility, getSettingsFileFields, getSettingsPaths, isSubsumedBy, matchesBashRule, matchesPathRule, matchesPermissionRule, mergeSettingsLayers, readEffectiveSettings, readSettingsLayers, resolveSettingsPaths, validateSettingsFile, } from './settings/index.js';
|
|
26
|
+
export { ClaudePluginJsonSchema, ClaudePluginSchema, type ClaudePlugin, } from './schemas/claude-plugin.js';
|
|
27
|
+
export { validatePlugin } from './validators/plugin-validator.js';
|
|
28
|
+
export { ClaudeInstallInventory, ClaudeMarketplaceInventory, ClaudePluginInventory, ClaudeSkillInventory, } from './inventory/index.js';
|
|
29
|
+
export { extractClaudeSkillInventory } from './inventory/index.js';
|
|
30
|
+
export { extractClaudePluginInventory } from './inventory/index.js';
|
|
31
|
+
export { extractClaudeMarketplaceInventory } from './inventory/index.js';
|
|
32
|
+
export { extractClaudeInstallInventory } from './inventory/index.js';
|
|
33
|
+
export { detectSkillClaudePluginNameMismatch } from './inventory/index.js';
|
|
26
34
|
//# 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,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,MAAM,GACP,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,YAAY,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAG/E,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAG9E,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gCAAgC,EAChC,oCAAoC,GACrC,MAAM,kCAAkC,CAAC;AAG1C,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EACV,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGtF,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC7I,OAAO,EAAE,yBAAyB,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAG1G,YAAY,EACV,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,0BAA0B,EAC1B,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ export { analyzeCompatibility } from './compatibility-analyzer.js';
|
|
|
7
7
|
export { readMarketplaceDefaultTargets, resolveEffectiveTargets, } from './marketplace-defaults.js';
|
|
8
8
|
// Verdict engine
|
|
9
9
|
export { computeVerdicts } from './verdict-engine.js';
|
|
10
|
-
export { getClaudeProjectPaths, getClaudeUserPaths, } from './paths/claude-paths.js';
|
|
10
|
+
export { buildClaudeUserPaths, getClaudeProjectPaths, getClaudeUserPaths, } from './paths/claude-paths.js';
|
|
11
11
|
export { getManagedSettingsCandidatePaths, WINDOWS_LEGACY_MANAGED_SETTINGS_PATH, } from './paths/managed-settings-path.js';
|
|
12
12
|
export { ClaudeAuthConfigSchema, ClaudeModelConfigSchema, HooksConfigSchema, ManagedSettingsSchema, MarketplaceSourceSchema, McpServerPolicySchema, PermissionsConfigSchema, ProjectSettingsSchema, SandboxConfigSchema, SandboxFilesystemSchema, SandboxNetworkSchema, UserSettingsSchema, } from './schemas/index.js';
|
|
13
13
|
export { installPlugin, readInstalledPlugins, readKnownMarketplaces, writeInstalledPlugins, writeKnownMarketplaces, } from './install/plugin-registry.js';
|
|
@@ -15,4 +15,15 @@ export { findPluginsByPackage, uninstallPlugin } from './install/plugin-uninstal
|
|
|
15
15
|
export { listLocalPlugins } from './install/plugin-list.js';
|
|
16
16
|
export { createOrgApiClientFromEnv, OrgApiClient, buildMultipartFormData } from './org/org-api-client.js';
|
|
17
17
|
export { analyzeRuleConflicts, auditSettings, checkSettingsCompatibility, getSettingsFileFields, getSettingsPaths, isSubsumedBy, matchesBashRule, matchesPathRule, matchesPermissionRule, mergeSettingsLayers, readEffectiveSettings, readSettingsLayers, resolveSettingsPaths, validateSettingsFile, } from './settings/index.js';
|
|
18
|
+
// Claude plugin manifest schema (moved from agent-skills in Chunk 1)
|
|
19
|
+
export { ClaudePluginJsonSchema, ClaudePluginSchema, } from './schemas/claude-plugin.js';
|
|
20
|
+
// Plugin validator (moved from agent-skills in Chunk 1)
|
|
21
|
+
export { validatePlugin } from './validators/plugin-validator.js';
|
|
22
|
+
// Inventory layer (added in Chunk 2 — vendor-specific concrete classes)
|
|
23
|
+
export { ClaudeInstallInventory, ClaudeMarketplaceInventory, ClaudePluginInventory, ClaudeSkillInventory, } from './inventory/index.js';
|
|
24
|
+
export { extractClaudeSkillInventory } from './inventory/index.js';
|
|
25
|
+
export { extractClaudePluginInventory } from './inventory/index.js';
|
|
26
|
+
export { extractClaudeMarketplaceInventory } from './inventory/index.js';
|
|
27
|
+
export { extractClaudeInstallInventory } from './inventory/index.js';
|
|
28
|
+
export { detectSkillClaudePluginNameMismatch } from './inventory/index.js';
|
|
18
29
|
//# 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;AAWH,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,2CAA2C;AAC3C,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAEnC,iBAAiB;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKtD,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gCAAgC,EAChC,oCAAoC,GACrC,MAAM,kCAAkC,CAAC;AAgB1C,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAY5B,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AAOtC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAQtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,OAAO,EAAE,yBAAyB,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAqB1G,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,0BAA0B,EAC1B,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,2CAA2C;AAC3C,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAEnC,iBAAiB;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKtD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gCAAgC,EAChC,oCAAoC,GACrC,MAAM,kCAAkC,CAAC;AAgB1C,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAY5B,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AAOtC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAQtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,OAAO,EAAE,yBAAyB,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAqB1G,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,0BAA0B,EAC1B,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAE7B,qEAAqE;AACrE,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GAEnB,MAAM,4BAA4B,CAAC;AAEpC,wDAAwD;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,wEAAwE;AACxE,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,mCAAmC,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/inventory/detectors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,wCAAwC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/inventory/detectors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,wCAAwC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detector: SKILL_CLAUDE_PLUGIN_NAME_MISMATCH
|
|
3
|
+
*
|
|
4
|
+
* Pure function — no I/O. Consumes a ClaudePluginInventory and returns a
|
|
5
|
+
* warning when the root SKILL.md frontmatter `name` disagrees with the
|
|
6
|
+
* plugin.json `name`. Only fires for skill-claude-plugin shape (i.e., a plugin
|
|
7
|
+
* directory that has both a root SKILL.md and a .claude-plugin/plugin.json).
|
|
8
|
+
*/
|
|
9
|
+
import type { ValidationIssue } from '@vibe-agent-toolkit/agent-skills';
|
|
10
|
+
import type { ClaudePluginInventory } from '../types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Return a SKILL_CLAUDE_PLUGIN_NAME_MISMATCH warning when the plugin's
|
|
13
|
+
* co-located root SKILL.md `name` frontmatter disagrees with `plugin.json`
|
|
14
|
+
* `name`, or an empty array when the names agree, are absent, or the
|
|
15
|
+
* inventory is not a skill-claude-plugin shape.
|
|
16
|
+
*/
|
|
17
|
+
export declare function detectSkillClaudePluginNameMismatch(inv: ClaudePluginInventory): ValidationIssue[];
|
|
18
|
+
//# sourceMappingURL=skill-claude-plugin-name-mismatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-claude-plugin-name-mismatch.d.ts","sourceRoot":"","sources":["../../../src/inventory/detectors/skill-claude-plugin-name-mismatch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGxE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,GAAG,EAAE,qBAAqB,GAAG,eAAe,EAAE,CAmBjG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detector: SKILL_CLAUDE_PLUGIN_NAME_MISMATCH
|
|
3
|
+
*
|
|
4
|
+
* Pure function — no I/O. Consumes a ClaudePluginInventory and returns a
|
|
5
|
+
* warning when the root SKILL.md frontmatter `name` disagrees with the
|
|
6
|
+
* plugin.json `name`. Only fires for skill-claude-plugin shape (i.e., a plugin
|
|
7
|
+
* directory that has both a root SKILL.md and a .claude-plugin/plugin.json).
|
|
8
|
+
*/
|
|
9
|
+
import { safePath } from '@vibe-agent-toolkit/utils';
|
|
10
|
+
/**
|
|
11
|
+
* Return a SKILL_CLAUDE_PLUGIN_NAME_MISMATCH warning when the plugin's
|
|
12
|
+
* co-located root SKILL.md `name` frontmatter disagrees with `plugin.json`
|
|
13
|
+
* `name`, or an empty array when the names agree, are absent, or the
|
|
14
|
+
* inventory is not a skill-claude-plugin shape.
|
|
15
|
+
*/
|
|
16
|
+
export function detectSkillClaudePluginNameMismatch(inv) {
|
|
17
|
+
if (inv.shape !== 'skill-claude-plugin')
|
|
18
|
+
return [];
|
|
19
|
+
if (inv.vendor !== 'claude-code')
|
|
20
|
+
return [];
|
|
21
|
+
const rootSkillPath = safePath.join(inv.path, 'SKILL.md');
|
|
22
|
+
const rootSkill = inv.discovered.skills.find(s => s.path === rootSkillPath);
|
|
23
|
+
if (rootSkill === undefined)
|
|
24
|
+
return [];
|
|
25
|
+
const skillName = rootSkill.manifest.name;
|
|
26
|
+
const pluginName = inv.manifest.name;
|
|
27
|
+
if (skillName === '' || pluginName === undefined || skillName === pluginName)
|
|
28
|
+
return [];
|
|
29
|
+
return [{
|
|
30
|
+
severity: 'warning',
|
|
31
|
+
code: 'SKILL_CLAUDE_PLUGIN_NAME_MISMATCH',
|
|
32
|
+
message: `plugin.json name "${pluginName}" does not match co-located SKILL.md frontmatter name "${skillName}"`,
|
|
33
|
+
location: safePath.join(inv.path, '.claude-plugin', 'plugin.json'),
|
|
34
|
+
fix: 'Align the names: update plugin.json `name` to match SKILL.md `name` (the skill is authoritative), or intentionally namespace the plugin (configure `validation.severity` or `validation.allow` with a reason).',
|
|
35
|
+
}];
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=skill-claude-plugin-name-mismatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-claude-plugin-name-mismatch.js","sourceRoot":"","sources":["../../../src/inventory/detectors/skill-claude-plugin-name-mismatch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAIrD;;;;;GAKG;AACH,MAAM,UAAU,mCAAmC,CAAC,GAA0B;IAC7E,IAAI,GAAG,CAAC,KAAK,KAAK,qBAAqB;QAAE,OAAO,EAAE,CAAC;IACnD,IAAI,GAAG,CAAC,MAAM,KAAK,aAAa;QAAE,OAAO,EAAE,CAAC;IAE5C,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;IAC5E,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC1C,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrC,IAAI,SAAS,KAAK,EAAE,IAAI,UAAU,KAAK,SAAS,IAAI,SAAS,KAAK,UAAU;QAAE,OAAO,EAAE,CAAC;IAExF,OAAO,CAAC;YACP,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,mCAAmC;YACzC,OAAO,EAAE,qBAAqB,UAAU,0DAA0D,SAAS,GAAG;YAC9G,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,EAAE,aAAa,CAAC;YAClE,GAAG,EAAE,gNAAgN;SACrN,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ClaudeUserPaths } from '../paths/claude-paths.js';
|
|
2
|
+
import { ClaudeInstallInventory } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Build an InstallInventory by walking a Claude install root (default: ~/.claude).
|
|
5
|
+
* Discovers marketplaces under plugins/marketplaces/<name>/ and cached plugins under
|
|
6
|
+
* plugins/cache/<marketplace>/<name>/<version>/. Never throws — all failures surface
|
|
7
|
+
* via parseErrors[].
|
|
8
|
+
*
|
|
9
|
+
* Pass a ClaudeUserPaths object directly for testing or when the caller has already
|
|
10
|
+
* resolved the install root; pass a string path to build paths automatically from
|
|
11
|
+
* that root; omit entirely to use the default user install (~/.claude).
|
|
12
|
+
*/
|
|
13
|
+
export declare function extractClaudeInstallInventory(pathsOrRoot?: ClaudeUserPaths | string): Promise<ClaudeInstallInventory>;
|
|
14
|
+
//# sourceMappingURL=extract-install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-install.d.ts","sourceRoot":"","sources":["../../src/inventory/extract-install.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAKhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAIpD;;;;;;;;;GASG;AACH,wBAAsB,6BAA6B,CAClD,WAAW,CAAC,EAAE,eAAe,GAAG,MAAM,GACpC,OAAO,CAAC,sBAAsB,CAAC,CAiBjC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { readdir } from 'node:fs/promises';
|
|
3
|
+
import { safePath } from '@vibe-agent-toolkit/utils';
|
|
4
|
+
import { buildClaudeUserPaths, getClaudeUserPaths } from '../paths/claude-paths.js';
|
|
5
|
+
import { extractClaudeMarketplaceInventory } from './extract-marketplace.js';
|
|
6
|
+
import { extractClaudePluginInventory } from './extract-plugin.js';
|
|
7
|
+
import { ClaudeInstallInventory } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Build an InstallInventory by walking a Claude install root (default: ~/.claude).
|
|
10
|
+
* Discovers marketplaces under plugins/marketplaces/<name>/ and cached plugins under
|
|
11
|
+
* plugins/cache/<marketplace>/<name>/<version>/. Never throws — all failures surface
|
|
12
|
+
* via parseErrors[].
|
|
13
|
+
*
|
|
14
|
+
* Pass a ClaudeUserPaths object directly for testing or when the caller has already
|
|
15
|
+
* resolved the install root; pass a string path to build paths automatically from
|
|
16
|
+
* that root; omit entirely to use the default user install (~/.claude).
|
|
17
|
+
*/
|
|
18
|
+
export async function extractClaudeInstallInventory(pathsOrRoot) {
|
|
19
|
+
const paths = resolvePaths(pathsOrRoot);
|
|
20
|
+
const root = paths.claudeDir;
|
|
21
|
+
const parseErrors = [];
|
|
22
|
+
const marketplaces = [];
|
|
23
|
+
const plugins = [];
|
|
24
|
+
await collectMarketplaces(paths.marketplacesDir, marketplaces, parseErrors);
|
|
25
|
+
await collectCachedPlugins(paths.pluginsCacheDir, plugins, parseErrors);
|
|
26
|
+
return new ClaudeInstallInventory({
|
|
27
|
+
path: root,
|
|
28
|
+
installRoot: root,
|
|
29
|
+
marketplaces,
|
|
30
|
+
plugins,
|
|
31
|
+
parseErrors,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function resolvePaths(pathsOrRoot) {
|
|
35
|
+
if (pathsOrRoot === undefined)
|
|
36
|
+
return getClaudeUserPaths();
|
|
37
|
+
if (typeof pathsOrRoot === 'string')
|
|
38
|
+
return buildClaudeUserPaths(safePath.resolve(pathsOrRoot));
|
|
39
|
+
return pathsOrRoot;
|
|
40
|
+
}
|
|
41
|
+
async function collectMarketplaces(marketplacesDir, marketplaces, parseErrors) {
|
|
42
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- path from validated ClaudeUserPaths
|
|
43
|
+
if (!existsSync(marketplacesDir))
|
|
44
|
+
return;
|
|
45
|
+
try {
|
|
46
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- path from validated ClaudeUserPaths
|
|
47
|
+
const entries = await readdir(marketplacesDir, { withFileTypes: true });
|
|
48
|
+
for (const entry of entries) {
|
|
49
|
+
if (!entry.isDirectory())
|
|
50
|
+
continue;
|
|
51
|
+
const mpPath = safePath.join(marketplacesDir, entry.name);
|
|
52
|
+
marketplaces.push(await extractClaudeMarketplaceInventory(mpPath));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
parseErrors.push({ path: marketplacesDir, message: e.message });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function collectCachedPlugins(cacheDir, plugins, parseErrors) {
|
|
60
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- path from validated ClaudeUserPaths
|
|
61
|
+
if (!existsSync(cacheDir))
|
|
62
|
+
return;
|
|
63
|
+
let marketplaceDirs;
|
|
64
|
+
try {
|
|
65
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- path from validated ClaudeUserPaths
|
|
66
|
+
marketplaceDirs = (await readdir(cacheDir, { withFileTypes: true }))
|
|
67
|
+
.filter(e => e.isDirectory())
|
|
68
|
+
.map(e => safePath.join(cacheDir, e.name));
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
parseErrors.push({ path: cacheDir, message: e.message });
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
for (const mpDir of marketplaceDirs) {
|
|
75
|
+
await collectPluginsInMarketplaceCache(mpDir, plugins, parseErrors);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async function collectPluginsInMarketplaceCache(mpDir, plugins, parseErrors) {
|
|
79
|
+
let pluginNameDirs;
|
|
80
|
+
try {
|
|
81
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- path constructed from cache directory walk
|
|
82
|
+
pluginNameDirs = (await readdir(mpDir, { withFileTypes: true }))
|
|
83
|
+
.filter(e => e.isDirectory())
|
|
84
|
+
.map(e => safePath.join(mpDir, e.name));
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// best-effort: skip unreadable marketplace cache directories
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
for (const nameDir of pluginNameDirs) {
|
|
91
|
+
let versionDirs;
|
|
92
|
+
try {
|
|
93
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- path constructed from cache directory walk
|
|
94
|
+
versionDirs = (await readdir(nameDir, { withFileTypes: true }))
|
|
95
|
+
.filter(e => e.isDirectory())
|
|
96
|
+
.map(e => safePath.join(nameDir, e.name));
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
for (const versionDir of versionDirs) {
|
|
102
|
+
try {
|
|
103
|
+
plugins.push(await extractClaudePluginInventory(versionDir));
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
parseErrors.push({ path: versionDir, message: e.message });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=extract-install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-install.js","sourceRoot":"","sources":["../../src/inventory/extract-install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ClaudeMarketplaceInventory } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build a MarketplaceInventory for a directory containing a .claude-plugin/marketplace.json
|
|
4
|
+
* manifest. Never throws — all failures surface via parseErrors[].
|
|
5
|
+
*
|
|
6
|
+
* For path-source entries that exist on disk, the plugin extractor is called recursively so
|
|
7
|
+
* discovered.plugins is fully populated. Remote entries (git, npm, unknown) are declarations
|
|
8
|
+
* only — they are never fetched.
|
|
9
|
+
*/
|
|
10
|
+
export declare function extractClaudeMarketplaceInventory(marketplacePath: string): Promise<ClaudeMarketplaceInventory>;
|
|
11
|
+
//# sourceMappingURL=extract-marketplace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-marketplace.d.ts","sourceRoot":"","sources":["../../src/inventory/extract-marketplace.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAMxD;;;;;;;GAOG;AACH,wBAAsB,iCAAiC,CACtD,eAAe,EAAE,MAAM,GACrB,OAAO,CAAC,0BAA0B,CAAC,CAkErC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { MarketplaceManifestSchema } from '@vibe-agent-toolkit/agent-skills';
|
|
4
|
+
import { safePath } from '@vibe-agent-toolkit/utils';
|
|
5
|
+
import { extractClaudePluginInventory } from './extract-plugin.js';
|
|
6
|
+
import { ClaudeMarketplaceInventory } from './types.js';
|
|
7
|
+
const MARKETPLACE_JSON = 'marketplace.json';
|
|
8
|
+
/**
|
|
9
|
+
* Build a MarketplaceInventory for a directory containing a .claude-plugin/marketplace.json
|
|
10
|
+
* manifest. Never throws — all failures surface via parseErrors[].
|
|
11
|
+
*
|
|
12
|
+
* For path-source entries that exist on disk, the plugin extractor is called recursively so
|
|
13
|
+
* discovered.plugins is fully populated. Remote entries (git, npm, unknown) are declarations
|
|
14
|
+
* only — they are never fetched.
|
|
15
|
+
*/
|
|
16
|
+
export async function extractClaudeMarketplaceInventory(marketplacePath) {
|
|
17
|
+
const absolute = safePath.resolve(marketplacePath);
|
|
18
|
+
const parseErrors = [];
|
|
19
|
+
const manifestFilePath = safePath.join(absolute, '.claude-plugin', MARKETPLACE_JSON);
|
|
20
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- absolute is resolved from caller-supplied path
|
|
21
|
+
if (!existsSync(manifestFilePath)) {
|
|
22
|
+
parseErrors.push({ path: manifestFilePath, message: 'marketplace.json not found' });
|
|
23
|
+
return new ClaudeMarketplaceInventory({
|
|
24
|
+
path: absolute,
|
|
25
|
+
manifest: {},
|
|
26
|
+
declared: { plugins: [] },
|
|
27
|
+
discovered: { plugins: [] },
|
|
28
|
+
parseErrors,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
let raw;
|
|
32
|
+
try {
|
|
33
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- absolute path resolved from marketplace root
|
|
34
|
+
raw = JSON.parse(await readFile(manifestFilePath, 'utf-8'));
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
parseErrors.push({ path: manifestFilePath, message: e.message });
|
|
38
|
+
return new ClaudeMarketplaceInventory({
|
|
39
|
+
path: absolute,
|
|
40
|
+
manifest: {},
|
|
41
|
+
declared: { plugins: [] },
|
|
42
|
+
discovered: { plugins: [] },
|
|
43
|
+
parseErrors,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
const result = MarketplaceManifestSchema.safeParse(raw);
|
|
47
|
+
const data = result.success ? result.data : raw;
|
|
48
|
+
if (!result.success) {
|
|
49
|
+
parseErrors.push({
|
|
50
|
+
path: manifestFilePath,
|
|
51
|
+
message: `marketplace.json schema validation failed: ${result.error.issues.map(i => i.message).join('; ')}`,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
const manifest = {
|
|
55
|
+
...(typeof data['name'] === 'string' && { name: data['name'] }),
|
|
56
|
+
...(typeof data['description'] === 'string' && { description: data['description'] }),
|
|
57
|
+
};
|
|
58
|
+
const pluginsRaw = data['plugins'] ?? [];
|
|
59
|
+
const declared = [];
|
|
60
|
+
const discovered = [];
|
|
61
|
+
for (const entry of pluginsRaw) {
|
|
62
|
+
const ref = pluginEntryToRef(absolute, entry);
|
|
63
|
+
declared.push(ref);
|
|
64
|
+
if (ref.source === 'path' && ref.exists) {
|
|
65
|
+
discovered.push(await extractClaudePluginInventory(ref.resolvedPath));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return new ClaudeMarketplaceInventory({
|
|
69
|
+
path: absolute,
|
|
70
|
+
manifest,
|
|
71
|
+
declared: { plugins: declared },
|
|
72
|
+
discovered: { plugins: discovered },
|
|
73
|
+
parseErrors,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
function strField(obj, key, fallback) {
|
|
77
|
+
const v = obj[key];
|
|
78
|
+
return typeof v === 'string' ? v : fallback;
|
|
79
|
+
}
|
|
80
|
+
function pluginEntryToRef(base, entry) {
|
|
81
|
+
if (typeof entry !== 'object' || entry === null) {
|
|
82
|
+
return { manifestPath: '', resolvedPath: '', exists: false, source: 'unknown' };
|
|
83
|
+
}
|
|
84
|
+
const e = entry;
|
|
85
|
+
const source = e['source'];
|
|
86
|
+
if (typeof source === 'string') {
|
|
87
|
+
const resolved = safePath.resolve(base, source);
|
|
88
|
+
return {
|
|
89
|
+
manifestPath: source,
|
|
90
|
+
resolvedPath: resolved,
|
|
91
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- resolved from marketplace-relative path entry
|
|
92
|
+
exists: existsSync(resolved),
|
|
93
|
+
source: 'path',
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
if (typeof source === 'object' && source !== null) {
|
|
97
|
+
const obj = source;
|
|
98
|
+
const kind = strField(obj, 'source', 'unknown');
|
|
99
|
+
switch (kind) {
|
|
100
|
+
case 'github':
|
|
101
|
+
return {
|
|
102
|
+
manifestPath: `github:${strField(obj, 'repo', '')}`,
|
|
103
|
+
resolvedPath: '',
|
|
104
|
+
exists: false,
|
|
105
|
+
source: 'git',
|
|
106
|
+
};
|
|
107
|
+
case 'url':
|
|
108
|
+
return {
|
|
109
|
+
manifestPath: strField(obj, 'url', ''),
|
|
110
|
+
resolvedPath: '',
|
|
111
|
+
exists: false,
|
|
112
|
+
source: 'git',
|
|
113
|
+
};
|
|
114
|
+
case 'npm':
|
|
115
|
+
return {
|
|
116
|
+
manifestPath: `npm:${strField(obj, 'package', '')}`,
|
|
117
|
+
resolvedPath: '',
|
|
118
|
+
exists: false,
|
|
119
|
+
source: 'npm',
|
|
120
|
+
};
|
|
121
|
+
case 'pip':
|
|
122
|
+
return {
|
|
123
|
+
manifestPath: `pip:${strField(obj, 'package', '')}`,
|
|
124
|
+
resolvedPath: '',
|
|
125
|
+
exists: false,
|
|
126
|
+
source: 'unknown',
|
|
127
|
+
};
|
|
128
|
+
default:
|
|
129
|
+
return {
|
|
130
|
+
manifestPath: `${kind}:${strField(obj, 'package', '')}`,
|
|
131
|
+
resolvedPath: '',
|
|
132
|
+
exists: false,
|
|
133
|
+
source: 'unknown',
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return { manifestPath: '', resolvedPath: '', exists: false, source: 'unknown' };
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=extract-marketplace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-marketplace.js","sourceRoot":"","sources":["../../src/inventory/extract-marketplace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ClaudePluginInventory } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build a PluginInventory for a directory containing a .claude-plugin/plugin.json manifest
|
|
4
|
+
* and/or a root SKILL.md. Never throws — all failures surface via parseErrors[].
|
|
5
|
+
*/
|
|
6
|
+
export declare function extractClaudePluginInventory(pluginPath: string): Promise<ClaudePluginInventory>;
|
|
7
|
+
//# sourceMappingURL=extract-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-plugin.d.ts","sourceRoot":"","sources":["../../src/inventory/extract-plugin.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAQnD;;;GAGG;AACH,wBAAsB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA2CrG"}
|