@sideboard-ai/core 0.1.170 → 0.1.172

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 (33) hide show
  1. package/dist/{abletime-IC2V7CNB.js → abletime-7VW4EGPT.js} +2 -2
  2. package/dist/{abletime-ESVTHTFH.js → abletime-PCLL36HW.js} +2 -2
  3. package/dist/{agents-GOBVOXFG.js → agents-7UTRNLXQ.js} +4 -4
  4. package/dist/{agents-ZCIMZHXZ.js → agents-CTWLBPCV.js} +4 -4
  5. package/dist/{app-settings-VMOTQORT.js → app-settings-663VQWUV.js} +1 -1
  6. package/dist/{app-settings-LF3TS7XS.js → app-settings-74HBAAH7.js} +1 -1
  7. package/dist/{chunk-P2VCMIZU.js → chunk-234EKD2F.js} +2 -2
  8. package/dist/{chunk-DHPZW2EA.js → chunk-2RM6BZQ2.js} +2 -2
  9. package/dist/{chunk-SAZIRJR4.js → chunk-3F7AXVIL.js} +4 -4
  10. package/dist/{chunk-UDEWGTP6.js → chunk-6X6KMUI2.js} +4 -4
  11. package/dist/{chunk-DKLGWRWC.js → chunk-AQPVBVJE.js} +1 -1
  12. package/dist/{chunk-NB7TEKCF.js → chunk-CMJ2FBBV.js} +1 -1
  13. package/dist/{chunk-7IUO67CW.js → chunk-J7LQVLFQ.js} +15 -8
  14. package/dist/{chunk-YMF5WCIA.js → chunk-OKZFTOM2.js} +15 -8
  15. package/dist/{chunk-Y7DJA3UW.js → chunk-PXNOT6NV.js} +1 -1
  16. package/dist/{chunk-TEI72FYD.js → chunk-QYJS7LYE.js} +20 -20
  17. package/dist/{chunk-3C4B52TS.js → chunk-QYZYDO3F.js} +1 -1
  18. package/dist/{chunk-GQHVICNT.js → chunk-ZTVBIBLB.js} +19 -19
  19. package/dist/{coordinator-prompt-JTDCEU74.js → coordinator-prompt-7CTI6HRH.js} +3 -3
  20. package/dist/{coordinator-prompt-RRUU2OYO.js → coordinator-prompt-PM6MPYYB.js} +3 -3
  21. package/dist/{global-workspace-ZF6EJAM3.js → global-workspace-CMYSFRCM.js} +3 -3
  22. package/dist/{global-workspace-4SI3CRRT.js → global-workspace-CRJ6ZVIY.js} +3 -3
  23. package/dist/index.cjs +14 -7
  24. package/dist/index.js +8 -8
  25. package/dist/mcp/run-stdio.cjs +14 -7
  26. package/dist/mcp/run-stdio.js +8 -8
  27. package/dist/{orchestrator-LE6L6MJC.js → orchestrator-RW4IVITI.js} +5 -5
  28. package/dist/{orchestrator-UZSFTDKA.js → orchestrator-VPT4SXXD.js} +5 -5
  29. package/dist/{workspaces-NOC2MWQV.js → workspaces-L73MCDFA.js} +3 -3
  30. package/dist/{workspaces-A7C3WA54.js → workspaces-UYSD2STS.js} +3 -3
  31. package/dist/{worktree-GXO2VDQF.js → worktree-SQD3DBYC.js} +2 -2
  32. package/dist/{worktree-PODE23PD.js → worktree-WVEDT3FM.js} +2 -2
  33. package/package.json +1 -1
@@ -14,9 +14,9 @@ import {
14
14
  toAbleTimeIssueInfo,
15
15
  updateAbleTimeTask,
16
16
  verifyAbleTimeConnection
17
- } from "./chunk-NB7TEKCF.js";
17
+ } from "./chunk-CMJ2FBBV.js";
18
18
  import "./chunk-ELBYOGVA.js";
19
- import "./chunk-7IUO67CW.js";
19
+ import "./chunk-J7LQVLFQ.js";
20
20
  import "./chunk-4TR3HZFT.js";
21
21
  import "./chunk-JT7R45JB.js";
22
22
  import "./chunk-77WWLBCI.js";
@@ -16,9 +16,9 @@ import {
16
16
  toAbleTimeIssueInfo,
17
17
  updateAbleTimeTask,
18
18
  verifyAbleTimeConnection
19
- } from "./chunk-DKLGWRWC.js";
19
+ } from "./chunk-AQPVBVJE.js";
20
20
  import "./chunk-6GN5WPYZ.js";
21
- import "./chunk-YMF5WCIA.js";
21
+ import "./chunk-OKZFTOM2.js";
22
22
  import "./chunk-NSTQ6QKD.js";
23
23
  import "./chunk-KGZBYWZ3.js";
24
24
  import "./chunk-JTJHOYCU.js";
@@ -31,9 +31,9 @@ import {
31
31
  resolveLoginCommand,
32
32
  resolveQuotaFallbackAgent,
33
33
  whichOnPath
34
- } from "./chunk-SAZIRJR4.js";
35
- import "./chunk-DHPZW2EA.js";
36
- import "./chunk-3C4B52TS.js";
34
+ } from "./chunk-3F7AXVIL.js";
35
+ import "./chunk-2RM6BZQ2.js";
36
+ import "./chunk-QYZYDO3F.js";
37
37
  import "./chunk-6K64FJDD.js";
38
38
  import "./chunk-XD2BAANL.js";
39
39
  import "./chunk-M267JPEA.js";
@@ -49,7 +49,7 @@ import {
49
49
  assertOrchestratorCapableAgent,
50
50
  coerceOrchestratorAgent,
51
51
  isOrchestratorCapableAgent
52
- } from "./chunk-7IUO67CW.js";
52
+ } from "./chunk-J7LQVLFQ.js";
53
53
  import "./chunk-4TR3HZFT.js";
54
54
  import "./chunk-JT7R45JB.js";
55
55
  import "./chunk-7UURXPKD.js";
@@ -37,12 +37,12 @@ import {
37
37
  resolveQuotaFallbackAgent,
38
38
  turnCostUsdFromCursorUsage,
39
39
  whichOnPath
40
- } from "./chunk-UDEWGTP6.js";
40
+ } from "./chunk-6X6KMUI2.js";
41
41
  import "./chunk-LZ6QMEQC.js";
42
42
  import "./chunk-S42XV45P.js";
43
43
  import "./chunk-6GN5WPYZ.js";
44
- import "./chunk-P2VCMIZU.js";
45
- import "./chunk-Y7DJA3UW.js";
44
+ import "./chunk-234EKD2F.js";
45
+ import "./chunk-PXNOT6NV.js";
46
46
  import "./chunk-D6JWYJ4P.js";
47
47
  import "./chunk-LZQULFIT.js";
48
48
  import "./chunk-SYFVUF2C.js";
@@ -60,7 +60,7 @@ import {
60
60
  assertOrchestratorCapableAgent,
61
61
  coerceOrchestratorAgent,
62
62
  isOrchestratorCapableAgent
63
- } from "./chunk-YMF5WCIA.js";
63
+ } from "./chunk-OKZFTOM2.js";
64
64
  import "./chunk-NSTQ6QKD.js";
65
65
  import "./chunk-KGZBYWZ3.js";
66
66
  import "./chunk-JTJHOYCU.js";
@@ -83,7 +83,7 @@ import {
83
83
  updateOpencodeSettings,
84
84
  updateProjectProfileSettings,
85
85
  writeViewerContext
86
- } from "./chunk-7IUO67CW.js";
86
+ } from "./chunk-J7LQVLFQ.js";
87
87
  import "./chunk-4TR3HZFT.js";
88
88
  import "./chunk-JT7R45JB.js";
89
89
  import "./chunk-77WWLBCI.js";
@@ -85,7 +85,7 @@ import {
85
85
  updateOpencodeSettings,
86
86
  updateProjectProfileSettings,
87
87
  writeViewerContext
88
- } from "./chunk-YMF5WCIA.js";
88
+ } from "./chunk-OKZFTOM2.js";
89
89
  import "./chunk-NSTQ6QKD.js";
90
90
  import "./chunk-KGZBYWZ3.js";
91
91
  import "./chunk-JTJHOYCU.js";
