@sideboard-ai/core 0.1.85 → 0.1.87

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 (51) hide show
  1. package/dist/agents/cursor-runner.cjs +77 -29
  2. package/dist/agents/cursor-runner.js +55 -17
  3. package/dist/{agents-YAYNNJWC.js → agents-V6PVSQYH.js} +8 -8
  4. package/dist/{agents-FD77JUOP.js → agents-W5446HSV.js} +8 -8
  5. package/dist/{app-settings-PEXK5VEX.js → app-settings-F36ISTCF.js} +2 -2
  6. package/dist/{app-settings-K6RFCRF6.js → app-settings-HFINR3XG.js} +2 -2
  7. package/dist/{caffeinate-hold-EAZNWJBE.js → caffeinate-hold-I7SG6UQR.js} +2 -2
  8. package/dist/{caffeinate-hold-OHAUWOA6.js → caffeinate-hold-U3QJBV67.js} +2 -2
  9. package/dist/{chunk-XVFV56JG.js → chunk-3MA6JH6G.js} +5 -5
  10. package/dist/{chunk-FWJYLBO6.js → chunk-3WA37BRI.js} +1 -1
  11. package/dist/{chunk-JTHWVYSD.js → chunk-4PTN2LED.js} +5 -5
  12. package/dist/{chunk-RV6DBEDQ.js → chunk-7KDBDMNC.js} +1 -1
  13. package/dist/{chunk-SH75CXJR.js → chunk-A7LONVNO.js} +5 -5
  14. package/dist/{chunk-M37RITA6.js → chunk-B4R2VB2A.js} +164 -30
  15. package/dist/{chunk-6WQAYBVE.js → chunk-CY45C3GA.js} +4 -4
  16. package/dist/{chunk-6K5VAPVR.js → chunk-DKHGWYWR.js} +1 -1
  17. package/dist/{chunk-2N5DVTGH.js → chunk-HBXQQ5TO.js} +3 -3
  18. package/dist/{chunk-7MV3RXSC.js → chunk-JL4SJ6V7.js} +137 -26
  19. package/dist/{chunk-7FD7COKE.js → chunk-JOF3XIEM.js} +1 -1
  20. package/dist/{chunk-KRAUS3RF.js → chunk-L63LLCTX.js} +4 -4
  21. package/dist/{chunk-MFF2RE3I.js → chunk-NZPGMNFC.js} +1 -1
  22. package/dist/{chunk-HHTHF5BQ.js → chunk-QSLE4VEM.js} +4 -4
  23. package/dist/{chunk-3CCRD6WS.js → chunk-QWNROSRB.js} +6 -6
  24. package/dist/{chunk-JFQ2M6NQ.js → chunk-R2EOZNQI.js} +3 -3
  25. package/dist/{chunk-AY53MPDE.js → chunk-TC2KY5G7.js} +1 -1
  26. package/dist/{chunk-WGI6KXKJ.js → chunk-U4GZKLIV.js} +6 -6
  27. package/dist/{chunk-6GKDYUTJ.js → chunk-UVNXLTFB.js} +5 -5
  28. package/dist/{chunk-I3FRXL7J.js → chunk-XY6XXMAK.js} +1 -1
  29. package/dist/{connected-teams-BNBM7OIC.js → connected-teams-SWHJWK2A.js} +2 -2
  30. package/dist/{connected-teams-LSQ5TAZP.js → connected-teams-TLVKZPJP.js} +2 -2
  31. package/dist/{coordinator-prompt-VN7FF76K.js → coordinator-prompt-EC3KQLN3.js} +5 -5
  32. package/dist/{coordinator-prompt-YYQSPLIP.js → coordinator-prompt-PYRAXZN3.js} +5 -5
  33. package/dist/{cursor-recover-L5PNQUDT.js → cursor-recover-G34BYKL2.js} +1 -1
  34. package/dist/{cursor-recover-NNK7JPQM.js → cursor-recover-S5ORPW34.js} +1 -1
  35. package/dist/{global-workspace-BRIDCBMY.js → global-workspace-ICWOWUW6.js} +6 -6
  36. package/dist/{global-workspace-U3XVTQLL.js → global-workspace-T5IAJF4R.js} +6 -6
  37. package/dist/index.cjs +633 -526
  38. package/dist/index.d.cts +45 -11
  39. package/dist/index.d.ts +45 -11
  40. package/dist/index.js +212 -252
  41. package/dist/mcp/run-stdio.cjs +570 -490
  42. package/dist/mcp/run-stdio.js +184 -225
  43. package/dist/{paths-VPH3ITBK.js → paths-JQM2XRAD.js} +1 -1
  44. package/dist/{paths-2OFB7UJG.js → paths-TZX4L5X7.js} +1 -1
  45. package/dist/{thread-store-BUBR24YA.js → thread-store-V7NOOXKE.js} +2 -2
  46. package/dist/{thread-store-XTPFCJAI.js → thread-store-XAKWCV2E.js} +2 -2
  47. package/dist/{workspaces-IWQIWAMQ.js → workspaces-AJCAFW64.js} +7 -7
  48. package/dist/{workspaces-AIZDG6PS.js → workspaces-J4ULXOUH.js} +7 -7
  49. package/dist/{worktree-6ZALJUWG.js → worktree-4Z2VSHAQ.js} +4 -4
  50. package/dist/{worktree-7Y22WHR7.js → worktree-H57CCHWO.js} +4 -4
  51. package/package.json +1 -1
