adacode 0.3.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 +56 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +803 -0
- package/dist/index.js.map +1 -0
- package/package.json +46 -0
package/README.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# adacode
|
|
2
|
+
|
|
3
|
+
> Satu perintah untuk setup Vibe Coding dengan **adaAI Platform**.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx adacode
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Pilihan CLI
|
|
10
|
+
|
|
11
|
+
| CLI | Kegunaan | Setelah Setup |
|
|
12
|
+
|-----|----------|---------------|
|
|
13
|
+
| **CodeX** | Coding assistant OpenAI | `codex` |
|
|
14
|
+
| **Claude Code** | Coding assistant Anthropic | `claude` |
|
|
15
|
+
| **OpenCode** | Terminal IDE berbasis AI | `opencode` |
|
|
16
|
+
| **OpenClaw** | AI Gateway (WhatsApp, Telegram, dll.) | `npx openclaw gateway --bind lan` |
|
|
17
|
+
|
|
18
|
+
## Cara Pakai
|
|
19
|
+
|
|
20
|
+
1. Jalankan `npx adacode`
|
|
21
|
+
2. Pilih bahasa (English / Bahasa Indonesia)
|
|
22
|
+
3. Pilih CLI yang ingin dikonfigurasi
|
|
23
|
+
4. Paste API key adaAI → [adaai.id/api-keys](https://adaai.id/api-keys)
|
|
24
|
+
5. Selesai — langsung pakai!
|
|
25
|
+
|
|
26
|
+
### OpenClaw
|
|
27
|
+
|
|
28
|
+
Gateway token di-generate **otomatis** via API. Setelah setup:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Terminal 1: jalankan gateway
|
|
32
|
+
npx openclaw gateway --bind lan
|
|
33
|
+
|
|
34
|
+
# Terminal 2: buka dashboard
|
|
35
|
+
npx openclaw dashboard
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## File yang Dikonfigurasi
|
|
39
|
+
|
|
40
|
+
| CLI | File |
|
|
41
|
+
|-----|------|
|
|
42
|
+
| CodeX | `~/.codex/config.toml`, `~/.codex/auth.json` |
|
|
43
|
+
| Claude Code | `~/.claude/settings.json` |
|
|
44
|
+
| OpenCode | `~/.config/opencode/opencode.json` |
|
|
45
|
+
| OpenClaw | `~/.openclaw/openclaw.json` |
|
|
46
|
+
|
|
47
|
+
## Fitur
|
|
48
|
+
|
|
49
|
+
- **Zero-install** — cukup `npx adacode`
|
|
50
|
+
- **Bilingual** — English & Bahasa Indonesia (auto-detect)
|
|
51
|
+
- **Safe backup** — file `.bak` otomatis sebelum overwrite
|
|
52
|
+
- **Cross-platform** — Windows, macOS, Linux
|
|
53
|
+
|
|
54
|
+
## License
|
|
55
|
+
|
|
56
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,803 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
|
+
const kleur_1 = __importDefault(require("kleur"));
|
|
10
|
+
const os_1 = require("os");
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
13
|
+
const fs_1 = require("fs");
|
|
14
|
+
const node_crypto_1 = require("node:crypto");
|
|
15
|
+
// ─── Configuration ───────────────────────────────────────────────────────────
|
|
16
|
+
const PLATFORM_NAME = 'adaAI';
|
|
17
|
+
const API_KEY_URL = 'https://adaai.id/api-keys';
|
|
18
|
+
const DOCS_URL = 'https://adaai.id/vibe-coding';
|
|
19
|
+
// Base URLs for adaAI API proxy
|
|
20
|
+
const CODEX_BASE_URL = 'https://api.adaai.id/v1';
|
|
21
|
+
const CLAUDE_BASE_URL_DEFAULT = 'https://api.adaai.id';
|
|
22
|
+
const OPENCLAW_BASE_URL_DEFAULT = 'https://api.adaai.id/v1';
|
|
23
|
+
const OPENCODE_BASE_URL_DEFAULT = 'https://api.adaai.id/v1';
|
|
24
|
+
// Generate a secure random gateway token (fallback if user doesn't provide one)
|
|
25
|
+
const generateGatewayToken = () => (0, node_crypto_1.randomBytes)(32).toString('hex');
|
|
26
|
+
// ─── Translations ────────────────────────────────────────────────────────────
|
|
27
|
+
const TRANSLATIONS = {
|
|
28
|
+
en: {
|
|
29
|
+
welcome: `🚀 Ready to configure your AI coding CLI with ${PLATFORM_NAME}? Let's get started.`,
|
|
30
|
+
languagePrompt: 'Select the language for this setup wizard',
|
|
31
|
+
languageChoices: [
|
|
32
|
+
{ value: 'en', title: 'English (Default)' },
|
|
33
|
+
{ value: 'id', title: 'Bahasa Indonesia' },
|
|
34
|
+
],
|
|
35
|
+
cancel: 'Setup cancelled. Nothing was changed.',
|
|
36
|
+
targetPrompt: 'Which CLI do you want to configure today?',
|
|
37
|
+
targets: {
|
|
38
|
+
codex: 'CodeX (OpenAI\'s coding assistant)',
|
|
39
|
+
claude: 'Claude Code (Anthropic)',
|
|
40
|
+
openclaw: 'OpenClaw (AI Gateway for WhatsApp, Telegram, etc.)',
|
|
41
|
+
opencode: 'OpenCode (AI-powered terminal IDE)',
|
|
42
|
+
},
|
|
43
|
+
startInstall: (command) => `Running ${command} to make sure everything is up to date...`,
|
|
44
|
+
installSuccess: 'Installation check completed.',
|
|
45
|
+
installFailed: 'Installation failed. Please review the errors above and run the wizard again.',
|
|
46
|
+
confirmOverwrite: 'We will backup your current configuration (.bak files) and write the adaAI settings. Continue?',
|
|
47
|
+
declineOverwrite: 'Understood. No files were touched.',
|
|
48
|
+
installConfirm: (command) => `Run ${command} now to ensure you have the latest release?`,
|
|
49
|
+
installSkipped: 'Skipped installation. We\'ll use the version already on your machine.',
|
|
50
|
+
yes: 'Yes',
|
|
51
|
+
no: 'No',
|
|
52
|
+
codexModelPrompt: 'Pick the default CodeX model to set in config.toml',
|
|
53
|
+
codexModels: [
|
|
54
|
+
{ value: 'gpt-5.3', title: 'GPT-5.3 (recommended)', description: 'Best balance of speed and quality' },
|
|
55
|
+
{ value: 'gpt-5.3-instant', title: 'GPT-5.3 Instant (fast)', description: 'Faster, cost-effective' },
|
|
56
|
+
{ value: 'gpt-5.4-thinking', title: 'GPT-5.4 Thinking (advanced reasoning)', description: 'Most capable model' },
|
|
57
|
+
],
|
|
58
|
+
apiKeyPrompt: `Paste your ${PLATFORM_NAME} API key (open ${API_KEY_URL} if you need to create one)`,
|
|
59
|
+
apiKeyHint: 'Your API key is stored locally on this device only.',
|
|
60
|
+
apiKeyValidation: 'Please enter a non-empty API key.',
|
|
61
|
+
claudeBaseUrlPrompt: 'Enter the Claude Code base URL to use',
|
|
62
|
+
claudeBaseUrlHint: `Press enter to use ${CLAUDE_BASE_URL_DEFAULT}`,
|
|
63
|
+
baseUrlValidation: 'Please enter a valid base URL.',
|
|
64
|
+
writingConfig: 'Writing configuration files...',
|
|
65
|
+
backupDone: (file) => `Backup saved: ${file}`,
|
|
66
|
+
noBackupNeeded: (file) => `No existing file found at ${file}.`,
|
|
67
|
+
configWritten: (file) => `Updated ${file}`,
|
|
68
|
+
finished: (targetLabel) => `✅ All done! ${targetLabel} is now configured for ${PLATFORM_NAME}.`,
|
|
69
|
+
docsHint: `Tip: run \`npx adacode\` anytime you want to switch setups again. Docs: ${DOCS_URL}`,
|
|
70
|
+
openclawBaseUrlPrompt: 'Enter the adaAI API base URL for OpenClaw',
|
|
71
|
+
openclawBaseUrlHint: `Press enter to use ${OPENCLAW_BASE_URL_DEFAULT}`,
|
|
72
|
+
openclawTokenGenerated: (token) => `🔑 Gateway Token: ${token}`,
|
|
73
|
+
openclawTokenInfo: 'This token is used to authenticate your OpenClaw Gateway connection.',
|
|
74
|
+
openclawRunHint: 'Start your gateway with:',
|
|
75
|
+
openclawDashboardHint: 'Need a UI? Run `openclaw dashboard` to open the Mission Control dashboard.',
|
|
76
|
+
gatewayTokenAutoGen: '🔄 Auto-generating Gateway Token via adaAI API...',
|
|
77
|
+
gatewayTokenSuccess: '✅ Gateway Token generated and saved automatically!',
|
|
78
|
+
gatewayTokenFailed: '❌ Failed to auto-generate Gateway Token. Please check your API key and try again.',
|
|
79
|
+
opencodeBaseUrlPrompt: 'Enter the adaAI API base URL for OpenCode',
|
|
80
|
+
opencodeBaseUrlHint: `Must end with /v1 (e.g. http://localhost:3009/v1) - Press enter to use ${OPENCODE_BASE_URL_DEFAULT}`,
|
|
81
|
+
opencodeModelPrompt: 'Pick the default model for OpenCode',
|
|
82
|
+
opencodeModels: [
|
|
83
|
+
{ value: 'claude-sonnet-4-6', title: 'Claude Sonnet 4.6 (recommended)', description: 'Best balance of speed and quality' },
|
|
84
|
+
{ value: 'claude-opus-4-6', title: 'Claude Opus 4.6', description: 'Most capable model' },
|
|
85
|
+
{ value: 'claude-haiku-4-5', title: 'Claude Haiku 4.5', description: 'Fast and cost-effective' },
|
|
86
|
+
{ value: 'gpt-5.3', title: 'GPT-5.3', description: 'OpenAI latest model' },
|
|
87
|
+
{ value: 'gemini-3-flash', title: 'Gemini 3 Flash', description: 'Google\'s fast model' },
|
|
88
|
+
],
|
|
89
|
+
opencodeEnvWarning: '⚠️ Detected environment variables that may conflict with OpenCode:',
|
|
90
|
+
opencodeEnvClean: '✅ No conflicting environment variables detected. You\'re good to go!',
|
|
91
|
+
opencodeEnvFoundHint: (envVar, command) => ` ${envVar} is set → run: ${command}`,
|
|
92
|
+
opencodeRunHint: 'Navigate to your project directory and run:',
|
|
93
|
+
opencodeSelectModelHint: 'Then enter /models and select your configured model.',
|
|
94
|
+
},
|
|
95
|
+
id: {
|
|
96
|
+
welcome: `🚀 Siap konfigurasi CLI coding AI Anda dengan ${PLATFORM_NAME}? Mari mulai.`,
|
|
97
|
+
languagePrompt: 'Pilih bahasa untuk wizard ini',
|
|
98
|
+
languageChoices: [
|
|
99
|
+
{ value: 'en', title: 'English' },
|
|
100
|
+
{ value: 'id', title: 'Bahasa Indonesia (Default)' },
|
|
101
|
+
],
|
|
102
|
+
cancel: 'Setup dibatalkan. Tidak ada file yang diubah.',
|
|
103
|
+
targetPrompt: 'CLI mana yang ingin Anda konfigurasi?',
|
|
104
|
+
targets: {
|
|
105
|
+
codex: 'CodeX (asisten coding OpenAI)',
|
|
106
|
+
claude: 'Claude Code (Anthropic)',
|
|
107
|
+
openclaw: 'OpenClaw (AI Gateway untuk WhatsApp, Telegram, dll.)',
|
|
108
|
+
opencode: 'OpenCode (IDE terminal berbasis AI)',
|
|
109
|
+
},
|
|
110
|
+
startInstall: (command) => `Menjalankan ${command} untuk memastikan versi terbaru...`,
|
|
111
|
+
installSuccess: 'Pengecekan instalasi selesai.',
|
|
112
|
+
installFailed: 'Instalasi gagal. Silakan periksa error di atas dan jalankan wizard lagi.',
|
|
113
|
+
confirmOverwrite: 'Kami akan membackup konfigurasi Anda saat ini (file .bak) lalu menulis pengaturan adaAI. Lanjutkan?',
|
|
114
|
+
declineOverwrite: 'Dipahami. Tidak ada file yang diubah.',
|
|
115
|
+
installConfirm: (command) => `Jalankan ${command} sekarang untuk memastikan versi terbaru?`,
|
|
116
|
+
installSkipped: 'Instalasi dilewati. Akan menggunakan versi yang sudah ada di mesin Anda.',
|
|
117
|
+
yes: 'Ya',
|
|
118
|
+
no: 'Tidak',
|
|
119
|
+
codexModelPrompt: 'Pilih model CodeX default untuk config.toml',
|
|
120
|
+
codexModels: [
|
|
121
|
+
{ value: 'gpt-5.3', title: 'GPT-5.3 (direkomendasikan)', description: 'Keseimbangan terbaik kecepatan dan kualitas' },
|
|
122
|
+
{ value: 'gpt-5.3-instant', title: 'GPT-5.3 Instant (cepat)', description: 'Lebih cepat, hemat biaya' },
|
|
123
|
+
{ value: 'gpt-5.4-thinking', title: 'GPT-5.4 Thinking (reasoning lanjutan)', description: 'Model paling canggih' },
|
|
124
|
+
],
|
|
125
|
+
apiKeyPrompt: `Tempel API key ${PLATFORM_NAME} Anda (buka ${API_KEY_URL} jika perlu membuat)`,
|
|
126
|
+
apiKeyHint: 'API key hanya disimpan di perangkat Anda.',
|
|
127
|
+
apiKeyValidation: 'API key tidak boleh kosong.',
|
|
128
|
+
claudeBaseUrlPrompt: 'Masukkan base URL Claude Code yang akan digunakan',
|
|
129
|
+
claudeBaseUrlHint: `Tekan enter untuk menggunakan ${CLAUDE_BASE_URL_DEFAULT}`,
|
|
130
|
+
baseUrlValidation: 'Masukkan base URL yang valid.',
|
|
131
|
+
writingConfig: 'Menulis file konfigurasi...',
|
|
132
|
+
backupDone: (file) => `Backup tersimpan: ${file}`,
|
|
133
|
+
noBackupNeeded: (file) => `Tidak ada file ditemukan di ${file}.`,
|
|
134
|
+
configWritten: (file) => `Diperbarui ${file}`,
|
|
135
|
+
finished: (targetLabel) => `✅ Selesai! ${targetLabel} sekarang terkonfigurasi untuk ${PLATFORM_NAME}.`,
|
|
136
|
+
docsHint: `Tips: jalankan \`npx adacode\` kapan saja untuk mengubah konfigurasi. Docs: ${DOCS_URL}`,
|
|
137
|
+
openclawBaseUrlPrompt: 'Masukkan base URL API adaAI untuk OpenClaw',
|
|
138
|
+
openclawBaseUrlHint: `Tekan enter untuk menggunakan ${OPENCLAW_BASE_URL_DEFAULT}`,
|
|
139
|
+
openclawTokenGenerated: (token) => `🔑 Gateway Token: ${token}`,
|
|
140
|
+
openclawTokenInfo: 'Token ini digunakan untuk mengautentikasi koneksi OpenClaw Gateway Anda.',
|
|
141
|
+
openclawRunHint: 'Jalankan gateway dengan:',
|
|
142
|
+
openclawDashboardHint: 'Butuh UI? Jalankan `openclaw dashboard` untuk membuka Mission Control dashboard.',
|
|
143
|
+
gatewayTokenAutoGen: '🔄 Membuat Gateway Token otomatis via API adaAI...',
|
|
144
|
+
gatewayTokenSuccess: '✅ Gateway Token berhasil dibuat dan disimpan otomatis!',
|
|
145
|
+
gatewayTokenFailed: '❌ Gagal membuat Gateway Token otomatis. Periksa API key Anda dan coba lagi.',
|
|
146
|
+
opencodeBaseUrlPrompt: 'Masukkan base URL API adaAI untuk OpenCode',
|
|
147
|
+
opencodeBaseUrlHint: `Wajib diakhiri dengan /v1 (contoh: http://localhost:3009/v1) - Tekan enter untuk menggunakan ${OPENCODE_BASE_URL_DEFAULT}`,
|
|
148
|
+
opencodeModelPrompt: 'Pilih model default untuk OpenCode',
|
|
149
|
+
opencodeModels: [
|
|
150
|
+
{ value: 'claude-sonnet-4-6', title: 'Claude Sonnet 4.6 (direkomendasikan)', description: 'Keseimbangan terbaik kecepatan dan kualitas' },
|
|
151
|
+
{ value: 'claude-opus-4-6', title: 'Claude Opus 4.6', description: 'Model paling canggih' },
|
|
152
|
+
{ value: 'claude-haiku-4-5', title: 'Claude Haiku 4.5', description: 'Cepat dan hemat biaya' },
|
|
153
|
+
{ value: 'gpt-5.3', title: 'GPT-5.3', description: 'Model terbaru OpenAI' },
|
|
154
|
+
{ value: 'gemini-3-flash', title: 'Gemini 3 Flash', description: 'Model cepat dari Google' },
|
|
155
|
+
],
|
|
156
|
+
opencodeEnvWarning: '⚠️ Terdeteksi environment variable yang mungkin konflik dengan OpenCode:',
|
|
157
|
+
opencodeEnvClean: '✅ Tidak ada environment variable yang konflik. Semua aman!',
|
|
158
|
+
opencodeEnvFoundHint: (envVar, command) => ` ${envVar} aktif → jalankan: ${command}`,
|
|
159
|
+
opencodeRunHint: 'Buka direktori proyek Anda dan jalankan:',
|
|
160
|
+
opencodeSelectModelHint: 'Lalu ketik /models dan pilih model yang sudah dikonfigurasi.',
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
164
|
+
const detectLanguage = () => {
|
|
165
|
+
const env = process.env.LANG || process.env.LANGUAGE || process.env.LC_ALL || process.env.LC_MESSAGES || '';
|
|
166
|
+
if (env.toLowerCase().startsWith('id') || env.toLowerCase().startsWith('in')) {
|
|
167
|
+
return 'id';
|
|
168
|
+
}
|
|
169
|
+
return 'en';
|
|
170
|
+
};
|
|
171
|
+
const formatTimestamp = () => {
|
|
172
|
+
const date = new Date();
|
|
173
|
+
const pad = (n) => n.toString().padStart(2, '0');
|
|
174
|
+
return (date.getFullYear().toString() +
|
|
175
|
+
pad(date.getMonth() + 1) +
|
|
176
|
+
pad(date.getDate()) +
|
|
177
|
+
'-' +
|
|
178
|
+
pad(date.getHours()) +
|
|
179
|
+
pad(date.getMinutes()) +
|
|
180
|
+
pad(date.getSeconds()));
|
|
181
|
+
};
|
|
182
|
+
const ensureDir = async (filePath) => {
|
|
183
|
+
const dir = path_1.default.dirname(filePath);
|
|
184
|
+
await promises_1.default.mkdir(dir, { recursive: true });
|
|
185
|
+
};
|
|
186
|
+
const backupFile = async (filePath) => {
|
|
187
|
+
if (!(0, fs_1.existsSync)(filePath)) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
const backupPath = `${filePath}.${formatTimestamp()}.bak`;
|
|
191
|
+
await promises_1.default.copyFile(filePath, backupPath);
|
|
192
|
+
return backupPath;
|
|
193
|
+
};
|
|
194
|
+
const writeFileSafely = async (filePath, content) => {
|
|
195
|
+
await ensureDir(filePath);
|
|
196
|
+
await promises_1.default.writeFile(filePath, content, 'utf8');
|
|
197
|
+
};
|
|
198
|
+
const runInstallCommand = async (command, args, lang) => {
|
|
199
|
+
const messages = TRANSLATIONS[lang];
|
|
200
|
+
console.log();
|
|
201
|
+
const printable = [command, ...args].join(' ');
|
|
202
|
+
console.log(kleur_1.default.cyan(messages.startInstall(printable)));
|
|
203
|
+
return await new Promise((resolve) => {
|
|
204
|
+
const child = (0, child_process_1.spawn)(command, args, {
|
|
205
|
+
stdio: 'inherit',
|
|
206
|
+
shell: process.platform === 'win32',
|
|
207
|
+
});
|
|
208
|
+
child.on('error', (error) => {
|
|
209
|
+
console.error(kleur_1.default.red(messages.installFailed));
|
|
210
|
+
console.error(error);
|
|
211
|
+
resolve(false);
|
|
212
|
+
});
|
|
213
|
+
child.on('close', (code) => {
|
|
214
|
+
if (code === 0) {
|
|
215
|
+
console.log(kleur_1.default.green(messages.installSuccess));
|
|
216
|
+
resolve(true);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
console.error(kleur_1.default.red(messages.installFailed));
|
|
220
|
+
resolve(false);
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
};
|
|
225
|
+
const onCancel = (lang) => {
|
|
226
|
+
const messages = TRANSLATIONS[lang];
|
|
227
|
+
console.log();
|
|
228
|
+
console.log(kleur_1.default.yellow(messages.cancel));
|
|
229
|
+
process.exit(0);
|
|
230
|
+
};
|
|
231
|
+
const printBanner = () => {
|
|
232
|
+
console.log();
|
|
233
|
+
console.log(kleur_1.default.bold().cyan(' ┌─────────────────────────────────────┐'));
|
|
234
|
+
console.log(kleur_1.default.bold().cyan(' │ │'));
|
|
235
|
+
console.log(kleur_1.default.bold().cyan(' │ ') + kleur_1.default.bold().white('⚡ adaAI Vibe Coding Setup ⚡') + kleur_1.default.bold().cyan(' │'));
|
|
236
|
+
console.log(kleur_1.default.bold().cyan(' │ │'));
|
|
237
|
+
console.log(kleur_1.default.bold().cyan(' │ ') + kleur_1.default.gray('Configure CodeX, Claude Code, ') + kleur_1.default.bold().cyan(' │'));
|
|
238
|
+
console.log(kleur_1.default.bold().cyan(' │ ') + kleur_1.default.gray('OpenCode, or OpenClaw for ') + kleur_1.default.bold().cyan(' │'));
|
|
239
|
+
console.log(kleur_1.default.bold().cyan(' │ ') + kleur_1.default.gray('adaAI Platform ') + kleur_1.default.bold().cyan(' │'));
|
|
240
|
+
console.log(kleur_1.default.bold().cyan(' │ │'));
|
|
241
|
+
console.log(kleur_1.default.bold().cyan(' └─────────────────────────────────────┘'));
|
|
242
|
+
console.log();
|
|
243
|
+
};
|
|
244
|
+
// ─── Configure CodeX ─────────────────────────────────────────────────────────
|
|
245
|
+
const configureCodex = async (lang) => {
|
|
246
|
+
const messages = TRANSLATIONS[lang];
|
|
247
|
+
// Step 1: Offer to install/update CodeX CLI
|
|
248
|
+
const codexInstallArgs = ['install', '-g', '@openai/codex'];
|
|
249
|
+
const codexInstallCommand = ['npm', ...codexInstallArgs];
|
|
250
|
+
const { runInstall } = await (0, prompts_1.default)({
|
|
251
|
+
type: 'toggle',
|
|
252
|
+
name: 'runInstall',
|
|
253
|
+
message: messages.installConfirm(codexInstallCommand.join(' ')),
|
|
254
|
+
initial: true,
|
|
255
|
+
active: messages.yes,
|
|
256
|
+
inactive: messages.no,
|
|
257
|
+
}, { onCancel: () => onCancel(lang) });
|
|
258
|
+
if (runInstall) {
|
|
259
|
+
const installOk = await runInstallCommand('npm', codexInstallArgs, lang);
|
|
260
|
+
if (!installOk) {
|
|
261
|
+
process.exit(1);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
console.log(kleur_1.default.yellow(messages.installSkipped));
|
|
266
|
+
}
|
|
267
|
+
const targetLabel = messages.targets.codex;
|
|
268
|
+
// Step 2: Confirm overwrite
|
|
269
|
+
const overwriteAnswer = await (0, prompts_1.default)({
|
|
270
|
+
type: 'toggle',
|
|
271
|
+
name: 'confirm',
|
|
272
|
+
message: messages.confirmOverwrite,
|
|
273
|
+
initial: true,
|
|
274
|
+
active: messages.yes,
|
|
275
|
+
inactive: messages.no,
|
|
276
|
+
}, { onCancel: () => onCancel(lang) });
|
|
277
|
+
if (!overwriteAnswer.confirm) {
|
|
278
|
+
console.log(kleur_1.default.yellow(messages.declineOverwrite));
|
|
279
|
+
process.exit(0);
|
|
280
|
+
}
|
|
281
|
+
// Step 3: Choose model
|
|
282
|
+
const { model } = await (0, prompts_1.default)({
|
|
283
|
+
type: 'select',
|
|
284
|
+
name: 'model',
|
|
285
|
+
message: messages.codexModelPrompt,
|
|
286
|
+
choices: messages.codexModels,
|
|
287
|
+
initial: 0,
|
|
288
|
+
}, { onCancel: () => onCancel(lang) });
|
|
289
|
+
const selectedModel = model || 'gpt-5.3';
|
|
290
|
+
// Step 4: Get API key
|
|
291
|
+
const { apiKey } = await (0, prompts_1.default)([
|
|
292
|
+
{
|
|
293
|
+
type: 'password',
|
|
294
|
+
name: 'apiKey',
|
|
295
|
+
message: `${messages.apiKeyPrompt}\n`,
|
|
296
|
+
validate: (value) => value.trim().length > 0 ? true : messages.apiKeyValidation,
|
|
297
|
+
hint: messages.apiKeyHint,
|
|
298
|
+
},
|
|
299
|
+
], { onCancel: () => onCancel(lang) });
|
|
300
|
+
const sanitizedApiKey = apiKey.trim();
|
|
301
|
+
// Step 5: Write config files
|
|
302
|
+
const configPath = path_1.default.join((0, os_1.homedir)(), '.codex', 'config.toml');
|
|
303
|
+
const authPath = path_1.default.join((0, os_1.homedir)(), '.codex', 'auth.json');
|
|
304
|
+
console.log();
|
|
305
|
+
console.log(kleur_1.default.cyan(messages.writingConfig));
|
|
306
|
+
// Backup existing files
|
|
307
|
+
const configBackup = await backupFile(configPath);
|
|
308
|
+
if (configBackup) {
|
|
309
|
+
console.log(kleur_1.default.gray(messages.backupDone(configBackup)));
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
console.log(kleur_1.default.gray(messages.noBackupNeeded(configPath)));
|
|
313
|
+
}
|
|
314
|
+
const authBackup = await backupFile(authPath);
|
|
315
|
+
if (authBackup) {
|
|
316
|
+
console.log(kleur_1.default.gray(messages.backupDone(authBackup)));
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
console.log(kleur_1.default.gray(messages.noBackupNeeded(authPath)));
|
|
320
|
+
}
|
|
321
|
+
// Write config.toml
|
|
322
|
+
const configContent = `# adaAI Platform - CodeX Configuration
|
|
323
|
+
# Generated by npx adacode on ${new Date().toISOString()}
|
|
324
|
+
# Docs: ${DOCS_URL}
|
|
325
|
+
|
|
326
|
+
model_provider = "adaai"
|
|
327
|
+
model = "${selectedModel}"
|
|
328
|
+
model_reasoning_effort = "high"
|
|
329
|
+
disable_response_storage = true
|
|
330
|
+
preferred_auth_method = "apikey"
|
|
331
|
+
|
|
332
|
+
[model_providers.adaai]
|
|
333
|
+
name = "adaai"
|
|
334
|
+
base_url = "${CODEX_BASE_URL}"
|
|
335
|
+
wire_api = "responses"
|
|
336
|
+
`;
|
|
337
|
+
// Write auth.json
|
|
338
|
+
const authContent = JSON.stringify({ OPENAI_API_KEY: sanitizedApiKey }, null, 2) + '\n';
|
|
339
|
+
await writeFileSafely(configPath, configContent);
|
|
340
|
+
await writeFileSafely(authPath, authContent);
|
|
341
|
+
console.log(kleur_1.default.green(messages.configWritten(configPath)));
|
|
342
|
+
console.log(kleur_1.default.green(messages.configWritten(authPath)));
|
|
343
|
+
console.log();
|
|
344
|
+
console.log(kleur_1.default.bold().green(messages.finished(targetLabel)));
|
|
345
|
+
console.log(kleur_1.default.gray(messages.docsHint));
|
|
346
|
+
console.log();
|
|
347
|
+
console.log(kleur_1.default.cyan(' Run ') + kleur_1.default.bold().white('codex') + kleur_1.default.cyan(' to start coding!'));
|
|
348
|
+
console.log();
|
|
349
|
+
};
|
|
350
|
+
// ─── Configure Claude Code ───────────────────────────────────────────────────
|
|
351
|
+
const configureClaude = async (lang) => {
|
|
352
|
+
const messages = TRANSLATIONS[lang];
|
|
353
|
+
// Step 1: Offer to install/update Claude Code CLI
|
|
354
|
+
const claudeInstallArgs = ['install', '-g', '@anthropic-ai/claude-code'];
|
|
355
|
+
const claudeInstallCommand = ['npm', ...claudeInstallArgs];
|
|
356
|
+
const { runInstall } = await (0, prompts_1.default)({
|
|
357
|
+
type: 'toggle',
|
|
358
|
+
name: 'runInstall',
|
|
359
|
+
message: messages.installConfirm(claudeInstallCommand.join(' ')),
|
|
360
|
+
initial: true,
|
|
361
|
+
active: messages.yes,
|
|
362
|
+
inactive: messages.no,
|
|
363
|
+
}, { onCancel: () => onCancel(lang) });
|
|
364
|
+
if (runInstall) {
|
|
365
|
+
const installOk = await runInstallCommand('npm', claudeInstallArgs, lang);
|
|
366
|
+
if (!installOk) {
|
|
367
|
+
process.exit(1);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
console.log(kleur_1.default.yellow(messages.installSkipped));
|
|
372
|
+
}
|
|
373
|
+
const targetLabel = messages.targets.claude;
|
|
374
|
+
// Step 2: Confirm overwrite
|
|
375
|
+
const overwriteAnswer = await (0, prompts_1.default)({
|
|
376
|
+
type: 'toggle',
|
|
377
|
+
name: 'confirm',
|
|
378
|
+
message: messages.confirmOverwrite,
|
|
379
|
+
initial: true,
|
|
380
|
+
active: messages.yes,
|
|
381
|
+
inactive: messages.no,
|
|
382
|
+
}, { onCancel: () => onCancel(lang) });
|
|
383
|
+
if (!overwriteAnswer.confirm) {
|
|
384
|
+
console.log(kleur_1.default.yellow(messages.declineOverwrite));
|
|
385
|
+
process.exit(0);
|
|
386
|
+
}
|
|
387
|
+
// Step 3: Get API key
|
|
388
|
+
const { apiKey } = await (0, prompts_1.default)([
|
|
389
|
+
{
|
|
390
|
+
type: 'password',
|
|
391
|
+
name: 'apiKey',
|
|
392
|
+
message: `${messages.apiKeyPrompt}\n`,
|
|
393
|
+
validate: (value) => value.trim().length > 0 ? true : messages.apiKeyValidation,
|
|
394
|
+
hint: messages.apiKeyHint,
|
|
395
|
+
},
|
|
396
|
+
], { onCancel: () => onCancel(lang) });
|
|
397
|
+
const sanitizedApiKey = apiKey.trim();
|
|
398
|
+
const normalizedBaseUrl = CLAUDE_BASE_URL_DEFAULT.endsWith('/') ? CLAUDE_BASE_URL_DEFAULT : `${CLAUDE_BASE_URL_DEFAULT}/`;
|
|
399
|
+
// Step 4: Write settings.json
|
|
400
|
+
const settingsPath = path_1.default.join((0, os_1.homedir)(), '.claude', 'settings.json');
|
|
401
|
+
console.log();
|
|
402
|
+
console.log(kleur_1.default.cyan(messages.writingConfig));
|
|
403
|
+
const settingsBackup = await backupFile(settingsPath);
|
|
404
|
+
if (settingsBackup) {
|
|
405
|
+
console.log(kleur_1.default.gray(messages.backupDone(settingsBackup)));
|
|
406
|
+
}
|
|
407
|
+
else {
|
|
408
|
+
console.log(kleur_1.default.gray(messages.noBackupNeeded(settingsPath)));
|
|
409
|
+
}
|
|
410
|
+
const settingsContent = JSON.stringify({
|
|
411
|
+
env: {
|
|
412
|
+
ANTHROPIC_API_KEY: sanitizedApiKey,
|
|
413
|
+
ANTHROPIC_BASE_URL: normalizedBaseUrl,
|
|
414
|
+
DISABLE_TELEMETRY: '1',
|
|
415
|
+
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: '1',
|
|
416
|
+
},
|
|
417
|
+
model: 'sonnet',
|
|
418
|
+
includeCoAuthoredBy: false,
|
|
419
|
+
apiKeyHelper: `echo ${sanitizedApiKey}`,
|
|
420
|
+
permissions: {
|
|
421
|
+
allow: [],
|
|
422
|
+
deny: [],
|
|
423
|
+
},
|
|
424
|
+
}, null, 2);
|
|
425
|
+
await writeFileSafely(settingsPath, settingsContent + '\n');
|
|
426
|
+
console.log(kleur_1.default.green(messages.configWritten(settingsPath)));
|
|
427
|
+
console.log();
|
|
428
|
+
console.log(kleur_1.default.bold().green(messages.finished(targetLabel)));
|
|
429
|
+
console.log(kleur_1.default.gray(messages.docsHint));
|
|
430
|
+
console.log();
|
|
431
|
+
console.log(kleur_1.default.cyan(' Run ') + kleur_1.default.bold().white('claude') + kleur_1.default.cyan(' to start coding!'));
|
|
432
|
+
console.log();
|
|
433
|
+
};
|
|
434
|
+
// ─── Configure OpenClaw ──────────────────────────────────────────────────────
|
|
435
|
+
const configureOpenClaw = async (lang) => {
|
|
436
|
+
const messages = TRANSLATIONS[lang];
|
|
437
|
+
// Step 1: Offer to install/update OpenClaw
|
|
438
|
+
const openclawInstallArgs = ['install', '-g', 'openclaw'];
|
|
439
|
+
const openclawInstallCommand = ['npm', ...openclawInstallArgs];
|
|
440
|
+
const { runInstall } = await (0, prompts_1.default)({
|
|
441
|
+
type: 'toggle',
|
|
442
|
+
name: 'runInstall',
|
|
443
|
+
message: messages.installConfirm(openclawInstallCommand.join(' ')),
|
|
444
|
+
initial: true,
|
|
445
|
+
active: messages.yes,
|
|
446
|
+
inactive: messages.no,
|
|
447
|
+
}, { onCancel: () => onCancel(lang) });
|
|
448
|
+
if (runInstall) {
|
|
449
|
+
const installOk = await runInstallCommand('npm', openclawInstallArgs, lang);
|
|
450
|
+
if (!installOk) {
|
|
451
|
+
process.exit(1);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
console.log(kleur_1.default.yellow(messages.installSkipped));
|
|
456
|
+
}
|
|
457
|
+
const targetLabel = messages.targets.openclaw;
|
|
458
|
+
// Step 2: Confirm overwrite
|
|
459
|
+
const overwriteAnswer = await (0, prompts_1.default)({
|
|
460
|
+
type: 'toggle',
|
|
461
|
+
name: 'confirm',
|
|
462
|
+
message: messages.confirmOverwrite,
|
|
463
|
+
initial: true,
|
|
464
|
+
active: messages.yes,
|
|
465
|
+
inactive: messages.no,
|
|
466
|
+
}, { onCancel: () => onCancel(lang) });
|
|
467
|
+
if (!overwriteAnswer.confirm) {
|
|
468
|
+
console.log(kleur_1.default.yellow(messages.declineOverwrite));
|
|
469
|
+
process.exit(0);
|
|
470
|
+
}
|
|
471
|
+
// Step 3: Get API key only (gateway token will be auto-generated)
|
|
472
|
+
const { apiKey } = await (0, prompts_1.default)([
|
|
473
|
+
{
|
|
474
|
+
type: 'password',
|
|
475
|
+
name: 'apiKey',
|
|
476
|
+
message: `${messages.apiKeyPrompt}\n`,
|
|
477
|
+
validate: (value) => value.trim().length > 0 ? true : messages.apiKeyValidation,
|
|
478
|
+
hint: messages.apiKeyHint,
|
|
479
|
+
},
|
|
480
|
+
], { onCancel: () => onCancel(lang) });
|
|
481
|
+
const sanitizedApiKey = apiKey.trim();
|
|
482
|
+
const normalizedBaseUrl = OPENCLAW_BASE_URL_DEFAULT.replace(/\/+$/, '');
|
|
483
|
+
// Step 3b: Auto-generate gateway token via adaAI API
|
|
484
|
+
console.log();
|
|
485
|
+
console.log(kleur_1.default.cyan(messages.gatewayTokenAutoGen));
|
|
486
|
+
let gatewayToken = '';
|
|
487
|
+
try {
|
|
488
|
+
const response = await fetch(`${API_KEY_URL.replace('/api-keys', '')}/api/openclaw/ensure-gateway-token`, {
|
|
489
|
+
method: 'POST',
|
|
490
|
+
headers: {
|
|
491
|
+
'Authorization': `Bearer ${sanitizedApiKey}`,
|
|
492
|
+
'Content-Type': 'application/json',
|
|
493
|
+
},
|
|
494
|
+
});
|
|
495
|
+
if (response.ok) {
|
|
496
|
+
const data = await response.json();
|
|
497
|
+
if (data && data.ok && data.token) {
|
|
498
|
+
gatewayToken = data.token;
|
|
499
|
+
console.log(kleur_1.default.green(messages.gatewayTokenSuccess));
|
|
500
|
+
}
|
|
501
|
+
else {
|
|
502
|
+
throw new Error('Invalid response from API');
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
throw new Error(`API returned ${response.status}`);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
catch (err) {
|
|
510
|
+
console.log(kleur_1.default.red(messages.gatewayTokenFailed));
|
|
511
|
+
console.log(kleur_1.default.gray(` Error: ${err.message}`));
|
|
512
|
+
gatewayToken = generateGatewayToken();
|
|
513
|
+
console.log(kleur_1.default.yellow(' ⚠️ Using locally generated token as fallback.'));
|
|
514
|
+
console.log(kleur_1.default.gray(messages.openclawTokenGenerated(gatewayToken.substring(0, 8) + '...')));
|
|
515
|
+
}
|
|
516
|
+
// Step 4: Write ~/.openclaw/openclaw.json
|
|
517
|
+
const configPath = path_1.default.join((0, os_1.homedir)(), '.openclaw', 'openclaw.json');
|
|
518
|
+
console.log();
|
|
519
|
+
console.log(kleur_1.default.cyan(messages.writingConfig));
|
|
520
|
+
const configBackup = await backupFile(configPath);
|
|
521
|
+
if (configBackup) {
|
|
522
|
+
console.log(kleur_1.default.gray(messages.backupDone(configBackup)));
|
|
523
|
+
}
|
|
524
|
+
else {
|
|
525
|
+
console.log(kleur_1.default.gray(messages.noBackupNeeded(configPath)));
|
|
526
|
+
}
|
|
527
|
+
const openclawConfig = {
|
|
528
|
+
models: {
|
|
529
|
+
mode: 'merge',
|
|
530
|
+
providers: {
|
|
531
|
+
adaai: {
|
|
532
|
+
baseUrl: normalizedBaseUrl,
|
|
533
|
+
apiKey: sanitizedApiKey,
|
|
534
|
+
api: 'openai-completions',
|
|
535
|
+
models: [
|
|
536
|
+
{
|
|
537
|
+
id: 'claude-sonnet-4-6',
|
|
538
|
+
name: 'Claude Sonnet 4.6',
|
|
539
|
+
reasoning: false,
|
|
540
|
+
input: ['text', 'image'],
|
|
541
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
542
|
+
contextWindow: 200000,
|
|
543
|
+
maxTokens: 65536,
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
id: 'claude-opus-4-6',
|
|
547
|
+
name: 'Claude Opus 4.6',
|
|
548
|
+
reasoning: false,
|
|
549
|
+
input: ['text', 'image'],
|
|
550
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
551
|
+
contextWindow: 200000,
|
|
552
|
+
maxTokens: 65536,
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
id: 'claude-haiku-4-5',
|
|
556
|
+
name: 'Claude Haiku 4.5',
|
|
557
|
+
reasoning: false,
|
|
558
|
+
input: ['text', 'image'],
|
|
559
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
560
|
+
contextWindow: 200000,
|
|
561
|
+
maxTokens: 65536,
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
id: 'gpt-5.3',
|
|
565
|
+
name: 'GPT-5.3',
|
|
566
|
+
reasoning: false,
|
|
567
|
+
input: ['text', 'image'],
|
|
568
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
569
|
+
contextWindow: 128000,
|
|
570
|
+
maxTokens: 16384,
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
id: 'gemini-3-flash',
|
|
574
|
+
name: 'Gemini 3 Flash',
|
|
575
|
+
reasoning: false,
|
|
576
|
+
input: ['text', 'image'],
|
|
577
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
578
|
+
contextWindow: 1000000,
|
|
579
|
+
maxTokens: 65536,
|
|
580
|
+
},
|
|
581
|
+
{
|
|
582
|
+
id: 'glm-4.7',
|
|
583
|
+
name: 'GLM-4.7',
|
|
584
|
+
reasoning: false,
|
|
585
|
+
input: ['text'],
|
|
586
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
587
|
+
contextWindow: 202752,
|
|
588
|
+
maxTokens: 16384,
|
|
589
|
+
},
|
|
590
|
+
],
|
|
591
|
+
},
|
|
592
|
+
},
|
|
593
|
+
},
|
|
594
|
+
agents: {
|
|
595
|
+
defaults: {
|
|
596
|
+
model: {
|
|
597
|
+
primary: 'adaai/claude-sonnet-4-6',
|
|
598
|
+
},
|
|
599
|
+
models: {
|
|
600
|
+
'adaai/claude-sonnet-4-6': {},
|
|
601
|
+
'adaai/claude-opus-4-6': {},
|
|
602
|
+
'adaai/claude-haiku-4-5': {},
|
|
603
|
+
'adaai/gpt-5.3': {},
|
|
604
|
+
'adaai/gemini-3-flash': {},
|
|
605
|
+
'adaai/glm-4.7': {},
|
|
606
|
+
},
|
|
607
|
+
},
|
|
608
|
+
},
|
|
609
|
+
gateway: {
|
|
610
|
+
mode: 'local',
|
|
611
|
+
auth: {
|
|
612
|
+
mode: 'token',
|
|
613
|
+
token: gatewayToken,
|
|
614
|
+
},
|
|
615
|
+
controlUi: {
|
|
616
|
+
dangerouslyAllowHostHeaderOriginFallback: true,
|
|
617
|
+
},
|
|
618
|
+
},
|
|
619
|
+
};
|
|
620
|
+
await writeFileSafely(configPath, JSON.stringify(openclawConfig, null, 2) + '\n');
|
|
621
|
+
console.log(kleur_1.default.green(messages.configWritten(configPath)));
|
|
622
|
+
console.log();
|
|
623
|
+
console.log(kleur_1.default.bold().green(messages.finished(targetLabel)));
|
|
624
|
+
console.log(kleur_1.default.gray(messages.docsHint));
|
|
625
|
+
console.log();
|
|
626
|
+
console.log(kleur_1.default.cyan(` ${messages.openclawRunHint}`));
|
|
627
|
+
console.log(kleur_1.default.bold().white(' npx openclaw gateway --bind lan'));
|
|
628
|
+
console.log();
|
|
629
|
+
console.log(kleur_1.default.cyan(' Buka dashboard dengan:'));
|
|
630
|
+
console.log(kleur_1.default.bold().white(' npx openclaw dashboard'));
|
|
631
|
+
console.log();
|
|
632
|
+
};
|
|
633
|
+
// ─── Configure OpenCode ──────────────────────────────────────────────────────
|
|
634
|
+
const configureOpenCode = async (lang) => {
|
|
635
|
+
const messages = TRANSLATIONS[lang];
|
|
636
|
+
// Step 1: Offer to install/update OpenCode CLI
|
|
637
|
+
const opencodeInstallArgs = ['install', '-g', 'opencode-ai'];
|
|
638
|
+
const opencodeInstallCommand = ['npm', ...opencodeInstallArgs];
|
|
639
|
+
const { runInstall } = await (0, prompts_1.default)({
|
|
640
|
+
type: 'toggle',
|
|
641
|
+
name: 'runInstall',
|
|
642
|
+
message: messages.installConfirm(opencodeInstallCommand.join(' ')),
|
|
643
|
+
initial: true,
|
|
644
|
+
active: messages.yes,
|
|
645
|
+
inactive: messages.no,
|
|
646
|
+
}, { onCancel: () => onCancel(lang) });
|
|
647
|
+
if (runInstall) {
|
|
648
|
+
const installOk = await runInstallCommand('npm', opencodeInstallArgs, lang);
|
|
649
|
+
if (!installOk) {
|
|
650
|
+
process.exit(1);
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
else {
|
|
654
|
+
console.log(kleur_1.default.yellow(messages.installSkipped));
|
|
655
|
+
}
|
|
656
|
+
const targetLabel = messages.targets.opencode;
|
|
657
|
+
// Step 2: Confirm overwrite
|
|
658
|
+
const overwriteAnswer = await (0, prompts_1.default)({
|
|
659
|
+
type: 'toggle',
|
|
660
|
+
name: 'confirm',
|
|
661
|
+
message: messages.confirmOverwrite,
|
|
662
|
+
initial: true,
|
|
663
|
+
active: messages.yes,
|
|
664
|
+
inactive: messages.no,
|
|
665
|
+
}, { onCancel: () => onCancel(lang) });
|
|
666
|
+
if (!overwriteAnswer.confirm) {
|
|
667
|
+
console.log(kleur_1.default.yellow(messages.declineOverwrite));
|
|
668
|
+
process.exit(0);
|
|
669
|
+
}
|
|
670
|
+
// Step 2: Get API key
|
|
671
|
+
const { apiKey } = await (0, prompts_1.default)([
|
|
672
|
+
{
|
|
673
|
+
type: 'password',
|
|
674
|
+
name: 'apiKey',
|
|
675
|
+
message: `${messages.apiKeyPrompt}\n`,
|
|
676
|
+
validate: (value) => value.trim().length > 0 ? true : messages.apiKeyValidation,
|
|
677
|
+
hint: messages.apiKeyHint,
|
|
678
|
+
},
|
|
679
|
+
], { onCancel: () => onCancel(lang) });
|
|
680
|
+
// Step 3: Choose default model
|
|
681
|
+
const { model } = await (0, prompts_1.default)({
|
|
682
|
+
type: 'select',
|
|
683
|
+
name: 'model',
|
|
684
|
+
message: messages.opencodeModelPrompt,
|
|
685
|
+
choices: messages.opencodeModels,
|
|
686
|
+
initial: 0,
|
|
687
|
+
}, { onCancel: () => onCancel(lang) });
|
|
688
|
+
const sanitizedApiKey = apiKey.trim();
|
|
689
|
+
const normalizedBaseUrl = OPENCODE_BASE_URL_DEFAULT.replace(/\/+$/, '');
|
|
690
|
+
const selectedModel = model || 'claude-sonnet-4-6';
|
|
691
|
+
// Step 4: Write ~/.config/opencode/opencode.json
|
|
692
|
+
const configPath = path_1.default.join((0, os_1.homedir)(), '.config', 'opencode', 'opencode.json');
|
|
693
|
+
console.log();
|
|
694
|
+
console.log(kleur_1.default.cyan(messages.writingConfig));
|
|
695
|
+
const configBackup = await backupFile(configPath);
|
|
696
|
+
if (configBackup) {
|
|
697
|
+
console.log(kleur_1.default.gray(messages.backupDone(configBackup)));
|
|
698
|
+
}
|
|
699
|
+
else {
|
|
700
|
+
console.log(kleur_1.default.gray(messages.noBackupNeeded(configPath)));
|
|
701
|
+
}
|
|
702
|
+
// Build the models object with all available models
|
|
703
|
+
const modelsConfig = {};
|
|
704
|
+
for (const m of messages.opencodeModels) {
|
|
705
|
+
modelsConfig[m.value] = { name: m.title.replace(/ \(.*\)$/, '') };
|
|
706
|
+
}
|
|
707
|
+
const opencodeConfig = {
|
|
708
|
+
$schema: 'https://opencode.ai/config.json',
|
|
709
|
+
provider: {
|
|
710
|
+
adaai: {
|
|
711
|
+
npm: '@ai-sdk/openai-compatible',
|
|
712
|
+
options: {
|
|
713
|
+
baseURL: normalizedBaseUrl,
|
|
714
|
+
apiKey: sanitizedApiKey,
|
|
715
|
+
name: 'adaai',
|
|
716
|
+
},
|
|
717
|
+
models: modelsConfig,
|
|
718
|
+
},
|
|
719
|
+
},
|
|
720
|
+
};
|
|
721
|
+
await writeFileSafely(configPath, JSON.stringify(opencodeConfig, null, 2) + '\n');
|
|
722
|
+
console.log(kleur_1.default.green(messages.configWritten(configPath)));
|
|
723
|
+
console.log();
|
|
724
|
+
// Check for conflicting environment variables
|
|
725
|
+
const conflictingEnvVars = ['ANTHROPIC_AUTH_TOKEN', 'ANTHROPIC_BASE_URL'];
|
|
726
|
+
const foundEnvVars = conflictingEnvVars.filter((v) => process.env[v]);
|
|
727
|
+
if (foundEnvVars.length > 0) {
|
|
728
|
+
console.log(kleur_1.default.yellow(messages.opencodeEnvWarning));
|
|
729
|
+
const isWindows = process.platform === 'win32';
|
|
730
|
+
for (const envVar of foundEnvVars) {
|
|
731
|
+
const command = isWindows
|
|
732
|
+
? `Remove-Item Env:\\${envVar}`
|
|
733
|
+
: `unset ${envVar}`;
|
|
734
|
+
console.log(kleur_1.default.yellow(messages.opencodeEnvFoundHint(envVar, command)));
|
|
735
|
+
}
|
|
736
|
+
console.log();
|
|
737
|
+
}
|
|
738
|
+
else {
|
|
739
|
+
console.log(kleur_1.default.green(messages.opencodeEnvClean));
|
|
740
|
+
console.log();
|
|
741
|
+
}
|
|
742
|
+
console.log(kleur_1.default.bold().green(messages.finished(targetLabel)));
|
|
743
|
+
console.log(kleur_1.default.gray(messages.docsHint));
|
|
744
|
+
console.log();
|
|
745
|
+
console.log(kleur_1.default.cyan(` ${messages.opencodeRunHint}`));
|
|
746
|
+
console.log(kleur_1.default.bold().white(' opencode'));
|
|
747
|
+
console.log();
|
|
748
|
+
console.log(kleur_1.default.gray(` ${messages.opencodeSelectModelHint}`));
|
|
749
|
+
console.log();
|
|
750
|
+
};
|
|
751
|
+
// ─── Main ────────────────────────────────────────────────────────────────────
|
|
752
|
+
const main = async () => {
|
|
753
|
+
printBanner();
|
|
754
|
+
const defaultLang = detectLanguage();
|
|
755
|
+
const initialChoiceIndex = TRANSLATIONS[defaultLang].languageChoices.findIndex((choice) => choice.value === defaultLang);
|
|
756
|
+
// Step 1: Language selection
|
|
757
|
+
const languageChoice = await (0, prompts_1.default)({
|
|
758
|
+
type: 'select',
|
|
759
|
+
name: 'language',
|
|
760
|
+
message: TRANSLATIONS[defaultLang].languagePrompt,
|
|
761
|
+
choices: TRANSLATIONS[defaultLang].languageChoices,
|
|
762
|
+
initial: initialChoiceIndex >= 0 ? initialChoiceIndex : 0,
|
|
763
|
+
}, { onCancel: () => onCancel(defaultLang) });
|
|
764
|
+
const lang = (languageChoice.language || defaultLang);
|
|
765
|
+
const messages = TRANSLATIONS[lang];
|
|
766
|
+
console.log();
|
|
767
|
+
console.log(kleur_1.default.bold().magenta(messages.welcome));
|
|
768
|
+
console.log();
|
|
769
|
+
// Step 2: Choose target CLI
|
|
770
|
+
const { target } = await (0, prompts_1.default)({
|
|
771
|
+
type: 'select',
|
|
772
|
+
name: 'target',
|
|
773
|
+
message: messages.targetPrompt,
|
|
774
|
+
choices: [
|
|
775
|
+
{ title: messages.targets.codex, value: 'codex' },
|
|
776
|
+
{ title: messages.targets.claude, value: 'claude' },
|
|
777
|
+
{ title: messages.targets.opencode, value: 'opencode' },
|
|
778
|
+
{ title: messages.targets.openclaw, value: 'openclaw' },
|
|
779
|
+
],
|
|
780
|
+
initial: 0,
|
|
781
|
+
}, { onCancel: () => onCancel(lang) });
|
|
782
|
+
// Step 3: Run target configuration
|
|
783
|
+
if (target === 'codex') {
|
|
784
|
+
await configureCodex(lang);
|
|
785
|
+
}
|
|
786
|
+
else if (target === 'claude') {
|
|
787
|
+
await configureClaude(lang);
|
|
788
|
+
}
|
|
789
|
+
else if (target === 'opencode') {
|
|
790
|
+
await configureOpenCode(lang);
|
|
791
|
+
}
|
|
792
|
+
else if (target === 'openclaw') {
|
|
793
|
+
await configureOpenClaw(lang);
|
|
794
|
+
}
|
|
795
|
+
else {
|
|
796
|
+
onCancel(lang);
|
|
797
|
+
}
|
|
798
|
+
};
|
|
799
|
+
main().catch((error) => {
|
|
800
|
+
console.error(error);
|
|
801
|
+
process.exit(1);
|
|
802
|
+
});
|
|
803
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "adacode",
|
|
3
|
+
"version": "0.3.1",
|
|
4
|
+
"description": "Interactive CLI wizard to configure CodeX or Claude Code for adaAI Platform API access.",
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"adacode": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"clean": "rimraf dist",
|
|
16
|
+
"lint": "tsc --noEmit",
|
|
17
|
+
"dev": "ts-node src/index.ts",
|
|
18
|
+
"start": "node dist/index.js",
|
|
19
|
+
"prepublishOnly": "pnpm run build"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"codex",
|
|
23
|
+
"claude",
|
|
24
|
+
"cli",
|
|
25
|
+
"adaai",
|
|
26
|
+
"vibe-coding"
|
|
27
|
+
],
|
|
28
|
+
"author": "adaAI Platform",
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"kleur": "^4.1.5",
|
|
32
|
+
"prompts": "^2.4.2"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/node": "^20.0.0",
|
|
36
|
+
"@types/prompts": "^2.4.9",
|
|
37
|
+
"rimraf": "^5.0.0",
|
|
38
|
+
"ts-node": "^10.9.0",
|
|
39
|
+
"typescript": "^5.5.0"
|
|
40
|
+
},
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "git+https://github.com/angga-ada-AI/adacode.git"
|
|
44
|
+
},
|
|
45
|
+
"homepage": "https://adaai.id"
|
|
46
|
+
}
|