@@ -7,7 +7,7 @@ import {
7
7
  resolveRepoRoot,
8
8
  takenSlugsFromThread,
9
9
  teamSlugFromName
10
- } from "./chunk-Y7DJA3UW.js";
10
+ } from "./chunk-PXNOT6NV.js";
11
11
  import {
12
12
  ATTACHMENTS_DIR,
13
13
  attachmentsGitignoreBody
@@ -30,7 +30,7 @@ import {
30
30
  resolveThreadDefaults,
31
31
  resolveViewerProfile,
32
32
  resolveViewerProfileForRepo
33
- } from "./chunk-YMF5WCIA.js";
33
+ } from "./chunk-OKZFTOM2.js";
34
34
  import {
35
35
  appDataDir,
36
36
  globalAgentCwd,
@@ -5,7 +5,7 @@ import {
5
5
  resolveRepoRoot,
6
6
  takenSlugsFromThread,
7
7
  teamSlugFromName
8
- } from "./chunk-3C4B52TS.js";
8
+ } from "./chunk-QYZYDO3F.js";
9
9
  import {
10
10
  ATTACHMENTS_DIR,
11
11
  attachmentsGitignoreBody
@@ -22,7 +22,7 @@ import {
22
22
  resolveThreadDefaults,
23
23
  resolveViewerProfile,
24
24
  resolveViewerProfileForRepo
25
- } from "./chunk-7IUO67CW.js";
25
+ } from "./chunk-J7LQVLFQ.js";
26
26
  import {
27
27
  createEmptyThread,
28
28
  listThreads,
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  isOrchestratorThread
3
- } from "./chunk-DHPZW2EA.js";
3
+ } from "./chunk-2RM6BZQ2.js";
4
4
  import {
5
5
  codexUnattendedGitConfigArgs,
6
6
  mergeAgentGitAuthEnv,
7
7
  resolveAgentGitAuthEnv,
8
8
  resolveCodexGitWritableRoots
9
- } from "./chunk-3C4B52TS.js";
9
+ } from "./chunk-QYZYDO3F.js";
10
10
  import {
11
11
  applyConnectedTeamToCli,
12
12
  brightsyMcpServerName,
@@ -37,7 +37,7 @@ import {
37
37
  loadAppSettings,
38
38
  resolveAgentExecutable,
39
39
  resolveClaudeExecutable
40
- } from "./chunk-7IUO67CW.js";
40
+ } from "./chunk-J7LQVLFQ.js";
41
41
  import {
42
42
  isElectronLikeCommand,
43
43
  unwrapStrippedElectronLaunch
@@ -1898,7 +1898,7 @@ var claudeAdapter = {
1898
1898
  );
1899
1899
  }
1900
1900
  const mode = permissionMode(thread);
1901
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-ZF6EJAM3.js");
1901
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-CMYSFRCM.js");
1902
1902
  const isOrchestrator = isOrchestratorThread2(thread);
1903
1903
  const injectedServers = await buildInjectedMcpServers({
1904
1904
  includeSideboard: true,
@@ -11,13 +11,13 @@ import {
11
11
  } from "./chunk-S42XV45P.js";
12
12
  import {
13
13
  isOrchestratorThread
14
- } from "./chunk-P2VCMIZU.js";
14
+ } from "./chunk-234EKD2F.js";
15
15
  import {
16
16
  codexUnattendedGitConfigArgs,
17
17
  mergeAgentGitAuthEnv,
18
18
  resolveAgentGitAuthEnv,
19
19
  resolveCodexGitWritableRoots
20
- } from "./chunk-Y7DJA3UW.js";
20
+ } from "./chunk-PXNOT6NV.js";
21
21
  import {
22
22
  enrichPathWithNpmGlobalBin,
23
23
  isConductorBundledCli,
@@ -35,7 +35,7 @@ import {
35
35
  resolveClaudeExecutable,
36
36
  unwrapStrippedElectronLaunch,
37
37
  wrapElectronAsNodeLaunch
38
- } from "./chunk-YMF5WCIA.js";
38
+ } from "./chunk-OKZFTOM2.js";
39
39
  import {
40
40
  appDataDir
41
41
  } from "./chunk-JTJHOYCU.js";
@@ -2216,7 +2216,7 @@ var claudeAdapter = {
2216
2216
  );
2217
2217
  }
2218
2218
  const mode = permissionMode(thread);
2219
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-4SI3CRRT.js");
2219
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-CRJ6ZVIY.js");
2220
2220
  const isOrchestrator = isOrchestratorThread2(thread);
2221
2221
  const injectedServers = await buildInjectedMcpServers({
2222
2222
  includeSideboard: true,
@@ -8,7 +8,7 @@ import {
8
8
  getAbleTimeHost,
9
9
  isAbleTimeConnected,
10
10
  saveAbleTimeConnection
11
- } from "./chunk-YMF5WCIA.js";
11
+ } from "./chunk-OKZFTOM2.js";
12
12
 
13
13
  // src/integrations/abletime-mcp.ts
14
14
  var DEFAULT_ABLETIME_HOST = "https://track.abletime.com";
@@ -6,7 +6,7 @@ import {
6
6
  getAbleTimeHost,
7
7
  isAbleTimeConnected,
8
8
  saveAbleTimeConnection
9
- } from "./chunk-7IUO67CW.js";
9
+ } from "./chunk-J7LQVLFQ.js";
10
10
 
11
11
  // src/integrations/abletime-mcp.ts
12
12
  var DEFAULT_ABLETIME_HOST = "https://track.abletime.com";