@@ -3,9 +3,9 @@
3
3
 
4
4
  // src/agents/cursor-runner.ts
5
5
  var import_sdk = require("@cursor/sdk");
6
- var import_node_fs3 = require("fs");
7
- var import_node_path4 = require("path");
8
- var import_node_readline = require("readline");
6
+ var import_node_fs5 = require("fs");
7
+ var import_node_path6 = require("path");
8
+ var import_node_readline2 = require("readline");
9
9
 
10
10
  // src/hook/nested-electron-env.ts
11
11
  var NESTED_ELECTRON_ENV_PREFIXES = ["ELECTRON_", "CHROME_"];
@@ -25,22 +25,32 @@ var STRIP_NESTED_ELECTRON_THEN_EXEC = [
25
25
  ].join("; ");
26
26
 
27
27
  // src/store/paths.ts
28
- var import_node_path2 = require("path");
28
+ var import_node_path4 = require("path");
29
29
  var import_node_os2 = require("os");
30
- var import_node_path3 = require("path");
31
- var import_node_fs2 = require("fs");
30
+ var import_node_path5 = require("path");
31
+ var import_node_fs4 = require("fs");
32
32
 
33
33
  // src/hook/settings.ts
34
- var import_node_fs = require("fs");
34
+ var import_node_fs3 = require("fs");
35
35
  var import_node_os = require("os");
36
- var import_node_path = require("path");
36
+ var import_node_path3 = require("path");
37
37
  var import_smol_toml = require("smol-toml");
38
38
 
39
+ // src/hook/convention-setup.ts
40
+ var import_node_fs = require("fs");
41
+ var import_node_path = require("path");
42
+
43
+ // src/hook/cursor-worktrees.ts
44
+ var import_node_fs2 = require("fs");
45
+ var import_node_path2 = require("path");
46
+ var import_execa = require("execa");
47
+ var import_node_readline = require("readline");
48
+
39
49
  // src/store/paths.ts
40
50
  function appDataDir() {
41
51
  const override = process.env.SIDEBOARD_APP_DATA?.trim();
42
- const base = override ? override : process.platform === "darwin" ? (0, import_node_path3.join)((0, import_node_os2.homedir)(), "Library", "Application Support", "sideboard") : process.platform === "win32" ? (0, import_node_path3.join)(process.env.APPDATA ?? (0, import_node_path3.join)((0, import_node_os2.homedir)(), "AppData", "Roaming"), "sideboard") : (0, import_node_path3.join)((0, import_node_os2.homedir)(), ".local", "share", "sideboard");
43
- (0, import_node_fs2.mkdirSync)(base, { recursive: true });
52
+ const base = override ? override : process.platform === "darwin" ? (0, import_node_path5.join)((0, import_node_os2.homedir)(), "Library", "Application Support", "sideboard") : process.platform === "win32" ? (0, import_node_path5.join)(process.env.APPDATA ?? (0, import_node_path5.join)((0, import_node_os2.homedir)(), "AppData", "Roaming"), "sideboard") : (0, import_node_path5.join)((0, import_node_os2.homedir)(), ".local", "share", "sideboard");
53
+ (0, import_node_fs4.mkdirSync)(base, { recursive: true });
44
54
  return base;
45
55
  }
