@sideboard-ai/core 0.1.61 → 0.1.66

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 (45) hide show
  1. package/dist/{agents-B2723EOF.js → agents-EWFD765A.js} +23 -7
  2. package/dist/{agents-EADRAAPG.js → agents-MD7SCFYX.js} +23 -7
  3. package/dist/{app-settings-YBNZ4XSR.js → app-settings-GJVZGU3M.js} +15 -3
  4. package/dist/{app-settings-TBHTJWLQ.js → app-settings-ONKMFSEJ.js} +15 -3
  5. package/dist/{chunk-RIWUU7FO.js → chunk-5AG5BUQN.js} +61 -3
  6. package/dist/{chunk-HLEX5AQ6.js → chunk-7FD7COKE.js} +4 -0
  7. package/dist/{chunk-XWPKLRB3.js → chunk-AKPEXIKK.js} +2 -2
  8. package/dist/{chunk-MX7UH5AT.js → chunk-BBEH2CJE.js} +264 -93
  9. package/dist/{chunk-FGNBTFRD.js → chunk-BPOTVI5J.js} +125 -3
  10. package/dist/{chunk-CHGOMFTA.js → chunk-DNPP7QMK.js} +32 -7
  11. package/dist/{chunk-MBAL5FE6.js → chunk-DZYMNW2A.js} +4 -4
  12. package/dist/{chunk-JB2H7E7V.js → chunk-EVD4KNKR.js} +1 -1
  13. package/dist/{chunk-TSRXOSVD.js → chunk-FWJYLBO6.js} +4 -0
  14. package/dist/{chunk-QJBC4BRK.js → chunk-HTOTTJJX.js} +2 -2
  15. package/dist/{chunk-MFGGIRUA.js → chunk-I2KGRAXC.js} +2 -2
  16. package/dist/{chunk-ZXDOI6IH.js → chunk-IFAU2DEY.js} +269 -93
  17. package/dist/{chunk-NTYRBRE7.js → chunk-LRBRQFBU.js} +2 -2
  18. package/dist/{chunk-75QR74KM.js → chunk-MHR4OGZ4.js} +125 -3
  19. package/dist/{chunk-2P2UK7E7.js → chunk-PESJDZTB.js} +2 -2
  20. package/dist/{chunk-P7EQUFB6.js → chunk-R7GUDEPY.js} +2 -2
  21. package/dist/{chunk-73AT5K4A.js → chunk-TXQ6K2GR.js} +61 -3
  22. package/dist/{chunk-MLAST5BB.js → chunk-YTNLOJPK.js} +32 -7
  23. package/dist/{connected-teams-RSL4VB3X.js → connected-teams-CHXO5FFA.js} +2 -2
  24. package/dist/{connected-teams-MKIYKOYA.js → connected-teams-GJTESSTX.js} +2 -2
  25. package/dist/{coordinator-prompt-4P23VVFC.js → coordinator-prompt-E5UGSJES.js} +5 -5
  26. package/dist/{coordinator-prompt-LNWHZ64D.js → coordinator-prompt-ILSULI7C.js} +5 -5
  27. package/dist/{global-workspace-TMMAVRVW.js → global-workspace-44UG64NA.js} +6 -7
  28. package/dist/{global-workspace-BHT4XUAA.js → global-workspace-5PM5LA6E.js} +6 -7
  29. package/dist/index.cjs +1433 -944
  30. package/dist/index.d.cts +117 -2
  31. package/dist/index.d.ts +117 -2
  32. package/dist/index.js +859 -736
  33. package/dist/mcp/run-stdio.cjs +1388 -993
  34. package/dist/mcp/run-stdio.js +798 -765
  35. package/dist/{run-HZTBWGQR.js → run-74S2NZWB.js} +1 -1
  36. package/dist/{run-GPSVV5OH.js → run-JLN5JK7Q.js} +1 -1
  37. package/dist/{thread-store-GHOADGL2.js → thread-store-BUBR24YA.js} +1 -1
  38. package/dist/{thread-store-UJIGMI5J.js → thread-store-XTPFCJAI.js} +1 -1
  39. package/dist/{workspaces-3GO3EDQG.js → workspaces-OVBCSS5Y.js} +7 -8
  40. package/dist/{workspaces-GFPGDGCS.js → workspaces-RXFXQRRF.js} +7 -8
  41. package/dist/{worktree-GBLHEFHR.js → worktree-K2JB53R5.js} +3 -3
  42. package/dist/{worktree-3L2G6PCM.js → worktree-S2N63FLV.js} +3 -3
  43. package/package.json +1 -1
  44. package/dist/chunk-GI7E5733.js +0 -30
  45. package/dist/chunk-S2LL5HA4.js +0 -33
