skillpkg-core 0.2.1 → 0.4.0

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 (78) hide show
  1. package/dist/config/config-manager.d.ts +83 -0
  2. package/dist/config/config-manager.d.ts.map +1 -0
  3. package/dist/config/config-manager.js +220 -0
  4. package/dist/config/config-manager.js.map +1 -0
  5. package/dist/config/index.d.ts +23 -0
  6. package/dist/config/index.d.ts.map +1 -0
  7. package/dist/config/index.js +23 -0
  8. package/dist/config/index.js.map +1 -0
  9. package/dist/config/schemas/skillpkg.schema.json +103 -0
  10. package/dist/config/types.d.ts +69 -0
  11. package/dist/config/types.d.ts.map +1 -0
  12. package/dist/config/types.js +29 -0
  13. package/dist/config/types.js.map +1 -0
  14. package/dist/index.d.ts +6 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +11 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/installer/index.d.ts +33 -0
  19. package/dist/installer/index.d.ts.map +1 -0
  20. package/dist/installer/index.js +33 -0
  21. package/dist/installer/index.js.map +1 -0
  22. package/dist/installer/installer.d.ts +54 -0
  23. package/dist/installer/installer.d.ts.map +1 -0
  24. package/dist/installer/installer.js +371 -0
  25. package/dist/installer/installer.js.map +1 -0
  26. package/dist/installer/types.d.ts +138 -0
  27. package/dist/installer/types.d.ts.map +1 -0
  28. package/dist/installer/types.js +2 -0
  29. package/dist/installer/types.js.map +1 -0
  30. package/dist/parser/schema.d.ts +26 -5
  31. package/dist/parser/schema.d.ts.map +1 -1
  32. package/dist/parser/schema.js +25 -3
  33. package/dist/parser/schema.js.map +1 -1
  34. package/dist/resolver/dependency-resolver.d.ts +59 -0
  35. package/dist/resolver/dependency-resolver.d.ts.map +1 -0
  36. package/dist/resolver/dependency-resolver.js +217 -0
  37. package/dist/resolver/dependency-resolver.js.map +1 -0
  38. package/dist/resolver/index.d.ts +35 -0
  39. package/dist/resolver/index.d.ts.map +1 -0
  40. package/dist/resolver/index.js +34 -0
  41. package/dist/resolver/index.js.map +1 -0
  42. package/dist/resolver/install-plan.d.ts +107 -0
  43. package/dist/resolver/install-plan.d.ts.map +1 -0
  44. package/dist/resolver/install-plan.js +137 -0
  45. package/dist/resolver/install-plan.js.map +1 -0
  46. package/dist/resolver/types.d.ts +76 -0
  47. package/dist/resolver/types.d.ts.map +1 -0
  48. package/dist/resolver/types.js +5 -0
  49. package/dist/resolver/types.js.map +1 -0
  50. package/dist/state/index.d.ts +30 -0
  51. package/dist/state/index.d.ts.map +1 -0
  52. package/dist/state/index.js +30 -0
  53. package/dist/state/index.js.map +1 -0
  54. package/dist/state/state-manager.d.ts +105 -0
  55. package/dist/state/state-manager.d.ts.map +1 -0
  56. package/dist/state/state-manager.js +242 -0
  57. package/dist/state/state-manager.js.map +1 -0
  58. package/dist/state/types.d.ts +86 -0
  59. package/dist/state/types.d.ts.map +1 -0
  60. package/dist/state/types.js +21 -0
  61. package/dist/state/types.js.map +1 -0
  62. package/dist/syncer/index.d.ts +28 -0
  63. package/dist/syncer/index.d.ts.map +1 -0
  64. package/dist/syncer/index.js +28 -0
  65. package/dist/syncer/index.js.map +1 -0
  66. package/dist/syncer/syncer.d.ts +74 -0
  67. package/dist/syncer/syncer.d.ts.map +1 -0
  68. package/dist/syncer/syncer.js +405 -0
  69. package/dist/syncer/syncer.js.map +1 -0
  70. package/dist/syncer/types.d.ts +143 -0
  71. package/dist/syncer/types.d.ts.map +1 -0
  72. package/dist/syncer/types.js +84 -0
  73. package/dist/syncer/types.js.map +1 -0
  74. package/dist/types.d.ts +27 -2
  75. package/dist/types.d.ts.map +1 -1
  76. package/dist/types.js +25 -0
  77. package/dist/types.js.map +1 -1
  78. package/package.json +9 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/installer/types.ts"],"names":[],"mappings":""}
