@sideboard-ai/core 0.1.228 → 0.1.229

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 (44) hide show
  1. package/dist/{abletime-D6773P33.js → abletime-BGVOCEOU.js} +4 -4
  2. package/dist/{abletime-BF253OZT.js → abletime-WZNDTRVL.js} +4 -4
  3. package/dist/{abletime-oauth-KQPVVBKA.js → abletime-oauth-6M5GWEPX.js} +3 -3
  4. package/dist/{abletime-oauth-H4672PRH.js → abletime-oauth-ZLU2EYRK.js} +3 -3
  5. package/dist/{abletime-rest-DAFPXZ7H.js → abletime-rest-F7XG5NGY.js} +3 -3
  6. package/dist/{abletime-rest-OPEVV3XC.js → abletime-rest-WNHIATB3.js} +3 -3
  7. package/dist/{agents-DV5UROWB.js → agents-B7G4BQTS.js} +4 -4
  8. package/dist/{agents-QQ77D7VT.js → agents-ZKP7QNXA.js} +4 -4
  9. package/dist/{app-settings-5RQMQKSB.js → app-settings-KBL2G7M4.js} +7 -1
  10. package/dist/{app-settings-V2BBCX2H.js → app-settings-UXWCPDEA.js} +7 -1
  11. package/dist/{chunk-WHYJL7CP.js → chunk-6HKGCUDN.js} +24 -22
  12. package/dist/{chunk-N2VST3NL.js → chunk-7YKXBFQE.js} +2 -2
  13. package/dist/{chunk-KTZESHYH.js → chunk-AMMRFFB7.js} +1 -1
  14. package/dist/{chunk-HSYE5ID6.js → chunk-AS4UN7QL.js} +5 -5
  15. package/dist/{chunk-3NWUHXU3.js → chunk-C774RJJA.js} +3 -3
  16. package/dist/{chunk-NFWPDEN4.js → chunk-F3GT6DQW.js} +1 -1
  17. package/dist/{chunk-CLI5DVU4.js → chunk-GHRZNPBK.js} +2 -2
  18. package/dist/{chunk-EWHJNJHV.js → chunk-I5NC7DWO.js} +38 -0
  19. package/dist/{chunk-VUW3VKLW.js → chunk-LULHFLPU.js} +17 -4
  20. package/dist/{chunk-646I442S.js → chunk-MVLXDYN5.js} +5 -5
  21. package/dist/{chunk-P2EAAM3H.js → chunk-N7UXGM3Y.js} +2 -2
  22. package/dist/{chunk-RRW2XWAY.js → chunk-P6ZM5QJW.js} +2 -2
  23. package/dist/{chunk-THLVCXLF.js → chunk-RGNPPRZZ.js} +3 -3
  24. package/dist/{chunk-Y5JES2VV.js → chunk-RZTRWN2V.js} +38 -0
  25. package/dist/{chunk-SOGGKYFV.js → chunk-SWNEA5OZ.js} +3 -3
  26. package/dist/{chunk-SQHRPJ7P.js → chunk-T7Y5ULHM.js} +14 -4
  27. package/dist/{chunk-72XUASTH.js → chunk-UHT6OS7V.js} +24 -23
  28. package/dist/{coordinator-prompt-JLMQVORO.js → coordinator-prompt-DZMMCDRW.js} +3 -3
  29. package/dist/{coordinator-prompt-VZ7OSRLD.js → coordinator-prompt-RL3GKIAQ.js} +3 -3
  30. package/dist/{global-workspace-QPSJEXGR.js → global-workspace-G3QEVRGZ.js} +3 -3
  31. package/dist/{global-workspace-3FDAUNN2.js → global-workspace-QW4OXCLJ.js} +3 -3
  32. package/dist/index.cjs +820 -619
  33. package/dist/index.d.cts +68 -2
  34. package/dist/index.d.ts +68 -2
  35. package/dist/index.js +202 -67
  36. package/dist/mcp/run-stdio.cjs +131 -44
  37. package/dist/mcp/run-stdio.js +86 -50
  38. package/dist/{orchestrator-6XEWQWSM.js → orchestrator-GKAHLGXT.js} +5 -5
  39. package/dist/{orchestrator-QUJORSTA.js → orchestrator-X4VFA5WW.js} +5 -5
  40. package/dist/{workspaces-76W7IEKR.js → workspaces-77C5XQEY.js} +3 -3
  41. package/dist/{workspaces-TDBA64II.js → workspaces-WXRPLT2N.js} +3 -3
  42. package/dist/{worktree-I573UOPD.js → worktree-L6FJXFUC.js} +2 -2
  43. package/dist/{worktree-7V67XTEO.js → worktree-P67WAJKH.js} +2 -2
  44. package/package.json +1 -1
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  isOrchestratorThread
3
- } from "./chunk-N2VST3NL.js";
3
+ } from "./chunk-7YKXBFQE.js";
4
4
  import {
5
5
  codexUnattendedGitConfigArgs,
6
6
  mergeAgentGitAuthEnv,
7
7
  resolveAgentGitAuthEnv,
8
8
  resolveCodexGitWritableRoots
9
- } from "./chunk-KTZESHYH.js";
9
+ } from "./chunk-AMMRFFB7.js";
10
10
  import {
11
11
  applyConnectedTeamToCli,
12
12
  brightsyMcpServerName,
@@ -42,7 +42,7 @@ import {
42
42
  loadAppSettings,
43
43
  resolveAgentExecutable,
44
44
  resolveClaudeExecutable
45
- } from "./chunk-EWHJNJHV.js";
45
+ } from "./chunk-I5NC7DWO.js";
46
46
  import {
47
47
  appDataDir
48
48
  } from "./chunk-WFUDY6PC.js";
