fleetbo-cockpit-cli 1.0.75 → 1.0.77
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/cli.js +35 -23
- package/package.json +1 -1
package/cli.js
CHANGED
|
@@ -238,7 +238,7 @@ if (command === 'alex') {
|
|
|
238
238
|
return;
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
-
console.log('\x1b[33m🧠
|
|
241
|
+
console.log('\x1b[33m🧠 Alex is thinking...\x1b[0m');
|
|
242
242
|
|
|
243
243
|
try {
|
|
244
244
|
// --- MEMORY SYSTEM (SMART CACHE SCANNER V3 - SOUVERAINETÉ DU MÉTAL) ---
|
|
@@ -260,7 +260,7 @@ if (command === 'alex') {
|
|
|
260
260
|
modName = modName.replace('Schema', '');
|
|
261
261
|
}
|
|
262
262
|
|
|
263
|
-
process.stdout.write(` \x1b[90m🔍
|
|
263
|
+
process.stdout.write(` \x1b[90m🔍 Checking OS cache for ${modName}...\x1b[0m`);
|
|
264
264
|
const cache = await getModuleCache({ projectId, moduleName: modName });
|
|
265
265
|
|
|
266
266
|
if (cache.found) {
|
|
@@ -310,9 +310,38 @@ if (command === 'alex') {
|
|
|
310
310
|
|
|
311
311
|
let aiData = result.data;
|
|
312
312
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
313
|
+
// 🛡️ ROBUST PARSER: Unwrap all nesting levels until we find a valid aiData object
|
|
314
|
+
const deepUnwrap = (raw, depth = 0) => {
|
|
315
|
+
if (depth > 5) return raw; // Safety: max 5 nesting levels
|
|
316
|
+
if (typeof raw === 'string') {
|
|
317
|
+
// Try to extract a JSON object even if there's trailing garbage (truncation)
|
|
318
|
+
const jsonMatch = raw.match(/\{[\s\S]*\}/);
|
|
319
|
+
if (jsonMatch) {
|
|
320
|
+
try {
|
|
321
|
+
return deepUnwrap(JSON.parse(jsonMatch[0]), depth + 1);
|
|
322
|
+
} catch (_) {}
|
|
323
|
+
}
|
|
324
|
+
return raw;
|
|
325
|
+
}
|
|
326
|
+
if (typeof raw === 'object' && raw !== null) {
|
|
327
|
+
// If the message field itself is a JSON string, unwrap it and merge moduleData
|
|
328
|
+
if (typeof raw.message === 'string' && raw.message.trimStart().startsWith('{')) {
|
|
329
|
+
try {
|
|
330
|
+
const nested = JSON.parse(raw.message);
|
|
331
|
+
if (nested && typeof nested === 'object' && nested.status) {
|
|
332
|
+
// Merge: keep top-level moduleData if present, else take nested one
|
|
333
|
+
if (!raw.moduleData && nested.moduleData) raw.moduleData = nested.moduleData;
|
|
334
|
+
raw.message = nested.message || raw.message;
|
|
335
|
+
if (!raw.status && nested.status) raw.status = nested.status;
|
|
336
|
+
}
|
|
337
|
+
} catch (_) {}
|
|
338
|
+
}
|
|
339
|
+
return raw;
|
|
340
|
+
}
|
|
341
|
+
return raw;
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
aiData = deepUnwrap(aiData);
|
|
316
345
|
|
|
317
346
|
// 🟢 DISPLAY REASONING IN TERMINAL
|
|
318
347
|
if (aiData.thinking_process) {
|
|
@@ -331,27 +360,10 @@ if (command === 'alex') {
|
|
|
331
360
|
console.log('');
|
|
332
361
|
let rawMsg = aiData.message || "I'm ready.";
|
|
333
362
|
|
|
334
|
-
if
|
|
335
|
-
try {
|
|
336
|
-
const nested = JSON.parse(rawMsg);
|
|
337
|
-
if (nested && nested.message) {
|
|
338
|
-
rawMsg = nested.message;
|
|
339
|
-
if (!aiData.moduleData && nested.moduleData) {
|
|
340
|
-
aiData.moduleData = nested.moduleData;
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
} catch (_) {}
|
|
344
|
-
}
|
|
345
|
-
|
|
363
|
+
// Final safety: if rawMsg is still an object
|
|
346
364
|
if (typeof rawMsg === 'object') {
|
|
347
365
|
rawMsg = rawMsg.message || rawMsg.text || "Module generated.";
|
|
348
366
|
}
|
|
349
|
-
try {
|
|
350
|
-
const testParse = JSON.parse(rawMsg);
|
|
351
|
-
if (testParse && typeof testParse === 'object' && testParse.status) {
|
|
352
|
-
rawMsg = testParse.message || "Module generated.";
|
|
353
|
-
}
|
|
354
|
-
} catch (_) { }
|
|
355
367
|
|
|
356
368
|
const formattedMsg = wrapText(rawMsg, 85);
|
|
357
369
|
console.log('\x1b[32mAlex ❯\x1b[0m ' + formattedMsg);
|