46
56
 
@@ -69,6 +79,16 @@ function cursorSessionRecoveryMessage(err, agentId) {
69
79
  }
70
80
  return `Cursor session is unresumable (${detail}) \u2014 starting a new session`;
71
81
  }
82
+ function cursorSendOptions(mcpServers) {
83
+ const opts = { local: { force: true } };
84
+ if (mcpServers && typeof mcpServers === "object" && Object.keys(mcpServers).length > 0) {
85
+ opts.mcpServers = mcpServers;
86
+ }
87
+ return opts;
88
+ }
89
+ function withCursorLocalHangGuards(local) {
90
+ return { ...local, enableAgentRetries: false };
91
+ }
72
92
 
73
93
  // src/agents/error-detail.ts
74
94
  function formatUnknownDetail(err) {
@@ -287,8 +307,8 @@ function modelSelection(model, opts) {
287
307
  return params.length > 0 ? { id, params } : { id };
288
308
  }
289
309
  function localAgentStore() {
290
- const root = (0, import_node_path4.join)(appDataDir(), "cursor-sdk-store");
291
- (0, import_node_fs3.mkdirSync)(root, { recursive: true });
310
+ const root = (0, import_node_path6.join)(appDataDir(), "cursor-sdk-store");
311
+ (0, import_node_fs5.mkdirSync)(root, { recursive: true });
292
312
  return new import_sdk.JsonlLocalAgentStore(root);
293
313
  }
294
314
  async function cancelStaleLocalRuns(agentId, opts) {
@@ -314,7 +334,7 @@ async function cancelStaleLocalRuns(agentId, opts) {
314
334
  return cancelled;
315
335
  }
316
336
  async function readStdinJson() {
317
- const rl = (0, import_node_readline.createInterface)({ input: process.stdin, crlfDelay: Infinity });
337
+ const rl = (0, import_node_readline2.createInterface)({ input: process.stdin, crlfDelay: Infinity });
318
338
  const chunks = [];
319
339
  for await (const line of rl) {
320
340
  chunks.push(line);
@@ -347,7 +367,7 @@ async function main() {
347
367
  });
348
368
  const mode = req.planMode ? "plan" : "agent";
349
369
  const store = localAgentStore();
350
- const local = { cwd: req.cwd, store };
370
+ const local = withCursorLocalHangGuards({ cwd: req.cwd, store });
351
371
  const mcpServers = req.mcpServers && Object.keys(req.mcpServers).length > 0 ? req.mcpServers : void 0;
352
372
  const createOpts = {
353
373
  apiKey,
@@ -379,7 +399,7 @@ async function main() {
379
399
  }
380
400
  }
381
401
  async function sendPrompt(agent) {
382
- const sendOpts = mcpServers ? { mcpServers } : void 0;
402
+ const sendOpts = cursorSendOptions(mcpServers);
383
403
  try {
384
404
  return await agent.send(req.prompt, sendOpts);
385
405
  } catch (err) {
@@ -395,25 +415,53 @@ async function main() {
395
415
  return agent.send(req.prompt, sendOpts);
396
416
  }
397
417
  }
418
+ let liveRun = null;
419
+ let shuttingDown = false;
420
+ const cancelLiveRun = async () => {
421
+ const run = liveRun;
422
+ liveRun = null;
423
+ if (!run) return;
424
+ try {
425
+ await run.cancel();
426
+ } catch {
427
+ }
428
+ };
429
+ const onSignal = () => {
430
+ if (shuttingDown) return;
431
+ shuttingDown = true;
432
+ void Promise.race([
433
+ cancelLiveRun(),
434
+ new Promise((resolve) => {
435
+ setTimeout(resolve, 2e3);
436
+ })
437
+ ]).finally(() => process.exit(1));
438
+ };
439
+ process.once("SIGTERM", onSignal);
440
+ process.once("SIGINT", onSignal);
398
441
  async function runTurn(agent) {
399
442
  emit({ type: "session_id", data: agent.agentId });
400
443
  const run = await sendPrompt(agent);
401
- for await (const msg of run.stream()) {
402
- for (const event of cursorSdkMessageToEvents(msg)) {
403
- emit(event);
444
+ liveRun = run;
445
+ try {
446
+ for await (const msg of run.stream()) {
447
+ for (const event of cursorSdkMessageToEvents(msg)) {
448
+ emit(event);
449
+ }
404
450
  }
451
+ const result = await run.wait();
452
+ if (result.status === "error") {
453
+ const detail = formatUnknownDetail(result.error);
454
+ emit({
455
+ type: "stderr",
456
+ data: detail ? `Cursor run failed (${result.id}): ${detail}` : `Cursor run failed (${result.id})`
457
+ });
458
+ return 2;
459
+ }
460
+ if (result.status === "cancelled") return 0;
461
+ return 0;
462
+ } finally {
463
+ liveRun = null;
405
464
  }
406
- const result = await run.wait();
407
- if (result.status === "error") {
408
- const detail = formatUnknownDetail(result.error);
409
- emit({
410
- type: "stderr",
411
- data: detail ? `Cursor run failed (${result.id}): ${detail}` : `Cursor run failed (${result.id})`
412
- });
413
- return 2;
414
- }
415
- if (result.status === "cancelled") return 0;
416
- return 0;
417
465
  }
418
466
  try {
419
467
  let agent = await openAgent();
@@ -8,7 +8,7 @@ import {
8
8
  } from "../chunk-5KLC2MWZ.js";
9
9
  import {
10
10
  appDataDir
11
- } from "../chunk-M37RITA6.js";
11
+ } from "../chunk-B4R2VB2A.js";
12
12
 
13
13
  // src/agents/cursor-runner.ts
14
14
  import { Agent, CursorAgentError, JsonlLocalAgentStore } from "@cursor/sdk";
@@ -41,6 +41,16 @@ function cursorSessionRecoveryMessage(err, agentId) {
41
41
  }
42
42
  return `Cursor session is unresumable (${detail}) \u2014 starting a new session`;
43
43
  }
44
+ function cursorSendOptions(mcpServers) {
45
+ const opts = { local: { force: true } };
46
+ if (mcpServers && typeof mcpServers === "object" && Object.keys(mcpServers).length > 0) {
47
+ opts.mcpServers = mcpServers;
48
+ }
49
+ return opts;
50
+ }
51
+ function withCursorLocalHangGuards(local) {
52
+ return { ...local, enableAgentRetries: false };
53
+ }
44
54
 
45
55
  // src/agents/cursor-runner.ts
46
56
  dropNestedElectronEnvFromProcess();
@@ -123,7 +133,7 @@ async function main() {
123
133
  });
124
134
  const mode = req.planMode ? "plan" : "agent";
125
135
  const store = localAgentStore();
126
- const local = { cwd: req.cwd, store };
136
+ const local = withCursorLocalHangGuards({ cwd: req.cwd, store });
127
137
  const mcpServers = req.mcpServers && Object.keys(req.mcpServers).length > 0 ? req.mcpServers : void 0;
128
138
  const createOpts = {
129
139
  apiKey,
@@ -155,7 +165,7 @@ async function main() {
155
165
  }
156
166
  }
157
167
  async function sendPrompt(agent) {
158
- const sendOpts = mcpServers ? { mcpServers } : void 0;
168
+ const sendOpts = cursorSendOptions(mcpServers);
159
169
  try {
160
170
  return await agent.send(req.prompt, sendOpts);
161
171
  } catch (err) {
@@ -171,25 +181,53 @@ async function main() {
171
181
  return agent.send(req.prompt, sendOpts);
172
182
  }
173
183
  }
184
+ let liveRun = null;
185
+ let shuttingDown = false;
186
+ const cancelLiveRun = async () => {
187
+ const run = liveRun;
188
+ liveRun = null;
189
+ if (!run) return;
190
+ try {
191
+ await run.cancel();
192
+ } catch {
193
+ }
194
+ };
195
+ const onSignal = () => {
196
+ if (shuttingDown) return;
197
+ shuttingDown = true;
198
+ void Promise.race([
199
+ cancelLiveRun(),
200
+ new Promise((resolve) => {
201
+ setTimeout(resolve, 2e3);
202
+ })
203
+ ]).finally(() => process.exit(1));
204
+ };
205
+ process.once("SIGTERM", onSignal);
206
+ process.once("SIGINT", onSignal);
174
207
  async function runTurn(agent) {
175
208
  emit({ type: "session_id", data: agent.agentId });
176
209
  const run = await sendPrompt(agent);
177
- for await (const msg of run.stream()) {
178
- for (const event of cursorSdkMessageToEvents(msg)) {
179
- emit(event);
210
+ liveRun = run;
211
+ try {
212
+ for await (const msg of run.stream()) {
213
+ for (const event of cursorSdkMessageToEvents(msg)) {
214
+ emit(event);
215
+ }
180
216
  }
217
+ const result = await run.wait();
218
+ if (result.status === "error") {
219
+ const detail = formatUnknownDetail(result.error);
220
+ emit({
221
+ type: "stderr",
222
+ data: detail ? `Cursor run failed (${result.id}): ${detail}` : `Cursor run failed (${result.id})`
223
+ });
224
+ return 2;
225
+ }
226
+ if (result.status === "cancelled") return 0;
227
+ return 0;
228
+ } finally {
229
+ liveRun = null;
181
230
  }
182
- const result = await run.wait();
183
- if (result.status === "error") {
184
- const detail = formatUnknownDetail(result.error);
185
- emit({
186
- type: "stderr",
187
- data: detail ? `Cursor run failed (${result.id}): ${detail}` : `Cursor run failed (${result.id})`
188
- });
189
- return 2;
190
- }
191
- if (result.status === "cancelled") return 0;
192
- return 0;
193
231
  }
194
232
  try {
195
233
  let agent = await openAgent();
@@ -28,27 +28,27 @@ import {
28
28
  resolveCursorModelId,
29
29
  resolveLoginCommand,
30
30
  resolveQuotaFallbackAgent
31
- } from "./chunk-WGI6KXKJ.js";
31
+ } from "./chunk-U4GZKLIV.js";
32
32
  import {
33
33
  ORCHESTRATOR_AGENT_KINDS,
34
34
  assertOrchestratorCapableAgent,
35
35
  coerceOrchestratorAgent,
36
36
  isOrchestratorCapableAgent
37
- } from "./chunk-JTHWVYSD.js";
38
- import "./chunk-SH75CXJR.js";
39
- import "./chunk-HHTHF5BQ.js";
37
+ } from "./chunk-4PTN2LED.js";
38
+ import "./chunk-A7LONVNO.js";
39
+ import "./chunk-QSLE4VEM.js";
40
40
  import {
41
41
  cursorSdkMessageToEvents,
42
42
  parseCursorRunnerLine
43
43
  } from "./chunk-CBJSPTBG.js";
44
- import "./chunk-KRAUS3RF.js";
44
+ import "./chunk-L63LLCTX.js";
45
45
  import "./chunk-FKOIHGKV.js";
46
- import "./chunk-I3FRXL7J.js";
46
+ import "./chunk-XY6XXMAK.js";
47
47
  import "./chunk-5KLC2MWZ.js";
48
48
  import "./chunk-JT7R45JB.js";
49
- import "./chunk-FWJYLBO6.js";
49
+ import "./chunk-3WA37BRI.js";
50
50
  import "./chunk-77WWLBCI.js";
51
- import "./chunk-M37RITA6.js";
51
+ import "./chunk-B4R2VB2A.js";
52
52
  import {
53
53
  conductorBundledBinDir,
54
54
  enrichPathWithNpmGlobalBin,
@@ -32,22 +32,22 @@ import {
32
32
  resolveCursorModelId,
33
33
  resolveLoginCommand,
34
34
  resolveQuotaFallbackAgent
35
- } from "./chunk-3CCRD6WS.js";
36
- import "./chunk-6K5VAPVR.js";
35
+ } from "./chunk-QWNROSRB.js";
36
+ import "./chunk-DKHGWYWR.js";
37
37
  import {
38
38
  ORCHESTRATOR_AGENT_KINDS,
39
39
  assertOrchestratorCapableAgent,
40
40
  coerceOrchestratorAgent,
41
41
  isOrchestratorCapableAgent
42
- } from "./chunk-6GKDYUTJ.js";
43
- import "./chunk-XVFV56JG.js";
44
- import "./chunk-6WQAYBVE.js";
42
+ } from "./chunk-UVNXLTFB.js";
43
+ import "./chunk-3MA6JH6G.js";
44
+ import "./chunk-CY45C3GA.js";
45
45
  import "./chunk-B3SJXYIJ.js";
46
- import "./chunk-7FD7COKE.js";
47
- import "./chunk-AY53MPDE.js";
46
+ import "./chunk-JOF3XIEM.js";
47
+ import "./chunk-TC2KY5G7.js";
48
48
  import "./chunk-NSTQ6QKD.js";
49
49
  import "./chunk-KGZBYWZ3.js";
50
- import "./chunk-7MV3RXSC.js";
50
+ import "./chunk-JL4SJ6V7.js";
51
51
  import {
52
52
  conductorBundledBinDir,
53
53
  enrichPathWithNpmGlobalBin,
@@ -54,10 +54,10 @@ import {
54
54
  updateDefaultsSettings,
55
55
  updateIntegrationsSettings,
56
56
  updateOpencodeSettings
57
- } from "./chunk-AY53MPDE.js";
57
+ } from "./chunk-TC2KY5G7.js";
58
58
  import "./chunk-NSTQ6QKD.js";
59
59
  import "./chunk-KGZBYWZ3.js";
60
- import "./chunk-7MV3RXSC.js";
60
+ import "./chunk-JL4SJ6V7.js";
61
61
  export {
62
62
  GITHUB_GIT_AUTH_MODES,
63
63
  HARNESS_ENV_KEYS,
@@ -52,11 +52,11 @@ import {
52
52
  updateDefaultsSettings,
53
53
  updateIntegrationsSettings,
54
54
  updateOpencodeSettings
55
- } from "./chunk-I3FRXL7J.js";
55
+ } from "./chunk-XY6XXMAK.js";
56
56
  import "./chunk-5KLC2MWZ.js";
57
57
  import "./chunk-JT7R45JB.js";
58
58
  import "./chunk-77WWLBCI.js";
59
- import "./chunk-M37RITA6.js";
59
+ import "./chunk-B4R2VB2A.js";
60
60
  export {
61
61
  GITHUB_GIT_AUTH_MODES,
62
62
  HARNESS_ENV_KEYS,
@@ -5,9 +5,9 @@ import {
5
5
  releaseCaffeinateHoldForThread,
6
6
  setCaffeinateHold,
7
7
  setCaffeinateHoldHooks
8
- } from "./chunk-MFF2RE3I.js";
8
+ } from "./chunk-NZPGMNFC.js";
9
9
  import "./chunk-JT7R45JB.js";
10
- import "./chunk-M37RITA6.js";
10
+ import "./chunk-B4R2VB2A.js";
11
11
  export {
12
12
  caffeinateHoldPath,
13
13
  getCaffeinateHold,
@@ -7,9 +7,9 @@ import {
7
7
  releaseCaffeinateHoldForThread,
8
8
  setCaffeinateHold,
9
9
  setCaffeinateHoldHooks
10
- } from "./chunk-RV6DBEDQ.js";
10
+ } from "./chunk-7KDBDMNC.js";
11
11
  import "./chunk-NSTQ6QKD.js";
12
- import "./chunk-7MV3RXSC.js";
12
+ import "./chunk-JL4SJ6V7.js";
13
13
  export {
14
14
  caffeinateHoldPath,
15
15
  getCaffeinateHold,
@@ -2,14 +2,14 @@
2
2
 
3
3
  import {
4
4
  resolveGithubRepoSlug
5
- } from "./chunk-6WQAYBVE.js";
5
+ } from "./chunk-CY45C3GA.js";
6
6
  import {
7
7
  resolveThreadDefaults
8
- } from "./chunk-AY53MPDE.js";
8
+ } from "./chunk-TC2KY5G7.js";
9
9
  import {
10
10
  globalAgentCwd,
11
11
  sideboardReposDir
12
- } from "./chunk-7MV3RXSC.js";
12
+ } from "./chunk-JL4SJ6V7.js";
13
13
 
14
14
  // src/orchestrator/coordinator-prompt.ts
15
15
  import { mkdirSync, readFileSync, writeFileSync } from "fs";
@@ -58,7 +58,7 @@ var COORDINATOR_TOOL_PLAYBOOK = [
58
58
  "Workspaces:",
59
59
  "- add_workspace / remove_workspace \u2014 register or unregister a git repo",
60
60
  "Worktree threads (chats):",
61
- "- create_thread \u2014 create a worktree + chat from branch | pr | ticket; pass repoPath + parentThreadId; omit agent and model to use Sideboard Account defaults (Settings \u2192 Default agent, model & effort). If you are Codex, do not set agent=codex (nested Codex deadlocks)",
61
+ "- create_thread \u2014 create a worktree + chat from branch | pr | ticket; pass repoPath + parentThreadId; omit agent and model to use Sideboard Account defaults (Settings \u2192 Default agent, model & effort). If the repo has a setup script, Sideboard runs it in the background (does not block send_to_thread). If you are Codex, do not set agent=codex (nested Codex deadlocks)",
62
62
  "- fork_worktree \u2014 fork a worktree chat into a NEW git worktree + chat (transcript attached); optional agent; leave model unset (Auto) unless you have a reason. Not for orchestration chats.",
63
63
  "- fork_chat \u2014 fork a worktree chat (same worktree tab) OR a Global orchestration chat (new orchestration tab); optional agent; leave model unset (Auto) unless you have a reason. Remote coordinators: use this to continue another orchestration chat on a different agent after session limits.",
64
64
  "- send_to_thread \u2014 queue a prompt (start/continue a chat turn); pass force_stop: true to interrupt mid-turn / clear stale queued prompts before replacing with a new request",
@@ -66,7 +66,7 @@ var COORDINATOR_TOOL_PLAYBOOK = [
66
66
  "- stop_thread \u2014 force-stop: kill in-flight turn AND clear queued prompts (do not leave stale queue after an interrupt)",
67
67
  "- archive_thread / restore_thread \u2014 archive (tears down worktree when last tab) or restore",
68
68
  "Setup / run:",
69
- "- run_setup \u2014 re-run worktree setup",
69
+ "- run_setup \u2014 re-run worktree setup (already runs automatically on create when a script exists)",
70
70
  "- list_run_scripts / run_dev_script / stop_dev_script \u2014 start/stop named run scripts",
71
71
  "Inspect / review / PRs:",
72
72
  "- get_diff \u2014 compact diff summary",
@@ -5,7 +5,7 @@ import {
5
5
  threadFilePath,
6
6
  threadLockPath,
7
7
  threadsDir
8
- } from "./chunk-M37RITA6.js";
8
+ } from "./chunk-B4R2VB2A.js";
9
9
 
10
10
  // src/store/thread-store.ts
11
11
  import { randomUUID } from "crypto";
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  ensureGlobalCoordinatorCwd
3
- } from "./chunk-SH75CXJR.js";
3
+ } from "./chunk-A7LONVNO.js";
4
4
  import {
5
5
  allocateTeamName,
6
6
  takenSlugsFromThread,
7
7
  teamSlugFromName
8
- } from "./chunk-KRAUS3RF.js";
8
+ } from "./chunk-L63LLCTX.js";
9
9
  import {
10
10
  resolveNewThreadOptions,
11
11
  resolveThreadDefaults
12
- } from "./chunk-I3FRXL7J.js";
12
+ } from "./chunk-XY6XXMAK.js";
13
13
  import {
14
14
  createEmptyThread,
15
15
  listThreads,
16
16
  updateThread,
17
17
  writeThread
18
- } from "./chunk-FWJYLBO6.js";
18
+ } from "./chunk-3WA37BRI.js";
19
19
  import {
20
20
  globalAgentCwd
21
- } from "./chunk-M37RITA6.js";
21
+ } from "./chunk-B4R2VB2A.js";
22
22
 
