vibegroup 0.1.1 → 0.1.3
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 +10 -2
- package/dist/cli.js +132 -23
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,6 +11,12 @@ When you and your teammates are each heads-down in your own repo on your own mac
|
|
|
11
11
|
|
|
12
12
|
## Install
|
|
13
13
|
|
|
14
|
+
```bash
|
|
15
|
+
npx vibegroup install # registers the vibegroup plugin in Claude Code
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Or install the CLI globally:
|
|
19
|
+
|
|
14
20
|
```bash
|
|
15
21
|
npm i -g vibegroup
|
|
16
22
|
```
|
|
@@ -18,7 +24,7 @@ npm i -g vibegroup
|
|
|
18
24
|
## Quickstart
|
|
19
25
|
|
|
20
26
|
```bash
|
|
21
|
-
vibegroup
|
|
27
|
+
vibegroup init # one-time: install the plugin, enable the channel, sign in
|
|
22
28
|
vibegroup team create acme --name Acme # create a team (or get invited to one)
|
|
23
29
|
vibegroup claude --team acme # launch Claude Code wired to your team's room
|
|
24
30
|
```
|
|
@@ -38,7 +44,9 @@ Inside the session, your agent can reach teammates' agents:
|
|
|
38
44
|
## Commands
|
|
39
45
|
|
|
40
46
|
```
|
|
41
|
-
vibegroup
|
|
47
|
+
vibegroup install Register the plugin in Claude Code (also: npx vibegroup install)
|
|
48
|
+
vibegroup init [email] One-time setup: plugin + channel + sign-in
|
|
49
|
+
vibegroup login [email] Sign in / sign up
|
|
42
50
|
vibegroup logout Clear the cached session
|
|
43
51
|
vibegroup status Show your auth status
|
|
44
52
|
vibegroup team create <slug> [--name] Create a team (+ a general room)
|
package/dist/cli.js
CHANGED
|
@@ -65,6 +65,65 @@ function isLoggedIn(tokens) {
|
|
|
65
65
|
}
|
|
66
66
|
var init_auth = () => {};
|
|
67
67
|
|
|
68
|
+
// package.json
|
|
69
|
+
var package_default;
|
|
70
|
+
var init_package = __esm(() => {
|
|
71
|
+
package_default = {
|
|
72
|
+
name: "vibegroup",
|
|
73
|
+
version: "0.1.3",
|
|
74
|
+
description: "Talk to your teammates' Claude Code agents — agent-to-agent collaboration for Claude Code over a shared channel.",
|
|
75
|
+
type: "module",
|
|
76
|
+
bin: {
|
|
77
|
+
vibegroup: "dist/cli.js"
|
|
78
|
+
},
|
|
79
|
+
files: [
|
|
80
|
+
"dist/cli.js",
|
|
81
|
+
"README.md",
|
|
82
|
+
".claude-plugin/marketplace.json",
|
|
83
|
+
"plugin/.claude-plugin",
|
|
84
|
+
"plugin/.mcp.json",
|
|
85
|
+
"plugin/dist",
|
|
86
|
+
"plugin/commands",
|
|
87
|
+
"plugin/hooks"
|
|
88
|
+
],
|
|
89
|
+
engines: {
|
|
90
|
+
node: ">=18"
|
|
91
|
+
},
|
|
92
|
+
license: "UNLICENSED",
|
|
93
|
+
homepage: "https://vibegroup.sh",
|
|
94
|
+
bugs: {
|
|
95
|
+
url: "https://vibegroup.sh"
|
|
96
|
+
},
|
|
97
|
+
keywords: ["claude", "claude-code", "agents", "collaboration", "cli", "vibegroup"],
|
|
98
|
+
publishConfig: {
|
|
99
|
+
access: "public"
|
|
100
|
+
},
|
|
101
|
+
workspaces: ["packages/*", "plugin"],
|
|
102
|
+
scripts: {
|
|
103
|
+
"build:relay": "cd packages/relay && bun run build",
|
|
104
|
+
"build:plugin": "cd plugin && bun run build",
|
|
105
|
+
"build:cli": "bun run scripts/build-cli.ts",
|
|
106
|
+
"build:server": "cd packages/server && bun run build",
|
|
107
|
+
build: "bun run build:relay && bun run build:server && bun run build:plugin && bun run build:cli",
|
|
108
|
+
prepublishOnly: "bun run build:plugin && bun run build:cli",
|
|
109
|
+
"test:cli": "bun test ./test/",
|
|
110
|
+
"test:protocol": "cd packages/protocol && bun test",
|
|
111
|
+
"test:relay": "cd packages/relay && bun test",
|
|
112
|
+
"test:server": "cd packages/server && bun test",
|
|
113
|
+
"test:plugin": "cd plugin && bun test",
|
|
114
|
+
test: "bun run test:cli && bun run test:protocol && bun run test:relay && bun run test:server && bun run test:plugin"
|
|
115
|
+
},
|
|
116
|
+
dependencies: {
|
|
117
|
+
"@inkjs/ui": "^2.0.0",
|
|
118
|
+
ink: "^7.1.0",
|
|
119
|
+
react: "^19.2.7"
|
|
120
|
+
},
|
|
121
|
+
devDependencies: {
|
|
122
|
+
"@types/react": "^19.2.17"
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
});
|
|
126
|
+
|
|
68
127
|
// src/lib/allowlist.ts
|
|
69
128
|
function managedSettingsPath(plat = process.platform) {
|
|
70
129
|
if (plat === "darwin")
|
|
@@ -117,6 +176,60 @@ var init_allowlist2 = __esm(() => {
|
|
|
117
176
|
init_allowlist();
|
|
118
177
|
});
|
|
119
178
|
|
|
179
|
+
// src/lib/pluginInstall.ts
|
|
180
|
+
import { spawnSync } from "node:child_process";
|
|
181
|
+
import { fileURLToPath } from "node:url";
|
|
182
|
+
import { dirname as dirname2, join as join2 } from "node:path";
|
|
183
|
+
function packageRoot() {
|
|
184
|
+
return join2(dirname2(fileURLToPath(import.meta.url)), "..");
|
|
185
|
+
}
|
|
186
|
+
function claudeAvailable() {
|
|
187
|
+
try {
|
|
188
|
+
return spawnSync("claude", ["--version"], { stdio: "ignore" }).status === 0;
|
|
189
|
+
} catch {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
function pluginInstalled() {
|
|
194
|
+
const r = spawnSync("claude", ["plugin", "list"], { encoding: "utf8" });
|
|
195
|
+
return r.status === 0 && /vibegroup@vibegroup/.test(r.stdout ?? "");
|
|
196
|
+
}
|
|
197
|
+
function installPlugin() {
|
|
198
|
+
if (!claudeAvailable()) {
|
|
199
|
+
return { ok: false, message: "Claude Code (`claude`) is not on your PATH. Install it first: https://docs.claude.com/claude-code" };
|
|
200
|
+
}
|
|
201
|
+
const root = packageRoot();
|
|
202
|
+
spawnSync("claude", ["plugin", "marketplace", "remove", "vibegroup"], { stdio: "ignore" });
|
|
203
|
+
const add = spawnSync("claude", ["plugin", "marketplace", "add", root], { stdio: "inherit" });
|
|
204
|
+
if (add.status !== 0)
|
|
205
|
+
return { ok: false, message: "failed to add the vibegroup marketplace" };
|
|
206
|
+
const inst = spawnSync("claude", ["plugin", "install", "vibegroup@vibegroup"], { stdio: "inherit" });
|
|
207
|
+
if (inst.status !== 0 && !pluginInstalled())
|
|
208
|
+
return { ok: false, message: "failed to install the vibegroup plugin" };
|
|
209
|
+
return { ok: true, message: "plugin installed" };
|
|
210
|
+
}
|
|
211
|
+
var init_pluginInstall = () => {};
|
|
212
|
+
|
|
213
|
+
// src/commands/install.ts
|
|
214
|
+
var exports_install = {};
|
|
215
|
+
__export(exports_install, {
|
|
216
|
+
installCommand: () => installCommand
|
|
217
|
+
});
|
|
218
|
+
async function installCommand() {
|
|
219
|
+
console.log(`Installing the vibegroup plugin into Claude Code…
|
|
220
|
+
`);
|
|
221
|
+
const r = installPlugin();
|
|
222
|
+
if (!r.ok) {
|
|
223
|
+
console.error(r.message);
|
|
224
|
+
return 1;
|
|
225
|
+
}
|
|
226
|
+
console.log("\n✓ Plugin installed. Next: `vibegroup init` to enable the channel + sign in.");
|
|
227
|
+
return 0;
|
|
228
|
+
}
|
|
229
|
+
var init_install = __esm(() => {
|
|
230
|
+
init_pluginInstall();
|
|
231
|
+
});
|
|
232
|
+
|
|
120
233
|
// src/ui/runner.ts
|
|
121
234
|
import { render } from "ink";
|
|
122
235
|
function runInk(make) {
|
|
@@ -490,20 +603,9 @@ var exports_init = {};
|
|
|
490
603
|
__export(exports_init, {
|
|
491
604
|
initCommand: () => initCommand
|
|
492
605
|
});
|
|
493
|
-
import { spawnSync } from "node:child_process";
|
|
606
|
+
import { spawnSync as spawnSync2 } from "node:child_process";
|
|
494
607
|
import { existsSync as existsSync3, readFileSync as readFileSync3 } from "node:fs";
|
|
495
|
-
import {
|
|
496
|
-
import { dirname as dirname2, join as join2 } from "node:path";
|
|
497
|
-
function packageRoot() {
|
|
498
|
-
return join2(dirname2(fileURLToPath(import.meta.url)), "..");
|
|
499
|
-
}
|
|
500
|
-
function commandExists(cmd) {
|
|
501
|
-
return spawnSync(cmd, ["--version"], { stdio: "ignore" }).status === 0;
|
|
502
|
-
}
|
|
503
|
-
function pluginInstalled() {
|
|
504
|
-
const r = spawnSync("claude", ["plugin", "list"], { encoding: "utf8" });
|
|
505
|
-
return r.status === 0 && /vibegroup@vibegroup/.test(r.stdout ?? "");
|
|
506
|
-
}
|
|
608
|
+
import { dirname as dirname3 } from "node:path";
|
|
507
609
|
function readManagedSettings() {
|
|
508
610
|
try {
|
|
509
611
|
const p = managedSettingsPath();
|
|
@@ -515,15 +617,15 @@ function readManagedSettings() {
|
|
|
515
617
|
function writeAllowlistWithSudo() {
|
|
516
618
|
const path = managedSettingsPath();
|
|
517
619
|
const json2 = JSON.stringify(mergeManagedSettings(readManagedSettings()), null, 2);
|
|
518
|
-
const script = `mkdir -p "${
|
|
519
|
-
const r =
|
|
620
|
+
const script = `mkdir -p "${dirname3(path)}" && cat > "${path}"`;
|
|
621
|
+
const r = spawnSync2("sudo", ["sh", "-c", script], { input: json2, stdio: ["pipe", "inherit", "inherit"] });
|
|
520
622
|
return r.status === 0;
|
|
521
623
|
}
|
|
522
624
|
async function initCommand(rest, flags = {}, env = process.env) {
|
|
523
625
|
const dev = flags.dev === true;
|
|
524
626
|
console.log(`vibegroup setup
|
|
525
627
|
`);
|
|
526
|
-
if (!
|
|
628
|
+
if (!claudeAvailable()) {
|
|
527
629
|
console.error("Claude Code (`claude`) is not on your PATH. Install it first: https://docs.claude.com/claude-code");
|
|
528
630
|
return 1;
|
|
529
631
|
}
|
|
@@ -531,10 +633,9 @@ async function initCommand(rest, flags = {}, env = process.env) {
|
|
|
531
633
|
console.log("✓ Plugin already installed.");
|
|
532
634
|
} else {
|
|
533
635
|
console.log("• Installing the vibegroup plugin into Claude Code…");
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
console.error("Plugin install did not complete. Try manually: claude plugin install vibegroup@vibegroup");
|
|
636
|
+
const r = installPlugin();
|
|
637
|
+
if (!r.ok) {
|
|
638
|
+
console.error(r.message);
|
|
538
639
|
return 1;
|
|
539
640
|
}
|
|
540
641
|
console.log("✓ Plugin installed.");
|
|
@@ -571,6 +672,7 @@ async function initCommand(rest, flags = {}, env = process.env) {
|
|
|
571
672
|
var init_init = __esm(() => {
|
|
572
673
|
init_auth();
|
|
573
674
|
init_allowlist();
|
|
675
|
+
init_pluginInstall();
|
|
574
676
|
init_login();
|
|
575
677
|
});
|
|
576
678
|
|
|
@@ -692,7 +794,7 @@ var init_team = __esm(() => {
|
|
|
692
794
|
});
|
|
693
795
|
|
|
694
796
|
// src/lib/claudeLaunch.ts
|
|
695
|
-
import { spawnSync as
|
|
797
|
+
import { spawnSync as spawnSync3 } from "node:child_process";
|
|
696
798
|
function buildClaudeArgs(opts = {}) {
|
|
697
799
|
const extra = opts.extraArgs ?? [];
|
|
698
800
|
return opts.dangerously ? ["--dangerously-load-development-channels", CHANNEL_SPEC, ...extra] : ["--channels", CHANNEL_SPEC, ...extra];
|
|
@@ -701,7 +803,7 @@ function launchClaude(opts = {}, launcher = defaultLauncher) {
|
|
|
701
803
|
return launcher("claude", buildClaudeArgs(opts), opts.env);
|
|
702
804
|
}
|
|
703
805
|
var CHANNEL_SPEC = "plugin:vibegroup@vibegroup", defaultLauncher = (cmd, args, env) => {
|
|
704
|
-
const r =
|
|
806
|
+
const r = spawnSync3(cmd, args, { stdio: "inherit", env: env ? { ...process.env, ...env } : process.env });
|
|
705
807
|
if (r.error)
|
|
706
808
|
throw r.error;
|
|
707
809
|
return r.status ?? 0;
|
|
@@ -832,6 +934,10 @@ async function run(argv, env = process.env) {
|
|
|
832
934
|
const { allowlistPathCommand: allowlistPathCommand2 } = await Promise.resolve().then(() => (init_allowlist2(), exports_allowlist));
|
|
833
935
|
return allowlistPathCommand2();
|
|
834
936
|
}
|
|
937
|
+
case "install": {
|
|
938
|
+
const { installCommand: installCommand2 } = await Promise.resolve().then(() => (init_install(), exports_install));
|
|
939
|
+
return installCommand2();
|
|
940
|
+
}
|
|
835
941
|
case "init": {
|
|
836
942
|
const { initCommand: initCommand2 } = await Promise.resolve().then(() => (init_init(), exports_init));
|
|
837
943
|
return initCommand2(rest, flags, env);
|
|
@@ -863,11 +969,12 @@ async function run(argv, env = process.env) {
|
|
|
863
969
|
return 1;
|
|
864
970
|
}
|
|
865
971
|
}
|
|
866
|
-
var VERSION
|
|
972
|
+
var VERSION, DEFAULT_API_BASE2 = "https://api.vibegroup.sh", HELP = `vibegroup — talk to your teammates' Claude Code agents.
|
|
867
973
|
|
|
868
974
|
Usage: vibegroup <command> [options]
|
|
869
975
|
|
|
870
976
|
Commands:
|
|
977
|
+
install Register the vibegroup plugin in Claude Code (also: npx vibegroup install)
|
|
871
978
|
init [email] One-time setup: install the plugin, enable the channel, sign in
|
|
872
979
|
login [email] Sign in / sign up (opens your browser, verifies email)
|
|
873
980
|
logout Clear the cached session
|
|
@@ -882,6 +989,8 @@ Commands:
|
|
|
882
989
|
Run a command with --help for more.`;
|
|
883
990
|
var init_cli = __esm(() => {
|
|
884
991
|
init_auth();
|
|
992
|
+
init_package();
|
|
993
|
+
VERSION = package_default.version;
|
|
885
994
|
});
|
|
886
995
|
|
|
887
996
|
// src/bin.ts
|