@sideboard-ai/core 0.1.227 → 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-FUDJ6NFM.js → chunk-6HKGCUDN.js} +117 -62
  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-I2HOATRJ.js → chunk-UHT6OS7V.js} +129 -62
  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 +927 -658
  33. package/dist/index.d.cts +89 -3
  34. package/dist/index.d.ts +89 -3
  35. package/dist/index.js +206 -67
  36. package/dist/mcp/run-stdio.cjs +224 -84
  37. package/dist/mcp/run-stdio.js +86 -50
  38. package/dist/{orchestrator-CWOSAYAE.js → orchestrator-GKAHLGXT.js} +5 -5
  39. package/dist/{orchestrator-VKPHI64Q.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
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  getGithubGitAuthMode,
9
9
  getGithubPat
10
- } from "./chunk-EWHJNJHV.js";
10
+ } from "./chunk-I5NC7DWO.js";
11
11
  import {
12
12
  listThreads
13
13
  } from "./chunk-3IMSQNTS.js";
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  getAbleTimeHost,
8
8
  isAbleTimeConnected
9
- } from "./chunk-Y5JES2VV.js";
9
+ } from "./chunk-RZTRWN2V.js";
10
10
 
11
11
  // src/integrations/abletime-mcp.ts
12
12
  var DEFAULT_ABLETIME_HOST = "https://track.abletime.com";
@@ -155,7 +155,7 @@ function textsFromUnknown(value) {
155
155
  return "";
156
156
  }
157
157
  async function abletimeMcpRequest(method, params, opts) {
158
- const rawToken = opts?.token ?? await import("./abletime-oauth-H4672PRH.js").then((m) => m.ensureAbleTimeAccessToken());
158
+ const rawToken = opts?.token ?? await import("./abletime-oauth-ZLU2EYRK.js").then((m) => m.ensureAbleTimeAccessToken());
159
159
  if (!rawToken?.trim()) {
160
160
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
161
161
  }
@@ -226,9 +226,9 @@ async function callAbleTimeTool(name, args = {}, opts) {
226
226
  if (!opts?.token && !isAbleTimeConnected()) {
227
227
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
228
228
  }
229
- const rawToken = opts?.token ?? await import("./abletime-oauth-H4672PRH.js").then((m) => m.ensureAbleTimeAccessToken());
229
+ const rawToken = opts?.token ?? await import("./abletime-oauth-ZLU2EYRK.js").then((m) => m.ensureAbleTimeAccessToken());
230
230
  if (rawToken && ableTimeUsesRest(rawToken)) {
231
- const { callAbleTimeRestTool } = await import("./abletime-rest-OPEVV3XC.js");
231
+ const { callAbleTimeRestTool } = await import("./abletime-rest-WNHIATB3.js");
232
232
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
233
233
  }
234
234
  const requestOpts = { ...opts, pm: opts?.pm ?? abletimeToolUsesPm(name) };
@@ -244,7 +244,7 @@ async function callAbleTimeTool(name, args = {}, opts) {
244
244
  return await call();
245
245
  }
246
246
  if (rawToken && ableTimeUsesRest(rawToken) && isAbleTimeRejectedCredential(message)) {
247
- const { callAbleTimeRestTool } = await import("./abletime-rest-OPEVV3XC.js");
247
+ const { callAbleTimeRestTool } = await import("./abletime-rest-WNHIATB3.js");
248
248
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
249
249
  }
250
250
  throw err instanceof Error ? new Error(rewriteAbleTimeError(err.message)) : err;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  DEFAULT_ABLETIME_HOST,
3
3
  normalizeAbleTimeHost
4
- } from "./chunk-646I442S.js";
4
+ } from "./chunk-MVLXDYN5.js";
5
5
  import {
6
6
  httpFetch
7
7
  } from "./chunk-N7WZ6NIN.js";
@@ -10,7 +10,7 @@ import {
10
10
  getAbleTimeHost,
11
11
  loadAppSettings,
12
12
  saveAbleTimeConnection
13
- } from "./chunk-EWHJNJHV.js";
13
+ } from "./chunk-I5NC7DWO.js";
14
14
 
15
15
  // src/integrations/abletime-oauth.ts
16
16
  import { createHash, randomBytes } from "crypto";
