@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.
Files changed (84) hide show
  1. package/README.md +63 -0
  2. package/dist/cli/forge.d.ts +4 -0
  3. package/dist/cli/forge.d.ts.map +1 -0
  4. package/dist/cli/forge.js +205 -0
  5. package/dist/cli/forge.js.map +1 -0
  6. package/dist/cli/main.js +3 -0
  7. package/dist/cli/main.js.map +1 -1
  8. package/dist/config/index.d.ts.map +1 -1
  9. package/dist/config/index.js +6 -0
  10. package/dist/config/index.js.map +1 -1
  11. package/dist/core/agent.d.ts.map +1 -1
  12. package/dist/core/agent.js +5 -2
  13. package/dist/core/agent.js.map +1 -1
  14. package/dist/forge/community.d.ts +25 -0
  15. package/dist/forge/community.d.ts.map +1 -0
  16. package/dist/forge/community.js +126 -0
  17. package/dist/forge/community.js.map +1 -0
  18. package/dist/forge/discover.d.ts +14 -0
  19. package/dist/forge/discover.d.ts.map +1 -0
  20. package/dist/forge/discover.js +134 -0
  21. package/dist/forge/discover.js.map +1 -0
  22. package/dist/forge/forge.test.d.ts +2 -0
  23. package/dist/forge/forge.test.d.ts.map +1 -0
  24. package/dist/forge/forge.test.js +202 -0
  25. package/dist/forge/forge.test.js.map +1 -0
  26. package/dist/forge/hardware.d.ts +8 -0
  27. package/dist/forge/hardware.d.ts.map +1 -0
  28. package/dist/forge/hardware.js +31 -0
  29. package/dist/forge/hardware.js.map +1 -0
  30. package/dist/forge/hf-client.d.ts +9 -0
  31. package/dist/forge/hf-client.d.ts.map +1 -0
  32. package/dist/forge/hf-client.js +101 -0
  33. package/dist/forge/hf-client.js.map +1 -0
  34. package/dist/forge/index.d.ts +13 -0
  35. package/dist/forge/index.d.ts.map +1 -0
  36. package/dist/forge/index.js +13 -0
  37. package/dist/forge/index.js.map +1 -0
  38. package/dist/forge/loader.d.ts +10 -0
  39. package/dist/forge/loader.d.ts.map +1 -0
  40. package/dist/forge/loader.js +385 -0
  41. package/dist/forge/loader.js.map +1 -0
  42. package/dist/forge/loader.test.d.ts +5 -0
  43. package/dist/forge/loader.test.d.ts.map +1 -0
  44. package/dist/forge/loader.test.js +15 -0
  45. package/dist/forge/loader.test.js.map +1 -0
  46. package/dist/forge/pipeline-builder.d.ts +9 -0
  47. package/dist/forge/pipeline-builder.d.ts.map +1 -0
  48. package/dist/forge/pipeline-builder.js +125 -0
  49. package/dist/forge/pipeline-builder.js.map +1 -0
  50. package/dist/forge/pipeline.d.ts +28 -0
  51. package/dist/forge/pipeline.d.ts.map +1 -0
  52. package/dist/forge/pipeline.js +206 -0
  53. package/dist/forge/pipeline.js.map +1 -0
  54. package/dist/forge/rank.d.ts +3 -0
  55. package/dist/forge/rank.d.ts.map +1 -0
  56. package/dist/forge/rank.js +138 -0
  57. package/dist/forge/rank.js.map +1 -0
  58. package/dist/forge/reasoner.d.ts +10 -0
  59. package/dist/forge/reasoner.d.ts.map +1 -0
  60. package/dist/forge/reasoner.js +312 -0
  61. package/dist/forge/reasoner.js.map +1 -0
  62. package/dist/forge/registry.d.ts +15 -0
  63. package/dist/forge/registry.d.ts.map +1 -0
  64. package/dist/forge/registry.js +149 -0
  65. package/dist/forge/registry.js.map +1 -0
  66. package/dist/forge/scaffold.d.ts +10 -0
  67. package/dist/forge/scaffold.d.ts.map +1 -0
  68. package/dist/forge/scaffold.js +412 -0
  69. package/dist/forge/scaffold.js.map +1 -0
  70. package/dist/forge/scaffolder.d.ts +9 -0
  71. package/dist/forge/scaffolder.d.ts.map +1 -0
  72. package/dist/forge/scaffolder.js +118 -0
  73. package/dist/forge/scaffolder.js.map +1 -0
  74. package/dist/forge/tester.d.ts +9 -0
  75. package/dist/forge/tester.d.ts.map +1 -0
  76. package/dist/forge/tester.js +103 -0
  77. package/dist/forge/tester.js.map +1 -0
  78. package/dist/forge/types.d.ts +54 -0
  79. package/dist/forge/types.d.ts.map +1 -0
  80. package/dist/forge/types.js +3 -0
  81. package/dist/forge/types.js.map +1 -0
  82. package/dist/types/index.d.ts +1 -0
  83. package/dist/types/index.d.ts.map +1 -1
  84. 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"}