@@ -138,11 +138,32 @@ export declare const skillSchema: {
138
138
  readonly description: "Platform-specific configurations";
139
139
  };
140
140
  readonly dependencies: {
141
- readonly type: "object";
142
- readonly additionalProperties: {
143
- readonly type: "string";
144
- };
145
- readonly description: "Skill dependencies with version ranges";
141
+ readonly oneOf: readonly [{
142
+ readonly type: "object";
143
+ readonly additionalProperties: {
144
+ readonly type: "string";
145
+ };
146
+ }, {
147
+ readonly type: "object";
148
+ readonly properties: {
149
+ readonly skills: {
150
+ readonly type: "array";
151
+ readonly items: {
152
+ readonly type: "string";
153
+ };
154
+ readonly description: "Skill dependencies (names or sources)";
155
+ };
156
+ readonly mcp: {
157
+ readonly type: "array";
158
+ readonly items: {
159
+ readonly type: "string";
160
+ };
161
+ readonly description: "MCP server dependencies";
162
+ };
163
+ };
164
+ readonly additionalProperties: false;
165
+ }];
166
+ readonly description: "Skill and MCP dependencies";
146
167
  };
147
168
  };
148
169
  readonly required: readonly ["schema", "name", "version", "description", "instructions"];
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/parser/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwHd,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAcpD,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/parser/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Id,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAcpD,CAAC"}
@@ -118,9 +118,31 @@ export const skillSchema = {
118
118
  description: 'Platform-specific configurations',
119
119
  },
120
120
  dependencies: {
121
- type: 'object',
122
- additionalProperties: { type: 'string' },
123
- description: 'Skill dependencies with version ranges',
121
+ oneOf: [
122
+ {
123
+ // Legacy format: Record<string, string> (name -> version)
124
+ type: 'object',
125
+ additionalProperties: { type: 'string' },
126
+ },
127
+ {
128
+ // New format: { skills?: string[], mcp?: string[] }
129
+ type: 'object',
130
+ properties: {
131
+ skills: {
132
+ type: 'array',
133
+ items: { type: 'string' },
134
+ description: 'Skill dependencies (names or sources)',
135
+ },
136
+ mcp: {
137
+ type: 'array',
138
+ items: { type: 'string' },
139
+ description: 'MCP server dependencies',
140
+ },
141
+ },
142
+ additionalProperties: false,
143
+ },
144
+ ],
145
+ description: 'Skill and MCP dependencies',
124
146
  },
125
147
  },
