@sowonai/crewx-sdk 0.1.0-dev.4 → 0.1.0-dev.40
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/README.md +28 -0
- package/dist/config/yaml-loader.js +6 -2
- package/dist/config/yaml-loader.js.map +1 -1
- package/dist/conversation/conversation-history.interface.d.ts +6 -4
- package/dist/core/agent/agent-factory.d.ts +7 -7
- package/dist/core/agent/agent-factory.js +23 -0
- package/dist/core/agent/agent-factory.js.map +1 -1
- package/dist/core/agent/agent-runtime.d.ts +18 -2
- package/dist/core/agent/agent-runtime.js +128 -24
- package/dist/core/agent/agent-runtime.js.map +1 -1
- package/dist/core/agent/index.d.ts +1 -1
- package/dist/core/agent/index.js +2 -1
- package/dist/core/agent/index.js.map +1 -1
- package/dist/core/providers/ai-provider.interface.d.ts +1 -0
- package/dist/core/providers/ai-provider.interface.js.map +1 -1
- package/dist/core/providers/base-ai.provider.d.ts +7 -0
- package/dist/core/providers/base-ai.provider.js +8 -4
- package/dist/core/providers/base-ai.provider.js.map +1 -1
- package/dist/core/providers/claude.provider.d.ts +0 -11
- package/dist/core/providers/claude.provider.js +2 -262
- package/dist/core/providers/claude.provider.js.map +1 -1
- package/dist/core/providers/codex.provider.js +2 -2
- package/dist/core/providers/codex.provider.js.map +1 -1
- package/dist/core/providers/copilot.provider.d.ts +0 -10
- package/dist/core/providers/copilot.provider.js +0 -180
- package/dist/core/providers/copilot.provider.js.map +1 -1
- package/dist/core/providers/dynamic-provider.factory.d.ts +64 -0
- package/dist/core/providers/dynamic-provider.factory.js +533 -0
- package/dist/core/providers/dynamic-provider.factory.js.map +1 -0
- package/dist/core/providers/gemini.provider.d.ts +0 -11
- package/dist/core/providers/gemini.provider.js +0 -101
- package/dist/core/providers/gemini.provider.js.map +1 -1
- package/dist/core/providers/index.d.ts +3 -0
- package/dist/core/providers/index.js +7 -1
- package/dist/core/providers/index.js.map +1 -1
- package/dist/core/providers/mock.provider.d.ts +13 -0
- package/dist/core/providers/mock.provider.js +55 -0
- package/dist/core/providers/mock.provider.js.map +1 -0
- package/dist/core/providers/provider-factory.d.ts +3 -0
- package/dist/core/providers/provider-factory.js +27 -0
- package/dist/core/providers/provider-factory.js.map +1 -0
- package/dist/index.d.ts +17 -4
- package/dist/index.js +31 -1
- package/dist/index.js.map +1 -1
- package/dist/schema/skills-parser.d.ts +8 -0
- package/dist/schema/skills-parser.js +421 -0
- package/dist/schema/skills-parser.js.map +1 -0
- package/dist/schema/skills.types.d.ts +144 -0
- package/dist/schema/skills.types.js +41 -0
- package/dist/schema/skills.types.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.js +19 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/layout-loader.service.d.ts +18 -0
- package/dist/services/layout-loader.service.js +266 -0
- package/dist/services/layout-loader.service.js.map +1 -0
- package/dist/services/layout-renderer.service.d.ts +25 -0
- package/dist/services/layout-renderer.service.js +226 -0
- package/dist/services/layout-renderer.service.js.map +1 -0
- package/dist/services/props-validator.service.d.ts +29 -0
- package/dist/services/props-validator.service.js +332 -0
- package/dist/services/props-validator.service.js.map +1 -0
- package/dist/skills/adapter/claude-skill-adapter.d.ts +11 -0
- package/dist/skills/adapter/claude-skill-adapter.js +222 -0
- package/dist/skills/adapter/claude-skill-adapter.js.map +1 -0
- package/dist/skills/index.d.ts +6 -0
- package/dist/skills/index.js +31 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/runtime/progressive-loader.d.ts +27 -0
- package/dist/skills/runtime/progressive-loader.js +186 -0
- package/dist/skills/runtime/progressive-loader.js.map +1 -0
- package/dist/skills/runtime/runtime-requirements-validator.d.ts +23 -0
- package/dist/skills/runtime/runtime-requirements-validator.js +248 -0
- package/dist/skills/runtime/runtime-requirements-validator.js.map +1 -0
- package/dist/skills/runtime/skill-runtime.service.d.ts +42 -0
- package/dist/skills/runtime/skill-runtime.service.js +434 -0
- package/dist/skills/runtime/skill-runtime.service.js.map +1 -0
- package/dist/types/agent.types.d.ts +10 -2
- package/dist/types/agent.types.js.map +1 -1
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/layout.types.d.ts +113 -0
- package/dist/types/layout.types.js +22 -0
- package/dist/types/layout.types.js.map +1 -0
- package/dist/types/provider.types.d.ts +12 -0
- package/dist/types/provider.types.js +3 -0
- package/dist/types/provider.types.js.map +1 -0
- package/dist/types/skill-runtime.types.d.ts +244 -0
- package/dist/types/skill-runtime.types.js +44 -0
- package/dist/types/skill-runtime.types.js.map +1 -0
- package/dist/types/template.types.d.ts +38 -0
- package/dist/types/template.types.js +3 -0
- package/dist/types/template.types.js.map +1 -0
- package/package.json +14 -13
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,248 @@
|
|
|
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.MockRuntimeValidator = exports.SystemRuntimeValidator = void 0;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const util_1 = require("util");
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
11
|
+
class SystemRuntimeValidator {
|
|
12
|
+
async validatePython(requirement) {
|
|
13
|
+
try {
|
|
14
|
+
const result = await execAsync('python3 --version 2>&1 || python --version 2>&1');
|
|
15
|
+
const versionOutput = (result.stdout.trim() || result.stderr.trim());
|
|
16
|
+
const versionMatch = versionOutput.match(/Python (\d+\.\d+\.\d+)/);
|
|
17
|
+
if (!versionMatch?.[1]) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const currentVersion = versionMatch[1];
|
|
21
|
+
return this.compareVersions(currentVersion, requirement);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
console.warn('Python not found or version check failed:', error);
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async validateNode(requirement) {
|
|
29
|
+
try {
|
|
30
|
+
const result = await execAsync('node --version');
|
|
31
|
+
const versionOutput = result.stdout.trim();
|
|
32
|
+
const versionMatch = versionOutput.match(/v(\d+\.\d+\.\d+)/);
|
|
33
|
+
if (!versionMatch?.[1]) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
const currentVersion = versionMatch[1];
|
|
37
|
+
return this.compareVersions(currentVersion, requirement);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.warn('Node.js not found or version check failed:', error);
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async validateDocker() {
|
|
45
|
+
try {
|
|
46
|
+
const result = await execAsync('docker --version');
|
|
47
|
+
return result.stdout.trim().length > 0;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.warn('Docker not found or not accessible:', error);
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async validateMemory(requirement) {
|
|
55
|
+
try {
|
|
56
|
+
const requiredMemory = this.parseMemoryRequirement(requirement);
|
|
57
|
+
const availableMemory = os_1.default.totalmem();
|
|
58
|
+
return availableMemory >= requiredMemory;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.warn('Memory validation failed:', error);
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async getCurrentRuntime() {
|
|
66
|
+
const runtime = {
|
|
67
|
+
memory: {
|
|
68
|
+
total: os_1.default.totalmem(),
|
|
69
|
+
available: os_1.default.freemem()
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
try {
|
|
73
|
+
const result = await execAsync('python3 --version 2>&1 || python --version 2>&1');
|
|
74
|
+
const versionOutput = (result.stdout.trim() || result.stderr.trim());
|
|
75
|
+
const versionMatch = versionOutput.match(/Python (\d+\.\d+\.\d+)/);
|
|
76
|
+
if (versionMatch) {
|
|
77
|
+
runtime.python = {
|
|
78
|
+
version: versionMatch[1] || 'unknown',
|
|
79
|
+
available: true
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
runtime.python = {
|
|
84
|
+
version: 'unknown',
|
|
85
|
+
available: false
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
runtime.python = {
|
|
91
|
+
version: 'unknown',
|
|
92
|
+
available: false
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
const result = await execAsync('node --version');
|
|
97
|
+
const versionOutput = result.stdout.trim();
|
|
98
|
+
const versionMatch = versionOutput.match(/v(\d+\.\d+\.\d+)/);
|
|
99
|
+
if (versionMatch) {
|
|
100
|
+
runtime.node = {
|
|
101
|
+
version: versionMatch[1] || 'unknown',
|
|
102
|
+
available: true
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
runtime.node = {
|
|
107
|
+
version: 'unknown',
|
|
108
|
+
available: false
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
runtime.node = {
|
|
114
|
+
version: 'unknown',
|
|
115
|
+
available: false
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
const result = await execAsync('docker --version');
|
|
120
|
+
const versionOutput = result.stdout.trim();
|
|
121
|
+
const versionMatch = versionOutput.match(/Docker version (\d+\.\d+\.\d+)/);
|
|
122
|
+
if (versionMatch) {
|
|
123
|
+
runtime.docker = {
|
|
124
|
+
version: versionMatch[1] || 'unknown',
|
|
125
|
+
available: true
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
runtime.docker = {
|
|
130
|
+
version: 'unknown',
|
|
131
|
+
available: false
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
runtime.docker = {
|
|
137
|
+
version: 'unknown',
|
|
138
|
+
available: false
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
return runtime;
|
|
142
|
+
}
|
|
143
|
+
compareVersions(current, requirement) {
|
|
144
|
+
const match = requirement.match(/^([><=!]+)\s*(\d+\.\d+\.\d+)$/);
|
|
145
|
+
if (!match) {
|
|
146
|
+
return current === requirement;
|
|
147
|
+
}
|
|
148
|
+
const operator = match[1];
|
|
149
|
+
const requiredVersion = match[2] || '';
|
|
150
|
+
const currentParts = current.split('.').map(Number);
|
|
151
|
+
const requiredParts = requiredVersion.split('.').map(Number);
|
|
152
|
+
const comparison = this.compareVersionArrays(currentParts, requiredParts);
|
|
153
|
+
switch (operator) {
|
|
154
|
+
case '>=':
|
|
155
|
+
return comparison >= 0;
|
|
156
|
+
case '>':
|
|
157
|
+
return comparison > 0;
|
|
158
|
+
case '<=':
|
|
159
|
+
return comparison <= 0;
|
|
160
|
+
case '<':
|
|
161
|
+
return comparison < 0;
|
|
162
|
+
case '==':
|
|
163
|
+
case '=':
|
|
164
|
+
return comparison === 0;
|
|
165
|
+
default:
|
|
166
|
+
throw new Error(`Unsupported version operator: ${operator}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
compareVersionArrays(a, b) {
|
|
170
|
+
const maxLength = Math.max(a.length, b.length);
|
|
171
|
+
for (let i = 0; i < maxLength; i++) {
|
|
172
|
+
const aPart = a[i] || 0;
|
|
173
|
+
const bPart = b[i] || 0;
|
|
174
|
+
if (aPart > bPart)
|
|
175
|
+
return 1;
|
|
176
|
+
if (aPart < bPart)
|
|
177
|
+
return -1;
|
|
178
|
+
}
|
|
179
|
+
return 0;
|
|
180
|
+
}
|
|
181
|
+
parseMemoryRequirement(requirement) {
|
|
182
|
+
const match = requirement.match(/^(\d+(?:\.\d+)?)\s*(GB|MB|KB|B)$/i);
|
|
183
|
+
if (!match) {
|
|
184
|
+
throw new Error(`Invalid memory requirement format: ${requirement}`);
|
|
185
|
+
}
|
|
186
|
+
const value = parseFloat(match[1] || '0');
|
|
187
|
+
const unit = (match[2] || '').toUpperCase();
|
|
188
|
+
const multipliers = {
|
|
189
|
+
'B': 1,
|
|
190
|
+
'KB': 1024,
|
|
191
|
+
'MB': 1024 * 1024,
|
|
192
|
+
'GB': 1024 * 1024 * 1024
|
|
193
|
+
};
|
|
194
|
+
return Math.floor(value * multipliers[unit]);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
exports.SystemRuntimeValidator = SystemRuntimeValidator;
|
|
198
|
+
class MockRuntimeValidator {
|
|
199
|
+
constructor(mockResults) {
|
|
200
|
+
this.mockResults = new Map();
|
|
201
|
+
if (mockResults) {
|
|
202
|
+
Object.entries(mockResults).forEach(([key, value]) => {
|
|
203
|
+
this.mockResults.set(key, value);
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
this.mockRuntime = {
|
|
207
|
+
python: {
|
|
208
|
+
version: '3.11.0',
|
|
209
|
+
available: this.mockResults.get('python') ?? true
|
|
210
|
+
},
|
|
211
|
+
node: {
|
|
212
|
+
version: '18.17.0',
|
|
213
|
+
available: this.mockResults.get('node') ?? true
|
|
214
|
+
},
|
|
215
|
+
docker: {
|
|
216
|
+
version: '24.0.0',
|
|
217
|
+
available: this.mockResults.get('docker') ?? true
|
|
218
|
+
},
|
|
219
|
+
memory: {
|
|
220
|
+
total: 16 * 1024 * 1024 * 1024,
|
|
221
|
+
available: 8 * 1024 * 1024 * 1024
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
async validatePython(requirement) {
|
|
226
|
+
return this.mockResults.get('python') ?? true;
|
|
227
|
+
}
|
|
228
|
+
async validateNode(requirement) {
|
|
229
|
+
return this.mockResults.get('node') ?? true;
|
|
230
|
+
}
|
|
231
|
+
async validateDocker() {
|
|
232
|
+
return this.mockResults.get('docker') ?? true;
|
|
233
|
+
}
|
|
234
|
+
async validateMemory(requirement) {
|
|
235
|
+
return this.mockResults.get('memory') ?? true;
|
|
236
|
+
}
|
|
237
|
+
async getCurrentRuntime() {
|
|
238
|
+
return { ...this.mockRuntime };
|
|
239
|
+
}
|
|
240
|
+
setMockResult(component, result) {
|
|
241
|
+
this.mockResults.set(component, result);
|
|
242
|
+
}
|
|
243
|
+
setMockRuntime(runtime) {
|
|
244
|
+
this.mockRuntime = { ...this.mockRuntime, ...runtime };
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
exports.MockRuntimeValidator = MockRuntimeValidator;
|
|
248
|
+
//# sourceMappingURL=runtime-requirements-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-requirements-validator.js","sourceRoot":"","sources":["../../../src/skills/runtime/runtime-requirements-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { ISkillRuntime, IProgressiveSkillLoader, IClaudeSkillAdapter, SkillExecutionContext, SkillExecutionResult, SkillLoadOptions, SkillResolutionResult, SkillCacheStats, SkillRuntimeInfo, RuntimeRequirementsValidator, ProgressiveDisclosureConfig } from '../../types/skill-runtime.types';
|
|
3
|
+
import { SkillMetadata, SkillDefinition, SkillValidationResult, AgentDefinition } from '../../schema/skills.types';
|
|
4
|
+
export declare class SkillRuntime extends EventEmitter implements ISkillRuntime {
|
|
5
|
+
private readonly progressiveLoader;
|
|
6
|
+
private readonly claudeAdapter;
|
|
7
|
+
private readonly runtimeValidator;
|
|
8
|
+
private readonly config;
|
|
9
|
+
private startTime;
|
|
10
|
+
private skillsCache;
|
|
11
|
+
private contentCache;
|
|
12
|
+
private activeExecutions;
|
|
13
|
+
private cacheStats;
|
|
14
|
+
constructor(progressiveLoader: IProgressiveSkillLoader, claudeAdapter: IClaudeSkillAdapter, runtimeValidator: RuntimeRequirementsValidator, config?: Partial<ProgressiveDisclosureConfig>);
|
|
15
|
+
loadSkills(options?: SkillLoadOptions): Promise<SkillMetadata[]>;
|
|
16
|
+
validateSkill(skillName: string): Promise<SkillValidationResult>;
|
|
17
|
+
prepareContext(skillName: string, agentConfig: AgentDefinition, options?: Partial<SkillExecutionContext>): Promise<SkillExecutionContext>;
|
|
18
|
+
executeSkill(context: SkillExecutionContext, input: string): Promise<SkillExecutionResult>;
|
|
19
|
+
cleanup(context: SkillExecutionContext): Promise<void>;
|
|
20
|
+
listAvailableSkills(): Promise<string[]>;
|
|
21
|
+
getSkillMetadata(skillName: string): Promise<SkillMetadata | null>;
|
|
22
|
+
getSkillDefinition(skillName: string): Promise<SkillDefinition | null>;
|
|
23
|
+
resolveDependencies(skillName: string): Promise<SkillResolutionResult>;
|
|
24
|
+
clearCache(): Promise<void>;
|
|
25
|
+
getCacheStats(): SkillCacheStats;
|
|
26
|
+
getRuntimeInfo(): SkillRuntimeInfo;
|
|
27
|
+
shutdown(): Promise<void>;
|
|
28
|
+
private initializeCacheStats;
|
|
29
|
+
private setupCacheCleanup;
|
|
30
|
+
private applyFilters;
|
|
31
|
+
private validateMetadataStructure;
|
|
32
|
+
private validateDependencies;
|
|
33
|
+
private validateRuntimeRequirements;
|
|
34
|
+
private buildExecutionPrompt;
|
|
35
|
+
private executeWithAIProvider;
|
|
36
|
+
private generateExecutionId;
|
|
37
|
+
private getMemoryUsage;
|
|
38
|
+
private getCacheHits;
|
|
39
|
+
private getCacheMisses;
|
|
40
|
+
private updateCacheStats;
|
|
41
|
+
private cleanupExpiredCache;
|
|
42
|
+
}
|