borgmcp 0.8.22 → 0.9.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.
package/dist/spawn.js CHANGED
@@ -1,273 +1,29 @@
1
1
  /**
2
- * `borg spawn` — create a new git worktree for a sibling drone and
3
- * (by default) launch a fresh Claude Code session inside it.
4
- *
5
- * Why this exists: the cube's multi-drone pattern wants each drone to
6
- * have its own worktree so parallel branches don't step on each other,
7
- * but the manual ceremony (`git worktree add ../foo-name`, then
8
- * `cd ../foo-name && borg`) is enough friction that drones drift back
9
- * to working in one worktree and serializing. The subcommand collapses
10
- * that to `borg spawn <name>`.
11
- *
12
- * Layout:
13
- * Given the current worktree's primary at `/path/to/borg-mcp`, a
14
- * `borg spawn builder` call creates `/path/to/borg-mcp-builder` as
15
- * a sibling directory and runs `git worktree add` to register it.
16
- * Default checkout is detached HEAD at the current HEAD so the new
17
- * drone starts on a clean reference point without competing with
18
- * the source worktree's branch state.
19
- *
20
- * Flags:
21
- * --no-launch Create the worktree but don't run `borg` inside.
22
- * Useful for setting up a tree to come back to later.
23
- * --branch <ref> Check out a specific branch instead of detached
24
- * HEAD. If <ref> is already checked out in another
25
- * worktree, git refuses and we surface that error.
26
- *
27
- * Edge cases:
28
- * - Not inside a git repo → friendly error, exit 1
29
- * - Target path already exists → friendly error, exit 1
30
- * - Empty name / name with slashes → format-hint error, exit 1
31
- * - git worktree add fails → surface git's stderr verbatim, exit 1
32
- */
33
- import { spawnSync, spawn } from 'node:child_process';
34
- import { existsSync } from 'node:fs';
35
- import { basename, dirname, join, resolve } from 'node:path';
36
- import chalk from 'chalk';
37
- /**
38
- * Parse `argv.slice(2)` (i.e. arguments to `borg`, with `spawn` already
39
- * stripped) into a structured SpawnArgs or a friendly error.
40
- *
41
- * Supported shapes:
42
- * borg spawn <name>
43
- * borg spawn <name> --no-launch
44
- * borg spawn <name> --branch <ref>
45
- * borg spawn <name> --branch <ref> --no-launch
46
- * (flag order doesn't matter; positional `<name>` may appear before
47
- * or after the flags)
48
- *
49
- * Unknown flags and missing/duplicate positional name are caller-
50
- * friendly errors with format hints.
51
- */
52
- export function parseSpawnArgs(rawArgs) {
53
- let name = null;
54
- let noLaunch = false;
55
- let branch = null;
56
- for (let i = 0; i < rawArgs.length; i += 1) {
57
- const arg = rawArgs[i];
58
- if (arg === '--no-launch') {
59
- noLaunch = true;
60
- }
61
- else if (arg === '--branch') {
62
- const next = rawArgs[i + 1];
63
- if (typeof next !== 'string' || next.length === 0) {
64
- return {
65
- ok: false,
66
- error: `--branch requires a ref argument (e.g. \`--branch main\`)`,
67
- };
68
- }
69
- branch = next;
70
- i += 1;
71
- }
72
- else if (arg.startsWith('--')) {
73
- return {
74
- ok: false,
75
- error: `unknown flag: ${arg}. Supported: --no-launch, --branch <ref>`,
76
- };
77
- }
78
- else {
79
- if (name !== null) {
80
- return {
81
- ok: false,
82
- error: `unexpected extra argument: ${arg} (already have name "${name}")`,
83
- };
84
- }
85
- name = arg;
86
- }
87
- }
88
- if (name === null) {
89
- return {
90
- ok: false,
91
- error: `missing required argument <name>. Usage: borg spawn <name> [--branch <ref>] [--no-launch]`,
92
- };
93
- }
94
- return { ok: true, args: { name, noLaunch, branch } };
95
- }
96
- // ------------------------------------------------------------------
97
- // Name validation
98
- // ------------------------------------------------------------------
99
- /**
100
- * Worktree names get tacked onto the parent directory's path. They
101
- * must therefore be filesystem-safe AND short enough that the
102
- * resulting path doesn't make `ls` unreadable. Reject anything with
103
- * slashes, parent-directory tokens, leading dashes (would parse as
104
- * a flag), or shell-metacharacter punctuation.
105
- *
106
- * Allowed: lowercase ASCII letters, digits, hyphens, underscores.
107
- * Length 1–48. Anchored. No leading hyphen.
108
- */
109
- const NAME_RE = /^[a-z0-9_][a-z0-9_-]{0,47}$/;
110
- export function validateName(name) {
111
- if (name.length === 0) {
112
- return { ok: false, error: `name must not be empty` };
113
- }
114
- if (!NAME_RE.test(name)) {
115
- return {
116
- ok: false,
117
- error: `invalid name "${name}". Use lowercase letters, digits, hyphens, or ` +
118
- `underscores; max 48 chars; must not start with a hyphen.`,
119
- };
120
- }
121
- return { ok: true };
122
- }
123
- // ------------------------------------------------------------------
124
- // Path computation (pure)
125
- // ------------------------------------------------------------------
126
- /**
127
- * Given the absolute path to the primary worktree and a validated
128
- * spawn name, return the absolute path of the new sibling worktree.
129
- *
130
- * Naming convention: `<sibling-parent>/<primary-basename>-<name>`.
131
- * Example: primary `/home/x/borg-mcp` + name `builder` →
132
- * `/home/x/borg-mcp-builder`. Keeps related worktrees alphabetically
133
- * adjacent in `ls`, which matters when a drone-operator has a dozen
134
- * sibling trees.
135
- *
136
- * Pure. Tested directly.
137
- */
138
- export function computeWorktreePath(primaryWorktreeAbs, name) {
139
- const parent = dirname(primaryWorktreeAbs);
140
- const base = basename(primaryWorktreeAbs);
141
- return join(parent, `${base}-${name}`);
142
- }
143
- const defaultDeps = {
144
- runSync: (cmd, args, cwd) => {
145
- const r = spawnSync(cmd, args, { cwd, encoding: 'utf-8' });
146
- return {
147
- status: r.status,
148
- stdout: r.stdout ?? '',
149
- stderr: r.stderr ?? '',
150
- };
151
- },
152
- pathExists: (p) => existsSync(p),
153
- runDetached: (cmd, args, cwd) => new Promise((resolveExit, rejectExit) => {
154
- const child = spawn(cmd, args, { cwd, stdio: 'inherit', shell: false });
155
- child.on('error', rejectExit);
156
- child.on('exit', (code) => resolveExit(code ?? 0));
157
- }),
158
- cwd: () => process.cwd(),
159
- stderr: (line) => process.stderr.write(line),
160
- };
161
- /**
162
- * Run the `borg spawn` flow against the given args. Returns the
163
- * desired process exit code. Pure side-effects flow through `deps`
164
- * so tests can inject mocks for every external interaction.
165
- *
166
- * Flow:
167
- * 1. Validate name
168
- * 2. Resolve primary worktree path via `git rev-parse --show-toplevel`
169
- * (run from the operator's cwd — handles nested worktrees by
170
- * asking git to find the top, which always points at the current
171
- * worktree's root; for our naming convention we want the
172
- * `--git-common-dir` parent which IS the primary worktree's
173
- * filesystem dir, NOT the current worktree's. Resolve below.)
174
- * 3. Compute target path; abort if exists
175
- * 4. Run `git worktree add <target> [<ref>|--detach HEAD]`
176
- * 5. Print stderr nudge
177
- * 6. If !noLaunch, exec `borg` inside the new worktree
178
- */
179
- export async function runSpawn(args, deps = {}) {
180
- const { runSync, pathExists, runDetached, cwd, stderr } = {
181
- ...defaultDeps,
182
- ...deps,
183
- };
184
- // (1) Name validation
185
- const nameCheck = validateName(args.name);
186
- if (!nameCheck.ok) {
187
- stderr(chalk.red(`◼ borg spawn: ${nameCheck.error}\n`));
188
- return 1;
189
- }
190
- // (2) Primary worktree resolution.
191
- //
192
- // `git rev-parse --git-common-dir` returns the path to the SHARED
193
- // `.git` directory (the primary worktree's `.git`). The PRIMARY
194
- // WORKTREE itself is that directory's parent — which is what we
195
- // want to use as the basis for the sibling worktree's path. This
196
- // resolution works correctly even when `borg spawn` is invoked
197
- // from inside a non-primary worktree (e.g. the operator already
198
- // cd'd into a sibling drone tree and wants to spin up another).
199
- const cwdValue = cwd();
200
- const gitCommonDir = runSync('git', ['rev-parse', '--git-common-dir'], cwdValue);
201
- if (gitCommonDir.status !== 0) {
202
- stderr(chalk.red(`◼ borg spawn: not in a git repository (cwd: ${cwdValue})\n`));
203
- return 1;
204
- }
205
- const commonDirRaw = gitCommonDir.stdout.trim();
206
- // `--git-common-dir` may print a relative path (e.g. `.git`); resolve
207
- // against cwd to get an absolute reference.
208
- const commonDirAbs = resolve(cwdValue, commonDirRaw);
209
- // Strip the trailing `.git` segment to get the primary worktree root.
210
- // commonDirAbs ends in `/.git` for a regular checkout, or in
211
- // `/.git/worktrees/<name>` for a non-primary worktree's perspective
212
- // (but `--common-dir` always returns the SHARED `.git`, so the suffix
213
- // is just `/.git`). dirname() peels the `.git` segment off.
214
- const primaryWorktree = basename(commonDirAbs) === '.git' ? dirname(commonDirAbs) : commonDirAbs;
215
- // (3) Compute + collision-check target path
216
- const targetPath = computeWorktreePath(primaryWorktree, args.name);
217
- if (pathExists(targetPath)) {
218
- stderr(chalk.red(`◼ borg spawn: target path already exists: ${targetPath}\n`));
219
- return 1;
220
- }
221
- // (4) Create the worktree
222
- const worktreeArgs = args.branch
223
- ? ['worktree', 'add', targetPath, args.branch]
224
- : ['worktree', 'add', '--detach', targetPath, 'HEAD'];
225
- const createResult = runSync('git', worktreeArgs, primaryWorktree);
226
- if (createResult.status !== 0) {
227
- const gitErr = createResult.stderr.trim() || createResult.stdout.trim();
228
- stderr(chalk.red(`◼ borg spawn: git worktree add failed:\n${gitErr}\n`));
229
- return 1;
230
- }
231
- // (5) Stderr nudge.
232
- //
233
- // Even though `git worktree add` already prints its own confirmation
234
- // line, we add a short summary that names the next steps the operator
235
- // typically wants — particularly the "checkout a branch and pull"
236
- // reminder for the default detached case, which catches users who
237
- // would otherwise start work on a stale HEAD without realising.
238
- stderr(chalk.blue(`◼ Spawned worktree at ${targetPath}\n`));
239
- if (!args.branch) {
240
- const shortSha = readShortSha(runSync, targetPath);
241
- stderr(chalk.gray(`◼ Detached HEAD at ${shortSha}\n`));
242
- stderr(chalk.gray(`◼ Run \`git checkout main && git pull\` (or your repo's default branch) before starting work\n`));
243
- }
244
- else {
245
- stderr(chalk.gray(`◼ Checked out ${args.branch}\n`));
246
- }
247
- // (6) Optional drone launch.
248
- if (args.noLaunch) {
249
- stderr(chalk.gray(`◼ --no-launch: skipping borg launch\n`));
250
- stderr(chalk.gray(` cd ${targetPath} && borg\n`));
251
- return 0;
252
- }
253
- stderr(chalk.blue(`◼ Launching Claude Code in ${targetPath}…\n`));
254
- try {
255
- const code = await runDetached('borg', [], targetPath);
256
- return code;
257
- }
258
- catch (err) {
259
- stderr(chalk.red(`◼ borg spawn: failed to launch borg in new worktree: ${err?.message ?? err}\n`));
260
- return 1;
261
- }
262
- }
263
- /**
264
- * Best-effort short SHA of the new worktree's HEAD. Used only for the
265
- * cosmetic "Detached HEAD at <sha>" line; failure here is non-fatal.
2
+ * `borg spawn` — deprecation stub.
3
+ *
4
+ * Replaced by `borg assimilate [role] --worktree <name>` (see
5
+ * `assimilate-cmd.ts`). The new command folds worktree creation,
6
+ * OAuth bootstrap, cube creation, template application, and drone
7
+ * assimilation into one shell call. This file remains so existing
8
+ * scripts and tab-completion entries fail loudly with an actionable
9
+ * migration message rather than silently mis-routing.
10
+ *
11
+ * `validateName` continues to be re-exported from here for callers
12
+ * that still depend on the symbol (it lives in `name-validator.ts`
13
+ * now single source of truth).
266
14
  */
