@sideboard-ai/core 0.1.66 → 0.1.67

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 (35) hide show
  1. package/dist/{agents-MD7SCFYX.js → agents-OTBZVTZO.js} +10 -6
  2. package/dist/{agents-EWFD765A.js → agents-TS3EI2YI.js} +10 -6
  3. package/dist/{chunk-R7GUDEPY.js → chunk-4BUCGNZS.js} +1 -1
  4. package/dist/{chunk-TXQ6K2GR.js → chunk-4UIYN56C.js} +13 -2
  5. package/dist/{chunk-LRBRQFBU.js → chunk-57WWNMFP.js} +1 -1
  6. package/dist/{chunk-HTOTTJJX.js → chunk-5HTTCYWA.js} +2 -2
  7. package/dist/{chunk-YTNLOJPK.js → chunk-7ZOQY4A7.js} +2 -2
  8. package/dist/{chunk-IFAU2DEY.js → chunk-B4PRRKMA.js} +22 -7
  9. package/dist/{chunk-DZYMNW2A.js → chunk-DB3I75FI.js} +4 -4
  10. package/dist/{chunk-5AG5BUQN.js → chunk-FGDJOJ2L.js} +13 -2
  11. package/dist/{chunk-DNPP7QMK.js → chunk-JWZNK3CQ.js} +2 -2
  12. package/dist/{chunk-BBEH2CJE.js → chunk-K7LM4CLD.js} +22 -7
  13. package/dist/{chunk-I2KGRAXC.js → chunk-LW5CMQGZ.js} +1 -1
  14. package/dist/{chunk-EVD4KNKR.js → chunk-M5V4QIWF.js} +1 -1
  15. package/dist/{chunk-PESJDZTB.js → chunk-WAFIF22N.js} +2 -2
  16. package/dist/{chunk-AKPEXIKK.js → chunk-ZRFAZVGL.js} +1 -1
  17. package/dist/{connected-teams-GJTESSTX.js → connected-teams-OMDHTL6A.js} +2 -2
  18. package/dist/{connected-teams-CHXO5FFA.js → connected-teams-RUNMOCG5.js} +2 -2
  19. package/dist/{coordinator-prompt-ILSULI7C.js → coordinator-prompt-3BSMKZL4.js} +3 -3
  20. package/dist/{coordinator-prompt-E5UGSJES.js → coordinator-prompt-6HMTOX4G.js} +3 -3
  21. package/dist/{global-workspace-44UG64NA.js → global-workspace-QS7A23CB.js} +4 -4
  22. package/dist/{global-workspace-5PM5LA6E.js → global-workspace-YZ2NJVLL.js} +4 -4
  23. package/dist/index.cjs +34 -5
  24. package/dist/index.d.cts +6 -2
  25. package/dist/index.d.ts +6 -2
  26. package/dist/index.js +21 -17
  27. package/dist/mcp/run-stdio.cjs +30 -5
  28. package/dist/mcp/run-stdio.js +16 -16
  29. package/dist/{run-JLN5JK7Q.js → run-JLD2Y52J.js} +1 -1
  30. package/dist/{run-74S2NZWB.js → run-Y2MI3EVV.js} +1 -1
  31. package/dist/{workspaces-RXFXQRRF.js → workspaces-AIUYUXB7.js} +5 -5
  32. package/dist/{workspaces-OVBCSS5Y.js → workspaces-EBFW7I7S.js} +5 -5
  33. package/dist/{worktree-K2JB53R5.js → worktree-7NBPIVFZ.js} +2 -2
  34. package/dist/{worktree-S2N63FLV.js → worktree-WMDJW2BL.js} +2 -2
  35. package/package.json +1 -1