@@ -50,16 +50,33 @@ var CLOUD_CONNECT_AGENTS = /* @__PURE__ */ new Set([
50
50
  "opencode",
51
51
  "cursor"
52
52
  ]);
53
+ function normalizeCliExecutable(raw) {
54
+ if (!raw || typeof raw !== "object") return {};
55
+ const source = raw;
56
+ const out = {};
57
+ if (typeof source.executablePath === "string") {
58
+ const path = source.executablePath.trim();
59
+ if (path) out.executablePath = path;
60
+ }
61
+ return out;
62
+ }
53
63
  function normalizeBrightsy(raw) {
54
64
  if (!raw || typeof raw !== "object") return {};
55
65
  const source = raw;
56
66
  const out = {};
67
+ if (typeof source.executablePath === "string") {
68
+ const path = source.executablePath.trim();
69
+ if (path) out.executablePath = path;
70
+ }
57
71
  if (typeof source.cloudConnectEnabled === "boolean") {
58
72
  out.cloudConnectEnabled = source.cloudConnectEnabled;
59
73
  }
60
74
  if (typeof source.cloudConnectAgent === "string" && CLOUD_CONNECT_AGENTS.has(source.cloudConnectAgent)) {
61
75
  out.cloudConnectAgent = source.cloudConnectAgent;
62
76
  }
77
+ if (typeof source.injectWorktreeMcp === "boolean") {
78
+ out.injectWorktreeMcp = source.injectWorktreeMcp;
79
+ }
63
80
  return out;
64
81
  }
65
82
  var ISSUE_SOURCES = /* @__PURE__ */ new Set(["linear", "github"]);
