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.
Files changed (129) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/convert-request.js +365 -0
  3. package/dist/cjs/convert-request.js.map +1 -0
  4. package/dist/cjs/convert-response.js +211 -0
  5. package/dist/cjs/convert-response.js.map +1 -0
  6. package/dist/cjs/converters/request-converters.js +183 -0
  7. package/dist/cjs/converters/request-converters.js.map +1 -0
  8. package/dist/cjs/converters/response-converters.js +203 -0
  9. package/dist/cjs/converters/response-converters.js.map +1 -0
  10. package/dist/cjs/create-backend.js +569 -0
  11. package/dist/cjs/create-backend.js.map +1 -0
  12. package/dist/cjs/index.js +31 -0
  13. package/dist/cjs/index.js.map +1 -0
  14. package/dist/cjs/main.js +181 -0
  15. package/dist/cjs/main.js.map +1 -0
  16. package/dist/cjs/ollama/commands/list.js +70 -0
  17. package/dist/cjs/ollama/commands/list.js.map +1 -0
  18. package/dist/cjs/ollama/commands/ps.js +80 -0
  19. package/dist/cjs/ollama/commands/ps.js.map +1 -0
  20. package/dist/cjs/ollama/commands/pull.js +198 -0
  21. package/dist/cjs/ollama/commands/pull.js.map +1 -0
  22. package/dist/cjs/ollama/commands/run.js +279 -0
  23. package/dist/cjs/ollama/commands/run.js.map +1 -0
  24. package/dist/cjs/ollama/commands/show.js +138 -0
  25. package/dist/cjs/ollama/commands/show.js.map +1 -0
  26. package/dist/cjs/ollama/index.js +238 -0
  27. package/dist/cjs/ollama/index.js.map +1 -0
  28. package/dist/cjs/ollama/types.js +10 -0
  29. package/dist/cjs/ollama/types.js.map +1 -0
  30. package/dist/cjs/proxy.js +406 -0
  31. package/dist/cjs/proxy.js.map +1 -0
  32. package/dist/cjs/utils/backend-loader.js +112 -0
  33. package/dist/cjs/utils/backend-loader.js.map +1 -0
  34. package/dist/cjs/utils/index.js +29 -0
  35. package/dist/cjs/utils/index.js.map +1 -0
  36. package/dist/cjs/utils/model-translation.js +138 -0
  37. package/dist/cjs/utils/model-translation.js.map +1 -0
  38. package/dist/cjs/utils/output-formatter.js +241 -0
  39. package/dist/cjs/utils/output-formatter.js.map +1 -0
  40. package/dist/cjs/utils/pipeline-inspector.js +90 -0
  41. package/dist/cjs/utils/pipeline-inspector.js.map +1 -0
  42. package/dist/cjs/utils/state-manager.js +114 -0
  43. package/dist/cjs/utils/state-manager.js.map +1 -0
  44. package/dist/esm/convert-request.js +331 -0
  45. package/dist/esm/convert-request.js.map +1 -0
  46. package/dist/esm/convert-response.js +177 -0
  47. package/dist/esm/convert-response.js.map +1 -0
  48. package/dist/esm/converters/request-converters.js +175 -0
  49. package/dist/esm/converters/request-converters.js.map +1 -0
  50. package/dist/esm/converters/response-converters.js +191 -0
  51. package/dist/esm/converters/response-converters.js.map +1 -0
  52. package/dist/esm/create-backend.js +533 -0
  53. package/dist/esm/create-backend.js.map +1 -0
  54. package/dist/esm/index.js +15 -0
  55. package/dist/esm/index.js.map +1 -0
  56. package/dist/esm/main.js +149 -0
  57. package/dist/esm/main.js.map +1 -0
  58. package/dist/esm/ollama/commands/list.js +67 -0
  59. package/dist/esm/ollama/commands/list.js.map +1 -0
  60. package/dist/esm/ollama/commands/ps.js +77 -0
  61. package/dist/esm/ollama/commands/ps.js.map +1 -0
  62. package/dist/esm/ollama/commands/pull.js +195 -0
  63. package/dist/esm/ollama/commands/pull.js.map +1 -0
  64. package/dist/esm/ollama/commands/run.js +243 -0
  65. package/dist/esm/ollama/commands/run.js.map +1 -0
  66. package/dist/esm/ollama/commands/show.js +135 -0
  67. package/dist/esm/ollama/commands/show.js.map +1 -0
  68. package/dist/esm/ollama/index.js +235 -0
  69. package/dist/esm/ollama/index.js.map +1 -0
  70. package/dist/esm/ollama/types.js +9 -0
  71. package/dist/esm/ollama/types.js.map +1 -0
  72. package/dist/esm/proxy.js +403 -0
  73. package/dist/esm/proxy.js.map +1 -0
  74. package/dist/esm/utils/backend-loader.js +74 -0
  75. package/dist/esm/utils/backend-loader.js.map +1 -0
  76. package/dist/esm/utils/index.js +13 -0
  77. package/dist/esm/utils/index.js.map +1 -0
  78. package/dist/esm/utils/model-translation.js +99 -0
  79. package/dist/esm/utils/model-translation.js.map +1 -0
  80. package/dist/esm/utils/output-formatter.js +224 -0
  81. package/dist/esm/utils/output-formatter.js.map +1 -0
  82. package/dist/esm/utils/pipeline-inspector.js +84 -0
  83. package/dist/esm/utils/pipeline-inspector.js.map +1 -0
  84. package/dist/esm/utils/state-manager.js +111 -0
  85. package/dist/esm/utils/state-manager.js.map +1 -0
  86. package/dist/types/convert-request.d.ts +15 -0
  87. package/dist/types/convert-request.d.ts.map +1 -0
  88. package/dist/types/convert-response.d.ts +16 -0
  89. package/dist/types/convert-response.d.ts.map +1 -0
  90. package/dist/types/converters/request-converters.d.ts +139 -0
  91. package/dist/types/converters/request-converters.d.ts.map +1 -0
  92. package/dist/types/converters/response-converters.d.ts +134 -0
  93. package/dist/types/converters/response-converters.d.ts.map +1 -0
  94. package/dist/types/create-backend.d.ts +20 -0
  95. package/dist/types/create-backend.d.ts.map +1 -0
  96. package/dist/types/index.d.ts +13 -0
  97. package/dist/types/index.d.ts.map +1 -0
  98. package/dist/types/main.d.ts +19 -0
  99. package/dist/types/main.d.ts.map +1 -0
  100. package/dist/types/ollama/commands/list.d.ts +32 -0
  101. package/dist/types/ollama/commands/list.d.ts.map +1 -0
  102. package/dist/types/ollama/commands/ps.d.ts +27 -0
  103. package/dist/types/ollama/commands/ps.d.ts.map +1 -0
  104. package/dist/types/ollama/commands/pull.d.ts +21 -0
  105. package/dist/types/ollama/commands/pull.d.ts.map +1 -0
  106. package/dist/types/ollama/commands/run.d.ts +48 -0
  107. package/dist/types/ollama/commands/run.d.ts.map +1 -0
  108. package/dist/types/ollama/commands/show.d.ts +36 -0
  109. package/dist/types/ollama/commands/show.d.ts.map +1 -0
  110. package/dist/types/ollama/index.d.ts +12 -0
  111. package/dist/types/ollama/index.d.ts.map +1 -0
  112. package/dist/types/ollama/types.d.ts +58 -0
  113. package/dist/types/ollama/types.d.ts.map +1 -0
  114. package/dist/types/proxy.d.ts +16 -0
  115. package/dist/types/proxy.d.ts.map +1 -0
  116. package/dist/types/utils/backend-loader.d.ts +55 -0
  117. package/dist/types/utils/backend-loader.d.ts.map +1 -0
  118. package/dist/types/utils/index.d.ts +13 -0
  119. package/dist/types/utils/index.d.ts.map +1 -0
  120. package/dist/types/utils/model-translation.d.ts +64 -0
  121. package/dist/types/utils/model-translation.d.ts.map +1 -0
  122. package/dist/types/utils/output-formatter.d.ts +113 -0
  123. package/dist/types/utils/output-formatter.d.ts.map +1 -0
  124. package/dist/types/utils/pipeline-inspector.d.ts +50 -0
  125. package/dist/types/utils/pipeline-inspector.d.ts.map +1 -0
  126. package/dist/types/utils/state-manager.d.ts +91 -0
  127. package/dist/types/utils/state-manager.d.ts.map +1 -0
  128. package/package.json +75 -0
  129. package/readme.md +32 -0
