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.
Files changed (3) hide show
  1. package/README.md +10 -2
  2. package/dist/cli.js +132 -23
  3. 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 login # sign in (opens your browser)
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 login Sign in / sign up
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 { fileURLToPath } from "node:url";
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 "${dirname2(path)}" && cat > "${path}"`;
519
- const r = spawnSync("sudo", ["sh", "-c", script], { input: json2, stdio: ["pipe", "inherit", "inherit"] });
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 (!commandExists("claude")) {
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
- spawnSync("claude", ["plugin", "marketplace", "add", packageRoot()], { stdio: "inherit" });
535
- spawnSync("claude", ["plugin", "install", "vibegroup@vibegroup"], { stdio: "inherit" });
536
- if (!pluginInstalled()) {
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 spawnSync2 } from "node:child_process";
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 = spawnSync2(cmd, args, { stdio: "inherit", env: env ? { ...process.env, ...env } : process.env });
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 = "0.1.0", DEFAULT_API_BASE2 = "https://api.vibegroup.sh", HELP = `vibegroup — talk to your teammates' Claude Code agents.
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibegroup",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Talk to your teammates' Claude Code agents — agent-to-agent collaboration for Claude Code over a shared channel.",
5
5
  "type": "module",
6
6
  "bin": {