@@ -32,25 +32,27 @@ import {
32
32
  resolveCursorModelId,
33
33
  resolveLoginCommand,
34
34
  resolveQuotaFallbackAgent
35
- } from "./chunk-BBEH2CJE.js";
36
- import "./chunk-EVD4KNKR.js";
35
+ } from "./chunk-K7LM4CLD.js";
36
+ import "./chunk-M5V4QIWF.js";
37
37
  import {
38
38
  ORCHESTRATOR_AGENT_KINDS,
39
39
  assertOrchestratorCapableAgent,
40
40
  coerceOrchestratorAgent,
41
41
  isOrchestratorCapableAgent
42
- } from "./chunk-DNPP7QMK.js";
43
- import "./chunk-LRBRQFBU.js";
44
- import "./chunk-I2KGRAXC.js";
42
+ } from "./chunk-JWZNK3CQ.js";
43
+ import "./chunk-57WWNMFP.js";
44
+ import "./chunk-LW5CMQGZ.js";
45
45
  import "./chunk-B3SJXYIJ.js";
46
46
  import "./chunk-7FD7COKE.js";
47
47
  import {
48
+ conductorBundledBinDir,
48
49
  enrichPathWithNpmGlobalBin,
49
50
  ensureAgentPath,
51
+ isConductorBundledCli,
50
52
  posixShellSingleQuote,
51
53
  resolveCommandBinarySync,
52
54
  withExportedPath
53
- } from "./chunk-5AG5BUQN.js";
55
+ } from "./chunk-FGDJOJ2L.js";
54
56
  import "./chunk-BPOTVI5J.js";
55
57
  import "./chunk-KGZBYWZ3.js";
56
58
  import "./chunk-7MV3RXSC.js";
@@ -64,6 +66,7 @@ export {
64
66
  claudeAdapter,
65
67
  codexAdapter,
66
68
  coerceOrchestratorAgent,
69
+ conductorBundledBinDir,
67
70
  cursorAdapter,
68
71
  cursorSdkMessageToEvents,
69
72
  decodeBrightsyTarget,
@@ -73,6 +76,7 @@ export {
73
76
  getAdapter,
74
77
  getAgentSetupInfo,
75
78
  installAgent,
79
+ isConductorBundledCli,
76
80
  isCursorAutoModel,
77
81
  isOrchestratorCapableAgent,
78
82
  isSessionQuotaLimit,
@@ -28,32 +28,34 @@ import {
28
28
  resolveCursorModelId,
29
29
  resolveLoginCommand,
30
30
  resolveQuotaFallbackAgent
31
- } from "./chunk-IFAU2DEY.js";
31
+ } from "./chunk-B4PRRKMA.js";
32
32
  import {
33
33
  ORCHESTRATOR_AGENT_KINDS,
34
34
  assertOrchestratorCapableAgent,
35
35
  coerceOrchestratorAgent,
36
36
  isOrchestratorCapableAgent
37
- } from "./chunk-YTNLOJPK.js";
38
- import "./chunk-DZYMNW2A.js";
37
+ } from "./chunk-7ZOQY4A7.js";
38
+ import "./chunk-DB3I75FI.js";
39
39
  import {
40
40
  cursorSdkMessageToEvents,
41
41
  parseCursorRunnerLine
42
42
  } from "./chunk-3WJAUKIL.js";
43
- import "./chunk-AKPEXIKK.js";
43
+ import "./chunk-ZRFAZVGL.js";
44
44
  import "./chunk-MHR4OGZ4.js";
45
- import "./chunk-R7GUDEPY.js";
45
+ import "./chunk-4BUCGNZS.js";
46
46
  import "./chunk-FKOIHGKV.js";
47
47
  import "./chunk-FWJYLBO6.js";
48
48
  import "./chunk-77WWLBCI.js";
49
49
  import "./chunk-M37RITA6.js";
