codexctl 0.1.1 → 0.1.2
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 -21
- package/bin/{poly → cdx} +1 -1
- package/bin/{polycli → codexctl} +1 -1
- package/install.js +10 -10
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,57 +1,50 @@
|
|
|
1
|
-
#
|
|
1
|
+
# CodexCTL
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Codex CLI Profile Manager - Manage multiple OpenAI Codex CLI accounts
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install -g
|
|
8
|
+
npm install -g codexctl
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Or use npx (no install):
|
|
12
12
|
```bash
|
|
13
|
-
npx
|
|
13
|
+
npx codexctl --help
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
## Usage
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
# Save your current
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
# Save your current Codex CLI profile
|
|
20
|
+
cdx save work
|
|
21
|
+
cdx save personal
|
|
22
22
|
|
|
23
23
|
# Switch between profiles
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
cdx load work
|
|
25
|
+
cdx load personal
|
|
26
26
|
|
|
27
27
|
# List all profiles
|
|
28
|
-
|
|
28
|
+
cdx list
|
|
29
29
|
|
|
30
30
|
# Quick-switch to previous profile
|
|
31
|
-
|
|
31
|
+
cdx load -
|
|
32
32
|
|
|
33
33
|
# Auto-switch to best profile based on quota
|
|
34
|
-
|
|
34
|
+
cdx load auto
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
## Supported AI CLIs
|
|
38
|
-
|
|
39
|
-
- **Codex CLI** (`poly codex`)
|
|
40
|
-
- **Claude Code** (`poly claude`)
|
|
41
|
-
- **Gemini CLI** (`poly gemini`)
|
|
42
|
-
- **OpenAI CLI** (`poly openai`)
|
|
43
|
-
|
|
44
37
|
## Features
|
|
45
38
|
|
|
46
39
|
- 🔐 **Optional Encryption** - age-based encryption for sensitive auth data
|
|
47
40
|
- 🚀 **Fast Switching** - Switch accounts in < 1 second
|
|
48
41
|
- 🤖 **Auto-Switcher** - Automatically pick the best profile based on quota
|
|
49
|
-
- 📊 **Real-Time Quota** - Live usage data from
|
|
42
|
+
- 📊 **Real-Time Quota** - Live usage data from OpenAI API
|
|
50
43
|
- 🌳 **Concurrent Usage** - Use multiple profiles simultaneously
|
|
51
44
|
|
|
52
45
|
## Documentation
|
|
53
46
|
|
|
54
|
-
Full documentation: https://
|
|
47
|
+
Full documentation: https://codexctl.repohelper.com
|
|
55
48
|
|
|
56
49
|
## License
|
|
57
50
|
|
package/bin/{poly → cdx}
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const { spawn } = require('child_process');
|
|
3
3
|
const path = require('path');
|
|
4
4
|
|
|
5
|
-
const binaryPath = path.join(__dirname, '..', 'bin', '
|
|
5
|
+
const binaryPath = path.join(__dirname, '..', 'bin', 'cdx');
|
|
6
6
|
const child = spawn(binaryPath, process.argv.slice(2), {
|
|
7
7
|
stdio: 'inherit',
|
|
8
8
|
windowsHide: true
|
package/bin/{polycli → codexctl}
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const { spawn } = require('child_process');
|
|
3
3
|
const path = require('path');
|
|
4
4
|
|
|
5
|
-
const binaryPath = path.join(__dirname, '..', 'bin', '
|
|
5
|
+
const binaryPath = path.join(__dirname, '..', 'bin', 'codexctl');
|
|
6
6
|
const child = spawn(binaryPath, process.argv.slice(2), {
|
|
7
7
|
stdio: 'inherit',
|
|
8
8
|
windowsHide: true
|
package/install.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* CodexCTL Installation Script
|
|
4
4
|
* Downloads the appropriate binary for the current platform
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@ const os = require('os');
|
|
|
11
11
|
const { execSync } = require('child_process');
|
|
12
12
|
|
|
13
13
|
const VERSION = require('./package.json').version;
|
|
14
|
-
const BINARY_NAME = '
|
|
14
|
+
const BINARY_NAME = 'codexctl';
|
|
15
15
|
|
|
16
16
|
// Platform mappings
|
|
17
17
|
const platforms = {
|
|
@@ -38,7 +38,7 @@ function getPlatform() {
|
|
|
38
38
|
|
|
39
39
|
function getDownloadUrl(target) {
|
|
40
40
|
const ext = target.includes('windows') ? 'zip' : 'tar.gz';
|
|
41
|
-
return `https://github.com/repohelper/
|
|
41
|
+
return `https://github.com/repohelper/codexctl/releases/download/v${VERSION}/codexctl-${target}.${ext}`;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
function downloadFile(url, dest) {
|
|
@@ -78,7 +78,7 @@ async function install() {
|
|
|
78
78
|
|
|
79
79
|
// Skip if binaries already exist (development or manual install)
|
|
80
80
|
if (fs.existsSync(path.join(binDir, BINARY_NAME))) {
|
|
81
|
-
console.log('
|
|
81
|
+
console.log('CodexCTL binaries already exist, skipping download');
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
84
84
|
|
|
@@ -90,9 +90,9 @@ async function install() {
|
|
|
90
90
|
const target = getPlatform();
|
|
91
91
|
const url = getDownloadUrl(target);
|
|
92
92
|
const ext = target.includes('windows') ? 'zip' : 'tar.gz';
|
|
93
|
-
const archivePath = path.join(binDir, `
|
|
93
|
+
const archivePath = path.join(binDir, `codexctl-${target}.${ext}`);
|
|
94
94
|
|
|
95
|
-
console.log(`Downloading
|
|
95
|
+
console.log(`Downloading CodexCTL v${VERSION} for ${target}...`);
|
|
96
96
|
console.log(`URL: ${url}`);
|
|
97
97
|
|
|
98
98
|
try {
|
|
@@ -105,14 +105,14 @@ async function install() {
|
|
|
105
105
|
// Make binaries executable on Unix
|
|
106
106
|
if (os.platform() !== 'win32') {
|
|
107
107
|
execSync(`chmod +x "${path.join(binDir, BINARY_NAME)}"`);
|
|
108
|
-
execSync(`chmod +x "${path.join(binDir, '
|
|
108
|
+
execSync(`chmod +x "${path.join(binDir, 'cdx')}"`);
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
console.log('
|
|
112
|
-
console.log('Run:
|
|
111
|
+
console.log('CodexCTL installed successfully!');
|
|
112
|
+
console.log('Run: cdx --help');
|
|
113
113
|
} catch (error) {
|
|
114
114
|
console.error('Installation failed:', error.message);
|
|
115
|
-
console.error('You can manually download from: https://github.com/repohelper/
|
|
115
|
+
console.error('You can manually download from: https://github.com/repohelper/codexctl/releases');
|
|
116
116
|
process.exit(1);
|
|
117
117
|
}
|
|
118
118
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codexctl",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Codex CLI Profile Manager - Manage multiple OpenAI Codex CLI accounts",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"codexctl": "./bin/codexctl",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
"repository": {
|
|
15
15
|
"type": "git",
|
|
16
|
-
"url": "git+https://github.com/repohelper/
|
|
16
|
+
"url": "git+https://github.com/repohelper/codexctl.git"
|
|
17
17
|
},
|
|
18
18
|
"keywords": [
|
|
19
19
|
"ai",
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
"author": "Bhanu Korthiwada",
|
|
30
30
|
"license": "MIT",
|
|
31
31
|
"bugs": {
|
|
32
|
-
"url": "https://github.com/repohelper/
|
|
32
|
+
"url": "https://github.com/repohelper/codexctl/issues"
|
|
33
33
|
},
|
|
34
|
-
"homepage": "https://
|
|
34
|
+
"homepage": "https://codexctl.repohelper.com",
|
|
35
35
|
"engines": {
|
|
36
36
|
"node": ">=16"
|
|
37
37
|
},
|