@botconnector/bccli 0.4.0-beta.9 → 0.4.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.
Files changed (183) hide show
  1. package/README.en.md +253 -0
  2. package/README.md +93 -6
  3. package/dist/abort.d.ts +5 -0
  4. package/dist/acp-3PHBAI64.js +182 -0
  5. package/dist/acp.d.ts +27 -0
  6. package/dist/agent.d.ts +143 -0
  7. package/dist/agents.d.ts +4 -0
  8. package/dist/args-W6BNKY7K.js +13 -0
  9. package/dist/args.d.ts +51 -0
  10. package/dist/budget.d.ts +23 -0
  11. package/dist/checkpoints.d.ts +34 -0
  12. package/dist/{chunk-BFZXRKW5.js → chunk-24JN75FZ.js} +29 -7
  13. package/dist/chunk-45SDLMTV.js +341 -0
  14. package/dist/chunk-75BECX4F.js +56 -0
  15. package/dist/{chunk-SJH3YLW4.js → chunk-BC7UXFE4.js} +69 -6
  16. package/dist/chunk-BGXNR74O.js +733 -0
  17. package/dist/chunk-BKGFA2PT.js +8 -0
  18. package/dist/{chunk-CLN4Z5E3.js → chunk-BLOYFIAD.js} +6 -3
  19. package/dist/chunk-BXQQCUAC.js +145 -0
  20. package/dist/chunk-FLQPE4S5.js +373 -0
  21. package/dist/chunk-GN4W3T6E.js +76 -0
  22. package/dist/{chunk-7S6JXQCH.js → chunk-JHPGOAXU.js} +2 -1
  23. package/dist/chunk-MFHCQQEN.js +201 -0
  24. package/dist/chunk-MHIYLXJC.js +143 -0
  25. package/dist/chunk-PSO7R5AD.js +10 -0
  26. package/dist/chunk-PZRKU4UM.js +2143 -0
  27. package/dist/chunk-QZKLZELZ.js +64 -0
  28. package/dist/chunk-R5RE46CW.js +231 -0
  29. package/dist/chunk-UZWJQF67.js +500 -0
  30. package/dist/{chunk-DX7CZTBB.js → chunk-WI22M2ID.js} +14 -9
  31. package/dist/chunk-WNACAUDK.js +946 -0
  32. package/dist/chunk-XV7ZVL4J.js +235 -0
  33. package/dist/cli.d.ts +1 -0
  34. package/dist/cli.js +150 -1382
  35. package/dist/clipboardImage.d.ts +17 -0
  36. package/dist/commands.d.ts +16 -0
  37. package/dist/completion-HPPFDAPB.js +125 -0
  38. package/dist/completion.d.ts +14 -0
  39. package/dist/{config-YUNKPCNB.js → config-DIDLDONU.js} +5 -2
  40. package/dist/config-IU76CPK2.js +34 -0
  41. package/dist/config.d.ts +97 -0
  42. package/dist/context.d.ts +13 -0
  43. package/dist/contextWindow.d.ts +3 -0
  44. package/dist/diff.d.ts +7 -0
  45. package/dist/exit.d.ts +9 -0
  46. package/dist/extensions.d.ts +34 -0
  47. package/dist/ghBotCli-E3VPHNZY.js +677 -0
  48. package/dist/ghBotCli.d.ts +9 -0
  49. package/dist/ghBotDispatch.d.ts +68 -0
  50. package/dist/ghBotRunner.d.ts +82 -0
  51. package/dist/ghBotServe.d.ts +21 -0
  52. package/dist/ghBotWebhook.d.ts +45 -0
  53. package/dist/hooks.d.ts +27 -0
  54. package/dist/i18n/id.d.ts +1 -0
  55. package/dist/i18n.d.ts +16 -0
  56. package/dist/integrationCli-Q2YPDTPG.js +685 -0
  57. package/dist/integrationCli.d.ts +9 -0
  58. package/dist/keybinds.d.ts +22 -0
  59. package/dist/login-FP3BB44A.js +16 -0
  60. package/dist/login.d.ts +19 -0
  61. package/dist/lsp.d.ts +47 -0
  62. package/dist/mcp/catalog.d.ts +14 -0
  63. package/dist/mcp/config.d.ts +36 -0
  64. package/dist/mcp/manager.d.ts +34 -0
  65. package/dist/mcp/oauth.d.ts +82 -0
  66. package/dist/{mcpCli-DZWQPTOS.js → mcpCli-SNBDUWJN.js} +42 -9
  67. package/dist/mcpCli.d.ts +3 -0
  68. package/dist/mcpServer/serve.d.ts +8 -0
  69. package/dist/mcpServer/server.d.ts +19 -0
  70. package/dist/models.d.ts +13 -0
  71. package/dist/modelsCli-CZ2HNGKR.js +36 -0
  72. package/dist/modelsCli.d.ts +15 -0
  73. package/dist/npmRunner-LU43GM3W.js +46 -0
  74. package/dist/npmRunner.d.ts +21 -0
  75. package/dist/oauthLogin-6FWQABJ7.js +210 -0
  76. package/dist/oauthLogin.d.ts +47 -0
  77. package/dist/permissions.d.ts +30 -0
  78. package/dist/pluginSpec.d.ts +25 -0
  79. package/dist/plugins.d.ts +45 -0
  80. package/dist/pluginsCli-LPIUUDWB.js +284 -0
  81. package/dist/pluginsCli.d.ts +16 -0
  82. package/dist/prCli-5IMV3VNQ.js +78 -0
  83. package/dist/prCli.d.ts +33 -0
  84. package/dist/presets.d.ts +8 -0
  85. package/dist/print.d.ts +14 -0
  86. package/dist/provider.d.ts +140 -0
  87. package/dist/providerCli-NMUFXAAS.js +15 -0
  88. package/dist/providerCli.d.ts +17 -0
  89. package/dist/providers.d.ts +6 -0
  90. package/dist/reasoning.d.ts +12 -0
  91. package/dist/repomap.d.ts +10 -0
  92. package/dist/sdk.d.ts +57 -0
  93. package/dist/sdk.js +5571 -0
  94. package/dist/serve-KWOECK5W.js +178 -0
  95. package/dist/serve-X2ZV4S5U.js +521 -0
  96. package/dist/serve.d.ts +37 -0
  97. package/dist/serveHeartbeat.d.ts +14 -0
  98. package/dist/serveProtocol.d.ts +47 -0
  99. package/dist/session-GKEXDJKZ.js +12 -0
  100. package/dist/session.d.ts +30 -0
  101. package/dist/setup-OV3NWQN5.js +24 -0
  102. package/dist/setup.d.ts +74 -0
  103. package/dist/slash/copy.d.ts +1 -0
  104. package/dist/slash/diff.d.ts +1 -0
  105. package/dist/slash/doctor.d.ts +18 -0
  106. package/dist/slash/export.d.ts +2 -0
  107. package/dist/slash/info.d.ts +45 -0
  108. package/dist/slash/memory.d.ts +10 -0
  109. package/dist/statsCli-CF3R7ATL.js +353 -0
  110. package/dist/statsCli.d.ts +62 -0
  111. package/dist/textToolCalls.d.ts +6 -0
  112. package/dist/thinking.d.ts +17 -0
  113. package/dist/tokenBudget.d.ts +22 -0
  114. package/dist/tools/bash.d.ts +52 -0
  115. package/dist/tools/diagnostics.d.ts +5 -0
  116. package/dist/tools/edit.d.ts +7 -0
  117. package/dist/tools/fetch.d.ts +41 -0
  118. package/dist/tools/glob.d.ts +5 -0
  119. package/dist/tools/globSafety.d.ts +7 -0
  120. package/dist/tools/grep.d.ts +13 -0
  121. package/dist/tools/ignore.d.ts +2 -0
  122. package/dist/tools/index.d.ts +12 -0
  123. package/dist/tools/memory.d.ts +13 -0
  124. package/dist/tools/paths.d.ts +2 -0
  125. package/dist/tools/plan.d.ts +10 -0
  126. package/dist/tools/read.d.ts +16 -0
  127. package/dist/tools/repomap.d.ts +2 -0
  128. package/dist/tools/sandbox.d.ts +12 -0
  129. package/dist/tools/shell.d.ts +18 -0
  130. package/dist/tools/skill.d.ts +3 -0
  131. package/dist/tools/task.d.ts +28 -0
  132. package/dist/tools/todo.d.ts +13 -0
  133. package/dist/tools/types.d.ts +52 -0
  134. package/dist/tools/websearch.d.ts +9 -0
  135. package/dist/tools/write.d.ts +5 -0
  136. package/dist/transferCli-YUFPI6AH.js +71 -0
  137. package/dist/transferCli.d.ts +23 -0
  138. package/dist/ui/App.d.ts +7 -0
  139. package/dist/ui/DiffView.d.ts +3 -0
  140. package/dist/ui/EditableText.d.ts +7 -0
  141. package/dist/ui/LinePrompt.d.ts +6 -0
  142. package/dist/ui/ListPicker.d.ts +11 -0
  143. package/dist/ui/Markdown.d.ts +8 -0
  144. package/dist/ui/McpMenu.d.ts +11 -0
  145. package/dist/ui/ModelPicker.d.ts +6 -0
  146. package/dist/ui/PermissionPrompt.d.ts +5 -0
  147. package/dist/ui/PlanApproval.d.ts +5 -0
  148. package/dist/ui/PromptInput.d.ts +18 -0
  149. package/dist/ui/ProviderMenu.d.ts +10 -0
  150. package/dist/ui/Spinner.d.ts +4 -0
  151. package/dist/ui/StatusBar.d.ts +9 -0
  152. package/dist/ui/TodoList.d.ts +4 -0
  153. package/dist/ui/ToolBlock.d.ts +14 -0
  154. package/dist/ui/complete.d.ts +1 -0
  155. package/dist/ui/focusReport.d.ts +1 -0
  156. package/dist/ui/index.d.ts +7 -0
  157. package/dist/ui/lineEdit.d.ts +42 -0
  158. package/dist/ui/replay.d.ts +4 -0
  159. package/dist/ui/table.d.ts +20 -0
  160. package/dist/ui/theme.d.ts +5 -0
  161. package/dist/ui/thinkingMouse.d.ts +33 -0
  162. package/dist/ui/transcript.d.ts +55 -0
  163. package/dist/ui/vim.d.ts +26 -0
  164. package/dist/ui-IVIFNUCC.js +2367 -0
  165. package/dist/update-TZ2G6KQ3.js +145 -0
  166. package/dist/update.d.ts +30 -0
  167. package/dist/verify.d.ts +16 -0
  168. package/dist/version.d.ts +1 -0
  169. package/dist/webBudget.d.ts +25 -0
  170. package/dist/worktree.d.ts +12 -0
  171. package/package.json +42 -8
  172. package/dist/args-JPVSGCGY.js +0 -12
  173. package/dist/chunk-2MGINW4O.js +0 -114
  174. package/dist/chunk-ELML4KVQ.js +0 -76
  175. package/dist/chunk-ISGBGFSU.js +0 -52
  176. package/dist/chunk-KV27KTOX.js +0 -254
  177. package/dist/chunk-U7GK73CK.js +0 -341
  178. package/dist/chunk-ZYCYTEKD.js +0 -96
  179. package/dist/integrationCli-BGT5UZU4.js +0 -223
  180. package/dist/login-6K32PIXV.js +0 -9
  181. package/dist/providerCli-Q7LRM2NP.js +0 -12
  182. package/dist/session-7UB77CEG.js +0 -9
  183. package/dist/ui-6GTQUJOE.js +0 -1415