50
50
  import {
51
+ conductorBundledBinDir,
51
52
  enrichPathWithNpmGlobalBin,
52
53
  ensureAgentPath,
54
+ isConductorBundledCli,
53
55
  posixShellSingleQuote,
54
56
  resolveCommandBinarySync,
55
57
  withExportedPath
56
- } from "./chunk-TXQ6K2GR.js";
58
+ } from "./chunk-4UIYN56C.js";
57
59
  export {
58
60
  CLAUDE_MODEL_CATALOG,
59
61
  ORCHESTRATOR_AGENT_KINDS,
@@ -64,6 +66,7 @@ export {
64
66
  claudeAdapter,
65
67
  codexAdapter,
66
68
  coerceOrchestratorAgent,
69
+ conductorBundledBinDir,
67
70
  cursorAdapter,
68
71
  cursorSdkMessageToEvents,
69
72
  decodeBrightsyTarget,
@@ -73,6 +76,7 @@ export {
73
76
  getAdapter,
74
77
  getAgentSetupInfo,
75
78
  installAgent,
79
+ isConductorBundledCli,
76
80
  isCursorAutoModel,
77
81
  isOrchestratorCapableAgent,
78
82
  isSessionQuotaLimit,
@@ -11,7 +11,7 @@ import {
11
11
  gh,
12
12
  git,
13
13
  resolveGhAuthToken
14
- } from "./chunk-TXQ6K2GR.js";
14
+ } from "./chunk-4UIYN56C.js";
15
15
 
16
16
  // src/git/worktree.ts
17
17
  import { existsSync, readdirSync } from "fs";
@@ -29,6 +29,13 @@ function prependPathDir(env, dir) {
29
29
  }
30
30
  env.PATH = [dir, ...parts].join(delimiter);
31
31
  }
32
+ function conductorBundledBinDir(home = process.env.HOME || process.env.USERPROFILE || homedir()) {
33
+ return join(home, "Library", "Application Support", "com.conductor.app", "bin");
34
+ }
35
+ function isConductorBundledCli(filePath) {
36
+ const p = (filePath ?? "").replace(/\\/g, "/");
37
+ return p.includes("/com.conductor.app/bin/") || p.endsWith("/com.conductor.app/bin");
38
+ }
32
39
  function ensureAgentPath(env = process.env) {
33
40
  const home = env.HOME || env.USERPROFILE || homedir();
34
41
  const current = env.PATH ?? "";
@@ -37,7 +44,9 @@ function ensureAgentPath(env = process.env) {
37
44
  const extras = [
38
45
  ...EXTRA_BIN_DIRS.map((rel) => join(home, rel)),
39
46
  "/opt/homebrew/bin",
40
- "/usr/local/bin"
47
+ "/usr/local/bin",
48
+ // Keep after Homebrew/npm so a user-installed CLI still wins.
49
+ conductorBundledBinDir(home)
41
50
  ];
42
51
  for (const dir of extras.reverse()) {
43
52
  if (!dir || seen.has(dir) || !existsSync(dir)) continue;
@@ -84,7 +93,7 @@ function withExportedPath(command, pathValue) {
84
93
  const trimmed = command.trim();
85
94
  if (!trimmed) return trimmed;
86
95
  if (/^(export\s+PATH=|PATH=)/.test(trimmed)) return trimmed;
87
- return `export PATH=${posixShellSingleQuote(pathValue)}; ${trimmed}`;
96
+ return `export PATH=${posixShellSingleQuote(pathValue)} && ${trimmed}`;
88
97
  }
89
98
 
90
99
  // src/git/run.ts
@@ -150,6 +159,8 @@ async function resolveGhAuthToken(cwd) {
150
159
  }
151
160
 
152
161
  export {
162
+ conductorBundledBinDir,
163
+ isConductorBundledCli,
153
164
  ensureAgentPath,
154
165
  enrichPathWithNpmGlobalBin,
155
166
  posixShellSingleQuote,
@@ -2,7 +2,7 @@
2
2
 
3
3
  import {
4
4
  resolveGithubRepoSlug
5
- } from "./chunk-I2KGRAXC.js";
5
+ } from "./chunk-LW5CMQGZ.js";
6
6
  import {
7
7
  resolveThreadDefaults
8
8
  } from "./chunk-BPOTVI5J.js";
@@ -2,11 +2,11 @@
2
2
 
3
3
  import {
4
4
  isGlobalRepoPath
5
- } from "./chunk-DNPP7QMK.js";
5
+ } from "./chunk-JWZNK3CQ.js";
6
6
  import {
7
7
  ensureGhPreferOrigin,
8
8
  resolveRepoRoot
9
- } from "./chunk-I2KGRAXC.js";
9
+ } from "./chunk-LW5CMQGZ.js";
10
10
  import {
11
11
  appDataDir
12
12
  } from "./chunk-7MV3RXSC.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ensureGlobalCoordinatorCwd
3
- } from "./chunk-AKPEXIKK.js";
3
+ } from "./chunk-ZRFAZVGL.js";
4
4
  import {
5
5
  resolveNewThreadOptions,
6
6
  resolveThreadDefaults
@@ -9,7 +9,7 @@ import {
9
9
  allocateTeamName,
10
10
  takenSlugsFromThread,
11
11
  teamSlugFromName
12
- } from "./chunk-R7GUDEPY.js";
12
+ } from "./chunk-4BUCGNZS.js";
13
13
  import {
14
14
  createEmptyThread,
15
15
  listThreads,
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  isOrchestratorThread
3
- } from "./chunk-YTNLOJPK.js";
3
+ } from "./chunk-7ZOQY4A7.js";
4
4
  import {
5
5
  applyConnectedTeamToCli,
6
6
  brightsyMcpServerName,
7
7
  ensureCliTeamTracked,
8
8
  ensureConnectedBrightsyTeamTokens,
9
9
  loadBrightsyConfig
10
- } from "./chunk-DZYMNW2A.js";
10
+ } from "./chunk-DB3I75FI.js";
11
11
  import {
12
12
  extractJsonErrorMessage,
13
13
  formatUnknownDetail,
@@ -25,10 +25,11 @@ import {
25
25
  } from "./chunk-M37RITA6.js";
26
26
  import {
27
27
  enrichPathWithNpmGlobalBin,
28
+ isConductorBundledCli,
28
29
  resolveCommandBinarySync,
29
30
  run,
30
31
  withExportedPath
31
- } from "./chunk-TXQ6K2GR.js";
32
+ } from "./chunk-4UIYN56C.js";
32
33
 