@@ -0,0 +1,533 @@
1
+ /**
2
+ * Create Backend Subcommand
3
+ *
4
+ * Interactive wizard to generate backend adapter templates for use with ai-matey.
5
+ *
6
+ * @module cli/create-backend
7
+ */
8
+ import { writeFile } from 'node:fs/promises';
9
+ import { resolve } from 'node:path';
10
+ import * as readline from 'node:readline/promises';
11
+ import { stdin as input, stdout as output } from 'node:process';
12
+ import { error, success, info, warn } from './utils/output-formatter.js';
13
+ const BACKEND_PRESETS = {
14
+ openai: {
15
+ name: 'OpenAI',
16
+ description: 'OpenAI GPT models (GPT-4, GPT-3.5, etc.)',
17
+ adapterClass: 'OpenAIBackendAdapter',
18
+ importPath: 'ai.matey/adapters/backend',
19
+ requiresApiKey: true,
20
+ defaultBaseURL: 'https://api.openai.com/v1',
21
+ defaultModel: 'gpt-4',
22
+ envVarPrefix: 'OPENAI',
23
+ configOptions: [
24
+ {
25
+ name: 'organization',
26
+ description: 'OpenAI Organization ID',
27
+ required: false,
28
+ envVar: 'OPENAI_ORG',
29
+ },
30
+ { name: 'timeout', description: 'Request timeout (ms)', required: false, default: 60000 },
31
+ ],
32
+ },
33
+ anthropic: {
34
+ name: 'Anthropic',
35
+ description: 'Anthropic Claude models',
36
+ adapterClass: 'AnthropicBackendAdapter',
37
+ importPath: 'ai.matey/adapters/backend',
38
+ requiresApiKey: true,
39
+ defaultBaseURL: 'https://api.anthropic.com',
40
+ defaultModel: 'claude-3-5-sonnet-20241022',
41
+ envVarPrefix: 'ANTHROPIC',
42
+ configOptions: [
43
+ { name: 'timeout', description: 'Request timeout (ms)', required: false, default: 60000 },
44
+ { name: 'maxRetries', description: 'Max retry attempts', required: false, default: 3 },
45
+ ],
46
+ },
47
+ gemini: {
48
+ name: 'Google Gemini',
49
+ description: 'Google Gemini models',
50
+ adapterClass: 'GeminiBackendAdapter',
51
+ importPath: 'ai.matey/adapters/backend',
52
+ requiresApiKey: true,
53
+ defaultBaseURL: 'https://generativelanguage.googleapis.com/v1beta',
54
+ defaultModel: 'gemini-2.0-flash-exp',
55
+ envVarPrefix: 'GEMINI',
56
+ configOptions: [
57
+ { name: 'timeout', description: 'Request timeout (ms)', required: false, default: 60000 },
58
+ ],
59
+ },
60
+ ollama: {
61
+ name: 'Ollama',
62
+ description: 'Local Ollama instance',
63
+ adapterClass: 'OllamaBackendAdapter',
64
+ importPath: 'ai.matey/adapters/backend',
65
+ requiresApiKey: false,
66
+ defaultBaseURL: 'http://localhost:11434',
67
+ defaultModel: 'llama3.1',
68
+ envVarPrefix: 'OLLAMA',
69
+ configOptions: [
70
+ { name: 'timeout', description: 'Request timeout (ms)', required: false, default: 120000 },
71
+ ],
72
+ },
73
+ mistral: {
74
+ name: 'Mistral AI',
75
+ description: 'Mistral AI models',
76
+ adapterClass: 'MistralBackendAdapter',
77
+ importPath: 'ai.matey/adapters/backend',
78
+ requiresApiKey: true,
79
+ defaultBaseURL: 'https://api.mistral.ai/v1',
80
+ defaultModel: 'mistral-large-latest',
81
+ envVarPrefix: 'MISTRAL',
82
+ configOptions: [
83
+ { name: 'timeout', description: 'Request timeout (ms)', required: false, default: 60000 },
84
+ ],
85
+ },
86
+ deepseek: {
87
+ name: 'DeepSeek',
88
+ description: 'DeepSeek models',
89
+ adapterClass: 'DeepSeekBackendAdapter',
90
+ importPath: 'ai.matey/adapters/backend',
91
+ requiresApiKey: true,
92
+ defaultBaseURL: 'https://api.deepseek.com/v1',
93
+ defaultModel: 'deepseek-chat',
94
+ envVarPrefix: 'DEEPSEEK',
95
+ configOptions: [
96
+ { name: 'timeout', description: 'Request timeout (ms)', required: false, default: 60000 },
97
+ ],
98
+ },
99
+ groq: {
100
+ name: 'Groq',
101
+ description: 'Groq fast inference',
102
+ adapterClass: 'GroqBackendAdapter',
103
+ importPath: 'ai.matey/adapters/backend',
104
+ requiresApiKey: true,
105
+ defaultBaseURL: 'https://api.groq.com/openai/v1',
106
+ defaultModel: 'llama-3.3-70b-versatile',
107
+ envVarPrefix: 'GROQ',
108
+ configOptions: [
109
+ { name: 'timeout', description: 'Request timeout (ms)', required: false, default: 60000 },
110
+ ],
111
+ },
112
+ huggingface: {
113
+ name: 'Hugging Face',
114
+ description: 'Hugging Face Inference API',
115
+ adapterClass: 'HuggingFaceBackendAdapter',
116
+ importPath: 'ai.matey/adapters/backend',
117
+ requiresApiKey: true,
118
+ defaultModel: 'meta-llama/Meta-Llama-3-8B-Instruct',
119
+ envVarPrefix: 'HUGGINGFACE',
120
+ configOptions: [
121
+ { name: 'timeout', description: 'Request timeout (ms)', required: false, default: 60000 },
122
+ ],
123
+ },
124
+ lmstudio: {
125
+ name: 'LM Studio',
126
+ description: 'Local LM Studio instance',
127
+ adapterClass: 'LMStudioBackendAdapter',
128
+ importPath: 'ai.matey/adapters/backend',
129
+ requiresApiKey: false,
130
+ defaultBaseURL: 'http://localhost:1234/v1',
131
+ defaultModel: 'local-model',
132
+ envVarPrefix: 'LMSTUDIO',
133
+ configOptions: [
134
+ { name: 'timeout', description: 'Request timeout (ms)', required: false, default: 120000 },
135
+ ],
136
+ },
137
+ nvidia: {
138
+ name: 'NVIDIA NIM',
139
+ description: 'NVIDIA NIM inference',
140
+ adapterClass: 'NVIDIABackendAdapter',
141
+ importPath: 'ai.matey/adapters/backend',
142
+ requiresApiKey: true,
143
+ defaultBaseURL: 'https://integrate.api.nvidia.com/v1',
144
+ defaultModel: 'meta/llama-3.1-8b-instruct',
145
+ envVarPrefix: 'NVIDIA',
146
+ configOptions: [
147
+ { name: 'timeout', description: 'Request timeout (ms)', required: false, default: 60000 },
148
+ ],
149
+ },
150
+ 'chrome-ai': {
151
+ name: 'Chrome AI',
152
+ description: 'Chrome built-in AI (browser only)',
153
+ adapterClass: 'ChromeAIBackendAdapter',
154
+ importPath: 'ai.matey/adapters/backend',
155
+ requiresApiKey: false,
156
+ envVarPrefix: 'CHROME_AI',
157
+ platformRequirements: 'Chrome browser with built-in AI enabled',
158
+ configOptions: [
159
+ {
160
+ name: 'temperature',
161
+ description: 'Sampling temperature (0-1)',
162
+ required: false,
163
+ default: 0.7,
164
+ },
165
+ { name: 'topK', description: 'Top-K sampling', required: false, default: 40 },
166
+ ],
167
+ },
168
+ 'node-llamacpp': {
169
+ name: 'Node LlamaCpp',
170
+ description: 'Local models via node-llama-cpp (GGUF files)',
171
+ adapterClass: 'NodeLlamaCppBackend',
172
+ importPath: 'ai.matey/adapters/backend-native',
173
+ requiresApiKey: false,
174
+ isNative: true,
175
+ platformRequirements: 'Node.js, node-llama-cpp installed',
176
+ configOptions: [
177
+ { name: 'modelPath', description: 'Path to GGUF model file', required: true },
178
+ { name: 'contextSize', description: 'Context window size', required: false, default: 2048 },
179
+ { name: 'gpuLayers', description: 'Number of GPU layers', required: false, default: 0 },
180
+ { name: 'temperature', description: 'Sampling temperature', required: false, default: 0.7 },
181
+ ],
182
+ },
183
+ apple: {
184
+ name: 'Apple Foundation Models',
185
+ description: 'Apple on-device AI (macOS 15+ Sequoia)',
186
+ adapterClass: 'AppleBackend',
187
+ importPath: 'ai.matey/adapters/backend-native',
188
+ requiresApiKey: false,
189
+ isNative: true,
190
+ platformRequirements: 'macOS 15+ (Sequoia), Apple Intelligence enabled',
191
+ configOptions: [
192
+ { name: 'instructions', description: 'System instructions', required: false },
193
+ {
194
+ name: 'maximumResponseTokens',
195
+ description: 'Max tokens to generate',
196
+ required: false,
197
+ default: 2048,
198
+ },
199
+ { name: 'temperature', description: 'Sampling temperature', required: false, default: 0.7 },
200
+ {
201
+ name: 'samplingMode',
202
+ description: 'Sampling mode (default/random)',
203
+ required: false,
204
+ default: 'default',
205
+ },
206
+ ],
207
+ },
208
+ };
209
+ // ============================================================================
210
+ // Template Generation
211
+ // ============================================================================
212
+ function generateBackendFile(preset, config, outputPath) {
213
+ const envVarPrefix = preset.envVarPrefix || preset.name.toUpperCase().replace(/[^A-Z0-9]/g, '_');
214
+ const apiKeyEnvVar = `${envVarPrefix}_API_KEY`;
215
+ let imports = `import { ${preset.adapterClass} } from '${preset.importPath}';`;
216
+ let envVarDeclarations = [];
217
+ let configObject = [];
218
+ let envVarChecks = [];
219
+ // API key
220
+ if (preset.requiresApiKey) {
221
+ envVarDeclarations.push(`const apiKey = process.env.${apiKeyEnvVar};`);
222
+ envVarChecks.push(`if (!apiKey) {
223
+ throw new Error('${preset.name} API key required. Set ${apiKeyEnvVar} environment variable.');
224
+ }`);
225
+ configObject.push(' apiKey');
226
+ }
227
+ // Base URL
228
+ if (preset.defaultBaseURL && config.baseURL) {
229
+ envVarDeclarations.push(`const baseURL = process.env.${envVarPrefix}_BASE_URL || '${config.baseURL}';`);
230
+ configObject.push(' baseURL');
231
+ }
232
+ // Default model
233
+ if (preset.defaultModel && config.defaultModel) {
234
+ configObject.push(` defaultModel: '${config.defaultModel}'`);
235
+ }
236
+ // Additional config options
237
+ for (const option of preset.configOptions || []) {
238
+ const value = config[option.name];
239
+ if (value !== undefined && value !== '') {
240
+ if (option.envVar) {
241
+ envVarDeclarations.push(`const ${option.name} = process.env.${option.envVar} || ${JSON.stringify(value)};`);
242
+ configObject.push(` ${option.name}`);
243
+ }
244
+ else {
245
+ configObject.push(` ${option.name}: ${JSON.stringify(value)}`);
246
+ }
247
+ }
248
+ else if (option.default !== undefined && !config[option.name]) {
249
+ // Include defaults even if not in config
250
+ if (option.envVar) {
251
+ envVarDeclarations.push(`const ${option.name} = process.env.${option.envVar} || ${JSON.stringify(option.default)};`);
252
+ configObject.push(` ${option.name}`);
253
+ }
254
+ else {
255
+ configObject.push(` ${option.name}: ${JSON.stringify(option.default)}`);
256
+ }
257
+ }
258
+ }
259
+ // Add usage examples
260
+ const usageExamples = preset.defaultModel
261
+ ? `\n * Usage:\n * ai-matey emulate-ollama --backend ${outputPath || './backend.mjs'} run ${preset.defaultModel}\n * ai-matey proxy --backend ${outputPath || './backend.mjs'} --port 3000`
262
+ : `\n * Usage:\n * ai-matey emulate-ollama --backend ${outputPath || './backend.mjs'} run default\n * ai-matey proxy --backend ${outputPath || './backend.mjs'} --port 3000\n *\n * Note: Model name is metadata only (uses system default)`;
263
+ const header = `/**
264
+ * ${preset.name} Backend Adapter
265
+ *
266
+ * ${preset.description}
267
+ *${preset.platformRequirements ? `\n * Platform Requirements: ${preset.platformRequirements}\n *` : ''}
268
+ * Environment Variables:
269
+ ${preset.requiresApiKey ? ` * ${apiKeyEnvVar} - API key (required)\n` : ''}${preset.defaultBaseURL ? ` * ${envVarPrefix}_BASE_URL - API base URL (optional)\n` : ''}${(preset.configOptions || [])
270
+ .filter((opt) => opt.envVar)
271
+ .map((opt) => ` * ${opt.envVar} - ${opt.description} (optional)`)
272
+ .join('\n')}${usageExamples}
273
+ */
274
+ `;
275
+ // Build config object content - only add items if we have any
276
+ const configContent = configObject.length > 0 ? `\n${configObject.join(',\n')}\n` : '';
277
+ return `${header}
278
+ ${imports}
279
+
280
+ ${envVarDeclarations.join('\n')}
281
+
282
+ ${envVarChecks.join('\n\n')}
283
+
284
+ export default new ${preset.adapterClass}({${configContent}});
285
+ `;
286
+ }
287
+ // ============================================================================
288
+ // Interactive Wizard
289
+ // ============================================================================
290
+ async function prompt(rl, question, defaultValue) {
291
+ const suffix = defaultValue ? ` (default: ${defaultValue})` : '';
292
+ const answer = await rl.question(`${question}${suffix}: `);
293
+ return answer.trim() || defaultValue || '';
294
+ }
295
+ async function confirm(rl, question, defaultValue = true) {
296
+ const suffix = defaultValue ? ' (Y/n)' : ' (y/N)';
297
+ const answer = await rl.question(`${question}${suffix}: `);
298
+ const normalized = answer.trim().toLowerCase();
299
+ if (normalized === '')
300
+ return defaultValue;
301
+ return normalized === 'y' || normalized === 'yes';
302
+ }
303
+ async function select(rl, question, options) {
304
+ console.log(`\n${question}`);
305
+ options.forEach((opt, i) => {
306
+ console.log(` ${i + 1}. ${opt}`);
307
+ });
308
+ while (true) {
309
+ const answer = await rl.question('\nSelect option (number): ');
310
+ const num = parseInt(answer.trim(), 10);
311
+ if (num >= 1 && num <= options.length) {
312
+ return options[num - 1] || '';
313
+ }
314
+ warn(`Invalid selection. Please choose 1-${options.length}`);
315
+ }
316
+ }
317
+ async function runWizard() {
318
+ const rl = readline.createInterface({ input, output });
319
+ try {
320
+ console.log('\n╔════════════════════════════════════════════════════════════╗');
321
+ console.log('║ AI.Matey Backend Generator Wizard ║');
322
+ console.log('╚════════════════════════════════════════════════════════════╝\n');
323
+ // 1. Select backend type
324
+ const backendOptions = Object.entries(BACKEND_PRESETS).map(([_key, preset]) => {
325
+ const native = preset.isNative ? ' [NATIVE]' : '';
326
+ return `${preset.name}${native} - ${preset.description}`;
327
+ });
328
+ const backendKeys = Object.keys(BACKEND_PRESETS);
329
+ const selectedOption = await select(rl, 'Select backend type:', backendOptions);
330
+ const selectedIndex = backendOptions.indexOf(selectedOption);
331
+ const backendKey = backendKeys[selectedIndex] || 'openai';
332
+ const preset = BACKEND_PRESETS[backendKey];
333
+ console.log();
334
+ info(`Selected: ${preset.name}`);
335
+ if (preset.platformRequirements) {
336
+ warn(`Requirements: ${preset.platformRequirements}`);
337
+ }
338
+ console.log();
339
+ // 2. Output path
340
+ const outputPath = await prompt(rl, 'Output file path', './backend.mjs');
341
+ // 3. Collect configuration
342
+ const config = {};
343
+ // Base URL
344
+ if (preset.defaultBaseURL) {
345
+ const useDefaultBaseURL = await confirm(rl, `Use default base URL (${preset.defaultBaseURL})?`, true);
346
+ if (useDefaultBaseURL) {
347
+ config.baseURL = preset.defaultBaseURL;
348
+ }
349
+ else {
350
+ config.baseURL = await prompt(rl, 'Custom base URL');
351
+ }
352
+ }
353
+ // Default model
354
+ if (preset.defaultModel) {
355
+ config.defaultModel = await prompt(rl, 'Default model', preset.defaultModel);
356
+ }
357
+ // Additional options
358
+ if (preset.configOptions && preset.configOptions.length > 0) {
359
+ console.log();
360
+ const configureAdvanced = await confirm(rl, 'Configure advanced options?', false);
361
+ if (configureAdvanced) {
362
+ for (const option of preset.configOptions) {
363
+ let value;
364
+ if (option.required) {
365
+ value = await prompt(rl, option.description);
366
+ }
367
+ else {
368
+ const useDefault = option.default !== undefined
369
+ ? await confirm(rl, `${option.description} (use default: ${option.default})?`, true)
370
+ : false;
371
+ if (useDefault) {
372
+ value = option.default;
373
+ }
374
+ else {
375
+ const input = await prompt(rl, option.description);
376
+ // Type conversion
377
+ if (typeof option.default === 'number') {
378
+ value = parseInt(input, 10) || option.default;
379
+ }
380
+ else if (typeof option.default === 'boolean') {
381
+ value = input.toLowerCase() === 'true';
382
+ }
383
+ else {
384
+ value = input;
385
+ }
386
+ }
387
+ }
388
+ if (value !== undefined && value !== '') {
389
+ config[option.name] = value;
390
+ }
391
+ }
392
+ }
393
+ }
394
+ // 4. Generate and write file
395
+ console.log();
396
+ info('Generating backend file...');
397
+ const content = generateBackendFile(preset, config, outputPath);
398
+ const resolvedPath = resolve(process.cwd(), outputPath);
399
+ await writeFile(resolvedPath, content, 'utf-8');
400
+ console.log();
401
+ success(`✓ Backend created: ${resolvedPath}`);
402
+ console.log('\n┌─ Next Steps ────────────────────────────────────────────┐');
403
+ if (preset.requiresApiKey) {
404
+ console.log(`│ 1. Set ${preset.envVarPrefix}_API_KEY environment variable │`);
405
+ console.log(`│ 2. Use with: ai-matey proxy --backend ${outputPath} │`);
406
+ }
407
+ else {
408
+ console.log(`│ 1. Review configuration in ${outputPath} │`);
409
+ console.log(`│ 2. Use with: ai-matey proxy --backend ${outputPath} │`);
410
+ }
411
+ console.log('└─────────────────────────────────────────────────────────┘\n');
412
+ }
413
+ finally {
414
+ rl.close();
415
+ }
416
+ }
417
+ /**
418
+ * Show help message.
419
+ */
420
+ function showHelp() {
421
+ console.log(`
422
+ Create Backend Subcommand
423
+
424
+ Interactive wizard to generate backend adapter templates for use with ai-matey.
425
+
426
+ Usage:
427
+ ai-matey create-backend [options]
428
+ ai-matey create-backend # Run interactive wizard (default)
429
+
430
+ Options:
431
+ --interactive, -i Run interactive wizard (default)
432
+ --provider <type> Skip wizard, use specific provider
433
+ --output <path> Output file path (default: ./backend.mjs)
434
+ --base-url <url> Custom base URL
435
+ --help, -h Show this help
436
+
437
+ Available Providers:
438
+ ${Object.entries(BACKEND_PRESETS)
439
+ .map(([key, p]) => `${key.padEnd(20)} ${p.description}`)
440
+ .join('\n ')}
441
+
442
+ Examples:
443
+ # Run interactive wizard
444
+ ai-matey create-backend
445
+
446
+ # Quick generate for specific provider
447
+ ai-matey create-backend --provider openai --output ./openai-backend.mjs
448
+
449
+ # Use the generated backend
450
+ ai-matey proxy --backend ./backend.mjs --port 3000
451
+ `);
452
+ }
453
+ /**
454
+ * Main CLI entry point.
455
+ */
456
+ export async function main(argv = process.argv.slice(2)) {
457
+ // Parse arguments
458
+ const options = {
459
+ interactive: true, // Default to interactive
460
+ };
461
+ for (let i = 0; i < argv.length; i++) {
462
+ const arg = argv[i];
463
+ if (!arg)
464
+ continue;
465
+ switch (arg) {
466
+ case '--help':
467
+ case '-h':
468
+ options.help = true;
469
+ break;
470
+ case '--interactive':
471
+ case '-i':
472
+ options.interactive = true;
473
+ break;
474
+ case '--provider':
475
+ options.provider = argv[++i];
476
+ options.interactive = false; // Disable interactive if provider specified
477
+ break;
478
+ case '--output':
479
+ options.output = argv[++i];
480
+ break;
481
+ case '--name':
482
+ options.name = argv[++i];
483
+ break;
484
+ case '--base-url':
485
+ options.baseUrl = argv[++i];
486
+ break;
487
+ default:
488
+ error(`Unknown option: ${arg}`);
489
+ console.log('Run with --help for usage information');
490
+ process.exit(1);
491
+ }
492
+ }
493
+ // Handle help
494
+ if (options.help) {
495
+ showHelp();
496
+ return;
497
+ }
498
+ // Run interactive wizard if no provider specified
499
+ if (options.interactive && !options.provider) {
500
+ await runWizard();
501
+ return;
502
+ }
503
+ // Non-interactive mode (legacy support)
504
+ const provider = options.provider || 'openai';
505
+ const outputPath = options.output || './backend.mjs';
506
+ if (!BACKEND_PRESETS[provider]) {
507
+ error(`Unknown provider: ${provider}`);
508
+ console.log(`\nAvailable providers: ${Object.keys(BACKEND_PRESETS).join(', ')}`);
509
+ process.exit(1);
510
+ }
511
+ try {
512
+ const preset = BACKEND_PRESETS[provider];
513
+ const config = {
514
+ baseURL: options.baseUrl || preset.defaultBaseURL || '',
515
+ defaultModel: preset.defaultModel || '',
516
+ };
517
+ info(`Generating ${preset.name} backend...`);
518
+ const content = generateBackendFile(preset, config, outputPath);
519
+ const resolvedPath = resolve(process.cwd(), outputPath);
520
+ await writeFile(resolvedPath, content, 'utf-8');
521
+ success(`\n✓ Backend created: ${resolvedPath}`);
522
+ console.log('\nNext steps:');
523
+ if (preset.requiresApiKey) {
524
+ console.log(` 1. Set ${preset.envVarPrefix}_API_KEY environment variable`);
525
+ }
526
+ console.log(` 2. Use with: ai-matey proxy --backend ${outputPath} --port 3000`);
527
+ }
528
+ catch (err) {
529
+ error(err instanceof Error ? err.message : String(err));
530
+ process.exit(1);
531
+ }
532
+ }
533
+ //# sourceMappingURL=create-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-backend.js","sourceRoot":"","sources":["../../src/create-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * CLI Utilities and Interfaces
3
+ *
4
+ * ⚠️ WARNING: This module uses Node.js-specific APIs (child_process, readline, fs) and
5
+ * is NOT browser-compatible. Import from 'ai.matey.backend' for
6
+ * browser-compatible adapters.
7
+ *
8
+ * @module cli
9
+ */
10
+ // Export CLI utilities
11
+ export * from './utils/index.js';
12
+ // Export converters
13
+ export * from './converters/request-converters.js';
14
+ export * from './converters/response-converters.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,uBAAuB;AACvB,cAAc,kBAAkB,CAAC;AAEjC,oBAAoB;AACpB,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC"}