@@ -114,6 +131,9 @@ function normalizeAdvanced(raw) {
114
131
  if (typeof source.deleteBranchOnPurge === "boolean") {
115
132
  out.deleteBranchOnPurge = source.deleteBranchOnPurge;
116
133
  }
134
+ if (typeof source.autoArchiveOnMerge === "boolean") {
135
+ out.autoArchiveOnMerge = source.autoArchiveOnMerge;
136
+ }
117
137
  if (typeof source.maxConcurrent === "number" && Number.isFinite(source.maxConcurrent)) {
118
138
  out.maxConcurrent = Math.max(1, Math.min(32, Math.floor(source.maxConcurrent)));
119
139
  }
@@ -143,6 +163,8 @@ function normalizeAdvanced(raw) {
143
163
  function normalizeSettings(raw) {
144
164
  const env = {};
145
165
  let claude = {};
166
+ let codex = {};
167
+ let opencode = {};
146
168
  let brightsy = {};
147
169
  let integrations = {};
148
170
  let defaults = {};
@@ -161,6 +183,12 @@ function normalizeSettings(raw) {
161
183
  if ("claude" in raw) {
162
184
  claude = normalizeClaude(raw.claude);
163
185
  }
186
+ if ("codex" in raw) {
187
+ codex = normalizeCliExecutable(raw.codex);
188
+ }
189
+ if ("opencode" in raw) {
190
+ opencode = normalizeCliExecutable(raw.opencode);
191
+ }
164
192
  if ("brightsy" in raw) {
165
193
  brightsy = normalizeBrightsy(raw.brightsy);
166
194
  }
@@ -176,11 +204,22 @@ function normalizeSettings(raw) {
176
204
  advanced = normalizeAdvanced(raw.advanced);
177
205
  }
178
206
  }
179
- return { environment: env, claude, brightsy, integrations, defaults, advanced };
207
+ return {
208
+ environment: env,
209
+ claude,
210
+ codex,
211
+ opencode,
212
+ brightsy,
213
+ integrations,
214
+ defaults,
215
+ advanced
216
+ };
180
217
  }
181
218
  var EMPTY_SETTINGS = {
182
219
  environment: {},
183
220
  claude: {},
221
+ codex: {},
222
+ opencode: {},
184
223
  brightsy: {},
185
224
  integrations: {},
186
225
  defaults: {},
@@ -237,6 +276,13 @@ function updateClaudeSettings(patch) {
237
276
  function updateBrightsySettings(patch) {
238
277
  const current = loadAppSettings();
239
278
  const brightsy = { ...current.brightsy };
279
+ if ("executablePath" in patch) {
280
+ if (patch.executablePath == null || patch.executablePath.trim() === "") {
281
+ delete brightsy.executablePath;
282
+ } else {
283
+ brightsy.executablePath = patch.executablePath.trim();
284
+ }
285
+ }
240
286
  if (typeof patch.cloudConnectEnabled === "boolean") {
241
287
  brightsy.cloudConnectEnabled = patch.cloudConnectEnabled;
242
288
  }
@@ -247,8 +293,35 @@ function updateBrightsySettings(patch) {
247
293
  brightsy.cloudConnectAgent = patch.cloudConnectAgent;
248
294
  }
249
295
  }
296
+ if (typeof patch.injectWorktreeMcp === "boolean") {
297
+ brightsy.injectWorktreeMcp = patch.injectWorktreeMcp;
298
+ }
250
299
  return saveAppSettings({ ...current, brightsy });
251
300
  }
301
+ function updateCodexSettings(patch) {
302
+ const current = loadAppSettings();
303
+ const codex = { ...current.codex };
304
+ if ("executablePath" in patch) {
305
+ if (patch.executablePath == null || patch.executablePath.trim() === "") {
306
+ delete codex.executablePath;
307
+ } else {
308
+ codex.executablePath = patch.executablePath.trim();
309
+ }
310
+ }
311
+ return saveAppSettings({ ...current, codex });
312
+ }
313
+ function updateOpencodeSettings(patch) {
314
+ const current = loadAppSettings();
315
+ const opencode = { ...current.opencode };
316
+ if ("executablePath" in patch) {
317
+ if (patch.executablePath == null || patch.executablePath.trim() === "") {
318
+ delete opencode.executablePath;
319
+ } else {
320
+ opencode.executablePath = patch.executablePath.trim();
321
+ }
322
+ }
323
+ return saveAppSettings({ ...current, opencode });
324
+ }
252
325
  function updateIntegrationsSettings(patch) {
253
326
  const current = loadAppSettings();
254
327
  const integrations = { ...current.integrations };
@@ -356,6 +429,9 @@ function getLinearApiKey(settings = loadAppSettings()) {
356
429
  function brightsyCloudConnectEnabled(settings = loadAppSettings()) {
357
430
  return Boolean(settings.brightsy.cloudConnectEnabled);
358
431
  }
432
+ function brightsyInjectWorktreeMcpEnabled(settings = loadAppSettings()) {
433
+ return Boolean(settings.brightsy.injectWorktreeMcp);
434
+ }
359
435
  function brightsyCloudConnectAgent(settings = loadAppSettings()) {
360
436
  const fallback = settings.brightsy.cloudConnectAgent && CLOUD_CONNECT_AGENTS.has(settings.brightsy.cloudConnectAgent) ? settings.brightsy.cloudConnectAgent : "claude";
361
437
  const preferred = getDefaultAgent(settings);
@@ -382,6 +458,9 @@ function updateAdvancedSettings(patch) {
382
458
  if (typeof patch.deleteBranchOnPurge === "boolean") {
383
459
  advanced.deleteBranchOnPurge = patch.deleteBranchOnPurge;
384
460
  }
461
+ if (typeof patch.autoArchiveOnMerge === "boolean") {
462
+ advanced.autoArchiveOnMerge = patch.autoArchiveOnMerge;
463
+ }
385
464
  if (typeof patch.maxConcurrent === "number" && Number.isFinite(patch.maxConcurrent)) {
386
465
  advanced.maxConcurrent = Math.max(1, Math.min(32, Math.floor(patch.maxConcurrent)));
387
466
  }
@@ -423,6 +502,9 @@ function caffeinateWhileCloudConnectEnabled(settings = loadAppSettings()) {
423
502
  function deleteBranchOnPurgeEnabled(settings = loadAppSettings()) {
424
503
  return Boolean(settings.advanced.deleteBranchOnPurge);
425
504
  }
505
+ function autoArchiveOnMergeEnabled(settings = loadAppSettings()) {
506
+ return Boolean(settings.advanced.autoArchiveOnMerge);
507
+ }
426
508
  function autoCleanupOrphansEnabled(settings = loadAppSettings()) {
427
509
  return Boolean(settings.advanced.autoCleanupOrphans);
428
510
  }
@@ -444,8 +526,42 @@ function maxConcurrentAgents(settings = loadAppSettings()) {
444
526
  return 3;
445
527
  }
446
528
  function resolveClaudeExecutable(settings = loadAppSettings()) {
447
- const override = settings.claude.executablePath?.trim();
448
- return override || "claude";
529
+ return resolveAgentExecutable("claude", settings);
530
+ }
531
+ var DEFAULT_CLI_BIN = {
532
+ claude: "claude",
533
+ codex: "codex",
534
+ opencode: "opencode",
535
+ brightsy: "brightsy"
536
+ };
537
+ function resolveAgentExecutable(agent, settings = loadAppSettings()) {
538
+ const fallback = DEFAULT_CLI_BIN[agent];
539
+ if (agent === "claude") {
540
+ const override2 = settings.claude.executablePath?.trim();
541
+ return override2 || fallback;
542
+ }
543
+ if (agent === "codex") {
544
+ const override2 = settings.codex.executablePath?.trim();
545
+ return override2 || fallback;
546
+ }
547
+ if (agent === "opencode") {
548
+ const override2 = settings.opencode.executablePath?.trim();
549
+ return override2 || fallback;
550
+ }
551
+ const override = settings.brightsy.executablePath?.trim();
552
+ return override || fallback;
553
+ }
554
+ function updateAgentExecutable(agent, executablePath) {
555
+ if (agent === "claude") {
556
+ return updateClaudeSettings({ executablePath });
557
+ }
558
+ if (agent === "codex") {
559
+ return updateCodexSettings({ executablePath });
560
+ }
561
+ if (agent === "opencode") {
562
+ return updateOpencodeSettings({ executablePath });
563
+ }
564
+ return updateBrightsySettings({ executablePath });
449
565
  }
450
566
  function claudeChromeEnabled(settings = loadAppSettings()) {
451
567
  return Boolean(settings.claude.chromeEnabled);
@@ -483,6 +599,8 @@ export {
483
599
  updateAppEnvironment,
484
600
  updateClaudeSettings,
485
601
  updateBrightsySettings,
602
+ updateCodexSettings,
603
+ updateOpencodeSettings,
486
604
  updateIntegrationsSettings,
487
605
  updateDefaultsSettings,
488
606
  getDefaultAgent,
@@ -496,6 +614,7 @@ export {
496
614
  resolveEffectiveIssueSource,
497
615
  getLinearApiKey,
498
616
  brightsyCloudConnectEnabled,
617
+ brightsyInjectWorktreeMcpEnabled,
499
618
  brightsyCloudConnectAgent,
500
619
  updateAdvancedSettings,
501
620
  autoRenameBranchEnabled,
@@ -503,11 +622,14 @@ export {
503
622
  caffeinateWhileRunningEnabled,
504
623
  caffeinateWhileCloudConnectEnabled,
505
624
  deleteBranchOnPurgeEnabled,
625
+ autoArchiveOnMergeEnabled,
506
626
  autoCleanupOrphansEnabled,
507
627
  orchestrationQuotaOnLimit,
508
628
  orchestrationQuotaFallbackAgent,
509
629
  maxConcurrentAgents,
510
630
  resolveClaudeExecutable,
631
+ resolveAgentExecutable,
632
+ updateAgentExecutable,
511
633
  claudeChromeEnabled,
512
634
  applyAppEnvironment,
513
635
  childEnvWithAppSettings,
@@ -1,26 +1,23 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import {
4
- assertOrchestratorCapableAgent
5
- } from "./chunk-S2LL5HA4.js";
6
3
  import {
7
4
  ensureGlobalCoordinatorCwd
8
- } from "./chunk-NTYRBRE7.js";
5
+ } from "./chunk-LRBRQFBU.js";
9
6
  import {
10
7
  allocateTeamName,
11
8
  takenSlugsFromThread,
12
9
  teamSlugFromName
13
- } from "./chunk-MFGGIRUA.js";
10
+ } from "./chunk-I2KGRAXC.js";
14
11
  import {
15
12
  createEmptyThread,
16
13
  listThreads,
17
14
  updateThread,
18
15
  writeThread
19
- } from "./chunk-HLEX5AQ6.js";
16
+ } from "./chunk-7FD7COKE.js";
20
17
  import {
21
18
  resolveNewThreadOptions,
22
19
  resolveThreadDefaults
23
- } from "./chunk-FGNBTFRD.js";
20
+ } from "./chunk-BPOTVI5J.js";
24
21
  import {
25
22
  globalAgentCwd
26
23
  } from "./chunk-7MV3RXSC.js";
@@ -47,6 +44,30 @@ var CLOUD_COORDINATOR_TIMEOUT_REPLY = [
47
44
  "What do you want me to do? (retry later, wait, force-stop, rephrase, or cancel)"
48
45
  ].join(" ");
49
46
 
47
+ // src/agents/orchestrator-capable.ts
48
+ var ORCHESTRATOR_AGENT_KINDS = [
49
+ "claude",
50
+ "codex",
51
+ "opencode",
52
+ "cursor"
53
+ ];
54
+ function isOrchestratorCapableAgent(agent) {
55
+ return Boolean(
56
+ agent && ORCHESTRATOR_AGENT_KINDS.includes(agent)
57
+ );
58
+ }
59
+ function assertOrchestratorCapableAgent(agent, context = "orchestration") {
60
+ if (!isOrchestratorCapableAgent(agent)) {
61
+ throw new Error(
62
+ `${agent} cannot run ${context} \u2014 it does not support Sideboard MCP. Use Claude, Cursor, Codex, or OpenCode.`
63
+ );
64
+ }
65
+ return agent;
66
+ }
67
+ function coerceOrchestratorAgent(agent, fallback = "claude") {
68
+ return isOrchestratorCapableAgent(agent) ? agent : fallback;
69
+ }
70
+
50
71
  // src/store/global-workspace.ts
51
72
  var GLOBAL_WORKSPACE_ID = "__global__";
52
73
  function isGlobalThread(thread) {
@@ -201,6 +222,10 @@ function ensureCloudCoordinator(agent) {
201
222
  }
202
223
 
203
224
  export {
225
+ ORCHESTRATOR_AGENT_KINDS,
226
+ isOrchestratorCapableAgent,
227
+ assertOrchestratorCapableAgent,
228
+ coerceOrchestratorAgent,
204
229
  GLOBAL_WORKSPACE_ID,
205
230
  isGlobalThread,
206
231
  isGlobalRepoPath,
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-M37RITA6.js";
4
4
  import {
5
5
  run
6
- } from "./chunk-73AT5K4A.js";
6
+ } from "./chunk-TXQ6K2GR.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-MKIYKOYA.js");
39
+ const { listConnectedBrightsyTeams: listConnectedBrightsyTeams2 } = await import("./connected-teams-GJTESSTX.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-MKIYKOYA.js");
71
+ const { ensureCliTeamTracked: ensureCliTeamTracked2 } = await import("./connected-teams-GJTESSTX.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-MKIYKOYA.js");
111
+ const { connectBrightsyTeam: connectBrightsyTeam2 } = await import("./connected-teams-GJTESSTX.js");
112
112
  await connectBrightsyTeam2(accountIdOrSlug);
113
113
  return getBrightsySession();
114
114
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  import {
4
4
  run
5
- } from "./chunk-RIWUU7FO.js";
5
+ } from "./chunk-5AG5BUQN.js";
6
6
  import {
7
7
  appDataDir
8
8
  } from "./chunk-7MV3RXSC.js";
@@ -39,6 +39,8 @@ function normalizeThread(raw) {
39
39
  agentPid: raw.agentPid ?? null,
40
40
  attachments: Array.isArray(raw.attachments) ? raw.attachments : [],
41
41
  prTitle: raw.prTitle ?? null,
42
+ prState: raw.prState ?? null,
43
+ skipAutoArchiveOnMerge: Boolean(raw.skipAutoArchiveOnMerge),
42
44
  stackId: raw.stackId ?? null,
43
45
  stackLayer: raw.stackLayer ?? null,
44
46
  userSetTitle: Boolean(raw.userSetTitle),
@@ -65,6 +67,8 @@ function createEmptyThread(partial) {
65
67
  activeRuns: partial.activeRuns ?? [],
66
68
  prUrl: partial.prUrl ?? null,
67
69
  prTitle: partial.prTitle ?? null,
70
+ prState: partial.prState ?? null,
71
+ skipAutoArchiveOnMerge: partial.skipAutoArchiveOnMerge ?? false,
68
72
  stackId: partial.stackId ?? null,
69
73
  stackLayer: partial.stackLayer ?? null,
70
74
  userSetTitle: partial.userSetTitle ?? false,
@@ -2,11 +2,11 @@
2
2
 
3
3
  import {
4
4
  isGlobalRepoPath
5
- } from "./chunk-CHGOMFTA.js";
5
+ } from "./chunk-DNPP7QMK.js";
6
6
  import {
7
7
  ensureGhPreferOrigin,
8
8
  resolveRepoRoot
9
- } from "./chunk-MFGGIRUA.js";
9
+ } from "./chunk-I2KGRAXC.js";
10
10
  import {
11
11
  appDataDir
12
12
  } from "./chunk-7MV3RXSC.js";
@@ -5,12 +5,12 @@ import {
5
5
  } from "./chunk-B3SJXYIJ.js";
6
6
  import {
7
7
  listThreads
8
- } from "./chunk-HLEX5AQ6.js";
8
+ } from "./chunk-7FD7COKE.js";
9
9
  import {
10
10
  gh,
11
11
  git,
12
12
  resolveGhAuthToken
13
- } from "./chunk-RIWUU7FO.js";
13
+ } from "./chunk-5AG5BUQN.js";
14
14
  import {
15
15
  worktreesRoot
16
16
  } from "./chunk-7MV3RXSC.js";