@@ -280,7 +280,7 @@ async function startAbleTimeOAuth(opts) {
280
280
  persistAbleTimeTokens(data, { host });
281
281
  const token = data.access_token.trim();
282
282
  try {
283
- const { getAbleTimeOrientation } = await import("./abletime-D6773P33.js");
283
+ const { getAbleTimeOrientation } = await import("./abletime-BGVOCEOU.js");
284
284
  const orientation = await getAbleTimeOrientation({ token, host });
285
285
  return saveAbleTimeConnection({
286
286
  accessToken: token,
@@ -22,7 +22,7 @@ import {
22
22
  import {
23
23
  getGithubGitAuthMode,
24
24
  getGithubPat
25
- } from "./chunk-Y5JES2VV.js";
25
+ } from "./chunk-RZTRWN2V.js";
26
26
  import {
27
27
  worktreesRoot
28
28
  } from "./chunk-EQNRWDLN.js";
@@ -6,14 +6,14 @@ import {
6
6
  normalizeAbleTimeCredential,
7
7
  normalizeAbleTimeHost,
8
8
  rewriteAbleTimeError
9
- } from "./chunk-HSYE5ID6.js";
9
+ } from "./chunk-AS4UN7QL.js";
10
10
  import {
11
11
  httpFetch
12
12
  } from "./chunk-VKQGAWHY.js";
13
13
  import {
14
14
  getAbleTimeAccessToken,
15
15
  getAbleTimeHost
16
- } from "./chunk-Y5JES2VV.js";
16
+ } from "./chunk-RZTRWN2V.js";
17
17
 
18
18
  // src/integrations/abletime-rest.ts
19
19
  var ABLETIME_REST_PREFIX = "/api/public/v2";
@@ -568,6 +568,21 @@ var DEFAULT_AGENTS = /* @__PURE__ */ new Set([
568
568
  ]);
569
569
  var GITHUB_GIT_AUTH_MODES = ["auto", "gh", "ssh", "token"];
570
570
  var FOLLOW_UP_BEHAVIORS = ["steer", "queue"];
571
+ var AGENT_DONE_SOUNDS = [
572
+ "none",
573
+ "goal",
574
+ "bell",
575
+ "level",
576
+ "coin",
577
+ "fanfare",
578
+ "magic",
579
+ "rooster",
580
+ "whistle",
581
+ "custom"
582
+ ];
583
+ function isAgentDoneSound(value) {
584
+ return AGENT_DONE_SOUNDS.includes(value);
585
+ }
571
586
  function emptyPublicIntegrations() {
572
587
  return {
573
588
  hasLinearApiKey: false,
@@ -1006,6 +1021,13 @@ function normalizeAdvanced(raw) {
1006
1021
  if (source.followUpBehavior === "queue" || source.followUpBehavior === "steer") {
1007
1022
  out.followUpBehavior = source.followUpBehavior;
1008
1023
  }
1024
+ if (isAgentDoneSound(source.agentDoneSound)) {
1025
+ out.agentDoneSound = source.agentDoneSound;
1026
+ }
1027
+ if (typeof source.agentDoneCustomSoundName === "string") {
1028
+ const name = source.agentDoneCustomSoundName.trim();
1029
+ if (name) out.agentDoneCustomSoundName = name.slice(0, 200);
1030
+ }
1009
1031
  return out;
1010
1032
  }
1011
1033
  function normalizeSettings(raw) {
@@ -1929,6 +1951,16 @@ function updateAdvancedSettings(patch) {
1929
1951
  if (patch.followUpBehavior === "queue" || patch.followUpBehavior === "steer") {
1930
1952
  advanced.followUpBehavior = patch.followUpBehavior;
1931
1953
  }
1954
+ if (isAgentDoneSound(patch.agentDoneSound)) {
1955
+ advanced.agentDoneSound = patch.agentDoneSound;
1956
+ }
1957
+ if (patch.agentDoneCustomSoundName === null || patch.agentDoneCustomSoundName === "") {
1958
+ delete advanced.agentDoneCustomSoundName;
1959
+ } else if (typeof patch.agentDoneCustomSoundName === "string") {
1960
+ const name = patch.agentDoneCustomSoundName.trim();
1961
+ if (name) advanced.agentDoneCustomSoundName = name.slice(0, 200);
1962
+ else delete advanced.agentDoneCustomSoundName;
1963
+ }
1932
1964
  return saveAppSettings({ ...current, advanced });
1933
1965
  }
1934
1966
  function autoRenameBranchEnabled(settings = loadAppSettings()) {
@@ -1996,6 +2028,9 @@ function orchestrationQuotaFallbackAgent(settings = loadAppSettings()) {
1996
2028
  function followUpBehavior(settings = loadAppSettings()) {
1997
2029
  return settings.advanced.followUpBehavior === "queue" ? "queue" : "steer";
1998
2030
  }
2031
+ function agentDoneSound(settings = loadAppSettings()) {
2032
+ return isAgentDoneSound(settings.advanced.agentDoneSound) ? settings.advanced.agentDoneSound : "none";
2033
+ }
1999
2034
  function maxConcurrentAgents(settings = loadAppSettings()) {
2000
2035
  const n = settings.advanced.maxConcurrent;
2001
2036
  if (typeof n === "number" && Number.isFinite(n)) {
@@ -2140,6 +2175,8 @@ export {
2140
2175
  HARNESS_ENV_KEYS,
2141
2176
  GITHUB_GIT_AUTH_MODES,
2142
2177
  FOLLOW_UP_BEHAVIORS,
2178
+ AGENT_DONE_SOUNDS,
2179
+ isAgentDoneSound,
2143
2180
  emptyPublicIntegrations,
2144
2181
  toPublicAppSettings,
2145
2182
  appSettingsPath,
@@ -2208,6 +2245,7 @@ export {
2208
2245
  orchestrationQuotaOnLimit,
2209
2246
  orchestrationQuotaFallbackAgent,
2210
2247
  followUpBehavior,
2248
+ agentDoneSound,
2211
2249
  maxConcurrentAgents,
2212
2250
  resolveClaudeExecutable,
2213
2251
  resolveAgentExecutable,
@@ -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,