@@ -16,7 +16,7 @@ import {
16
16
  import { randomUUID } from "crypto";
17
17
  import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
18
18
  import { homedir, hostname } from "os";
19
- import { join as join2 } from "path";
19
+ import { isAbsolute, join as join2 } from "path";
20
20
 
21
21
  // src/agents/orchestrator-capable.ts
22
22
  var ORCHESTRATOR_AGENT_KINDS = [
@@ -458,7 +458,7 @@ function normalizeClaude(raw) {
458
458
  const out = {};
459
459
  if (typeof source.executablePath === "string") {
460
460
  const path = source.executablePath.trim();
461
- if (path) out.executablePath = path;
461
+ if (path && isAbsolute(path)) out.executablePath = path;
462
462
  }
463
463
  if (typeof source.chromeEnabled === "boolean") {
464
464
  out.chromeEnabled = source.chromeEnabled;
@@ -477,17 +477,24 @@ function normalizeCliExecutable(raw) {
477
477
  const out = {};
478
478
  if (typeof source.executablePath === "string") {
479
479
  const path = source.executablePath.trim();
480
- if (path) out.executablePath = path;
480
+ if (path && isAbsolute(path)) out.executablePath = path;
481
481
  }
482
482
  return out;
483
483
  }
484
+ function absoluteExecutablePath(value) {
485
+ const path = value.trim();
486
+ if (!isAbsolute(path)) {
487
+ throw new Error("Executable path must be absolute. Leave it empty to use the system CLI.");
488
+ }
489
+ return path;
490
+ }
484
491
  function normalizeBrightsy(raw) {
485
492
  if (!raw || typeof raw !== "object") return {};
486
493
  const source = raw;
487
494
  const out = {};
488
495
  if (typeof source.executablePath === "string") {
489
496
  const path = source.executablePath.trim();
490
- if (path) out.executablePath = path;
497
+ if (path && isAbsolute(path)) out.executablePath = path;
491
498
  }
492
499
  if (typeof source.cloudConnectEnabled === "boolean") {
493
500
  out.cloudConnectEnabled = source.cloudConnectEnabled;
@@ -979,7 +986,7 @@ function updateClaudeSettings(patch) {
979
986
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
980
987
  delete claude.executablePath;
981
988
  } else {
982
- claude.executablePath = patch.executablePath.trim();
989
+ claude.executablePath = absoluteExecutablePath(patch.executablePath);
983
990
  }
984
991
  }
985
992
  if (typeof patch.chromeEnabled === "boolean") {
@@ -994,7 +1001,7 @@ function updateBrightsySettings(patch) {
994
1001
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
995
1002
  delete brightsy.executablePath;
996
1003
  } else {
997
- brightsy.executablePath = patch.executablePath.trim();
1004
+ brightsy.executablePath = absoluteExecutablePath(patch.executablePath);
998
1005
  }
999
1006
  }
1000
1007
  if (typeof patch.cloudConnectEnabled === "boolean") {
@@ -1019,7 +1026,7 @@ function updateCodexSettings(patch) {
1019
1026
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
1020
1027
  delete codex.executablePath;
1021
1028
  } else {
1022
- codex.executablePath = patch.executablePath.trim();
1029
+ codex.executablePath = absoluteExecutablePath(patch.executablePath);
1023
1030
  }
1024
1031
  }
1025
1032
  return saveAppSettings({ ...current, codex });
@@ -1031,7 +1038,7 @@ function updateOpencodeSettings(patch) {
1031
1038
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
1032
1039
  delete opencode.executablePath;
1033
1040
  } else {
1034
- opencode.executablePath = patch.executablePath.trim();
1041
+ opencode.executablePath = absoluteExecutablePath(patch.executablePath);
1035
1042
  }
1036
1043
  }
1037
1044
  return saveAppSettings({ ...current, opencode });
@@ -15,7 +15,7 @@ import {
15
15
  import { randomUUID } from "crypto";
16
16
  import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
17
17
  import { homedir, hostname } from "os";
18
- import { join as join2 } from "path";
18
+ import { isAbsolute, join as join2 } from "path";
19
19
 
20
20
  // src/agents/orchestrator-capable.ts
21
21
  var ORCHESTRATOR_AGENT_KINDS = [
@@ -486,7 +486,7 @@ function normalizeClaude(raw) {
486
486
  const out = {};
487
487
  if (typeof source.executablePath === "string") {
488
488
  const path = source.executablePath.trim();
489
- if (path) out.executablePath = path;
489
+ if (path && isAbsolute(path)) out.executablePath = path;
490
490
  }
491
491
  if (typeof source.chromeEnabled === "boolean") {
492
492
  out.chromeEnabled = source.chromeEnabled;
@@ -505,17 +505,24 @@ function normalizeCliExecutable(raw) {
505
505
  const out = {};
506
506
  if (typeof source.executablePath === "string") {
507
507
  const path = source.executablePath.trim();
508
- if (path) out.executablePath = path;
508
+ if (path && isAbsolute(path)) out.executablePath = path;
509
509
  }
510
510
  return out;
511
511
  }
512
+ function absoluteExecutablePath(value) {
513
+ const path = value.trim();
514
+ if (!isAbsolute(path)) {
515
+ throw new Error("Executable path must be absolute. Leave it empty to use the system CLI.");
516
+ }
517
+ return path;
518
+ }
512
519
  function normalizeBrightsy(raw) {
513
520
  if (!raw || typeof raw !== "object") return {};
514
521
  const source = raw;
515
522
  const out = {};
516
523
  if (typeof source.executablePath === "string") {
517
524
  const path = source.executablePath.trim();
518
- if (path) out.executablePath = path;
525
+ if (path && isAbsolute(path)) out.executablePath = path;
519
526
  }
520
527
  if (typeof source.cloudConnectEnabled === "boolean") {
521
528
  out.cloudConnectEnabled = source.cloudConnectEnabled;
@@ -1007,7 +1014,7 @@ function updateClaudeSettings(patch) {
1007
1014
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
1008
1015
  delete claude.executablePath;
1009
1016
  } else {
1010
- claude.executablePath = patch.executablePath.trim();
1017
+ claude.executablePath = absoluteExecutablePath(patch.executablePath);
1011
1018
  }
1012
1019
  }
1013
1020
  if (typeof patch.chromeEnabled === "boolean") {
@@ -1022,7 +1029,7 @@ function updateBrightsySettings(patch) {
1022
1029
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
1023
1030
  delete brightsy.executablePath;
1024
1031
  } else {
1025
- brightsy.executablePath = patch.executablePath.trim();
1032
+ brightsy.executablePath = absoluteExecutablePath(patch.executablePath);
1026
1033
  }
1027
1034
  }
1028
1035
  if (typeof patch.cloudConnectEnabled === "boolean") {
@@ -1047,7 +1054,7 @@ function updateCodexSettings(patch) {
1047
1054
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
1048
1055
  delete codex.executablePath;
1049
1056
  } else {
1050
- codex.executablePath = patch.executablePath.trim();
1057
+ codex.executablePath = absoluteExecutablePath(patch.executablePath);
1051
1058
  }
1052
1059
  }
1053
1060
  return saveAppSettings({ ...current, codex });
@@ -1059,7 +1066,7 @@ function updateOpencodeSettings(patch) {
1059
1066
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
1060
1067
  delete opencode.executablePath;
1061
1068
  } else {
1062
- opencode.executablePath = patch.executablePath.trim();
1069
+ opencode.executablePath = absoluteExecutablePath(patch.executablePath);
1063
1070
  }
1064
1071
  }
1065
1072
  return saveAppSettings({ ...current, opencode });
@@ -22,7 +22,7 @@ import {
22
22
  import {
23
23
  getGithubGitAuthMode,
24
24
  getGithubPat
25
- } from "./chunk-YMF5WCIA.js";
25
+ } from "./chunk-OKZFTOM2.js";
26
26
  import {
27
27
  worktreesRoot
28
28
  } from "./chunk-JTJHOYCU.js";
@@ -24,7 +24,7 @@ import {
24
24
  stripBrightsyNdjsonNoise,
25
25
  sumUsageList,
26
26
  toolDescription
27
- } from "./chunk-SAZIRJR4.js";
27
+ } from "./chunk-3F7AXVIL.js";
28
28
  import {
29
29
  SLACK_REPLY_FORMATTING,
30
30
  addWorkspace,
@@ -47,7 +47,7 @@ import {
47
47
  stageAbsolutePathsAsAttachments,
48
48
  stageBuffersAsAttachments,
49
49
  syncWorkspacesFromThreads
50
- } from "./chunk-DHPZW2EA.js";
50
+ } from "./chunk-2RM6BZQ2.js";
51
51
  import {
52
52
  addPrStackLayer,
53
53
  allocateTeamName,
@@ -97,7 +97,7 @@ import {
97
97
  worktreeDisplayLabelForGroup,
98
98
  worktreeNameFromPath,
99
99
  worktreeSlugForTicket
100
- } from "./chunk-3C4B52TS.js";
100
+ } from "./chunk-QYZYDO3F.js";
101
101
  import {
102
102
  ATTACHMENTS_DIR,
103
103
  DETACHED_JOBS_DIR,
@@ -148,7 +148,7 @@ import {
148
148
  saveAppSettings,
149
149
  updateAdvancedSettings,
150
150
  writeSecureJson
151
- } from "./chunk-7IUO67CW.js";
151
+ } from "./chunk-J7LQVLFQ.js";
152
152
  import {
153
153
  stripNestedElectronEnv
154
154
  } from "./chunk-4TR3HZFT.js";
@@ -466,7 +466,7 @@ async function continueSourceThread(threadId, prompt) {
466
466
  await continueOnReply(threadId, prompt);
467
467
  return;
468
468
  }
469
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-UZSFTDKA.js");
469
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-VPT4SXXD.js");
470
470
  await getOrchestrator2().send(threadId, prompt);
471
471
  } catch {
472
472
  }
@@ -748,9 +748,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
748
748
  `Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
749
749
  );
750
750
  }
751
- const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-ZF6EJAM3.js");
751
+ const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-CMYSFRCM.js");
752
752
  if (isGlobalThread2(thread)) {
753
- const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-JTDCEU74.js");
753
+ const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-7CTI6HRH.js");
754
754
  ensureGlobalCoordinatorCwd2(
755
755
  isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
756
756
  );
@@ -3570,7 +3570,7 @@ async function createThread(input, _onSetupLine) {
3570
3570
  });
3571
3571
  await requireAgent(resolved.agent);
3572
3572
  if (input.cowboy) {
3573
- const { cowboyModeEnabled } = await import("./app-settings-VMOTQORT.js");
3573
+ const { cowboyModeEnabled } = await import("./app-settings-663VQWUV.js");
3574
3574
  if (!cowboyModeEnabled()) {
3575
3575
  throw new Error(
3576
3576
  "Cowboy mode is off. Enable it in Settings \u2192 Advanced."
@@ -3628,7 +3628,7 @@ async function createThread(input, _onSetupLine) {
3628
3628
  let sourceIsFork = false;
3629
3629
  if (!input.cowboy && sourceType === "branch" && (!sourceRef || sourceRef === "HEAD" || sourceRef === "default")) {
3630
3630
  if (isAbleTimeConnected() && getIssueSource() === "abletime") {
3631
- const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-IC2V7CNB.js");
3631
+ const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-7VW4EGPT.js");
3632
3632
  const task = await ensureAbleTimeTask({
3633
3633
  title: title?.trim() || "Untitled work",
3634
3634
  description: input.prompt?.trim() || void 0
@@ -3726,7 +3726,7 @@ async function createThread(input, _onSetupLine) {
3726
3726
  return readThread(thread.id) ?? thread;
3727
3727
  }
3728
3728
  async function listLinearIssues(agent, repoPath) {
3729
- const { getAdapter: getAdapter2 } = await import("./agents-GOBVOXFG.js");
3729
+ const { getAdapter: getAdapter2 } = await import("./agents-7UTRNLXQ.js");
3730
3730
  await requireAgent(agent, { requireLinear: true });
3731
3731
  const adapter = getAdapter2(agent);
3732
3732
  if (!adapter.listLinearIssues) {
@@ -4148,7 +4148,7 @@ async function adoptThread(input) {
4148
4148
  messages: input.messages ?? []
4149
4149
  });
4150
4150
  writeThread(thread);
4151
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-A7C3WA54.js");
4151
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-UYSD2STS.js");
4152
4152
  await ensureWorkspace2(repoPath);
4153
4153
  const { ensureWorktreeSideboardIgnored: ensureWorktreeSideboardIgnored2 } = await import("./worktree-exclude-X54WSOXM.js");
4154
4154
  await ensureWorktreeSideboardIgnored2(input.worktreePath);
@@ -6628,7 +6628,7 @@ function formatScheduledPrompt(name, prompt) {
6628
6628
  ${prompt}`;
6629
6629
  }
6630
6630
  async function defaultDeps() {
6631
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-UZSFTDKA.js");
6631
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-VPT4SXXD.js");
6632
6632
  const orch = getOrchestrator2();
6633
6633
  return {
6634
6634
  findThread: (id) => findThreadByRef(id),
@@ -6890,7 +6890,7 @@ var Orchestrator = class {
6890
6890
  orphans: orphans.map((o) => ({ path: o.path, repoPath: o.repoPath }))
6891
6891
  });
6892
6892
  }
6893
- const { autoCleanupOrphansEnabled } = await import("./app-settings-VMOTQORT.js");
6893
+ const { autoCleanupOrphansEnabled } = await import("./app-settings-663VQWUV.js");
6894
6894
  if (autoCleanupOrphansEnabled() && shouldRunWorktreeCleanup() && orphans.length > 0) {
6895
6895
  await cleanupOrphanWorktrees({ repoPaths });
6896
6896
  }
@@ -7169,7 +7169,7 @@ var Orchestrator = class {
7169
7169
  }
7170
7170
  await setup;
7171
7171
  if (skipSetup) return;
7172
- const { autoRunAfterSetupEnabled } = await import("./app-settings-VMOTQORT.js");
7172
+ const { autoRunAfterSetupEnabled } = await import("./app-settings-663VQWUV.js");
7173
7173
  if (autoRunAfterSetupEnabled()) {
7174
7174
  try {
7175
7175
  await this.startDev(threadId);
@@ -7484,7 +7484,7 @@ var Orchestrator = class {
7484
7484
  }
7485
7485
  const isBrightsy = fresh.agent === "brightsy";
7486
7486
  const isOrchestration = isOrchestratorThread(fresh);
7487
- const { autoRenameBranchEnabled, getGithubGitAuthMode } = await import("./app-settings-VMOTQORT.js");
7487
+ const { autoRenameBranchEnabled, getGithubGitAuthMode } = await import("./app-settings-663VQWUV.js");
7488
7488
  const gitAuthMode = getGithubGitAuthMode();
7489
7489
  const worktreeDirective = isBrightsy || isOrchestration ? null : formatWorktreeDirective(fresh, {
7490
7490
  githubSlug: await resolveGithubRepoSlug(fresh.worktreePath).catch(
@@ -8396,7 +8396,7 @@ var Orchestrator = class {
8396
8396
  updateThread(thread.id, { title: meta.title });
8397
8397
  }
8398
8398
  }
8399
- const { autoArchiveOnMergeEnabled } = await import("./app-settings-VMOTQORT.js");
8399
+ const { autoArchiveOnMergeEnabled } = await import("./app-settings-663VQWUV.js");
8400
8400
  const latest = this.requireThread(thread.id);
8401
8401
  if (!shouldAutoArchiveOnPrMerge({
8402
8402
  previousPrState: prevState || null,
@@ -8713,7 +8713,7 @@ var Orchestrator = class {
8713
8713
  this.emit({ type: "status_changed", threadId: archived.id, status: "archived" });
8714
8714
  if (thread.repoPath && !isGlobalRepoPath(thread.repoPath)) {
8715
8715
  try {
8716
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-A7C3WA54.js");
8716
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-UYSD2STS.js");
8717
8717
  await ensureWorkspace2(thread.repoPath);
8718
8718
  } catch {
8719
8719
  }
@@ -8740,7 +8740,7 @@ var Orchestrator = class {
8740
8740
  await runArchiveScript(thread.repoPath, thread.worktreePath);
8741
8741
  } catch {
8742
8742
  }
8743
- const { deleteBranchOnPurgeEnabled } = await import("./app-settings-VMOTQORT.js");
8743
+ const { deleteBranchOnPurgeEnabled } = await import("./app-settings-663VQWUV.js");
8744
8744
  const deleteBranch = opts?.deleteBranch ?? deleteBranchOnPurgeEnabled();
8745
8745
  await removeWorktree(thread.repoPath, thread.worktreePath, {
8746
8746
  deleteBranch: deleteBranch ? thread.branchName : void 0
@@ -8767,7 +8767,7 @@ var Orchestrator = class {
8767
8767
  `Cowboy checkout missing: ${thread.worktreePath}. Re-add the project folder, then restore.`
8768
8768
  );
8769
8769
  }
8770
- const { createThreadWorktree: createThreadWorktree2 } = await import("./worktree-PODE23PD.js");
8770
+ const { createThreadWorktree: createThreadWorktree2 } = await import("./worktree-WVEDT3FM.js");
8771
8771
  const slug = thread.worktreePath.split("/").pop();
8772
8772
  const dest = thread.worktreePath;
8773
8773
  await withRepoGitLock(thread.repoPath, async () => {
@@ -8877,7 +8877,7 @@ async function startOrchestration(opts) {
8877
8877
  sourceRef: "default",
8878
8878
  ...createOpts
8879
8879
  }).catch(async () => {
8880
- const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-PODE23PD.js");
8880
+ const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-WVEDT3FM.js");
8881
8881
  const repo = await resolveRepoRoot2(repoPath);
8882
8882
  const def = await resolveDefaultBranch2(repo);
8883
8883
  return orch.createThread({
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  getGithubGitAuthMode,
6
6
  getGithubPat
7
- } from "./chunk-7IUO67CW.js";
7
+ } from "./chunk-J7LQVLFQ.js";
8
8
  import {
9
9
  listThreads
10
10
  } from "./chunk-7UURXPKD.js";
@@ -33,7 +33,7 @@ import {
33
33
  summarizeTurnStderr,
34
34
  toolDescription,
35
35
  turnFailChatText
36
- } from "./chunk-UDEWGTP6.js";
36
+ } from "./chunk-6X6KMUI2.js";
37
37
  import {
38
38
  extractPresentedPlan,
39
39
  readPlanFile,
@@ -64,7 +64,7 @@ import {
64
64
  stageAbsolutePathsAsAttachments,
65
65
  stageBuffersAsAttachments,
66
66
  syncWorkspacesFromThreads
67
- } from "./chunk-P2VCMIZU.js";
67
+ } from "./chunk-234EKD2F.js";
68
68
  import {
69
69
  addPrStackLayer,
70
70
  allocateTeamName,
@@ -114,7 +114,7 @@ import {
114
114
  worktreeDisplayLabelForGroup,
115
115
  worktreeNameFromPath,
116
116
  worktreeSlugForTicket
117
- } from "./chunk-Y7DJA3UW.js";
117
+ } from "./chunk-PXNOT6NV.js";
118
118
  import {
119
119
  ATTACHMENTS_DIR,
120
120
  DETACHED_JOBS_DIR,
@@ -167,7 +167,7 @@ import {
167
167
  stripNestedElectronEnv,
168
168
  updateAdvancedSettings,
169
169
  writeSecureJson
170
- } from "./chunk-YMF5WCIA.js";
170
+ } from "./chunk-OKZFTOM2.js";
171
171
  import {
172
172
  writePrivateFile
173
173
  } from "./chunk-NSTQ6QKD.js";
@@ -401,7 +401,7 @@ async function continueSourceThread(threadId, prompt) {
401
401
  await continueOnReply(threadId, prompt);
402
402
  return;
403
403
  }
404
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-LE6L6MJC.js");
404
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-RW4IVITI.js");
405
405
  await getOrchestrator2().send(threadId, prompt);
406
406
  } catch {
407
407
  }
@@ -744,9 +744,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
744
744
  `Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
745
745
  );
746
746
  }
747
- const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-4SI3CRRT.js");
747
+ const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-CRJ6ZVIY.js");
748
748
  if (isGlobalThread2(thread)) {
749
- const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-RRUU2OYO.js");
749
+ const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-PM6MPYYB.js");
750
750
  ensureGlobalCoordinatorCwd2(
751
751
  isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
752
752
  );
@@ -3443,7 +3443,7 @@ async function createThread(input, _onSetupLine) {
3443
3443
  });
3444
3444
  await requireAgent(resolved.agent);
3445
3445
  if (input.cowboy) {
3446
- const { cowboyModeEnabled } = await import("./app-settings-LF3TS7XS.js");
3446
+ const { cowboyModeEnabled } = await import("./app-settings-74HBAAH7.js");
3447
3447
  if (!cowboyModeEnabled()) {
3448
3448
  throw new Error(
3449
3449
  "Cowboy mode is off. Enable it in Settings \u2192 Advanced."
@@ -3501,7 +3501,7 @@ async function createThread(input, _onSetupLine) {
3501
3501
  let sourceIsFork = false;
3502
3502
  if (!input.cowboy && sourceType === "branch" && (!sourceRef || sourceRef === "HEAD" || sourceRef === "default")) {
3503
3503
  if (isAbleTimeConnected() && getIssueSource() === "abletime") {
3504
- const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-ESVTHTFH.js");
3504
+ const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-PCLL36HW.js");
3505
3505
  const task = await ensureAbleTimeTask({
3506
3506
  title: title?.trim() || "Untitled work",
3507
3507
  description: input.prompt?.trim() || void 0
@@ -4009,7 +4009,7 @@ async function adoptThread(input) {
4009
4009
  messages: input.messages ?? []
4010
4010
  });
4011
4011
  writeThread(thread);
4012
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-NOC2MWQV.js");
4012
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-L73MCDFA.js");
4013
4013
  await ensureWorkspace2(repoPath);
4014
4014
  const { ensureWorktreeSideboardIgnored: ensureWorktreeSideboardIgnored2 } = await import("./worktree-exclude-N5X5I422.js");
4015
4015
  await ensureWorktreeSideboardIgnored2(input.worktreePath);
@@ -6283,7 +6283,7 @@ function formatScheduledPrompt(name, prompt) {
6283
6283
  ${prompt}`;
6284
6284
  }
6285
6285
  async function defaultDeps() {
6286
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-LE6L6MJC.js");
6286
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-RW4IVITI.js");
6287
6287
  const orch = getOrchestrator2();
6288
6288
  return {
6289
6289
  findThread: (id) => findThreadByRef(id),
@@ -6545,7 +6545,7 @@ var Orchestrator = class {
6545
6545
  orphans: orphans.map((o) => ({ path: o.path, repoPath: o.repoPath }))
6546
6546
  });
6547
6547
  }
6548
- const { autoCleanupOrphansEnabled } = await import("./app-settings-LF3TS7XS.js");
6548
+ const { autoCleanupOrphansEnabled } = await import("./app-settings-74HBAAH7.js");
6549
6549
  if (autoCleanupOrphansEnabled() && shouldRunWorktreeCleanup() && orphans.length > 0) {
6550
6550
  await cleanupOrphanWorktrees({ repoPaths });
6551
6551
  }
@@ -6824,7 +6824,7 @@ var Orchestrator = class {
6824
6824
  }
6825
6825
  await setup;
6826
6826
  if (skipSetup) return;
6827
- const { autoRunAfterSetupEnabled } = await import("./app-settings-LF3TS7XS.js");
6827
+ const { autoRunAfterSetupEnabled } = await import("./app-settings-74HBAAH7.js");
6828
6828
  if (autoRunAfterSetupEnabled()) {
6829
6829
  try {
6830
6830
  await this.startDev(threadId);
@@ -7139,7 +7139,7 @@ var Orchestrator = class {
7139
7139
  }
7140
7140
  const isBrightsy = fresh.agent === "brightsy";
7141
7141
  const isOrchestration = isOrchestratorThread(fresh);
7142
- const { autoRenameBranchEnabled, getGithubGitAuthMode } = await import("./app-settings-LF3TS7XS.js");
7142
+ const { autoRenameBranchEnabled, getGithubGitAuthMode } = await import("./app-settings-74HBAAH7.js");
7143
7143
  const gitAuthMode = getGithubGitAuthMode();
7144
7144
  const worktreeDirective = isBrightsy || isOrchestration ? null : formatWorktreeDirective(fresh, {
7145
7145
  githubSlug: await resolveGithubRepoSlug(fresh.worktreePath).catch(
@@ -8051,7 +8051,7 @@ var Orchestrator = class {
8051
8051
  updateThread(thread.id, { title: meta.title });
8052
8052
  }
8053
8053
  }
8054
- const { autoArchiveOnMergeEnabled } = await import("./app-settings-LF3TS7XS.js");
8054
+ const { autoArchiveOnMergeEnabled } = await import("./app-settings-74HBAAH7.js");
8055
8055
  const latest = this.requireThread(thread.id);
8056
8056
  if (!shouldAutoArchiveOnPrMerge({
8057
8057
  previousPrState: prevState || null,
@@ -8368,7 +8368,7 @@ var Orchestrator = class {
8368
8368
  this.emit({ type: "status_changed", threadId: archived.id, status: "archived" });
8369
8369
  if (thread.repoPath && !isGlobalRepoPath(thread.repoPath)) {
8370
8370
  try {
8371
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-NOC2MWQV.js");
8371
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-L73MCDFA.js");
8372
8372
  await ensureWorkspace2(thread.repoPath);
8373
8373
  } catch {
8374
8374
  }
@@ -8395,7 +8395,7 @@ var Orchestrator = class {
8395
8395
  await runArchiveScript(thread.repoPath, thread.worktreePath);
8396
8396
  } catch {
8397
8397
  }
8398
- const { deleteBranchOnPurgeEnabled } = await import("./app-settings-LF3TS7XS.js");
8398
+ const { deleteBranchOnPurgeEnabled } = await import("./app-settings-74HBAAH7.js");
8399
8399
  const deleteBranch = opts?.deleteBranch ?? deleteBranchOnPurgeEnabled();
8400
8400
  await removeWorktree(thread.repoPath, thread.worktreePath, {
8401
8401
  deleteBranch: deleteBranch ? thread.branchName : void 0
@@ -8422,7 +8422,7 @@ var Orchestrator = class {
8422
8422
  `Cowboy checkout missing: ${thread.worktreePath}. Re-add the project folder, then restore.`
8423
8423
  );
8424
8424
  }
8425
- const { createThreadWorktree: createThreadWorktree2 } = await import("./worktree-GXO2VDQF.js");
8425
+ const { createThreadWorktree: createThreadWorktree2 } = await import("./worktree-SQD3DBYC.js");
8426
8426
  const slug = thread.worktreePath.split("/").pop();
8427
8427
  const dest = thread.worktreePath;
8428
8428
  await withRepoGitLock(thread.repoPath, async () => {
@@ -8532,7 +8532,7 @@ async function startOrchestration(opts) {
8532
8532
  sourceRef: "default",
8533
8533
  ...createOpts
8534
8534
  }).catch(async () => {
8535
- const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-GXO2VDQF.js");
8535
+ const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-SQD3DBYC.js");
8536
8536
  const repo = await resolveRepoRoot2(repoPath);
8537
8537
  const def = await resolveDefaultBranch2(repo);
8538
8538
  return orch.createThread({
@@ -7,10 +7,10 @@ import {
7
7
  enrichWorkspacesWithGithub,
8
8
  ensureGlobalCoordinatorCwd,
9
9
  formatWorkspaceInventory
10
- } from "./chunk-DHPZW2EA.js";
11
- import "./chunk-3C4B52TS.js";
10
+ } from "./chunk-2RM6BZQ2.js";
11
+ import "./chunk-QYZYDO3F.js";
12
12
  import "./chunk-6K64FJDD.js";
13
- import "./chunk-7IUO67CW.js";
13
+ import "./chunk-J7LQVLFQ.js";
14
14
  import "./chunk-4TR3HZFT.js";
15
15
  import "./chunk-JT7R45JB.js";
16
16
  import "./chunk-7UURXPKD.js";
@@ -9,13 +9,13 @@ import {
9
9
  enrichWorkspacesWithGithub,
10
10
  ensureGlobalCoordinatorCwd,
11
11
  formatWorkspaceInventory
12
- } from "./chunk-P2VCMIZU.js";
13
- import "./chunk-Y7DJA3UW.js";
12
+ } from "./chunk-234EKD2F.js";
13
+ import "./chunk-PXNOT6NV.js";
14
14
  import "./chunk-D6JWYJ4P.js";
15
15
  import "./chunk-LZQULFIT.js";
16
16
  import "./chunk-SYFVUF2C.js";
17
17
  import "./chunk-FNQNJOHY.js";
18
- import "./chunk-YMF5WCIA.js";
18
+ import "./chunk-OKZFTOM2.js";
19
19
  import "./chunk-NSTQ6QKD.js";
20
20
  import "./chunk-KGZBYWZ3.js";
21
21
  import "./chunk-JTJHOYCU.js";
@@ -15,10 +15,10 @@ import {
15
15
  orchestratorSessionPoisonedByBuiltins,
16
16
  slackCoordinatorSourceRef,
17
17
  takenTeamSlugsForOrchestration
18
- } from "./chunk-DHPZW2EA.js";
19
- import "./chunk-3C4B52TS.js";
18
+ } from "./chunk-2RM6BZQ2.js";
19
+ import "./chunk-QYZYDO3F.js";
20
20
  import "./chunk-6K64FJDD.js";
21
- import "./chunk-7IUO67CW.js";
21
+ import "./chunk-J7LQVLFQ.js";
22
22
  import "./chunk-4TR3HZFT.js";
23
23
  import "./chunk-JT7R45JB.js";
24
24
  import "./chunk-7UURXPKD.js";
@@ -17,13 +17,13 @@ import {
17
17
  orchestratorSessionPoisonedByBuiltins,
18
18
  slackCoordinatorSourceRef,
19
19
  takenTeamSlugsForOrchestration
20
- } from "./chunk-P2VCMIZU.js";
21
- import "./chunk-Y7DJA3UW.js";
20
+ } from "./chunk-234EKD2F.js";
21
+ import "./chunk-PXNOT6NV.js";
22
22
  import "./chunk-D6JWYJ4P.js";
23
23
  import "./chunk-LZQULFIT.js";
24
24
  import "./chunk-SYFVUF2C.js";
25
25
  import "./chunk-FNQNJOHY.js";
26
- import "./chunk-YMF5WCIA.js";
26
+ import "./chunk-OKZFTOM2.js";
27
27
  import "./chunk-NSTQ6QKD.js";
28
28
  import "./chunk-KGZBYWZ3.js";
29
29
  import {
package/dist/index.cjs CHANGED
@@ -1141,7 +1141,7 @@ function normalizeClaude(raw) {
1141
1141
  const out = {};
1142
1142
  if (typeof source.executablePath === "string") {
1143
1143
  const path2 = source.executablePath.trim();
1144
- if (path2) out.executablePath = path2;
1144
+ if (path2 && (0, import_node_path8.isAbsolute)(path2)) out.executablePath = path2;
1145
1145
  }
1146
1146
  if (typeof source.chromeEnabled === "boolean") {
1147
1147
  out.chromeEnabled = source.chromeEnabled;
@@ -1154,17 +1154,24 @@ function normalizeCliExecutable(raw) {
1154
1154
  const out = {};
1155
1155
  if (typeof source.executablePath === "string") {
1156
1156
  const path2 = source.executablePath.trim();
1157
- if (path2) out.executablePath = path2;
1157
+ if (path2 && (0, import_node_path8.isAbsolute)(path2)) out.executablePath = path2;
1158
1158
  }
1159
1159
  return out;
1160
1160
  }
1161
+ function absoluteExecutablePath(value) {
1162
+ const path2 = value.trim();
1163
+ if (!(0, import_node_path8.isAbsolute)(path2)) {
1164
+ throw new Error("Executable path must be absolute. Leave it empty to use the system CLI.");
1165
+ }
1166
+ return path2;
1167
+ }
1161
1168
  function normalizeBrightsy(raw) {
1162
1169
  if (!raw || typeof raw !== "object") return {};
1163
1170
  const source = raw;
1164
1171
  const out = {};
1165
1172
  if (typeof source.executablePath === "string") {
1166
1173
  const path2 = source.executablePath.trim();
1167
- if (path2) out.executablePath = path2;
1174
+ if (path2 && (0, import_node_path8.isAbsolute)(path2)) out.executablePath = path2;
1168
1175
  }
1169
1176
  if (typeof source.cloudConnectEnabled === "boolean") {
1170
1177
  out.cloudConnectEnabled = source.cloudConnectEnabled;
@@ -1643,7 +1650,7 @@ function updateClaudeSettings(patch) {
1643
1650
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
1644
1651
  delete claude.executablePath;
1645
1652
  } else {
1646
- claude.executablePath = patch.executablePath.trim();
1653
+ claude.executablePath = absoluteExecutablePath(patch.executablePath);
1647
1654
  }
1648
1655
  }
1649
1656
  if (typeof patch.chromeEnabled === "boolean") {
@@ -1658,7 +1665,7 @@ function updateBrightsySettings(patch) {
1658
1665
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
1659
1666
  delete brightsy.executablePath;
1660
1667
  } else {
1661
- brightsy.executablePath = patch.executablePath.trim();
1668
+ brightsy.executablePath = absoluteExecutablePath(patch.executablePath);
1662
1669
  }
1663
1670
  }
1664
1671
  if (typeof patch.cloudConnectEnabled === "boolean") {
@@ -1683,7 +1690,7 @@ function updateCodexSettings(patch) {
1683
1690
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
1684
1691
  delete codex.executablePath;
1685
1692
  } else {
1686
- codex.executablePath = patch.executablePath.trim();
1693
+ codex.executablePath = absoluteExecutablePath(patch.executablePath);
1687
1694
  }
1688
1695
  }
1689
1696
  return saveAppSettings({ ...current, codex });
@@ -1695,7 +1702,7 @@ function updateOpencodeSettings(patch) {
1695
1702
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
1696
1703
  delete opencode.executablePath;
1697
1704
  } else {
1698
- opencode.executablePath = patch.executablePath.trim();
1705
+ opencode.executablePath = absoluteExecutablePath(patch.executablePath);
1699
1706
  }
1700
1707
  }
1701
1708
  return saveAppSettings({ ...current, opencode });
package/dist/index.js CHANGED
@@ -237,7 +237,7 @@ import {
237
237
  worktreeCleanupSettings,
238
238
  wrapReviewSkillMarkdown,
239
239
  writeWorktreeFile
240
- } from "./chunk-TEI72FYD.js";
240
+ } from "./chunk-QYJS7LYE.js";
241
241
  import {
242
242
  LEGACY_PLAN_FILE_REL,
243
243
  PLAN_FILE_NAME,
@@ -342,7 +342,7 @@ import {
342
342
  withEventParentId,
343
343
  withEventsParentId,
344
344
  writeInjectedMcpConfig
345
- } from "./chunk-SAZIRJR4.js";
345
+ } from "./chunk-3F7AXVIL.js";
346
346
  import {
347
347
  CLOUD_COORDINATOR_BUSY_REPLY,
348
348
  CLOUD_COORDINATOR_STOPPED_REPLY,
@@ -385,7 +385,7 @@ import {
385
385
  stageBuffersAsAttachments,
386
386
  syncWorkspacesFromThreads,
387
387
  takenTeamSlugsForOrchestration
388
- } from "./chunk-DHPZW2EA.js";
388
+ } from "./chunk-2RM6BZQ2.js";
389
389
  import {
390
390
  FAMOUS_SOCCER_TEAMS,
391
391
  GITHUB_PR_BODY_MAX_CHARS,
@@ -482,7 +482,7 @@ import {
482
482
  worktreeDisplayLabelForGroup,
483
483
  worktreeNameFromPath,
484
484
  worktreeSlugForTicket
485
- } from "./chunk-3C4B52TS.js";
485
+ } from "./chunk-QYZYDO3F.js";
486
486
  import {
487
487
  ATTACHMENTS_DIR,
488
488
  CLI_DIR,
@@ -533,7 +533,7 @@ import {
533
533
  toAbleTimeIssueInfo,
534
534
  updateAbleTimeTask,
535
535
  verifyAbleTimeConnection
536
- } from "./chunk-NB7TEKCF.js";
536
+ } from "./chunk-CMJ2FBBV.js";
537
537
  import {
538
538
  formatFetchError,
539
539
  httpFetch,
@@ -643,7 +643,7 @@ import {
643
643
  updateOpencodeSettings,
644
644
  updateProjectProfileSettings,
645
645
  writeViewerContext
646
- } from "./chunk-7IUO67CW.js";
646
+ } from "./chunk-J7LQVLFQ.js";
647
647
  import {
648
648
  stripNestedElectronEnv
649
649
  } from "./chunk-4TR3HZFT.js";
@@ -4239,7 +4239,7 @@ async function startMcpServer() {
4239
4239
  );
4240
4240
  }
4241
4241
  try {
4242
- const { maxConcurrentAgents: maxConcurrentAgents2 } = await import("./app-settings-VMOTQORT.js");
4242
+ const { maxConcurrentAgents: maxConcurrentAgents2 } = await import("./app-settings-663VQWUV.js");
4243
4243
  orch.setMaxConcurrent(maxConcurrentAgents2());
4244
4244
  } catch {
4245
4245
  }
@@ -4548,7 +4548,7 @@ async function startMcpServer() {
4548
4548
  registerConnectedIssueVendorTools(server);
4549
4549
  registerScheduleTools(server);
4550
4550
  const { getCaffeinateHold: getCaffeinateHold2, setCaffeinateHold: setCaffeinateHold2 } = await import("./caffeinate-hold-SK2QISPE.js");
4551
- const { resolveNewThreadOptions: resolveNewThreadOptions2, resolveThreadDefaults: resolveThreadDefaults2 } = await import("./app-settings-VMOTQORT.js");
4551
+ const { resolveNewThreadOptions: resolveNewThreadOptions2, resolveThreadDefaults: resolveThreadDefaults2 } = await import("./app-settings-663VQWUV.js");
4552
4552
  const accountDefaults = resolveThreadDefaults2();
4553
4553
  const accountDefaultsHint = `Account defaults: agent=${accountDefaults.agent}, model=${accountDefaults.model?.trim() || "Auto"}, effort=${accountDefaults.effort}`;
4554
4554
  server.tool(
@@ -3427,7 +3427,7 @@ function normalizeClaude(raw) {
3427
3427
  const out = {};
3428
3428
  if (typeof source.executablePath === "string") {
3429
3429
  const path = source.executablePath.trim();
3430
- if (path) out.executablePath = path;
3430
+ if (path && (0, import_node_path16.isAbsolute)(path)) out.executablePath = path;
3431
3431
  }
3432
3432
  if (typeof source.chromeEnabled === "boolean") {
3433
3433
  out.chromeEnabled = source.chromeEnabled;
@@ -3440,17 +3440,24 @@ function normalizeCliExecutable(raw) {
3440
3440
  const out = {};
3441
3441
  if (typeof source.executablePath === "string") {
3442
3442
  const path = source.executablePath.trim();
3443
- if (path) out.executablePath = path;
3443
+ if (path && (0, import_node_path16.isAbsolute)(path)) out.executablePath = path;
3444
3444
  }
3445
3445
  return out;
3446
3446
  }
3447
+ function absoluteExecutablePath(value) {
3448
+ const path = value.trim();
3449
+ if (!(0, import_node_path16.isAbsolute)(path)) {
3450
+ throw new Error("Executable path must be absolute. Leave it empty to use the system CLI.");
3451
+ }
3452
+ return path;
3453
+ }
3447
3454
  function normalizeBrightsy(raw) {
3448
3455
  if (!raw || typeof raw !== "object") return {};
3449
3456
  const source = raw;
3450
3457
  const out = {};
3451
3458
  if (typeof source.executablePath === "string") {
3452
3459
  const path = source.executablePath.trim();
3453
- if (path) out.executablePath = path;
3460
+ if (path && (0, import_node_path16.isAbsolute)(path)) out.executablePath = path;
3454
3461
  }
3455
3462
  if (typeof source.cloudConnectEnabled === "boolean") {
3456
3463
  out.cloudConnectEnabled = source.cloudConnectEnabled;
@@ -3929,7 +3936,7 @@ function updateClaudeSettings(patch) {
3929
3936
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
3930
3937
  delete claude.executablePath;
3931
3938
  } else {
3932
- claude.executablePath = patch.executablePath.trim();
3939
+ claude.executablePath = absoluteExecutablePath(patch.executablePath);
3933
3940
  }
3934
3941
  }
3935
3942
  if (typeof patch.chromeEnabled === "boolean") {
@@ -3944,7 +3951,7 @@ function updateBrightsySettings(patch) {
3944
3951
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
3945
3952
  delete brightsy.executablePath;
3946
3953
  } else {
3947
- brightsy.executablePath = patch.executablePath.trim();
3954
+ brightsy.executablePath = absoluteExecutablePath(patch.executablePath);
3948
3955
  }
3949
3956
  }
3950
3957
  if (typeof patch.cloudConnectEnabled === "boolean") {
@@ -3969,7 +3976,7 @@ function updateCodexSettings(patch) {
3969
3976
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
3970
3977
  delete codex.executablePath;
3971
3978
  } else {
3972
- codex.executablePath = patch.executablePath.trim();
3979
+ codex.executablePath = absoluteExecutablePath(patch.executablePath);
3973
3980
  }
3974
3981
  }
3975
3982
  return saveAppSettings({ ...current, codex });
@@ -3981,7 +3988,7 @@ function updateOpencodeSettings(patch) {
3981
3988
  if (patch.executablePath == null || patch.executablePath.trim() === "") {
3982
3989
  delete opencode.executablePath;
3983
3990
  } else {
3984
- opencode.executablePath = patch.executablePath.trim();
3991
+ opencode.executablePath = absoluteExecutablePath(patch.executablePath);
3985
3992
  }
3986
3993
  }
3987
3994
  return saveAppSettings({ ...current, opencode });
@@ -37,12 +37,12 @@ import {
37
37
  syncBoardPins,
38
38
  updateSchedule,
39
39
  waitForDetachedJob
40
- } from "../chunk-GQHVICNT.js";
40
+ } from "../chunk-ZTVBIBLB.js";
41
41
  import {
42
42
  isInternalAgentStatusText,
43
43
  listModelsForAgent,
44
44
  sideboardMcpProfile
45
- } from "../chunk-UDEWGTP6.js";
45
+ } from "../chunk-6X6KMUI2.js";
46
46
  import "../chunk-LZ6QMEQC.js";
47
47
  import "../chunk-S42XV45P.js";
48
48
  import {
@@ -57,7 +57,7 @@ import {
57
57
  searchAbleTimeTasks,
58
58
  toAbleTimeIssueInfo,
59
59
  updateAbleTimeTask
60
- } from "../chunk-DKLGWRWC.js";
60
+ } from "../chunk-AQPVBVJE.js";
61
61
  import {
62
62
  httpFetch
63
63
  } from "../chunk-6GN5WPYZ.js";
@@ -67,7 +67,7 @@ import {
67
67
  GLOBAL_WORKSPACE_ID,
68
68
  isCloudCoordinatorThread,
69
69
  listWorkspaces
70
- } from "../chunk-P2VCMIZU.js";
70
+ } from "../chunk-234EKD2F.js";
71
71
  import {
72
72
  canonicalizeRepoPath,
73
73
  formatGhLandError,
@@ -78,7 +78,7 @@ import {
78
78
  resolveListPrsOptions,
79
79
  resolveRepoRoot,
80
80
  warmGithubAgentAuth
81
- } from "../chunk-Y7DJA3UW.js";
81
+ } from "../chunk-PXNOT6NV.js";
82
82
  import "../chunk-D6JWYJ4P.js";
83
83
  import "../chunk-LZQULFIT.js";
84
84
  import "../chunk-SYFVUF2C.js";
@@ -98,7 +98,7 @@ import {
98
98
  resolveViewerProfileForRepo,
99
99
  saveLinearOAuth,
100
100
  writeViewerContext
101
- } from "../chunk-YMF5WCIA.js";
101
+ } from "../chunk-OKZFTOM2.js";
102
102
  import "../chunk-NSTQ6QKD.js";
103
103
  import "../chunk-KGZBYWZ3.js";
104
104
  import {
@@ -2981,7 +2981,7 @@ async function startMcpServer() {
2981
2981
  );
2982
2982
  }
2983
2983
  try {
2984
- const { maxConcurrentAgents } = await import("../app-settings-LF3TS7XS.js");
2984
+ const { maxConcurrentAgents } = await import("../app-settings-74HBAAH7.js");
2985
2985
  orch.setMaxConcurrent(maxConcurrentAgents());
2986
2986
  } catch {
2987
2987
  }
@@ -3290,7 +3290,7 @@ async function startMcpServer() {
3290
3290
  registerConnectedIssueVendorTools(server);
3291
3291
  registerScheduleTools(server);
3292
3292
  const { getCaffeinateHold, setCaffeinateHold } = await import("../caffeinate-hold-DBKMRZZO.js");
3293
- const { resolveNewThreadOptions, resolveThreadDefaults } = await import("../app-settings-LF3TS7XS.js");
3293
+ const { resolveNewThreadOptions, resolveThreadDefaults } = await import("../app-settings-74HBAAH7.js");
3294
3294
  const accountDefaults = resolveThreadDefaults();
3295
3295
  const accountDefaultsHint = `Account defaults: agent=${accountDefaults.agent}, model=${accountDefaults.model?.trim() || "Auto"}, effort=${accountDefaults.effort}`;
3296
3296
  server.tool(
@@ -7,20 +7,20 @@ import {
7
7
  isPidAlive,
8
8
  startOrchestration,
9
9
  waitForPidExit
10
- } from "./chunk-GQHVICNT.js";
11
- import "./chunk-UDEWGTP6.js";
10
+ } from "./chunk-ZTVBIBLB.js";
11
+ import "./chunk-6X6KMUI2.js";
12
12
  import "./chunk-LZ6QMEQC.js";
13
13
  import "./chunk-S42XV45P.js";
14
14
  import "./chunk-6GN5WPYZ.js";
15
15
  import "./chunk-JFOPOMK7.js";
16
16
  import "./chunk-OCQPTUR7.js";
17
- import "./chunk-P2VCMIZU.js";
18
- import "./chunk-Y7DJA3UW.js";
17
+ import "./chunk-234EKD2F.js";
18
+ import "./chunk-PXNOT6NV.js";
19
19
  import "./chunk-D6JWYJ4P.js";
20
20
  import "./chunk-LZQULFIT.js";
21
21
  import "./chunk-SYFVUF2C.js";
22
22
  import "./chunk-FNQNJOHY.js";
23
- import "./chunk-YMF5WCIA.js";
23
+ import "./chunk-OKZFTOM2.js";
24
24
  import "./chunk-NSTQ6QKD.js";
25
25
  import "./chunk-KGZBYWZ3.js";
26
26
  import "./chunk-JTJHOYCU.js";
@@ -5,18 +5,18 @@ import {
5
5
  isPidAlive,
6
6
  startOrchestration,
7
7
  waitForPidExit
8
- } from "./chunk-TEI72FYD.js";
8
+ } from "./chunk-QYJS7LYE.js";
9
9
  import "./chunk-DJU54RYW.js";
10
- import "./chunk-SAZIRJR4.js";
11
- import "./chunk-DHPZW2EA.js";
12
- import "./chunk-3C4B52TS.js";
10
+ import "./chunk-3F7AXVIL.js";
11
+ import "./chunk-2RM6BZQ2.js";
12
+ import "./chunk-QYZYDO3F.js";
13
13
  import "./chunk-6K64FJDD.js";
14
14
  import "./chunk-XD2BAANL.js";
15
15
  import "./chunk-M267JPEA.js";
16
16
  import "./chunk-ELBYOGVA.js";
17
17
  import "./chunk-AXQ4ZWHK.js";
18
18
  import "./chunk-XXIH6XYR.js";
19
- import "./chunk-7IUO67CW.js";
19
+ import "./chunk-J7LQVLFQ.js";
20
20
  import "./chunk-4TR3HZFT.js";
21
21
  import "./chunk-AO35MGOE.js";
22
22
  import "./chunk-JT7R45JB.js";
@@ -6,13 +6,13 @@ import {
6
6
  listWorkspaces,
7
7
  removeWorkspace,
8
8
  syncWorkspacesFromThreads
9
- } from "./chunk-P2VCMIZU.js";
10
- import "./chunk-Y7DJA3UW.js";
9
+ } from "./chunk-234EKD2F.js";
10
+ import "./chunk-PXNOT6NV.js";
11
11
  import "./chunk-D6JWYJ4P.js";
12
12
  import "./chunk-LZQULFIT.js";
13
13
  import "./chunk-SYFVUF2C.js";
14
14
  import "./chunk-FNQNJOHY.js";
15
- import "./chunk-YMF5WCIA.js";
15
+ import "./chunk-OKZFTOM2.js";
16
16
  import "./chunk-NSTQ6QKD.js";
17
17
  import "./chunk-KGZBYWZ3.js";
18
18
  import "./chunk-JTJHOYCU.js";
@@ -4,10 +4,10 @@ import {
4
4
  listWorkspaces,
5
5
  removeWorkspace,
6
6
  syncWorkspacesFromThreads
7
- } from "./chunk-DHPZW2EA.js";
8
- import "./chunk-3C4B52TS.js";
7
+ } from "./chunk-2RM6BZQ2.js";
8
+ import "./chunk-QYZYDO3F.js";
9
9
  import "./chunk-6K64FJDD.js";
10
- import "./chunk-7IUO67CW.js";
10
+ import "./chunk-J7LQVLFQ.js";
11
11
  import "./chunk-4TR3HZFT.js";
12
12
  import "./chunk-JT7R45JB.js";
13
13
  import "./chunk-7UURXPKD.js";
@@ -59,12 +59,12 @@ import {
59
59
  worktreeDisplayLabelForGroup,
60
60
  worktreeNameFromPath,
61
61
  worktreeSlugForTicket
62
- } from "./chunk-Y7DJA3UW.js";
62
+ } from "./chunk-PXNOT6NV.js";
63
63
  import "./chunk-D6JWYJ4P.js";
64
64
  import "./chunk-LZQULFIT.js";
65
65
  import "./chunk-SYFVUF2C.js";
66
66
  import "./chunk-FNQNJOHY.js";
67
- import "./chunk-YMF5WCIA.js";
67
+ import "./chunk-OKZFTOM2.js";
68
68
  import "./chunk-NSTQ6QKD.js";
69
69
  import "./chunk-KGZBYWZ3.js";
70
70
  import "./chunk-JTJHOYCU.js";
@@ -57,9 +57,9 @@ import {
57
57
  worktreeDisplayLabelForGroup,
58
58
  worktreeNameFromPath,
59
59
  worktreeSlugForTicket
60
- } from "./chunk-3C4B52TS.js";
60
+ } from "./chunk-QYZYDO3F.js";
61
61
  import "./chunk-6K64FJDD.js";
62
- import "./chunk-7IUO67CW.js";
62
+ import "./chunk-J7LQVLFQ.js";
63
63
  import "./chunk-4TR3HZFT.js";
64
64
  import "./chunk-JT7R45JB.js";
65
65
  import "./chunk-7UURXPKD.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sideboard-ai/core",
3
- "version": "0.1.170",
3
+ "version": "0.1.172",
4
4
  "description": "Sideboard core — orchestration, agents, git worktrees, MCP server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",