vibegroup 0.1.2 → 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 +71 -25
- package/package.json +1 -3
- package/scripts/postinstall.mjs +0 -38
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
|
@@ -70,7 +70,7 @@ var package_default;
|
|
|
70
70
|
var init_package = __esm(() => {
|
|
71
71
|
package_default = {
|
|
72
72
|
name: "vibegroup",
|
|
73
|
-
version: "0.1.
|
|
73
|
+
version: "0.1.3",
|
|
74
74
|
description: "Talk to your teammates' Claude Code agents — agent-to-agent collaboration for Claude Code over a shared channel.",
|
|
75
75
|
type: "module",
|
|
76
76
|
bin: {
|
|
@@ -79,7 +79,6 @@ var init_package = __esm(() => {
|
|
|
79
79
|
files: [
|
|
80
80
|
"dist/cli.js",
|
|
81
81
|
"README.md",
|
|
82
|
-
"scripts/postinstall.mjs",
|
|
83
82
|
".claude-plugin/marketplace.json",
|
|
84
83
|
"plugin/.claude-plugin",
|
|
85
84
|
"plugin/.mcp.json",
|
|
@@ -107,7 +106,6 @@ var init_package = __esm(() => {
|
|
|
107
106
|
"build:server": "cd packages/server && bun run build",
|
|
108
107
|
build: "bun run build:relay && bun run build:server && bun run build:plugin && bun run build:cli",
|
|
109
108
|
prepublishOnly: "bun run build:plugin && bun run build:cli",
|
|
110
|
-
postinstall: "node scripts/postinstall.mjs",
|
|
111
109
|
"test:cli": "bun test ./test/",
|
|
112
110
|
"test:protocol": "cd packages/protocol && bun test",
|
|
113
111
|
"test:relay": "cd packages/relay && bun test",
|
|
@@ -178,6 +176,60 @@ var init_allowlist2 = __esm(() => {
|
|
|
178
176
|
init_allowlist();
|
|
179
177
|
});
|
|
180
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
|
+
|
|
181
233
|
// src/ui/runner.ts
|
|
182
234
|
import { render } from "ink";
|
|
183
235
|
function runInk(make) {
|
|
@@ -551,20 +603,9 @@ var exports_init = {};
|
|
|
551
603
|
__export(exports_init, {
|
|
552
604
|
initCommand: () => initCommand
|
|
553
605
|
});
|
|
554
|
-
import { spawnSync } from "node:child_process";
|
|
606
|
+
import { spawnSync as spawnSync2 } from "node:child_process";
|
|
555
607
|
import { existsSync as existsSync3, readFileSync as readFileSync3 } from "node:fs";
|
|
556
|
-
import {
|
|
557
|
-
import { dirname as dirname2, join as join2 } from "node:path";
|
|
558
|
-
function packageRoot() {
|
|
559
|
-
return join2(dirname2(fileURLToPath(import.meta.url)), "..");
|
|
560
|
-
}
|
|
561
|
-
function commandExists(cmd) {
|
|
562
|
-
return spawnSync(cmd, ["--version"], { stdio: "ignore" }).status === 0;
|
|
563
|
-
}
|
|
564
|
-
function pluginInstalled() {
|
|
565
|
-
const r = spawnSync("claude", ["plugin", "list"], { encoding: "utf8" });
|
|
566
|
-
return r.status === 0 && /vibegroup@vibegroup/.test(r.stdout ?? "");
|
|
567
|
-
}
|
|
608
|
+
import { dirname as dirname3 } from "node:path";
|
|
568
609
|
function readManagedSettings() {
|
|
569
610
|
try {
|
|
570
611
|
const p = managedSettingsPath();
|
|
@@ -576,15 +617,15 @@ function readManagedSettings() {
|
|
|
576
617
|
function writeAllowlistWithSudo() {
|
|
577
618
|
const path = managedSettingsPath();
|
|
578
619
|
const json2 = JSON.stringify(mergeManagedSettings(readManagedSettings()), null, 2);
|
|
579
|
-
const script = `mkdir -p "${
|
|
580
|
-
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"] });
|
|
581
622
|
return r.status === 0;
|
|
582
623
|
}
|
|
583
624
|
async function initCommand(rest, flags = {}, env = process.env) {
|
|
584
625
|
const dev = flags.dev === true;
|
|
585
626
|
console.log(`vibegroup setup
|
|
586
627
|
`);
|
|
587
|
-
if (!
|
|
628
|
+
if (!claudeAvailable()) {
|
|
588
629
|
console.error("Claude Code (`claude`) is not on your PATH. Install it first: https://docs.claude.com/claude-code");
|
|
589
630
|
return 1;
|
|
590
631
|
}
|
|
@@ -592,10 +633,9 @@ async function initCommand(rest, flags = {}, env = process.env) {
|
|
|
592
633
|
console.log("✓ Plugin already installed.");
|
|
593
634
|
} else {
|
|
594
635
|
console.log("• Installing the vibegroup plugin into Claude Code…");
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
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);
|
|
599
639
|
return 1;
|
|
600
640
|
}
|
|
601
641
|
console.log("✓ Plugin installed.");
|
|
@@ -632,6 +672,7 @@ async function initCommand(rest, flags = {}, env = process.env) {
|
|
|
632
672
|
var init_init = __esm(() => {
|
|
633
673
|
init_auth();
|
|
634
674
|
init_allowlist();
|
|
675
|
+
init_pluginInstall();
|
|
635
676
|
init_login();
|
|
636
677
|
});
|
|
637
678
|
|
|
@@ -753,7 +794,7 @@ var init_team = __esm(() => {
|
|
|
753
794
|
});
|
|
754
795
|
|
|
755
796
|
// src/lib/claudeLaunch.ts
|
|
756
|
-
import { spawnSync as
|
|
797
|
+
import { spawnSync as spawnSync3 } from "node:child_process";
|
|
757
798
|
function buildClaudeArgs(opts = {}) {
|
|
758
799
|
const extra = opts.extraArgs ?? [];
|
|
759
800
|
return opts.dangerously ? ["--dangerously-load-development-channels", CHANNEL_SPEC, ...extra] : ["--channels", CHANNEL_SPEC, ...extra];
|
|
@@ -762,7 +803,7 @@ function launchClaude(opts = {}, launcher = defaultLauncher) {
|
|
|
762
803
|
return launcher("claude", buildClaudeArgs(opts), opts.env);
|
|
763
804
|
}
|
|
764
805
|
var CHANNEL_SPEC = "plugin:vibegroup@vibegroup", defaultLauncher = (cmd, args, env) => {
|
|
765
|
-
const r =
|
|
806
|
+
const r = spawnSync3(cmd, args, { stdio: "inherit", env: env ? { ...process.env, ...env } : process.env });
|
|
766
807
|
if (r.error)
|
|
767
808
|
throw r.error;
|
|
768
809
|
return r.status ?? 0;
|
|
@@ -893,6 +934,10 @@ async function run(argv, env = process.env) {
|
|
|
893
934
|
const { allowlistPathCommand: allowlistPathCommand2 } = await Promise.resolve().then(() => (init_allowlist2(), exports_allowlist));
|
|
894
935
|
return allowlistPathCommand2();
|
|
895
936
|
}
|
|
937
|
+
case "install": {
|
|
938
|
+
const { installCommand: installCommand2 } = await Promise.resolve().then(() => (init_install(), exports_install));
|
|
939
|
+
return installCommand2();
|
|
940
|
+
}
|
|
896
941
|
case "init": {
|
|
897
942
|
const { initCommand: initCommand2 } = await Promise.resolve().then(() => (init_init(), exports_init));
|
|
898
943
|
return initCommand2(rest, flags, env);
|
|
@@ -929,6 +974,7 @@ var VERSION, DEFAULT_API_BASE2 = "https://api.vibegroup.sh", HELP = `vibegroup
|
|
|
929
974
|
Usage: vibegroup <command> [options]
|
|
930
975
|
|
|
931
976
|
Commands:
|
|
977
|
+
install Register the vibegroup plugin in Claude Code (also: npx vibegroup install)
|
|
932
978
|
init [email] One-time setup: install the plugin, enable the channel, sign in
|
|
933
979
|
login [email] Sign in / sign up (opens your browser, verifies email)
|
|
934
980
|
logout Clear the cached session
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibegroup",
|
|
3
|
-
"version": "0.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": {
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
"dist/cli.js",
|
|
11
11
|
"README.md",
|
|
12
|
-
"scripts/postinstall.mjs",
|
|
13
12
|
".claude-plugin/marketplace.json",
|
|
14
13
|
"plugin/.claude-plugin",
|
|
15
14
|
"plugin/.mcp.json",
|
|
@@ -37,7 +36,6 @@
|
|
|
37
36
|
"build:server": "cd packages/server && bun run build",
|
|
38
37
|
"build": "bun run build:relay && bun run build:server && bun run build:plugin && bun run build:cli",
|
|
39
38
|
"prepublishOnly": "bun run build:plugin && bun run build:cli",
|
|
40
|
-
"postinstall": "node scripts/postinstall.mjs",
|
|
41
39
|
"test:cli": "bun test ./test/",
|
|
42
40
|
"test:protocol": "cd packages/protocol && bun test",
|
|
43
41
|
"test:relay": "cd packages/relay && bun test",
|
package/scripts/postinstall.mjs
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// Best-effort: after `npm i -g vibegroup`, register the plugin into Claude Code so
|
|
2
|
-
// it's usable immediately. The channel allowlist (needs sudo) and sign-in still
|
|
3
|
-
// happen in `vibegroup init`. Never fails the install — only global installs act.
|
|
4
|
-
import { spawnSync } from 'node:child_process'
|
|
5
|
-
import { fileURLToPath } from 'node:url'
|
|
6
|
-
import { dirname, join } from 'node:path'
|
|
7
|
-
|
|
8
|
-
try {
|
|
9
|
-
if (process.env.npm_config_global !== 'true') process.exit(0)
|
|
10
|
-
|
|
11
|
-
const has = (cmd) => {
|
|
12
|
-
try {
|
|
13
|
-
return spawnSync(cmd, ['--version'], { stdio: 'ignore' }).status === 0
|
|
14
|
-
} catch {
|
|
15
|
-
return false
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
if (!has('claude')) {
|
|
20
|
-
console.log('\nvibegroup installed. Install Claude Code, then run `vibegroup init` to set up the plugin + channel.\n')
|
|
21
|
-
process.exit(0)
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const list = spawnSync('claude', ['plugin', 'list'], { encoding: 'utf8' })
|
|
25
|
-
if (list.status === 0 && /vibegroup@vibegroup/.test(list.stdout ?? '')) {
|
|
26
|
-
console.log('\nvibegroup plugin already registered. Finish setup any time with `vibegroup init`.\n')
|
|
27
|
-
process.exit(0)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const root = join(dirname(fileURLToPath(import.meta.url)), '..')
|
|
31
|
-
console.log('\nRegistering the vibegroup plugin in Claude Code…')
|
|
32
|
-
spawnSync('claude', ['plugin', 'marketplace', 'add', root], { stdio: 'inherit' })
|
|
33
|
-
spawnSync('claude', ['plugin', 'install', 'vibegroup@vibegroup'], { stdio: 'inherit' })
|
|
34
|
-
console.log('\n✓ Plugin registered. Next: run `vibegroup init` (enables the channel + signs you in).\n')
|
|
35
|
-
} catch {
|
|
36
|
-
// never break the install
|
|
37
|
-
process.exit(0)
|
|
38
|
-
}
|