@sowonai/crewx-sdk 0.1.0-dev.3 → 0.1.0-dev.30

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 (84) hide show
  1. package/README.md +28 -0
  2. package/dist/config/yaml-loader.js +6 -2
  3. package/dist/config/yaml-loader.js.map +1 -1
  4. package/dist/conversation/conversation-history.interface.d.ts +6 -4
  5. package/dist/core/agent/agent-factory.d.ts +7 -7
  6. package/dist/core/agent/agent-factory.js +23 -0
  7. package/dist/core/agent/agent-factory.js.map +1 -1
  8. package/dist/core/agent/agent-runtime.d.ts +18 -2
  9. package/dist/core/agent/agent-runtime.js +128 -24
  10. package/dist/core/agent/agent-runtime.js.map +1 -1
  11. package/dist/core/agent/index.d.ts +1 -1
  12. package/dist/core/agent/index.js +2 -1
  13. package/dist/core/agent/index.js.map +1 -1
  14. package/dist/core/providers/ai-provider.interface.d.ts +1 -0
  15. package/dist/core/providers/ai-provider.interface.js.map +1 -1
  16. package/dist/core/providers/base-ai.provider.d.ts +7 -0
  17. package/dist/core/providers/base-ai.provider.js +8 -4
  18. package/dist/core/providers/base-ai.provider.js.map +1 -1
  19. package/dist/core/providers/dynamic-provider.factory.d.ts +64 -0
  20. package/dist/core/providers/dynamic-provider.factory.js +533 -0
  21. package/dist/core/providers/dynamic-provider.factory.js.map +1 -0
  22. package/dist/core/providers/index.d.ts +3 -0
  23. package/dist/core/providers/index.js +7 -1
  24. package/dist/core/providers/index.js.map +1 -1
  25. package/dist/core/providers/mock.provider.d.ts +13 -0
  26. package/dist/core/providers/mock.provider.js +55 -0
  27. package/dist/core/providers/mock.provider.js.map +1 -0
  28. package/dist/core/providers/provider-factory.d.ts +3 -0
  29. package/dist/core/providers/provider-factory.js +27 -0
  30. package/dist/core/providers/provider-factory.js.map +1 -0
  31. package/dist/index.d.ts +17 -4
  32. package/dist/index.js +31 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/schema/skills-parser.d.ts +8 -0
  35. package/dist/schema/skills-parser.js +421 -0
  36. package/dist/schema/skills-parser.js.map +1 -0
  37. package/dist/schema/skills.types.d.ts +144 -0
  38. package/dist/schema/skills.types.js +41 -0
  39. package/dist/schema/skills.types.js.map +1 -0
  40. package/dist/services/index.d.ts +2 -0
  41. package/dist/services/index.js +19 -0
  42. package/dist/services/index.js.map +1 -0
  43. package/dist/services/layout-loader.service.d.ts +18 -0
  44. package/dist/services/layout-loader.service.js +266 -0
  45. package/dist/services/layout-loader.service.js.map +1 -0
  46. package/dist/services/layout-renderer.service.d.ts +25 -0
  47. package/dist/services/layout-renderer.service.js +226 -0
  48. package/dist/services/layout-renderer.service.js.map +1 -0
  49. package/dist/services/props-validator.service.d.ts +29 -0
  50. package/dist/services/props-validator.service.js +332 -0
  51. package/dist/services/props-validator.service.js.map +1 -0
  52. package/dist/skills/adapter/claude-skill-adapter.d.ts +11 -0
  53. package/dist/skills/adapter/claude-skill-adapter.js +222 -0
  54. package/dist/skills/adapter/claude-skill-adapter.js.map +1 -0
  55. package/dist/skills/index.d.ts +6 -0
  56. package/dist/skills/index.js +31 -0
  57. package/dist/skills/index.js.map +1 -0
  58. package/dist/skills/runtime/progressive-loader.d.ts +27 -0
  59. package/dist/skills/runtime/progressive-loader.js +186 -0
  60. package/dist/skills/runtime/progressive-loader.js.map +1 -0
  61. package/dist/skills/runtime/runtime-requirements-validator.d.ts +23 -0
  62. package/dist/skills/runtime/runtime-requirements-validator.js +248 -0
  63. package/dist/skills/runtime/runtime-requirements-validator.js.map +1 -0
  64. package/dist/skills/runtime/skill-runtime.service.d.ts +42 -0
  65. package/dist/skills/runtime/skill-runtime.service.js +434 -0
  66. package/dist/skills/runtime/skill-runtime.service.js.map +1 -0
  67. package/dist/types/agent.types.d.ts +10 -2
  68. package/dist/types/agent.types.js.map +1 -1
  69. package/dist/types/index.d.ts +3 -0
  70. package/dist/types/index.js +3 -0
  71. package/dist/types/index.js.map +1 -1
  72. package/dist/types/layout.types.d.ts +113 -0
  73. package/dist/types/layout.types.js +22 -0
  74. package/dist/types/layout.types.js.map +1 -0
  75. package/dist/types/provider.types.d.ts +12 -0
  76. package/dist/types/provider.types.js +3 -0
  77. package/dist/types/provider.types.js.map +1 -0
  78. package/dist/types/skill-runtime.types.d.ts +244 -0
  79. package/dist/types/skill-runtime.types.js +44 -0
  80. package/dist/types/skill-runtime.types.js.map +1 -0
  81. package/dist/types/template.types.d.ts +38 -0
  82. package/dist/types/template.types.js +3 -0
  83. package/dist/types/template.types.js.map +1 -0
  84. package/package.json +14 -13
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ClaudeSkillAdapter = void 0;
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const js_yaml_1 = __importDefault(require("js-yaml"));
10
+ class ClaudeSkillAdapter {
11
+ async extractMetadata(skillFilePath) {
12
+ try {
13
+ const content = await promises_1.default.readFile(skillFilePath, 'utf-8');
14
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
15
+ if (!frontmatterMatch) {
16
+ throw new Error('No YAML frontmatter found in skill file');
17
+ }
18
+ const frontmatter = js_yaml_1.default.load(frontmatterMatch[1] || '');
19
+ if (!frontmatter.name) {
20
+ throw new Error('Skill name is required in frontmatter');
21
+ }
22
+ if (!frontmatter.description) {
23
+ throw new Error('Skill description is required in frontmatter');
24
+ }
25
+ if (!frontmatter.version) {
26
+ throw new Error('Skill version is required in frontmatter');
27
+ }
28
+ return {
29
+ name: frontmatter.name,
30
+ description: frontmatter.description,
31
+ version: frontmatter.version,
32
+ dependencies: frontmatter.dependencies || [],
33
+ runtime: frontmatter.runtime || {},
34
+ visibility: frontmatter.visibility || 'public',
35
+ ...frontmatter
36
+ };
37
+ }
38
+ catch (error) {
39
+ throw new Error(`Failed to extract metadata from ${skillFilePath}: ${error.message}`);
40
+ }
41
+ }
42
+ parseContent(fullContent) {
43
+ try {
44
+ const contentWithoutFrontmatter = fullContent.replace(/^---\n[\s\S]*?\n---\n/, '');
45
+ const sections = {
46
+ role: this.extractSection(contentWithoutFrontmatter, 'Role'),
47
+ task: this.extractSection(contentWithoutFrontmatter, 'Task'),
48
+ instructions: this.extractSection(contentWithoutFrontmatter, 'Instructions'),
49
+ raw: contentWithoutFrontmatter
50
+ };
51
+ return sections;
52
+ }
53
+ catch (error) {
54
+ throw new Error(`Failed to parse skill content: ${error.message}`);
55
+ }
56
+ }
57
+ mapToCrewXAgent(skill) {
58
+ const { metadata, content } = skill;
59
+ let systemPrompt = '';
60
+ if (content?.role) {
61
+ systemPrompt += `## Role\n${content.role}\n\n`;
62
+ }
63
+ if (content?.task) {
64
+ systemPrompt += `## Task\n${content.task}\n\n`;
65
+ }
66
+ if (content?.instructions) {
67
+ systemPrompt += `## Instructions\n${content.instructions}\n\n`;
68
+ }
69
+ const capabilities = [];
70
+ if (metadata.runtime?.python) {
71
+ capabilities.push(`python:${metadata.runtime.python}`);
72
+ }
73
+ if (metadata.runtime?.node) {
74
+ capabilities.push(`node:${metadata.runtime.node}`);
75
+ }
76
+ if (metadata.runtime?.docker) {
77
+ capabilities.push('docker');
78
+ }
79
+ const agent = {
80
+ id: metadata.name,
81
+ name: this.formatDisplayName(metadata.name),
82
+ description: metadata.description,
83
+ provider: 'cli/claude',
84
+ capabilities: capabilities.length > 0 ? capabilities : undefined,
85
+ inline: {
86
+ type: 'agent',
87
+ version: metadata.version,
88
+ dependencies: metadata.dependencies,
89
+ system_prompt: systemPrompt.trim() || `You are ${metadata.name}, ${metadata.description.toLowerCase()}.`
90
+ }
91
+ };
92
+ return agent;
93
+ }
94
+ async validateSkillFile(filePath) {
95
+ const errors = [];
96
+ try {
97
+ const stats = await promises_1.default.stat(filePath);
98
+ if (!stats.isFile()) {
99
+ errors.push({
100
+ skillName: path_1.default.basename(filePath),
101
+ field: 'file',
102
+ message: 'Path is not a file',
103
+ actual: filePath
104
+ });
105
+ return { valid: false, errors };
106
+ }
107
+ if (!filePath.endsWith('.md')) {
108
+ errors.push({
109
+ skillName: path_1.default.basename(filePath),
110
+ field: 'extension',
111
+ message: 'Skill file must have .md extension',
112
+ actual: path_1.default.extname(filePath)
113
+ });
114
+ }
115
+ const content = await promises_1.default.readFile(filePath, 'utf-8');
116
+ if (!content.includes('---')) {
117
+ errors.push({
118
+ skillName: path_1.default.basename(filePath),
119
+ field: 'frontmatter',
120
+ message: 'Skill file must contain YAML frontmatter',
121
+ actual: 'missing'
122
+ });
123
+ }
124
+ try {
125
+ const metadata = await this.extractMetadata(filePath);
126
+ if (!/^[a-z0-9-]+$/.test(metadata.name)) {
127
+ errors.push({
128
+ skillName: metadata.name,
129
+ field: 'name',
130
+ message: 'Skill name must be kebab-case (lowercase letters, numbers, and hyphens only)',
131
+ actual: metadata.name
132
+ });
133
+ }
134
+ if (!/^\d+\.\d+\.\d+$/.test(metadata.version)) {
135
+ errors.push({
136
+ skillName: metadata.name,
137
+ field: 'version',
138
+ message: 'Version must follow semantic versioning (e.g., "1.0.0")',
139
+ actual: metadata.version
140
+ });
141
+ }
142
+ if (metadata.description.length < 10) {
143
+ errors.push({
144
+ skillName: metadata.name,
145
+ field: 'description',
146
+ message: 'Description must be at least 10 characters long',
147
+ actual: metadata.description
148
+ });
149
+ }
150
+ const parsedContent = this.parseContent(content);
151
+ if (!parsedContent.role && !parsedContent.task && !parsedContent.instructions) {
152
+ errors.push({
153
+ skillName: metadata.name,
154
+ field: 'content',
155
+ message: 'Skill must have at least one of: Role, Task, or Instructions section',
156
+ actual: 'missing sections'
157
+ });
158
+ }
159
+ }
160
+ catch (error) {
161
+ errors.push({
162
+ skillName: path_1.default.basename(filePath),
163
+ field: 'parsing',
164
+ message: `Failed to parse skill file: ${error.message}`,
165
+ actual: error.message
166
+ });
167
+ }
168
+ }
169
+ catch (error) {
170
+ errors.push({
171
+ skillName: path_1.default.basename(filePath),
172
+ field: 'file_access',
173
+ message: `Failed to read skill file: ${error.message}`,
174
+ actual: error.message
175
+ });
176
+ }
177
+ return {
178
+ valid: errors.length === 0,
179
+ errors
180
+ };
181
+ }
182
+ async discoverSkills(directory) {
183
+ try {
184
+ const entries = await promises_1.default.readdir(directory, { withFileTypes: true });
185
+ const skillFiles = [];
186
+ for (const entry of entries) {
187
+ if (entry.isFile() && entry.name.endsWith('.md')) {
188
+ const filePath = path_1.default.join(directory, entry.name);
189
+ try {
190
+ const content = await promises_1.default.readFile(filePath, 'utf-8');
191
+ if (content.includes('---') && content.includes('name:')) {
192
+ skillFiles.push(filePath);
193
+ }
194
+ }
195
+ catch {
196
+ continue;
197
+ }
198
+ }
199
+ }
200
+ return skillFiles;
201
+ }
202
+ catch (error) {
203
+ throw new Error(`Failed to discover skills in directory ${directory}: ${error.message}`);
204
+ }
205
+ }
206
+ extractSection(content, sectionName) {
207
+ const sectionRegex = new RegExp(`^##\\s*${sectionName}\\s*$\\n([\\s\\S]*?)(?=\\n##|\\n$|$)`, 'im');
208
+ const match = content.match(sectionRegex);
209
+ if (match && match[1]) {
210
+ return match[1].trim();
211
+ }
212
+ return undefined;
213
+ }
214
+ formatDisplayName(name) {
215
+ return name
216
+ .split('-')
217
+ .map(word => word.charAt(0).toUpperCase() + (word.slice(1) || ''))
218
+ .join(' ');
219
+ }
220
+ }
221
+ exports.ClaudeSkillAdapter = ClaudeSkillAdapter;
222
+ //# sourceMappingURL=claude-skill-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-skill-adapter.js","sourceRoot":"","sources":["../../../src/skills/adapter/claude-skill-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from '../types/skill-runtime.types';
2
+ export { ProgressiveSkillLoader } from './runtime/progressive-loader';
3
+ export { ClaudeSkillAdapter } from './adapter/claude-skill-adapter';
4
+ export { SystemRuntimeValidator, MockRuntimeValidator } from './runtime/runtime-requirements-validator';
5
+ export type { SkillMetadata, SkillContent, SkillDefinition, SkillsConfig, CrewxProjectConfig, AgentDefinition, SkillParserOptions, SkillManifest, } from '../schema/skills.types';
6
+ export { SkillLoadError, SkillNotFoundError, SkillDependencyError, SkillVersionMismatchError, } from '../schema/skills.types';
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.SkillVersionMismatchError = exports.SkillDependencyError = exports.SkillNotFoundError = exports.SkillLoadError = exports.MockRuntimeValidator = exports.SystemRuntimeValidator = exports.ClaudeSkillAdapter = exports.ProgressiveSkillLoader = void 0;
18
+ __exportStar(require("../types/skill-runtime.types"), exports);
19
+ var progressive_loader_1 = require("./runtime/progressive-loader");
20
+ Object.defineProperty(exports, "ProgressiveSkillLoader", { enumerable: true, get: function () { return progressive_loader_1.ProgressiveSkillLoader; } });
21
+ var claude_skill_adapter_1 = require("./adapter/claude-skill-adapter");
22
+ Object.defineProperty(exports, "ClaudeSkillAdapter", { enumerable: true, get: function () { return claude_skill_adapter_1.ClaudeSkillAdapter; } });
23
+ var runtime_requirements_validator_1 = require("./runtime/runtime-requirements-validator");
24
+ Object.defineProperty(exports, "SystemRuntimeValidator", { enumerable: true, get: function () { return runtime_requirements_validator_1.SystemRuntimeValidator; } });
25
+ Object.defineProperty(exports, "MockRuntimeValidator", { enumerable: true, get: function () { return runtime_requirements_validator_1.MockRuntimeValidator; } });
26
+ var skills_types_1 = require("../schema/skills.types");
27
+ Object.defineProperty(exports, "SkillLoadError", { enumerable: true, get: function () { return skills_types_1.SkillLoadError; } });
28
+ Object.defineProperty(exports, "SkillNotFoundError", { enumerable: true, get: function () { return skills_types_1.SkillNotFoundError; } });
29
+ Object.defineProperty(exports, "SkillDependencyError", { enumerable: true, get: function () { return skills_types_1.SkillDependencyError; } });
30
+ Object.defineProperty(exports, "SkillVersionMismatchError", { enumerable: true, get: function () { return skills_types_1.SkillVersionMismatchError; } });
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAQA,+DAA6C;AAG7C,mEAAsE;AAA7D,4HAAA,sBAAsB,OAAA;AAG/B,uEAAoE;AAA3D,0HAAA,kBAAkB,OAAA;AAG3B,2FAAwG;AAA/F,wIAAA,sBAAsB,OAAA;AAAE,sIAAA,oBAAoB,OAAA;AAcrD,uDAKgC;AAJ9B,8GAAA,cAAc,OAAA;AACd,kHAAA,kBAAkB,OAAA;AAClB,oHAAA,oBAAoB,OAAA;AACpB,yHAAA,yBAAyB,OAAA"}
@@ -0,0 +1,27 @@
1
+ import { IProgressiveSkillLoader } from '../../types/skill-runtime.types';
2
+ import { SkillMetadata, SkillDefinition } from '../../schema/skills.types';
3
+ import { ClaudeSkillAdapter } from '../adapter/claude-skill-adapter';
4
+ export declare class ProgressiveSkillLoader implements IProgressiveSkillLoader {
5
+ private readonly claudeAdapter;
6
+ private readonly metadataCache;
7
+ private readonly contentCache;
8
+ private readonly cacheTimestamps;
9
+ private readonly defaultTTL;
10
+ constructor(claudeAdapter: ClaudeSkillAdapter);
11
+ loadMetadata(skillPaths: string[]): Promise<SkillMetadata[]>;
12
+ loadFullContent(skillName: string): Promise<SkillDefinition>;
13
+ isFullyLoaded(skillName: string): boolean;
14
+ preloadContent(skillNames: string[]): Promise<void>;
15
+ clearContentCache(): Promise<void>;
16
+ getCacheStats(): {
17
+ metadataCache: number;
18
+ contentCache: number;
19
+ totalItems: number;
20
+ };
21
+ clearAllCaches(): void;
22
+ cleanupExpiredCache(): void;
23
+ private loadMetadataFromPath;
24
+ private deduplicateMetadata;
25
+ private findSkillFile;
26
+ private isCacheExpired;
27
+ }
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ProgressiveSkillLoader = void 0;
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ class ProgressiveSkillLoader {
9
+ constructor(claudeAdapter) {
10
+ this.metadataCache = new Map();
11
+ this.contentCache = new Map();
12
+ this.cacheTimestamps = new Map();
13
+ this.defaultTTL = 30 * 60 * 1000;
14
+ this.claudeAdapter = claudeAdapter;
15
+ }
16
+ async loadMetadata(skillPaths) {
17
+ const allMetadata = [];
18
+ for (const skillPath of skillPaths) {
19
+ try {
20
+ const metadata = await this.loadMetadataFromPath(skillPath);
21
+ allMetadata.push(...metadata);
22
+ }
23
+ catch (error) {
24
+ console.warn(`Failed to load metadata from ${skillPath}:`, error);
25
+ }
26
+ }
27
+ const uniqueMetadata = this.deduplicateMetadata(allMetadata);
28
+ for (const metadata of uniqueMetadata) {
29
+ this.metadataCache.set(metadata.name, metadata);
30
+ this.cacheTimestamps.set(`metadata:${metadata.name}`, Date.now());
31
+ }
32
+ return uniqueMetadata;
33
+ }
34
+ async loadFullContent(skillName) {
35
+ const cached = this.contentCache.get(skillName);
36
+ if (cached && !this.isCacheExpired(`content:${skillName}`)) {
37
+ return cached;
38
+ }
39
+ const metadata = this.metadataCache.get(skillName);
40
+ if (!metadata) {
41
+ throw new Error(`Skill "${skillName}" not found. Load metadata first.`);
42
+ }
43
+ const skillFilePath = await this.findSkillFile(skillName);
44
+ if (!skillFilePath) {
45
+ throw new Error(`Skill file for "${skillName}" not found`);
46
+ }
47
+ try {
48
+ const fullContent = await promises_1.default.readFile(skillFilePath, 'utf-8');
49
+ const content = this.claudeAdapter.parseContent(fullContent);
50
+ const definition = {
51
+ metadata,
52
+ content,
53
+ filePath: skillFilePath,
54
+ fullyLoaded: true
55
+ };
56
+ this.contentCache.set(skillName, definition);
57
+ this.cacheTimestamps.set(`content:${skillName}`, Date.now());
58
+ return definition;
59
+ }
60
+ catch (error) {
61
+ throw new Error(`Failed to load full content for skill "${skillName}": ${error.message}`);
62
+ }
63
+ }
64
+ isFullyLoaded(skillName) {
65
+ const cached = this.contentCache.get(skillName);
66
+ return cached?.fullyLoaded || false;
67
+ }
68
+ async preloadContent(skillNames) {
69
+ const loadPromises = skillNames.map(skillName => this.loadFullContent(skillName).catch(error => {
70
+ console.warn(`Failed to preload content for skill "${skillName}":`, error);
71
+ return null;
72
+ }));
73
+ await Promise.all(loadPromises);
74
+ }
75
+ async clearContentCache() {
76
+ this.contentCache.clear();
77
+ const keysToDelete = [];
78
+ for (const [key] of this.cacheTimestamps) {
79
+ if (key.startsWith('content:')) {
80
+ keysToDelete.push(key);
81
+ }
82
+ }
83
+ for (const key of keysToDelete) {
84
+ this.cacheTimestamps.delete(key);
85
+ }
86
+ }
87
+ getCacheStats() {
88
+ return {
89
+ metadataCache: this.metadataCache.size,
90
+ contentCache: this.contentCache.size,
91
+ totalItems: this.metadataCache.size + this.contentCache.size
92
+ };
93
+ }
94
+ clearAllCaches() {
95
+ this.metadataCache.clear();
96
+ this.contentCache.clear();
97
+ this.cacheTimestamps.clear();
98
+ }
99
+ cleanupExpiredCache() {
100
+ const now = Date.now();
101
+ const keysToDelete = [];
102
+ for (const [key, timestamp] of this.cacheTimestamps) {
103
+ if (now - timestamp > this.defaultTTL) {
104
+ keysToDelete.push(key);
105
+ }
106
+ }
107
+ for (const key of keysToDelete) {
108
+ this.cacheTimestamps.delete(key);
109
+ if (key.startsWith('metadata:')) {
110
+ const skillName = key.replace('metadata:', '');
111
+ this.metadataCache.delete(skillName);
112
+ }
113
+ else if (key.startsWith('content:')) {
114
+ const skillName = key.replace('content:', '');
115
+ this.contentCache.delete(skillName);
116
+ }
117
+ }
118
+ }
119
+ async loadMetadataFromPath(skillPath) {
120
+ const metadata = [];
121
+ try {
122
+ const stats = await promises_1.default.stat(skillPath);
123
+ if (stats.isFile() && skillPath.endsWith('.md')) {
124
+ const skillMetadata = await this.claudeAdapter.extractMetadata(skillPath);
125
+ metadata.push(skillMetadata);
126
+ }
127
+ else if (stats.isDirectory()) {
128
+ const skillFiles = await this.claudeAdapter.discoverSkills(skillPath);
129
+ for (const filePath of skillFiles) {
130
+ try {
131
+ const skillMetadata = await this.claudeAdapter.extractMetadata(filePath);
132
+ metadata.push(skillMetadata);
133
+ }
134
+ catch (error) {
135
+ console.warn(`Failed to load metadata from ${filePath}:`, error);
136
+ }
137
+ }
138
+ }
139
+ }
140
+ catch (error) {
141
+ throw new Error(`Failed to load metadata from path ${skillPath}: ${error.message}`);
142
+ }
143
+ return metadata;
144
+ }
145
+ deduplicateMetadata(metadata) {
146
+ const seen = new Set();
147
+ const unique = [];
148
+ for (const item of metadata) {
149
+ if (!seen.has(item.name)) {
150
+ seen.add(item.name);
151
+ unique.push(item);
152
+ }
153
+ }
154
+ return unique;
155
+ }
156
+ async findSkillFile(skillName) {
157
+ const metadata = this.metadataCache.get(skillName);
158
+ if (!metadata) {
159
+ return null;
160
+ }
161
+ const possiblePaths = [
162
+ `./skills/${skillName}.md`,
163
+ `~/.claude/skills/${skillName}.md`,
164
+ `./${skillName}.md`
165
+ ];
166
+ for (const possiblePath of possiblePaths) {
167
+ try {
168
+ const expandedPath = possiblePath.replace('~', process.env.HOME || '');
169
+ await promises_1.default.access(expandedPath);
170
+ return expandedPath;
171
+ }
172
+ catch {
173
+ }
174
+ }
175
+ return null;
176
+ }
177
+ isCacheExpired(key) {
178
+ const timestamp = this.cacheTimestamps.get(key);
179
+ if (!timestamp) {
180
+ return true;
181
+ }
182
+ return Date.now() - timestamp > this.defaultTTL;
183
+ }
184
+ }
185
+ exports.ProgressiveSkillLoader = ProgressiveSkillLoader;
186
+ //# sourceMappingURL=progressive-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressive-loader.js","sourceRoot":"","sources":["../../../src/skills/runtime/progressive-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { RuntimeRequirementsValidator, RuntimeInfo } from '../../types/skill-runtime.types';
2
+ export declare class SystemRuntimeValidator implements RuntimeRequirementsValidator {
3
+ validatePython(requirement: string): Promise<boolean>;
4
+ validateNode(requirement: string): Promise<boolean>;
5
+ validateDocker(): Promise<boolean>;
6
+ validateMemory(requirement: string): Promise<boolean>;
7
+ getCurrentRuntime(): Promise<RuntimeInfo>;
8
+ private compareVersions;
9
+ private compareVersionArrays;
10
+ private parseMemoryRequirement;
11
+ }
12
+ export declare class MockRuntimeValidator implements RuntimeRequirementsValidator {
13
+ private mockResults;
14
+ private mockRuntime;
15
+ constructor(mockResults?: Record<string, boolean>);
16
+ validatePython(requirement: string): Promise<boolean>;
17
+ validateNode(requirement: string): Promise<boolean>;
18
+ validateDocker(): Promise<boolean>;
19
+ validateMemory(requirement: string): Promise<boolean>;
20
+ getCurrentRuntime(): Promise<RuntimeInfo>;
21
+ setMockResult(component: string, result: boolean): void;
22
+ setMockRuntime(runtime: Partial<RuntimeInfo>): void;
23
+ }