@jclaw/core 0.1.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 (189) hide show
  1. package/dist/auto-skill/generator.d.ts +30 -0
  2. package/dist/auto-skill/generator.d.ts.map +1 -0
  3. package/dist/auto-skill/generator.js +262 -0
  4. package/dist/auto-skill/generator.js.map +1 -0
  5. package/dist/auto-skill/index.d.ts +11 -0
  6. package/dist/auto-skill/index.d.ts.map +1 -0
  7. package/dist/auto-skill/index.js +10 -0
  8. package/dist/auto-skill/index.js.map +1 -0
  9. package/dist/auto-skill/installer.d.ts +44 -0
  10. package/dist/auto-skill/installer.d.ts.map +1 -0
  11. package/dist/auto-skill/installer.js +201 -0
  12. package/dist/auto-skill/installer.js.map +1 -0
  13. package/dist/auto-skill/types.d.ts +179 -0
  14. package/dist/auto-skill/types.d.ts.map +1 -0
  15. package/dist/auto-skill/types.js +9 -0
  16. package/dist/auto-skill/types.js.map +1 -0
  17. package/dist/cli/commands/config.d.ts +16 -0
  18. package/dist/cli/commands/config.d.ts.map +1 -0
  19. package/dist/cli/commands/config.js +119 -0
  20. package/dist/cli/commands/config.js.map +1 -0
  21. package/dist/cli/commands/exec.d.ts +12 -0
  22. package/dist/cli/commands/exec.d.ts.map +1 -0
  23. package/dist/cli/commands/exec.js +41 -0
  24. package/dist/cli/commands/exec.js.map +1 -0
  25. package/dist/cli/index.d.ts +10 -0
  26. package/dist/cli/index.d.ts.map +1 -0
  27. package/dist/cli/index.js +91 -0
  28. package/dist/cli/index.js.map +1 -0
  29. package/dist/cli/run.d.ts +9 -0
  30. package/dist/cli/run.d.ts.map +1 -0
  31. package/dist/cli/run.js +13 -0
  32. package/dist/cli/run.js.map +1 -0
  33. package/dist/context/index.d.ts +6 -0
  34. package/dist/context/index.d.ts.map +1 -0
  35. package/dist/context/index.js +12 -0
  36. package/dist/context/index.js.map +1 -0
  37. package/dist/context/memsearch-client.d.ts +34 -0
  38. package/dist/context/memsearch-client.d.ts.map +1 -0
  39. package/dist/context/memsearch-client.js +182 -0
  40. package/dist/context/memsearch-client.js.map +1 -0
  41. package/dist/context/mock-client.d.ts +116 -0
  42. package/dist/context/mock-client.d.ts.map +1 -0
  43. package/dist/context/mock-client.js +150 -0
  44. package/dist/context/mock-client.js.map +1 -0
  45. package/dist/context/openviking-client.d.ts +87 -0
  46. package/dist/context/openviking-client.d.ts.map +1 -0
  47. package/dist/context/openviking-client.js +166 -0
  48. package/dist/context/openviking-client.js.map +1 -0
  49. package/dist/context/openviking-mcp-client.d.ts +29 -0
  50. package/dist/context/openviking-mcp-client.d.ts.map +1 -0
  51. package/dist/context/openviking-mcp-client.js +81 -0
  52. package/dist/context/openviking-mcp-client.js.map +1 -0
  53. package/dist/context/simple-memory-client.d.ts +43 -0
  54. package/dist/context/simple-memory-client.d.ts.map +1 -0
  55. package/dist/context/simple-memory-client.enhanced.d.ts +39 -0
  56. package/dist/context/simple-memory-client.enhanced.d.ts.map +1 -0
  57. package/dist/context/simple-memory-client.enhanced.js +207 -0
  58. package/dist/context/simple-memory-client.enhanced.js.map +1 -0
  59. package/dist/context/simple-memory-client.js +270 -0
  60. package/dist/context/simple-memory-client.js.map +1 -0
  61. package/dist/evolution/continuous.d.ts +127 -0
  62. package/dist/evolution/continuous.d.ts.map +1 -0
  63. package/dist/evolution/continuous.js +238 -0
  64. package/dist/evolution/continuous.js.map +1 -0
  65. package/dist/evolution/engine.d.ts +97 -0
  66. package/dist/evolution/engine.d.ts.map +1 -0
  67. package/dist/evolution/engine.js +187 -0
  68. package/dist/evolution/engine.js.map +1 -0
  69. package/dist/evolution/evolver-adapter.d.ts +104 -0
  70. package/dist/evolution/evolver-adapter.d.ts.map +1 -0
  71. package/dist/evolution/evolver-adapter.js +227 -0
  72. package/dist/evolution/evolver-adapter.js.map +1 -0
  73. package/dist/evolution/index.d.ts +9 -0
  74. package/dist/evolution/index.d.ts.map +1 -0
  75. package/dist/evolution/index.js +8 -0
  76. package/dist/evolution/index.js.map +1 -0
  77. package/dist/evolution/memory.d.ts +106 -0
  78. package/dist/evolution/memory.d.ts.map +1 -0
  79. package/dist/evolution/memory.js +232 -0
  80. package/dist/evolution/memory.js.map +1 -0
  81. package/dist/evolution/mutation.d.ts +66 -0
  82. package/dist/evolution/mutation.d.ts.map +1 -0
  83. package/dist/evolution/mutation.js +139 -0
  84. package/dist/evolution/mutation.js.map +1 -0
  85. package/dist/evolution/sandbox.d.ts +96 -0
  86. package/dist/evolution/sandbox.d.ts.map +1 -0
  87. package/dist/evolution/sandbox.js +194 -0
  88. package/dist/evolution/sandbox.js.map +1 -0
  89. package/dist/evolution/types.d.ts +93 -0
  90. package/dist/evolution/types.d.ts.map +1 -0
  91. package/dist/evolution/types.js +9 -0
  92. package/dist/evolution/types.js.map +1 -0
  93. package/dist/executor/index.d.ts +10 -0
  94. package/dist/executor/index.d.ts.map +1 -0
  95. package/dist/executor/index.js +10 -0
  96. package/dist/executor/index.js.map +1 -0
  97. package/dist/executor/interface.d.ts +9 -0
  98. package/dist/executor/interface.d.ts.map +1 -0
  99. package/dist/executor/interface.js +9 -0
  100. package/dist/executor/interface.js.map +1 -0
  101. package/dist/executor/local.d.ts +36 -0
  102. package/dist/executor/local.d.ts.map +1 -0
  103. package/dist/executor/local.js +95 -0
  104. package/dist/executor/local.js.map +1 -0
  105. package/dist/extension-system/capability-router.d.ts +106 -0
  106. package/dist/extension-system/capability-router.d.ts.map +1 -0
  107. package/dist/extension-system/capability-router.js +167 -0
  108. package/dist/extension-system/capability-router.js.map +1 -0
  109. package/dist/extension-system/index.d.ts +11 -0
  110. package/dist/extension-system/index.d.ts.map +1 -0
  111. package/dist/extension-system/index.js +11 -0
  112. package/dist/extension-system/index.js.map +1 -0
  113. package/dist/extension-system/loader.d.ts +93 -0
  114. package/dist/extension-system/loader.d.ts.map +1 -0
  115. package/dist/extension-system/loader.js +245 -0
  116. package/dist/extension-system/loader.js.map +1 -0
  117. package/dist/extension-system/registry.d.ts +112 -0
  118. package/dist/extension-system/registry.d.ts.map +1 -0
  119. package/dist/extension-system/registry.js +161 -0
  120. package/dist/extension-system/registry.js.map +1 -0
  121. package/dist/index.d.ts +14 -0
  122. package/dist/index.d.ts.map +1 -0
  123. package/dist/index.js +20 -0
  124. package/dist/index.js.map +1 -0
  125. package/dist/network/client.d.ts +130 -0
  126. package/dist/network/client.d.ts.map +1 -0
  127. package/dist/network/client.js +230 -0
  128. package/dist/network/client.js.map +1 -0
  129. package/dist/network/index.d.ts +10 -0
  130. package/dist/network/index.d.ts.map +1 -0
  131. package/dist/network/index.js +10 -0
  132. package/dist/network/index.js.map +1 -0
  133. package/dist/network/protocol.d.ts +159 -0
  134. package/dist/network/protocol.d.ts.map +1 -0
  135. package/dist/network/protocol.js +118 -0
  136. package/dist/network/protocol.js.map +1 -0
  137. package/dist/runtime/agent.d.ts +124 -0
  138. package/dist/runtime/agent.d.ts.map +1 -0
  139. package/dist/runtime/agent.js +286 -0
  140. package/dist/runtime/agent.js.map +1 -0
  141. package/dist/runtime/agent_fixed.d.ts +39 -0
  142. package/dist/runtime/agent_fixed.d.ts.map +1 -0
  143. package/dist/runtime/agent_fixed.js +193 -0
  144. package/dist/runtime/agent_fixed.js.map +1 -0
  145. package/dist/runtime/index.d.ts +11 -0
  146. package/dist/runtime/index.d.ts.map +1 -0
  147. package/dist/runtime/index.js +11 -0
  148. package/dist/runtime/index.js.map +1 -0
  149. package/dist/runtime/llm-client.d.ts +108 -0
  150. package/dist/runtime/llm-client.d.ts.map +1 -0
  151. package/dist/runtime/llm-client.js +125 -0
  152. package/dist/runtime/llm-client.js.map +1 -0
  153. package/dist/runtime/task-executor.d.ts +92 -0
  154. package/dist/runtime/task-executor.d.ts.map +1 -0
  155. package/dist/runtime/task-executor.js +203 -0
  156. package/dist/runtime/task-executor.js.map +1 -0
  157. package/dist/skill-sh/adapter.d.ts +40 -0
  158. package/dist/skill-sh/adapter.d.ts.map +1 -0
  159. package/dist/skill-sh/adapter.js +258 -0
  160. package/dist/skill-sh/adapter.js.map +1 -0
  161. package/dist/skill-sh/converter.d.ts +37 -0
  162. package/dist/skill-sh/converter.d.ts.map +1 -0
  163. package/dist/skill-sh/converter.js +175 -0
  164. package/dist/skill-sh/converter.js.map +1 -0
  165. package/dist/skill-sh/discovery.d.ts +29 -0
  166. package/dist/skill-sh/discovery.d.ts.map +1 -0
  167. package/dist/skill-sh/discovery.js +189 -0
  168. package/dist/skill-sh/discovery.js.map +1 -0
  169. package/dist/skill-sh/index.d.ts +19 -0
  170. package/dist/skill-sh/index.d.ts.map +1 -0
  171. package/dist/skill-sh/index.js +20 -0
  172. package/dist/skill-sh/index.js.map +1 -0
  173. package/dist/skill-sh/quality.d.ts +51 -0
  174. package/dist/skill-sh/quality.d.ts.map +1 -0
  175. package/dist/skill-sh/quality.js +146 -0
  176. package/dist/skill-sh/quality.js.map +1 -0
  177. package/dist/skill-sh/registry.d.ts +58 -0
  178. package/dist/skill-sh/registry.d.ts.map +1 -0
  179. package/dist/skill-sh/registry.js +118 -0
  180. package/dist/skill-sh/registry.js.map +1 -0
  181. package/dist/skill-sh/types.d.ts +228 -0
  182. package/dist/skill-sh/types.d.ts.map +1 -0
  183. package/dist/skill-sh/types.js +9 -0
  184. package/dist/skill-sh/types.js.map +1 -0
  185. package/dist/types.d.ts +199 -0
  186. package/dist/types.d.ts.map +1 -0
  187. package/dist/types.js +10 -0
  188. package/dist/types.js.map +1 -0
  189. package/package.json +41 -0
