@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,101 @@
1
+ // Forge v1: HF API client (models + datasets only)
2
+ const HF_API_BASE = 'https://huggingface.co/api';
3
+ export async function searchModels(query, limit = 20) {
4
+ const url = new URL(`${HF_API_BASE}/models`);
5
+ url.searchParams.set('search', query);
6
+ url.searchParams.set('limit', limit.toString());
7
+ url.searchParams.set('sort', 'downloads');
8
+ url.searchParams.set('direction', '-1');
9
+ try {
10
+ const response = await fetch(url.toString());
11
+ if (!response.ok) {
12
+ throw new Error(`HF API error: ${response.status}`);
13
+ }
14
+ const data = await response.json();
15
+ return data.map(convertHFModelToAsset);
16
+ }
17
+ catch (error) {
18
+ console.error('Failed to search models:', error);
19
+ return [];
20
+ }
21
+ }
22
+ export async function searchDatasets(query, limit = 10) {
23
+ const url = new URL(`${HF_API_BASE}/datasets`);
24
+ url.searchParams.set('search', query);
25
+ url.searchParams.set('limit', limit.toString());
26
+ url.searchParams.set('sort', 'downloads');
27
+ url.searchParams.set('direction', '-1');
28
+ try {
29
+ const response = await fetch(url.toString());
30
+ if (!response.ok) {
31
+ throw new Error(`HF API error: ${response.status}`);
32
+ }
33
+ const data = await response.json();
34
+ return data.map(convertHFDatasetToAsset);
35
+ }
36
+ catch (error) {
37
+ console.error('Failed to search datasets:', error);
38
+ return [];
39
+ }
40
+ }
41
+ function convertHFModelToAsset(hfModel) {
42
+ return {
43
+ id: hfModel.id,
44
+ type: 'model',
45
+ name: hfModel.id.split('/').pop() || hfModel.id,
46
+ author: hfModel.id.split('/')[0] || 'unknown',
47
+ downloads: hfModel.downloads || 0,
48
+ tags: hfModel.tags || [],
49
+ task: hfModel.pipeline_tag,
50
+ modality: extractModality(hfModel.tags),
51
+ license: hfModel.license,
52
+ hardware: estimateHardwareRequirements(hfModel)
53
+ };
54
+ }
55
+ function convertHFDatasetToAsset(hfDataset) {
56
+ return {
57
+ id: hfDataset.id,
58
+ type: 'dataset',
59
+ name: hfDataset.id.split('/').pop() || hfDataset.id,
60
+ author: hfDataset.id.split('/')[0] || 'unknown',
61
+ downloads: hfDataset.downloads || 0,
62
+ tags: hfDataset.tags || [],
63
+ task: extractDatasetTask(hfDataset.tags),
64
+ modality: extractModality(hfDataset.tags),
65
+ license: hfDataset.license,
66
+ hardware: { gpu: false, memory: 'low' } // Datasets don't need GPU
67
+ };
68
+ }
69
+ function extractModality(tags) {
70
+ const modalities = ['text', 'image', 'audio', 'video', 'multimodal'];
71
+ for (const modality of modalities) {
72
+ if (tags.includes(modality))
73
+ return modality;
74
+ }
75
+ return 'text'; // Default
76
+ }
77
+ function extractDatasetTask(tags) {
78
+ const tasks = ['text-classification', 'text-generation', 'image-classification',
79
+ 'object-detection', 'speech-recognition', 'translation'];
80
+ for (const task of tasks) {
81
+ if (tags.includes(task))
82
+ return task;
83
+ }
84
+ return '';
85
+ }
86
+ function estimateHardwareRequirements(hfModel) {
87
+ const tags = hfModel.tags || [];
88
+ const size = hfModel.safetensors?.total || 0;
89
+ // Check if model likely needs GPU
90
+ let gpu = tags.includes('gpu') ||
91
+ tags.includes('cuda') ||
92
+ size > 500 * 1024 * 1024; // >500MB
93
+ // Estimate memory requirements
94
+ let memory = 'low';
95
+ if (size > 1000 * 1024 * 1024)
96
+ memory = 'high';
97
+ else if (size > 200 * 1024 * 1024)
98
+ memory = 'medium';
99
+ return { gpu, memory };
100
+ }
101
+ //# sourceMappingURL=hf-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hf-client.js","sourceRoot":"","sources":["../../src/forge/hf-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Forge — capability discovery and synthesis engine.
3
+ *
4
+ * Searches Hugging Face for models and datasets, reasons about novel
5
+ * applications, scaffolds working implementations, and preserves them
6
+ * as reusable Clawx tools.
7
+ */
8
+ export * from "./discover.js";
9
+ export * from "./reasoner.js";
10
+ export * from "./scaffolder.js";
11
+ export * from "./tester.js";
12
+ export * from "./registry.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/forge/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Forge — capability discovery and synthesis engine.
3
+ *
4
+ * Searches Hugging Face for models and datasets, reasons about novel
5
+ * applications, scaffolds working implementations, and preserves them
6
+ * as reusable Clawx tools.
7
+ */
8
+ export * from "./discover.js";
9
+ export * from "./reasoner.js";
10
+ export * from "./scaffolder.js";
11
+ export * from "./tester.js";
12
+ export * from "./registry.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/forge/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Forge tool loader.
3
+ *
4
+ * Dynamically loads Forge-built tools into Clawx sessions.
5
+ */
6
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
7
+ import type { ClawxConfig } from "../types/index.js";
8
+ export declare function setForgeConfig(config: ClawxConfig): void;
9
+ export declare function loadForgeTools(config?: ClawxConfig): Promise<AgentTool<any>[]>;
10
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/forge/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKrD,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAExD;AAED,wBAAsB,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CA4BpF"}
@@ -0,0 +1,385 @@
1
+ /**
2
+ * Forge tool loader.
3
+ *
4
+ * Dynamically loads Forge-built tools into Clawx sessions.
5
+ */
6
+ import fs from "node:fs";
7
+ import path from "node:path";
8
+ import { getForgeToolsDir } from "./registry.js";
9
+ import { log } from "../utils/logger.js";
10
+ // Global config for HF inference
11
+ let globalConfig = null;
12
+ export function setForgeConfig(config) {
13
+ globalConfig = config;
14
+ }
15
+ export async function loadForgeTools(config) {
16
+ if (config) {
17
+ setForgeConfig(config);
18
+ }
19
+ const toolsDir = getForgeToolsDir();
20
+ if (!fs.existsSync(toolsDir)) {
21
+ return [];
22
+ }
23
+ const toolFiles = fs.readdirSync(toolsDir)
24
+ .filter(f => f.endsWith('.json') && !f.endsWith('.test.json'));
25
+ const tools = [];
26
+ for (const file of toolFiles) {
27
+ try {
28
+ const tool = await loadForgeTool(path.join(toolsDir, file));
29
+ if (tool) {
30
+ tools.push(tool);
31
+ log.debug(`Loaded Forge tool: ${tool.name}`);
32
+ }
33
+ }
34
+ catch (error) {
35
+ log.warn(`Failed to load Forge tool ${file}:`, error);
36
+ }
37
+ }
38
+ return tools;
39
+ }
40
+ async function loadForgeTool(filePath) {
41
+ try {
42
+ // Read JSON tool definition
43
+ const content = fs.readFileSync(filePath, "utf-8");
44
+ const toolDef = JSON.parse(content);
45
+ // Create AgentTool from JSON definition
46
+ return createToolFromDefinition(toolDef);
47
+ }
48
+ catch (error) {
49
+ log.error(`Error loading tool ${filePath}:`, error);
50
+ return null;
51
+ }
52
+ }
53
+ function createToolFromDefinition(def) {
54
+ const { name, label, description, parameters, implementation } = def;
55
+ // Convert JSON parameters to TypeBox schema
56
+ const paramSchema = convertParametersToSchema(parameters);
57
+ return {
58
+ name,
59
+ label: label || name,
60
+ description,
61
+ parameters: paramSchema,
62
+ async execute(_toolCallId, params) {
63
+ try {
64
+ // Execute based on implementation type
65
+ const result = await executeImplementation(implementation, params);
66
+ return {
67
+ content: [{
68
+ type: "text",
69
+ text: result.output
70
+ }],
71
+ details: result.details,
72
+ };
73
+ }
74
+ catch (error) {
75
+ return {
76
+ content: [{
77
+ type: "text",
78
+ text: `Error executing ${name}: ${error instanceof Error ? error.message : String(error)}`
79
+ }],
80
+ details: { error: String(error) },
81
+ };
82
+ }
83
+ },
84
+ };
85
+ }
86
+ function convertParametersToSchema(parameters) {
87
+ // For now, return a simple object schema
88
+ // In a full implementation, this would create proper TypeBox schemas
89
+ return {
90
+ type: "object",
91
+ properties: parameters,
92
+ required: Object.keys(parameters).filter(key => !parameters[key].default),
93
+ };
94
+ }
95
+ async function executeImplementation(impl, params) {
96
+ const { type, models = [], config = {} } = impl;
97
+ switch (type) {
98
+ case "echo":
99
+ return {
100
+ output: `Echo: ${JSON.stringify(params, null, 2)}`,
101
+ details: { type: "echo", params }
102
+ };
103
+ case "classification":
104
+ return await executeClassification(impl, params);
105
+ case "generation":
106
+ const prompt = params.prompt || params.text || params.input || "";
107
+ return {
108
+ output: `Generated text for: "${prompt.substring(0, 50)}${prompt.length > 50 ? '...' : ''}"\n\n[This is simulated text generation. To implement real generation:\n1. Set HUGGINGFACE_TOKEN environment variable\n2. Use model: ${models[0] || 'a text generation model'}\n3. Implement actual inference]`,
109
+ details: {
110
+ type: "generation",
111
+ promptLength: prompt.length,
112
+ models
113
+ }
114
+ };
115
+ case "simulated":
116
+ default:
117
+ return {
118
+ output: `Simulated tool execution with params: ${JSON.stringify(params, null, 2)}\n\nImplementation type: ${type}\nModels: ${models.join(', ') || 'none'}`,
119
+ details: {
120
+ type,
121
+ params,
122
+ models,
123
+ simulated: true
124
+ }
125
+ };
126
+ }
127
+ }
128
+ async function executeClassification(impl, params) {
129
+ const { models = [], config = {} } = impl;
130
+ const categories = params.categories || ["positive", "negative", "neutral"];
131
+ const text = params.text || params.input || "";
132
+ // Check if we have a Hugging Face token for real inference
133
+ if (globalConfig?.huggingfaceToken && models.length > 0) {
134
+ try {
135
+ // Get model metadata
136
+ const model = models[0];
137
+ const modelId = typeof model === 'string' ? model : model.id;
138
+ const classificationType = model.classificationType || detectClassificationType(modelId);
139
+ const supportedLabels = model.supportedLabels;
140
+ // Validate model compatibility
141
+ const validation = validateClassificationModel(modelId, classificationType, categories, supportedLabels);
142
+ if (!validation.compatible) {
143
+ log.warn(`Model ${modelId} incompatible: ${validation.reason}`);
144
+ // Try to find a compatible fallback
145
+ const fallbackModel = findCompatibleClassificationModel(categories);
146
+ if (fallbackModel) {
147
+ log.info(`Falling back to compatible model: ${fallbackModel}`);
148
+ return await executeRealClassification(globalConfig.huggingfaceToken, fallbackModel, text, categories, classificationType);
149
+ }
150
+ else {
151
+ log.warn("No compatible fallback model found, using simulation");
152
+ // Fall through to simulation with clear explanation
153
+ return await executeSimulatedClassification(text, categories, models, {
154
+ incompatible: true,
155
+ reason: validation.reason,
156
+ attemptedModel: modelId
157
+ });
158
+ }
159
+ }
160
+ return await executeRealClassification(globalConfig.huggingfaceToken, modelId, text, categories, classificationType);
161
+ }
162
+ catch (error) {
163
+ log.warn("Real classification failed, falling back to simulation:", error);
164
+ // Fall through to simulated
165
+ }
166
+ }
167
+ return await executeSimulatedClassification(text, categories, models);
168
+ }
169
+ async function executeRealClassification(hfToken, modelId, text, categories, classificationType) {
170
+ try {
171
+ // Determine API endpoint and payload based on classification type
172
+ // Use new router API: https://router.huggingface.co
173
+ let apiUrl = `https://router.huggingface.co/models/${modelId}`;
174
+ let payload = { inputs: text };
175
+ if (classificationType === "zero-shot") {
176
+ // Zero-shot classification uses candidate_labels parameter
177
+ apiUrl = `https://router.huggingface.co/models/${modelId}/zero-shot-classification`;
178
+ payload = {
179
+ inputs: text,
180
+ parameters: {
181
+ candidate_labels: categories,
182
+ multi_label: false,
183
+ },
184
+ };
185
+ }
186
+ else if (classificationType === "text" || classificationType === "sequence") {
187
+ // Text/sequence classification - standard inference
188
+ // Note: categories are ignored for fixed-label models
189
+ apiUrl = `https://router.huggingface.co/models/${modelId}`;
190
+ payload = { inputs: text };
191
+ }
192
+ // Add timeout handling
193
+ const controller = new AbortController();
194
+ const timeoutId = setTimeout(() => controller.abort(), 30000); // 30 second timeout
195
+ const response = await fetch(apiUrl, {
196
+ method: "POST",
197
+ headers: {
198
+ "Authorization": `Bearer ${hfToken}`,
199
+ "Content-Type": "application/json",
200
+ },
201
+ body: JSON.stringify(payload),
202
+ signal: controller.signal,
203
+ });
204
+ clearTimeout(timeoutId);
205
+ if (!response.ok) {
206
+ const errorText = await response.text();
207
+ throw new Error(`HF API error ${response.status}: ${errorText}`);
208
+ }
209
+ const data = await response.json();
210
+ // Parse response based on classification type
211
+ let formattedResults = [];
212
+ let output = `Classification Result (Real Inference):\n\nText: "${text.substring(0, 100)}${text.length > 100 ? '...' : ''}"\n\nModel: ${modelId}\n\n`;
213
+ if (classificationType === "zero-shot") {
214
+ // Zero-shot classification response format
215
+ // Example: {"sequence": "text", "labels": ["label1", "label2"], "scores": [0.9, 0.1]}
216
+ const zeroShotData = data;
217
+ if (zeroShotData.labels && zeroShotData.scores && zeroShotData.labels.length === zeroShotData.scores.length) {
218
+ formattedResults = zeroShotData.labels.map((label, index) => ({
219
+ label,
220
+ score: zeroShotData.scores[index],
221
+ rank: index + 1
222
+ })).sort((a, b) => b.score - a.score);
223
+ }
224
+ }
225
+ else {
226
+ // Standard text/sequence classification response format
227
+ // Example: [[{"label": "LABEL_0", "score": 0.99}]]
228
+ if (Array.isArray(data) && data.length > 0) {
229
+ const results = Array.isArray(data[0]) ? data[0] : data;
230
+ const typedResults = results;
231
+ formattedResults = typedResults.map((item, index) => ({
232
+ label: item.label,
233
+ score: item.score,
234
+ rank: index + 1
235
+ })).sort((a, b) => b.score - a.score);
236
+ }
237
+ }
238
+ if (formattedResults.length > 0) {
239
+ const topResult = formattedResults[0];
240
+ output += `Top category: ${topResult.label} (${(topResult.score * 100).toFixed(1)}%)\n\nAll categories:\n${formattedResults.map((r) => ` ${r.label.padEnd(15)}: ${(r.score * 100).toFixed(1)}%`).join('\n')}`;
241
+ return {
242
+ output,
243
+ details: {
244
+ type: "classification",
245
+ classificationType,
246
+ result: formattedResults,
247
+ topLabel: topResult.label,
248
+ confidence: topResult.score,
249
+ textLength: text.length,
250
+ model: modelId,
251
+ simulated: false,
252
+ apiResponse: data
253
+ }
254
+ };
255
+ }
256
+ else {
257
+ // Unexpected response format
258
+ throw new Error(`Unexpected API response format: ${JSON.stringify(data)}`);
259
+ }
260
+ }
261
+ catch (error) {
262
+ log.error("Real classification failed:", error);
263
+ throw error;
264
+ }
265
+ }
266
+ // Helper functions for classification compatibility
267
+ function detectClassificationType(modelId) {
268
+ // Heuristic detection based on model ID
269
+ const lowerId = modelId.toLowerCase();
270
+ if (lowerId.includes("zero-shot") || lowerId.includes("mnli") ||
271
+ lowerId.includes("bart-large-mnli") || lowerId.includes("distilbert-base-uncased-mnli")) {
272
+ return "zero-shot";
273
+ }
274
+ if (lowerId.includes("sentiment") || lowerId.includes("sst") ||
275
+ lowerId.includes("emotion") || lowerId.includes("topic")) {
276
+ return "text";
277
+ }
278
+ if (lowerId.includes("ner") || lowerId.includes("named-entity") ||
279
+ lowerId.includes("sequence") || lowerId.includes("token")) {
280
+ return "sequence";
281
+ }
282
+ // Default to text classification (most common)
283
+ return "text";
284
+ }
285
+ function validateClassificationModel(modelId, classificationType, requestedCategories, supportedLabels) {
286
+ // Check if model supports zero-shot classification
287
+ if (classificationType === "zero-shot") {
288
+ // Zero-shot models accept any categories
289
+ return { compatible: true };
290
+ }
291
+ // For text/sequence classification with fixed labels
292
+ if (classificationType === "text" || classificationType === "sequence") {
293
+ if (supportedLabels && supportedLabels.length > 0) {
294
+ // Check if requested categories match supported labels
295
+ const normalizedRequested = requestedCategories.map(c => c.toUpperCase());
296
+ const normalizedSupported = supportedLabels.map(l => l.toUpperCase());
297
+ const allMatch = requestedCategories.every(cat => normalizedSupported.includes(cat.toUpperCase()));
298
+ if (!allMatch) {
299
+ return {
300
+ compatible: false,
301
+ reason: `Model ${modelId} supports labels: ${supportedLabels.join(', ')}, but requested: ${requestedCategories.join(', ')}`
302
+ };
303
+ }
304
+ }
305
+ else {
306
+ // No supported labels defined - assume compatible but warn
307
+ log.warn(`Model ${modelId} has no supportedLabels defined for ${classificationType} classification`);
308
+ return { compatible: true };
309
+ }
310
+ }
311
+ return { compatible: true };
312
+ }
313
+ function findCompatibleClassificationModel(requestedCategories) {
314
+ // Known compatible models for fallback
315
+ const knownModels = [
316
+ {
317
+ id: "facebook/bart-large-mnli",
318
+ type: "zero-shot",
319
+ description: "Zero-shot classification model"
320
+ },
321
+ {
322
+ id: "finiteautomata/beto-sentiment-analysis",
323
+ type: "text",
324
+ supportedLabels: ["POSITIVE", "NEGATIVE", "NEUTRAL"],
325
+ description: "Spanish sentiment analysis"
326
+ },
327
+ {
328
+ id: "distilbert-base-uncased-finetuned-sst-2-english",
329
+ type: "text",
330
+ supportedLabels: ["POSITIVE", "NEGATIVE"],
331
+ description: "English sentiment analysis"
332
+ }
333
+ ];
334
+ // Try to find a zero-shot model first (most flexible)
335
+ const zeroShotModel = knownModels.find(m => m.type === "zero-shot");
336
+ if (zeroShotModel) {
337
+ return zeroShotModel.id;
338
+ }
339
+ // Try to find a text classification model with matching labels
340
+ const normalizedRequested = requestedCategories.map(c => c.toUpperCase());
341
+ for (const model of knownModels) {
342
+ if (model.type === "text" && model.supportedLabels) {
343
+ const allMatch = requestedCategories.every(cat => model.supportedLabels.includes(cat.toUpperCase()));
344
+ if (allMatch) {
345
+ return model.id;
346
+ }
347
+ }
348
+ }
349
+ return null;
350
+ }
351
+ async function executeSimulatedClassification(text, categories, models, context) {
352
+ // Simulated classification (fallback)
353
+ const scores = categories.map(() => Math.random());
354
+ const total = scores.reduce((a, b) => a + b, 0);
355
+ const normalized = scores.map((s) => (s / total).toFixed(3));
356
+ const result = categories.map((cat, i) => ({
357
+ label: cat,
358
+ score: parseFloat(normalized[i])
359
+ })).sort((a, b) => b.score - a.score);
360
+ const topLabel = result[0].label;
361
+ const confidence = result[0].score;
362
+ const tokenStatus = globalConfig?.huggingfaceToken ? "✅ HF token available" : "❌ No HF token";
363
+ const modelStatus = models.length > 0 ? `Model: ${typeof models[0] === 'string' ? models[0] : models[0].id}` : "No model specified";
364
+ let output = `Classification Result (Simulated):\n\nText: "${text.substring(0, 100)}${text.length > 100 ? '...' : ''}"\n\nTop category: ${topLabel} (${(confidence * 100).toFixed(1)}%)\n\nAll categories:\n${result.map((r) => ` ${r.label.padEnd(15)}: ${(r.score * 100).toFixed(1)}%`).join('\n')}\n\n${tokenStatus}\n${modelStatus}`;
365
+ if (context?.incompatible) {
366
+ output += `\n\n⚠️ Model incompatible: ${context.reason}`;
367
+ output += `\nAttempted model: ${context.attemptedModel}`;
368
+ }
369
+ output += `\n\nTo use real inference:\n1. Set HUGGINGFACE_TOKEN environment variable\n2. Ensure model supports requested classification type`;
370
+ return {
371
+ output,
372
+ details: {
373
+ type: "classification",
374
+ result,
375
+ topLabel,
376
+ confidence,
377
+ textLength: text.length,
378
+ models: models.map(m => typeof m === 'string' ? m : m.id),
379
+ simulated: true,
380
+ realInferenceAttempted: !!globalConfig?.huggingfaceToken,
381
+ ...context
382
+ }
383
+ };
384
+ }
385
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/forge/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for Forge tool loader
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=loader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.test.d.ts","sourceRoot":"","sources":["../../src/forge/loader.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Tests for Forge tool loader
3
+ */
4
+ import { describe, it, expect } from "vitest";
5
+ import { loadForgeTools } from "./loader.js";
6
+ describe("Forge loader", () => {
7
+ it("should be a function", () => {
8
+ expect(typeof loadForgeTools).toBe("function");
9
+ });
10
+ it("should return a promise", () => {
11
+ const result = loadForgeTools();
12
+ expect(result).toBeInstanceOf(Promise);
13
+ });
14
+ });
15
+ //# sourceMappingURL=loader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../src/forge/loader.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Forge pipeline builder.
3
+ *
4
+ * Builds discovered pipelines into working Clawx tools.
5
+ */
6
+ import type { ClawxConfig } from "../types/index.js";
7
+ import type { BuildOptions } from "./types.js";
8
+ export declare function buildPipeline(config: ClawxConfig, pipelineId: string, options?: BuildOptions): Promise<void>;
9
+ //# sourceMappingURL=pipeline-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-builder.d.ts","sourceRoot":"","sources":["../../src/forge/pipeline-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO/C,wBAAsB,aAAa,CACjC,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CA6Ef"}