@halfagiraf/clawx 0.2.8 โ 0.2.10
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 +63 -0
- package/dist/cli/forge.d.ts +4 -0
- package/dist/cli/forge.d.ts.map +1 -0
- package/dist/cli/forge.js +205 -0
- package/dist/cli/forge.js.map +1 -0
- package/dist/cli/main.js +3 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -1
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +5 -2
- package/dist/core/agent.js.map +1 -1
- package/dist/forge/community.d.ts +25 -0
- package/dist/forge/community.d.ts.map +1 -0
- package/dist/forge/community.js +126 -0
- package/dist/forge/community.js.map +1 -0
- package/dist/forge/discover.d.ts +14 -0
- package/dist/forge/discover.d.ts.map +1 -0
- package/dist/forge/discover.js +134 -0
- package/dist/forge/discover.js.map +1 -0
- package/dist/forge/forge.test.d.ts +2 -0
- package/dist/forge/forge.test.d.ts.map +1 -0
- package/dist/forge/forge.test.js +202 -0
- package/dist/forge/forge.test.js.map +1 -0
- package/dist/forge/hardware.d.ts +8 -0
- package/dist/forge/hardware.d.ts.map +1 -0
- package/dist/forge/hardware.js +31 -0
- package/dist/forge/hardware.js.map +1 -0
- package/dist/forge/hf-client.d.ts +9 -0
- package/dist/forge/hf-client.d.ts.map +1 -0
- package/dist/forge/hf-client.js +101 -0
- package/dist/forge/hf-client.js.map +1 -0
- package/dist/forge/index.d.ts +13 -0
- package/dist/forge/index.d.ts.map +1 -0
- package/dist/forge/index.js +13 -0
- package/dist/forge/index.js.map +1 -0
- package/dist/forge/loader.d.ts +10 -0
- package/dist/forge/loader.d.ts.map +1 -0
- package/dist/forge/loader.js +385 -0
- package/dist/forge/loader.js.map +1 -0
- package/dist/forge/loader.test.d.ts +5 -0
- package/dist/forge/loader.test.d.ts.map +1 -0
- package/dist/forge/loader.test.js +15 -0
- package/dist/forge/loader.test.js.map +1 -0
- package/dist/forge/pipeline-builder.d.ts +9 -0
- package/dist/forge/pipeline-builder.d.ts.map +1 -0
- package/dist/forge/pipeline-builder.js +125 -0
- package/dist/forge/pipeline-builder.js.map +1 -0
- package/dist/forge/pipeline.d.ts +28 -0
- package/dist/forge/pipeline.d.ts.map +1 -0
- package/dist/forge/pipeline.js +206 -0
- package/dist/forge/pipeline.js.map +1 -0
- package/dist/forge/rank.d.ts +3 -0
- package/dist/forge/rank.d.ts.map +1 -0
- package/dist/forge/rank.js +138 -0
- package/dist/forge/rank.js.map +1 -0
- package/dist/forge/reasoner.d.ts +10 -0
- package/dist/forge/reasoner.d.ts.map +1 -0
- package/dist/forge/reasoner.js +312 -0
- package/dist/forge/reasoner.js.map +1 -0
- package/dist/forge/registry.d.ts +15 -0
- package/dist/forge/registry.d.ts.map +1 -0
- package/dist/forge/registry.js +149 -0
- package/dist/forge/registry.js.map +1 -0
- package/dist/forge/scaffold.d.ts +10 -0
- package/dist/forge/scaffold.d.ts.map +1 -0
- package/dist/forge/scaffold.js +412 -0
- package/dist/forge/scaffold.js.map +1 -0
- package/dist/forge/scaffolder.d.ts +9 -0
- package/dist/forge/scaffolder.d.ts.map +1 -0
- package/dist/forge/scaffolder.js +118 -0
- package/dist/forge/scaffolder.js.map +1 -0
- package/dist/forge/tester.d.ts +9 -0
- package/dist/forge/tester.d.ts.map +1 -0
- package/dist/forge/tester.js +103 -0
- package/dist/forge/tester.js.map +1 -0
- package/dist/forge/types.d.ts +54 -0
- package/dist/forge/types.d.ts.map +1 -0
- package/dist/forge/types.js +3 -0
- package/dist/forge/types.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Forge capability reasoner.
|
|
3
|
+
*
|
|
4
|
+
* Analyzes models and datasets to identify novel capabilities
|
|
5
|
+
* and applications.
|
|
6
|
+
*/
|
|
7
|
+
import { resolveModel } from "../core/provider.js";
|
|
8
|
+
import { log } from "../utils/logger.js";
|
|
9
|
+
export async function analyzeCapabilities(config, models, datasets, options) {
|
|
10
|
+
// Use a simpler model for reasoning if available
|
|
11
|
+
const reasoningConfig = { ...config };
|
|
12
|
+
if (config.model.includes("deepseek-chat")) {
|
|
13
|
+
reasoningConfig.model = "deepseek-chat"; // Use the same model
|
|
14
|
+
}
|
|
15
|
+
const model = resolveModel(reasoningConfig);
|
|
16
|
+
// Group models by task/capability
|
|
17
|
+
const modelGroups = groupModelsByCapability(models);
|
|
18
|
+
const datasetGroups = groupDatasetsByPurpose(datasets);
|
|
19
|
+
// Generate capability ideas
|
|
20
|
+
const capabilities = [];
|
|
21
|
+
// Simple rule-based capability generation for initial implementation
|
|
22
|
+
capabilities.push(...generateRuleBasedCapabilities(modelGroups, datasetGroups));
|
|
23
|
+
// If we have a working model, use it for more sophisticated reasoning
|
|
24
|
+
if (models.length > 0) {
|
|
25
|
+
try {
|
|
26
|
+
const llmCapabilities = await generateLlmCapabilities(model, reasoningConfig, modelGroups, datasetGroups, options);
|
|
27
|
+
capabilities.push(...llmCapabilities);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
log.warn("LLM capability generation failed, using rule-based only:", error);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Deduplicate capabilities
|
|
34
|
+
let filteredCapabilities = deduplicateCapabilities(capabilities);
|
|
35
|
+
// Apply hardware-aware filtering
|
|
36
|
+
const { filterByHardware } = await import("./hardware.js");
|
|
37
|
+
filteredCapabilities = filterByHardware(filteredCapabilities, options.minFeasibility);
|
|
38
|
+
// Apply limit
|
|
39
|
+
return filteredCapabilities.slice(0, options.limit || 5);
|
|
40
|
+
}
|
|
41
|
+
function groupModelsByCapability(models) {
|
|
42
|
+
const groups = new Map();
|
|
43
|
+
for (const model of models) {
|
|
44
|
+
const tags = model.tags || [];
|
|
45
|
+
const pipeline = model.pipeline_tag || "unknown";
|
|
46
|
+
// Extract capabilities from tags and pipeline
|
|
47
|
+
const capabilities = new Set();
|
|
48
|
+
capabilities.add(pipeline);
|
|
49
|
+
for (const tag of tags) {
|
|
50
|
+
if (tag.includes("text") ||
|
|
51
|
+
tag.includes("image") ||
|
|
52
|
+
tag.includes("audio") ||
|
|
53
|
+
tag.includes("video") ||
|
|
54
|
+
tag.includes("classification") ||
|
|
55
|
+
tag.includes("generation") ||
|
|
56
|
+
tag.includes("detection") ||
|
|
57
|
+
tag.includes("segmentation") ||
|
|
58
|
+
tag.includes("translation")) {
|
|
59
|
+
capabilities.add(tag);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
for (const capability of capabilities) {
|
|
63
|
+
if (!groups.has(capability)) {
|
|
64
|
+
groups.set(capability, []);
|
|
65
|
+
}
|
|
66
|
+
groups.get(capability).push(model);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return groups;
|
|
70
|
+
}
|
|
71
|
+
function groupDatasetsByPurpose(datasets) {
|
|
72
|
+
const groups = new Map();
|
|
73
|
+
for (const dataset of datasets) {
|
|
74
|
+
const tags = dataset.tags || [];
|
|
75
|
+
const purposes = new Set();
|
|
76
|
+
// Extract purposes from tags and description
|
|
77
|
+
for (const tag of tags) {
|
|
78
|
+
if (tag.includes("dataset") ||
|
|
79
|
+
tag.includes("training") ||
|
|
80
|
+
tag.includes("evaluation") ||
|
|
81
|
+
tag.includes("benchmark")) {
|
|
82
|
+
purposes.add(tag);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (dataset.description) {
|
|
86
|
+
const desc = dataset.description.toLowerCase();
|
|
87
|
+
if (desc.includes("question answering"))
|
|
88
|
+
purposes.add("qa");
|
|
89
|
+
if (desc.includes("summarization"))
|
|
90
|
+
purposes.add("summarization");
|
|
91
|
+
if (desc.includes("classification"))
|
|
92
|
+
purposes.add("classification");
|
|
93
|
+
if (desc.includes("translation"))
|
|
94
|
+
purposes.add("translation");
|
|
95
|
+
}
|
|
96
|
+
for (const purpose of purposes) {
|
|
97
|
+
if (!groups.has(purpose)) {
|
|
98
|
+
groups.set(purpose, []);
|
|
99
|
+
}
|
|
100
|
+
groups.get(purpose).push(dataset);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return groups;
|
|
104
|
+
}
|
|
105
|
+
function generateRuleBasedCapabilities(modelGroups, datasetGroups) {
|
|
106
|
+
const capabilities = [];
|
|
107
|
+
const now = new Date().toISOString();
|
|
108
|
+
// Text-based capabilities
|
|
109
|
+
if (modelGroups.has("text-generation")) {
|
|
110
|
+
const models = modelGroups.get("text-generation");
|
|
111
|
+
capabilities.push({
|
|
112
|
+
id: `text-gen-${Date.now()}`,
|
|
113
|
+
name: "Text Generation Tool",
|
|
114
|
+
description: "Generate text based on prompts using a text generation model",
|
|
115
|
+
models: models.slice(0, 2).map((m) => ({
|
|
116
|
+
id: m.id,
|
|
117
|
+
task: "text-generation",
|
|
118
|
+
capabilities: ["text-generation"],
|
|
119
|
+
license: "Apache-2.0",
|
|
120
|
+
})),
|
|
121
|
+
feasibility: "high",
|
|
122
|
+
implementation: {
|
|
123
|
+
toolName: "text_generate",
|
|
124
|
+
parameters: {
|
|
125
|
+
prompt: "string",
|
|
126
|
+
max_length: "number",
|
|
127
|
+
temperature: "number",
|
|
128
|
+
},
|
|
129
|
+
exampleUsage: "text_generate prompt='Write a short story about' max_length=200",
|
|
130
|
+
estimatedComplexity: "simple",
|
|
131
|
+
implementationType: "generation",
|
|
132
|
+
},
|
|
133
|
+
status: "discovered",
|
|
134
|
+
discoveredAt: now,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
if (modelGroups.has("text-classification")) {
|
|
138
|
+
const models = modelGroups.get("text-classification");
|
|
139
|
+
capabilities.push({
|
|
140
|
+
id: `text-classify-${Date.now()}`,
|
|
141
|
+
name: "Text Classification Tool",
|
|
142
|
+
description: "Classify text into categories using a classification model",
|
|
143
|
+
models: models.slice(0, 2).map((m) => ({
|
|
144
|
+
id: m.id,
|
|
145
|
+
task: "text-classification",
|
|
146
|
+
capabilities: ["text-classification"],
|
|
147
|
+
license: "Apache-2.0",
|
|
148
|
+
})),
|
|
149
|
+
feasibility: "high",
|
|
150
|
+
implementation: {
|
|
151
|
+
toolName: "text_classify",
|
|
152
|
+
parameters: {
|
|
153
|
+
text: "string",
|
|
154
|
+
categories: "array",
|
|
155
|
+
},
|
|
156
|
+
exampleUsage: "text_classify text='This is a positive review' categories=['positive', 'negative', 'neutral']",
|
|
157
|
+
estimatedComplexity: "simple",
|
|
158
|
+
implementationType: "classification",
|
|
159
|
+
},
|
|
160
|
+
status: "discovered",
|
|
161
|
+
discoveredAt: now,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
// Multi-model capabilities
|
|
165
|
+
if (modelGroups.has("text-generation") && modelGroups.has("summarization")) {
|
|
166
|
+
const genModels = modelGroups.get("text-generation");
|
|
167
|
+
const sumModels = modelGroups.get("summarization");
|
|
168
|
+
capabilities.push({
|
|
169
|
+
id: `doc-process-${Date.now()}`,
|
|
170
|
+
name: "Document Processing Pipeline",
|
|
171
|
+
description: "Extract, summarize, and analyze documents using multiple models",
|
|
172
|
+
models: [
|
|
173
|
+
...genModels.slice(0, 1).map((m) => ({
|
|
174
|
+
id: m.id,
|
|
175
|
+
task: "text-generation",
|
|
176
|
+
capabilities: ["text-generation", "extraction"],
|
|
177
|
+
license: "Apache-2.0",
|
|
178
|
+
})),
|
|
179
|
+
...sumModels.slice(0, 1).map((m) => ({
|
|
180
|
+
id: m.id,
|
|
181
|
+
task: "summarization",
|
|
182
|
+
capabilities: ["summarization"],
|
|
183
|
+
license: "Apache-2.0",
|
|
184
|
+
})),
|
|
185
|
+
],
|
|
186
|
+
feasibility: "medium",
|
|
187
|
+
implementation: {
|
|
188
|
+
toolName: "process_document",
|
|
189
|
+
parameters: {
|
|
190
|
+
document: "string",
|
|
191
|
+
operations: "array",
|
|
192
|
+
},
|
|
193
|
+
exampleUsage: "process_document document='<long text>' operations=['extract_key_points', 'summarize']",
|
|
194
|
+
estimatedComplexity: "medium",
|
|
195
|
+
implementationType: "simulated",
|
|
196
|
+
},
|
|
197
|
+
status: "discovered",
|
|
198
|
+
discoveredAt: now,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
return capabilities;
|
|
202
|
+
}
|
|
203
|
+
async function generateLlmCapabilities(model, config, modelGroups, datasetGroups, options) {
|
|
204
|
+
try {
|
|
205
|
+
// Prepare model information for the LLM
|
|
206
|
+
const modelInfo = Array.from(modelGroups.entries())
|
|
207
|
+
.flatMap(([capability, models]) => models.slice(0, 3).map(m => ({
|
|
208
|
+
capability,
|
|
209
|
+
id: m.id,
|
|
210
|
+
downloads: m.downloads,
|
|
211
|
+
tags: m.tags?.slice(0, 5) || [],
|
|
212
|
+
pipeline: m.pipeline_tag,
|
|
213
|
+
})));
|
|
214
|
+
const datasetInfo = Array.from(datasetGroups.entries())
|
|
215
|
+
.flatMap(([purpose, datasets]) => datasets.slice(0, 2).map(d => ({
|
|
216
|
+
purpose,
|
|
217
|
+
id: d.id,
|
|
218
|
+
description: d.description?.substring(0, 200) || '',
|
|
219
|
+
tags: d.tags?.slice(0, 5) || [],
|
|
220
|
+
})));
|
|
221
|
+
// Create a prompt for capability generation
|
|
222
|
+
const prompt = `You are Clawx Forge, a capability discovery engine. Analyze these Hugging Face resources and suggest novel capabilities.
|
|
223
|
+
|
|
224
|
+
Available Models:
|
|
225
|
+
${modelInfo.map(m => `- ${m.id} (${m.capability}): ${m.tags.join(', ')}`).join('\n')}
|
|
226
|
+
|
|
227
|
+
${datasetInfo.length > 0 ? `Available Datasets:\n${datasetInfo.map(d => `- ${d.id} (${d.purpose}): ${d.description}`).join('\n')}` : ''}
|
|
228
|
+
|
|
229
|
+
Query: "${options.query || 'general capabilities'}"
|
|
230
|
+
|
|
231
|
+
Generate 3-5 novel capability ideas that combine these resources. For each capability:
|
|
232
|
+
1. Give it a descriptive name
|
|
233
|
+
2. Describe what it does
|
|
234
|
+
3. List which models/datasets it would use
|
|
235
|
+
4. Rate feasibility (high/medium/low)
|
|
236
|
+
5. Suggest a tool name and parameters
|
|
237
|
+
|
|
238
|
+
Format as JSON array with these fields: name, description, models (array of model IDs), datasets (optional array), feasibility, toolName, parameters (object with param:type).`;
|
|
239
|
+
// Use the model to generate capabilities
|
|
240
|
+
// Note: In a full implementation, we'd use the actual model API
|
|
241
|
+
// For now, simulate with a simple response
|
|
242
|
+
const simulatedResponse = [
|
|
243
|
+
{
|
|
244
|
+
name: "Document Q&A System",
|
|
245
|
+
description: "Answer questions about documents by combining text extraction with question-answering models",
|
|
246
|
+
models: modelInfo.filter(m => m.capability.includes('text') || m.capability.includes('qa')).slice(0, 2).map(m => m.id),
|
|
247
|
+
feasibility: "medium",
|
|
248
|
+
toolName: "document_qa",
|
|
249
|
+
parameters: {
|
|
250
|
+
document: "string",
|
|
251
|
+
question: "string",
|
|
252
|
+
context_length: "number"
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
name: "Code Review Assistant",
|
|
257
|
+
description: "Analyze code for bugs, style issues, and security vulnerabilities",
|
|
258
|
+
models: modelInfo.filter(m => m.tags.some(t => t.includes('code') || t.includes('programming'))).slice(0, 2).map(m => m.id),
|
|
259
|
+
feasibility: "high",
|
|
260
|
+
toolName: "code_review",
|
|
261
|
+
parameters: {
|
|
262
|
+
code: "string",
|
|
263
|
+
language: "string",
|
|
264
|
+
checks: "array"
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
];
|
|
268
|
+
const now = new Date().toISOString();
|
|
269
|
+
return simulatedResponse.map((cap, index) => ({
|
|
270
|
+
id: `llm-gen-${Date.now()}-${index}`,
|
|
271
|
+
name: cap.name,
|
|
272
|
+
description: cap.description,
|
|
273
|
+
models: cap.models.map(modelId => ({
|
|
274
|
+
id: modelId,
|
|
275
|
+
task: "unknown",
|
|
276
|
+
capabilities: ["llm-generated"],
|
|
277
|
+
license: "unknown"
|
|
278
|
+
})),
|
|
279
|
+
datasets: cap.datasets?.map((datasetId) => ({
|
|
280
|
+
id: datasetId,
|
|
281
|
+
purpose: "llm-generated"
|
|
282
|
+
})),
|
|
283
|
+
feasibility: cap.feasibility,
|
|
284
|
+
implementation: {
|
|
285
|
+
toolName: cap.toolName,
|
|
286
|
+
parameters: cap.parameters,
|
|
287
|
+
exampleUsage: `${cap.toolName} ${Object.keys(cap.parameters)[0]}="example"`,
|
|
288
|
+
estimatedComplexity: cap.feasibility === "high" ? "simple" : cap.feasibility === "medium" ? "medium" : "complex",
|
|
289
|
+
implementationType: "simulated"
|
|
290
|
+
},
|
|
291
|
+
status: "discovered",
|
|
292
|
+
discoveredAt: now
|
|
293
|
+
}));
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
log.warn("LLM capability generation failed:", error);
|
|
297
|
+
return [];
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
function deduplicateCapabilities(capabilities) {
|
|
301
|
+
const seen = new Set();
|
|
302
|
+
const unique = [];
|
|
303
|
+
for (const cap of capabilities) {
|
|
304
|
+
const key = `${cap.name}-${cap.models.map(m => m.id).join(",")}`;
|
|
305
|
+
if (!seen.has(key)) {
|
|
306
|
+
seen.add(key);
|
|
307
|
+
unique.push(cap);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return unique;
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=reasoner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoner.js","sourceRoot":"","sources":["../../src/forge/reasoner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Forge capability registry.
|
|
3
|
+
*
|
|
4
|
+
* Manages discovered and built capabilities.
|
|
5
|
+
*/
|
|
6
|
+
import type { DiscoveredCapability } from "./types.js";
|
|
7
|
+
export declare function getForgeDir(): string;
|
|
8
|
+
export declare function getCapabilitiesDir(): string;
|
|
9
|
+
export declare function getForgeToolsDir(): string;
|
|
10
|
+
export declare function getCapabilityPath(id: string): string;
|
|
11
|
+
export declare function saveCapability(capability: DiscoveredCapability): Promise<void>;
|
|
12
|
+
export declare function loadCapability(id: string): Promise<DiscoveredCapability | null>;
|
|
13
|
+
export declare function listCapabilities(statusFilter?: string): Promise<void>;
|
|
14
|
+
export declare function listBuiltTools(): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/forge/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAsB,cAAc,CAAC,UAAU,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpF;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAarF;AAED,wBAAsB,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD3E;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCpD"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Forge capability registry.
|
|
3
|
+
*
|
|
4
|
+
* Manages discovered and built capabilities.
|
|
5
|
+
*/
|
|
6
|
+
import fs from "node:fs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import { getGlobalConfigDir } from "../config/index.js";
|
|
9
|
+
import { log } from "../utils/logger.js";
|
|
10
|
+
export function getForgeDir() {
|
|
11
|
+
return path.join(getGlobalConfigDir(), "forge");
|
|
12
|
+
}
|
|
13
|
+
export function getCapabilitiesDir() {
|
|
14
|
+
return path.join(getForgeDir(), "capabilities");
|
|
15
|
+
}
|
|
16
|
+
export function getForgeToolsDir() {
|
|
17
|
+
return path.join(getForgeDir(), "tools");
|
|
18
|
+
}
|
|
19
|
+
export function getCapabilityPath(id) {
|
|
20
|
+
return path.join(getCapabilitiesDir(), `${id}.json`);
|
|
21
|
+
}
|
|
22
|
+
export async function saveCapability(capability) {
|
|
23
|
+
const dir = getCapabilitiesDir();
|
|
24
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
25
|
+
const filePath = getCapabilityPath(capability.id);
|
|
26
|
+
fs.writeFileSync(filePath, JSON.stringify(capability, null, 2), "utf-8");
|
|
27
|
+
}
|
|
28
|
+
export async function loadCapability(id) {
|
|
29
|
+
const filePath = getCapabilityPath(id);
|
|
30
|
+
if (!fs.existsSync(filePath)) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
35
|
+
return JSON.parse(content);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
log.error(`Failed to load capability ${id}:`, error);
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export async function listCapabilities(statusFilter) {
|
|
43
|
+
const dir = getCapabilitiesDir();
|
|
44
|
+
if (!fs.existsSync(dir)) {
|
|
45
|
+
console.log("\n No capabilities discovered yet.");
|
|
46
|
+
console.log(" Use: clawx forge discover [query]\n");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const files = fs.readdirSync(dir).filter(f => f.endsWith('.json'));
|
|
50
|
+
if (files.length === 0) {
|
|
51
|
+
console.log("\n No capabilities discovered yet.");
|
|
52
|
+
console.log(" Use: clawx forge discover [query]\n");
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
console.log("\n๐ Discovered Capabilities:\n");
|
|
56
|
+
const capabilities = [];
|
|
57
|
+
for (const file of files) {
|
|
58
|
+
try {
|
|
59
|
+
const content = fs.readFileSync(path.join(dir, file), "utf-8");
|
|
60
|
+
const capability = JSON.parse(content);
|
|
61
|
+
if (!statusFilter || capability.status === statusFilter) {
|
|
62
|
+
capabilities.push(capability);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
log.warn(`Failed to load capability from ${file}:`, error);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (capabilities.length === 0) {
|
|
70
|
+
console.log(` No capabilities with status: ${statusFilter}`);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
for (const cap of capabilities) {
|
|
74
|
+
const statusIcon = getStatusIcon(cap.status);
|
|
75
|
+
console.log(` ${statusIcon} ${cap.name}`);
|
|
76
|
+
console.log(` ${cap.description}`);
|
|
77
|
+
console.log(` ID: ${cap.id}`);
|
|
78
|
+
console.log(` Status: ${cap.status}`);
|
|
79
|
+
console.log(` Feasibility: ${cap.feasibility}`);
|
|
80
|
+
console.log(` Tool: ${cap.implementation.toolName}`);
|
|
81
|
+
console.log();
|
|
82
|
+
}
|
|
83
|
+
console.log(` Total: ${capabilities.length} capability(ies)`);
|
|
84
|
+
console.log(`\n Build with: clawx forge build <id>\n`);
|
|
85
|
+
}
|
|
86
|
+
export async function listBuiltTools() {
|
|
87
|
+
const toolsDir = getForgeToolsDir();
|
|
88
|
+
if (!fs.existsSync(toolsDir)) {
|
|
89
|
+
console.log("\n No Forge-built tools yet.");
|
|
90
|
+
console.log(" Use: clawx forge build <capability-id>\n");
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const files = fs.readdirSync(toolsDir).filter(f => f.endsWith('.ts') && !f.endsWith('.test.ts'));
|
|
94
|
+
if (files.length === 0) {
|
|
95
|
+
console.log("\n No Forge-built tools yet.");
|
|
96
|
+
console.log(" Use: clawx forge build <capability-id>\n");
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
console.log("\n๐ ๏ธ Forge-built Tools:\n");
|
|
100
|
+
for (const file of files) {
|
|
101
|
+
const toolName = file.replace('.ts', '');
|
|
102
|
+
const testFile = path.join(toolsDir, `${toolName}.test.ts`);
|
|
103
|
+
const hasTest = fs.existsSync(testFile);
|
|
104
|
+
console.log(` ${toolName}`);
|
|
105
|
+
console.log(` File: ${path.join(toolsDir, file)}`);
|
|
106
|
+
console.log(` Test: ${hasTest ? 'โ
' : 'โ'}`);
|
|
107
|
+
// Try to load capability info
|
|
108
|
+
const capabilities = await findCapabilityForTool(toolName);
|
|
109
|
+
if (capabilities.length > 0) {
|
|
110
|
+
const cap = capabilities[0];
|
|
111
|
+
console.log(` From: ${cap.name}`);
|
|
112
|
+
console.log(` Status: ${cap.status}`);
|
|
113
|
+
}
|
|
114
|
+
console.log();
|
|
115
|
+
}
|
|
116
|
+
console.log(` Total: ${files.length} tool(s)`);
|
|
117
|
+
console.log(`\n Tools are ready to be loaded in Clawx sessions.\n`);
|
|
118
|
+
}
|
|
119
|
+
async function findCapabilityForTool(toolName) {
|
|
120
|
+
const dir = getCapabilitiesDir();
|
|
121
|
+
if (!fs.existsSync(dir))
|
|
122
|
+
return [];
|
|
123
|
+
const files = fs.readdirSync(dir).filter(f => f.endsWith('.json'));
|
|
124
|
+
const matches = [];
|
|
125
|
+
for (const file of files) {
|
|
126
|
+
try {
|
|
127
|
+
const content = fs.readFileSync(path.join(dir, file), "utf-8");
|
|
128
|
+
const capability = JSON.parse(content);
|
|
129
|
+
if (capability.implementation.toolName === toolName) {
|
|
130
|
+
matches.push(capability);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
// Skip invalid files
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return matches;
|
|
138
|
+
}
|
|
139
|
+
function getStatusIcon(status) {
|
|
140
|
+
switch (status) {
|
|
141
|
+
case 'discovered': return '๐';
|
|
142
|
+
case 'building': return '๐จ';
|
|
143
|
+
case 'built': return 'โ
';
|
|
144
|
+
case 'tested': return '๐งช';
|
|
145
|
+
case 'failed': return 'โ';
|
|
146
|
+
default: return 'โ';
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/forge/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Opportunity, ScaffoldPlan } from './types.js';
|
|
2
|
+
export interface ScaffoldOptions {
|
|
3
|
+
opportunityId: string;
|
|
4
|
+
outputType: 'tool' | 'app';
|
|
5
|
+
outputName: string;
|
|
6
|
+
outputDir?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function createScaffoldPlan(opportunity: Opportunity, options: ScaffoldOptions): ScaffoldPlan;
|
|
9
|
+
export declare function executeScaffoldPlan(plan: ScaffoldPlan, outputDir: string): void;
|
|
10
|
+
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/forge/scaffold.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAIvD,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,GAAG,YAAY,CAQnG;AAgFD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CA6B/E"}
|