mycontext-cli 2.0.29 → 2.0.31
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 +119 -25
- package/dist/agents/implementations/CodeGenSubAgent.d.ts +4 -0
- package/dist/agents/implementations/CodeGenSubAgent.d.ts.map +1 -1
- package/dist/agents/implementations/CodeGenSubAgent.js +108 -22
- package/dist/agents/implementations/CodeGenSubAgent.js.map +1 -1
- package/dist/agents/implementations/DesignPipelineAgent.d.ts.map +1 -1
- package/dist/agents/implementations/DesignPipelineAgent.js +21 -16
- package/dist/agents/implementations/DesignPipelineAgent.js.map +1 -1
- package/dist/cli.js +11 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/generate-components.d.ts +5 -0
- package/dist/commands/generate-components.d.ts.map +1 -1
- package/dist/commands/generate-components.js +138 -12
- package/dist/commands/generate-components.js.map +1 -1
- package/dist/commands/generate.d.ts +4 -0
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +74 -56
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +237 -61
- package/dist/commands/init.js.map +1 -1
- package/dist/config/intent-dictionary.json +47 -4
- package/dist/config/model-versions.json +26 -0
- package/dist/package.json +6 -2
- package/dist/templates/instantdb/db.template.ts +14 -0
- package/dist/templates/instantdb/home-client.template.tsx +127 -0
- package/dist/templates/instantdb/page.template.tsx +5 -0
- package/dist/templates/instantdb/perms.template.ts +9 -0
- package/dist/templates/instantdb/schema.template.ts +28 -0
- package/dist/templates/playbooks/instantdb-integration.md +851 -0
- package/dist/templates/playbooks/mpesa-integration.md +652 -0
- package/dist/templates/pm-integration-config.json +20 -0
- package/dist/templates/ui-spec-examples.md +318 -0
- package/dist/templates/ui-spec-templates.json +244 -0
- package/dist/types/intent-dictionary.d.ts +61 -0
- package/dist/types/intent-dictionary.d.ts.map +1 -1
- package/dist/utils/envExampleGenerator.d.ts.map +1 -1
- package/dist/utils/envExampleGenerator.js +36 -27
- package/dist/utils/envExampleGenerator.js.map +1 -1
- package/dist/utils/hostedApiClient.d.ts +10 -3
- package/dist/utils/hostedApiClient.d.ts.map +1 -1
- package/dist/utils/hostedApiClient.js +144 -209
- package/dist/utils/hostedApiClient.js.map +1 -1
- package/dist/utils/hybridAIClient.d.ts.map +1 -1
- package/dist/utils/hybridAIClient.js +8 -26
- package/dist/utils/hybridAIClient.js.map +1 -1
- package/dist/utils/openRouterClient.d.ts.map +1 -1
- package/dist/utils/openRouterClient.js +4 -14
- package/dist/utils/openRouterClient.js.map +1 -1
- package/dist/utils/unifiedDesignContextLoader.d.ts.map +1 -1
- package/dist/utils/unifiedDesignContextLoader.js +25 -12
- package/dist/utils/unifiedDesignContextLoader.js.map +1 -1
- package/package.json +6 -2
|
@@ -45,24 +45,18 @@ class EnvExampleGenerator {
|
|
|
45
45
|
*/
|
|
46
46
|
static generateEnvExample(packageJson) {
|
|
47
47
|
const envVars = new Set();
|
|
48
|
-
// MyContext AI Provider Chain
|
|
49
|
-
envVars.add("#
|
|
50
|
-
envVars.add("MYCONTEXT_API_KEY=");
|
|
48
|
+
// MyContext AI Provider Chain
|
|
49
|
+
envVars.add("# Choose ONE of these providers:");
|
|
51
50
|
envVars.add("");
|
|
52
|
-
envVars.add("#
|
|
53
|
-
envVars.add("
|
|
51
|
+
envVars.add("# Option 1: OpenRouter (Recommended - Free Tier Available)");
|
|
52
|
+
envVars.add("MYCONTEXT_OPENROUTER_API_KEY=");
|
|
54
53
|
envVars.add("");
|
|
55
|
-
envVars.add("#
|
|
56
|
-
envVars.add("
|
|
54
|
+
envVars.add("# Option 2: Claude (Best Quality)");
|
|
55
|
+
envVars.add("# ANTHROPIC_API_KEY=sk-ant-xxx");
|
|
57
56
|
envVars.add("");
|
|
58
|
-
|
|
59
|
-
envVars.add("#
|
|
60
|
-
envVars.add("MYCONTEXT_OPENROUTER_API_KEY=");
|
|
57
|
+
envVars.add("# Option 3: XAI/Grok");
|
|
58
|
+
envVars.add("# XAI_API_KEY=xai-xxx");
|
|
61
59
|
envVars.add("");
|
|
62
|
-
// Generation settings
|
|
63
|
-
envVars.add("# Optional: Generation Settings");
|
|
64
|
-
envVars.add("MYCONTEXT_TEMPERATURE=0.1");
|
|
65
|
-
envVars.add("MYCONTEXT_MAX_TOKENS=4000");
|
|
66
60
|
// Check for database dependencies
|
|
67
61
|
const dependencies = packageJson
|
|
68
62
|
? { ...packageJson.dependencies, ...packageJson.devDependencies }
|
|
@@ -74,29 +68,44 @@ class EnvExampleGenerator {
|
|
|
74
68
|
}
|
|
75
69
|
return `# MyContext Environment Variables
|
|
76
70
|
|
|
77
|
-
## 🚀 Quick
|
|
71
|
+
## 🚀 Quick Start
|
|
72
|
+
|
|
73
|
+
**You need ONE API key to get started.** Choose your preferred provider:
|
|
74
|
+
|
|
75
|
+
### Option 1: OpenRouter (Recommended)
|
|
76
|
+
- **Free tier available** with generous limits
|
|
77
|
+
- Uses DeepSeek R1 (powerful reasoning model)
|
|
78
|
+
- Get free key: https://openrouter.ai/keys
|
|
78
79
|
|
|
79
|
-
### Option 1: Use MyContext AI (Coming Soon - Recommended)
|
|
80
80
|
\`\`\`bash
|
|
81
|
-
|
|
81
|
+
MYCONTEXT_OPENROUTER_API_KEY=sk-or-xxx
|
|
82
82
|
\`\`\`
|
|
83
83
|
|
|
84
|
-
### Option 2:
|
|
84
|
+
### Option 2: Claude (Best Quality)
|
|
85
|
+
- Highest quality results
|
|
86
|
+
- Paid but worth it for production
|
|
87
|
+
- Get key: https://console.anthropic.com/
|
|
88
|
+
|
|
89
|
+
\`\`\`bash
|
|
90
|
+
ANTHROPIC_API_KEY=sk-ant-xxx
|
|
91
|
+
\`\`\`
|
|
92
|
+
|
|
93
|
+
### Option 3: XAI/Grok
|
|
94
|
+
- Alternative provider
|
|
95
|
+
- Get key: https://console.x.ai/
|
|
96
|
+
|
|
85
97
|
\`\`\`bash
|
|
86
|
-
|
|
87
|
-
XAI_API_KEY=xai-xxx # Grok (fallback 1)
|
|
88
|
-
MYCONTEXT_OPENROUTER_API_KEY=sk-or-xxx # OpenRouter free tier (fallback 2)
|
|
98
|
+
XAI_API_KEY=xai-xxx
|
|
89
99
|
\`\`\`
|
|
90
100
|
|
|
91
|
-
## Provider Chain
|
|
92
|
-
|
|
101
|
+
## Provider Chain (Automatic Fallback)
|
|
102
|
+
Claude → XAI → OpenRouter (whichever keys you provide)
|
|
93
103
|
|
|
94
104
|
## Get API Keys
|
|
95
105
|
|
|
96
|
-
- **
|
|
97
|
-
- **
|
|
98
|
-
- **
|
|
99
|
-
- **MyContext AI**: Coming soon at api.mycontext.dev
|
|
106
|
+
- **OpenRouter**: https://openrouter.ai/keys (FREE tier)
|
|
107
|
+
- **Claude**: https://console.anthropic.com/ (paid)
|
|
108
|
+
- **XAI**: https://console.x.ai/ (paid)
|
|
100
109
|
|
|
101
110
|
## Environment Variables
|
|
102
111
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envExampleGenerator.js","sourceRoot":"","sources":["../../src/utils/envExampleGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,gDAAwB;AAWxB,MAAa,mBAAmB;IAC9B;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,WAAyB;QACjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAElC,
|
|
1
|
+
{"version":3,"file":"envExampleGenerator.js","sourceRoot":"","sources":["../../src/utils/envExampleGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,gDAAwB;AAWxB,MAAa,mBAAmB;IAC9B;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,WAAyB;QACjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAElC,8BAA8B;QAC9B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,kCAAkC;QAClC,MAAM,YAAY,GAAG,WAAW;YAC9B,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,YAAY,EAAE,GAAG,WAAW,CAAC,eAAe,EAAE;YACjE,CAAC,CAAC,EAAE,CAAC;QAEP,IAAI,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CT,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;CAW/B,CAAC;IACA,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,WAAmB;QACjD,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAC/D,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACzC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBACvD,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wDAAwD;QAC1D,CAAC;QAED,4BAA4B;QAC5B,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACnC,CAAC;CACF;AAzGD,kDAyGC"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HostedApiClient - OpenRouter-based AI client with generous free tier
|
|
3
|
+
*
|
|
4
|
+
* Uses OpenRouter's API with DeepSeek R1 for powerful, free AI generation.
|
|
5
|
+
* Works without API key (with rate limits), or add OPENROUTER_API_KEY for higher limits.
|
|
6
|
+
*/
|
|
1
7
|
export interface HostedApiResponse {
|
|
2
8
|
success: boolean;
|
|
3
9
|
content?: string;
|
|
@@ -16,10 +22,11 @@ export interface HostedApiResponse {
|
|
|
16
22
|
};
|
|
17
23
|
}
|
|
18
24
|
export declare class HostedApiClient {
|
|
19
|
-
private
|
|
20
|
-
private
|
|
25
|
+
private modelName;
|
|
26
|
+
private apiUrl;
|
|
27
|
+
private apiKey;
|
|
21
28
|
constructor(apiKey?: string);
|
|
22
|
-
private
|
|
29
|
+
private loadModelFromConfig;
|
|
23
30
|
generateText(prompt: string, options?: any): Promise<HostedApiResponse>;
|
|
24
31
|
generateComponent(prompt: string, options?: any): Promise<HostedApiResponse>;
|
|
25
32
|
checkConnection(): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostedApiClient.d.ts","sourceRoot":"","sources":["../../src/utils/hostedApiClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hostedApiClient.d.ts","sourceRoot":"","sources":["../../src/utils/hostedApiClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,CAAC,EAAE,MAAM;IAiB3B,OAAO,CAAC,mBAAmB;IAmBrB,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,GAAQ,GAChB,OAAO,CAAC,iBAAiB,CAAC;IAwFvB,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,GAAQ,GAChB,OAAO,CAAC,iBAAiB,CAAC;IAKvB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAKnC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IAU1B,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,GAAQ,GAChB,OAAO,CAAC,iBAAiB,CAAC;IAKvB,QAAQ,CAAC,MAAM,GAAE,MAAgB,GAAG,OAAO,CAAC,GAAG,CAAC;IAShD,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAQtE,SAAS,IAAI,OAAO;CAIrB"}
|
|
@@ -1,258 +1,193 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* HostedApiClient - OpenRouter-based AI client with generous free tier
|
|
4
|
+
*
|
|
5
|
+
* Uses OpenRouter's API with DeepSeek R1 for powerful, free AI generation.
|
|
6
|
+
* Works without API key (with rate limits), or add OPENROUTER_API_KEY for higher limits.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
42
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
43
|
+
};
|
|
2
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
45
|
exports.HostedApiClient = void 0;
|
|
4
|
-
|
|
46
|
+
// Polyfill fetch for Node < 18
|
|
47
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
const fs = __importStar(require("fs"));
|
|
5
50
|
class HostedApiClient {
|
|
6
51
|
constructor(apiKey) {
|
|
7
|
-
|
|
8
|
-
this.
|
|
9
|
-
//
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
52
|
+
// Load model name from config
|
|
53
|
+
this.modelName = this.loadModelFromConfig();
|
|
54
|
+
// Use OpenRouter API
|
|
55
|
+
this.apiUrl =
|
|
56
|
+
process.env.MYCONTEXT_API_URL ||
|
|
57
|
+
"https://openrouter.ai/api/v1/chat/completions";
|
|
58
|
+
// Optional API key for higher limits
|
|
59
|
+
this.apiKey =
|
|
60
|
+
apiKey ||
|
|
61
|
+
process.env.MYCONTEXT_API_KEY ||
|
|
62
|
+
process.env.OPENROUTER_API_KEY ||
|
|
63
|
+
null;
|
|
13
64
|
}
|
|
14
|
-
|
|
65
|
+
loadModelFromConfig() {
|
|
15
66
|
try {
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
this.apiKey = auth.token;
|
|
67
|
+
// Try to load from model-versions.json
|
|
68
|
+
const configPath = path.join(__dirname, "../config/model-versions.json");
|
|
69
|
+
if (fs.existsSync(configPath)) {
|
|
70
|
+
const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
71
|
+
if (config.current) {
|
|
72
|
+
return config.current;
|
|
23
73
|
}
|
|
24
74
|
}
|
|
25
75
|
}
|
|
26
76
|
catch (error) {
|
|
27
|
-
//
|
|
77
|
+
// Fallback if config can't be loaded
|
|
78
|
+
console.warn("⚠️ Could not load model config, using default");
|
|
28
79
|
}
|
|
80
|
+
// Fallback to env var or default free model
|
|
81
|
+
return process.env.MYCONTEXT_MODEL_NAME || "deepseek/deepseek-r1";
|
|
29
82
|
}
|
|
30
83
|
async generateText(prompt, options = {}) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
method: "POST",
|
|
34
|
-
headers: {
|
|
35
|
-
"Content-Type": "application/json",
|
|
36
|
-
...(this.apiKey && { Authorization: `Bearer ${this.apiKey}` }),
|
|
37
|
-
},
|
|
38
|
-
body: JSON.stringify({
|
|
39
|
-
message: prompt,
|
|
40
|
-
context: options.context || {},
|
|
41
|
-
model: options.model || "mycontext",
|
|
42
|
-
temperature: options.temperature || 0.7,
|
|
43
|
-
maxTokens: options.maxTokens || 4000,
|
|
44
|
-
stream: false,
|
|
45
|
-
}),
|
|
46
|
-
});
|
|
47
|
-
if (!response.ok) {
|
|
48
|
-
const error = (await response.json());
|
|
49
|
-
throw new Error(error.error || `HTTP ${response.status}`);
|
|
50
|
-
}
|
|
51
|
-
const result = (await response.json());
|
|
52
|
-
return {
|
|
53
|
-
success: result.success,
|
|
54
|
-
content: result.data?.message,
|
|
55
|
-
data: result.data,
|
|
56
|
-
error: result.error,
|
|
57
|
-
usage: result.data?.usage,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
84
|
+
// Require API key for OpenRouter
|
|
85
|
+
if (!this.apiKey) {
|
|
61
86
|
return {
|
|
62
87
|
success: false,
|
|
63
|
-
error:
|
|
88
|
+
error: `OpenRouter API key required. Get your free API key at https://openrouter.ai/keys\n\n` +
|
|
89
|
+
`Then add it to your .env file:\n` +
|
|
90
|
+
`MYCONTEXT_OPENROUTER_API_KEY=sk-or-xxx\n\n` +
|
|
91
|
+
`Or set it directly:\n` +
|
|
92
|
+
`export MYCONTEXT_OPENROUTER_API_KEY=sk-or-xxx`,
|
|
64
93
|
};
|
|
65
94
|
}
|
|
66
|
-
}
|
|
67
|
-
async generateComponent(prompt, options = {}) {
|
|
68
95
|
try {
|
|
69
|
-
const
|
|
96
|
+
const headers = {
|
|
97
|
+
"Content-Type": "application/json",
|
|
98
|
+
"HTTP-Referer": "https://github.com/farajabien/mycontext-cli",
|
|
99
|
+
"X-Title": "MyContext CLI",
|
|
100
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
101
|
+
};
|
|
102
|
+
console.log(`🔍 DEBUG: Calling OpenRouter API: ${this.apiUrl}`);
|
|
103
|
+
console.log(`🔍 DEBUG: Model: ${this.modelName}`);
|
|
104
|
+
console.log(`🔍 DEBUG: Auth: Yes (API key provided)`);
|
|
105
|
+
const response = await (0, node_fetch_1.default)(this.apiUrl, {
|
|
70
106
|
method: "POST",
|
|
71
|
-
headers
|
|
72
|
-
"Content-Type": "application/json",
|
|
73
|
-
...(this.apiKey && { Authorization: `Bearer ${this.apiKey}` }),
|
|
74
|
-
},
|
|
107
|
+
headers,
|
|
75
108
|
body: JSON.stringify({
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
109
|
+
model: this.modelName,
|
|
110
|
+
messages: [
|
|
111
|
+
{
|
|
112
|
+
role: "user",
|
|
113
|
+
content: prompt,
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
max_tokens: options.maxTokens || 4000,
|
|
83
117
|
temperature: options.temperature || 0.7,
|
|
84
|
-
maxTokens: options.maxTokens || 4000,
|
|
85
|
-
withTests: options.withTests || false,
|
|
86
118
|
}),
|
|
87
119
|
});
|
|
120
|
+
console.log(`🔍 DEBUG: Response status: ${response.status}`);
|
|
88
121
|
if (!response.ok) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
// Try to parse as JSON, fallback to text
|
|
93
|
-
let error;
|
|
94
|
-
try {
|
|
95
|
-
error = JSON.parse(errorText);
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
error = { error: errorText };
|
|
99
|
-
}
|
|
100
|
-
throw new Error(error.error || `HTTP ${response.status}`);
|
|
101
|
-
}
|
|
102
|
-
catch (parseError) {
|
|
103
|
-
throw new Error(`HTTP ${response.status}: ${parseError instanceof Error ? parseError.message : String(parseError)}`);
|
|
104
|
-
}
|
|
122
|
+
const errorText = await response.text();
|
|
123
|
+
console.error(`❌ DEBUG: OpenRouter error: ${errorText}`);
|
|
124
|
+
throw new Error(`OpenRouter API error (${response.status}): ${errorText.substring(0, 200)}`);
|
|
105
125
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
console.warn("❌ DEBUG: Hosted API response doesn't look like JSON, got:", resultText.substring(0, 100));
|
|
113
|
-
throw new Error(`Hosted API returned non-JSON response: ${resultText.substring(0, 100)}...`);
|
|
114
|
-
}
|
|
115
|
-
const result = JSON.parse(resultText);
|
|
116
|
-
return {
|
|
117
|
-
success: result.success,
|
|
118
|
-
content: result.data?.component?.code,
|
|
119
|
-
data: result.data,
|
|
120
|
-
error: result.error,
|
|
121
|
-
usage: result.data?.usage,
|
|
122
|
-
};
|
|
126
|
+
const data = await response.json();
|
|
127
|
+
console.log(`🔍 DEBUG: Response data type: ${typeof data}, hasChoices: ${!!data.choices}`);
|
|
128
|
+
// Extract content from OpenRouter response format
|
|
129
|
+
let generatedText = "";
|
|
130
|
+
if (data.choices && data.choices[0]?.message?.content) {
|
|
131
|
+
generatedText = data.choices[0].message.content;
|
|
123
132
|
}
|
|
124
|
-
|
|
125
|
-
console.error(
|
|
126
|
-
throw new Error(
|
|
133
|
+
else {
|
|
134
|
+
console.error(`❌ DEBUG: Unexpected OpenRouter response:`, JSON.stringify(data).substring(0, 500));
|
|
135
|
+
throw new Error("Unexpected OpenRouter response format");
|
|
127
136
|
}
|
|
137
|
+
console.log(`✅ DEBUG: Generated ${generatedText.length} characters`);
|
|
138
|
+
return {
|
|
139
|
+
success: true,
|
|
140
|
+
content: generatedText,
|
|
141
|
+
data: { message: generatedText },
|
|
142
|
+
};
|
|
128
143
|
}
|
|
129
144
|
catch (error) {
|
|
145
|
+
console.error(`❌ DEBUG: Full error:`, error);
|
|
130
146
|
return {
|
|
131
147
|
success: false,
|
|
132
|
-
error: error.message
|
|
148
|
+
error: `MyContext AI failed: ${error.message}`,
|
|
133
149
|
};
|
|
134
150
|
}
|
|
135
151
|
}
|
|
152
|
+
async generateComponent(prompt, options = {}) {
|
|
153
|
+
// Use same OpenRouter endpoint as generateText
|
|
154
|
+
return this.generateText(prompt, options);
|
|
155
|
+
}
|
|
136
156
|
async checkConnection() {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
method: "GET",
|
|
140
|
-
headers: {
|
|
141
|
-
...(this.apiKey && { Authorization: `Bearer ${this.apiKey}` }),
|
|
142
|
-
},
|
|
143
|
-
});
|
|
144
|
-
return response.ok;
|
|
145
|
-
}
|
|
146
|
-
catch {
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
157
|
+
// OpenRouter has generous free tier, always return true
|
|
158
|
+
return true;
|
|
149
159
|
}
|
|
150
160
|
async getPricing() {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
if (!response.ok) {
|
|
159
|
-
throw new Error(`HTTP ${response.status}`);
|
|
160
|
-
}
|
|
161
|
-
return await response.json();
|
|
162
|
-
}
|
|
163
|
-
catch (error) {
|
|
164
|
-
return {
|
|
165
|
-
success: false,
|
|
166
|
-
error: error.message || "Failed to fetch pricing",
|
|
167
|
-
};
|
|
168
|
-
}
|
|
161
|
+
return {
|
|
162
|
+
success: true,
|
|
163
|
+
data: {
|
|
164
|
+
plan: "free",
|
|
165
|
+
description: "OpenRouter free tier with DeepSeek R1",
|
|
166
|
+
},
|
|
167
|
+
};
|
|
169
168
|
}
|
|
170
169
|
async generateContext(type, prompt, options = {}) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
method: "POST",
|
|
174
|
-
headers: {
|
|
175
|
-
"Content-Type": "application/json",
|
|
176
|
-
...(this.apiKey && { Authorization: `Bearer ${this.apiKey}` }),
|
|
177
|
-
},
|
|
178
|
-
body: JSON.stringify({
|
|
179
|
-
type,
|
|
180
|
-
prompt,
|
|
181
|
-
context: options.context || {},
|
|
182
|
-
model: options.model || "mycontext",
|
|
183
|
-
temperature: options.temperature || 0.7,
|
|
184
|
-
maxTokens: options.maxTokens || 4000,
|
|
185
|
-
}),
|
|
186
|
-
});
|
|
187
|
-
if (!response.ok) {
|
|
188
|
-
const error = (await response.json());
|
|
189
|
-
throw new Error(error.error || `HTTP ${response.status}`);
|
|
190
|
-
}
|
|
191
|
-
const result = (await response.json());
|
|
192
|
-
return {
|
|
193
|
-
success: result.success,
|
|
194
|
-
content: result.data?.content,
|
|
195
|
-
data: result.data,
|
|
196
|
-
error: result.error,
|
|
197
|
-
usage: result.data?.usage,
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
catch (error) {
|
|
201
|
-
return {
|
|
202
|
-
success: false,
|
|
203
|
-
error: error.message || "Hosted API request failed",
|
|
204
|
-
};
|
|
205
|
-
}
|
|
170
|
+
// Use same OpenRouter endpoint as generateText
|
|
171
|
+
return this.generateText(prompt, options);
|
|
206
172
|
}
|
|
207
173
|
async getUsage(period = "month") {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
});
|
|
215
|
-
if (!response.ok) {
|
|
216
|
-
const error = (await response.json());
|
|
217
|
-
throw new Error(error.error || `HTTP ${response.status}`);
|
|
218
|
-
}
|
|
219
|
-
return await response.json();
|
|
220
|
-
}
|
|
221
|
-
catch (error) {
|
|
222
|
-
return {
|
|
223
|
-
success: false,
|
|
224
|
-
error: error.message || "Failed to fetch usage",
|
|
225
|
-
};
|
|
226
|
-
}
|
|
174
|
+
return {
|
|
175
|
+
success: true,
|
|
176
|
+
data: {
|
|
177
|
+
message: "Usage tracking not available for OpenRouter free tier",
|
|
178
|
+
},
|
|
179
|
+
};
|
|
227
180
|
}
|
|
228
181
|
async subscribeToPlan(plan, paymentMethod) {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
...(this.apiKey && { Authorization: `Bearer ${this.apiKey}` }),
|
|
235
|
-
},
|
|
236
|
-
body: JSON.stringify({
|
|
237
|
-
plan,
|
|
238
|
-
paymentMethod,
|
|
239
|
-
}),
|
|
240
|
-
});
|
|
241
|
-
if (!response.ok) {
|
|
242
|
-
const error = (await response.json());
|
|
243
|
-
throw new Error(error.error || `HTTP ${response.status}`);
|
|
244
|
-
}
|
|
245
|
-
return await response.json();
|
|
246
|
-
}
|
|
247
|
-
catch (error) {
|
|
248
|
-
return {
|
|
249
|
-
success: false,
|
|
250
|
-
error: error.message || "Failed to subscribe to plan",
|
|
251
|
-
};
|
|
252
|
-
}
|
|
182
|
+
// Not applicable for OpenRouter free tier
|
|
183
|
+
return {
|
|
184
|
+
success: false,
|
|
185
|
+
error: "Subscriptions not available for OpenRouter free tier",
|
|
186
|
+
};
|
|
253
187
|
}
|
|
254
188
|
hasApiKey() {
|
|
255
|
-
return
|
|
189
|
+
// Always return true since OpenRouter works without auth
|
|
190
|
+
return true;
|
|
256
191
|
}
|
|
257
192
|
}
|
|
258
193
|
exports.HostedApiClient = HostedApiClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostedApiClient.js","sourceRoot":"","sources":["../../src/utils/hostedApiClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hostedApiClient.js","sourceRoot":"","sources":["../../src/utils/hostedApiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybridAIClient.d.ts","sourceRoot":"","sources":["../../src/utils/hybridAIClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AA+BxD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,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,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAS;;IAU/C;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;YACW,mBAAmB;
|
|
1
|
+
{"version":3,"file":"hybridAIClient.d.ts","sourceRoot":"","sources":["../../src/utils/hybridAIClient.ts"],"names":[],"mappings":"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"}
|