mycontext-cli 0.2.11 → 0.2.12
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/README.md +48 -573
- package/dist/agents/implementations/QASubAgent.d.ts +1 -1
- package/dist/agents/implementations/QASubAgent.d.ts.map +1 -1
- package/dist/agents/implementations/QASubAgent.js +4 -9
- package/dist/agents/implementations/QASubAgent.js.map +1 -1
- package/dist/cli.js +17 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/generate-components.d.ts +15 -0
- package/dist/commands/generate-components.d.ts.map +1 -1
- package/dist/commands/generate-components.js +347 -25
- package/dist/commands/generate-components.js.map +1 -1
- package/dist/commands/generate.d.ts +13 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +403 -76
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +49 -30
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/model.d.ts.map +1 -1
- package/dist/commands/model.js +134 -96
- package/dist/commands/model.js.map +1 -1
- package/dist/config/ai-providers.json +29 -6
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/githubModelsClient.d.ts +27 -0
- package/dist/utils/githubModelsClient.d.ts.map +1 -0
- package/dist/utils/githubModelsClient.js +280 -0
- package/dist/utils/githubModelsClient.js.map +1 -0
- package/dist/utils/hybridAIClient.d.ts +18 -1
- package/dist/utils/hybridAIClient.d.ts.map +1 -1
- package/dist/utils/hybridAIClient.js +113 -12
- package/dist/utils/hybridAIClient.js.map +1 -1
- package/dist/utils/spinner.d.ts +0 -3
- package/dist/utils/spinner.d.ts.map +1 -1
- package/dist/utils/spinner.js +3 -27
- package/dist/utils/spinner.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.GitHubModelsClient = void 0;
|
|
40
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
class GitHubModelsClient {
|
|
44
|
+
constructor() {
|
|
45
|
+
this.baseUrl =
|
|
46
|
+
process.env.GITHUB_MODELS_BASE_URL ||
|
|
47
|
+
"https://models.github.ai/inference";
|
|
48
|
+
this.token =
|
|
49
|
+
process.env.MYCONTEXT_GITHUB_TOKEN || process.env.GITHUB_TOKEN || null;
|
|
50
|
+
if (!this.token) {
|
|
51
|
+
const loaded = this.loadTokenFromEnvFiles();
|
|
52
|
+
if (loaded) {
|
|
53
|
+
this.token = loaded;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
hasApiKey() {
|
|
58
|
+
return !!this.token;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Load token from project-level env files without external deps
|
|
62
|
+
* Priority: .mycontext/.env -> .env
|
|
63
|
+
*/
|
|
64
|
+
loadTokenFromEnvFiles() {
|
|
65
|
+
try {
|
|
66
|
+
const cwd = process.cwd();
|
|
67
|
+
const candidates = [
|
|
68
|
+
path.join(cwd, ".mycontext", ".env"),
|
|
69
|
+
path.join(cwd, ".env"),
|
|
70
|
+
];
|
|
71
|
+
for (const file of candidates) {
|
|
72
|
+
if (fs.existsSync(file)) {
|
|
73
|
+
const raw = fs.readFileSync(file, "utf8");
|
|
74
|
+
const lines = raw.split(/\r?\n/);
|
|
75
|
+
for (const line of lines) {
|
|
76
|
+
const trimmed = line.trim();
|
|
77
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
78
|
+
continue;
|
|
79
|
+
const idx = trimmed.indexOf("=");
|
|
80
|
+
if (idx === -1)
|
|
81
|
+
continue;
|
|
82
|
+
const key = trimmed.slice(0, idx).trim();
|
|
83
|
+
const value = trimmed
|
|
84
|
+
.slice(idx + 1)
|
|
85
|
+
.trim()
|
|
86
|
+
.replace(/^['"]|['"]$/g, "");
|
|
87
|
+
if (!process.env[key]) {
|
|
88
|
+
process.env[key] = value;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const token = process.env.MYCONTEXT_GITHUB_TOKEN ||
|
|
92
|
+
process.env.GITHUB_TOKEN ||
|
|
93
|
+
null;
|
|
94
|
+
if (token)
|
|
95
|
+
return token;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// ignore
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
headers() {
|
|
105
|
+
const h = { "Content-Type": "application/json" };
|
|
106
|
+
if (this.token)
|
|
107
|
+
h.Authorization = `Bearer ${this.token}`;
|
|
108
|
+
return h;
|
|
109
|
+
}
|
|
110
|
+
async checkConnection() {
|
|
111
|
+
try {
|
|
112
|
+
const controller = new AbortController();
|
|
113
|
+
const timeout = setTimeout(() => controller.abort(), 15000);
|
|
114
|
+
const res = await (0, node_fetch_1.default)(`${this.baseUrl}/chat/completions`, {
|
|
115
|
+
method: "POST",
|
|
116
|
+
headers: this.headers(),
|
|
117
|
+
body: JSON.stringify({
|
|
118
|
+
model: "openai/gpt-5",
|
|
119
|
+
messages: [
|
|
120
|
+
{ role: "system", content: "ping" },
|
|
121
|
+
{ role: "user", content: "ping" },
|
|
122
|
+
],
|
|
123
|
+
max_tokens: 1,
|
|
124
|
+
}),
|
|
125
|
+
signal: controller.signal,
|
|
126
|
+
});
|
|
127
|
+
clearTimeout(timeout);
|
|
128
|
+
// Consider any reachable response as available; details handled at call time
|
|
129
|
+
return this.hasApiKey();
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// If we have a token, allow attempts even if the health probe fails
|
|
133
|
+
return this.hasApiKey();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async generateText(prompt, opts = {}) {
|
|
137
|
+
const options = {
|
|
138
|
+
model: opts.model || process.env.MYCONTEXT_MODEL || "openai/gpt-5",
|
|
139
|
+
modelCandidates: opts.modelCandidates ||
|
|
140
|
+
(process.env.MYCONTEXT_MODEL_CANDIDATES
|
|
141
|
+
? process.env.MYCONTEXT_MODEL_CANDIDATES.split(",")
|
|
142
|
+
.map((s) => s.trim())
|
|
143
|
+
.filter(Boolean)
|
|
144
|
+
: undefined),
|
|
145
|
+
temperature: opts.temperature ?? 0.2,
|
|
146
|
+
maxTokens: opts.maxTokens ?? 1024,
|
|
147
|
+
};
|
|
148
|
+
const messages = [
|
|
149
|
+
{
|
|
150
|
+
role: "system",
|
|
151
|
+
content: "You are a concise, expert product/dev assistant.",
|
|
152
|
+
},
|
|
153
|
+
{ role: "user", content: prompt },
|
|
154
|
+
];
|
|
155
|
+
// Build model attempt list (primary then candidates, deduped)
|
|
156
|
+
const modelsToTry = Array.from(new Set([options.model, ...(options.modelCandidates || [])]));
|
|
157
|
+
const maxRetries = parseInt(process.env.MYCONTEXT_GITHUB_RETRIES || "1", 10);
|
|
158
|
+
for (const modelName of modelsToTry) {
|
|
159
|
+
let attempt = 0;
|
|
160
|
+
while (true) {
|
|
161
|
+
const controller = new AbortController();
|
|
162
|
+
const timeout = setTimeout(() => controller.abort(), 60000);
|
|
163
|
+
try {
|
|
164
|
+
const res = await (0, node_fetch_1.default)(`${this.baseUrl}/chat/completions`, {
|
|
165
|
+
method: "POST",
|
|
166
|
+
headers: this.headers(),
|
|
167
|
+
body: JSON.stringify({
|
|
168
|
+
model: modelName,
|
|
169
|
+
messages,
|
|
170
|
+
temperature: options.temperature,
|
|
171
|
+
max_tokens: options.maxTokens,
|
|
172
|
+
}),
|
|
173
|
+
signal: controller.signal,
|
|
174
|
+
});
|
|
175
|
+
clearTimeout(timeout);
|
|
176
|
+
if (!res.ok) {
|
|
177
|
+
const txt = await res.text();
|
|
178
|
+
// Handle rate limiting with backoff
|
|
179
|
+
if (res.status === 429 && attempt < maxRetries) {
|
|
180
|
+
// Derive wait seconds from header or body
|
|
181
|
+
const retryHeader = res.headers.get("retry-after");
|
|
182
|
+
let waitSeconds = retryHeader ? parseInt(retryHeader, 10) : NaN;
|
|
183
|
+
if (!Number.isFinite(waitSeconds)) {
|
|
184
|
+
const m = txt.match(/wait\s+(\d+)\s+seconds/i);
|
|
185
|
+
waitSeconds = m ? parseInt(m[1], 10) : 60;
|
|
186
|
+
}
|
|
187
|
+
// Clamp and add tiny jitter
|
|
188
|
+
waitSeconds = Math.max(1, Math.min(waitSeconds, 120));
|
|
189
|
+
console.log(`[GitHubModelsClient] Rate limited. Retrying in ${waitSeconds}s (attempt ${attempt + 1}/${maxRetries})`);
|
|
190
|
+
await new Promise((r) => setTimeout(r, waitSeconds * 1000));
|
|
191
|
+
attempt += 1;
|
|
192
|
+
continue; // retry loop
|
|
193
|
+
}
|
|
194
|
+
// Try next candidate for auth/not-found/validation errors
|
|
195
|
+
if ((res.status === 401 ||
|
|
196
|
+
res.status === 404 ||
|
|
197
|
+
res.status === 422) &&
|
|
198
|
+
modelsToTry.length > 1) {
|
|
199
|
+
console.log(`[GitHubModelsClient] Model ${modelName} failed (HTTP ${res.status}). Trying next candidate...`);
|
|
200
|
+
break; // break retry loop and move to next model
|
|
201
|
+
}
|
|
202
|
+
throw new Error(`HTTP ${res.status}: ${txt}`);
|
|
203
|
+
}
|
|
204
|
+
const data = await res.json();
|
|
205
|
+
const content = data?.choices?.[0]?.message?.content ?? "";
|
|
206
|
+
return String(content).trim();
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
clearTimeout(timeout);
|
|
210
|
+
if (err?.name === "AbortError") {
|
|
211
|
+
throw new Error("GitHub Models timed out after 60s");
|
|
212
|
+
}
|
|
213
|
+
// On network hiccups, allow a single quick retry if configured
|
|
214
|
+
if (attempt < maxRetries) {
|
|
215
|
+
console.log(`[GitHubModelsClient] Error: ${err?.message || err}. Retrying (${attempt + 1}/${maxRetries})...`);
|
|
216
|
+
attempt += 1;
|
|
217
|
+
await new Promise((r) => setTimeout(r, 1500));
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
// Move to next model if available
|
|
221
|
+
if (modelsToTry.length > 1) {
|
|
222
|
+
console.log(`[GitHubModelsClient] Model ${modelName} error after retries. Trying next candidate...`);
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
throw new Error(`GitHub Models request failed: ${err?.message || err}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
throw new Error("All GitHub Models candidates failed");
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Attempt to list available models from GitHub Models. Falls back to a curated set.
|
|
233
|
+
*/
|
|
234
|
+
async listModels() {
|
|
235
|
+
// Try several common endpoints; schema may vary
|
|
236
|
+
const candidates = [`${this.baseUrl}/models`, `${this.baseUrl}/v1/models`];
|
|
237
|
+
for (const url of candidates) {
|
|
238
|
+
try {
|
|
239
|
+
const res = await (0, node_fetch_1.default)(url, { headers: this.headers() });
|
|
240
|
+
if (!res.ok)
|
|
241
|
+
continue;
|
|
242
|
+
const data = await res.json();
|
|
243
|
+
// Normalize: support { data: [{ id }]} or { models: [string] }
|
|
244
|
+
if (Array.isArray(data?.data)) {
|
|
245
|
+
const ids = data.data
|
|
246
|
+
.map((m) => m?.id || m?.name)
|
|
247
|
+
.filter(Boolean);
|
|
248
|
+
if (ids.length)
|
|
249
|
+
return ids;
|
|
250
|
+
}
|
|
251
|
+
if (Array.isArray(data?.models)) {
|
|
252
|
+
const ids = data.models
|
|
253
|
+
.map((m) => (typeof m === "string" ? m : m?.id || m?.name))
|
|
254
|
+
.filter(Boolean);
|
|
255
|
+
if (ids.length)
|
|
256
|
+
return ids;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
// ignore and try next
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// Curated fallback set commonly available on GitHub Models
|
|
264
|
+
return [
|
|
265
|
+
"openai/gpt-5",
|
|
266
|
+
"deepseek/DeepSeek-V3-0324",
|
|
267
|
+
"meta/Llama-4-Scout-17B-16E-Instruct",
|
|
268
|
+
"mistral-ai/Codestral-2501",
|
|
269
|
+
"nvidia/llama-3.1-nemotron-70b-instruct",
|
|
270
|
+
];
|
|
271
|
+
}
|
|
272
|
+
async generateComponent(prompt, opts) {
|
|
273
|
+
return this.generateText(`Generate a single React component. Output only a code block.\n\n${prompt}`, opts);
|
|
274
|
+
}
|
|
275
|
+
async generateComponentRefinement(componentCode, prompt, opts) {
|
|
276
|
+
return this.generateText(`Refine the following React component with the prompt. Return only a single code block.\n\nComponent:\n\`\`\`tsx\n${componentCode}\n\`\`\`\n\nPrompt: ${prompt}`, opts);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
exports.GitHubModelsClient = GitHubModelsClient;
|
|
280
|
+
//# sourceMappingURL=githubModelsClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubModelsClient.js","sourceRoot":"","sources":["../../src/utils/githubModelsClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { OllamaClient } from "./ollamaClient";
|
|
2
2
|
import { HuggingFaceClient } from "./huggingFaceClient";
|
|
3
|
+
import { GitHubModelsClient } from "./githubModelsClient";
|
|
3
4
|
export interface AIProvider {
|
|
4
5
|
name: string;
|
|
5
6
|
priority: number;
|
|
6
|
-
client: OllamaClient | HuggingFaceClient;
|
|
7
|
+
client: OllamaClient | HuggingFaceClient | GitHubModelsClient;
|
|
7
8
|
isAvailable: () => Promise<boolean>;
|
|
8
9
|
}
|
|
9
10
|
export interface AIProviderConfig {
|
|
@@ -17,6 +18,7 @@ export interface AIProviderConfig {
|
|
|
17
18
|
};
|
|
18
19
|
}
|
|
19
20
|
export interface AIConfig {
|
|
21
|
+
github: AIProviderConfig;
|
|
20
22
|
huggingface: AIProviderConfig;
|
|
21
23
|
ollama: AIProviderConfig;
|
|
22
24
|
fallback: AIProviderConfig;
|
|
@@ -38,6 +40,14 @@ export declare class HybridAIClient {
|
|
|
38
40
|
* Get the best available provider
|
|
39
41
|
*/
|
|
40
42
|
private getBestProvider;
|
|
43
|
+
/**
|
|
44
|
+
* Expose current/next-best provider name for UX (e.g., spinner labels)
|
|
45
|
+
*/
|
|
46
|
+
getActiveProviderName(): Promise<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Best-effort model name for generic text generation per provider
|
|
49
|
+
*/
|
|
50
|
+
getActiveTextModelName(): Promise<string>;
|
|
41
51
|
/**
|
|
42
52
|
* Generate component refinement using the best available provider
|
|
43
53
|
*/
|
|
@@ -54,6 +64,13 @@ export declare class HybridAIClient {
|
|
|
54
64
|
provider: string;
|
|
55
65
|
explanation?: string;
|
|
56
66
|
}>;
|
|
67
|
+
/**
|
|
68
|
+
* Generate generic text (used for PRD, types, brand, etc.)
|
|
69
|
+
*/
|
|
70
|
+
generateText(prompt: string, options?: any): Promise<{
|
|
71
|
+
text: string;
|
|
72
|
+
provider: string;
|
|
73
|
+
}>;
|
|
57
74
|
/**
|
|
58
75
|
* Parse AI response to separate code from explanation
|
|
59
76
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybridAIClient.d.ts","sourceRoot":"","sources":["../../src/utils/hybridAIClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"hybridAIClient.d.ts","sourceRoot":"","sources":["../../src/utils/hybridAIClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI1D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;IAC9D,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,GAAG,EAAE;QACH,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,MAAM,CAAyB;;IAOvC;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;YACW,mBAAmB;IAiDjC;;OAEG;YACW,eAAe;IAqC7B;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAK9C;;OAEG;IACG,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IA6B/C;;OAEG;IACG,2BAA2B,CAC/B,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,GAAQ,GAChB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAgEpE;;OAEG;IACG,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,GAAQ,GAChB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAwDpE;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,GAAQ,GAChB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAyC9C;;OAEG;IACH,OAAO,CAAC,eAAe;IAsCvB;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAChC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAC9D;IAuBD;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAQ3C"}
|
|
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.HybridAIClient = void 0;
|
|
37
37
|
const ollamaClient_1 = require("./ollamaClient");
|
|
38
38
|
const huggingFaceClient_1 = require("./huggingFaceClient");
|
|
39
|
+
const githubModelsClient_1 = require("./githubModelsClient");
|
|
39
40
|
const fs = __importStar(require("fs"));
|
|
40
41
|
const path = __importStar(require("path"));
|
|
41
42
|
class HybridAIClient {
|
|
@@ -51,12 +52,12 @@ class HybridAIClient {
|
|
|
51
52
|
*/
|
|
52
53
|
loadConfig() {
|
|
53
54
|
try {
|
|
54
|
-
const configPath = path.join(__dirname,
|
|
55
|
-
const configData = fs.readFileSync(configPath,
|
|
55
|
+
const configPath = path.join(__dirname, "../config/ai-providers.json");
|
|
56
|
+
const configData = fs.readFileSync(configPath, "utf8");
|
|
56
57
|
this.config = JSON.parse(configData);
|
|
57
58
|
}
|
|
58
59
|
catch (error) {
|
|
59
|
-
console.log(
|
|
60
|
+
console.log("[HybridAIClient] Could not load config, using defaults");
|
|
60
61
|
this.config = null;
|
|
61
62
|
}
|
|
62
63
|
}
|
|
@@ -64,6 +65,18 @@ class HybridAIClient {
|
|
|
64
65
|
* Initialize available AI providers based on configuration
|
|
65
66
|
*/
|
|
66
67
|
async initializeProviders() {
|
|
68
|
+
// Add GitHub Models if enabled and token available
|
|
69
|
+
if (this.config?.github?.enabled) {
|
|
70
|
+
const githubClient = new githubModelsClient_1.GitHubModelsClient();
|
|
71
|
+
if (githubClient.hasApiKey()) {
|
|
72
|
+
this.providers.push({
|
|
73
|
+
name: "github",
|
|
74
|
+
priority: this.config.github.priority,
|
|
75
|
+
client: githubClient,
|
|
76
|
+
isAvailable: () => githubClient.checkConnection(),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
67
80
|
// Add Hugging Face if enabled and API key available
|
|
68
81
|
if (this.config?.huggingface.enabled) {
|
|
69
82
|
const huggingFaceClient = new huggingFaceClient_1.HuggingFaceClient();
|
|
@@ -88,19 +101,31 @@ class HybridAIClient {
|
|
|
88
101
|
}
|
|
89
102
|
// Sort by priority
|
|
90
103
|
this.providers.sort((a, b) => a.priority - b.priority);
|
|
91
|
-
console.log(`[HybridAIClient] Initialized ${this.providers.length} providers:`, this.providers
|
|
104
|
+
console.log(`[HybridAIClient] Initialized ${this.providers.length} providers:`, this.providers
|
|
105
|
+
.map((p) => `${p.name} (priority: ${p.priority})`)
|
|
106
|
+
.join(", "));
|
|
92
107
|
}
|
|
93
108
|
/**
|
|
94
109
|
* Get the best available provider
|
|
95
110
|
*/
|
|
96
111
|
async getBestProvider() {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
112
|
+
// Optional override via env
|
|
113
|
+
const preferredName = process.env.MYCONTEXT_PROVIDER || process.env.AI_PROVIDER || "";
|
|
114
|
+
if (preferredName) {
|
|
115
|
+
const preferred = this.providers.find((p) => p.name === preferredName);
|
|
116
|
+
if (preferred) {
|
|
117
|
+
try {
|
|
118
|
+
if (await preferred.isAvailable()) {
|
|
119
|
+
this.currentProvider = preferred;
|
|
120
|
+
return preferred;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.log(`[HybridAIClient] Preferred provider ${preferred.name} not available: ${error}`);
|
|
125
|
+
}
|
|
101
126
|
}
|
|
102
127
|
}
|
|
103
|
-
//
|
|
128
|
+
// Always choose the highest-priority available provider
|
|
104
129
|
for (const provider of this.providers) {
|
|
105
130
|
try {
|
|
106
131
|
const isAvailable = await provider.isAvailable();
|
|
@@ -111,11 +136,45 @@ class HybridAIClient {
|
|
|
111
136
|
}
|
|
112
137
|
catch (error) {
|
|
113
138
|
console.log(`[HybridAIClient] Provider ${provider.name} not available: ${error}`);
|
|
114
|
-
continue;
|
|
115
139
|
}
|
|
116
140
|
}
|
|
117
141
|
return null;
|
|
118
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Expose current/next-best provider name for UX (e.g., spinner labels)
|
|
145
|
+
*/
|
|
146
|
+
async getActiveProviderName() {
|
|
147
|
+
const provider = await this.getBestProvider();
|
|
148
|
+
return provider?.name ?? "unknown";
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Best-effort model name for generic text generation per provider
|
|
152
|
+
*/
|
|
153
|
+
async getActiveTextModelName() {
|
|
154
|
+
const provider = await this.getBestProvider();
|
|
155
|
+
if (!provider)
|
|
156
|
+
return "unknown";
|
|
157
|
+
if (provider.name === "github") {
|
|
158
|
+
// If user provided candidates via env, prefer the first
|
|
159
|
+
const envCandidates = process.env.MYCONTEXT_MODEL_CANDIDATES;
|
|
160
|
+
if (envCandidates) {
|
|
161
|
+
const first = envCandidates
|
|
162
|
+
.split(",")
|
|
163
|
+
.map((s) => s.trim())
|
|
164
|
+
.filter(Boolean)[0];
|
|
165
|
+
if (first)
|
|
166
|
+
return first;
|
|
167
|
+
}
|
|
168
|
+
return (this.config?.github?.models?.["component-generator"]?.name ||
|
|
169
|
+
"openai/gpt-5");
|
|
170
|
+
}
|
|
171
|
+
if (provider.name === "huggingface") {
|
|
172
|
+
return (this.config?.huggingface?.models?.["component-generator"]?.name ||
|
|
173
|
+
"mycontext/react-component-generator");
|
|
174
|
+
}
|
|
175
|
+
// ollama default
|
|
176
|
+
return "mycontext-react";
|
|
177
|
+
}
|
|
119
178
|
/**
|
|
120
179
|
* Generate component refinement using the best available provider
|
|
121
180
|
*/
|
|
@@ -127,7 +186,11 @@ class HybridAIClient {
|
|
|
127
186
|
try {
|
|
128
187
|
console.log(`[HybridAIClient] Using provider: ${provider.name}`);
|
|
129
188
|
let result;
|
|
130
|
-
if (provider.name === "
|
|
189
|
+
if (provider.name === "github") {
|
|
190
|
+
const githubClient = provider.client;
|
|
191
|
+
result = await githubClient.generateComponentRefinement(componentCode, prompt, options);
|
|
192
|
+
}
|
|
193
|
+
else if (provider.name === "huggingface") {
|
|
131
194
|
const huggingFaceClient = provider.client;
|
|
132
195
|
result = await huggingFaceClient.generateComponentRefinement(componentCode, prompt, options);
|
|
133
196
|
}
|
|
@@ -165,7 +228,11 @@ class HybridAIClient {
|
|
|
165
228
|
try {
|
|
166
229
|
console.log(`[HybridAIClient] Using provider: ${provider.name}`);
|
|
167
230
|
let result;
|
|
168
|
-
if (provider.name === "
|
|
231
|
+
if (provider.name === "github") {
|
|
232
|
+
const githubClient = provider.client;
|
|
233
|
+
result = await githubClient.generateComponent(prompt, options);
|
|
234
|
+
}
|
|
235
|
+
else if (provider.name === "huggingface") {
|
|
169
236
|
const huggingFaceClient = provider.client;
|
|
170
237
|
result = await huggingFaceClient.generateComponent(prompt, options);
|
|
171
238
|
}
|
|
@@ -192,6 +259,40 @@ class HybridAIClient {
|
|
|
192
259
|
throw error;
|
|
193
260
|
}
|
|
194
261
|
}
|
|
262
|
+
/**
|
|
263
|
+
* Generate generic text (used for PRD, types, brand, etc.)
|
|
264
|
+
*/
|
|
265
|
+
async generateText(prompt, options = {}) {
|
|
266
|
+
const provider = await this.getBestProvider();
|
|
267
|
+
if (!provider) {
|
|
268
|
+
throw new Error("No AI providers available. Please configure GitHub token or start Ollama.");
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
let text;
|
|
272
|
+
if (provider.name === "github") {
|
|
273
|
+
const githubClient = provider.client;
|
|
274
|
+
text = await githubClient.generateText(prompt, options);
|
|
275
|
+
}
|
|
276
|
+
else if (provider.name === "huggingface") {
|
|
277
|
+
const hfClient = provider.client;
|
|
278
|
+
text = await hfClient.generateComponent(prompt, options);
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
const olClient = provider.client;
|
|
282
|
+
text = await olClient.generateComponent(prompt, "mycontext-react");
|
|
283
|
+
}
|
|
284
|
+
return { text, provider: provider.name };
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
console.log(`[HybridAIClient] Provider ${provider.name} failed: ${error.message}`);
|
|
288
|
+
const nextProvider = this.providers.find((p) => p.priority > provider.priority);
|
|
289
|
+
if (nextProvider) {
|
|
290
|
+
console.log(`[HybridAIClient] Trying next provider: ${nextProvider.name}`);
|
|
291
|
+
return this.generateText(prompt, options);
|
|
292
|
+
}
|
|
293
|
+
throw error;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
195
296
|
/**
|
|
196
297
|
* Parse AI response to separate code from explanation
|
|
197
298
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybridAIClient.js","sourceRoot":"","sources":["../../src/utils/hybridAIClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA8C;AAC9C,2DAAwD;AACxD,uCAAyB;AACzB,2CAA6B;
|
|
1
|
+
{"version":3,"file":"hybridAIClient.js","sourceRoot":"","sources":["../../src/utils/hybridAIClient.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/spinner.d.ts
CHANGED
|
@@ -6,11 +6,8 @@ export declare class EnhancedSpinner {
|
|
|
6
6
|
private interval;
|
|
7
7
|
private startTime;
|
|
8
8
|
private lastLineLength;
|
|
9
|
-
private encouragementMessages;
|
|
10
|
-
private lastEncouragementTime;
|
|
11
9
|
constructor(text: string);
|
|
12
10
|
private clearLine;
|
|
13
|
-
private getEncouragementMessage;
|
|
14
11
|
private updateSpinner;
|
|
15
12
|
start(): this;
|
|
16
13
|
success(options?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAEA,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,cAAc,CAAS;
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAEA,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,cAAc,CAAS;gBAGnB,IAAI,EAAE,MAAM;IAUxB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,aAAa;IAkBrB,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,IAAI;IAY9C,KAAK,CAAC,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,IAAI;IAU5C,IAAI,CAAC,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,IAAI;IAY3C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAI5B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAIzB,IAAI,IAAI,IAAI;CAQb"}
|