opencode-nim-rotator 0.0.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/LICENSE +21 -0
- package/README.md +201 -0
- package/bin/opencode-nim-rotator.ts +10 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +103 -0
- package/dist/index.js.map +1 -0
- package/dist/storage.d.ts +18 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +129 -0
- package/dist/storage.js.map +1 -0
- package/dist/themes.d.ts +64 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +422 -0
- package/dist/themes.js.map +1 -0
- package/dist/tui/actions.d.ts +3 -0
- package/dist/tui/actions.d.ts.map +1 -0
- package/dist/tui/actions.js +68 -0
- package/dist/tui/actions.js.map +1 -0
- package/dist/tui/app.d.ts +2 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +141 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/screens.d.ts +10 -0
- package/dist/tui/screens.d.ts.map +1 -0
- package/dist/tui/screens.js +316 -0
- package/dist/tui/screens.js.map +1 -0
- package/dist/tui/state.d.ts +29 -0
- package/dist/tui/state.d.ts.map +1 -0
- package/dist/tui/state.js +47 -0
- package/dist/tui/state.js.map +1 -0
- package/dist/tui/types.d.ts +12 -0
- package/dist/tui/types.d.ts.map +1 -0
- package/dist/tui/types.js +2 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/tui/ui.d.ts +17 -0
- package/dist/tui/ui.d.ts.map +1 -0
- package/dist/tui/ui.js +77 -0
- package/dist/tui/ui.js.map +1 -0
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +62 -0
- package/scripts/postinstall.js +69 -0
- package/scripts/uninstall.js +79 -0
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "opencode-nim-rotator",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "An OpenCode plugin for managing and rotating multiple NVIDIA NIM API keys",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"opencode-nim-rotator": "./bin/opencode-nim-rotator.ts"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"tui": "bun run bin/opencode-nim-rotator.ts",
|
|
14
|
+
"prepare": "npm run build",
|
|
15
|
+
"postinstall": "node scripts/postinstall.js",
|
|
16
|
+
"uninstall": "node scripts/uninstall.js",
|
|
17
|
+
"format": "prettier -w ."
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"opencode",
|
|
21
|
+
"plugin",
|
|
22
|
+
"nvidia",
|
|
23
|
+
"nim",
|
|
24
|
+
"api-key",
|
|
25
|
+
"rotation"
|
|
26
|
+
],
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "git+https://github.com/ChakornK/opencode-api-key-rotator.git"
|
|
30
|
+
},
|
|
31
|
+
"bugs": {
|
|
32
|
+
"url": "https://github.com/ChakornK/opencode-api-key-rotator/issues"
|
|
33
|
+
},
|
|
34
|
+
"homepage": "https://github.com/ChakornK/opencode-api-key-rotator#readme",
|
|
35
|
+
"author": "ChakornK",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"files": [
|
|
38
|
+
"dist",
|
|
39
|
+
"bin",
|
|
40
|
+
"scripts"
|
|
41
|
+
],
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@opencode-ai/plugin": "^1.15.10",
|
|
44
|
+
"@opentui/core": "^0.2.15"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/bun": "^1.3.14",
|
|
48
|
+
"prettier": "^3.8.3",
|
|
49
|
+
"typescript": "6.0.3"
|
|
50
|
+
},
|
|
51
|
+
"peerDependencies": {
|
|
52
|
+
"bun": ">=1.0.0"
|
|
53
|
+
},
|
|
54
|
+
"peerDependenciesMeta": {
|
|
55
|
+
"bun": {
|
|
56
|
+
"optional": true
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"engines": {
|
|
60
|
+
"node": ">=18.0.0"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { homedir } from "os";
|
|
5
|
+
import { existsSync } from "fs";
|
|
6
|
+
import { readFile, writeFile, mkdir } from "fs/promises";
|
|
7
|
+
|
|
8
|
+
const CONFIG_DIR = join(homedir(), ".config", "opencode");
|
|
9
|
+
const CONFIG_PATH = join(CONFIG_DIR, "opencode.json");
|
|
10
|
+
|
|
11
|
+
async function install() {
|
|
12
|
+
console.log(
|
|
13
|
+
"\n+=============================================================+",
|
|
14
|
+
);
|
|
15
|
+
console.log("| NVIDIA NIM API Key Rotator - Installer |");
|
|
16
|
+
console.log(
|
|
17
|
+
"+=============================================================+\n",
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
await mkdir(CONFIG_DIR, { recursive: true });
|
|
22
|
+
} catch (err) {
|
|
23
|
+
if (err.code !== "EEXIST") throw err;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (existsSync(CONFIG_PATH)) {
|
|
27
|
+
try {
|
|
28
|
+
const raw = await readFile(CONFIG_PATH, "utf-8");
|
|
29
|
+
const config = JSON.parse(raw);
|
|
30
|
+
|
|
31
|
+
config.plugin = config.plugin || [];
|
|
32
|
+
const hasPlugin = config.plugin.some(function (p) {
|
|
33
|
+
if (typeof p === "string") return p === "opencode-nim-rotator";
|
|
34
|
+
if (Array.isArray(p)) return p[0] === "opencode-nim-rotator";
|
|
35
|
+
return false;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
if (!hasPlugin) {
|
|
39
|
+
config.plugin.push("opencode-nim-rotator");
|
|
40
|
+
await writeFile(CONFIG_PATH, JSON.stringify(config, null, 2) + "\n", {
|
|
41
|
+
mode: 0o600,
|
|
42
|
+
});
|
|
43
|
+
console.log("Added opencode-nim-rotator to opencode.json plugin list");
|
|
44
|
+
} else {
|
|
45
|
+
console.log("Plugin already in opencode.json - skipping");
|
|
46
|
+
}
|
|
47
|
+
} catch (err) {
|
|
48
|
+
console.warn("Could not update opencode.json:", err);
|
|
49
|
+
}
|
|
50
|
+
} else {
|
|
51
|
+
const config = { plugin: ["opencode-nim-rotator"] };
|
|
52
|
+
await writeFile(CONFIG_PATH, JSON.stringify(config, null, 2) + "\n", {
|
|
53
|
+
mode: 0o600,
|
|
54
|
+
});
|
|
55
|
+
console.log("Created opencode.json with plugin entry");
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
console.log("\nNext steps:");
|
|
59
|
+
console.log(" 1. Run: bun opencode-nim-rotator (to manage your API keys)");
|
|
60
|
+
console.log(" 2. Add at least one NVIDIA NIM API key via the TUI");
|
|
61
|
+
console.log(
|
|
62
|
+
" 3. Restart opencode - the plugin will auto-rotate your keys\n",
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
await install().catch(function (err) {
|
|
67
|
+
console.error("Installation failed:", err);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
});
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { homedir } from "os";
|
|
5
|
+
import { existsSync } from "fs";
|
|
6
|
+
import { readFile, writeFile, unlink } from "fs/promises";
|
|
7
|
+
|
|
8
|
+
const CONFIG_DIR = join(homedir(), ".config", "opencode");
|
|
9
|
+
const CONFIG_PATH = join(CONFIG_DIR, "opencode.json");
|
|
10
|
+
const KEYSTORE_PATH = join(CONFIG_DIR, "nim-rotator-keys.json");
|
|
11
|
+
|
|
12
|
+
async function uninstall() {
|
|
13
|
+
console.log(
|
|
14
|
+
"\n+=============================================================+",
|
|
15
|
+
);
|
|
16
|
+
console.log("| NVIDIA NIM API Key Rotator - Uninstaller |");
|
|
17
|
+
console.log(
|
|
18
|
+
"+=============================================================+\n",
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
let configModified = false;
|
|
22
|
+
|
|
23
|
+
// Remove plugin from opencode.json
|
|
24
|
+
if (existsSync(CONFIG_PATH)) {
|
|
25
|
+
try {
|
|
26
|
+
const raw = await readFile(CONFIG_PATH, "utf-8");
|
|
27
|
+
const config = JSON.parse(raw);
|
|
28
|
+
|
|
29
|
+
if (Array.isArray(config.plugin)) {
|
|
30
|
+
const beforeLength = config.plugin.length;
|
|
31
|
+
config.plugin = config.plugin.filter(function (p) {
|
|
32
|
+
if (typeof p === "string") return p !== "opencode-nim-rotator";
|
|
33
|
+
if (Array.isArray(p)) return p[0] !== "opencode-nim-rotator";
|
|
34
|
+
return true;
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
if (config.plugin.length !== beforeLength) {
|
|
38
|
+
await writeFile(CONFIG_PATH, JSON.stringify(config, null, 2) + "\n", {
|
|
39
|
+
mode: 0o600,
|
|
40
|
+
});
|
|
41
|
+
console.log(
|
|
42
|
+
"Removed opencode-nim-rotator from opencode.json plugin list",
|
|
43
|
+
);
|
|
44
|
+
configModified = true;
|
|
45
|
+
} else {
|
|
46
|
+
console.log("Plugin was not found in opencode.json - skipping");
|
|
47
|
+
}
|
|
48
|
+
} else {
|
|
49
|
+
console.log("No plugins array in opencode.json - skipping");
|
|
50
|
+
}
|
|
51
|
+
} catch (err) {
|
|
52
|
+
console.warn("Could not update opencode.json:", err);
|
|
53
|
+
}
|
|
54
|
+
} else {
|
|
55
|
+
console.log("opencode.json not found - skipping");
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Remove key store file
|
|
59
|
+
if (existsSync(KEYSTORE_PATH)) {
|
|
60
|
+
try {
|
|
61
|
+
await unlink(KEYSTORE_PATH);
|
|
62
|
+
console.log("Removed key store file: " + KEYSTORE_PATH);
|
|
63
|
+
} catch (err) {
|
|
64
|
+
console.warn("Could not remove key store file:", err);
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
console.log("Key store file not found - skipping");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
console.log(
|
|
71
|
+
"\nUninstall complete." +
|
|
72
|
+
(configModified ? " Restart opencode to apply changes." : ""),
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
await uninstall().catch(function (err) {
|
|
77
|
+
console.error("Uninstallation failed:", err);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
});
|