ai.matey.cli 0.2.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.
- package/LICENSE +21 -0
- package/dist/cjs/convert-request.js +365 -0
- package/dist/cjs/convert-request.js.map +1 -0
- package/dist/cjs/convert-response.js +211 -0
- package/dist/cjs/convert-response.js.map +1 -0
- package/dist/cjs/converters/request-converters.js +183 -0
- package/dist/cjs/converters/request-converters.js.map +1 -0
- package/dist/cjs/converters/response-converters.js +203 -0
- package/dist/cjs/converters/response-converters.js.map +1 -0
- package/dist/cjs/create-backend.js +569 -0
- package/dist/cjs/create-backend.js.map +1 -0
- package/dist/cjs/index.js +31 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/main.js +181 -0
- package/dist/cjs/main.js.map +1 -0
- package/dist/cjs/ollama/commands/list.js +70 -0
- package/dist/cjs/ollama/commands/list.js.map +1 -0
- package/dist/cjs/ollama/commands/ps.js +80 -0
- package/dist/cjs/ollama/commands/ps.js.map +1 -0
- package/dist/cjs/ollama/commands/pull.js +198 -0
- package/dist/cjs/ollama/commands/pull.js.map +1 -0
- package/dist/cjs/ollama/commands/run.js +279 -0
- package/dist/cjs/ollama/commands/run.js.map +1 -0
- package/dist/cjs/ollama/commands/show.js +138 -0
- package/dist/cjs/ollama/commands/show.js.map +1 -0
- package/dist/cjs/ollama/index.js +238 -0
- package/dist/cjs/ollama/index.js.map +1 -0
- package/dist/cjs/ollama/types.js +10 -0
- package/dist/cjs/ollama/types.js.map +1 -0
- package/dist/cjs/proxy.js +406 -0
- package/dist/cjs/proxy.js.map +1 -0
- package/dist/cjs/utils/backend-loader.js +112 -0
- package/dist/cjs/utils/backend-loader.js.map +1 -0
- package/dist/cjs/utils/index.js +29 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/model-translation.js +138 -0
- package/dist/cjs/utils/model-translation.js.map +1 -0
- package/dist/cjs/utils/output-formatter.js +241 -0
- package/dist/cjs/utils/output-formatter.js.map +1 -0
- package/dist/cjs/utils/pipeline-inspector.js +90 -0
- package/dist/cjs/utils/pipeline-inspector.js.map +1 -0
- package/dist/cjs/utils/state-manager.js +114 -0
- package/dist/cjs/utils/state-manager.js.map +1 -0
- package/dist/esm/convert-request.js +331 -0
- package/dist/esm/convert-request.js.map +1 -0
- package/dist/esm/convert-response.js +177 -0
- package/dist/esm/convert-response.js.map +1 -0
- package/dist/esm/converters/request-converters.js +175 -0
- package/dist/esm/converters/request-converters.js.map +1 -0
- package/dist/esm/converters/response-converters.js +191 -0
- package/dist/esm/converters/response-converters.js.map +1 -0
- package/dist/esm/create-backend.js +533 -0
- package/dist/esm/create-backend.js.map +1 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/main.js +149 -0
- package/dist/esm/main.js.map +1 -0
- package/dist/esm/ollama/commands/list.js +67 -0
- package/dist/esm/ollama/commands/list.js.map +1 -0
- package/dist/esm/ollama/commands/ps.js +77 -0
- package/dist/esm/ollama/commands/ps.js.map +1 -0
- package/dist/esm/ollama/commands/pull.js +195 -0
- package/dist/esm/ollama/commands/pull.js.map +1 -0
- package/dist/esm/ollama/commands/run.js +243 -0
- package/dist/esm/ollama/commands/run.js.map +1 -0
- package/dist/esm/ollama/commands/show.js +135 -0
- package/dist/esm/ollama/commands/show.js.map +1 -0
- package/dist/esm/ollama/index.js +235 -0
- package/dist/esm/ollama/index.js.map +1 -0
- package/dist/esm/ollama/types.js +9 -0
- package/dist/esm/ollama/types.js.map +1 -0
- package/dist/esm/proxy.js +403 -0
- package/dist/esm/proxy.js.map +1 -0
- package/dist/esm/utils/backend-loader.js +74 -0
- package/dist/esm/utils/backend-loader.js.map +1 -0
- package/dist/esm/utils/index.js +13 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/model-translation.js +99 -0
- package/dist/esm/utils/model-translation.js.map +1 -0
- package/dist/esm/utils/output-formatter.js +224 -0
- package/dist/esm/utils/output-formatter.js.map +1 -0
- package/dist/esm/utils/pipeline-inspector.js +84 -0
- package/dist/esm/utils/pipeline-inspector.js.map +1 -0
- package/dist/esm/utils/state-manager.js +111 -0
- package/dist/esm/utils/state-manager.js.map +1 -0
- package/dist/types/convert-request.d.ts +15 -0
- package/dist/types/convert-request.d.ts.map +1 -0
- package/dist/types/convert-response.d.ts +16 -0
- package/dist/types/convert-response.d.ts.map +1 -0
- package/dist/types/converters/request-converters.d.ts +139 -0
- package/dist/types/converters/request-converters.d.ts.map +1 -0
- package/dist/types/converters/response-converters.d.ts +134 -0
- package/dist/types/converters/response-converters.d.ts.map +1 -0
- package/dist/types/create-backend.d.ts +20 -0
- package/dist/types/create-backend.d.ts.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/main.d.ts +19 -0
- package/dist/types/main.d.ts.map +1 -0
- package/dist/types/ollama/commands/list.d.ts +32 -0
- package/dist/types/ollama/commands/list.d.ts.map +1 -0
- package/dist/types/ollama/commands/ps.d.ts +27 -0
- package/dist/types/ollama/commands/ps.d.ts.map +1 -0
- package/dist/types/ollama/commands/pull.d.ts +21 -0
- package/dist/types/ollama/commands/pull.d.ts.map +1 -0
- package/dist/types/ollama/commands/run.d.ts +48 -0
- package/dist/types/ollama/commands/run.d.ts.map +1 -0
- package/dist/types/ollama/commands/show.d.ts +36 -0
- package/dist/types/ollama/commands/show.d.ts.map +1 -0
- package/dist/types/ollama/index.d.ts +12 -0
- package/dist/types/ollama/index.d.ts.map +1 -0
- package/dist/types/ollama/types.d.ts +58 -0
- package/dist/types/ollama/types.d.ts.map +1 -0
- package/dist/types/proxy.d.ts +16 -0
- package/dist/types/proxy.d.ts.map +1 -0
- package/dist/types/utils/backend-loader.d.ts +55 -0
- package/dist/types/utils/backend-loader.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +13 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/model-translation.d.ts +64 -0
- package/dist/types/utils/model-translation.d.ts.map +1 -0
- package/dist/types/utils/output-formatter.d.ts +113 -0
- package/dist/types/utils/output-formatter.d.ts.map +1 -0
- package/dist/types/utils/pipeline-inspector.d.ts +50 -0
- package/dist/types/utils/pipeline-inspector.d.ts.map +1 -0
- package/dist/types/utils/state-manager.d.ts +91 -0
- package/dist/types/utils/state-manager.d.ts.map +1 -0
- package/package.json +75 -0
- package/readme.md +32 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Model Translation Utility
|
|
4
|
+
*
|
|
5
|
+
* Translates model names between different providers.
|
|
6
|
+
* Supports backend.modelMapping property or external mapping files.
|
|
7
|
+
*
|
|
8
|
+
* @module cli/utils/model-translation
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.translateModel = translateModel;
|
|
45
|
+
exports.loadModelMapping = loadModelMapping;
|
|
46
|
+
exports.reverseMapping = reverseMapping;
|
|
47
|
+
exports.hasTranslation = hasTranslation;
|
|
48
|
+
/**
|
|
49
|
+
* Translate a model name using mapping or backend default.
|
|
50
|
+
*
|
|
51
|
+
* @param modelName - Original model name
|
|
52
|
+
* @param options - Translation options
|
|
53
|
+
* @returns Translated model name or original if no mapping
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* const backend = new OpenAIBackend({ defaultModel: 'gpt-4o' });
|
|
58
|
+
* backend.modelMapping = { 'llama3.1': 'gpt-4o' };
|
|
59
|
+
*
|
|
60
|
+
* const translated = translateModel('llama3.1', { backend });
|
|
61
|
+
* // → 'gpt-4o'
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
function translateModel(modelName, options) {
|
|
65
|
+
const { backend, mapping, useBackendDefault = true } = options;
|
|
66
|
+
// Check external mapping first
|
|
67
|
+
if (mapping && mapping[modelName]) {
|
|
68
|
+
return mapping[modelName];
|
|
69
|
+
}
|
|
70
|
+
// Check backend.modelMapping
|
|
71
|
+
const backendMapping = backend.modelMapping;
|
|
72
|
+
if (backendMapping && backendMapping[modelName]) {
|
|
73
|
+
return backendMapping[modelName];
|
|
74
|
+
}
|
|
75
|
+
// Try backend default model
|
|
76
|
+
if (useBackendDefault) {
|
|
77
|
+
const defaultModel = backend.config?.defaultModel;
|
|
78
|
+
if (defaultModel) {
|
|
79
|
+
return defaultModel;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// No translation - return original
|
|
83
|
+
return modelName;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Load model mapping from JSON file.
|
|
87
|
+
*
|
|
88
|
+
* @param path - Path to JSON file
|
|
89
|
+
* @returns Model mapping
|
|
90
|
+
*/
|
|
91
|
+
async function loadModelMapping(path) {
|
|
92
|
+
const { readFile } = await Promise.resolve().then(() => __importStar(require('node:fs/promises')));
|
|
93
|
+
const { resolve } = await Promise.resolve().then(() => __importStar(require('node:path')));
|
|
94
|
+
try {
|
|
95
|
+
const resolvedPath = resolve(process.cwd(), path);
|
|
96
|
+
const content = await readFile(resolvedPath, 'utf-8');
|
|
97
|
+
const mapping = JSON.parse(content);
|
|
98
|
+
if (typeof mapping !== 'object' || mapping === null) {
|
|
99
|
+
throw new Error('Model mapping must be a JSON object');
|
|
100
|
+
}
|
|
101
|
+
return mapping;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
throw new Error(`Failed to load model mapping from ${path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get reverse mapping (backend model → original model name).
|
|
109
|
+
*
|
|
110
|
+
* @param mapping - Forward mapping
|
|
111
|
+
* @returns Reverse mapping
|
|
112
|
+
*/
|
|
113
|
+
function reverseMapping(mapping) {
|
|
114
|
+
const reversed = {};
|
|
115
|
+
for (const [key, value] of Object.entries(mapping)) {
|
|
116
|
+
reversed[value] = key;
|
|
117
|
+
}
|
|
118
|
+
return reversed;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Check if model name needs translation.
|
|
122
|
+
*
|
|
123
|
+
* @param modelName - Model name to check
|
|
124
|
+
* @param options - Translation options
|
|
125
|
+
* @returns True if translation is available
|
|
126
|
+
*/
|
|
127
|
+
function hasTranslation(modelName, options) {
|
|
128
|
+
const { backend, mapping } = options;
|
|
129
|
+
if (mapping && mapping[modelName]) {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
const backendMapping = backend.modelMapping;
|
|
133
|
+
if (backendMapping && backendMapping[modelName]) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=model-translation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-translation.js","sourceRoot":"","sources":["../../../src/utils/model-translation.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCH,wCAwBC;AAQD,4CAmBC;AAQD,wCAMC;AASD,wCAgBC;AA1GD;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,cAAc,CAAC,SAAiB,EAAE,OAAgC;IAChF,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAE/D,+BAA+B;IAC/B,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IAED,6BAA6B;IAC7B,MAAM,cAAc,GAAI,OAAe,CAAC,YAAwC,CAAC;IACjF,IAAI,cAAc,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,4BAA4B;IAC5B,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,YAAY,GAAI,OAAe,CAAC,MAAM,EAAE,YAAY,CAAC;QAC3D,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,gBAAgB,CAAC,IAAY;IACjD,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,kBAAkB,GAAC,CAAC;IACtD,MAAM,EAAE,OAAO,EAAE,GAAG,wDAAa,WAAW,GAAC,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEpC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,OAAuB,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACvG,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,OAAqB;IAClD,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;IACxB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,cAAc,CAC5B,SAAiB,EACjB,OAA2D;IAE3D,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAErC,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,cAAc,GAAI,OAAe,CAAC,YAAwC,CAAC;IACjF,IAAI,cAAc,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Output Formatter Utility
|
|
4
|
+
*
|
|
5
|
+
* Formats output for terminal display.
|
|
6
|
+
* Handles colors, tables, and streaming output.
|
|
7
|
+
*
|
|
8
|
+
* @module cli/utils/output-formatter
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.Spinner = exports.colors = void 0;
|
|
12
|
+
exports.setColorsEnabled = setColorsEnabled;
|
|
13
|
+
exports.areColorsEnabled = areColorsEnabled;
|
|
14
|
+
exports.colorize = colorize;
|
|
15
|
+
exports.style = style;
|
|
16
|
+
exports.success = success;
|
|
17
|
+
exports.error = error;
|
|
18
|
+
exports.warn = warn;
|
|
19
|
+
exports.info = info;
|
|
20
|
+
exports.formatTable = formatTable;
|
|
21
|
+
exports.formatSize = formatSize;
|
|
22
|
+
exports.formatDuration = formatDuration;
|
|
23
|
+
exports.formatRelativeTime = formatRelativeTime;
|
|
24
|
+
exports.printBox = printBox;
|
|
25
|
+
/**
|
|
26
|
+
* ANSI color codes.
|
|
27
|
+
*/
|
|
28
|
+
exports.colors = {
|
|
29
|
+
reset: '\x1b[0m',
|
|
30
|
+
bold: '\x1b[1m',
|
|
31
|
+
dim: '\x1b[2m',
|
|
32
|
+
// Foreground colors
|
|
33
|
+
black: '\x1b[30m',
|
|
34
|
+
red: '\x1b[31m',
|
|
35
|
+
green: '\x1b[32m',
|
|
36
|
+
yellow: '\x1b[33m',
|
|
37
|
+
blue: '\x1b[34m',
|
|
38
|
+
magenta: '\x1b[35m',
|
|
39
|
+
cyan: '\x1b[36m',
|
|
40
|
+
white: '\x1b[37m',
|
|
41
|
+
gray: '\x1b[90m',
|
|
42
|
+
// Background colors
|
|
43
|
+
bgBlack: '\x1b[40m',
|
|
44
|
+
bgRed: '\x1b[41m',
|
|
45
|
+
bgGreen: '\x1b[42m',
|
|
46
|
+
bgYellow: '\x1b[43m',
|
|
47
|
+
bgBlue: '\x1b[44m',
|
|
48
|
+
bgMagenta: '\x1b[45m',
|
|
49
|
+
bgCyan: '\x1b[46m',
|
|
50
|
+
bgWhite: '\x1b[47m',
|
|
51
|
+
};
|
|
52
|
+
let colorsEnabled = true;
|
|
53
|
+
/**
|
|
54
|
+
* Enable or disable colored output.
|
|
55
|
+
*/
|
|
56
|
+
function setColorsEnabled(enabled) {
|
|
57
|
+
colorsEnabled = enabled;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if colors are enabled.
|
|
61
|
+
*/
|
|
62
|
+
function areColorsEnabled() {
|
|
63
|
+
return colorsEnabled;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Apply color to text.
|
|
67
|
+
*/
|
|
68
|
+
function colorize(text, color) {
|
|
69
|
+
if (!colorsEnabled) {
|
|
70
|
+
return text;
|
|
71
|
+
}
|
|
72
|
+
return `${exports.colors[color]}${text}${exports.colors.reset}`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Format text with multiple styles.
|
|
76
|
+
*/
|
|
77
|
+
function style(text, ...styles) {
|
|
78
|
+
if (!colorsEnabled) {
|
|
79
|
+
return text;
|
|
80
|
+
}
|
|
81
|
+
const prefix = styles.map((s) => exports.colors[s]).join('');
|
|
82
|
+
return `${prefix}${text}${exports.colors.reset}`;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Print success message.
|
|
86
|
+
*/
|
|
87
|
+
function success(message) {
|
|
88
|
+
console.log(colorize('✓ ' + message, 'green'));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Print error message.
|
|
92
|
+
*/
|
|
93
|
+
function error(message) {
|
|
94
|
+
console.error(colorize('✗ ' + message, 'red'));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Print warning message.
|
|
98
|
+
*/
|
|
99
|
+
function warn(message) {
|
|
100
|
+
console.warn(colorize('⚠ ' + message, 'yellow'));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Print info message.
|
|
104
|
+
*/
|
|
105
|
+
function info(message) {
|
|
106
|
+
console.log(colorize('ℹ ' + message, 'blue'));
|
|
107
|
+
}
|
|
108
|
+
function formatTable(options) {
|
|
109
|
+
const { columns, rows } = options;
|
|
110
|
+
if (rows.length === 0) {
|
|
111
|
+
return '';
|
|
112
|
+
}
|
|
113
|
+
// Calculate column widths
|
|
114
|
+
const widths = columns.map((col) => {
|
|
115
|
+
const headerWidth = col.header.length;
|
|
116
|
+
const maxContentWidth = Math.max(...rows.map((row) => String(row[col.key] || '').length));
|
|
117
|
+
return col.width || Math.max(headerWidth, maxContentWidth);
|
|
118
|
+
});
|
|
119
|
+
// Format header
|
|
120
|
+
const header = columns.map((col, i) => col.header.padEnd(widths[i] || 0)).join(' ');
|
|
121
|
+
// Format rows
|
|
122
|
+
const formattedRows = rows.map((row) => columns
|
|
123
|
+
.map((col, i) => {
|
|
124
|
+
const value = String(row[col.key] || '');
|
|
125
|
+
const width = widths[i] || 0;
|
|
126
|
+
return col.align === 'right' ? value.padStart(width) : value.padEnd(width);
|
|
127
|
+
})
|
|
128
|
+
.join(' '));
|
|
129
|
+
return [style(header, 'bold'), ...formattedRows].join('\n');
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Format file size in human-readable format.
|
|
133
|
+
*/
|
|
134
|
+
function formatSize(bytes) {
|
|
135
|
+
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
136
|
+
let size = bytes;
|
|
137
|
+
let unitIndex = 0;
|
|
138
|
+
while (size >= 1024 && unitIndex < units.length - 1) {
|
|
139
|
+
size /= 1024;
|
|
140
|
+
unitIndex++;
|
|
141
|
+
}
|
|
142
|
+
return `${size.toFixed(1)} ${units[unitIndex]}`;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Format duration in human-readable format.
|
|
146
|
+
*/
|
|
147
|
+
function formatDuration(ms) {
|
|
148
|
+
if (ms < 1000) {
|
|
149
|
+
return `${ms}ms`;
|
|
150
|
+
}
|
|
151
|
+
if (ms < 60000) {
|
|
152
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
153
|
+
}
|
|
154
|
+
if (ms < 3600000) {
|
|
155
|
+
return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;
|
|
156
|
+
}
|
|
157
|
+
const hours = Math.floor(ms / 3600000);
|
|
158
|
+
const minutes = Math.floor((ms % 3600000) / 60000);
|
|
159
|
+
return `${hours}h ${minutes}m`;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Format relative time (e.g., "2 minutes ago").
|
|
163
|
+
*/
|
|
164
|
+
function formatRelativeTime(timestamp) {
|
|
165
|
+
const now = Date.now();
|
|
166
|
+
const diff = now - timestamp;
|
|
167
|
+
if (diff < 60000) {
|
|
168
|
+
return 'just now';
|
|
169
|
+
}
|
|
170
|
+
if (diff < 3600000) {
|
|
171
|
+
const minutes = Math.floor(diff / 60000);
|
|
172
|
+
return `${minutes} minute${minutes !== 1 ? 's' : ''} ago`;
|
|
173
|
+
}
|
|
174
|
+
if (diff < 86400000) {
|
|
175
|
+
const hours = Math.floor(diff / 3600000);
|
|
176
|
+
return `${hours} hour${hours !== 1 ? 's' : ''} ago`;
|
|
177
|
+
}
|
|
178
|
+
const days = Math.floor(diff / 86400000);
|
|
179
|
+
return `${days} day${days !== 1 ? 's' : ''} ago`;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Create a spinner for long-running operations.
|
|
183
|
+
*/
|
|
184
|
+
class Spinner {
|
|
185
|
+
frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
186
|
+
currentFrame = 0;
|
|
187
|
+
interval;
|
|
188
|
+
text;
|
|
189
|
+
constructor(text) {
|
|
190
|
+
this.text = text;
|
|
191
|
+
}
|
|
192
|
+
start() {
|
|
193
|
+
if (this.interval || !colorsEnabled) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
this.interval = setInterval(() => {
|
|
197
|
+
const frame = this.frames[this.currentFrame] || '⠋';
|
|
198
|
+
process.stdout.write(`\r${colorize(frame, 'cyan')} ${this.text}`);
|
|
199
|
+
this.currentFrame = (this.currentFrame + 1) % this.frames.length;
|
|
200
|
+
}, 80);
|
|
201
|
+
}
|
|
202
|
+
stop(finalMessage) {
|
|
203
|
+
if (this.interval) {
|
|
204
|
+
clearInterval(this.interval);
|
|
205
|
+
this.interval = undefined;
|
|
206
|
+
}
|
|
207
|
+
// Clear spinner line
|
|
208
|
+
process.stdout.write('\r\x1b[K');
|
|
209
|
+
if (finalMessage) {
|
|
210
|
+
console.log(finalMessage);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
succeed(message) {
|
|
214
|
+
this.stop(success.bind(null, message || this.text));
|
|
215
|
+
}
|
|
216
|
+
fail(message) {
|
|
217
|
+
this.stop(error.bind(null, message || this.text));
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
exports.Spinner = Spinner;
|
|
221
|
+
/**
|
|
222
|
+
* Print a box around text.
|
|
223
|
+
*/
|
|
224
|
+
function printBox(text, options = {}) {
|
|
225
|
+
const { title, padding = 1 } = options;
|
|
226
|
+
const lines = text.split('\n');
|
|
227
|
+
const maxLength = Math.max(...lines.map((l) => l.length));
|
|
228
|
+
const width = maxLength + padding * 2;
|
|
229
|
+
const top = title
|
|
230
|
+
? `╭─ ${title} ${'─'.repeat(Math.max(0, width - title.length - 3))}╮`
|
|
231
|
+
: `╭${'─'.repeat(width + 2)}╮`;
|
|
232
|
+
const bottom = `╰${'─'.repeat(width + 2)}╯`;
|
|
233
|
+
const paddingStr = ' '.repeat(padding);
|
|
234
|
+
console.log(style(top, 'cyan'));
|
|
235
|
+
for (const line of lines) {
|
|
236
|
+
const padded = line.padEnd(maxLength);
|
|
237
|
+
console.log(style('│', 'cyan') + paddingStr + padded + paddingStr + style('│', 'cyan'));
|
|
238
|
+
}
|
|
239
|
+
console.log(style(bottom, 'cyan'));
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=output-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-formatter.js","sourceRoot":"","sources":["../../../src/utils/output-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLI Pipeline Inspector - visualize pipeline execution
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.formatTrace = formatTrace;
|
|
7
|
+
exports.formatTraces = formatTraces;
|
|
8
|
+
exports.formatStats = formatStats;
|
|
9
|
+
exports.visualizePipeline = visualizePipeline;
|
|
10
|
+
/**
|
|
11
|
+
* Format a trace for CLI display
|
|
12
|
+
*/
|
|
13
|
+
function formatTrace(trace) {
|
|
14
|
+
const lines = [];
|
|
15
|
+
lines.push(`\n┌─ Pipeline Trace: ${trace.requestId}`);
|
|
16
|
+
lines.push(`├─ Duration: ${trace.duration ? `${trace.duration}ms` : 'in progress'}`);
|
|
17
|
+
lines.push(`├─ Status: ${trace.error ? '✗ Error' : '✓ Success'}`);
|
|
18
|
+
if (trace.steps.length > 0) {
|
|
19
|
+
lines.push(`└─ Steps:`);
|
|
20
|
+
for (let i = 0; i < trace.steps.length; i++) {
|
|
21
|
+
const step = trace.steps[i];
|
|
22
|
+
const isLast = i === trace.steps.length - 1;
|
|
23
|
+
const prefix = isLast ? ' └─' : ' ├─';
|
|
24
|
+
lines.push(`${prefix} ${step.name} (${step.type}) - ${step.duration ? `${step.duration}ms` : 'running'}`);
|
|
25
|
+
if (step.error) {
|
|
26
|
+
lines.push(`${isLast ? ' ' : ' │ '}✗ ${step.error.message}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (trace.error) {
|
|
31
|
+
lines.push(`\nError: ${trace.error.message}`);
|
|
32
|
+
}
|
|
33
|
+
return lines.join('\n');
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Format multiple traces
|
|
37
|
+
*/
|
|
38
|
+
function formatTraces(traces) {
|
|
39
|
+
if (traces.length === 0) {
|
|
40
|
+
return 'No traces available';
|
|
41
|
+
}
|
|
42
|
+
return traces.map(formatTrace).join('\n\n');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Format debug statistics
|
|
46
|
+
*/
|
|
47
|
+
function formatStats(stats) {
|
|
48
|
+
const lines = [];
|
|
49
|
+
lines.push('\n┌─ Debug Statistics');
|
|
50
|
+
lines.push(`├─ Total Requests: ${stats.totalRequests}`);
|
|
51
|
+
lines.push(`├─ Total Events: ${stats.totalEvents}`);
|
|
52
|
+
lines.push(`├─ Average Duration: ${stats.averageDuration.toFixed(2)}ms`);
|
|
53
|
+
lines.push(`├─ Errors: ${stats.errorCount}`);
|
|
54
|
+
lines.push(`├─ Warnings: ${stats.warningCount}`);
|
|
55
|
+
const eventTypes = Object.entries(stats.eventsByType);
|
|
56
|
+
if (eventTypes.length > 0) {
|
|
57
|
+
lines.push(`└─ Events by Type:`);
|
|
58
|
+
for (let i = 0; i < eventTypes.length; i++) {
|
|
59
|
+
const [type, count] = eventTypes[i];
|
|
60
|
+
const isLast = i === eventTypes.length - 1;
|
|
61
|
+
const prefix = isLast ? ' └─' : ' ├─';
|
|
62
|
+
lines.push(`${prefix} ${type}: ${count}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return lines.join('\n');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create a simple visualization of pipeline flow
|
|
69
|
+
*/
|
|
70
|
+
function visualizePipeline(trace) {
|
|
71
|
+
const lines = [];
|
|
72
|
+
lines.push('\nPipeline Flow:');
|
|
73
|
+
lines.push('─'.repeat(60));
|
|
74
|
+
let offset = 0;
|
|
75
|
+
const totalDuration = trace.duration || Date.now() - trace.startTime;
|
|
76
|
+
const scale = 50 / totalDuration;
|
|
77
|
+
for (const step of trace.steps) {
|
|
78
|
+
if (!step.duration)
|
|
79
|
+
continue;
|
|
80
|
+
const barLength = Math.max(1, Math.floor(step.duration * scale));
|
|
81
|
+
const bar = '█'.repeat(barLength);
|
|
82
|
+
const status = step.error ? '✗' : '✓';
|
|
83
|
+
lines.push(`${status} ${step.name.padEnd(20)} ${bar} ${step.duration}ms`);
|
|
84
|
+
offset += step.duration;
|
|
85
|
+
}
|
|
86
|
+
lines.push('─'.repeat(60));
|
|
87
|
+
lines.push(`Total: ${totalDuration}ms`);
|
|
88
|
+
return lines.join('\n');
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=pipeline-inspector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-inspector.js","sourceRoot":"","sources":["../../../src/utils/pipeline-inspector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* State Manager Utility
|
|
4
|
+
*
|
|
5
|
+
* Tracks running models and backend state for CLI.
|
|
6
|
+
* Used by `ps` command to show active models.
|
|
7
|
+
*
|
|
8
|
+
* @module cli/utils/state-manager
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.stateManager = void 0;
|
|
12
|
+
/**
|
|
13
|
+
* Global state manager for running models.
|
|
14
|
+
*/
|
|
15
|
+
class StateManager {
|
|
16
|
+
models = new Map();
|
|
17
|
+
cleanupTimers = new Map();
|
|
18
|
+
/**
|
|
19
|
+
* Add a running model.
|
|
20
|
+
*/
|
|
21
|
+
add(model) {
|
|
22
|
+
const key = `${model.backend}:${model.name}`;
|
|
23
|
+
this.models.set(key, model);
|
|
24
|
+
// Set up cleanup timer if TTL specified
|
|
25
|
+
if (model.ttl) {
|
|
26
|
+
this.scheduleCleanup(key, model.ttl);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Update last activity time.
|
|
31
|
+
*/
|
|
32
|
+
touch(backend, modelName) {
|
|
33
|
+
const key = `${backend}:${modelName}`;
|
|
34
|
+
const model = this.models.get(key);
|
|
35
|
+
if (model) {
|
|
36
|
+
model.lastActivity = Date.now();
|
|
37
|
+
// Reschedule cleanup if TTL set
|
|
38
|
+
if (model.ttl) {
|
|
39
|
+
this.scheduleCleanup(key, model.ttl);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Remove a running model.
|
|
45
|
+
*/
|
|
46
|
+
remove(backend, modelName) {
|
|
47
|
+
const key = `${backend}:${modelName}`;
|
|
48
|
+
this.models.delete(key);
|
|
49
|
+
// Clear cleanup timer
|
|
50
|
+
const timer = this.cleanupTimers.get(key);
|
|
51
|
+
if (timer) {
|
|
52
|
+
clearTimeout(timer);
|
|
53
|
+
this.cleanupTimers.delete(key);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get a running model.
|
|
58
|
+
*/
|
|
59
|
+
get(backend, modelName) {
|
|
60
|
+
const key = `${backend}:${modelName}`;
|
|
61
|
+
return this.models.get(key);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get all running models.
|
|
65
|
+
*/
|
|
66
|
+
getAll() {
|
|
67
|
+
return Array.from(this.models.values());
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get models by backend.
|
|
71
|
+
*/
|
|
72
|
+
getByBackend(backend) {
|
|
73
|
+
return Array.from(this.models.values()).filter((m) => m.backend === backend);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if model is running.
|
|
77
|
+
*/
|
|
78
|
+
isRunning(backend, modelName) {
|
|
79
|
+
const key = `${backend}:${modelName}`;
|
|
80
|
+
return this.models.has(key);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Clear all models.
|
|
84
|
+
*/
|
|
85
|
+
clear() {
|
|
86
|
+
// Clear all timers
|
|
87
|
+
for (const timer of this.cleanupTimers.values()) {
|
|
88
|
+
clearTimeout(timer);
|
|
89
|
+
}
|
|
90
|
+
this.cleanupTimers.clear();
|
|
91
|
+
this.models.clear();
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Schedule cleanup after TTL.
|
|
95
|
+
*/
|
|
96
|
+
scheduleCleanup(key, ttl) {
|
|
97
|
+
// Clear existing timer
|
|
98
|
+
const existingTimer = this.cleanupTimers.get(key);
|
|
99
|
+
if (existingTimer) {
|
|
100
|
+
clearTimeout(existingTimer);
|
|
101
|
+
}
|
|
102
|
+
// Schedule new timer
|
|
103
|
+
const timer = setTimeout(() => {
|
|
104
|
+
this.models.delete(key);
|
|
105
|
+
this.cleanupTimers.delete(key);
|
|
106
|
+
}, ttl);
|
|
107
|
+
this.cleanupTimers.set(key, timer);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Global state manager instance.
|
|
112
|
+
*/
|
|
113
|
+
exports.stateManager = new StateManager();
|
|
114
|
+
//# sourceMappingURL=state-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../../../src/utils/state-manager.ts"],"names":[],"mappings":"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"}
|