23
23
  // src/brightsy/cloud-connect-constants.ts
24
24
  var CLOUD_ORCHESTRATOR_GOAL = "Cloud-connected Sideboard orchestrator";
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-NSTQ6QKD.js";
6
6
  import {
7
7
  appDataDir
8
- } from "./chunk-7MV3RXSC.js";
8
+ } from "./chunk-JL4SJ6V7.js";
9
9
 
10
10
  // src/store/caffeinate-hold.ts
11
11
  import { spawn } from "child_process";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  resolveGithubRepoSlug
3
- } from "./chunk-KRAUS3RF.js";
3
+ } from "./chunk-L63LLCTX.js";
4
4
  import {
5
5
  resolveThreadDefaults
6
- } from "./chunk-I3FRXL7J.js";
6
+ } from "./chunk-XY6XXMAK.js";
7
7
  import {
8
8
  globalAgentCwd,
9
9
  sideboardReposDir
10
- } from "./chunk-M37RITA6.js";
10
+ } from "./chunk-B4R2VB2A.js";
11
11
 
12
12
  // src/orchestrator/coordinator-prompt.ts
13
13
  import { mkdirSync, readFileSync, writeFileSync } from "fs";
@@ -56,7 +56,7 @@ var COORDINATOR_TOOL_PLAYBOOK = [
56
56
  "Workspaces:",
57
57
  "- add_workspace / remove_workspace \u2014 register or unregister a git repo",
58
58
  "Worktree threads (chats):",
59
- "- create_thread \u2014 create a worktree + chat from branch | pr | ticket; pass repoPath + parentThreadId; omit agent and model to use Sideboard Account defaults (Settings \u2192 Default agent, model & effort). If you are Codex, do not set agent=codex (nested Codex deadlocks)",
59
+ "- create_thread \u2014 create a worktree + chat from branch | pr | ticket; pass repoPath + parentThreadId; omit agent and model to use Sideboard Account defaults (Settings \u2192 Default agent, model & effort). If the repo has a setup script, Sideboard runs it in the background (does not block send_to_thread). If you are Codex, do not set agent=codex (nested Codex deadlocks)",
60
60
  "- fork_worktree \u2014 fork a worktree chat into a NEW git worktree + chat (transcript attached); optional agent; leave model unset (Auto) unless you have a reason. Not for orchestration chats.",
61
61
  "- fork_chat \u2014 fork a worktree chat (same worktree tab) OR a Global orchestration chat (new orchestration tab); optional agent; leave model unset (Auto) unless you have a reason. Remote coordinators: use this to continue another orchestration chat on a different agent after session limits.",
62
62
  "- send_to_thread \u2014 queue a prompt (start/continue a chat turn); pass force_stop: true to interrupt mid-turn / clear stale queued prompts before replacing with a new request",
@@ -64,7 +64,7 @@ var COORDINATOR_TOOL_PLAYBOOK = [
64
64
  "- stop_thread \u2014 force-stop: kill in-flight turn AND clear queued prompts (do not leave stale queue after an interrupt)",
65
65
  "- archive_thread / restore_thread \u2014 archive (tears down worktree when last tab) or restore",
66
66
  "Setup / run:",
67
- "- run_setup \u2014 re-run worktree setup",
67
+ "- run_setup \u2014 re-run worktree setup (already runs automatically on create when a script exists)",
68
68
  "- list_run_scripts / run_dev_script / stop_dev_script \u2014 start/stop named run scripts",
69
69
  "Inspect / review / PRs:",
70
70
  "- get_diff \u2014 compact diff summary",