@@ -562,6 +562,9 @@ var WORKTREE_MCP_TOOLS = [
562
562
  "present_files",
563
563
  "wait_for_job",
564
564
  "stop_job",
565
+ "list_run_scripts",
566
+ "run_dev_script",
567
+ "stop_dev_script",
565
568
  "get_viewer_context",
566
569
  "update_viewer_context"
567
570
  ];
@@ -608,6 +611,9 @@ var SIDEBOARD_ARTIFACT_MCP_ALLOWED_TOOLS = [
608
611
  "mcp__sideboard__present_plan",
609
612
  "mcp__sideboard__wait_for_job",
610
613
  "mcp__sideboard__stop_job",
614
+ "mcp__sideboard__list_run_scripts",
615
+ "mcp__sideboard__run_dev_script",
616
+ "mcp__sideboard__stop_dev_script",
611
617
  "mcp__sideboard__get_viewer_context",
612
618
  "mcp__sideboard__update_viewer_context"
613
619
  ];
@@ -1190,6 +1196,13 @@ function toolDescription(name, input) {
1190
1196
  if (/stop_job$/i.test(name)) {
1191
1197
  return str(input?.id) ? `Stop ${str(input?.id)}` : "Stop job";
1192
1198
  }
1199
+ if (/list_run_scripts$/i.test(name)) return "List run scripts";
1200
+ if (/run_dev_script$/i.test(name)) {
1201
+ return str(input?.name) ? `Start ${str(input?.name)}` : "Start Dev script";
1202
+ }
1203
+ if (/stop_dev_script$/i.test(name)) {
1204
+ return str(input?.name) ? `Stop ${str(input?.name)}` : "Stop Dev script";
1205
+ }
1193
1206
  if (isSubagentToolName(name)) {
1194
1207
  const desc = str(input?.description);
1195
1208
  const sub = asRecord(input?.subagentType);
@@ -2104,7 +2117,7 @@ var claudeAdapter = {
2104
2117
  );
2105
2118
  }
2106
2119
  const mode = permissionMode(thread);
2107
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-3FDAUNN2.js");
2120
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-QW4OXCLJ.js");
2108
2121
  const isOrchestrator = isOrchestratorThread2(thread);
2109
2122
  const injectedServers = await buildInjectedMcpServers({
2110
2123
  includeSideboard: true,
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  getAbleTimeHost,
6
6
  isAbleTimeConnected
7
- } from "./chunk-EWHJNJHV.js";
7
+ } from "./chunk-I5NC7DWO.js";
8
8
 
9
9
  // src/integrations/abletime-mcp.ts
10
10
  var DEFAULT_ABLETIME_HOST = "https://track.abletime.com";
@@ -153,7 +153,7 @@ function textsFromUnknown(value) {
153
153
  return "";
154
154
  }
155
155
  async function abletimeMcpRequest(method, params, opts) {
156
- const rawToken = opts?.token ?? await import("./abletime-oauth-KQPVVBKA.js").then((m) => m.ensureAbleTimeAccessToken());
156
+ const rawToken = opts?.token ?? await import("./abletime-oauth-6M5GWEPX.js").then((m) => m.ensureAbleTimeAccessToken());
157
157
  if (!rawToken?.trim()) {
158
158
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
159
159
  }
@@ -224,9 +224,9 @@ async function callAbleTimeTool(name, args = {}, opts) {
224
224
  if (!opts?.token && !isAbleTimeConnected()) {
225
225
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
226
226
  }
227
- const rawToken = opts?.token ?? await import("./abletime-oauth-KQPVVBKA.js").then((m) => m.ensureAbleTimeAccessToken());
227
+ const rawToken = opts?.token ?? await import("./abletime-oauth-6M5GWEPX.js").then((m) => m.ensureAbleTimeAccessToken());
228
228
  if (rawToken && ableTimeUsesRest(rawToken)) {
229
- const { callAbleTimeRestTool } = await import("./abletime-rest-DAFPXZ7H.js");
229
+ const { callAbleTimeRestTool } = await import("./abletime-rest-F7XG5NGY.js");
230
230
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
231
231
  }
232
232
  const requestOpts = { ...opts, pm: opts?.pm ?? abletimeToolUsesPm(name) };
@@ -242,7 +242,7 @@ async function callAbleTimeTool(name, args = {}, opts) {
242
242
  return await call();
243
243
  }
244
244
  if (rawToken && ableTimeUsesRest(rawToken) && isAbleTimeRejectedCredential(message)) {
245
- const { callAbleTimeRestTool } = await import("./abletime-rest-DAFPXZ7H.js");
245
+ const { callAbleTimeRestTool } = await import("./abletime-rest-F7XG5NGY.js");
246
246
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
247
247
  }
248
248
  throw err instanceof Error ? new Error(rewriteAbleTimeError(err.message)) : err;
@@ -8,7 +8,7 @@ import {
8
8
  resolveRepoRoot,
9
9
  takenSlugsFromThread,
10
10
  teamSlugFromName
11
- } from "./chunk-NFWPDEN4.js";
11
+ } from "./chunk-F3GT6DQW.js";
12
12
  import {
13
13
  ATTACHMENTS_DIR,
14
14
  attachmentsGitignoreBody
@@ -31,7 +31,7 @@ import {
31
31
  resolveThreadDefaults,
32
32
  resolveViewerProfile,
33
33
  resolveViewerProfileForRepo
34
- } from "./chunk-Y5JES2VV.js";
34
+ } from "./chunk-RZTRWN2V.js";
35
35
  import {
36
36
  appDataDir,
37
37
  globalAgentCwd,
@@ -4,14 +4,14 @@ import {
4
4
  normalizeAbleTimeCredential,
5
5
  normalizeAbleTimeHost,
6
6
  rewriteAbleTimeError
7
- } from "./chunk-646I442S.js";
7
+ } from "./chunk-MVLXDYN5.js";
8
8
  import {
9
9
  httpFetch
10
10
  } from "./chunk-N7WZ6NIN.js";
11
11
  import {
12
12
  getAbleTimeAccessToken,
13
13
  getAbleTimeHost
14
- } from "./chunk-EWHJNJHV.js";
14
+ } from "./chunk-I5NC7DWO.js";
15
15
 
16
16
  // src/integrations/abletime-rest.ts
17
17
  var ABLETIME_REST_PREFIX = "/api/public/v2";
@@ -2,17 +2,17 @@
2
2
 
3
3
  import {
4
4
  textFromAbleTimeDoc
5
- } from "./chunk-CLI5DVU4.js";
5
+ } from "./chunk-GHRZNPBK.js";
6
6
  import {
7
7
  assertAbleTimeCredential,
8
8
  callAbleTimeTool,
9
9
  normalizeAbleTimeHost,
10
10
  rewriteAbleTimeError
11
- } from "./chunk-HSYE5ID6.js";
11
+ } from "./chunk-AS4UN7QL.js";
12
12
  import {
13
13
  isAbleTimeConnected,
14
14
  saveAbleTimeConnection
15
- } from "./chunk-Y5JES2VV.js";
15
+ } from "./chunk-RZTRWN2V.js";
16
16
 