33
34
  // src/agents/brightsy.ts
34
35
  import { existsSync } from "fs";
@@ -939,7 +940,7 @@ var claudeAdapter = {
939
940
  );
940
941
  }
941
942
  const mode = permissionMode(thread);
942
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-44UG64NA.js");
943
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-QS7A23CB.js");
943
944
  const isOrchestrator = isOrchestratorThread2(thread);
944
945
  const injectedServers = await buildInjectedMcpServers({
945
946
  includeSideboard: true,
@@ -2214,6 +2215,11 @@ async function openInSystemTerminal(command) {
2214
2215
  `No terminal found to run: ${trimmed}. Install gnome-terminal (or similar), or run the command manually.`
2215
2216
  );
2216
2217
  }
2218
+ async function whichCli(bin) {
2219
+ const which = await run("which", [bin], { reject: false, timeoutMs: 3e3 });
2220
+ if (which.exitCode !== 0) return null;
2221
+ return which.stdout.trim().split(/\r?\n/).find(Boolean) ?? null;
2222
+ }
2217
2223
  async function installAgent(agent) {
2218
2224
  const info = getAgentSetupInfo(agent);
2219
2225
  if (info.kind === "bundled-sdk" || info.kind === "api-key") {
@@ -2235,6 +2241,17 @@ async function installAgent(agent) {
2235
2241
  };
2236
2242
  }
2237
2243
  enrichPathWithNpmGlobalBin();
2244
+ const cliBin = agent === "cursor" ? null : CLI_BIN[agent];
2245
+ if (cliBin) {
2246
+ const existing = await whichCli(cliBin);
2247
+ if (existing) {
2248
+ return {
2249
+ ok: true,
2250
+ command: existing,
2251
+ message: isConductorBundledCli(existing) ? `Using Conductor\u2019s ${cliBin} at ${existing}. No extra install \u2014 Log in only if auth is missing.` : `Already on PATH: ${existing}`
2252
+ };
2253
+ }
2254
+ }
2238
2255
  const result = await run("npm", ["install", "-g", info.npmPackage], { reject: false });
2239
2256
  const ok = result.exitCode === 0;
2240
2257
  if (!ok) {
@@ -2261,11 +2278,9 @@ async function installAgent(agent) {
2261
2278
  }
2262
2279
  }
2263
2280
  enrichPathWithNpmGlobalBin();
2264
- const cliBin = agent === "cursor" ? null : CLI_BIN[agent];
2265
2281
  let binPath = null;
2266
2282
  if (cliBin) {
2267
- const which = await run("which", [cliBin], { reject: false, timeoutMs: 3e3 });
2268
- binPath = which.exitCode === 0 ? which.stdout.trim().split(/\r?\n/).find(Boolean) ?? null : null;
2283
+ binPath = await whichCli(cliBin);
2269
2284
  }
2270
2285
  return {
2271
2286
  ok: true,
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-M37RITA6.js";
4
4
  import {
5
5
  run
6
- } from "./chunk-TXQ6K2GR.js";
6
+ } from "./chunk-4UIYN56C.js";
7
7
 
8
8
  // src/brightsy/connected-teams.ts
9
9
  import { existsSync as existsSync2, mkdirSync, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "fs";
@@ -36,7 +36,7 @@ function saveBrightsyConfig(cfg) {
36
36
 
37
37
  // src/brightsy/accounts.ts
38
38
  async function loadConnectedTeams() {
39
- const { listConnectedBrightsyTeams: listConnectedBrightsyTeams2 } = await import("./connected-teams-GJTESSTX.js");
39
+ const { listConnectedBrightsyTeams: listConnectedBrightsyTeams2 } = await import("./connected-teams-OMDHTL6A.js");
40
40
  return listConnectedBrightsyTeams2();
41
41
  }
42
42
  async function runBrightsyTeamsJson(args) {
@@ -68,7 +68,7 @@ async function getBrightsySession() {
68
68
  const data = await runBrightsyTeamsJson([]);
69
69
  const accounts = Array.isArray(data.teams) ? data.teams : [];
70
70
  const active = data.active ?? accounts.find((a) => a.active) ?? null;
71
- const { ensureCliTeamTracked: ensureCliTeamTracked2 } = await import("./connected-teams-GJTESSTX.js");
71
+ const { ensureCliTeamTracked: ensureCliTeamTracked2 } = await import("./connected-teams-OMDHTL6A.js");
72
72
  const connectedTeams = ensureCliTeamTracked2(
73
73
  active ? { id: active.id, slug: active.slug, name: active.name } : void 0
74
74
  );
@@ -108,7 +108,7 @@ async function performBrightsyAccountSwitch(accountIdOrSlug) {
108
108
  return { cfg, target: data.active };
109
109
  }
110
110
  async function switchBrightsyAccount(accountIdOrSlug) {
111
- const { connectBrightsyTeam: connectBrightsyTeam2 } = await import("./connected-teams-GJTESSTX.js");
111
+ const { connectBrightsyTeam: connectBrightsyTeam2 } = await import("./connected-teams-OMDHTL6A.js");
112
112
  await connectBrightsyTeam2(accountIdOrSlug);
113
113
  return getBrightsySession();
114
114
  }
@@ -32,6 +32,13 @@ function prependPathDir(env, dir) {
32
32
  }
33
33
  env.PATH = [dir, ...parts].join(delimiter);
34
34
  }
35
+ function conductorBundledBinDir(home = process.env.HOME || process.env.USERPROFILE || homedir()) {
36
+ return join(home, "Library", "Application Support", "com.conductor.app", "bin");
37
+ }
38
+ function isConductorBundledCli(filePath) {
39
+ const p = (filePath ?? "").replace(/\\/g, "/");
40
+ return p.includes("/com.conductor.app/bin/") || p.endsWith("/com.conductor.app/bin");
41
+ }
35
42
  function ensureAgentPath(env = process.env) {
36
43
  const home = env.HOME || env.USERPROFILE || homedir();
37
44
  const current = env.PATH ?? "";
@@ -40,7 +47,9 @@ function ensureAgentPath(env = process.env) {
40
47
  const extras = [
41
48
  ...EXTRA_BIN_DIRS.map((rel) => join(home, rel)),
42
49
  "/opt/homebrew/bin",
43
- "/usr/local/bin"
50
+ "/usr/local/bin",
51
+ // Keep after Homebrew/npm so a user-installed CLI still wins.
52
+ conductorBundledBinDir(home)
44
53
  ];
45
54
  for (const dir of extras.reverse()) {
46
55
  if (!dir || seen.has(dir) || !existsSync(dir)) continue;
@@ -87,7 +96,7 @@ function withExportedPath(command, pathValue) {
87
96
  const trimmed = command.trim();
88
97
  if (!trimmed) return trimmed;
89
98
  if (/^(export\s+PATH=|PATH=)/.test(trimmed)) return trimmed;
90
- return `export PATH=${posixShellSingleQuote(pathValue)}; ${trimmed}`;
99
+ return `export PATH=${posixShellSingleQuote(pathValue)} && ${trimmed}`;
91
100
  }
92
101
 
93
102
  // src/git/run.ts
@@ -153,6 +162,8 @@ async function resolveGhAuthToken(cwd) {
153
162
  }
154
163
 
155
164
  export {
165
+ conductorBundledBinDir,
166
+ isConductorBundledCli,
156
167
  ensureAgentPath,
157
168
  enrichPathWithNpmGlobalBin,
158
169
  posixShellSingleQuote,
@@ -2,12 +2,12 @@
2
2
 
3
3
  import {
4
4
  ensureGlobalCoordinatorCwd
5
- } from "./chunk-LRBRQFBU.js";
5
+ } from "./chunk-57WWNMFP.js";
6
6
  import {
7
7
  allocateTeamName,
8
8
  takenSlugsFromThread,
9
9
  teamSlugFromName
10
- } from "./chunk-I2KGRAXC.js";
10
+ } from "./chunk-LW5CMQGZ.js";
11
11
  import {
12
12
  createEmptyThread,
13
13
  listThreads,
@@ -6,16 +6,17 @@ import {
6
6
  ensureCliTeamTracked,
7
7
  ensureConnectedBrightsyTeamTokens,
8
8
  loadBrightsyConfig
9
- } from "./chunk-EVD4KNKR.js";
9
+ } from "./chunk-M5V4QIWF.js";
10
10
  import {
11
11
  isOrchestratorThread
12
- } from "./chunk-DNPP7QMK.js";
12
+ } from "./chunk-JWZNK3CQ.js";
13
13
  import {
14
14
  enrichPathWithNpmGlobalBin,
15
+ isConductorBundledCli,
15
16
  resolveCommandBinarySync,
16
17
  run,
17
18
  withExportedPath
18
- } from "./chunk-5AG5BUQN.js";
19
+ } from "./chunk-FGDJOJ2L.js";
19
20
  import {
20
21
  claudeChromeEnabled,
21
22
  loadAppSettings,
@@ -999,7 +1000,7 @@ var claudeAdapter = {
999
1000
  );
1000
1001
  }
1001
1002
  const mode = permissionMode(thread);
1002
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-5PM5LA6E.js");
1003
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-YZ2NJVLL.js");
1003
1004
  const isOrchestrator = isOrchestratorThread2(thread);
1004
1005
  const injectedServers = await buildInjectedMcpServers({
1005
1006
  includeSideboard: true,
@@ -2445,6 +2446,11 @@ async function openInSystemTerminal(command) {
2445
2446
  `No terminal found to run: ${trimmed}. Install gnome-terminal (or similar), or run the command manually.`
2446
2447
  );
2447
2448
  }
2449
+ async function whichCli(bin) {
2450
+ const which = await run("which", [bin], { reject: false, timeoutMs: 3e3 });
2451
+ if (which.exitCode !== 0) return null;
2452
+ return which.stdout.trim().split(/\r?\n/).find(Boolean) ?? null;
2453
+ }
2448
2454
  async function installAgent(agent) {
2449
2455
  const info = getAgentSetupInfo(agent);
2450
2456
  if (info.kind === "bundled-sdk" || info.kind === "api-key") {
@@ -2466,6 +2472,17 @@ async function installAgent(agent) {
2466
2472
  };
2467
2473
  }
2468
2474
  enrichPathWithNpmGlobalBin();
2475
+ const cliBin = agent === "cursor" ? null : CLI_BIN[agent];
2476
+ if (cliBin) {
2477
+ const existing = await whichCli(cliBin);
2478
+ if (existing) {
2479
+ return {
2480
+ ok: true,
2481
+ command: existing,
2482
+ message: isConductorBundledCli(existing) ? `Using Conductor\u2019s ${cliBin} at ${existing}. No extra install \u2014 Log in only if auth is missing.` : `Already on PATH: ${existing}`
2483
+ };
2484
+ }
2485
+ }
2469
2486
  const result = await run("npm", ["install", "-g", info.npmPackage], { reject: false });
2470
2487
  const ok = result.exitCode === 0;
2471
2488
  if (!ok) {
@@ -2492,11 +2509,9 @@ async function installAgent(agent) {
2492
2509
  }
2493
2510
  }
2494
2511
  enrichPathWithNpmGlobalBin();
2495
- const cliBin = agent === "cursor" ? null : CLI_BIN[agent];
2496
2512
  let binPath = null;
2497
2513
  if (cliBin) {
2498
- const which = await run("which", [cliBin], { reject: false, timeoutMs: 3e3 });
2499
- binPath = which.exitCode === 0 ? which.stdout.trim().split(/\r?\n/).find(Boolean) ?? null : null;
2514
+ binPath = await whichCli(cliBin);
2500
2515
  }
2501
2516
  return {
2502
2517
  ok: true,
@@ -10,7 +10,7 @@ import {
10
10
  gh,
11
11
  git,
12
12
  resolveGhAuthToken
13
- } from "./chunk-5AG5BUQN.js";
13
+ } from "./chunk-FGDJOJ2L.js";
14
14
  import {
15
15
  worktreesRoot
16
16
  } from "./chunk-7MV3RXSC.js";
@@ -2,7 +2,7 @@
2
2
 
3
3
  import {
4
4
  run
5
- } from "./chunk-5AG5BUQN.js";
5
+ } from "./chunk-FGDJOJ2L.js";
6
6
  import {
7
7
  appDataDir
8
8
  } from "./chunk-7MV3RXSC.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  isGlobalRepoPath
3
- } from "./chunk-YTNLOJPK.js";
3
+ } from "./chunk-7ZOQY4A7.js";
4
4
  import {
5
5
  ensureGhPreferOrigin,
6
6
  resolveRepoRoot
7
- } from "./chunk-R7GUDEPY.js";
7
+ } from "./chunk-4BUCGNZS.js";
8
8
  import {
9
9
  appDataDir
10
10
  } from "./chunk-M37RITA6.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-MHR4OGZ4.js";
4
4
  import {
5
5
  resolveGithubRepoSlug
6
- } from "./chunk-R7GUDEPY.js";
6
+ } from "./chunk-4BUCGNZS.js";
7
7
  import {
8
8
  globalAgentCwd,
9
9
  sideboardReposDir
@@ -7,9 +7,9 @@ import {
7
7
  ensureConnectedBrightsyTeamTokens,
8
8
  getConnectedBrightsyTeamsRaw,
9
9
  listConnectedBrightsyTeams
10
- } from "./chunk-DZYMNW2A.js";
10
+ } from "./chunk-DB3I75FI.js";
11
11
  import "./chunk-M37RITA6.js";
12
- import "./chunk-TXQ6K2GR.js";
12
+ import "./chunk-4UIYN56C.js";
13
13
  export {
14
14
  applyConnectedTeamToCli,
15
15
  brightsyMcpServerName,
@@ -9,8 +9,8 @@ import {
9
9
  ensureConnectedBrightsyTeamTokens,
10
10
  getConnectedBrightsyTeamsRaw,
11
11
  listConnectedBrightsyTeams
12
- } from "./chunk-EVD4KNKR.js";
13
- import "./chunk-5AG5BUQN.js";
12
+ } from "./chunk-M5V4QIWF.js";
13
+ import "./chunk-FGDJOJ2L.js";
14
14
  import "./chunk-7MV3RXSC.js";
15
15
  export {
16
16
  applyConnectedTeamToCli,
@@ -6,14 +6,14 @@ import {
6
6
  enrichWorkspacesWithGithub,
7
7
  ensureGlobalCoordinatorCwd,
8
8
  formatWorkspaceInventory
9
- } from "./chunk-AKPEXIKK.js";
9
+ } from "./chunk-ZRFAZVGL.js";
10
10
  import "./chunk-MHR4OGZ4.js";
11
- import "./chunk-R7GUDEPY.js";
11
+ import "./chunk-4BUCGNZS.js";
12
12
  import "./chunk-FKOIHGKV.js";
13
13
  import "./chunk-FWJYLBO6.js";
14
14
  import "./chunk-77WWLBCI.js";
15
15
  import "./chunk-M37RITA6.js";
16
- import "./chunk-TXQ6K2GR.js";
16
+ import "./chunk-4UIYN56C.js";
17
17
  export {
18
18
  COORDINATOR_TOOL_PLAYBOOK,
19
19
  coordinatorGreenfieldPlaybook,
@@ -8,11 +8,11 @@ import {
8
8
  enrichWorkspacesWithGithub,
9
9
  ensureGlobalCoordinatorCwd,
10
10
  formatWorkspaceInventory
11
- } from "./chunk-LRBRQFBU.js";
12
- import "./chunk-I2KGRAXC.js";
11
+ } from "./chunk-57WWNMFP.js";
12
+ import "./chunk-LW5CMQGZ.js";
13
13
  import "./chunk-B3SJXYIJ.js";
14
14
  import "./chunk-7FD7COKE.js";
15
- import "./chunk-5AG5BUQN.js";
15
+ import "./chunk-FGDJOJ2L.js";
16
16
  import "./chunk-BPOTVI5J.js";
17
17
  import "./chunk-KGZBYWZ3.js";
18
18
  import "./chunk-7MV3RXSC.js";
@@ -11,17 +11,17 @@ import {
11
11
  orchestrationTitleNeedsSoccerNickname,
12
12
  orchestratorSessionPoisonedByBuiltins,
13
13
  takenTeamSlugsForOrchestration
14
- } from "./chunk-YTNLOJPK.js";
15
- import "./chunk-AKPEXIKK.js";
14
+ } from "./chunk-7ZOQY4A7.js";
15
+ import "./chunk-ZRFAZVGL.js";
16
16
  import "./chunk-MHR4OGZ4.js";
17
- import "./chunk-R7GUDEPY.js";
17
+ import "./chunk-4BUCGNZS.js";
18
18
  import "./chunk-FKOIHGKV.js";
19
19
  import "./chunk-FWJYLBO6.js";
20
20
  import "./chunk-77WWLBCI.js";
21
21
  import {
22
22
  globalAgentCwd
23
23
  } from "./chunk-M37RITA6.js";
24
- import "./chunk-TXQ6K2GR.js";
24
+ import "./chunk-4UIYN56C.js";
25
25
  export {
26
26
  GLOBAL_WORKSPACE_ID,
27
27
  createGlobalChat,
@@ -13,12 +13,12 @@ import {
13
13
  orchestrationTitleNeedsSoccerNickname,
14
14
  orchestratorSessionPoisonedByBuiltins,
15
15
  takenTeamSlugsForOrchestration
16
- } from "./chunk-DNPP7QMK.js";
17
- import "./chunk-LRBRQFBU.js";
18
- import "./chunk-I2KGRAXC.js";
16
+ } from "./chunk-JWZNK3CQ.js";
17
+ import "./chunk-57WWNMFP.js";
18
+ import "./chunk-LW5CMQGZ.js";
19
19
  import "./chunk-B3SJXYIJ.js";
20
20
  import "./chunk-7FD7COKE.js";
21
- import "./chunk-5AG5BUQN.js";
21
+ import "./chunk-FGDJOJ2L.js";
22
22
  import "./chunk-BPOTVI5J.js";
23
23
  import "./chunk-KGZBYWZ3.js";
24
24
  import {