opencode-gemini-cli-oauth 1.0.0 ā 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -11
- package/dist/cli/setup.d.ts +3 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +132 -0
- package/dist/cli/setup.js.map +1 -0
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -28,23 +28,26 @@ This plugin integrates Gemini CLI's OAuth authentication with OpenCode, allowing
|
|
|
28
28
|
### Install Plugin
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
#
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
# Install globally from NPM
|
|
32
|
+
npm install -g opencode-gemini-cli-oauth
|
|
33
|
+
```
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
npm install
|
|
35
|
+
### ā” Easy Setup (Recommended)
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
npm run build
|
|
37
|
+
Run the setup wizard to automatically configure OpenCode with Gemini models:
|
|
40
38
|
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
```bash
|
|
40
|
+
opencode-gemini-setup
|
|
43
41
|
```
|
|
44
42
|
|
|
45
|
-
|
|
43
|
+
This will:
|
|
44
|
+
1. Check your Gemini CLI authentication
|
|
45
|
+
2. Login if needed
|
|
46
|
+
3. Configure `opencode.json` with the latest models (Gemini 2.0, 1.5, etc.)
|
|
47
|
+
|
|
48
|
+
### Manual Configuration
|
|
46
49
|
|
|
47
|
-
|
|
50
|
+
If you prefer to configure manually, add to `~/.config/opencode/opencode.json`:
|
|
48
51
|
|
|
49
52
|
```json
|
|
50
53
|
{
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import fs from 'fs/promises';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import os from 'os';
|
|
6
|
+
import readline from 'readline';
|
|
7
|
+
const GEMINI_DIR = path.join(os.homedir(), '.gemini');
|
|
8
|
+
const OPENCODE_CONFIG_DIR = path.join(os.homedir(), '.config', 'opencode');
|
|
9
|
+
const OPENCODE_CONFIG_PATH = path.join(OPENCODE_CONFIG_DIR, 'opencode.json');
|
|
10
|
+
const OAUTH_CREDS_PATH = path.join(GEMINI_DIR, 'oauth_creds.json');
|
|
11
|
+
const MODELS_CONFIG = {
|
|
12
|
+
"gemini-cli-oauth": {
|
|
13
|
+
"npm": "opencode-gemini-cli-oauth",
|
|
14
|
+
"models": {
|
|
15
|
+
"gemini-2.0-flash-exp": {
|
|
16
|
+
"name": "Gemini 2.0 Flash (Google Account)",
|
|
17
|
+
"limit": { "context": 1048576, "output": 8192 },
|
|
18
|
+
"modalities": { "input": ["text", "image", "audio", "video"], "output": ["text"] }
|
|
19
|
+
},
|
|
20
|
+
"gemini-1.5-pro-latest": {
|
|
21
|
+
"name": "Gemini 1.5 Pro (Google Account)",
|
|
22
|
+
"limit": { "context": 2097152, "output": 8192 },
|
|
23
|
+
"modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }
|
|
24
|
+
},
|
|
25
|
+
"gemini-1.5-flash-latest": {
|
|
26
|
+
"name": "Gemini 1.5 Flash (Google Account)",
|
|
27
|
+
"limit": { "context": 1048576, "output": 8192 },
|
|
28
|
+
"modalities": { "input": ["text", "image", "audio", "video", "pdf"], "output": ["text"] }
|
|
29
|
+
},
|
|
30
|
+
"gemini-exp-1206": {
|
|
31
|
+
"name": "Gemini Experimental 1206 (Google Account)",
|
|
32
|
+
"limit": { "context": 2097152, "output": 8192 },
|
|
33
|
+
"modalities": { "input": ["text", "image"], "output": ["text"] }
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const rl = readline.createInterface({
|
|
39
|
+
input: process.stdin,
|
|
40
|
+
output: process.stdout
|
|
41
|
+
});
|
|
42
|
+
const question = (query) => {
|
|
43
|
+
return new Promise((resolve) => rl.question(query, resolve));
|
|
44
|
+
};
|
|
45
|
+
async function checkGeminiCliInstalled() {
|
|
46
|
+
return new Promise((resolve) => {
|
|
47
|
+
const check = spawn('gemini', ['--version']);
|
|
48
|
+
check.on('error', () => resolve(false));
|
|
49
|
+
check.on('close', (code) => resolve(code === 0));
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async function runGeminiLogin() {
|
|
53
|
+
console.log('\nš Initiating Gemini CLI Login...');
|
|
54
|
+
console.log('This will open your browser to authenticate with Google.');
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
const login = spawn('gemini', ['auth', 'login'], { stdio: 'inherit' });
|
|
57
|
+
login.on('close', (code) => {
|
|
58
|
+
if (code === 0)
|
|
59
|
+
resolve();
|
|
60
|
+
else
|
|
61
|
+
reject(new Error('Login failed'));
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
async function updateOpencodeConfig() {
|
|
66
|
+
try {
|
|
67
|
+
await fs.mkdir(OPENCODE_CONFIG_DIR, { recursive: true });
|
|
68
|
+
let config = {};
|
|
69
|
+
try {
|
|
70
|
+
const content = await fs.readFile(OPENCODE_CONFIG_PATH, 'utf-8');
|
|
71
|
+
config = JSON.parse(content);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
console.log('Creating new OpenCode configuration file...');
|
|
75
|
+
}
|
|
76
|
+
// Ensure provider section exists
|
|
77
|
+
if (!config.provider)
|
|
78
|
+
config.provider = {};
|
|
79
|
+
// Merge our models
|
|
80
|
+
console.log('\nš¦ Configuring models in opencode.json...');
|
|
81
|
+
config.provider['gemini-cli-oauth'] = MODELS_CONFIG['gemini-cli-oauth'];
|
|
82
|
+
// Ensure plugin is listed
|
|
83
|
+
if (!config.plugin)
|
|
84
|
+
config.plugin = [];
|
|
85
|
+
if (!config.plugin.includes('opencode-gemini-cli-oauth')) {
|
|
86
|
+
config.plugin.push('opencode-gemini-cli-oauth');
|
|
87
|
+
}
|
|
88
|
+
await fs.writeFile(OPENCODE_CONFIG_PATH, JSON.stringify(config, null, 2));
|
|
89
|
+
console.log('ā
Configuration updated successfully!');
|
|
90
|
+
console.log(` Location: ${OPENCODE_CONFIG_PATH}`);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
console.error('ā Failed to update configuration:', error);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function main() {
|
|
97
|
+
console.log('š OpenCode Gemini CLI OAuth Setup');
|
|
98
|
+
console.log('==================================');
|
|
99
|
+
// 1. Check Gemini CLI
|
|
100
|
+
const hasGemini = await checkGeminiCliInstalled();
|
|
101
|
+
if (!hasGemini) {
|
|
102
|
+
console.error('ā Gemini CLI is not installed.');
|
|
103
|
+
console.log('Please install it first: npm install -g @google/gemini-cli');
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
// 2. Check Auth
|
|
107
|
+
try {
|
|
108
|
+
await fs.access(OAUTH_CREDS_PATH);
|
|
109
|
+
console.log('ā
OAuth credentials found.');
|
|
110
|
+
const answer = await question('Do you want to re-authenticate? (y/N) ');
|
|
111
|
+
if (answer.toLowerCase() === 'y') {
|
|
112
|
+
await runGeminiLogin();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
console.log('ā ļø No OAuth credentials found.');
|
|
117
|
+
const answer = await question('Do you want to login now? (Y/n) ');
|
|
118
|
+
if (answer.toLowerCase() !== 'n') {
|
|
119
|
+
await runGeminiLogin();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// 3. Update Config
|
|
123
|
+
const updateConfig = await question('Do you want to automatically configure OpenCode models? (Y/n) ');
|
|
124
|
+
if (updateConfig.toLowerCase() !== 'n') {
|
|
125
|
+
await updateOpencodeConfig();
|
|
126
|
+
}
|
|
127
|
+
console.log('\n⨠Setup Complete!');
|
|
128
|
+
console.log('You can now use "Gemini (Google Account)" models in OpenCode.');
|
|
129
|
+
rl.close();
|
|
130
|
+
}
|
|
131
|
+
main().catch(console.error);
|
|
132
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-gemini-cli-oauth",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "OpenCode plugin for Gemini CLI OAuth authentication - use Google account quota without API keys",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index-minimal.js",
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
"ai",
|
|
20
20
|
"plugin"
|
|
21
21
|
],
|
|
22
|
+
"bin": {
|
|
23
|
+
"opencode-gemini-setup": "./dist/cli/setup.js"
|
|
24
|
+
},
|
|
22
25
|
"files": [
|
|
23
26
|
"dist",
|
|
24
27
|
"LICENSE",
|