126
148
  required: ['schema', 'name', 'version', 'description', 'instructions'],
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/parser/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/parser/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * DependencyResolver - Resolve skill and MCP dependencies
3
+ */
4
+ import type { DependencyNode, ResolutionResult, SkillFetcher, SkillMetadata } from './types.js';
5
+ import { type SkillDependencies } from '../types.js';
6
+ /**
7
+ * DependencyResolver class
8
+ */
9
+ export declare class DependencyResolver {
10
+ private fetcher;
11
+ constructor(fetcher: SkillFetcher);
12
+ /**
13
+ * Resolve all dependencies for a skill source
14
+ * Returns dependencies in topological order (dependencies first)
15
+ */
16
+ resolveDependencies(skillSource: string, installed?: Set<string>): Promise<ResolutionResult>;
17
+ /**
18
+ * Recursive dependency resolution with circular detection
19
+ */
20
+ private resolveRecursive;
21
+ /**
22
+ * Build a dependency tree for visualization
23
+ */
24
+ buildDependencyTree(skillSource: string, installed?: Set<string>): Promise<DependencyNode | null>;
25
+ /**
26
+ * Recursive tree building
27
+ */
28
+ private buildTreeRecursive;
29
+ /**
30
+ * Detect circular dependencies
31
+ * Returns the circular chain if found, null otherwise
32
+ */
33
+ detectCircular(skillSource: string): Promise<string[] | null>;
34
+ /**
35
+ * Get direct dependencies (not transitive)
36
+ */
37
+ getDirectDependencies(skillSource: string): Promise<SkillDependencies>;
38
+ /**
39
+ * Extract skill name from source
40
+ * e.g., "github:user/skill-name" -> "skill-name"
41
+ */
42
+ private extractSkillName;
43
+ }
44
+ /**
45
+ * Circular dependency error
46
+ */
47
+ export declare class CircularDependencyError extends Error {
48
+ readonly chain: string[];
49
+ constructor(chain: string[]);
50
+ }
51
+ /**
52
+ * Create a DependencyResolver instance
53
+ */
54
+ export declare function createDependencyResolver(fetcher: SkillFetcher): DependencyResolver;
55
+ /**
56
+ * Create a mock fetcher for testing
57
+ */
58
+ export declare function createMockFetcher(skills: Map<string, SkillMetadata>): SkillFetcher;
59
+ //# sourceMappingURL=dependency-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-resolver.d.ts","sourceRoot":"","sources":["../../src/resolver/dependency-resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAEV,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE5E;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,EAAE,YAAY;IAIjC;;;OAGG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,GAAG,CAAC,MAAM,CAAa,GACjC,OAAO,CAAC,gBAAgB,CAAC;IAwC5B;;OAEG;YACW,gBAAgB;IA+E9B;;OAEG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,GAAG,CAAC,MAAM,CAAa,GACjC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAKjC;;OAEG;YACW,kBAAkB;IAuChC;;;OAGG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAKnE;;OAEG;IACG,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQ5E;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAqBzB;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;gBAEb,KAAK,EAAE,MAAM,EAAE;CAK5B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,YAAY,GAAG,kBAAkB,CAElF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GACjC,YAAY,CAkBd"}
@@ -0,0 +1,217 @@
1
+ import { normalizeDependencies } from '../types.js';
2
+ /**
3
+ * DependencyResolver class
4
+ */
5
+ export class DependencyResolver {
6
+ fetcher;
7
+ constructor(fetcher) {
8
+ this.fetcher = fetcher;
9
+ }
10
+ /**
11
+ * Resolve all dependencies for a skill source
12
+ * Returns dependencies in topological order (dependencies first)
13
+ */
14
+ async resolveDependencies(skillSource, installed = new Set()) {
15
+ const result = {
16
+ dependencies: [],
17
+ mcpToInstall: [],
18
+ errors: [],
19
+ };
20
+ const visited = new Set();
21
+ const inProgress = new Set(); // For circular detection
22
+ const resolved = [];
23
+ try {
24
+ await this.resolveRecursive(skillSource, installed, visited, inProgress, resolved, result, null);
25
+ // resolved is already in topological order (dependencies first)
26
+ // because we push after processing all children (post-order traversal)
27
+ result.dependencies = resolved;
28
+ // Deduplicate MCP dependencies
29
+ result.mcpToInstall = [...new Set(result.mcpToInstall)];
30
+ }
31
+ catch (error) {
32
+ if (error instanceof CircularDependencyError) {
33
+ result.circularChain = error.chain;
34
+ result.errors.push(`Circular dependency detected: ${error.chain.join(' → ')}`);
35
+ }
36
+ else {
37
+ result.errors.push(String(error));
38
+ }
39
+ }
40
+ return result;
41
+ }
42
+ /**
43
+ * Recursive dependency resolution with circular detection
44
+ */
45
+ async resolveRecursive(source, installed, visited, inProgress, resolved, result, requiredBy) {
46
+ // Normalize source to skill name for deduplication
47
+ const skillName = this.extractSkillName(source);
48
+ // Skip if already installed
49
+ if (installed.has(skillName)) {
50
+ return;
51
+ }
52
+ // Skip if already resolved
53
+ if (visited.has(skillName)) {
54
+ return;
55
+ }
56
+ // Check for circular dependency
57
+ if (inProgress.has(skillName)) {
58
+ const chain = [...inProgress, skillName];
59
+ throw new CircularDependencyError(chain);
60
+ }
61
+ // Mark as in progress
62
+ inProgress.add(skillName);
63
+ try {
64
+ // Fetch skill metadata
65
+ const metadata = await this.fetcher.fetchMetadata(source);
66
+ if (!metadata) {
67
+ result.errors.push(`Failed to fetch metadata for: ${source}`);
68
+ return;
69
+ }
70
+ // Normalize dependencies
71
+ const deps = normalizeDependencies(metadata.dependencies);
72
+ // Process skill dependencies first (depth-first)
73
+ for (const depSource of deps.skills || []) {
74
+ await this.resolveRecursive(depSource, installed, visited, inProgress, resolved, result, skillName);
75
+ }
76
+ // Collect MCP dependencies
77
+ for (const mcp of deps.mcp || []) {
78
+ if (!result.mcpToInstall.includes(mcp)) {
79
+ result.mcpToInstall.push(mcp);
80
+ }
81
+ }
82
+ // Add this skill to resolved list
83
+ resolved.push({
84
+ name: skillName,
85
+ source,
86
+ type: 'skill',
87
+ transitive: requiredBy !== null,
88
+ requiredBy: requiredBy || undefined,
89
+ });
90
+ }
91
+ finally {
92
+ // Remove from in progress
93
+ inProgress.delete(skillName);
94
+ // Mark as visited
95
+ visited.add(skillName);
96
+ }
97
+ }
98
+ /**
99
+ * Build a dependency tree for visualization
100
+ */
101
+ async buildDependencyTree(skillSource, installed = new Set()) {
102
+ const visited = new Set();
103
+ return this.buildTreeRecursive(skillSource, installed, visited);
104
+ }
105
+ /**
106
+ * Recursive tree building
107
+ */
108
+ async buildTreeRecursive(source, installed, visited) {
109
+ const skillName = this.extractSkillName(source);
110
+ // Prevent infinite loops
111
+ if (visited.has(skillName)) {
112
+ return null;
113
+ }
114
+ visited.add(skillName);
115
+ // Fetch metadata
116
+ const metadata = await this.fetcher.fetchMetadata(source);
117
+ if (!metadata) {
118
+ return null;
119
+ }
120
+ const deps = normalizeDependencies(metadata.dependencies);
121
+ const children = [];
122
+ // Recursively build children
123
+ for (const depSource of deps.skills || []) {
124
+ const child = await this.buildTreeRecursive(depSource, installed, visited);
125
+ if (child) {
126
+ children.push(child);
127
+ }
128
+ }
129
+ return {
130
+ name: metadata.name,
131
+ version: metadata.version,
132
+ source,
133
+ dependencies: children,
134
+ mcpDependencies: deps.mcp || [],
135
+ };
136
+ }
137
+ /**
138
+ * Detect circular dependencies
139
+ * Returns the circular chain if found, null otherwise
140
+ */
141
+ async detectCircular(skillSource) {
142
+ const result = await this.resolveDependencies(skillSource);
143
+ return result.circularChain || null;
144
+ }
145
+ /**
146
+ * Get direct dependencies (not transitive)
147
+ */
148
+ async getDirectDependencies(skillSource) {
149
+ const metadata = await this.fetcher.fetchMetadata(skillSource);
150
+ if (!metadata) {
151
+ return { skills: [], mcp: [] };
152
+ }
153
+ return normalizeDependencies(metadata.dependencies);
154
+ }
155
+ /**
156
+ * Extract skill name from source
157
+ * e.g., "github:user/skill-name" -> "skill-name"
158
+ */
159
+ extractSkillName(source) {
160
+ // GitHub format: github:user/repo
161
+ if (source.startsWith('github:')) {
162
+ const parts = source.replace('github:', '').split('/');
163
+ return parts[parts.length - 1];
164
+ }
165
+ // URL format: https://github.com/user/repo
166
+ if (source.startsWith('http://') || source.startsWith('https://')) {
167
+ try {
168
+ const url = new URL(source);
169
+ const parts = url.pathname.split('/').filter(Boolean);
170
+ return parts[parts.length - 1] || source;
171
+ }
172
+ catch {
173
+ return source;
174
+ }
175
+ }
176
+ // Local path or skill name
177
+ return source.split('/').pop() || source;
178
+ }
179
+ }
180
+ /**
181
+ * Circular dependency error
182
+ */
183
+ export class CircularDependencyError extends Error {
184
+ chain;
185
+ constructor(chain) {
186
+ super(`Circular dependency detected: ${chain.join(' → ')}`);
187
+ this.name = 'CircularDependencyError';
188
+ this.chain = chain;
189
+ }
190
+ }
191
+ /**
192
+ * Create a DependencyResolver instance
193
+ */
194
+ export function createDependencyResolver(fetcher) {
195
+ return new DependencyResolver(fetcher);
196
+ }
197
+ /**
198
+ * Create a mock fetcher for testing
199
+ */
200
+ export function createMockFetcher(skills) {
201
+ return {
202
+ async fetchMetadata(source) {
203
+ // Try exact match first
204
+ if (skills.has(source)) {
205
+ return skills.get(source) || null;
206
+ }
207
+ // Try by name
208
+ for (const [key, metadata] of skills.entries()) {
209
+ if (metadata.name === source || key.endsWith(`/${source}`)) {
210
+ return metadata;
211
+ }
212
+ }
213
+ return null;
214
+ },
215
+ };
216
+ }
217
+ //# sourceMappingURL=dependency-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../src/resolver/dependency-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Resolver module - Dependency resolution for skills and MCPs
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { DependencyResolver, createDependencyResolver, createInstallPlan } from '@skillpkg/core';
7
+ *
8
+ * const fetcher = {
9
+ * async fetchMetadata(source) {
10
+ * // Fetch skill metadata from source
11
+ * return { name: 'my-skill', version: '1.0.0' };
12
+ * }
13
+ * };
14
+ *
15
+ * const resolver = createDependencyResolver(fetcher);
16
+ *
17
+ * // Resolve all dependencies
18
+ * const result = await resolver.resolveDependencies('github:user/my-skill');
19
+ *
20
+ * // Create install plan
21
+ * const plan = createInstallPlan(result);
22
+ * console.log(formatInstallPlan(plan));
23
+ *
24
+ * // Check for circular dependencies
25
+ * const circular = await resolver.detectCircular('github:user/my-skill');
26
+ * if (circular) {
27
+ * console.log('Circular dependency:', circular.join(' → '));
28
+ * }
29
+ * ```
30
+ */
31
+ export type { ResolvedDependency, DependencyNode, ResolutionResult, McpResolutionResult, SkillFetcher, SkillMetadata, } from './types.js';
32
+ export { DependencyResolver, CircularDependencyError, createDependencyResolver, createMockFetcher, } from './dependency-resolver.js';
33
+ export type { InstallStep, McpRequirement, InstallPlan, InstallStepResult, InstallPlanResult, } from './install-plan.js';
34
+ export { createInstallPlan, recordDependencyInstall, getSkillsToInstall, getInstallCount, hasMcpRequirements, formatInstallPlan, } from './install-plan.js';
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EACV,WAAW,EACX,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Resolver module - Dependency resolution for skills and MCPs
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { DependencyResolver, createDependencyResolver, createInstallPlan } from '@skillpkg/core';
7
+ *
8
+ * const fetcher = {
9
+ * async fetchMetadata(source) {
10
+ * // Fetch skill metadata from source
11
+ * return { name: 'my-skill', version: '1.0.0' };
12
+ * }
13
+ * };
14
+ *
15
+ * const resolver = createDependencyResolver(fetcher);
16
+ *
17
+ * // Resolve all dependencies
18
+ * const result = await resolver.resolveDependencies('github:user/my-skill');
19
+ *
20
+ * // Create install plan
21
+ * const plan = createInstallPlan(result);
22
+ * console.log(formatInstallPlan(plan));
23
+ *
24
+ * // Check for circular dependencies
25
+ * const circular = await resolver.detectCircular('github:user/my-skill');
26
+ * if (circular) {
27
+ * console.log('Circular dependency:', circular.join(' → '));
28
+ * }
29
+ * ```
30
+ */
31
+ // DependencyResolver
32
+ export { DependencyResolver, CircularDependencyError, createDependencyResolver, createMockFetcher, } from './dependency-resolver.js';
33
+ export { createInstallPlan, recordDependencyInstall, getSkillsToInstall, getInstallCount, hasMcpRequirements, formatInstallPlan, } from './install-plan.js';
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAYH,qBAAqB;AACrB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAWlC,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * InstallPlan - Prepare installation plan from resolved dependencies
3
+ *
4
+ * This module bridges the gap between DependencyResolver and the actual
5
+ * installation process. It creates a plan that can be executed by the installer.
6
+ */
7
+ import type { ResolutionResult } from './types.js';
8
+ import type { StateManager } from '../state/index.js';
9
+ /**
10
+ * A single step in the install plan
11
+ */
12
+ export interface InstallStep {
13
+ /** Skill name */
14
+ name: string;
15
+ /** Source to install from (github:user/repo, URL, etc.) */
16
+ source: string;
17
+ /** Whether this is a transitive dependency */
18
+ isTransitive: boolean;
19
+ /** The skill that requires this dependency (for transitive deps) */
20
+ requiredBy?: string;
21
+ /** Action to take */
22
+ action: 'install' | 'skip';
23
+ /** Reason for skipping (if action is 'skip') */
24
+ skipReason?: string;
25
+ }
26
+ /**
27
+ * MCP dependency that needs attention
28
+ */
29
+ export interface McpRequirement {
30
+ /** MCP server name */
31
+ name: string;
32
+ /** Skills that require this MCP */
33
+ requiredBy: string[];
34
+ }
35
+ /**
36
+ * Complete installation plan
37
+ */
38
+ export interface InstallPlan {
39
+ /** Steps to execute in order */
40
+ steps: InstallStep[];
41
+ /** MCP servers that need to be installed */
42
+ mcpRequirements: McpRequirement[];
43
+ /** Whether there were any errors during planning */
44
+ hasErrors: boolean;
45
+ /** Error messages */
46
+ errors: string[];
47
+ /** Circular dependency chain if detected */
48
+ circularChain?: string[];
49
+ }
50
+ /**
51
+ * Result of executing an install step
52
+ */
53
+ export interface InstallStepResult {
54
+ step: InstallStep;
55
+ success: boolean;
56
+ error?: string;
57
+ /** Version that was installed */
58
+ version?: string;
59
+ }
60
+ /**
61
+ * Result of executing the full install plan
62
+ */
63
+ export interface InstallPlanResult {
64
+ /** Successfully installed skills */
65
+ installed: InstallStepResult[];
66
+ /** Failed installations */
67
+ failed: InstallStepResult[];
68
+ /** Skipped skills */
69
+ skipped: InstallStep[];
70
+ /** MCP requirements (not auto-installed) */
71
+ mcpRequirements: McpRequirement[];
72
+ /** Overall success */
73
+ success: boolean;
74
+ }
75
+ /**
76
+ * Create an install plan from resolution result
77
+ */
78
+ export declare function createInstallPlan(resolution: ResolutionResult, installedSkills?: Set<string>): InstallPlan;
79
+ /**
80
+ * Record dependencies in state after successful installation
81
+ *
82
+ * Call this after each skill is successfully installed to update
83
+ * the dependency tracking in state.
84
+ *
85
+ * @param projectPath - Path to the project root
86
+ * @param stateManager - StateManager instance
87
+ * @param step - The install step that was completed
88
+ * @param version - Version that was installed
89
+ */
90
+ export declare function recordDependencyInstall(projectPath: string, stateManager: StateManager, step: InstallStep, version: string): Promise<void>;
91
+ /**
92
+ * Get skills that would be installed (excluding skipped)
93
+ */
94
+ export declare function getSkillsToInstall(plan: InstallPlan): InstallStep[];
95
+ /**
96
+ * Get count of skills to install
97
+ */
98
+ export declare function getInstallCount(plan: InstallPlan): number;
99
+ /**
100
+ * Check if plan has any MCP requirements
101
+ */
102
+ export declare function hasMcpRequirements(plan: InstallPlan): boolean;
103
+ /**
104
+ * Format plan for display
105
+ */
106
+ export declare function formatInstallPlan(plan: InstallPlan): string;
107
+ //# sourceMappingURL=install-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-plan.d.ts","sourceRoot":"","sources":["../../src/resolver/install-plan.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,YAAY,EAAE,OAAO,CAAC;IACtB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,4CAA4C;IAC5C,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,2BAA2B;IAC3B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,qBAAqB;IACrB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,4CAA4C;IAC5C,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,sBAAsB;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,gBAAgB,EAC5B,eAAe,GAAE,GAAG,CAAC,MAAM,CAAa,GACvC,WAAW,CAgDb;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,EAAE,CAEnE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAyC3D"}