my-opencode-config 0.1.0-beta.1
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 +53 -0
- package/dist/commands/auth.d.ts +8 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +148 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config-templates.d.ts +4 -0
- package/dist/commands/config-templates.d.ts.map +1 -0
- package/dist/commands/config-templates.js +76 -0
- package/dist/commands/config-templates.js.map +1 -0
- package/dist/commands/models.d.ts +8 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +126 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/plugins.d.ts +3 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +27 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +225 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +53 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/config.d.ts +10 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +153 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logging.d.ts +16 -0
- package/dist/utils/logging.d.ts.map +1 -0
- package/dist/utils/logging.js +110 -0
- package/dist/utils/logging.js.map +1 -0
- package/dist/utils/opencode.d.ts +12 -0
- package/dist/utils/opencode.d.ts.map +1 -0
- package/dist/utils/opencode.js +142 -0
- package/dist/utils/opencode.js.map +1 -0
- package/dist/utils/prompts.d.ts +6 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +72 -0
- package/dist/utils/prompts.js.map +1 -0
- package/package.json +43 -0
package/README.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# my-opencode-config
|
|
2
|
+
|
|
3
|
+
> An interactive setup wizard to configure OpenCode with powerful free models and essential tools.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/my-opencode-config)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
## Why It Exists
|
|
9
|
+
|
|
10
|
+
OpenCode is powerful, but unlocking its full potential with free, high-quality models can be complex. This wizard automates the entire setup—from authentication to plugin installation—so you can get a supercharged, cost-effective OpenCode environment running in minutes, not hours.
|
|
11
|
+
|
|
12
|
+
Its sole purpose is to make OpenCode great for free by leveraging OpenCode Zen models and Gemini free tier limits, providing a generous allowance for daily, medium-complexity tasks.
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
Run the setup wizard directly without installation. This is the fastest way to get started.
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx my-opencode-config
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Key Features
|
|
23
|
+
|
|
24
|
+
- 🔮 **Intelligent Model Discovery**: Finds and recommends the best-performing free models from OpenCode Zen.
|
|
25
|
+
- 🔌 **Essential Plugins**: Installs and configures the popular `oh-my-opencode` agent harness to put your agent on steroids.
|
|
26
|
+
- 🚀 **Superpowers Included**: Integrates the `superpowers` skill set for advanced agent capabilities.
|
|
27
|
+
- 🔐 **Seamless Authentication**: Handles OAuth for OpenCode Zen and Google Gemini.
|
|
28
|
+
- ⚙️ **Smart Configuration**: Sets up the GitHub MCP and configures agents to use free models by default.
|
|
29
|
+
|
|
30
|
+
## Prerequisites
|
|
31
|
+
|
|
32
|
+
- **Node.js**: `v18.0.0` or higher.
|
|
33
|
+
- **OpenCode**: An existing installation is required.
|
|
34
|
+
|
|
35
|
+
## Installation
|
|
36
|
+
|
|
37
|
+
Alternatively, you can install the CLI globally for easier access.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm install -g my-opencode-config
|
|
41
|
+
```
|
|
42
|
+
Then, run the wizard:
|
|
43
|
+
```bash
|
|
44
|
+
my-opencode-config
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## References
|
|
48
|
+
|
|
49
|
+
This tool stands on the shoulders of giants. Check out the projects that make it possible:
|
|
50
|
+
|
|
51
|
+
- **OpenCode**: [https://github.com/anomalyco/opencode](https://github.com/anomalyco/opencode)
|
|
52
|
+
- **oh-my-openagent**: [https://github.com/code-yeongyu/oh-my-openagent](https://github.com/code-yeongyu/oh-my-openagent)
|
|
53
|
+
- **Superpowers**: [https://github.com/obra/superpowers](https://github.com/obra/superpowers)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AuthStatus } from '../types';
|
|
2
|
+
export declare function isAuthenticated(provider: 'zen' | 'gemini'): Promise<boolean>;
|
|
3
|
+
export declare function getAuthStatus(): Promise<AuthStatus>;
|
|
4
|
+
export declare function authenticateZen(): Promise<void>;
|
|
5
|
+
export declare function authenticateGemini(): Promise<void>;
|
|
6
|
+
export declare function authenticateAll(): Promise<void>;
|
|
7
|
+
export declare function authenticateIfNeeded(): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAItC,wBAAsB,eAAe,CAAC,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAelF;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAOzD;AAqBD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAerD;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAexD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAGrD;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuB1D"}
|
|
@@ -0,0 +1,148 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.isAuthenticated = isAuthenticated;
|
|
37
|
+
exports.getAuthStatus = getAuthStatus;
|
|
38
|
+
exports.authenticateZen = authenticateZen;
|
|
39
|
+
exports.authenticateGemini = authenticateGemini;
|
|
40
|
+
exports.authenticateAll = authenticateAll;
|
|
41
|
+
exports.authenticateIfNeeded = authenticateIfNeeded;
|
|
42
|
+
const child_process_1 = require("child_process");
|
|
43
|
+
const fs = __importStar(require("fs/promises"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const os = __importStar(require("os"));
|
|
46
|
+
const AUTH_FILE = path.join(os.homedir(), '.local', 'share', 'opencode', 'auth.json');
|
|
47
|
+
async function isAuthenticated(provider) {
|
|
48
|
+
try {
|
|
49
|
+
const content = await fs.readFile(AUTH_FILE, 'utf-8');
|
|
50
|
+
const auth = JSON.parse(content);
|
|
51
|
+
if (provider === 'zen') {
|
|
52
|
+
return !!(auth.opencode || auth.zen);
|
|
53
|
+
}
|
|
54
|
+
if (provider === 'gemini') {
|
|
55
|
+
return !!(auth.google);
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function getAuthStatus() {
|
|
64
|
+
const [zen, gemini] = await Promise.all([
|
|
65
|
+
isAuthenticated('zen'),
|
|
66
|
+
isAuthenticated('gemini'),
|
|
67
|
+
]);
|
|
68
|
+
return { zen, gemini };
|
|
69
|
+
}
|
|
70
|
+
function spawnOpencodeConnect() {
|
|
71
|
+
return new Promise((resolve, reject) => {
|
|
72
|
+
const proc = (0, child_process_1.spawn)('opencode', ['/connect'], {
|
|
73
|
+
stdio: 'inherit',
|
|
74
|
+
shell: true,
|
|
75
|
+
});
|
|
76
|
+
proc.on('close', (code) => {
|
|
77
|
+
if (code === 0) {
|
|
78
|
+
resolve();
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
reject(new Error(`opencode /connect exited with code ${code}`));
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
proc.on('error', reject);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
async function authenticateZen() {
|
|
88
|
+
console.log('\n🔐 Authenticating with OpenCode Zen...');
|
|
89
|
+
console.log('Please follow the prompts in the OpenCode window.\n');
|
|
90
|
+
try {
|
|
91
|
+
await spawnOpencodeConnect();
|
|
92
|
+
console.log('✅ Zen authentication complete!\n');
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (error.message?.includes('exited with code')) {
|
|
96
|
+
console.log('⚠️ Authentication was cancelled or failed.');
|
|
97
|
+
console.log(' You can run "opencode /connect" later to authenticate.\n');
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function authenticateGemini() {
|
|
105
|
+
console.log('\n🔐 Authenticating with Google Gemini...');
|
|
106
|
+
console.log('Please follow the prompts in the OpenCode window.\n');
|
|
107
|
+
try {
|
|
108
|
+
await spawnOpencodeConnect();
|
|
109
|
+
console.log('✅ Gemini authentication complete!\n');
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
if (error.message?.includes('exited with code')) {
|
|
113
|
+
console.log('⚠️ Authentication was cancelled or failed.');
|
|
114
|
+
console.log(' You can run "opencode /connect" later to authenticate.\n');
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async function authenticateAll() {
|
|
122
|
+
await authenticateZen();
|
|
123
|
+
await authenticateGemini();
|
|
124
|
+
}
|
|
125
|
+
async function authenticateIfNeeded() {
|
|
126
|
+
const status = await getAuthStatus();
|
|
127
|
+
// If already fully authenticated, skip
|
|
128
|
+
if (status.zen && status.gemini) {
|
|
129
|
+
console.log('✅ Already authenticated for all providers');
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
// Show which providers need authentication
|
|
133
|
+
const missing = [];
|
|
134
|
+
if (!status.zen)
|
|
135
|
+
missing.push('OpenCode Zen');
|
|
136
|
+
if (!status.gemini)
|
|
137
|
+
missing.push('Google Gemini');
|
|
138
|
+
console.log(`\n📋 Providers to authenticate: ${missing.join(', ')}\n`);
|
|
139
|
+
// Spawn /connect ONCE (user can select multiple providers)
|
|
140
|
+
await spawnOpencodeConnect();
|
|
141
|
+
// Re-check and report
|
|
142
|
+
const newStatus = await getAuthStatus();
|
|
143
|
+
if (newStatus.zen && !status.zen)
|
|
144
|
+
console.log('✅ Zen authenticated');
|
|
145
|
+
if (newStatus.gemini && !status.gemini)
|
|
146
|
+
console.log('✅ Gemini authenticated');
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { UserSelections } from '../types';
|
|
2
|
+
export declare function generateOpencodeConfig(selections: UserSelections, existing?: any): object;
|
|
3
|
+
export declare function generateOhMyOpencodeConfig(selections: UserSelections, existing?: any): object;
|
|
4
|
+
//# sourceMappingURL=config-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-templates.d.ts","sourceRoot":"","sources":["../../src/commands/config-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,GAAE,GAAQ,GAAG,MAAM,CA0C7F;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,GAAE,GAAQ,GAAG,MAAM,CA4BjG"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateOpencodeConfig = generateOpencodeConfig;
|
|
4
|
+
exports.generateOhMyOpencodeConfig = generateOhMyOpencodeConfig;
|
|
5
|
+
const config_1 = require("../utils/config");
|
|
6
|
+
function generateOpencodeConfig(selections, existing = {}) {
|
|
7
|
+
const updates = {
|
|
8
|
+
$schema: 'https://opencode.ai/config.json',
|
|
9
|
+
enabled_providers: ['opencode', 'google'],
|
|
10
|
+
disabled_providers: ['anthropic', 'openai', 'cloudflare-ai-gateway', 'azure', 'deepseek'],
|
|
11
|
+
model: selections.mainModel,
|
|
12
|
+
small_model: selections.smallModel,
|
|
13
|
+
plugin: [
|
|
14
|
+
'opencode-gemini-auth@latest',
|
|
15
|
+
'oh-my-opencode@latest'
|
|
16
|
+
],
|
|
17
|
+
provider: {
|
|
18
|
+
google: {
|
|
19
|
+
models: {
|
|
20
|
+
'gemini-2.5-flash': {
|
|
21
|
+
options: {
|
|
22
|
+
thinkingConfig: {
|
|
23
|
+
includeThoughts: true,
|
|
24
|
+
thinkingBudget: 8192
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
'gemini-2.5-pro': {
|
|
29
|
+
options: {
|
|
30
|
+
thinkingConfig: {
|
|
31
|
+
includeThoughts: true,
|
|
32
|
+
thinkingBudget: 8192
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
opencode: {
|
|
39
|
+
models: {
|
|
40
|
+
[selections.mainModel.replace('opencode/', '')]: {},
|
|
41
|
+
[selections.smallModel.replace('opencode/', '')]: {},
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
return (0, config_1.mergeConfigs)(existing, updates);
|
|
47
|
+
}
|
|
48
|
+
function generateOhMyOpencodeConfig(selections, existing = {}) {
|
|
49
|
+
const updates = {
|
|
50
|
+
$schema: 'https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json',
|
|
51
|
+
agents: {
|
|
52
|
+
sisyphus: { model: selections.fastAgentModel, variant: 'max' },
|
|
53
|
+
hephaestus: { model: selections.fastAgentModel, variant: 'max' },
|
|
54
|
+
oracle: { model: selections.powerfulAgentModel, variant: 'high' },
|
|
55
|
+
librarian: { model: selections.fastAgentModel },
|
|
56
|
+
explore: { model: selections.fastAgentModel },
|
|
57
|
+
'multimodal-looker': { model: selections.powerfulAgentModel },
|
|
58
|
+
prometheus: { model: selections.fastAgentModel, variant: 'max' },
|
|
59
|
+
metis: { model: selections.fastAgentModel, variant: 'max' },
|
|
60
|
+
momus: { model: selections.powerfulAgentModel, variant: 'medium' },
|
|
61
|
+
atlas: { model: selections.fastAgentModel }
|
|
62
|
+
},
|
|
63
|
+
categories: {
|
|
64
|
+
'visual-engineering': { model: selections.powerfulAgentModel, variant: 'high' },
|
|
65
|
+
ultrabrain: { model: selections.powerfulAgentModel, variant: 'high' },
|
|
66
|
+
deep: { model: selections.powerfulAgentModel, variant: 'high' },
|
|
67
|
+
artistry: { model: selections.powerfulAgentModel, variant: 'high' },
|
|
68
|
+
quick: { model: selections.fastAgentModel },
|
|
69
|
+
'unspecified-low': { model: selections.fastAgentModel },
|
|
70
|
+
'unspecified-high': { model: selections.powerfulAgentModel },
|
|
71
|
+
writing: { model: selections.powerfulAgentModel }
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
return (0, config_1.mergeConfigs)(existing, updates);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=config-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-templates.js","sourceRoot":"","sources":["../../src/commands/config-templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Model } from '../types';
|
|
2
|
+
export declare function fetchZenModels(): Promise<Model[]>;
|
|
3
|
+
export declare function getGeminiModels(): Model[];
|
|
4
|
+
export declare function fetchAllModels(): Promise<{
|
|
5
|
+
zen: Model[];
|
|
6
|
+
gemini: Model[];
|
|
7
|
+
}>;
|
|
8
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,UAAU,CAAC;AAyCpD,wBAAsB,cAAc,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CA8DvD;AAED,wBAAgB,eAAe,IAAI,KAAK,EAAE,CAOzC;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC;IAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,KAAK,EAAE,CAAA;CAAE,CAAC,CAOjF"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchZenModels = fetchZenModels;
|
|
4
|
+
exports.getGeminiModels = getGeminiModels;
|
|
5
|
+
exports.fetchAllModels = fetchAllModels;
|
|
6
|
+
const child_process_1 = require("child_process");
|
|
7
|
+
const util_1 = require("util");
|
|
8
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
9
|
+
// Calculate score based on capabilities
|
|
10
|
+
function calculateScore(capabilities) {
|
|
11
|
+
if (!capabilities)
|
|
12
|
+
return 10;
|
|
13
|
+
let score = 10; // Base score
|
|
14
|
+
if (capabilities.reasoning)
|
|
15
|
+
score += 5;
|
|
16
|
+
if (capabilities.thinking)
|
|
17
|
+
score += 10;
|
|
18
|
+
if (capabilities.toolcall)
|
|
19
|
+
score += 5;
|
|
20
|
+
if (capabilities.attachment)
|
|
21
|
+
score += 5;
|
|
22
|
+
if (capabilities.input?.image)
|
|
23
|
+
score += 3;
|
|
24
|
+
if (capabilities.variants?.high)
|
|
25
|
+
score += 3;
|
|
26
|
+
if (capabilities.variants?.max)
|
|
27
|
+
score += 3;
|
|
28
|
+
if ((capabilities.limit?.context ?? 0) > 100000)
|
|
29
|
+
score += 3;
|
|
30
|
+
if ((capabilities.limit?.output ?? 0) > 100000)
|
|
31
|
+
score += 3;
|
|
32
|
+
return score;
|
|
33
|
+
}
|
|
34
|
+
// Known free Zen models (as fallback)
|
|
35
|
+
const KNOWN_ZEN_FREE_MODELS = [
|
|
36
|
+
{ id: 'minimax-m2.5-free', name: 'MiniMax M2.5 Free' },
|
|
37
|
+
{ id: 'zen-free', name: 'Zen Free' },
|
|
38
|
+
{ id: 'glm-5-free', name: 'GLM-5 Free' },
|
|
39
|
+
];
|
|
40
|
+
// Known Gemini models
|
|
41
|
+
const KNOWN_GEMINI_MODELS = [
|
|
42
|
+
{ id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash', recommended: true },
|
|
43
|
+
{ id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro' },
|
|
44
|
+
{ id: 'gemini-2.0-flash', name: 'Gemini 2.0 Flash' },
|
|
45
|
+
{ id: 'gemini-1.5-flash', name: 'Gemini 1.5 Flash' },
|
|
46
|
+
{ id: 'gemini-1.5-pro', name: 'Gemini 1.5 Pro' },
|
|
47
|
+
];
|
|
48
|
+
async function fetchZenModels() {
|
|
49
|
+
// Try to fetch from opencode CLI command - fallback to hardcoded list
|
|
50
|
+
try {
|
|
51
|
+
const { stdout } = await execAsync('opencode models opencode --verbose', {
|
|
52
|
+
timeout: 30000,
|
|
53
|
+
});
|
|
54
|
+
// Output format: "opencode/model-id\n{...json...}\nopencode/model-id\n{...json...}"
|
|
55
|
+
const parts = stdout.split(/^opencode\//m);
|
|
56
|
+
const models = [];
|
|
57
|
+
for (const part of parts) {
|
|
58
|
+
if (!part.trim())
|
|
59
|
+
continue;
|
|
60
|
+
const start = part.indexOf('{');
|
|
61
|
+
if (start >= 0) {
|
|
62
|
+
let braceCount = 0;
|
|
63
|
+
let end = start;
|
|
64
|
+
for (let i = start; i < part.length; i++) {
|
|
65
|
+
if (part[i] === '{')
|
|
66
|
+
braceCount++;
|
|
67
|
+
else if (part[i] === '}')
|
|
68
|
+
braceCount--;
|
|
69
|
+
if (braceCount === 0) {
|
|
70
|
+
end = i + 1;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
models.push(JSON.parse(part.slice(start, end)));
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Skip invalid JSON for this model
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const parsedModels = models
|
|
83
|
+
.filter((m) => m.cost?.input === 0 && m.cost?.output === 0)
|
|
84
|
+
.map((m) => {
|
|
85
|
+
const capabilities = m.capabilities;
|
|
86
|
+
return {
|
|
87
|
+
id: m.id,
|
|
88
|
+
name: m.name || m.id,
|
|
89
|
+
provider: 'zen',
|
|
90
|
+
isFree: true,
|
|
91
|
+
capabilities,
|
|
92
|
+
score: calculateScore(capabilities),
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
// Find max score and mark all models with that score as recommended
|
|
96
|
+
const maxScore = Math.max(...parsedModels.map(m => m.score ?? 10));
|
|
97
|
+
return parsedModels.map(m => ({
|
|
98
|
+
...m,
|
|
99
|
+
isRecommended: (m.score ?? 10) === maxScore,
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Fallback to known models
|
|
104
|
+
}
|
|
105
|
+
return KNOWN_ZEN_FREE_MODELS.map(m => ({
|
|
106
|
+
...m,
|
|
107
|
+
provider: 'zen',
|
|
108
|
+
isFree: true,
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
function getGeminiModels() {
|
|
112
|
+
return KNOWN_GEMINI_MODELS.map(m => ({
|
|
113
|
+
id: m.id,
|
|
114
|
+
name: m.name,
|
|
115
|
+
provider: 'google',
|
|
116
|
+
isRecommended: m.recommended,
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
119
|
+
async function fetchAllModels() {
|
|
120
|
+
const [zen, gemini] = await Promise.all([
|
|
121
|
+
fetchZenModels(),
|
|
122
|
+
Promise.resolve(getGeminiModels()),
|
|
123
|
+
]);
|
|
124
|
+
return { zen, gemini };
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/commands/plugins.ts"],"names":[],"mappings":"AACA,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAK7C;AAGD,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,YAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAgB9F"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getRequiredPlugins = getRequiredPlugins;
|
|
4
|
+
exports.mergePluginConfig = mergePluginConfig;
|
|
5
|
+
// Required plugins for OpenCode
|
|
6
|
+
function getRequiredPlugins() {
|
|
7
|
+
return [
|
|
8
|
+
'opencode-gemini-auth@latest',
|
|
9
|
+
'oh-my-opencode@latest',
|
|
10
|
+
];
|
|
11
|
+
}
|
|
12
|
+
// Merge plugins - add required if missing
|
|
13
|
+
function mergePluginConfig(existingPlugins = [], required) {
|
|
14
|
+
const existing = new Set(existingPlugins);
|
|
15
|
+
const merged = [...existingPlugins];
|
|
16
|
+
for (const plugin of required) {
|
|
17
|
+
const baseName = plugin.replace(/@latest$/, '');
|
|
18
|
+
const hasPlugin = existing.has(plugin) ||
|
|
19
|
+
existing.has(baseName) ||
|
|
20
|
+
existing.has(`${baseName}@latest`);
|
|
21
|
+
if (!hasPlugin) {
|
|
22
|
+
merged.push(plugin);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return merged;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/commands/plugins.ts"],"names":[],"mappings":";;AACA,gDAKC;AAGD,8CAgBC;AAzBD,gCAAgC;AAChC,SAAgB,kBAAkB;IAChC,OAAO;QACL,6BAA6B;QAC7B,uBAAuB;KACxB,CAAC;AACJ,CAAC;AAED,0CAA0C;AAC1C,SAAgB,iBAAiB,CAAC,kBAA4B,EAAE,EAAE,QAAkB;IAClF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;IAEpC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YACpB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YACtB,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,SAAS,CAAC,CAAC;QAErD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|