@baryonlabs/cli 0.1.0 → 0.2.0
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 +12 -1
- package/bin/baryon.js +8 -0
- package/package.json +1 -1
- package/src/commands.js +82 -0
- package/src/constants.js +21 -0
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> Baryon CLI — **AI 코딩·학습 에이전트**. `baryon.ai` API에 기본 연결된 [pi](https://www.npmjs.com/package/@earendil-works/pi-coding-agent) 코딩 에이전트 래퍼.
|
|
4
4
|
|
|
5
|
-
한 줄 설치, 별도 키 설정 없이 시작, 상용·로컬 모델 무중단 전환. 교육기관
|
|
5
|
+
한 줄 설치, 별도 키 설정 없이 시작, 상용·로컬 모델 무중단 전환. 교육기관 및 기업 사내 AI 인프라(온프레미스) 구축용으로 설계되었습니다.
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
npm install -g @baryonlabs/cli # 또는 pnpm / yarn / bun
|
|
@@ -34,6 +34,7 @@ curl -fsSL https://cli.baryon.ai/install.sh | sh
|
|
|
34
34
|
| `baryon setup` | API 키 등록 + pi 프로바이더 구성 |
|
|
35
35
|
| `baryon config` | 현재 설정 보기 (`--key`, `--base-url`, `--model` 로 변경) |
|
|
36
36
|
| `baryon models` | 사용 가능한 모델 목록 (`pi --list-models` 패스스루) |
|
|
37
|
+
| `baryon extensions` | 기본 확장 설치(서브에이전트·캔버스·셸·웹), `list` 로 목록 |
|
|
37
38
|
| `baryon doctor` | 설치·연결 진단 |
|
|
38
39
|
| `baryon update` | CLI + pi 에이전트 업데이트 |
|
|
39
40
|
| `baryon help` | 도움말 |
|
|
@@ -46,6 +47,16 @@ baryon @report.md "요약해줘" # 파일 첨부
|
|
|
46
47
|
baryon --provider openai # 다른 모델로 전환·비교
|
|
47
48
|
```
|
|
48
49
|
|
|
50
|
+
## 기본 탑재 확장
|
|
51
|
+
|
|
52
|
+
`baryon setup` 시 아래 pi 확장이 자동 설치되어 바로 쓸 수 있습니다(`--no-extensions` 로 건너뛰기, `baryon extensions` 로 재설치):
|
|
53
|
+
|
|
54
|
+
- **서브에이전트** — 작업 분해·위임·통합 ([pi-subagents](https://github.com/nicobailon/pi-subagents))
|
|
55
|
+
- **캔버스** ([pi-canvas](https://github.com/jyaunches/pi-canvas))
|
|
56
|
+
- **인터랙티브 셸** ([pi-interactive-shell](https://github.com/nicobailon/pi-interactive-shell))
|
|
57
|
+
- **웹 액세스** ([pi-web-access](https://github.com/nicobailon/pi-web-access))
|
|
58
|
+
- **웹 페치** ([pi-web-fetch](https://github.com/georgebashi/pi-web-fetch))
|
|
59
|
+
|
|
49
60
|
## 설정
|
|
50
61
|
|
|
51
62
|
| 항목 | 기본값 | 재정의 |
|
package/bin/baryon.js
CHANGED
|
@@ -6,6 +6,8 @@ import {
|
|
|
6
6
|
doctor,
|
|
7
7
|
models,
|
|
8
8
|
configCmd,
|
|
9
|
+
keys,
|
|
10
|
+
extensions,
|
|
9
11
|
update,
|
|
10
12
|
help,
|
|
11
13
|
welcome,
|
|
@@ -47,6 +49,12 @@ async function main() {
|
|
|
47
49
|
return models(rest);
|
|
48
50
|
case "config":
|
|
49
51
|
return configCmd(rest);
|
|
52
|
+
case "keys":
|
|
53
|
+
case "key":
|
|
54
|
+
return keys();
|
|
55
|
+
case "extensions":
|
|
56
|
+
case "ext":
|
|
57
|
+
return extensions(rest);
|
|
50
58
|
case "update":
|
|
51
59
|
case "upgrade":
|
|
52
60
|
return update();
|
package/package.json
CHANGED
package/src/commands.js
CHANGED
|
@@ -10,10 +10,14 @@ import {
|
|
|
10
10
|
BARYON_CONFIG,
|
|
11
11
|
PI_MODELS_JSON,
|
|
12
12
|
} from "./config.js";
|
|
13
|
+
import { spawnSync } from "node:child_process";
|
|
13
14
|
import {
|
|
14
15
|
DEFAULT_BASE_URL,
|
|
16
|
+
DEFAULT_EXTENSIONS,
|
|
15
17
|
DEFAULT_MODELS,
|
|
16
18
|
HOMEPAGE,
|
|
19
|
+
KEYS_URL,
|
|
20
|
+
KEY_PREFIX,
|
|
17
21
|
PI_PACKAGE,
|
|
18
22
|
PROVIDER,
|
|
19
23
|
SUPPORT_EMAIL,
|
|
@@ -47,10 +51,15 @@ export async function setup(args) {
|
|
|
47
51
|
|
|
48
52
|
let apiKey = flags.key || flags["api-key"] || process.env.BARYON_API_KEY || "";
|
|
49
53
|
if (!apiKey) {
|
|
54
|
+
// Tell the user where keys come from before asking for one.
|
|
55
|
+
log(` ${sym.info} 키 발급·관리: ${c.lime(KEYS_URL)}`);
|
|
56
|
+
log(` ${c.dim(` (vibecamp.us 대시보드에서 발급/회수 · 형식 ${KEY_PREFIX}…)`)}\n`);
|
|
50
57
|
apiKey = await promptHidden(` ${sym.info} baryon.ai API key: `);
|
|
51
58
|
}
|
|
52
59
|
if (!apiKey) {
|
|
53
60
|
warn("API 키 없이 저장합니다. 나중에 `baryon setup --key <KEY>` 로 추가하세요.");
|
|
61
|
+
} else if (!apiKey.startsWith(KEY_PREFIX)) {
|
|
62
|
+
warn(`키 형식이 ${KEY_PREFIX}… 가 아닙니다. 로컬/상용 키라면 무시하세요.`);
|
|
54
63
|
}
|
|
55
64
|
|
|
56
65
|
saveConfig({ apiKey, baseUrl });
|
|
@@ -73,6 +82,12 @@ export async function setup(args) {
|
|
|
73
82
|
const file = syncPiModels({ baseUrl, models });
|
|
74
83
|
ok(`pi 프로바이더 ${c.lime(PROVIDER)} 구성 → ${c.dim(file)}`);
|
|
75
84
|
|
|
85
|
+
if (flags["no-extensions"]) {
|
|
86
|
+
info("기본 확장 설치 건너뜀 (--no-extensions)");
|
|
87
|
+
} else {
|
|
88
|
+
installDefaults();
|
|
89
|
+
}
|
|
90
|
+
|
|
76
91
|
log(`\n ${sym.ok} 준비 완료. ${c.lime("baryon")} 으로 시작하세요.\n`);
|
|
77
92
|
return 0;
|
|
78
93
|
}
|
|
@@ -154,12 +169,37 @@ export async function configCmd(args) {
|
|
|
154
169
|
info(`base URL ${c.lime(cfg.baseUrl)}`);
|
|
155
170
|
info(`default ${c.lime(cfg.defaultModel)}`);
|
|
156
171
|
info(`API key ${cfg.apiKey ? cfg.apiKey.slice(0, 4) + "•".repeat(6) : c.dim("(없음)")}`);
|
|
172
|
+
info(`키 관리 ${c.lime(KEYS_URL)}`);
|
|
157
173
|
info(`config 파일 ${c.dim(BARYON_CONFIG)}`);
|
|
158
174
|
info(`pi models ${c.dim(PI_MODELS_JSON)}`);
|
|
159
175
|
log("");
|
|
160
176
|
return 0;
|
|
161
177
|
}
|
|
162
178
|
|
|
179
|
+
export function keys() {
|
|
180
|
+
log(` ${sym.info} 키 발급·관리 (vibecamp.us 대시보드):`);
|
|
181
|
+
log(` ${c.lime(KEYS_URL)}`);
|
|
182
|
+
log(` ${c.dim(` 발급/회수/쿼터는 vibecamp.us 가 관리 · 형식 ${KEY_PREFIX}…`)}`);
|
|
183
|
+
log(` ${c.dim(" 발급 후:")} ${c.lime("baryon setup")} ${c.dim("또는")} ${c.lime("baryon config --key vc_live_…")}`);
|
|
184
|
+
// best-effort open in browser
|
|
185
|
+
const opener =
|
|
186
|
+
process.platform === "darwin"
|
|
187
|
+
? "open"
|
|
188
|
+
: process.platform === "win32"
|
|
189
|
+
? "start"
|
|
190
|
+
: "xdg-open";
|
|
191
|
+
try {
|
|
192
|
+
spawn(opener, [KEYS_URL], {
|
|
193
|
+
stdio: "ignore",
|
|
194
|
+
detached: true,
|
|
195
|
+
shell: process.platform === "win32",
|
|
196
|
+
}).unref();
|
|
197
|
+
} catch {
|
|
198
|
+
/* headless / no browser — link above is enough */
|
|
199
|
+
}
|
|
200
|
+
return 0;
|
|
201
|
+
}
|
|
202
|
+
|
|
163
203
|
export function update() {
|
|
164
204
|
return new Promise((resolve) => {
|
|
165
205
|
log(` ${sym.info} 업데이트: ${c.lime(`npm install -g @baryonlabs/cli ${PI_PACKAGE}`)}\n`);
|
|
@@ -176,6 +216,46 @@ export function update() {
|
|
|
176
216
|
});
|
|
177
217
|
}
|
|
178
218
|
|
|
219
|
+
export function installDefaults() {
|
|
220
|
+
const entry = resolvePiEntry();
|
|
221
|
+
|
|
222
|
+
if (!entry) {
|
|
223
|
+
warn(`${PI_PACKAGE} 미설치 — 확장 건너뜀`);
|
|
224
|
+
return 0;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
log(` ${sym.info} 기본 확장 설치 중 (${DEFAULT_EXTENSIONS.length}종 · git clone, 잠시 걸립니다)…`);
|
|
228
|
+
let okc = 0;
|
|
229
|
+
|
|
230
|
+
for (const e of DEFAULT_EXTENSIONS) {
|
|
231
|
+
const r = spawnSync(process.execPath, [entry, "install", e.src], { encoding: "utf8" });
|
|
232
|
+
|
|
233
|
+
if (r.status === 0) {
|
|
234
|
+
ok(`${e.name} — ${e.note}`);
|
|
235
|
+
okc++;
|
|
236
|
+
} else {
|
|
237
|
+
warn(`${e.name} 설치 실패(네트워크/git 확인) — 건너뜀`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
log(` ${sym.ok} 확장 ${okc}/${DEFAULT_EXTENSIONS.length} 설치`);
|
|
242
|
+
return okc;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export function extensions(args) {
|
|
246
|
+
const sub = args[0];
|
|
247
|
+
|
|
248
|
+
if (sub === "list" || sub === "ls") {
|
|
249
|
+
return runPi(["list"], loadConfig(), { injectTargeting: false })
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
banner();
|
|
253
|
+
log(c.bold(" Baryon 기본 확장\n"));
|
|
254
|
+
installDefaults()
|
|
255
|
+
log(`\n ${sym.info} 목록: ${c.lime("baryon extensions list")} · 제거: ${c.lime("baryon -- remove <src>")}\n`)
|
|
256
|
+
return 0;
|
|
257
|
+
}
|
|
258
|
+
|
|
179
259
|
export function help() {
|
|
180
260
|
banner();
|
|
181
261
|
log(`${c.bold("USAGE")}
|
|
@@ -183,8 +263,10 @@ export function help() {
|
|
|
183
263
|
|
|
184
264
|
${c.bold("COMMANDS")}
|
|
185
265
|
${c.lime("baryon setup")} baryon.ai API 키 등록 + pi 프로바이더 구성
|
|
266
|
+
${c.lime("baryon keys")} 키 발급·관리 대시보드 열기 ${c.dim("(vibecamp.us)")}
|
|
186
267
|
${c.lime("baryon config")} 현재 설정 보기 ${c.dim("(--key/--base-url/--model 로 변경)")}
|
|
187
268
|
${c.lime("baryon models")} 사용 가능한 모델 목록
|
|
269
|
+
${c.lime("baryon extensions")} 기본 확장 설치(서브에이전트·캔버스·셸·웹) ${c.dim("· list 로 목록")}
|
|
188
270
|
${c.lime("baryon doctor")} 설치·연결 진단
|
|
189
271
|
${c.lime("baryon update")} CLI + pi 에이전트 업데이트
|
|
190
272
|
${c.lime("baryon help")} 이 도움말
|
package/src/constants.js
CHANGED
|
@@ -47,5 +47,26 @@ export const DEFAULT_MODELS = [
|
|
|
47
47
|
},
|
|
48
48
|
];
|
|
49
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Extensions installed by default so `baryon` ships with sub-agents, a canvas,
|
|
52
|
+
* an interactive shell, and web access/fetch out of the box. Installed via
|
|
53
|
+
* `pi install <src>` into ~/.pi/agent/settings.json (loaded on startup).
|
|
54
|
+
*/
|
|
55
|
+
export const DEFAULT_EXTENSIONS = [
|
|
56
|
+
{ name: "pi-subagents", src: "https://github.com/nicobailon/pi-subagents", note: "서브에이전트(작업 분해·위임·통합)" },
|
|
57
|
+
{ name: "pi-canvas", src: "https://github.com/jyaunches/pi-canvas", note: "캔버스" },
|
|
58
|
+
{ name: "pi-interactive-shell", src: "https://github.com/nicobailon/pi-interactive-shell", note: "인터랙티브 셸" },
|
|
59
|
+
{ name: "pi-web-access", src: "https://github.com/nicobailon/pi-web-access", note: "웹 액세스(브라우징)" },
|
|
60
|
+
{ name: "pi-web-fetch", src: "https://github.com/georgebashi/pi-web-fetch", note: "웹 페치" }
|
|
61
|
+
];
|
|
62
|
+
|
|
50
63
|
export const HOMEPAGE = "https://cli.baryon.ai";
|
|
51
64
|
export const SUPPORT_EMAIL = "support@baryon.ai";
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Where end users issue / rotate / revoke their baryon.ai key.
|
|
68
|
+
* vibecamp.us is the source of truth for key issuance, scope, quota and
|
|
69
|
+
* revocation. Keys look like `vc_live_…`. Override with BARYON_KEYS_URL.
|
|
70
|
+
*/
|
|
71
|
+
export const KEYS_URL = process.env.BARYON_KEYS_URL || "https://vibecamp.us/dashboard";
|
|
72
|
+
export const KEY_PREFIX = "vc_live_";
|