@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,189 @@
1
+ /**
2
+ * Skill Discovery Engine
3
+ *
4
+ * @module @jclaw/core/skill-sh/discovery
5
+ */
6
+ export class SkillDiscoveryEngine {
7
+ llmClient;
8
+ registry;
9
+ skillShAdapter;
10
+ skillConverter;
11
+ autoSkillGenerator;
12
+ constructor(llmClient, registry, skillShAdapter, skillConverter, autoSkillGenerator) {
13
+ this.llmClient = llmClient;
14
+ this.registry = registry;
15
+ this.skillShAdapter = skillShAdapter;
16
+ this.skillConverter = skillConverter;
17
+ this.autoSkillGenerator = autoSkillGenerator;
18
+ }
19
+ async discover(query) {
20
+ console.log(`🔍 Discovering skills for: "${query}"`);
21
+ const [skillShResults, localMatches] = await Promise.all([
22
+ this.searchSkillSh(query),
23
+ this.searchLocal(query),
24
+ ]);
25
+ console.log(` Found ${skillShResults.length} skills on skill.sh`);
26
+ console.log(` Found ${localMatches.length} local matches`);
27
+ const rankedSkillSh = this.rankSkills(skillShResults, query);
28
+ const { recommended, source, confidence } = this.selectBestSource(rankedSkillSh, localMatches, query);
29
+ return {
30
+ query,
31
+ skillShResults: rankedSkillSh,
32
+ communityResults: [],
33
+ autoGenerated: undefined,
34
+ recommended,
35
+ confidence,
36
+ source,
37
+ };
38
+ }
39
+ async searchSkillSh(query) {
40
+ try {
41
+ const results = await this.skillShAdapter.search({
42
+ query,
43
+ sortBy: 'quality',
44
+ limit: 10,
45
+ });
46
+ return results.map(result => ({
47
+ ...result,
48
+ quality: this.assessSkillQuality(result),
49
+ }));
50
+ }
51
+ catch (error) {
52
+ console.error('skill.sh search failed:', error);
53
+ return [];
54
+ }
55
+ }
56
+ async searchLocal(query) {
57
+ const keywords = query.toLowerCase().split(' ');
58
+ const results = [];
59
+ for (const ext of this.registry.getAll()) {
60
+ const searchableText = [
61
+ ext.name,
62
+ ext.description,
63
+ ...ext.capabilities.map(c => c.name),
64
+ ].join(' ').toLowerCase();
65
+ const matchScore = keywords.reduce((score, keyword) => {
66
+ if (searchableText.includes(keyword))
67
+ score += 1;
68
+ return score;
69
+ }, 0);
70
+ if (matchScore > 0) {
71
+ results.push({
72
+ id: ext.name,
73
+ name: ext.name,
74
+ description: ext.description,
75
+ owner: 'local',
76
+ repo: ext.name,
77
+ stars: 0,
78
+ downloads: 0,
79
+ updatedAt: new Date().toISOString(),
80
+ version: ext.version,
81
+ categories: [],
82
+ tags: [],
83
+ agents: ['jclaw'],
84
+ quality: 90,
85
+ rating: 5,
86
+ });
87
+ }
88
+ }
89
+ return results;
90
+ }
91
+ rankSkills(skills, query) {
92
+ const queryLower = query.toLowerCase();
93
+ const keywords = queryLower.split(' ');
94
+ return skills
95
+ .map(skill => {
96
+ let score = skill.quality * 0.4;
97
+ if (skill.name.toLowerCase().includes(queryLower)) {
98
+ score += 30;
99
+ }
100
+ const descMatches = keywords.filter(kw => skill.description.toLowerCase().includes(kw)).length;
101
+ score += descMatches * 10;
102
+ const catMatches = keywords.filter(kw => skill.categories.some(cat => cat.toLowerCase().includes(kw))).length;
103
+ score += catMatches * 15;
104
+ if (skill.stars > 100)
105
+ score += 10;
106
+ else if (skill.stars > 50)
107
+ score += 5;
108
+ if (skill.downloads > 1000)
109
+ score += 10;
110
+ else if (skill.downloads > 500)
111
+ score += 5;
112
+ return { ...skill, relevanceScore: score };
113
+ })
114
+ .sort((a, b) => (b.relevanceScore || 0) - (a.relevanceScore || 0));
115
+ }
116
+ selectBestSource(skillShResults, localMatches, query) {
117
+ if (localMatches.length > 0) {
118
+ return {
119
+ recommended: localMatches[0],
120
+ source: 'skill.sh',
121
+ confidence: 0.95,
122
+ };
123
+ }
124
+ if (skillShResults.length > 0) {
125
+ const best = skillShResults[0];
126
+ const confidence = this.calculateConfidence(best, query);
127
+ return {
128
+ recommended: best,
129
+ source: 'skill.sh',
130
+ confidence,
131
+ };
132
+ }
133
+ return {
134
+ source: 'none',
135
+ confidence: 0,
136
+ };
137
+ }
138
+ calculateConfidence(skill, query) {
139
+ let confidence = skill.quality / 100;
140
+ if (skill.stars > 100)
141
+ confidence += 0.1;
142
+ if (skill.stars > 500)
143
+ confidence += 0.1;
144
+ if (skill.downloads > 1000)
145
+ confidence += 0.1;
146
+ if (skill.stars < 10)
147
+ confidence -= 0.2;
148
+ if (skill.downloads < 50)
149
+ confidence -= 0.2;
150
+ return Math.min(1, Math.max(0, confidence));
151
+ }
152
+ assessSkillQuality(skill) {
153
+ let score = skill.quality || 50;
154
+ if (skill.stars > 100)
155
+ score += 10;
156
+ if (skill.downloads > 1000)
157
+ score += 10;
158
+ if (skill.rating > 4)
159
+ score += 10;
160
+ const daysSinceUpdate = Math.floor((Date.now() - new Date(skill.updatedAt).getTime()) / (1000 * 60 * 60 * 24));
161
+ if (daysSinceUpdate < 30)
162
+ score += 10;
163
+ else if (daysSinceUpdate < 90)
164
+ score += 5;
165
+ return Math.min(100, score);
166
+ }
167
+ async installSkill(skill) {
168
+ try {
169
+ console.log(`📦 Installing skill: ${skill.id}`);
170
+ const result = await this.skillShAdapter.installSkill(skill.id);
171
+ if (!result.success) {
172
+ console.error(` ❌ Failed: ${result.error}`);
173
+ return false;
174
+ }
175
+ if (result.installPath) {
176
+ console.log(` ✅ Installed to: ${result.installPath}`);
177
+ }
178
+ return true;
179
+ }
180
+ catch (error) {
181
+ console.error('Failed to install skill:', error);
182
+ return false;
183
+ }
184
+ }
185
+ }
186
+ export function createSkillDiscoveryEngine(llmClient, registry, skillShAdapter, skillConverter, autoSkillGenerator) {
187
+ return new SkillDiscoveryEngine(llmClient, registry, skillShAdapter, skillConverter, autoSkillGenerator);
188
+ }
189
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/skill-sh/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Skill.sh Integration Module
3
+ *
4
+ * Integration with skill.sh ecosystem for skill discovery and installation
5
+ *
6
+ * @module @jclaw/core/skill-sh
7
+ */
8
+ export * from './types.js';
9
+ export * from './adapter.js';
10
+ export * from './converter.js';
11
+ export * from './discovery.js';
12
+ export * from './quality.js';
13
+ export * from './registry.js';
14
+ export { createSkillShAdapter, } from './adapter.js';
15
+ export { createSkillConverter, } from './converter.js';
16
+ export { createSkillDiscoveryEngine, } from './discovery.js';
17
+ export { createQualityAssessor, } from './quality.js';
18
+ export { createSkillRegistry, } from './registry.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill-sh/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAG9B,OAAO,EACL,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,mBAAmB,GACpB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Skill.sh Integration Module
3
+ *
4
+ * Integration with skill.sh ecosystem for skill discovery and installation
5
+ *
6
+ * @module @jclaw/core/skill-sh
7
+ */
8
+ export * from './types.js';
9
+ export * from './adapter.js';
10
+ export * from './converter.js';
11
+ export * from './discovery.js';
12
+ export * from './quality.js';
13
+ export * from './registry.js';
14
+ // Re-export factory functions for convenience
15
+ export { createSkillShAdapter, } from './adapter.js';
16
+ export { createSkillConverter, } from './converter.js';
17
+ export { createSkillDiscoveryEngine, } from './discovery.js';
18
+ export { createQualityAssessor, } from './quality.js';
19
+ export { createSkillRegistry, } from './registry.js';
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill-sh/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAE9B,8CAA8C;AAC9C,OAAO,EACL,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,mBAAmB,GACpB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Skill Quality Assessment System
3
+ *
4
+ * Automated quality evaluation for skills
5
+ *
6
+ * @module @jclaw/core/skill-sh/quality
7
+ */
8
+ import type { SkillShResult, SkillQualityAssessment } from './types.js';
9
+ /**
10
+ * Quality Assessor
11
+ */
12
+ export declare class QualityAssessor {
13
+ /**
14
+ * Assess skill quality comprehensively
15
+ */
16
+ assess(skill: SkillShResult, skillMd?: string): Promise<SkillQualityAssessment>;
17
+ /**
18
+ * Gather skill details
19
+ */
20
+ private gatherDetails;
21
+ /**
22
+ * Calculate overall score
23
+ */
24
+ private calculateOverallScore;
25
+ /**
26
+ * Assess code quality
27
+ */
28
+ private assessCodeQuality;
29
+ /**
30
+ * Assess documentation quality
31
+ */
32
+ private assessDocumentation;
33
+ /**
34
+ * Assess test coverage
35
+ */
36
+ private assessTestCoverage;
37
+ /**
38
+ * Assess community health
39
+ */
40
+ private assessCommunity;
41
+ /**
42
+ * Assess security
43
+ */
44
+ private assessSecurity;
45
+ /**
46
+ * Check if recently updated
47
+ */
48
+ private isRecentlyUpdated;
49
+ }
50
+ export declare function createQualityAssessor(): QualityAssessor;
51
+ //# sourceMappingURL=quality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../../src/skill-sh/quality.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAExE;;GAEG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAcrF;;OAEG;YACW,aAAa;IAW3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0B7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAM1B;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Skill Quality Assessment System
3
+ *
4
+ * Automated quality evaluation for skills
5
+ *
6
+ * @module @jclaw/core/skill-sh/quality
7
+ */
8
+ /**
9
+ * Quality Assessor
10
+ */
11
+ export class QualityAssessor {
12
+ /**
13
+ * Assess skill quality comprehensively
14
+ */
15
+ async assess(skill, skillMd) {
16
+ const details = await this.gatherDetails(skill, skillMd);
17
+ return {
18
+ score: this.calculateOverallScore(skill, details),
19
+ codeQuality: this.assessCodeQuality(skill),
20
+ documentation: this.assessDocumentation(skill, details),
21
+ testCoverage: this.assessTestCoverage(details),
22
+ community: this.assessCommunity(skill),
23
+ security: this.assessSecurity(details),
24
+ details,
25
+ };
26
+ }
27
+ /**
28
+ * Gather skill details
29
+ */
30
+ async gatherDetails(skill, skillMd) {
31
+ return {
32
+ linesOfCode: skillMd ? skillMd.split('\n').length : 0,
33
+ hasTests: skillMd ? skillMd.includes('test') || skillMd.includes('Test') : false,
34
+ hasExamples: skillMd ? skillMd.includes('## Example') || skillMd.includes('## Usage') : false,
35
+ hasDocumentation: skillMd ? skillMd.length > 500 : false,
36
+ recentlyUpdated: this.isRecentlyUpdated(skill.updatedAt),
37
+ openIssues: 0, // Would need GitHub API
38
+ };
39
+ }
40
+ /**
41
+ * Calculate overall score
42
+ */
43
+ calculateOverallScore(skill, details) {
44
+ let score = 50;
45
+ // Community metrics (40%)
46
+ if (skill.stars > 100)
47
+ score += 15;
48
+ else if (skill.stars > 50)
49
+ score += 10;
50
+ else if (skill.stars > 10)
51
+ score += 5;
52
+ if (skill.downloads > 1000)
53
+ score += 15;
54
+ else if (skill.downloads > 500)
55
+ score += 10;
56
+ else if (skill.downloads > 100)
57
+ score += 5;
58
+ // Documentation (20%)
59
+ if (details.hasDocumentation)
60
+ score += 10;
61
+ if (details.hasExamples)
62
+ score += 10;
63
+ // Maintenance (20%)
64
+ if (details.recentlyUpdated)
65
+ score += 10;
66
+ if (details.openIssues < 5)
67
+ score += 10;
68
+ // Testing (20%)
69
+ if (details.hasTests)
70
+ score += 20;
71
+ return Math.min(100, score);
72
+ }
73
+ /**
74
+ * Assess code quality
75
+ */
76
+ assessCodeQuality(skill) {
77
+ // This would analyze actual code if available
78
+ return skill.quality || 50;
79
+ }
80
+ /**
81
+ * Assess documentation quality
82
+ */
83
+ assessDocumentation(skill, details) {
84
+ let score = 50;
85
+ if (details.hasDocumentation)
86
+ score += 20;
87
+ if (details.hasExamples)
88
+ score += 20;
89
+ if (skill.description.length > 100)
90
+ score += 10;
91
+ return Math.min(100, score);
92
+ }
93
+ /**
94
+ * Assess test coverage
95
+ */
96
+ assessTestCoverage(details) {
97
+ return details.hasTests ? 70 : 30;
98
+ }
99
+ /**
100
+ * Assess community health
101
+ */
102
+ assessCommunity(skill) {
103
+ let score = 50;
104
+ if (skill.stars > 100)
105
+ score += 25;
106
+ else if (skill.stars > 50)
107
+ score += 15;
108
+ else if (skill.stars > 10)
109
+ score += 5;
110
+ if (skill.downloads > 1000)
111
+ score += 25;
112
+ else if (skill.downloads > 500)
113
+ score += 15;
114
+ else if (skill.downloads > 100)
115
+ score += 5;
116
+ return Math.min(100, score);
117
+ }
118
+ /**
119
+ * Assess security
120
+ */
121
+ assessSecurity(details) {
122
+ // Basic security assessment
123
+ let score = 70;
124
+ // Recently updated is good for security
125
+ if (details.recentlyUpdated)
126
+ score += 10;
127
+ // Well tested is more secure
128
+ if (details.hasTests)
129
+ score += 10;
130
+ // Documentation helps security
131
+ if (details.hasDocumentation)
132
+ score += 10;
133
+ return Math.min(100, score);
134
+ }
135
+ /**
136
+ * Check if recently updated
137
+ */
138
+ isRecentlyUpdated(updatedAt) {
139
+ const days = Math.floor((Date.now() - new Date(updatedAt).getTime()) / (1000 * 60 * 60 * 24));
140
+ return days < 30;
141
+ }
142
+ }
143
+ export function createQualityAssessor() {
144
+ return new QualityAssessor();
145
+ }
146
+ //# sourceMappingURL=quality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../src/skill-sh/quality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Skill Registry
3
+ *
4
+ * Local registry for installed skills
5
+ *
6
+ * @module @jclaw/core/skill-sh/registry
7
+ */
8
+ import type { SkillRegistryEntry } from './types.js';
9
+ /**
10
+ * Skill Registry Manager
11
+ */
12
+ export declare class SkillRegistry {
13
+ private entries;
14
+ private registryPath;
15
+ constructor(storageDir?: string);
16
+ /**
17
+ * Register installed skill
18
+ */
19
+ register(entry: SkillRegistryEntry): Promise<void>;
20
+ /**
21
+ * Get skill entry
22
+ */
23
+ get(id: string): SkillRegistryEntry | undefined;
24
+ /**
25
+ * Check if skill is registered
26
+ */
27
+ has(id: string): boolean;
28
+ /**
29
+ * Get all entries
30
+ */
31
+ getAll(): SkillRegistryEntry[];
32
+ /**
33
+ * Update skill status
34
+ */
35
+ updateStatus(id: string, status: SkillRegistryEntry['status']): Promise<void>;
36
+ /**
37
+ * Record skill usage
38
+ */
39
+ recordUsage(id: string): Promise<void>;
40
+ /**
41
+ * Set user rating
42
+ */
43
+ setRating(id: string, rating: number): Promise<void>;
44
+ /**
45
+ * Remove skill
46
+ */
47
+ unregister(id: string): Promise<void>;
48
+ /**
49
+ * Load registry from disk
50
+ */
51
+ private load;
52
+ /**
53
+ * Save registry to disk
54
+ */
55
+ private save;
56
+ }
57
+ export declare function createSkillRegistry(storageDir?: string): SkillRegistry;
58
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/skill-sh/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,YAAY,CAAS;gBAEjB,UAAU,GAAE,MAA0B;IAKlD;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxD;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI/C;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB;;OAEG;IACH,MAAM,IAAI,kBAAkB,EAAE;IAI9B;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnF;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5C;;OAEG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1D;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C;;OAEG;YACW,IAAI;IAYlB;;OAEG;YACW,IAAI;CAWnB;AAED,wBAAgB,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAEtE"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Skill Registry
3
+ *
4
+ * Local registry for installed skills
5
+ *
6
+ * @module @jclaw/core/skill-sh/registry
7
+ */
8
+ import { readFile, writeFile, mkdir } from 'fs/promises';
9
+ import { existsSync } from 'fs';
10
+ import { join } from 'path';
11
+ const REGISTRY_FILE = 'skill-registry.json';
12
+ /**
13
+ * Skill Registry Manager
14
+ */
15
+ export class SkillRegistry {
16
+ entries = new Map();
17
+ registryPath;
18
+ constructor(storageDir = './.jclaw/skills') {
19
+ this.registryPath = join(storageDir, REGISTRY_FILE);
20
+ this.load();
21
+ }
22
+ /**
23
+ * Register installed skill
24
+ */
25
+ async register(entry) {
26
+ this.entries.set(entry.id, entry);
27
+ await this.save();
28
+ }
29
+ /**
30
+ * Get skill entry
31
+ */
32
+ get(id) {
33
+ return this.entries.get(id);
34
+ }
35
+ /**
36
+ * Check if skill is registered
37
+ */
38
+ has(id) {
39
+ return this.entries.has(id);
40
+ }
41
+ /**
42
+ * Get all entries
43
+ */
44
+ getAll() {
45
+ return Array.from(this.entries.values());
46
+ }
47
+ /**
48
+ * Update skill status
49
+ */
50
+ async updateStatus(id, status) {
51
+ const entry = this.entries.get(id);
52
+ if (entry) {
53
+ entry.status = status;
54
+ await this.save();
55
+ }
56
+ }
57
+ /**
58
+ * Record skill usage
59
+ */
60
+ async recordUsage(id) {
61
+ const entry = this.entries.get(id);
62
+ if (entry) {
63
+ entry.usageCount++;
64
+ entry.lastUsedAt = new Date();
65
+ await this.save();
66
+ }
67
+ }
68
+ /**
69
+ * Set user rating
70
+ */
71
+ async setRating(id, rating) {
72
+ const entry = this.entries.get(id);
73
+ if (entry) {
74
+ entry.userRating = rating;
75
+ await this.save();
76
+ }
77
+ }
78
+ /**
79
+ * Remove skill
80
+ */
81
+ async unregister(id) {
82
+ this.entries.delete(id);
83
+ await this.save();
84
+ }
85
+ /**
86
+ * Load registry from disk
87
+ */
88
+ async load() {
89
+ try {
90
+ if (existsSync(this.registryPath)) {
91
+ const content = await readFile(this.registryPath, 'utf-8');
92
+ const data = JSON.parse(content);
93
+ this.entries = new Map(Object.entries(data));
94
+ }
95
+ }
96
+ catch (error) {
97
+ console.error('Failed to load skill registry:', error);
98
+ }
99
+ }
100
+ /**
101
+ * Save registry to disk
102
+ */
103
+ async save() {
104
+ try {
105
+ const dir = this.registryPath.slice(0, this.registryPath.lastIndexOf('/'));
106
+ await mkdir(dir, { recursive: true });
107
+ const data = Object.fromEntries(this.entries);
108
+ await writeFile(this.registryPath, JSON.stringify(data, null, 2));
109
+ }
110
+ catch (error) {
111
+ console.error('Failed to save skill registry:', error);
112
+ }
113
+ }
114
+ }
115
+ export function createSkillRegistry(storageDir) {
116
+ return new SkillRegistry(storageDir);
117
+ }
118
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/skill-sh/registry.ts"],"names":[],"mappings":"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"}