@botconnector/bccli 0.4.0-beta.13 → 0.4.0-beta.15

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botconnector/bccli",
3
- "version": "0.4.0-beta.13",
3
+ "version": "0.4.0-beta.15",
4
4
  "description": "BCCLI — BotConnector AI coding agent for the terminal",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- HELP_TEXT,
4
- parseCliArgs
5
- } from "./chunk-TRMRDQ43.js";
6
- import "./chunk-ELML4KVQ.js";
7
- import "./chunk-CLN4Z5E3.js";
8
- import "./chunk-2MGINW4O.js";
9
- export {
10
- HELP_TEXT,
11
- parseCliArgs
12
- };
@@ -1,114 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // src/presets.ts
4
- var PRESETS = [
5
- { id: "bc-cloud", name: "BotConnector Cloud", baseURL: "https://api.botconnector.id/v1", apiKeyEnv: "BOTCONNECTOR_API_KEY" },
6
- { id: "openrouter", name: "OpenRouter", baseURL: "https://openrouter.ai/api/v1", apiKeyEnv: "OPENROUTER_API_KEY" },
7
- { id: "openai", name: "OpenAI", baseURL: "https://api.openai.com/v1", apiKeyEnv: "OPENAI_API_KEY" },
8
- { id: "gemini", name: "Google Gemini", baseURL: "https://generativelanguage.googleapis.com/v1beta/openai", apiKeyEnv: "GEMINI_API_KEY" },
9
- { id: "deepseek", name: "DeepSeek", baseURL: "https://api.deepseek.com/v1", apiKeyEnv: "DEEPSEEK_API_KEY" },
10
- { id: "groq", name: "Groq", baseURL: "https://api.groq.com/openai/v1", apiKeyEnv: "GROQ_API_KEY" },
11
- { id: "ollama-cloud", name: "Ollama Cloud", baseURL: "https://ollama.com/v1", apiKeyEnv: "OLLAMA_API_KEY" },
12
- { id: "ollama", name: "Ollama lokal", baseURL: "http://127.0.0.1:11434/v1", local: true },
13
- { id: "lmstudio", name: "LM Studio lokal", baseURL: "http://127.0.0.1:1234/v1", local: true }
14
- ];
15
-
16
- // src/config.ts
17
- import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
18
- import { homedir } from "os";
19
- import { join } from "path";
20
- var ConfigError = class extends Error {
21
- };
22
- var DEFAULT_CONFIG = {
23
- model: "bc-cloud/glm-5.3-flash",
24
- permissionMode: "default",
25
- reasoning: "auto",
26
- providers: Object.fromEntries(PRESETS.map((p) => [p.id, { baseURL: p.baseURL, apiKeyEnv: p.apiKeyEnv }])),
27
- allow: []
28
- };
29
- function bccliHome(env = process.env) {
30
- return env.BCCLI_HOME ?? join(homedir(), ".bccli");
31
- }
32
- function readJsonConfig(path) {
33
- if (!existsSync(path)) return {};
34
- try {
35
- return JSON.parse(readFileSync(path, "utf8"));
36
- } catch (error) {
37
- throw new ConfigError(`Config tidak valid: ${path} (${error.message})`);
38
- }
39
- }
40
- function untrustedProviders(project, known) {
41
- const out = {};
42
- for (const [id, provider] of Object.entries(project.providers ?? {})) {
43
- if (known[id] || typeof provider?.baseURL !== "string") continue;
44
- out[id] = { baseURL: provider.baseURL };
45
- }
46
- return out;
47
- }
48
- function loadConfig(cwd, env = process.env) {
49
- const global = readJsonConfig(join(bccliHome(env), "config.json"));
50
- const project = readJsonConfig(join(cwd, ".bccli", "config.json"));
51
- const known = { ...DEFAULT_CONFIG.providers, ...global.providers };
52
- const fromProject = untrustedProviders(project, known);
53
- return {
54
- model: project.model ?? global.model ?? DEFAULT_CONFIG.model,
55
- permissionMode: global.permissionMode ?? DEFAULT_CONFIG.permissionMode,
56
- reasoning: global.reasoning ?? DEFAULT_CONFIG.reasoning,
57
- providers: { ...known, ...fromProject },
58
- projectProviders: Object.keys(fromProject),
59
- allow: [...global.allow ?? []]
60
- };
61
- }
62
- function readCredentials(env = process.env) {
63
- const path = join(bccliHome(env), "credentials");
64
- if (!existsSync(path)) return {};
65
- try {
66
- return JSON.parse(readFileSync(path, "utf8"));
67
- } catch {
68
- return {};
69
- }
70
- }
71
- function saveCredential(providerId, key, env = process.env) {
72
- const home = bccliHome(env);
73
- mkdirSync(home, { recursive: true });
74
- const path = join(home, "credentials");
75
- writeFileSync(path, JSON.stringify({ ...readCredentials(env), [providerId]: key }, null, 2), { mode: 384 });
76
- chmodSync(path, 384);
77
- }
78
- function resolveModel(config, modelRef, env = process.env) {
79
- const slash = modelRef.indexOf("/");
80
- if (slash <= 0 || slash === modelRef.length - 1) {
81
- throw new ConfigError(`Model harus berformat provider/model, contoh bc-cloud/glm-5.3-flash (dapat: ${modelRef})`);
82
- }
83
- const providerId = modelRef.slice(0, slash);
84
- const provider = config.providers[providerId];
85
- if (!provider) {
86
- throw new ConfigError(`Provider "${providerId}" tidak ada di config. Tersedia: ${Object.keys(config.providers).join(", ")}`);
87
- }
88
- const apiKey = (provider.apiKeyEnv ? env[provider.apiKeyEnv] : void 0) || readCredentials(env)[providerId] || void 0;
89
- if (provider.apiKeyEnv && !apiKey) {
90
- throw new ConfigError(`API key untuk ${providerId} belum ada. Jalankan \`bccli login\` atau set env ${provider.apiKeyEnv}.`);
91
- }
92
- return { providerId, model: modelRef.slice(slash + 1), baseURL: provider.baseURL.replace(/\/+$/, ""), apiKey };
93
- }
94
- function removeCredential(providerId, env = process.env) {
95
- const creds = readCredentials(env);
96
- if (!(providerId in creds)) return false;
97
- delete creds[providerId];
98
- const path = join(bccliHome(env), "credentials");
99
- writeFileSync(path, JSON.stringify(creds, null, 2), { mode: 384 });
100
- chmodSync(path, 384);
101
- return true;
102
- }
103
-
104
- export {
105
- PRESETS,
106
- ConfigError,
107
- bccliHome,
108
- readJsonConfig,
109
- loadConfig,
110
- readCredentials,
111
- saveCredential,
112
- resolveModel,
113
- removeCredential
114
- };
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- addProviderKey,
4
- runProviderCommand
5
- } from "./chunk-U7GK73CK.js";
6
- import "./chunk-7S6JXQCH.js";
7
- import "./chunk-CLN4Z5E3.js";
8
- import "./chunk-2MGINW4O.js";
9
- export {
10
- addProviderKey,
11
- runProviderCommand
12
- };