@@ -1,223 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- ConfigError,
4
- bccliHome,
5
- loadConfig,
6
- readCredentials,
7
- resolveModel
8
- } from "./chunk-2MGINW4O.js";
9
-
10
- // src/integrationCli.ts
11
- import { chmodSync, copyFileSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "fs";
12
- import { dirname, join } from "path";
13
- var BASE_URL = "https://api.botconnector.id/v1";
14
- var PROVIDER_ID = "botconnector";
15
- function integrationHome(env) {
16
- return join(bccliHome(env), "integrations");
17
- }
18
- function statePath(target, env) {
19
- return join(integrationHome(env), `${target}.state.json`);
20
- }
21
- function keyPath(env) {
22
- return join(integrationHome(env), "bc-cloud.key");
23
- }
24
- function parseTarget(raw) {
25
- if (raw === "opencode" || raw === "aider") return raw;
26
- throw new ConfigError("Agent harus salah satu dari: opencode, aider");
27
- }
28
- function homeDir(env) {
29
- const value = env.HOME || env.USERPROFILE;
30
- if (!value) throw new ConfigError("Home directory tidak dapat ditentukan.");
31
- return value;
32
- }
33
- function ensureSecret(env) {
34
- const key = readCredentials(env)["bc-cloud"] || env.BOTCONNECTOR_API_KEY;
35
- if (!key) throw new ConfigError("API key BotConnector belum tersedia. Jalankan bccli login bc-cloud terlebih dahulu.");
36
- const dir = integrationHome(env);
37
- mkdirSync(dir, { recursive: true });
38
- const path = keyPath(env);
39
- writeFileSync(path, `${key}
40
- `, { mode: 384 });
41
- try {
42
- chmodSync(path, 384);
43
- } catch {
44
- }
45
- return path;
46
- }
47
- function safeBackup(path, env) {
48
- if (!existsSync(path)) return { created: true };
49
- const dir = integrationHome(env);
50
- mkdirSync(dir, { recursive: true });
51
- const name = path.split(/[\\/]/).pop() || "config";
52
- const backup = join(dir, `${name}.${Date.now()}.bak`);
53
- copyFileSync(path, backup);
54
- return { backup, created: false };
55
- }
56
- function writeState(target, state, env) {
57
- const path = statePath(target, env);
58
- mkdirSync(dirname(path), { recursive: true });
59
- writeFileSync(path, `${JSON.stringify(state, null, 2)}
60
- `, { mode: 384 });
61
- }
62
- function readState(target, env) {
63
- const path = statePath(target, env);
64
- if (!existsSync(path)) return null;
65
- try {
66
- return JSON.parse(readFileSync(path, "utf8"));
67
- } catch {
68
- return null;
69
- }
70
- }
71
- async function botConnectorModels(deps) {
72
- const config = loadConfig(deps.cwd);
73
- const resolved = resolveModel(config, config.model, deps.env);
74
- const key = readCredentials(deps.env)["bc-cloud"] || resolved.apiKey;
75
- if (!key) throw new ConfigError("API key BotConnector belum tersedia. Jalankan bccli login bc-cloud terlebih dahulu.");
76
- const response = await deps.fetch(`${BASE_URL}/models`, {
77
- headers: {
78
- authorization: `Bearer ${key}`,
79
- "x-botconnector-client": "bccli",
80
- "x-botconnector-client-version": "0.4.0"
81
- }
82
- });
83
- if (!response.ok) throw new ConfigError(`Katalog model BotConnector gagal dimuat (HTTP ${response.status}).`);
84
- const payload = await response.json();
85
- return (payload.data ?? []).map((item) => item.id).filter((id) => typeof id === "string" && !!id);
86
- }
87
- async function connectOpenCode(deps) {
88
- const home = homeDir(deps.env);
89
- const path = join(home, ".config", "opencode", "opencode.json");
90
- const backup = safeBackup(path, deps.env);
91
- const secret = ensureSecret(deps.env);
92
- const models = await botConnectorModels(deps);
93
- let doc = {};
94
- if (existsSync(path)) {
95
- try {
96
- doc = JSON.parse(readFileSync(path, "utf8"));
97
- } catch {
98
- throw new ConfigError(`Config OpenCode tidak valid JSON: ${path}`);
99
- }
100
- }
101
- const providers = doc.provider && typeof doc.provider === "object" && !Array.isArray(doc.provider) ? { ...doc.provider } : {};
102
- providers[PROVIDER_ID] = {
103
- npm: "@ai-sdk/openai-compatible",
104
- name: "BotConnector",
105
- options: {
106
- baseURL: BASE_URL,
107
- apiKey: `{file:${secret.replace(/\\/g, "/")}}`
108
- },
109
- models: Object.fromEntries(models.map((id) => [id, { name: id }]))
110
- };
111
- if (!doc.$schema) doc.$schema = "https://opencode.ai/config.json";
112
- doc.provider = providers;
113
- mkdirSync(dirname(path), { recursive: true });
114
- writeFileSync(path, `${JSON.stringify(doc, null, 2)}
115
- `);
116
- writeState("opencode", {
117
- target: "opencode",
118
- files: [{ path, ...backup }],
119
- createdAt: (/* @__PURE__ */ new Date()).toISOString()
120
- }, deps.env);
121
- deps.out(`OpenCode terhubung ke BotConnector (${models.length} model).`);
122
- deps.out(`Config: ${path}`);
123
- }
124
- var AIDER_BEGIN = "# BEGIN BCCLI BOTCONNECTOR";
125
- var AIDER_END = "# END BCCLI BOTCONNECTOR";
126
- function stripManagedBlock(input) {
127
- const start = input.indexOf(AIDER_BEGIN);
128
- if (start < 0) return input;
129
- const end = input.indexOf(AIDER_END, start);
130
- if (end < 0) return input;
131
- const after = end + AIDER_END.length;
132
- const left = input.slice(0, start).trimEnd();
133
- const right = input.slice(after).trimStart();
134
- return right ? `${left}
135
- ${right}` : left;
136
- }
137
- function yamlQuote(value) {
138
- return JSON.stringify(value.replace(/\\/g, "/"));
139
- }
140
- async function connectAider(deps) {
141
- const home = homeDir(deps.env);
142
- const configPath = join(home, ".aider.conf.yml");
143
- const envPath = join(integrationHome(deps.env), "aider.env");
144
- const configBackup = safeBackup(configPath, deps.env);
145
- const envBackup = safeBackup(envPath, deps.env);
146
- const secret = ensureSecret(deps.env);
147
- const key = readFileSync(secret, "utf8").trim();
148
- const config = loadConfig(deps.cwd);
149
- const defaultModel = config.model.startsWith("bc-cloud/") ? config.model.slice("bc-cloud/".length) : "glm-5.3-flash";
150
- let existing = existsSync(configPath) ? readFileSync(configPath, "utf8") : "";
151
- existing = stripManagedBlock(existing);
152
- if (/^\s*(env-file|openai-api-base|openai-api-key)\s*:/m.test(existing)) {
153
- throw new ConfigError(`Config Aider sudah memiliki env-file/openai-api setting sendiri: ${configPath}. BCCLI tidak akan menimpanya.`);
154
- }
155
- mkdirSync(dirname(envPath), { recursive: true });
156
- writeFileSync(envPath, [
157
- `OPENAI_API_BASE=${BASE_URL}`,
158
- `OPENAI_API_KEY=${key}`,
159
- `AIDER_MODEL=openai/${defaultModel}`,
160
- ""
161
- ].join("\n"), { mode: 384 });
162
- try {
163
- chmodSync(envPath, 384);
164
- } catch {
165
- }
166
- const managed = [
167
- AIDER_BEGIN,
168
- `env-file: ${yamlQuote(envPath)}`,
169
- AIDER_END
170
- ].join("\n");
171
- const merged = existing.trim() ? `${existing.trimEnd()}
172
-
173
- ${managed}
174
- ` : `${managed}
175
- `;
176
- writeFileSync(configPath, merged);
177
- writeState("aider", {
178
- target: "aider",
179
- files: [{ path: configPath, ...configBackup }, { path: envPath, ...envBackup }],
180
- createdAt: (/* @__PURE__ */ new Date()).toISOString()
181
- }, deps.env);
182
- deps.out("Aider terhubung ke BotConnector.");
183
- deps.out(`Config: ${configPath}`);
184
- }
185
- function disconnect(target, deps) {
186
- const state = readState(target, deps.env);
187
- if (!state) {
188
- deps.out(`${target}: belum dikelola oleh BCCLI.`);
189
- return;
190
- }
191
- for (const file of [...state.files].reverse()) {
192
- if (file.backup && existsSync(file.backup)) {
193
- mkdirSync(dirname(file.path), { recursive: true });
194
- copyFileSync(file.backup, file.path);
195
- } else if (file.created) {
196
- rmSync(file.path, { force: true });
197
- }
198
- }
199
- rmSync(statePath(target, deps.env), { force: true });
200
- deps.out(`${target}: integrasi BotConnector dilepas dan config dipulihkan.`);
201
- }
202
- function listIntegrations(deps) {
203
- for (const target of ["opencode", "aider"]) {
204
- deps.out(`${target} ${readState(target, deps.env) ? "connected" : "not connected"}`);
205
- }
206
- }
207
- async function runIntegrationCommand(args, deps) {
208
- if (args.command === "integrations") {
209
- listIntegrations(deps);
210
- return 0;
211
- }
212
- const target = parseTarget(args.subArgs[0]);
213
- if (args.command === "disconnect") {
214
- disconnect(target, deps);
215
- return 0;
216
- }
217
- if (target === "opencode") await connectOpenCode(deps);
218
- else await connectAider(deps);
219
- return 0;
220
- }
221
- export {
222
- runIntegrationCommand
223
- };
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- readSecret,
4
- runLogin
5
- } from "./chunk-ISGBGFSU.js";
6
- export {
7
- readSecret,
8
- runLogin
9
- };
@@ -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
- };
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- Session,
4
- pruneSessions
5
- } from "./chunk-SJH3YLW4.js";
6
- export {
7
- Session,
8
- pruneSessions
9
- };