mycontext-cli 2.0.27 → 2.0.29
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 +71 -342
- package/dist/agents/implementations/CodeGenSubAgent.d.ts.map +1 -1
- package/dist/agents/implementations/CodeGenSubAgent.js +67 -14
- package/dist/agents/implementations/CodeGenSubAgent.js.map +1 -1
- package/dist/agents/implementations/DesignPipelineAgent.d.ts +80 -0
- package/dist/agents/implementations/DesignPipelineAgent.d.ts.map +1 -0
- package/dist/agents/implementations/DesignPipelineAgent.js +1406 -0
- package/dist/agents/implementations/DesignPipelineAgent.js.map +1 -0
- package/dist/agents/implementations/FeatureAssemblyAgent.d.ts +67 -0
- package/dist/agents/implementations/FeatureAssemblyAgent.d.ts.map +1 -0
- package/dist/agents/implementations/FeatureAssemblyAgent.js +564 -0
- package/dist/agents/implementations/FeatureAssemblyAgent.js.map +1 -0
- package/dist/agents/implementations/PromptConstructorAgent.d.ts +10 -0
- package/dist/agents/implementations/PromptConstructorAgent.d.ts.map +1 -1
- package/dist/agents/implementations/PromptConstructorAgent.js +172 -12
- package/dist/agents/implementations/PromptConstructorAgent.js.map +1 -1
- package/dist/agents/implementations/RoleBasedGenerator.d.ts +52 -0
- package/dist/agents/implementations/RoleBasedGenerator.d.ts.map +1 -0
- package/dist/agents/implementations/RoleBasedGenerator.js +370 -0
- package/dist/agents/implementations/RoleBasedGenerator.js.map +1 -0
- package/dist/cli.js +111 -56
- package/dist/cli.js.map +1 -1
- package/dist/clients/ClaudeSDKClient.d.ts +48 -0
- package/dist/clients/ClaudeSDKClient.d.ts.map +1 -0
- package/dist/clients/ClaudeSDKClient.js +158 -0
- package/dist/clients/ClaudeSDKClient.js.map +1 -0
- package/dist/clients/MyContextAIClient.d.ts +73 -0
- package/dist/clients/MyContextAIClient.d.ts.map +1 -0
- package/dist/clients/MyContextAIClient.js +280 -0
- package/dist/clients/MyContextAIClient.js.map +1 -0
- package/dist/clients/ProviderChain.d.ts +87 -0
- package/dist/clients/ProviderChain.d.ts.map +1 -0
- package/dist/clients/ProviderChain.js +246 -0
- package/dist/clients/ProviderChain.js.map +1 -0
- package/dist/clients/XAIClient.d.ts +48 -0
- package/dist/clients/XAIClient.d.ts.map +1 -0
- package/dist/clients/XAIClient.js +152 -0
- package/dist/clients/XAIClient.js.map +1 -0
- package/dist/commands/assemble-features.d.ts +40 -0
- package/dist/commands/assemble-features.d.ts.map +1 -0
- package/dist/commands/assemble-features.js +383 -0
- package/dist/commands/assemble-features.js.map +1 -0
- package/dist/commands/clone-starter.d.ts +32 -0
- package/dist/commands/clone-starter.d.ts.map +1 -0
- package/dist/commands/clone-starter.js +218 -0
- package/dist/commands/clone-starter.js.map +1 -0
- package/dist/commands/design-analyze.d.ts +46 -0
- package/dist/commands/design-analyze.d.ts.map +1 -0
- package/dist/commands/design-analyze.js +232 -0
- package/dist/commands/design-analyze.js.map +1 -0
- package/dist/commands/generate-components.d.ts +11 -0
- package/dist/commands/generate-components.d.ts.map +1 -1
- package/dist/commands/generate-components.js +342 -12
- package/dist/commands/generate-components.js.map +1 -1
- package/dist/commands/generate-context-files.d.ts +9 -0
- package/dist/commands/generate-context-files.d.ts.map +1 -1
- package/dist/commands/generate-context-files.js +57 -0
- package/dist/commands/generate-context-files.js.map +1 -1
- package/dist/commands/generate.d.ts +5 -0
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +109 -2
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +32 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/preview-components.d.ts +12 -0
- package/dist/commands/preview-components.d.ts.map +1 -0
- package/dist/commands/preview-components.js +122 -0
- package/dist/commands/preview-components.js.map +1 -0
- package/dist/commands/refine-component.d.ts +43 -0
- package/dist/commands/refine-component.d.ts.map +1 -0
- package/dist/commands/refine-component.js +313 -0
- package/dist/commands/refine-component.js.map +1 -0
- package/dist/commands/review-context.d.ts +47 -0
- package/dist/commands/review-context.d.ts.map +1 -0
- package/dist/commands/review-context.js +335 -0
- package/dist/commands/review-context.js.map +1 -0
- package/dist/commands/setup-complete.d.ts.map +1 -1
- package/dist/commands/setup-complete.js +38 -2
- package/dist/commands/setup-complete.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +86 -7
- package/dist/commands/workflow.js.map +1 -1
- package/dist/config/intent-dictionary.json +3700 -0
- package/dist/package.json +12 -1
- package/dist/services/ContextValidator.d.ts +99 -0
- package/dist/services/ContextValidator.d.ts.map +1 -0
- package/dist/services/ContextValidator.js +433 -0
- package/dist/services/ContextValidator.js.map +1 -0
- package/dist/services/IntentEnricher.d.ts +61 -0
- package/dist/services/IntentEnricher.d.ts.map +1 -0
- package/dist/services/IntentEnricher.js +318 -0
- package/dist/services/IntentEnricher.js.map +1 -0
- package/dist/services/IntentValidator.d.ts +114 -0
- package/dist/services/IntentValidator.d.ts.map +1 -0
- package/dist/services/IntentValidator.js +680 -0
- package/dist/services/IntentValidator.js.map +1 -0
- package/dist/services/MutationLogger.d.ts +54 -0
- package/dist/services/MutationLogger.d.ts.map +1 -0
- package/dist/services/MutationLogger.js +164 -0
- package/dist/services/MutationLogger.js.map +1 -0
- package/dist/services/RegressionRunner.d.ts +49 -0
- package/dist/services/RegressionRunner.d.ts.map +1 -0
- package/dist/services/RegressionRunner.js +285 -0
- package/dist/services/RegressionRunner.js.map +1 -0
- package/dist/services/TriggerLogger.d.ts +101 -0
- package/dist/services/TriggerLogger.d.ts.map +1 -0
- package/dist/services/TriggerLogger.js +263 -0
- package/dist/services/TriggerLogger.js.map +1 -0
- package/dist/types/design-pipeline.d.ts +300 -0
- package/dist/types/design-pipeline.d.ts.map +1 -0
- package/dist/types/design-pipeline.js +9 -0
- package/dist/types/design-pipeline.js.map +1 -0
- package/dist/types/feature-bundle.d.ts +239 -0
- package/dist/types/feature-bundle.d.ts.map +1 -0
- package/dist/types/feature-bundle.js +9 -0
- package/dist/types/feature-bundle.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/intent-dictionary.d.ts +525 -0
- package/dist/types/intent-dictionary.d.ts.map +1 -0
- package/dist/types/intent-dictionary.js +11 -0
- package/dist/types/intent-dictionary.js.map +1 -0
- package/dist/types/role-permissions.d.ts +167 -0
- package/dist/types/role-permissions.d.ts.map +1 -0
- package/dist/types/role-permissions.js +9 -0
- package/dist/types/role-permissions.js.map +1 -0
- package/dist/utils/contextEnricher.d.ts +41 -0
- package/dist/utils/contextEnricher.d.ts.map +1 -0
- package/dist/utils/contextEnricher.js +327 -0
- package/dist/utils/contextEnricher.js.map +1 -0
- package/dist/utils/designFallbacks.d.ts +48 -0
- package/dist/utils/designFallbacks.d.ts.map +1 -0
- package/dist/utils/designFallbacks.js +885 -0
- package/dist/utils/designFallbacks.js.map +1 -0
- package/dist/utils/designManifestManager.d.ts +89 -0
- package/dist/utils/designManifestManager.d.ts.map +1 -0
- package/dist/utils/designManifestManager.js +533 -0
- package/dist/utils/designManifestManager.js.map +1 -0
- package/dist/utils/designPipelineStateManager.d.ts +63 -0
- package/dist/utils/designPipelineStateManager.d.ts.map +1 -0
- package/dist/utils/designPipelineStateManager.js +174 -0
- package/dist/utils/designPipelineStateManager.js.map +1 -0
- package/dist/utils/envExampleGenerator.d.ts.map +1 -1
- package/dist/utils/envExampleGenerator.js +41 -171
- package/dist/utils/envExampleGenerator.js.map +1 -1
- package/dist/utils/featureBundleManager.d.ts +90 -0
- package/dist/utils/featureBundleManager.d.ts.map +1 -0
- package/dist/utils/featureBundleManager.js +340 -0
- package/dist/utils/featureBundleManager.js.map +1 -0
- package/dist/utils/githubCloner.d.ts +93 -0
- package/dist/utils/githubCloner.d.ts.map +1 -0
- package/dist/utils/githubCloner.js +305 -0
- package/dist/utils/githubCloner.js.map +1 -0
- package/dist/utils/hybridAIClient.d.ts.map +1 -1
- package/dist/utils/hybridAIClient.js +21 -0
- package/dist/utils/hybridAIClient.js.map +1 -1
- package/dist/utils/openRouterClient.d.ts +10 -0
- package/dist/utils/openRouterClient.d.ts.map +1 -0
- package/dist/utils/openRouterClient.js +61 -0
- package/dist/utils/openRouterClient.js.map +1 -0
- package/dist/utils/rolePermissionMapper.d.ts +89 -0
- package/dist/utils/rolePermissionMapper.d.ts.map +1 -0
- package/dist/utils/rolePermissionMapper.js +337 -0
- package/dist/utils/rolePermissionMapper.js.map +1 -0
- package/dist/utils/unifiedDesignContextLoader.d.ts +76 -0
- package/dist/utils/unifiedDesignContextLoader.d.ts.map +1 -0
- package/dist/utils/unifiedDesignContextLoader.js +344 -0
- package/dist/utils/unifiedDesignContextLoader.js.map +1 -0
- package/package.json +12 -1
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MyContextAIClient = void 0;
|
|
7
|
+
const openai_1 = __importDefault(require("openai"));
|
|
8
|
+
/**
|
|
9
|
+
* MyContext AI Client - Fine-tuned GPT-4o Mini for component generation
|
|
10
|
+
*
|
|
11
|
+
* This client uses our proprietary fine-tuned model trained on the Intent Dictionary System
|
|
12
|
+
* to achieve 95%+ accuracy in generating shadcn/ui components from natural language.
|
|
13
|
+
*
|
|
14
|
+
* **Usage Options**:
|
|
15
|
+
* 1. Hosted API (coming soon): Set MYCONTEXT_API_KEY for api.mycontext.dev
|
|
16
|
+
* 2. Self-hosted fine-tuned model: Train your own using fine-tuning-strategy.md
|
|
17
|
+
* 3. Fallback to Claude SDK or XAI: Use BYOK mode with your provider keys
|
|
18
|
+
*
|
|
19
|
+
* **Business Model**: Open source CLI, optional paid hosted API
|
|
20
|
+
*/
|
|
21
|
+
class MyContextAIClient {
|
|
22
|
+
constructor(modelId) {
|
|
23
|
+
this.clientType = "direct-api";
|
|
24
|
+
this.supportsTools = false;
|
|
25
|
+
this.supportsStreaming = false;
|
|
26
|
+
this.openai = null;
|
|
27
|
+
this.apiKey = null;
|
|
28
|
+
this.isHostedAPI = false; // Future: detect api.mycontext.dev vs self-hosted
|
|
29
|
+
// Check for MyContext AI API key (future hosted service)
|
|
30
|
+
const myContextApiKey = process.env.MYCONTEXT_API_KEY;
|
|
31
|
+
if (myContextApiKey) {
|
|
32
|
+
// Future: Route to api.mycontext.dev
|
|
33
|
+
this.apiKey = myContextApiKey;
|
|
34
|
+
this.isHostedAPI = true;
|
|
35
|
+
this.modelId = "mycontext-ai"; // Hosted model alias
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Self-hosted fine-tuned model
|
|
39
|
+
this.modelId =
|
|
40
|
+
modelId ||
|
|
41
|
+
process.env.MYCONTEXT_MODEL_ID ||
|
|
42
|
+
"ft:gpt-4o-mini-2024-07-18:mycontext:intent-dict:abc123";
|
|
43
|
+
this.apiKey = process.env.OPENAI_API_KEY || null;
|
|
44
|
+
this.isHostedAPI = false;
|
|
45
|
+
}
|
|
46
|
+
if (this.apiKey) {
|
|
47
|
+
this.openai = new openai_1.default({
|
|
48
|
+
apiKey: this.apiKey,
|
|
49
|
+
// Future: baseURL for hosted API
|
|
50
|
+
...(this.isHostedAPI && { baseURL: "https://api.mycontext.dev/v1" }),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check if API key is available
|
|
56
|
+
*/
|
|
57
|
+
hasApiKey() {
|
|
58
|
+
return !!this.apiKey;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Set API key for OpenAI client
|
|
62
|
+
*/
|
|
63
|
+
setApiKey(apiKey) {
|
|
64
|
+
this.apiKey = apiKey;
|
|
65
|
+
this.openai = new openai_1.default({
|
|
66
|
+
apiKey: this.apiKey,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check connection to OpenAI API
|
|
71
|
+
*/
|
|
72
|
+
async checkConnection() {
|
|
73
|
+
if (!this.apiKey) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
await this.openai?.models.list();
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.warn("MyContext AI connection check failed:", error);
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Generate text using MyContext AI
|
|
87
|
+
*/
|
|
88
|
+
async generateText(prompt, options = {}) {
|
|
89
|
+
if (!this.apiKey) {
|
|
90
|
+
throw new Error("OpenAI API key not configured for MyContext AI");
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const response = await this.openai.chat.completions.create({
|
|
94
|
+
model: this.modelId,
|
|
95
|
+
messages: [
|
|
96
|
+
{
|
|
97
|
+
role: "system",
|
|
98
|
+
content: this.buildSystemPrompt(),
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
role: "user",
|
|
102
|
+
content: prompt,
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
temperature: options.temperature || 0.1, // Low temperature for consistency
|
|
106
|
+
max_tokens: options.maxTokens || 4000,
|
|
107
|
+
});
|
|
108
|
+
return response.choices[0]?.message?.content || "";
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
throw new Error(`MyContext AI generation failed: ${error}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Generate React component using MyContext AI with Intent Dictionary context
|
|
116
|
+
*/
|
|
117
|
+
async generateComponent(prompt, context, options = {}) {
|
|
118
|
+
if (!this.apiKey) {
|
|
119
|
+
throw new Error("OpenAI API key not configured for MyContext AI");
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
// Build enriched context with Intent Dictionary
|
|
123
|
+
const enrichedContext = this.buildEnrichedContext(context);
|
|
124
|
+
const response = await this.openai.chat.completions.create({
|
|
125
|
+
model: this.modelId,
|
|
126
|
+
messages: [
|
|
127
|
+
{
|
|
128
|
+
role: "system",
|
|
129
|
+
content: this.buildComponentSystemPrompt(enrichedContext),
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
role: "user",
|
|
133
|
+
content: prompt,
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
temperature: options.temperature || 0.1,
|
|
137
|
+
max_tokens: options.maxTokens || 4000,
|
|
138
|
+
});
|
|
139
|
+
return response.choices[0]?.message?.content || "";
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
throw new Error(`MyContext AI component generation failed: ${error}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Generate component refinement using MyContext AI
|
|
147
|
+
*/
|
|
148
|
+
async generateComponentRefinement(componentCode, prompt, context, options = {}) {
|
|
149
|
+
if (!this.apiKey) {
|
|
150
|
+
throw new Error("OpenAI API key not configured for MyContext AI");
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
const enrichedContext = this.buildEnrichedContext(context);
|
|
154
|
+
const response = await this.openai.chat.completions.create({
|
|
155
|
+
model: this.modelId,
|
|
156
|
+
messages: [
|
|
157
|
+
{
|
|
158
|
+
role: "system",
|
|
159
|
+
content: this.buildRefinementSystemPrompt(enrichedContext),
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
role: "user",
|
|
163
|
+
content: `Component to refine:\n\`\`\`tsx\n${componentCode}\n\`\`\n\nRefinement request: ${prompt}`,
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
temperature: options.temperature || 0.1,
|
|
167
|
+
max_tokens: options.maxTokens || 4000,
|
|
168
|
+
});
|
|
169
|
+
return response.choices[0]?.message?.content || "";
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
throw new Error(`MyContext AI refinement failed: ${error}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* List available models (returns our fine-tuned model)
|
|
177
|
+
*/
|
|
178
|
+
async listModels() {
|
|
179
|
+
return [this.modelId];
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Build system prompt for general text generation
|
|
183
|
+
*/
|
|
184
|
+
buildSystemPrompt() {
|
|
185
|
+
return `You are MyContext AI, a specialized AI model fine-tuned for generating high-quality React components and UI code.
|
|
186
|
+
|
|
187
|
+
Key capabilities:
|
|
188
|
+
- Generate production-ready React components with TypeScript
|
|
189
|
+
- Use shadcn/ui components and patterns
|
|
190
|
+
- Include proper accessibility attributes
|
|
191
|
+
- Follow modern React best practices
|
|
192
|
+
- Provide complete, runnable code
|
|
193
|
+
|
|
194
|
+
Always provide complete, production-ready code with proper imports and TypeScript types.`;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Build system prompt for component generation with Intent Dictionary context
|
|
198
|
+
*/
|
|
199
|
+
buildComponentSystemPrompt(enrichedContext) {
|
|
200
|
+
const intentContext = enrichedContext.enriched_intents
|
|
201
|
+
?.map((intent) => `- ${intent.canonical_intent}: ${intent.shadcn_components.join(", ")}`)
|
|
202
|
+
.join("\n") || "";
|
|
203
|
+
const validationReport = enrichedContext.intent_validation_report;
|
|
204
|
+
const confidenceScore = validationReport
|
|
205
|
+
? (validationReport.confidence_score * 100).toFixed(0)
|
|
206
|
+
: "N/A";
|
|
207
|
+
return `You are MyContext AI, fine-tuned for 95%+ accurate shadcn/ui component generation using the Intent Dictionary System.
|
|
208
|
+
|
|
209
|
+
INTENT DICTIONARY CONTEXT:
|
|
210
|
+
${intentContext}
|
|
211
|
+
|
|
212
|
+
VALIDATION REPORT:
|
|
213
|
+
- Confidence Score: ${confidenceScore}%
|
|
214
|
+
- Validated Intents: ${validationReport?.validated_intents.length || 0}
|
|
215
|
+
- Ambiguous Intents: ${validationReport?.ambiguous_intents.length || 0}
|
|
216
|
+
|
|
217
|
+
GENERATION RULES:
|
|
218
|
+
1. Generate complete, production-ready React components
|
|
219
|
+
2. Use only shadcn/ui components from the intent dictionary
|
|
220
|
+
3. Include proper TypeScript types and interfaces
|
|
221
|
+
4. Add accessibility attributes (ARIA labels, roles, etc.)
|
|
222
|
+
5. Follow exact component patterns specified in intent mappings
|
|
223
|
+
6. Never hallucinate components or props not in the dictionary
|
|
224
|
+
7. Include proper imports and exports
|
|
225
|
+
8. Use modern React patterns (hooks, functional components)
|
|
226
|
+
9. Add proper error handling and loading states
|
|
227
|
+
10. Ensure responsive design with Tailwind CSS
|
|
228
|
+
|
|
229
|
+
OUTPUT FORMAT:
|
|
230
|
+
- Complete React component with TypeScript
|
|
231
|
+
- Proper imports from shadcn/ui
|
|
232
|
+
- Interface definitions for props
|
|
233
|
+
- Accessibility attributes
|
|
234
|
+
- Responsive design classes
|
|
235
|
+
- Error handling and loading states
|
|
236
|
+
|
|
237
|
+
Never generate incomplete or placeholder code. Always provide production-ready components.`;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Build system prompt for component refinement
|
|
241
|
+
*/
|
|
242
|
+
buildRefinementSystemPrompt(enrichedContext) {
|
|
243
|
+
return `You are MyContext AI, specialized in refining and improving React components.
|
|
244
|
+
|
|
245
|
+
REFINEMENT RULES:
|
|
246
|
+
1. Maintain existing functionality while implementing requested changes
|
|
247
|
+
2. Preserve TypeScript types and interfaces
|
|
248
|
+
3. Keep accessibility attributes intact
|
|
249
|
+
4. Follow shadcn/ui patterns and conventions
|
|
250
|
+
5. Ensure code remains production-ready
|
|
251
|
+
6. Add proper error handling if needed
|
|
252
|
+
7. Maintain responsive design
|
|
253
|
+
8. Preserve existing imports and structure
|
|
254
|
+
|
|
255
|
+
Always provide the complete refined component, not just the changes.`;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Build enriched context from agent context
|
|
259
|
+
*/
|
|
260
|
+
buildEnrichedContext(context) {
|
|
261
|
+
return {
|
|
262
|
+
technical_context: {
|
|
263
|
+
prd: context?.prd || "",
|
|
264
|
+
types: context?.types || "",
|
|
265
|
+
brand: context?.brand || "",
|
|
266
|
+
},
|
|
267
|
+
enriched_intents: [],
|
|
268
|
+
intent_validation_report: undefined,
|
|
269
|
+
intent_clarifications: [],
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Cleanup resources
|
|
274
|
+
*/
|
|
275
|
+
async cleanup() {
|
|
276
|
+
// No cleanup needed for OpenAI client
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
exports.MyContextAIClient = MyContextAIClient;
|
|
280
|
+
//# sourceMappingURL=MyContextAIClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MyContextAIClient.js","sourceRoot":"","sources":["../../src/clients/MyContextAIClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { AIClient, AIClientOptions, AgentContext } from "../interfaces/AIClient";
|
|
2
|
+
import { MyContextAIClient } from "./MyContextAIClient";
|
|
3
|
+
/**
|
|
4
|
+
* Simplified Provider Chain for MyContext CLI
|
|
5
|
+
*
|
|
6
|
+
* Primary: MyContext AI (Fine-tuned GPT-4o Mini)
|
|
7
|
+
* Fallback 1: Claude SDK
|
|
8
|
+
* Fallback 2: XAI (Grok)
|
|
9
|
+
*
|
|
10
|
+
* This replaces the complex HybridAIClient with a streamlined approach
|
|
11
|
+
* focused on our specialized fine-tuned model.
|
|
12
|
+
*/
|
|
13
|
+
export declare class ProviderChain implements AIClient {
|
|
14
|
+
readonly clientType: "hybrid";
|
|
15
|
+
readonly supportsTools = true;
|
|
16
|
+
readonly supportsStreaming = false;
|
|
17
|
+
private providers;
|
|
18
|
+
private myContextAI;
|
|
19
|
+
private claudeSDK;
|
|
20
|
+
private xai;
|
|
21
|
+
constructor();
|
|
22
|
+
/**
|
|
23
|
+
* Check if any provider has API key configured
|
|
24
|
+
*/
|
|
25
|
+
hasApiKey(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Set API key for all providers
|
|
28
|
+
*/
|
|
29
|
+
setApiKey(apiKey: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Check connection to any available provider
|
|
32
|
+
*/
|
|
33
|
+
checkConnection(): Promise<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* Generate text using the first available provider
|
|
36
|
+
*/
|
|
37
|
+
generateText(prompt: string, options?: AIClientOptions): Promise<string>;
|
|
38
|
+
/**
|
|
39
|
+
* Generate React component using MyContext AI with fallbacks
|
|
40
|
+
*/
|
|
41
|
+
generateComponent(prompt: string, context?: AgentContext, options?: AIClientOptions): Promise<string>;
|
|
42
|
+
/**
|
|
43
|
+
* Generate component refinement using the first available provider
|
|
44
|
+
*/
|
|
45
|
+
generateComponentRefinement(componentCode: string, prompt: string, context?: AgentContext, options?: AIClientOptions): Promise<string>;
|
|
46
|
+
/**
|
|
47
|
+
* List models from all providers
|
|
48
|
+
*/
|
|
49
|
+
listModels(): Promise<string[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Get the primary provider (MyContext AI)
|
|
52
|
+
*/
|
|
53
|
+
getPrimaryProvider(): MyContextAIClient;
|
|
54
|
+
/**
|
|
55
|
+
* Get provider by name
|
|
56
|
+
*/
|
|
57
|
+
getProvider(name: string): AIClient | null;
|
|
58
|
+
/**
|
|
59
|
+
* Get provider status
|
|
60
|
+
*/
|
|
61
|
+
getProviderStatus(): Array<{
|
|
62
|
+
name: string;
|
|
63
|
+
hasKey: boolean;
|
|
64
|
+
connected: boolean;
|
|
65
|
+
}>;
|
|
66
|
+
/**
|
|
67
|
+
* Check all provider connections
|
|
68
|
+
*/
|
|
69
|
+
checkAllConnections(): Promise<Array<{
|
|
70
|
+
name: string;
|
|
71
|
+
hasKey: boolean;
|
|
72
|
+
connected: boolean;
|
|
73
|
+
}>>;
|
|
74
|
+
/**
|
|
75
|
+
* Cleanup all providers
|
|
76
|
+
*/
|
|
77
|
+
cleanup(): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get the global provider chain instance
|
|
81
|
+
*/
|
|
82
|
+
export declare function getProviderChain(): ProviderChain;
|
|
83
|
+
/**
|
|
84
|
+
* Reset the global provider chain instance
|
|
85
|
+
*/
|
|
86
|
+
export declare function resetProviderChain(): void;
|
|
87
|
+
//# sourceMappingURL=ProviderChain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProviderChain.d.ts","sourceRoot":"","sources":["../../src/clients/ProviderChain.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,eAAe,EACf,YAAY,EACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAKxD;;;;;;;;;GASG;AACH,qBAAa,aAAc,YAAW,QAAQ;IAC5C,QAAQ,CAAC,UAAU,EAAG,QAAQ,CAAU;IACxC,QAAQ,CAAC,aAAa,QAAQ;IAC9B,QAAQ,CAAC,iBAAiB,SAAS;IAEnC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,GAAG,CAAY;;IAevB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ/B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAkBzC;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC;IAsBlB;;OAEG;IACG,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,YAAY,EACtB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC;IA4BlB;;OAEG;IACG,2BAA2B,CAC/B,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,YAAY,EACtB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC;IA2BlB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAqBrC;;OAEG;IACH,kBAAkB,IAAI,iBAAiB;IAIvC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAgB1C;;OAEG;IACH,iBAAiB,IAAI,KAAK,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IAQF;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAClC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAC7D;IAyBD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB/B;AAOD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProviderChain = void 0;
|
|
4
|
+
exports.getProviderChain = getProviderChain;
|
|
5
|
+
exports.resetProviderChain = resetProviderChain;
|
|
6
|
+
const MyContextAIClient_1 = require("./MyContextAIClient");
|
|
7
|
+
const ClaudeSDKClient_1 = require("./ClaudeSDKClient");
|
|
8
|
+
const XAIClient_1 = require("./XAIClient");
|
|
9
|
+
/**
|
|
10
|
+
* Simplified Provider Chain for MyContext CLI
|
|
11
|
+
*
|
|
12
|
+
* Primary: MyContext AI (Fine-tuned GPT-4o Mini)
|
|
13
|
+
* Fallback 1: Claude SDK
|
|
14
|
+
* Fallback 2: XAI (Grok)
|
|
15
|
+
*
|
|
16
|
+
* This replaces the complex HybridAIClient with a streamlined approach
|
|
17
|
+
* focused on our specialized fine-tuned model.
|
|
18
|
+
*/
|
|
19
|
+
class ProviderChain {
|
|
20
|
+
constructor() {
|
|
21
|
+
this.clientType = "hybrid";
|
|
22
|
+
this.supportsTools = true;
|
|
23
|
+
this.supportsStreaming = false;
|
|
24
|
+
// Initialize providers in order of preference
|
|
25
|
+
this.myContextAI = new MyContextAIClient_1.MyContextAIClient();
|
|
26
|
+
this.claudeSDK = new ClaudeSDKClient_1.ClaudeSDKClient();
|
|
27
|
+
this.xai = new XAIClient_1.XAIClient();
|
|
28
|
+
this.providers = [
|
|
29
|
+
this.myContextAI, // Primary: Fine-tuned model
|
|
30
|
+
this.claudeSDK, // Fallback 1: Claude SDK
|
|
31
|
+
this.xai, // Fallback 2: XAI (Grok)
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if any provider has API key configured
|
|
36
|
+
*/
|
|
37
|
+
hasApiKey() {
|
|
38
|
+
return this.providers.some((provider) => provider.hasApiKey());
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Set API key for all providers
|
|
42
|
+
*/
|
|
43
|
+
setApiKey(apiKey) {
|
|
44
|
+
this.providers.forEach((provider) => {
|
|
45
|
+
if (provider.setApiKey) {
|
|
46
|
+
provider.setApiKey(apiKey);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check connection to any available provider
|
|
52
|
+
*/
|
|
53
|
+
async checkConnection() {
|
|
54
|
+
for (const provider of this.providers) {
|
|
55
|
+
try {
|
|
56
|
+
const isConnected = await provider.checkConnection();
|
|
57
|
+
if (isConnected) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.warn(`Provider ${provider.constructor.name} connection failed:`, error);
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Generate text using the first available provider
|
|
70
|
+
*/
|
|
71
|
+
async generateText(prompt, options = {}) {
|
|
72
|
+
for (const provider of this.providers) {
|
|
73
|
+
try {
|
|
74
|
+
if (!provider.hasApiKey()) {
|
|
75
|
+
console.warn(`Provider ${provider.constructor.name} has no API key, skipping`);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const result = await provider.generateText(prompt, options);
|
|
79
|
+
console.log(`✅ Generated text using ${provider.constructor.name}`);
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.warn(`❌ Provider ${provider.constructor.name} failed:`, error);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
throw new Error("All AI providers failed to generate text");
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Generate React component using MyContext AI with fallbacks
|
|
91
|
+
*/
|
|
92
|
+
async generateComponent(prompt, context, options = {}) {
|
|
93
|
+
for (const provider of this.providers) {
|
|
94
|
+
try {
|
|
95
|
+
if (!provider.hasApiKey()) {
|
|
96
|
+
console.warn(`Provider ${provider.constructor.name} has no API key, skipping`);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const result = await provider.generateComponent(prompt, context, options);
|
|
100
|
+
console.log(`✅ Generated component using ${provider.constructor.name}`);
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.warn(`❌ Provider ${provider.constructor.name} failed:`, error);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
throw new Error("All AI providers failed to generate component");
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Generate component refinement using the first available provider
|
|
112
|
+
*/
|
|
113
|
+
async generateComponentRefinement(componentCode, prompt, context, options = {}) {
|
|
114
|
+
for (const provider of this.providers) {
|
|
115
|
+
try {
|
|
116
|
+
if (!provider.hasApiKey()) {
|
|
117
|
+
console.warn(`Provider ${provider.constructor.name} has no API key, skipping`);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
const result = await provider.generateComponentRefinement(componentCode, prompt, context, options);
|
|
121
|
+
console.log(`✅ Refined component using ${provider.constructor.name}`);
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.warn(`❌ Provider ${provider.constructor.name} failed:`, error);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
throw new Error("All AI providers failed to refine component");
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* List models from all providers
|
|
133
|
+
*/
|
|
134
|
+
async listModels() {
|
|
135
|
+
const allModels = [];
|
|
136
|
+
for (const provider of this.providers) {
|
|
137
|
+
try {
|
|
138
|
+
if (provider.hasApiKey()) {
|
|
139
|
+
const models = await provider.listModels();
|
|
140
|
+
allModels.push(...models);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
console.warn(`Failed to list models from ${provider.constructor.name}:`, error);
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return [...new Set(allModels)]; // Remove duplicates
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get the primary provider (MyContext AI)
|
|
152
|
+
*/
|
|
153
|
+
getPrimaryProvider() {
|
|
154
|
+
return this.myContextAI;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Get provider by name
|
|
158
|
+
*/
|
|
159
|
+
getProvider(name) {
|
|
160
|
+
switch (name.toLowerCase()) {
|
|
161
|
+
case "mycontext":
|
|
162
|
+
case "mycontext-ai":
|
|
163
|
+
return this.myContextAI;
|
|
164
|
+
case "claude":
|
|
165
|
+
case "claude-sdk":
|
|
166
|
+
return this.claudeSDK;
|
|
167
|
+
case "xai":
|
|
168
|
+
case "grok":
|
|
169
|
+
return this.xai;
|
|
170
|
+
default:
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get provider status
|
|
176
|
+
*/
|
|
177
|
+
getProviderStatus() {
|
|
178
|
+
return this.providers.map((provider) => ({
|
|
179
|
+
name: provider.constructor.name,
|
|
180
|
+
hasKey: provider.hasApiKey(),
|
|
181
|
+
connected: false, // Will be updated by checkConnection
|
|
182
|
+
}));
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Check all provider connections
|
|
186
|
+
*/
|
|
187
|
+
async checkAllConnections() {
|
|
188
|
+
const statuses = await Promise.all(this.providers.map(async (provider) => {
|
|
189
|
+
const hasKey = provider.hasApiKey();
|
|
190
|
+
let connected = false;
|
|
191
|
+
if (hasKey) {
|
|
192
|
+
try {
|
|
193
|
+
connected = await provider.checkConnection();
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
connected = false;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
name: provider.constructor.name,
|
|
201
|
+
hasKey,
|
|
202
|
+
connected,
|
|
203
|
+
};
|
|
204
|
+
}));
|
|
205
|
+
return statuses;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Cleanup all providers
|
|
209
|
+
*/
|
|
210
|
+
async cleanup() {
|
|
211
|
+
await Promise.all(this.providers.map(async (provider) => {
|
|
212
|
+
if (provider.cleanup) {
|
|
213
|
+
try {
|
|
214
|
+
await provider.cleanup();
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
console.warn(`Failed to cleanup ${provider.constructor.name}:`, error);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
exports.ProviderChain = ProviderChain;
|
|
224
|
+
/**
|
|
225
|
+
* Singleton instance of the provider chain
|
|
226
|
+
*/
|
|
227
|
+
let providerChainInstance = null;
|
|
228
|
+
/**
|
|
229
|
+
* Get the global provider chain instance
|
|
230
|
+
*/
|
|
231
|
+
function getProviderChain() {
|
|
232
|
+
if (!providerChainInstance) {
|
|
233
|
+
providerChainInstance = new ProviderChain();
|
|
234
|
+
}
|
|
235
|
+
return providerChainInstance;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Reset the global provider chain instance
|
|
239
|
+
*/
|
|
240
|
+
function resetProviderChain() {
|
|
241
|
+
if (providerChainInstance) {
|
|
242
|
+
providerChainInstance.cleanup();
|
|
243
|
+
}
|
|
244
|
+
providerChainInstance = null;
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=ProviderChain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProviderChain.js","sourceRoot":"","sources":["../../src/clients/ProviderChain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { AIClient, AIClientOptions, AgentContext } from "../interfaces/AIClient";
|
|
2
|
+
/**
|
|
3
|
+
* XAI Client - Fallback provider using X AI API (Grok)
|
|
4
|
+
*
|
|
5
|
+
* This is a simplified client that uses the X AI API directly
|
|
6
|
+
* as a secondary fallback when MyContext AI and Claude SDK are not available.
|
|
7
|
+
*/
|
|
8
|
+
export declare class XAIClient implements AIClient {
|
|
9
|
+
readonly clientType: "direct-api";
|
|
10
|
+
readonly supportsTools = false;
|
|
11
|
+
readonly supportsStreaming = false;
|
|
12
|
+
private apiKey;
|
|
13
|
+
private baseUrl;
|
|
14
|
+
constructor();
|
|
15
|
+
/**
|
|
16
|
+
* Check if API key is available
|
|
17
|
+
*/
|
|
18
|
+
hasApiKey(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Set API key for X AI API
|
|
21
|
+
*/
|
|
22
|
+
setApiKey(apiKey: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Check connection to X AI API
|
|
25
|
+
*/
|
|
26
|
+
checkConnection(): Promise<boolean>;
|
|
27
|
+
/**
|
|
28
|
+
* Generate text using X AI API
|
|
29
|
+
*/
|
|
30
|
+
generateText(prompt: string, options?: AIClientOptions): Promise<string>;
|
|
31
|
+
/**
|
|
32
|
+
* Generate React component using X AI API
|
|
33
|
+
*/
|
|
34
|
+
generateComponent(prompt: string, context?: AgentContext, options?: AIClientOptions): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Generate component refinement using X AI API
|
|
37
|
+
*/
|
|
38
|
+
generateComponentRefinement(componentCode: string, prompt: string, context?: AgentContext, options?: AIClientOptions): Promise<string>;
|
|
39
|
+
/**
|
|
40
|
+
* List available models
|
|
41
|
+
*/
|
|
42
|
+
listModels(): Promise<string[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Cleanup resources
|
|
45
|
+
*/
|
|
46
|
+
cleanup(): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=XAIClient.d.ts.map
|