267
- function readShortSha(runSync, worktreePath) {
268
- const r = runSync('git', ['rev-parse', '--short', 'HEAD'], worktreePath);
269
- if (r.status === 0)
270
- return r.stdout.trim();
271
- return '(unknown)';
15
+ export { validateName } from './name-validator.js';
16
+ export async function runSpawn() {
17
+ const msg = 'borg spawn is removed. Use:\n' +
18
+ ' borg assimilate [role] --worktree <name>\n' +
19
+ '\n' +
20
+ 'Example: if you previously ran `borg spawn drone-2`, the equivalent is\n' +
21
+ ' borg assimilate --worktree drone-2\n' +
22
+ '(role is optional; defaults per first-drone rules)\n' +
23
+ '\n' +
24
+ 'If you want a specific role:\n' +
25
+ ' borg assimilate builder --worktree drone-2\n';
26
+ process.stderr.write(msg);
27
+ return 2;
272
28
  }
273
29
  //# sourceMappingURL=spawn.js.map
package/dist/spawn.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../src/spawn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../src/spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,MAAM,GAAG,GACP,+BAA+B;QAC/B,8CAA8C;QAC9C,IAAI;QACJ,0EAA0E;QAC1E,wCAAwC;QACxC,sDAAsD;QACtD,IAAI;QACJ,gCAAgC;QAChC,gDAAgD,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,CAAC;AACX,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "borgmcp",
3
- "version": "0.8.22",
3
+ "version": "0.9.1",
4
4
  "description": "Multi-agent coordination for Claude Code — cubes, drones, and a shared activity log.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",