17
17
  // src/integrations/abletime.ts
18
18
  var CLOSED_STATES = /* @__PURE__ */ new Set([
@@ -550,6 +550,21 @@ var DEFAULT_AGENTS = /* @__PURE__ */ new Set([
550
550
  ]);
551
551
  var GITHUB_GIT_AUTH_MODES = ["auto", "gh", "ssh", "token"];
552
552
  var FOLLOW_UP_BEHAVIORS = ["steer", "queue"];
553
+ var AGENT_DONE_SOUNDS = [
554
+ "none",
555
+ "goal",
556
+ "bell",
557
+ "level",
558
+ "coin",
559
+ "fanfare",
560
+ "magic",
561
+ "rooster",
562
+ "whistle",
563
+ "custom"
564
+ ];
565
+ function isAgentDoneSound(value) {
566
+ return AGENT_DONE_SOUNDS.includes(value);
567
+ }
553
568
  function emptyPublicIntegrations() {
554
569
  return {
555
570
  hasLinearApiKey: false,
@@ -988,6 +1003,13 @@ function normalizeAdvanced(raw) {
988
1003
  if (source.followUpBehavior === "queue" || source.followUpBehavior === "steer") {
989
1004
  out.followUpBehavior = source.followUpBehavior;
990
1005
  }
1006
+ if (isAgentDoneSound(source.agentDoneSound)) {
1007
+ out.agentDoneSound = source.agentDoneSound;
1008
+ }
1009
+ if (typeof source.agentDoneCustomSoundName === "string") {
1010
+ const name = source.agentDoneCustomSoundName.trim();
1011
+ if (name) out.agentDoneCustomSoundName = name.slice(0, 200);
1012
+ }
991
1013
  return out;
992
1014
  }
993
1015
  function normalizeSettings(raw) {
@@ -1911,6 +1933,16 @@ function updateAdvancedSettings(patch) {
1911
1933
  if (patch.followUpBehavior === "queue" || patch.followUpBehavior === "steer") {
1912
1934
  advanced.followUpBehavior = patch.followUpBehavior;
1913
1935
  }
1936
+ if (isAgentDoneSound(patch.agentDoneSound)) {
1937
+ advanced.agentDoneSound = patch.agentDoneSound;
1938
+ }
1939
+ if (patch.agentDoneCustomSoundName === null || patch.agentDoneCustomSoundName === "") {
1940
+ delete advanced.agentDoneCustomSoundName;
1941
+ } else if (typeof patch.agentDoneCustomSoundName === "string") {
1942
+ const name = patch.agentDoneCustomSoundName.trim();
1943
+ if (name) advanced.agentDoneCustomSoundName = name.slice(0, 200);
1944
+ else delete advanced.agentDoneCustomSoundName;
1945
+ }
1914
1946
  return saveAppSettings({ ...current, advanced });
1915
1947
  }
1916
1948
  function autoRenameBranchEnabled(settings = loadAppSettings()) {
@@ -1978,6 +2010,9 @@ function orchestrationQuotaFallbackAgent(settings = loadAppSettings()) {
1978
2010
  function followUpBehavior(settings = loadAppSettings()) {
1979
2011
  return settings.advanced.followUpBehavior === "queue" ? "queue" : "steer";
1980
2012
  }
2013
+ function agentDoneSound(settings = loadAppSettings()) {
2014
+ return isAgentDoneSound(settings.advanced.agentDoneSound) ? settings.advanced.agentDoneSound : "none";
2015
+ }
1981
2016
  function maxConcurrentAgents(settings = loadAppSettings()) {
1982
2017
  const n = settings.advanced.maxConcurrent;
1983
2018
  if (typeof n === "number" && Number.isFinite(n)) {
@@ -2106,6 +2141,8 @@ export {
2106
2141
  HARNESS_ENV_KEYS,
2107
2142
  GITHUB_GIT_AUTH_MODES,
2108
2143
  FOLLOW_UP_BEHAVIORS,
2144
+ AGENT_DONE_SOUNDS,
2145
+ isAgentDoneSound,
2109
2146
  emptyPublicIntegrations,
2110
2147
  toPublicAppSettings,
2111
2148
  appSettingsPath,
@@ -2174,6 +2211,7 @@ export {
2174
2211
  orchestrationQuotaOnLimit,
2175
2212
  orchestrationQuotaFallbackAgent,
2176
2213
  followUpBehavior,
2214
+ agentDoneSound,
2177
2215
  maxConcurrentAgents,
2178
2216
  resolveClaudeExecutable,
2179
2217
  resolveAgentExecutable,
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  textFromAbleTimeDoc
3
- } from "./chunk-RRW2XWAY.js";
3
+ } from "./chunk-P6ZM5QJW.js";
4
4
  import {
5
5
  assertAbleTimeCredential,
6
6
  callAbleTimeTool,
7
7
  normalizeAbleTimeHost,
8
8
  rewriteAbleTimeError
9
- } from "./chunk-646I442S.js";
9
+ } from "./chunk-MVLXDYN5.js";
10
10
  import {
11
11
  isAbleTimeConnected,
12
12
  saveAbleTimeConnection
13
- } from "./chunk-EWHJNJHV.js";
13
+ } from "./chunk-I5NC7DWO.js";
14
14
 
15
15
  // src/integrations/abletime.ts
16
16
  var CLOSED_STATES = /* @__PURE__ */ new Set([
@@ -2,7 +2,7 @@
2
2
 
3
3
  import {
4
4
  isOrchestratorThread
5
- } from "./chunk-P2EAAM3H.js";
5
+ } from "./chunk-N7UXGM3Y.js";
6
6
  import {
7
7
  applyConnectedTeamToCli,
8
8
  brightsyMcpServerName,
@@ -20,7 +20,7 @@ import {
20
20
  mergeAgentGitAuthEnv,
21
21
  resolveAgentGitAuthEnv,
22
22
  resolveCodexGitWritableRoots
23
- } from "./chunk-NFWPDEN4.js";
23
+ } from "./chunk-F3GT6DQW.js";
24
24
  import {
25
25
  enrichPathWithNpmGlobalBin,
26
26
  isConductorBundledCli,
@@ -36,7 +36,7 @@ import {
36
36
  loadAppSettings,
37
37
  resolveAgentExecutable,
38
38
  resolveClaudeExecutable
39
- } from "./chunk-Y5JES2VV.js";
39
+ } from "./chunk-RZTRWN2V.js";
40
40
  import {
41
41
  appDataDir
42
42
  } from "./chunk-EQNRWDLN.js";
@@ -1232,6 +1232,9 @@ var SIDEBOARD_ARTIFACT_MCP_ALLOWED_TOOLS = [
1232
1232
  "mcp__sideboard__present_plan",
1233
1233
  "mcp__sideboard__wait_for_job",
1234
1234
  "mcp__sideboard__stop_job",
1235
+ "mcp__sideboard__list_run_scripts",
1236
+ "mcp__sideboard__run_dev_script",
1237
+ "mcp__sideboard__stop_dev_script",
1235
1238
  "mcp__sideboard__get_viewer_context",
1236
1239
  "mcp__sideboard__update_viewer_context"
1237
1240
  ];
@@ -1707,6 +1710,13 @@ function toolDescription(name, input) {
1707
1710
  if (/stop_job$/i.test(name)) {
1708
1711
  return str(input?.id) ? `Stop ${str(input?.id)}` : "Stop job";
1709
1712
  }
1713
+ if (/list_run_scripts$/i.test(name)) return "List run scripts";
1714
+ if (/run_dev_script$/i.test(name)) {
1715
+ return str(input?.name) ? `Start ${str(input?.name)}` : "Start Dev script";
1716
+ }
1717
+ if (/stop_dev_script$/i.test(name)) {
1718
+ return str(input?.name) ? `Stop ${str(input?.name)}` : "Stop Dev script";
1719
+ }
1710
1720
  if (isSubagentToolName(name)) {
1711
1721
  const desc = str(input?.description);
1712
1722
  const sub = asRecord(input?.subagentType);
@@ -2538,7 +2548,7 @@ var claudeAdapter = {
2538
2548
  );
2539
2549
  }
2540
2550
  const mode = permissionMode(thread);
2541
- const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-QPSJEXGR.js");
2551
+ const { isOrchestratorThread: isOrchestratorThread2 } = await import("./global-workspace-G3QEVRGZ.js");
2542
2552
  const isOrchestrator = isOrchestratorThread2(thread);
2543
2553
  const injectedServers = await buildInjectedMcpServers({
2544
2554
  includeSideboard: true,
@@ -24,7 +24,7 @@ import {
24
24
  resolveQuotaFallbackAgent,
25
25
  stripBrightsyNdjsonNoise,
26
26
  toolDescription
27
- } from "./chunk-VUW3VKLW.js";
27
+ } from "./chunk-LULHFLPU.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-N2VST3NL.js";
50
+ } from "./chunk-7YKXBFQE.js";
51
51
  import {
52
52
  addPrStackLayer,
53
53
  allocateTeamName,
@@ -96,7 +96,7 @@ import {
96
96
  worktreeDisplayLabelForGroup,
97
97
  worktreeNameFromPath,
98
98
  worktreeSlugForTicket
99
- } from "./chunk-KTZESHYH.js";
99
+ } from "./chunk-AMMRFFB7.js";
100
100
  import {
101
101
  ATTACHMENTS_DIR,
102
102
  DETACHED_JOBS_DIR,
@@ -163,7 +163,7 @@ import {
163
163
  updateAdvancedSettings,
164
164
  usageOnLimit,
165
165
  writeSecureJson
166
- } from "./chunk-EWHJNJHV.js";
166
+ } from "./chunk-I5NC7DWO.js";
167
167
  import {
168
168
  examplePrefixedBranch,
169
169
  sanitizeGitBranchPrefix
@@ -482,7 +482,7 @@ async function continueSourceThread(threadId, prompt) {
482
482
  await continueOnReply(threadId, prompt);
483
483
  return;
484
484
  }
485
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-QUJORSTA.js");
485
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-X4VFA5WW.js");
486
486
  await getOrchestrator2().send(threadId, prompt);
487
487
  } catch {
488
488
  }
@@ -900,9 +900,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
900
900
  `Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
901
901
  );
902
902
  }
903
- const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-3FDAUNN2.js");
903
+ const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-QW4OXCLJ.js");
904
904
  if (isGlobalThread2(thread)) {
905
- const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-JLMQVORO.js");
905
+ const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-DZMMCDRW.js");
906
906
  ensureGlobalCoordinatorCwd2(
907
907
  isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
908
908
  );
@@ -4086,7 +4086,7 @@ async function createThread(input, _onSetupLine) {
4086
4086
  });
4087
4087
  await requireAgent(resolved.agent);
4088
4088
  if (input.cowboy) {
4089
- const { cowboyModeEnabled } = await import("./app-settings-V2BBCX2H.js");
4089
+ const { cowboyModeEnabled } = await import("./app-settings-UXWCPDEA.js");
4090
4090
  if (!cowboyModeEnabled()) {
4091
4091
  throw new Error(
4092
4092
  "Cowboy mode is off. Enable it in Settings \u2192 Advanced."
@@ -4144,7 +4144,7 @@ async function createThread(input, _onSetupLine) {
4144
4144
  let sourceIsFork = false;
4145
4145
  if (!input.cowboy && sourceType === "branch" && (!sourceRef || sourceRef === "HEAD" || sourceRef === "default")) {
4146
4146
  if (isAbleTimeConnected() && getIssueSource() === "abletime") {
4147
- const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-D6773P33.js");
4147
+ const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-BGVOCEOU.js");
4148
4148
  const task = await ensureAbleTimeTask({
4149
4149
  title: title?.trim() || "Untitled work",
4150
4150
  description: input.prompt?.trim() || void 0
@@ -4246,7 +4246,7 @@ async function createThread(input, _onSetupLine) {
4246
4246
  return readThread(thread.id) ?? thread;
4247
4247
  }
4248
4248
  async function listLinearIssues(agent, repoPath) {
4249
- const { getAdapter: getAdapter2 } = await import("./agents-QQ77D7VT.js");
4249
+ const { getAdapter: getAdapter2 } = await import("./agents-ZKP7QNXA.js");
4250
4250
  await requireAgent(agent, { requireLinear: true });
4251
4251
  const adapter = getAdapter2(agent);
4252
4252
  if (!adapter.listLinearIssues) {
@@ -4719,7 +4719,7 @@ async function adoptThread(input) {
4719
4719
  messages: input.messages ?? []
4720
4720
  });
4721
4721
  writeThread(thread);
4722
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-76W7IEKR.js");
4722
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-77C5XQEY.js");
4723
4723
  await ensureWorkspace2(repoPath);
4724
4724
  const { ensureWorktreeSideboardIgnored: ensureWorktreeSideboardIgnored2 } = await import("./worktree-exclude-L32WEBX6.js");
4725
4725
  await ensureWorktreeSideboardIgnored2(input.worktreePath);
@@ -6812,12 +6812,13 @@ function formatLongRunningDirective(opts) {
6812
6812
  "- Loop Sideboard MCP `wait_for_job` (returns in ~45s). The desktop opens a `type=log` pane from wait/stop (and shell detached-job JSON) automatically \u2014 you may still `present_artifact` with `artifact_id=<id>` for a custom title. stillRunning \u2192 wait again. Shell fallback: the same helper with `wait <id>`.",
6813
6813
  "- Hanging, no useful output, or the wrong thing \u2192 `stop_job` (or the helper with `stop <id>`). Do not stop a pack/test/deploy that is clearly making progress.",
6814
6814
  "- Stay in the loop until stillRunning is false (or you stopped it). ok \u2192 finish the task. failed / stopped \u2192 read the log, fix or narrow the command, start once.",
6815
- "State: `.context/.sideboard/detached-jobs/<id>/` (local scratch). Full guide: `/long-running` (always available)."
6815
+ "State: `.context/.sideboard/detached-jobs/<id>/` (local scratch). Full guide: `/long-running` (always available).",
6816
+ "Project Dev / run scripts (`.sideboard` `[scripts.run.*]`, same as the desktop Dev button): use MCP `list_run_scripts` / `run_dev_script` / `stop_dev_script` \u2014 logs and Stop live in the thread UI. Do not detached-job or shell-spawn that same command."
6816
6817
  ].join("\n");
6817
6818
  }
6818
6819
  function formatLongRunningReminder(opts) {
6819
6820
  const invoke = formatDetachedJobInvoke(opts?.scriptPath);
6820
- return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn.`;
6821
+ return `Long jobs: \`${invoke} start <id> -- <cmd>\`, loop wait_for_job (or detached-job wait). The log pane updates from wait JSON; present_artifact type=log is optional. stop_job if hanging or wrong. Do not say you will let the user know later \u2014 stay in the turn. Project Dev button: list_run_scripts / run_dev_script / stop_dev_script (UI-connected \u2014 not detached-job).`;
6821
6822
  }
6822
6823
  function formatArtifactDirective() {
6823
6824
  return [
@@ -6829,7 +6830,7 @@ function formatArtifactDirective() {
6829
6830
  ].join("\n");
6830
6831
  }
6831
6832
  function formatUiReminder() {
6832
- return "Sideboard UI: markdown table is enough to read data; present_schema if they ask to edit/filter (even after markdown); present_files for the file manager. html fence or present_artifact, not both for the same document. type=log appends (same artifact_id, new lines only). ask_user only for a real multiple-choice (not hellos, \u201Cwhat next?\u201D, or after a review) \u2014 reply in chat. Do not say artifacts/CMS UI are unavailable.";
6833
+ return "Sideboard UI: markdown table is enough to read data; present_schema if they ask to edit/filter (even after markdown); present_files for the file manager. html fence or present_artifact, not both for the same document. type=log appends (same artifact_id, new lines only). ask_user only for a real multiple-choice (not hellos, \u201Cwhat next?\u201D, or after a review) \u2014 reply in chat. Do not say artifacts/CMS UI are unavailable. Dev / preview: run_dev_script (same as the Dev button); stop_dev_script to stop.";
6833
6834
  }
6834
6835
 
6835
6836
  // src/review/review-write-gate.ts
@@ -7400,7 +7401,7 @@ function formatScheduledPrompt(name, prompt) {
7400
7401
  ${prompt}`;
7401
7402
  }
7402
7403
  async function defaultDeps() {
7403
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-QUJORSTA.js");
7404
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-X4VFA5WW.js");
7404
7405
  const orch = getOrchestrator2();
7405
7406
  return {
7406
7407
  findThread: (id) => findThreadByRef(id),
@@ -7717,7 +7718,7 @@ var Orchestrator = class {
7717
7718
  orphans: orphans.map((o) => ({ path: o.path, repoPath: o.repoPath }))
7718
7719
  });
7719
7720
  }
7720
- const { autoCleanupOrphansEnabled } = await import("./app-settings-V2BBCX2H.js");
7721
+ const { autoCleanupOrphansEnabled } = await import("./app-settings-UXWCPDEA.js");
7721
7722
  if (autoCleanupOrphansEnabled() && shouldRunWorktreeCleanup() && orphans.length > 0) {
7722
7723
  await cleanupOrphanWorktrees({ repoPaths });
7723
7724
  }
@@ -8004,7 +8005,7 @@ var Orchestrator = class {
8004
8005
  }
8005
8006
  await setup;
8006
8007
  if (skipSetup) return;
8007
- const { autoRunAfterSetupEnabled } = await import("./app-settings-V2BBCX2H.js");
8008
+ const { autoRunAfterSetupEnabled } = await import("./app-settings-UXWCPDEA.js");
8008
8009
  if (autoRunAfterSetupEnabled()) {
8009
8010
  try {
8010
8011
  await this.startDev(threadId);
@@ -8360,7 +8361,7 @@ var Orchestrator = class {
8360
8361
  }
8361
8362
  const isBrightsy = fresh.agent === "brightsy";
8362
8363
  const isOrchestration = isOrchestratorThread(fresh);
8363
- const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-V2BBCX2H.js");
8364
+ const { autoRenameBranchEnabled, getGithubGitAuthMode, gitBranchPrefixSetting } = await import("./app-settings-UXWCPDEA.js");
8364
8365
  const gitAuthMode = getGithubGitAuthMode();
8365
8366
  const worktreeDirective = isBrightsy || isOrchestration ? null : formatWorktreeDirective(fresh, {
8366
8367
  githubSlug: await withTimeout(
@@ -9504,7 +9505,7 @@ var Orchestrator = class {
9504
9505
  if (!titled.userSetTitle && meta.title && titled.title !== meta.title) {
9505
9506
  updateThread(thread.id, { title: meta.title });
9506
9507
  }
9507
- const { autoArchiveOnMergeEnabled } = await import("./app-settings-V2BBCX2H.js");
9508
+ const { autoArchiveOnMergeEnabled } = await import("./app-settings-UXWCPDEA.js");
9508
9509
  const latest = this.requireThread(thread.id);
9509
9510
  if (!shouldAutoArchiveOnPrMerge({
9510
9511
  previousPrState: prevState || null,
@@ -9786,7 +9787,7 @@ var Orchestrator = class {
9786
9787
  this.enforceHistoryRetention();
9787
9788
  if (thread.repoPath && !isGlobalRepoPath(thread.repoPath)) {
9788
9789
  try {
9789
- const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-76W7IEKR.js");
9790
+ const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-77C5XQEY.js");
9790
9791
  await ensureWorkspace2(thread.repoPath);
9791
9792
  } catch {
9792
9793
  }
@@ -9813,7 +9814,7 @@ var Orchestrator = class {
9813
9814
  await runArchiveScript(thread.repoPath, thread.worktreePath);
9814
9815
  } catch {
9815
9816
  }
9816
- const { deleteBranchOnPurgeEnabled } = await import("./app-settings-V2BBCX2H.js");
9817
+ const { deleteBranchOnPurgeEnabled } = await import("./app-settings-UXWCPDEA.js");
9817
9818
  const deleteBranch = opts?.deleteBranch ?? deleteBranchOnPurgeEnabled();
9818
9819
  await removeWorktree(thread.repoPath, thread.worktreePath, {
9819
9820
  deleteBranch: deleteBranch ? thread.branchName : void 0
@@ -9840,7 +9841,7 @@ var Orchestrator = class {
9840
9841
  `Cowboy checkout missing: ${thread.worktreePath}. Re-add the project folder, then restore.`
9841
9842
  );
9842
9843
  }
9843
- const { createThreadWorktree: createThreadWorktree2 } = await import("./worktree-7V67XTEO.js");
9844
+ const { createThreadWorktree: createThreadWorktree2 } = await import("./worktree-P67WAJKH.js");
9844
9845
  const slug = thread.worktreePath.split("/").pop();
9845
9846
  const dest = thread.worktreePath;
9846
9847
  await withRepoGitLock(thread.repoPath, async () => {
@@ -9950,7 +9951,7 @@ async function startOrchestration(opts) {
9950
9951
  sourceRef: "default",
9951
9952
  ...createOpts
9952
9953
  }).catch(async () => {
9953
- const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-7V67XTEO.js");
9954
+ const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-P67WAJKH.js");
9954
9955
  const repo = await resolveRepoRoot2(repoPath);
9955
9956
  const def = await resolveDefaultBranch2(repo);
9956
9957
  return orch.createThread({
@@ -7,11 +7,11 @@ import {
7
7
  enrichWorkspacesWithGithub,
8
8
  ensureGlobalCoordinatorCwd,
9
9
  formatWorkspaceInventory
10
- } from "./chunk-N2VST3NL.js";
11
- import "./chunk-KTZESHYH.js";
10
+ } from "./chunk-7YKXBFQE.js";
11
+ import "./chunk-AMMRFFB7.js";
12
12
  import "./chunk-6K64FJDD.js";
13
13
  import "./chunk-PO4M4JAJ.js";
14
- import "./chunk-EWHJNJHV.js";
14
+ import "./chunk-I5NC7DWO.js";
15
15
  import "./chunk-WDRMZKVB.js";
16
16
  import "./chunk-JT7R45JB.js";
17
17
  import "./chunk-3IMSQNTS.js";
@@ -9,14 +9,14 @@ import {
9
9
  enrichWorkspacesWithGithub,
10
10
  ensureGlobalCoordinatorCwd,
11
11
  formatWorkspaceInventory
12
- } from "./chunk-P2EAAM3H.js";
13
- import "./chunk-NFWPDEN4.js";
12
+ } from "./chunk-N7UXGM3Y.js";
13
+ import "./chunk-F3GT6DQW.js";
14
14
  import "./chunk-D6JWYJ4P.js";
15
15
  import "./chunk-HY2GFZ5S.js";
16
16
  import "./chunk-X5B3OS5I.js";
17
17
  import "./chunk-SZJZEFTY.js";
18
18
  import "./chunk-ABOBTSO6.js";
19
- import "./chunk-Y5JES2VV.js";
19
+ import "./chunk-RZTRWN2V.js";
20
20
  import "./chunk-NSTQ6QKD.js";
21
21
  import "./chunk-KGZBYWZ3.js";
22
22
  import "./chunk-EQNRWDLN.js";
@@ -17,14 +17,14 @@ import {
17
17
  orchestratorSessionPoisonedByBuiltins,
18
18
  slackCoordinatorSourceRef,
19
19
  takenTeamSlugsForOrchestration
20
- } from "./chunk-P2EAAM3H.js";
21
- import "./chunk-NFWPDEN4.js";
20
+ } from "./chunk-N7UXGM3Y.js";
21
+ import "./chunk-F3GT6DQW.js";
22
22
  import "./chunk-D6JWYJ4P.js";
23
23
  import "./chunk-HY2GFZ5S.js";
24
24
  import "./chunk-X5B3OS5I.js";
25
25
  import "./chunk-SZJZEFTY.js";
26
26
  import "./chunk-ABOBTSO6.js";
27
- import "./chunk-Y5JES2VV.js";
27
+ import "./chunk-RZTRWN2V.js";
28
28
  import "./chunk-NSTQ6QKD.js";
29
29
  import "./chunk-KGZBYWZ3.js";
30
30
  import {
@@ -15,11 +15,11 @@ import {
15
15
  orchestratorSessionPoisonedByBuiltins,
16
16
  slackCoordinatorSourceRef,
17
17
  takenTeamSlugsForOrchestration
18
- } from "./chunk-N2VST3NL.js";
19
- import "./chunk-KTZESHYH.js";
18
+ } from "./chunk-7YKXBFQE.js";
19
+ import "./chunk-AMMRFFB7.js";
20
20
  import "./chunk-6K64FJDD.js";
21
21
  import "./chunk-PO4M4JAJ.js";
22
- import "./chunk-EWHJNJHV.js";
22
+ import "./chunk-I5NC7DWO.js";
23
23
  import "./chunk-WDRMZKVB.js";
24
24
  import "./chunk-JT7R45JB.js";
25
25
  import "./chunk-3IMSQNTS.js";