@@ -0,0 +1,258 @@
1
+ /**
2
+ * Skill.sh Adapter
3
+ *
4
+ * @module @jclaw/core/skill-sh/adapter
5
+ */
6
+ import { existsSync } from 'fs';
7
+ import { mkdir } from 'fs/promises';
8
+ import { join } from 'path';
9
+ import { execSync } from 'child_process';
10
+ const DEFAULT_CONFIG = {
11
+ apiBase: 'https://api.skills.sh/v1',
12
+ cacheDir: './.jclaw/skill-sh-cache',
13
+ enableCache: true,
14
+ cacheTtl: 24 * 60 * 60 * 1000,
15
+ timeout: 30000,
16
+ userAgent: 'JClaw-Agent/1.0',
17
+ githubToken: '',
18
+ communityRepo: 'jclaw-ai/skills',
19
+ };
20
+ export class SkillShAdapter {
21
+ llmClient;
22
+ config;
23
+ cache = new Map();
24
+ constructor(llmClient, config) {
25
+ this.llmClient = llmClient;
26
+ this.config = { ...DEFAULT_CONFIG, ...config };
27
+ this.ensureCacheDir();
28
+ }
29
+ async search(options) {
30
+ const cacheKey = `search:${JSON.stringify(options)}`;
31
+ const cached = this.getCache(cacheKey);
32
+ if (cached)
33
+ return cached;
34
+ try {
35
+ const params = new URLSearchParams();
36
+ params.set('q', options.query);
37
+ if (options.category)
38
+ params.set('category', options.category);
39
+ if (options.minQuality)
40
+ params.set('min_quality', String(options.minQuality));
41
+ if (options.sortBy)
42
+ params.set('sort', options.sortBy);
43
+ if (options.limit)
44
+ params.set('limit', String(options.limit));
45
+ const response = await fetch(`${this.config.apiBase}/search?${params}`, {
46
+ headers: this.getHeaders(),
47
+ signal: AbortSignal.timeout(this.config.timeout),
48
+ });
49
+ if (!response.ok)
50
+ throw new Error(`API error: ${response.status}`);
51
+ const results = await response.json();
52
+ this.setCache(cacheKey, results);
53
+ return results;
54
+ }
55
+ catch (error) {
56
+ console.error('Skill.sh search failed:', error);
57
+ return [];
58
+ }
59
+ }
60
+ async getSkill(skillId) {
61
+ const cacheKey = `skill:${skillId}`;
62
+ const cached = this.getCache(cacheKey);
63
+ if (cached)
64
+ return cached;
65
+ try {
66
+ const response = await fetch(`${this.config.apiBase}/skills/${skillId}`, {
67
+ headers: this.getHeaders(),
68
+ signal: AbortSignal.timeout(this.config.timeout),
69
+ });
70
+ if (!response.ok)
71
+ return null;
72
+ const detail = await response.json();
73
+ this.setCache(cacheKey, detail);
74
+ return detail;
75
+ }
76
+ catch (error) {
77
+ console.error('Failed to get skill:', error);
78
+ return null;
79
+ }
80
+ }
81
+ async downloadSkillMd(owner, repo) {
82
+ const cacheKey = `skillmd:${owner}/${repo}`;
83
+ const cached = this.getCache(cacheKey);
84
+ if (cached)
85
+ return cached;
86
+ try {
87
+ const response = await fetch(`https://raw.githubusercontent.com/${owner}/${repo}/main/SKILL.md`, {
88
+ headers: this.config.githubToken
89
+ ? { Authorization: `token ${this.config.githubToken}` }
90
+ : {},
91
+ signal: AbortSignal.timeout(this.config.timeout),
92
+ });
93
+ if (!response.ok)
94
+ return null;
95
+ const content = await response.text();
96
+ this.setCache(cacheKey, content);
97
+ return content;
98
+ }
99
+ catch (error) {
100
+ return null;
101
+ }
102
+ }
103
+ async installSkill(skillId) {
104
+ const startTime = Date.now();
105
+ try {
106
+ const output = execSync(`npx skills add ${skillId}`, {
107
+ encoding: 'utf-8',
108
+ timeout: 120000,
109
+ stdio: 'pipe',
110
+ });
111
+ const duration = Date.now() - startTime;
112
+ const skill = await this.getSkill(skillId);
113
+ return {
114
+ success: true,
115
+ skill: skill || undefined,
116
+ installPath: this.getSkillInstallPath(skillId),
117
+ duration,
118
+ };
119
+ }
120
+ catch (error) {
121
+ const duration = Date.now() - startTime;
122
+ return {
123
+ success: false,
124
+ error: error instanceof Error ? error.message : 'Installation failed',
125
+ duration,
126
+ };
127
+ }
128
+ }
129
+ parseFrontmatter(content) {
130
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
131
+ if (!match)
132
+ return null;
133
+ try {
134
+ const yaml = match[1];
135
+ const frontmatter = {};
136
+ for (const line of (yaml || '').split('\n')) {
137
+ const colonIndex = line.indexOf(':');
138
+ if (colonIndex === -1)
139
+ continue;
140
+ const key = line.slice(0, colonIndex).trim();
141
+ const value = line.slice(colonIndex + 1).trim();
142
+ if (value.startsWith('[') && value.endsWith(']')) {
143
+ frontmatter[key] = value
144
+ .slice(1, -1)
145
+ .split(',')
146
+ .map(s => s.trim().replace(/^[\"']|[\"']$/g, ''));
147
+ }
148
+ else {
149
+ frontmatter[key] = value.replace(/^[\"']|[\"']$/g, '');
150
+ }
151
+ }
152
+ return frontmatter;
153
+ }
154
+ catch {
155
+ return null;
156
+ }
157
+ }
158
+ getSkillInstallPath(skillId) {
159
+ const possiblePaths = [
160
+ join(process.cwd(), '.claude', 'skills', skillId),
161
+ join(process.cwd(), '.codex', 'skills', skillId),
162
+ join(process.cwd(), '.skills', skillId),
163
+ ];
164
+ for (const path of possiblePaths) {
165
+ if (existsSync(path))
166
+ return path;
167
+ }
168
+ return join(process.cwd(), '.jclaw', 'skills', skillId);
169
+ }
170
+ getCache(key) {
171
+ if (!this.config.enableCache)
172
+ return null;
173
+ const entry = this.cache.get(key);
174
+ if (!entry)
175
+ return null;
176
+ if (Date.now() - entry.timestamp > this.config.cacheTtl) {
177
+ this.cache.delete(key);
178
+ return null;
179
+ }
180
+ return entry.data;
181
+ }
182
+ setCache(key, data) {
183
+ if (!this.config.enableCache)
184
+ return;
185
+ this.cache.set(key, { data, timestamp: Date.now() });
186
+ }
187
+ async ensureCacheDir() {
188
+ if (!this.config.enableCache)
189
+ return;
190
+ try {
191
+ await mkdir(this.config.cacheDir, { recursive: true });
192
+ }
193
+ catch { }
194
+ }
195
+ getHeaders() {
196
+ return {
197
+ 'User-Agent': this.config.userAgent,
198
+ 'Accept': 'application/json',
199
+ };
200
+ }
201
+ }
202
+ export function createSkillShAdapter(llmClient, config) {
203
+ return new SkillShAdapter(llmClient, config);
204
+ }
205
+ // Add caching for skill.sh API calls
206
+ const apiCache = new Map();
207
+ const CACHE_TTL = 24 * 60 * 60 * 1000; // 24 hours
208
+ export async function searchSkillShAPI(query, options) {
209
+ const cacheKey = `skillsh:${query}:${JSON.stringify(options || {})}`;
210
+ // Check cache
211
+ const cached = apiCache.get(cacheKey);
212
+ if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
213
+ return cached.data;
214
+ }
215
+ try {
216
+ // Real API call to skill.sh
217
+ const params = new URLSearchParams({ q: query });
218
+ if (options?.limit)
219
+ params.set('limit', String(options.limit));
220
+ if (options?.sortBy)
221
+ params.set('sort', options.sortBy);
222
+ const response = await fetch(`https://api.skills.sh/v1/search?${params}`, {
223
+ headers: { 'Accept': 'application/json' },
224
+ signal: AbortSignal.timeout(30000),
225
+ });
226
+ if (!response.ok) {
227
+ throw new Error(`skill.sh API error: ${response.status}`);
228
+ }
229
+ const data = await response.json();
230
+ // Cache the result
231
+ apiCache.set(cacheKey, { data, timestamp: Date.now() });
232
+ return data;
233
+ }
234
+ catch (error) {
235
+ console.error('skill.sh API search failed:', error);
236
+ // Return empty results on error
237
+ return { results: [], total: 0, page: 1, hasMore: false };
238
+ }
239
+ }
240
+ // Clear API cache
241
+ export function clearSkillShCache() {
242
+ apiCache.clear();
243
+ }
244
+ // Get cache stats
245
+ export function getCacheStats() {
246
+ const now = Date.now();
247
+ const validKeys = [];
248
+ for (const [key, value] of apiCache.entries()) {
249
+ if (now - value.timestamp < CACHE_TTL) {
250
+ validKeys.push(key);
251
+ }
252
+ else {
253
+ apiCache.delete(key);
254
+ }
255
+ }
256
+ return { size: validKeys.length, keys: validKeys };
257
+ }
258
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/skill-sh/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Skill to Extension Converter
3
+ *
4
+ * Converts SKILL.md format to JClaw Extension
5
+ *
6
+ * @module @jclaw/core/skill-sh/converter
7
+ */
8
+ import type { SkillShResult, ConvertedSkill } from './types.js';
9
+ import type { LLMClient } from '../runtime/llm-client.js';
10
+ /**
11
+ * Skill to Extension Converter
12
+ */
13
+ export declare class SkillConverter {
14
+ private llmClient;
15
+ constructor(llmClient: LLMClient);
16
+ /**
17
+ * Convert SKILL.md to JClaw Extension
18
+ */
19
+ convert(skill: SkillShResult, skillMd: string): Promise<ConvertedSkill>;
20
+ /**
21
+ * Generate capabilities from SKILL.md content
22
+ */
23
+ private generateCapabilities;
24
+ /**
25
+ * Parse SKILL.md frontmatter
26
+ */
27
+ private parseFrontmatter;
28
+ /**
29
+ * Assess conversion quality
30
+ */
31
+ private assessQuality;
32
+ }
33
+ /**
34
+ * Create skill converter
35
+ */
36
+ export declare function createSkillConverter(llmClient: LLMClient): SkillConverter;
37
+ //# sourceMappingURL=converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/skill-sh/converter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAoB,cAAc,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D;;GAEG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAExC;;OAEG;IACG,OAAO,CACX,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC;IA6C1B;;OAEG;YACW,oBAAoB;IA+ClC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;OAEG;IACH,OAAO,CAAC,aAAa;CAgCtB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,cAAc,CAEzE"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Skill to Extension Converter
3
+ *
4
+ * Converts SKILL.md format to JClaw Extension
5
+ *
6
+ * @module @jclaw/core/skill-sh/converter
7
+ */
8
+ /**
9
+ * Skill to Extension Converter
10
+ */
11
+ export class SkillConverter {
12
+ llmClient;
13
+ constructor(llmClient) {
14
+ this.llmClient = llmClient;
15
+ }
16
+ /**
17
+ * Convert SKILL.md to JClaw Extension
18
+ */
19
+ async convert(skill, skillMd) {
20
+ const warnings = [];
21
+ const frontmatter = this.parseFrontmatter(skillMd);
22
+ if (!frontmatter) {
23
+ warnings.push('Failed to parse SKILL.md frontmatter');
24
+ }
25
+ // Generate capability from SKILL.md content
26
+ const capabilities = await this.generateCapabilities(skill, skillMd);
27
+ if (capabilities.length === 0) {
28
+ warnings.push('No capabilities could be generated');
29
+ }
30
+ // Build extension
31
+ const extension = {
32
+ name: `skill-${skill.name}`,
33
+ version: skill.version || '1.0.0',
34
+ description: frontmatter?.description || `Skill.sh: ${skill.description}`,
35
+ capabilities,
36
+ dependencies: [],
37
+ async install() {
38
+ console.log(`Installing skill: ${skill.name}`);
39
+ // Skill-specific initialization
40
+ },
41
+ async uninstall() {
42
+ console.log(`Uninstalling skill: ${skill.name}`);
43
+ // Skill-specific cleanup
44
+ },
45
+ };
46
+ // Calculate quality score
47
+ const quality = this.assessQuality(skill, skillMd, capabilities);
48
+ return {
49
+ original: skill,
50
+ extension,
51
+ quality,
52
+ warnings,
53
+ };
54
+ }
55
+ /**
56
+ * Generate capabilities from SKILL.md content
57
+ */
58
+ async generateCapabilities(skill, skillMd) {
59
+ // Extract capability definitions from SKILL.md
60
+ const prompt = `Analyze this SKILL.md and extract capabilities:
61
+
62
+ ${skillMd}
63
+
64
+ Return JSON array of capabilities:
65
+ [{
66
+ "name": "capability-name",
67
+ "description": "what this does",
68
+ "inputSchema": { "type": "object", "properties": {} },
69
+ "outputSchema": { "type": "object" }
70
+ }]
71
+
72
+ If no clear capabilities found, return empty array.`;
73
+ try {
74
+ const response = await this.llmClient.chat([
75
+ { role: 'system', content: 'You are a capability analyzer.' },
76
+ { role: 'user', content: prompt }
77
+ ]);
78
+ const content = response.content;
79
+ const jsonMatch = content.match(/\[[\s\S]*\]/);
80
+ if (!jsonMatch)
81
+ return [];
82
+ const capabilities = JSON.parse(jsonMatch[0]);
83
+ return capabilities.map((cap) => ({
84
+ name: cap.name,
85
+ description: cap.description,
86
+ handler: async () => {
87
+ // Skill capability handler
88
+ // This would be implemented based on skill-specific logic
89
+ throw new Error(`Capability ${cap.name} not yet implemented`);
90
+ },
91
+ }));
92
+ }
93
+ catch (error) {
94
+ console.error('Failed to generate capabilities:', error);
95
+ return [];
96
+ }
97
+ }
98
+ /**
99
+ * Parse SKILL.md frontmatter
100
+ */
101
+ parseFrontmatter(content) {
102
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
103
+ if (!match)
104
+ return null;
105
+ try {
106
+ const yaml = match[1];
107
+ const frontmatter = {};
108
+ for (const line of (yaml || '').split('\n')) {
109
+ const colonIndex = line.indexOf(':');
110
+ if (colonIndex === -1)
111
+ continue;
112
+ const key = line.slice(0, colonIndex).trim();
113
+ const value = line.slice(colonIndex + 1).trim();
114
+ if (value.startsWith('[') && value.endsWith(']')) {
115
+ frontmatter[key] = value
116
+ .slice(1, -1)
117
+ .split(',')
118
+ .map(s => s.trim().replace(/^["']|["']$/g, ''));
119
+ }
120
+ else {
121
+ frontmatter[key] = value.replace(/^["']|["']$/g, '');
122
+ }
123
+ }
124
+ return frontmatter;
125
+ }
126
+ catch {
127
+ return null;
128
+ }
129
+ }
130
+ /**
131
+ * Assess conversion quality
132
+ */
133
+ assessQuality(skill, skillMd, capabilities) {
134
+ let score = 50; // Base score
135
+ // Stars bonus
136
+ if (skill.stars > 100)
137
+ score += 10;
138
+ else if (skill.stars > 50)
139
+ score += 5;
140
+ else if (skill.stars > 10)
141
+ score += 2;
142
+ // Download bonus
143
+ if (skill.downloads > 1000)
144
+ score += 10;
145
+ else if (skill.downloads > 500)
146
+ score += 5;
147
+ else if (skill.downloads > 100)
148
+ score += 2;
149
+ // Capability bonus
150
+ if (capabilities.length > 0)
151
+ score += 10;
152
+ if (capabilities.length >= 3)
153
+ score += 5;
154
+ // Content length bonus
155
+ if (skillMd.length > 1000)
156
+ score += 5;
157
+ if (skillMd.length > 3000)
158
+ score += 5;
159
+ // Documentation quality
160
+ if (skillMd.includes('## Usage'))
161
+ score += 5;
162
+ if (skillMd.includes('## Example'))
163
+ score += 5;
164
+ if (skillMd.includes('## API'))
165
+ score += 5;
166
+ return Math.min(100, score);
167
+ }
168
+ }
169
+ /**
170
+ * Create skill converter
171
+ */
172
+ export function createSkillConverter(llmClient) {
173
+ return new SkillConverter(llmClient);
174
+ }
175
+ //# sourceMappingURL=converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converter.js","sourceRoot":"","sources":["../../src/skill-sh/converter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;GAEG;AACH,MAAM,OAAO,cAAc;IACL;IAApB,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE5C;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,KAAoB,EACpB,OAAe;QAEf,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACxD,CAAC;QAED,4CAA4C;QAC5C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAErE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACtD,CAAC;QAED,kBAAkB;QAClB,MAAM,SAAS,GAAc;YAC3B,IAAI,EAAE,SAAS,KAAK,CAAC,IAAI,EAAE;YAC3B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,OAAO;YACjC,WAAW,EAAE,WAAW,EAAE,WAAW,IAAI,aAAa,KAAK,CAAC,WAAW,EAAE;YACzE,YAAY;YACZ,YAAY,EAAE,EAAE;YAEhB,KAAK,CAAC,OAAO;gBACX,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC/C,gCAAgC;YAClC,CAAC;YAED,KAAK,CAAC,SAAS;gBACb,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjD,yBAAyB;YAC3B,CAAC;SACF,CAAC;QAEF,0BAA0B;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAEjE,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,SAAS;YACT,OAAO;YACP,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAChC,KAAoB,EACpB,OAAe;QAEf,+CAA+C;QAC/C,MAAM,MAAM,GAAG;;EAEjB,OAAO;;;;;;;;;;oDAU2C,CAAC;QAEjD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBACzC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,gCAAgC,EAAE;gBAC7D,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;aAClC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;YACjC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAE/C,IAAI,CAAC,SAAS;gBAAE,OAAO,EAAE,CAAC;YAE1B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAE9C,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,GAAuF,EAAE,EAAE,CAAC,CAAC;gBACpH,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,OAAO,EAAE,KAAK,IAAI,EAAE;oBAClB,2BAA2B;oBAC3B,0DAA0D;oBAC1D,MAAM,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,IAAI,sBAAsB,CAAC,CAAC;gBAChE,CAAC;aACF,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YACzD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,OAAe;QACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,WAAW,GAA4B,EAAE,CAAC;YAEhD,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,UAAU,KAAK,CAAC,CAAC;oBAAE,SAAS;gBAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAEhD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjD,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;yBACrB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;yBACZ,KAAK,CAAC,GAAG,CAAC;yBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;gBACpD,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;YAED,OAAO,WAA0C,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CACnB,KAAoB,EACpB,OAAe,EACf,YAA0B;QAE1B,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,aAAa;QAE7B,cAAc;QACd,IAAI,KAAK,CAAC,KAAK,GAAG,GAAG;YAAE,KAAK,IAAI,EAAE,CAAC;aAC9B,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE;YAAE,KAAK,IAAI,CAAC,CAAC;aACjC,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE;YAAE,KAAK,IAAI,CAAC,CAAC;QAEtC,iBAAiB;QACjB,IAAI,KAAK,CAAC,SAAS,GAAG,IAAI;YAAE,KAAK,IAAI,EAAE,CAAC;aACnC,IAAI,KAAK,CAAC,SAAS,GAAG,GAAG;YAAE,KAAK,IAAI,CAAC,CAAC;aACtC,IAAI,KAAK,CAAC,SAAS,GAAG,GAAG;YAAE,KAAK,IAAI,CAAC,CAAC;QAE3C,mBAAmB;QACnB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,IAAI,EAAE,CAAC;QACzC,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;QAEzC,uBAAuB;QACvB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI;YAAE,KAAK,IAAI,CAAC,CAAC;QACtC,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI;YAAE,KAAK,IAAI,CAAC,CAAC;QAEtC,wBAAwB;QACxB,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;QAC7C,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAoB;IACvD,OAAO,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Skill Discovery Engine
3
+ *
4
+ * @module @jclaw/core/skill-sh/discovery
5
+ */
6
+ import type { LLMClient } from '../runtime/llm-client.js';
7
+ import type { ExtensionRegistry } from '../extension-system/registry.js';
8
+ import type { AutoSkillGenerator } from '../auto-skill/generator.js';
9
+ import type { SkillShResult, SkillDiscoveryResult } from './types.js';
10
+ import type { SkillShAdapter } from './adapter.js';
11
+ import type { SkillConverter } from './converter.js';
12
+ export declare class SkillDiscoveryEngine {
13
+ private llmClient;
14
+ private registry;
15
+ private skillShAdapter;
16
+ private skillConverter;
17
+ private autoSkillGenerator?;
18
+ constructor(llmClient: LLMClient, registry: ExtensionRegistry, skillShAdapter: SkillShAdapter, skillConverter: SkillConverter, autoSkillGenerator?: AutoSkillGenerator | undefined);
19
+ discover(query: string): Promise<SkillDiscoveryResult>;
20
+ private searchSkillSh;
21
+ private searchLocal;
22
+ private rankSkills;
23
+ private selectBestSource;
24
+ private calculateConfidence;
25
+ private assessSkillQuality;
26
+ installSkill(skill: SkillShResult): Promise<boolean>;
27
+ }
28
+ export declare function createSkillDiscoveryEngine(llmClient: LLMClient, registry: ExtensionRegistry, skillShAdapter: SkillShAdapter, skillConverter: SkillConverter, autoSkillGenerator?: AutoSkillGenerator): SkillDiscoveryEngine;
29
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/skill-sh/discovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EAErB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,kBAAkB,CAAC;gBAJnB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,kBAAkB,CAAC,EAAE,kBAAkB,YAAA;IAG3C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;YA8B9C,aAAa;YAkBb,WAAW;IAuCzB,OAAO,CAAC,UAAU;IAiClB,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;IAgBpB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;CAoB3D;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,kBAAkB,CAAC,EAAE,kBAAkB,GACtC,oBAAoB,CAQtB"}