@sideboard-ai/core 0.1.228 → 0.1.230
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.
- package/dist/{abletime-D6773P33.js → abletime-BGVOCEOU.js} +4 -4
- package/dist/{abletime-BF253OZT.js → abletime-WZNDTRVL.js} +4 -4
- package/dist/{abletime-oauth-KQPVVBKA.js → abletime-oauth-6M5GWEPX.js} +3 -3
- package/dist/{abletime-oauth-H4672PRH.js → abletime-oauth-ZLU2EYRK.js} +3 -3
- package/dist/{abletime-rest-DAFPXZ7H.js → abletime-rest-F7XG5NGY.js} +3 -3
- package/dist/{abletime-rest-OPEVV3XC.js → abletime-rest-WNHIATB3.js} +3 -3
- package/dist/{agents-DV5UROWB.js → agents-ENAQHQRZ.js} +5 -5
- package/dist/{agents-QQ77D7VT.js → agents-TCTEAK6M.js} +5 -5
- package/dist/{app-settings-5RQMQKSB.js → app-settings-KBL2G7M4.js} +7 -1
- package/dist/{app-settings-V2BBCX2H.js → app-settings-UXWCPDEA.js} +7 -1
- package/dist/{chunk-NFWPDEN4.js → chunk-4CZ25DO2.js} +2 -2
- package/dist/{chunk-3IMSQNTS.js → chunk-4VGCG2HV.js} +17 -0
- package/dist/{chunk-SQHRPJ7P.js → chunk-6L25K7BE.js} +14 -4
- package/dist/{chunk-HSYE5ID6.js → chunk-AS4UN7QL.js} +5 -5
- package/dist/{chunk-3NWUHXU3.js → chunk-C774RJJA.js} +3 -3
- package/dist/{chunk-VUW3VKLW.js → chunk-FA4CPYCY.js} +17 -4
- package/dist/{chunk-CLI5DVU4.js → chunk-GHRZNPBK.js} +2 -2
- package/dist/{chunk-N2VST3NL.js → chunk-HZFLKVGC.js} +3 -3
- package/dist/{chunk-72XUASTH.js → chunk-HZLZ34FK.js} +157 -26
- package/dist/{chunk-EWHJNJHV.js → chunk-I5NC7DWO.js} +38 -0
- package/dist/{chunk-WHYJL7CP.js → chunk-JJRRLCCS.js} +156 -25
- package/dist/{chunk-646I442S.js → chunk-MVLXDYN5.js} +5 -5
- package/dist/{chunk-KTZESHYH.js → chunk-N5TX66CD.js} +2 -2
- package/dist/{chunk-RRW2XWAY.js → chunk-P6ZM5QJW.js} +2 -2
- package/dist/{chunk-THLVCXLF.js → chunk-RGNPPRZZ.js} +3 -3
- package/dist/{chunk-Y5JES2VV.js → chunk-RZTRWN2V.js} +38 -0
- package/dist/{chunk-SOGGKYFV.js → chunk-SWNEA5OZ.js} +3 -3
- package/dist/{chunk-P2EAAM3H.js → chunk-UNTOZA3C.js} +3 -3
- package/dist/{chunk-HY2GFZ5S.js → chunk-XJETIO4K.js} +17 -0
- package/dist/{coordinator-prompt-JLMQVORO.js → coordinator-prompt-DFXYTM6D.js} +4 -4
- package/dist/{coordinator-prompt-VZ7OSRLD.js → coordinator-prompt-YKLXQTWH.js} +4 -4
- package/dist/{global-workspace-3FDAUNN2.js → global-workspace-4SPANNJT.js} +4 -4
- package/dist/{global-workspace-QPSJEXGR.js → global-workspace-EYZKYHAO.js} +4 -4
- package/dist/index.cjs +992 -634
- package/dist/index.d.cts +120 -6
- package/dist/index.d.ts +120 -6
- package/dist/index.js +207 -68
- package/dist/mcp/run-stdio.cjs +289 -50
- package/dist/mcp/run-stdio.js +87 -51
- package/dist/{orchestrator-6XEWQWSM.js → orchestrator-HMJPNUN5.js} +8 -6
- package/dist/{orchestrator-QUJORSTA.js → orchestrator-ZT3SJVKF.js} +8 -6
- package/dist/{thread-store-KDPPXJJ3.js → thread-store-FBK5SZ5P.js} +1 -1
- package/dist/{thread-store-N6WQIWZ4.js → thread-store-IKJD4EOK.js} +1 -1
- package/dist/{workspaces-76W7IEKR.js → workspaces-73Y7IJY2.js} +4 -4
- package/dist/{workspaces-TDBA64II.js → workspaces-FQCSCTNH.js} +4 -4
- package/dist/{worktree-7V67XTEO.js → worktree-36VEFUJN.js} +3 -3
- package/dist/{worktree-I573UOPD.js → worktree-DOPRKG7K.js} +3 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
parseAbleTimeOAuthCallbackUrl,
|
|
21
21
|
resolveAbleTimeOAuthHost,
|
|
22
22
|
startAbleTimeOAuth
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-C774RJJA.js";
|
|
24
24
|
import {
|
|
25
25
|
ableTimeDependencyTarget,
|
|
26
26
|
commentAbleTimeTask,
|
|
@@ -38,8 +38,8 @@ import {
|
|
|
38
38
|
toAbleTimeIssueInfo,
|
|
39
39
|
updateAbleTimeTask,
|
|
40
40
|
verifyAbleTimeConnection
|
|
41
|
-
} from "./chunk-
|
|
42
|
-
import "./chunk-
|
|
41
|
+
} from "./chunk-SWNEA5OZ.js";
|
|
42
|
+
import "./chunk-P6ZM5QJW.js";
|
|
43
43
|
import {
|
|
44
44
|
ABLETIME_MCP_PATH,
|
|
45
45
|
ABLETIME_MCP_PM_PATH,
|
|
@@ -60,7 +60,7 @@ import {
|
|
|
60
60
|
normalizeAbleTimeCredential,
|
|
61
61
|
normalizeAbleTimeHost,
|
|
62
62
|
rewriteAbleTimeError
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-MVLXDYN5.js";
|
|
64
64
|
import {
|
|
65
65
|
AGENT_GIT_ACTIONS,
|
|
66
66
|
BOARD_COLUMN_DEFS,
|
|
@@ -92,6 +92,7 @@ import {
|
|
|
92
92
|
REVIEW_REQUEST_TEMPLATE,
|
|
93
93
|
REVIEW_SKILL_NAME,
|
|
94
94
|
REVIEW_SKILL_PATH,
|
|
95
|
+
RUN_SCRIPT_DESKTOP_ADOPT_MS,
|
|
95
96
|
SEED_FULL_TOOL_MESSAGES,
|
|
96
97
|
SEED_MAX_CHARS,
|
|
97
98
|
SESSION_RESET_OCCUPANCY_TOKENS,
|
|
@@ -218,6 +219,7 @@ import {
|
|
|
218
219
|
isSlackExternalReplyPrompt,
|
|
219
220
|
isStaleLastErrorDuringTurn,
|
|
220
221
|
isThisProcessDesktopHost,
|
|
222
|
+
isUnclaimedRunScriptRequest,
|
|
221
223
|
issueNeedsWorkspacePick,
|
|
222
224
|
issueTicketFromThread,
|
|
223
225
|
killListenersOnPorts,
|
|
@@ -321,7 +323,7 @@ import {
|
|
|
321
323
|
worktreeCleanupSettings,
|
|
322
324
|
wrapReviewSkillMarkdown,
|
|
323
325
|
writeWorktreeFile
|
|
324
|
-
} from "./chunk-
|
|
326
|
+
} from "./chunk-HZLZ34FK.js";
|
|
325
327
|
import {
|
|
326
328
|
LEGACY_PLAN_FILE_REL,
|
|
327
329
|
PLAN_FILE_NAME,
|
|
@@ -438,7 +440,7 @@ import {
|
|
|
438
440
|
withEventParentId,
|
|
439
441
|
withEventsParentId,
|
|
440
442
|
writeInjectedMcpConfig
|
|
441
|
-
} from "./chunk-
|
|
443
|
+
} from "./chunk-FA4CPYCY.js";
|
|
442
444
|
import {
|
|
443
445
|
CLOUD_COORDINATOR_BUSY_REPLY,
|
|
444
446
|
CLOUD_COORDINATOR_STOPPED_REPLY,
|
|
@@ -482,7 +484,7 @@ import {
|
|
|
482
484
|
stageBuffersAsAttachments,
|
|
483
485
|
syncWorkspacesFromThreads,
|
|
484
486
|
takenTeamSlugsForOrchestration
|
|
485
|
-
} from "./chunk-
|
|
487
|
+
} from "./chunk-HZFLKVGC.js";
|
|
486
488
|
import {
|
|
487
489
|
FAMOUS_SOCCER_TEAMS,
|
|
488
490
|
GITHUB_PR_BODY_MAX_CHARS,
|
|
@@ -580,7 +582,7 @@ import {
|
|
|
580
582
|
worktreeDisplayLabelForGroup,
|
|
581
583
|
worktreeNameFromPath,
|
|
582
584
|
worktreeSlugForTicket
|
|
583
|
-
} from "./chunk-
|
|
585
|
+
} from "./chunk-N5TX66CD.js";
|
|
584
586
|
import {
|
|
585
587
|
ATTACHMENTS_DIR,
|
|
586
588
|
CLI_DIR,
|
|
@@ -633,6 +635,7 @@ import {
|
|
|
633
635
|
withMaxOldSpaceSize
|
|
634
636
|
} from "./chunk-TQBUXKIB.js";
|
|
635
637
|
import {
|
|
638
|
+
AGENT_DONE_SOUNDS,
|
|
636
639
|
FOLLOW_UP_BEHAVIORS,
|
|
637
640
|
GITHUB_GIT_AUTH_MODES,
|
|
638
641
|
HARNESS_ENV_KEYS,
|
|
@@ -646,6 +649,7 @@ import {
|
|
|
646
649
|
ORCHESTRATOR_AGENT_KINDS,
|
|
647
650
|
PROFILE_NOTES_MAX,
|
|
648
651
|
USAGE_ON_LIMIT_VALUES,
|
|
652
|
+
agentDoneSound,
|
|
649
653
|
appSettingsPath,
|
|
650
654
|
applyAppEnvironment,
|
|
651
655
|
applyTurnUsage,
|
|
@@ -700,6 +704,7 @@ import {
|
|
|
700
704
|
historyMaxCount,
|
|
701
705
|
historyMaxDays,
|
|
702
706
|
isAbleTimeConnected,
|
|
707
|
+
isAgentDoneSound,
|
|
703
708
|
isHistoryRetentionStub,
|
|
704
709
|
isIssueSourceConnected,
|
|
705
710
|
isLinearConnected,
|
|
@@ -753,7 +758,7 @@ import {
|
|
|
753
758
|
updateProjectProfileSettings,
|
|
754
759
|
usageOnLimit,
|
|
755
760
|
writeViewerContext
|
|
756
|
-
} from "./chunk-
|
|
761
|
+
} from "./chunk-I5NC7DWO.js";
|
|
757
762
|
import {
|
|
758
763
|
examplePrefixedBranch,
|
|
759
764
|
resolveGitBranchPrefix,
|
|
@@ -784,7 +789,7 @@ import {
|
|
|
784
789
|
updateThread,
|
|
785
790
|
withThreadLock,
|
|
786
791
|
writeThread
|
|
787
|
-
} from "./chunk-
|
|
792
|
+
} from "./chunk-4VGCG2HV.js";
|
|
788
793
|
import "./chunk-7J72QJOM.js";
|
|
789
794
|
import {
|
|
790
795
|
THINKING_EFFORTS,
|
|
@@ -840,6 +845,92 @@ import {
|
|
|
840
845
|
stripNestedElectronEnv
|
|
841
846
|
} from "./chunk-4TR3HZFT.js";
|
|
842
847
|
|
|
848
|
+
// src/store/agent-done-sound.ts
|
|
849
|
+
import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, unlinkSync } from "fs";
|
|
850
|
+
import { basename, extname, join } from "path";
|
|
851
|
+
var AGENT_DONE_CUSTOM_SOUND_MAX_BYTES = 5 * 1024 * 1024;
|
|
852
|
+
var AUDIO_EXT_MIME = {
|
|
853
|
+
".mp3": "audio/mpeg",
|
|
854
|
+
".wav": "audio/wav",
|
|
855
|
+
".ogg": "audio/ogg",
|
|
856
|
+
".m4a": "audio/mp4",
|
|
857
|
+
".aac": "audio/aac",
|
|
858
|
+
".caf": "audio/x-caf",
|
|
859
|
+
".flac": "audio/flac"
|
|
860
|
+
};
|
|
861
|
+
var AGENT_DONE_CUSTOM_SOUND_EXTENSIONS = Object.keys(AUDIO_EXT_MIME);
|
|
862
|
+
function agentDoneSoundsDir() {
|
|
863
|
+
const dir = join(appDataDir(), "sounds");
|
|
864
|
+
mkdirSync(dir, { recursive: true });
|
|
865
|
+
return dir;
|
|
866
|
+
}
|
|
867
|
+
function normalizeExt(ext) {
|
|
868
|
+
const e = ext.trim().toLowerCase();
|
|
869
|
+
return e.startsWith(".") ? e : `.${e}`;
|
|
870
|
+
}
|
|
871
|
+
function agentDoneCustomSoundMime(extOrPath) {
|
|
872
|
+
const ext = normalizeExt(extname(extOrPath) || extOrPath);
|
|
873
|
+
return AUDIO_EXT_MIME[ext] ?? null;
|
|
874
|
+
}
|
|
875
|
+
function findAgentDoneCustomSoundPath() {
|
|
876
|
+
const dir = agentDoneSoundsDir();
|
|
877
|
+
for (const name of readdirSync(dir)) {
|
|
878
|
+
if (!name.startsWith("agent-done.")) continue;
|
|
879
|
+
const full = join(dir, name);
|
|
880
|
+
if (existsSync(full) && agentDoneCustomSoundMime(name)) return full;
|
|
881
|
+
}
|
|
882
|
+
return null;
|
|
883
|
+
}
|
|
884
|
+
function clearAgentDoneCustomSoundFile() {
|
|
885
|
+
const dir = agentDoneSoundsDir();
|
|
886
|
+
for (const name of readdirSync(dir)) {
|
|
887
|
+
if (!name.startsWith("agent-done.")) continue;
|
|
888
|
+
try {
|
|
889
|
+
unlinkSync(join(dir, name));
|
|
890
|
+
} catch {
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
function importAgentDoneCustomSound(sourcePath) {
|
|
895
|
+
const trimmed = sourcePath.trim();
|
|
896
|
+
if (!trimmed || !existsSync(trimmed)) {
|
|
897
|
+
throw new Error("Sound file not found");
|
|
898
|
+
}
|
|
899
|
+
const ext = normalizeExt(extname(trimmed));
|
|
900
|
+
const mime = AUDIO_EXT_MIME[ext];
|
|
901
|
+
if (!mime) {
|
|
902
|
+
throw new Error(
|
|
903
|
+
`Unsupported audio type (use ${AGENT_DONE_CUSTOM_SOUND_EXTENSIONS.join(", ")})`
|
|
904
|
+
);
|
|
905
|
+
}
|
|
906
|
+
const data = readFileSync(trimmed);
|
|
907
|
+
if (data.byteLength === 0) throw new Error("Sound file is empty");
|
|
908
|
+
if (data.byteLength > AGENT_DONE_CUSTOM_SOUND_MAX_BYTES) {
|
|
909
|
+
throw new Error("Sound file is too large (max 5 MB)");
|
|
910
|
+
}
|
|
911
|
+
clearAgentDoneCustomSoundFile();
|
|
912
|
+
const dest = join(agentDoneSoundsDir(), `agent-done${ext}`);
|
|
913
|
+
copyFileSync(trimmed, dest);
|
|
914
|
+
return {
|
|
915
|
+
name: basename(trimmed),
|
|
916
|
+
path: dest,
|
|
917
|
+
mime
|
|
918
|
+
};
|
|
919
|
+
}
|
|
920
|
+
function readAgentDoneCustomSound(displayName) {
|
|
921
|
+
const path2 = findAgentDoneCustomSoundPath();
|
|
922
|
+
if (!path2) return null;
|
|
923
|
+
const mime = agentDoneCustomSoundMime(path2);
|
|
924
|
+
if (!mime) return null;
|
|
925
|
+
const data = readFileSync(path2);
|
|
926
|
+
if (data.byteLength === 0) return null;
|
|
927
|
+
return {
|
|
928
|
+
name: displayName?.trim() || basename(path2),
|
|
929
|
+
mime,
|
|
930
|
+
dataBase64: data.toString("base64")
|
|
931
|
+
};
|
|
932
|
+
}
|
|
933
|
+
|
|
843
934
|
// src/store/thread-list.ts
|
|
844
935
|
var LIST_PREVIEW_MAX = 480;
|
|
845
936
|
function slimThreadForUiList(thread) {
|
|
@@ -3161,7 +3252,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
3161
3252
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3162
3253
|
import { z as z9 } from "zod";
|
|
3163
3254
|
import { randomUUID as randomUUID3 } from "crypto";
|
|
3164
|
-
import { basename } from "path";
|
|
3255
|
+
import { basename as basename2 } from "path";
|
|
3165
3256
|
|
|
3166
3257
|
// src/mcp/archive-guard.ts
|
|
3167
3258
|
function mcpArchiveBlockedReason(thread) {
|
|
@@ -3171,6 +3262,20 @@ function mcpArchiveBlockedReason(thread) {
|
|
|
3171
3262
|
return null;
|
|
3172
3263
|
}
|
|
3173
3264
|
|
|
3265
|
+
// src/mcp/run-script-ref.ts
|
|
3266
|
+
function resolveRunScriptThreadRef(ref) {
|
|
3267
|
+
const explicit = ref?.trim();
|
|
3268
|
+
if (explicit) return explicit;
|
|
3269
|
+
const siblings = threadsSharingWorktree(process.cwd());
|
|
3270
|
+
const thread = siblings[0];
|
|
3271
|
+
if (!thread) {
|
|
3272
|
+
throw new Error(
|
|
3273
|
+
"No Sideboard thread for this cwd. Pass ref (thread id), or call from a worktree chat."
|
|
3274
|
+
);
|
|
3275
|
+
}
|
|
3276
|
+
return thread.id;
|
|
3277
|
+
}
|
|
3278
|
+
|
|
3174
3279
|
// src/mcp/thread-visibility.ts
|
|
3175
3280
|
function lastMessagePreview(messages, max = 160) {
|
|
3176
3281
|
if (!messages?.length) return null;
|
|
@@ -4842,23 +4947,23 @@ function registerScheduleTools(server) {
|
|
|
4842
4947
|
}
|
|
4843
4948
|
|
|
4844
4949
|
// src/board/load-home-board.ts
|
|
4845
|
-
import { existsSync as
|
|
4846
|
-
import { join as
|
|
4950
|
+
import { existsSync as existsSync3, mkdirSync as mkdirSync3, readFileSync as readFileSync3, unlinkSync as unlinkSync3, writeFileSync as writeFileSync2 } from "fs";
|
|
4951
|
+
import { join as join3 } from "path";
|
|
4847
4952
|
|
|
4848
4953
|
// src/board/board-pins.ts
|
|
4849
4954
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
4850
|
-
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "fs";
|
|
4851
|
-
import { join } from "path";
|
|
4955
|
+
import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync as readFileSync2, unlinkSync as unlinkSync2, writeFileSync } from "fs";
|
|
4956
|
+
import { join as join2 } from "path";
|
|
4852
4957
|
var FILE = "home-board-pins.json";
|
|
4853
4958
|
var VERSION = 1;
|
|
4854
4959
|
function pinsFile() {
|
|
4855
|
-
return
|
|
4960
|
+
return join2(appDataDir(), FILE);
|
|
4856
4961
|
}
|
|
4857
4962
|
function readDisk() {
|
|
4858
4963
|
const path2 = pinsFile();
|
|
4859
|
-
if (!
|
|
4964
|
+
if (!existsSync2(path2)) return [];
|
|
4860
4965
|
try {
|
|
4861
|
-
const raw = JSON.parse(
|
|
4966
|
+
const raw = JSON.parse(readFileSync2(path2, "utf8"));
|
|
4862
4967
|
if (raw?.version !== VERSION || !Array.isArray(raw.items)) return [];
|
|
4863
4968
|
return raw.items.filter((item) => item?.id && item.kind && item.ref);
|
|
4864
4969
|
} catch {
|
|
@@ -4866,7 +4971,7 @@ function readDisk() {
|
|
|
4866
4971
|
}
|
|
4867
4972
|
}
|
|
4868
4973
|
function writeDisk(items) {
|
|
4869
|
-
|
|
4974
|
+
mkdirSync2(appDataDir(), { recursive: true });
|
|
4870
4975
|
writeFileSync(pinsFile(), JSON.stringify({ version: VERSION, items }, null, 2), "utf8");
|
|
4871
4976
|
}
|
|
4872
4977
|
function listBoardPins() {
|
|
@@ -4919,7 +5024,7 @@ function replaceBoardPins(items) {
|
|
|
4919
5024
|
}
|
|
4920
5025
|
function clearBoardPins() {
|
|
4921
5026
|
try {
|
|
4922
|
-
|
|
5027
|
+
unlinkSync2(pinsFile());
|
|
4923
5028
|
} catch {
|
|
4924
5029
|
}
|
|
4925
5030
|
}
|
|
@@ -4935,7 +5040,7 @@ function homeBoardWorkspaceKey(workspaces) {
|
|
|
4935
5040
|
return workspaces.map((w) => w.path).filter(Boolean).sort().join("\n");
|
|
4936
5041
|
}
|
|
4937
5042
|
function cacheFile() {
|
|
4938
|
-
return
|
|
5043
|
+
return join3(appDataDir(), "home-board-cache.json");
|
|
4939
5044
|
}
|
|
4940
5045
|
function emptyInputs() {
|
|
4941
5046
|
return {
|
|
@@ -4961,9 +5066,9 @@ function shouldCacheHomeBoardInputs(inputs) {
|
|
|
4961
5066
|
}
|
|
4962
5067
|
function readDiskCache() {
|
|
4963
5068
|
const path2 = cacheFile();
|
|
4964
|
-
if (!
|
|
5069
|
+
if (!existsSync3(path2)) return null;
|
|
4965
5070
|
try {
|
|
4966
|
-
const raw = JSON.parse(
|
|
5071
|
+
const raw = JSON.parse(readFileSync3(path2, "utf8"));
|
|
4967
5072
|
if (raw?.version !== CACHE_VERSION || typeof raw.fetchedAt !== "number") {
|
|
4968
5073
|
return null;
|
|
4969
5074
|
}
|
|
@@ -4977,14 +5082,14 @@ function readDiskCache() {
|
|
|
4977
5082
|
}
|
|
4978
5083
|
function writeDiskCache(entry) {
|
|
4979
5084
|
try {
|
|
4980
|
-
|
|
5085
|
+
mkdirSync3(appDataDir(), { recursive: true });
|
|
4981
5086
|
writeFileSync2(cacheFile(), JSON.stringify(entry), "utf8");
|
|
4982
5087
|
} catch {
|
|
4983
5088
|
}
|
|
4984
5089
|
}
|
|
4985
5090
|
function deleteDiskCache() {
|
|
4986
5091
|
try {
|
|
4987
|
-
|
|
5092
|
+
unlinkSync3(cacheFile());
|
|
4988
5093
|
} catch {
|
|
4989
5094
|
}
|
|
4990
5095
|
}
|
|
@@ -5275,7 +5380,7 @@ async function startMcpServer() {
|
|
|
5275
5380
|
);
|
|
5276
5381
|
}
|
|
5277
5382
|
try {
|
|
5278
|
-
const { maxConcurrentAgents: maxConcurrentAgents2 } = await import("./app-settings-
|
|
5383
|
+
const { maxConcurrentAgents: maxConcurrentAgents2 } = await import("./app-settings-UXWCPDEA.js");
|
|
5279
5384
|
orch.setMaxConcurrent(maxConcurrentAgents2());
|
|
5280
5385
|
} catch {
|
|
5281
5386
|
}
|
|
@@ -5330,7 +5435,7 @@ async function startMcpServer() {
|
|
|
5330
5435
|
async () => {
|
|
5331
5436
|
const threads = orch.getThreads(true);
|
|
5332
5437
|
const lines = threads.map((t) => {
|
|
5333
|
-
const repo = t.repoPath === GLOBAL_WORKSPACE_ID ? "Orchestration" :
|
|
5438
|
+
const repo = t.repoPath === GLOBAL_WORKSPACE_ID ? "Orchestration" : basename2(t.repoPath) || t.repoPath;
|
|
5334
5439
|
const live = orch.threadLooksLive(t) ? readTurnLive(t.id) : null;
|
|
5335
5440
|
const parent = t.parentThreadId ? ` parent:${t.parentThreadId.slice(0, 8)}` : "";
|
|
5336
5441
|
const preview = lastMessagePreview(t.messages, 80);
|
|
@@ -5578,19 +5683,79 @@ async function startMcpServer() {
|
|
|
5578
5683
|
"Stop a detached job you started with detached-job.cjs when it is hanging, producing no useful output, buffering forever, or doing the wrong thing (wrong project, infinite watch, huge dump). Do not stop a pack/test/deploy that is clearly making progress. The type=log pane updates to status=failed with the last delta. Then decide the next step.",
|
|
5579
5684
|
{
|
|
5580
5685
|
id: z9.string().describe("Detached job id (same kebab-case id passed to detached-job.cjs start)"),
|
|
5581
|
-
reason: z9.string().optional().describe("Why you are stopping (hanging, no progress, wrong output, already have the
|
|
5686
|
+
reason: z9.string().optional().describe("Why you are stopping (hanging, no progress, wrong output, already have the answer)")
|
|
5582
5687
|
},
|
|
5583
5688
|
async ({ id, reason }) => {
|
|
5584
5689
|
const result = await stopDetachedJob(process.cwd(), id, { reason });
|
|
5585
5690
|
return mcpJson(result);
|
|
5586
5691
|
}
|
|
5587
5692
|
);
|
|
5693
|
+
server.tool(
|
|
5694
|
+
"list_run_scripts",
|
|
5695
|
+
"List .sideboard/.conductor run scripts for this thread (same menu as the desktop Dev button) and which are active. Worktree turns may omit ref (uses cwd).",
|
|
5696
|
+
{
|
|
5697
|
+
ref: z9.string().optional().describe("Thread id. Omit on a worktree turn (uses cwd).")
|
|
5698
|
+
},
|
|
5699
|
+
async ({ ref }) => {
|
|
5700
|
+
try {
|
|
5701
|
+
const threadRef = resolveRunScriptThreadRef(ref);
|
|
5702
|
+
const scripts = orch.listThreadRunScripts(threadRef);
|
|
5703
|
+
const active = orch.getActiveRuns(threadRef);
|
|
5704
|
+
return mcpJson({ scripts, active, ref: threadRef });
|
|
5705
|
+
} catch (err) {
|
|
5706
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
5707
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
5708
|
+
}
|
|
5709
|
+
}
|
|
5710
|
+
);
|
|
5711
|
+
server.tool(
|
|
5712
|
+
"run_dev_script",
|
|
5713
|
+
"Start a .sideboard/.conductor run script (same as the desktop Dev / play button). Logs and Stop appear in the thread UI \u2014 do not detached-job or shell-spawn the same command. Returns the allocated port. Worktree turns may omit ref (uses cwd). Omit name for the default script.",
|
|
5714
|
+
{
|
|
5715
|
+
ref: z9.string().optional().describe("Thread id. Omit on a worktree turn (uses cwd)."),
|
|
5716
|
+
name: z9.string().optional().describe("Script name from list_run_scripts (default script if omitted).")
|
|
5717
|
+
},
|
|
5718
|
+
async ({ ref, name }) => {
|
|
5719
|
+
try {
|
|
5720
|
+
const threadRef = resolveRunScriptThreadRef(ref);
|
|
5721
|
+
const result = await orch.startDev(threadRef, name);
|
|
5722
|
+
return mcpJson({
|
|
5723
|
+
port: result.port,
|
|
5724
|
+
scriptName: result.scriptName,
|
|
5725
|
+
ports: result.ports,
|
|
5726
|
+
url: `http://localhost:${result.port}`,
|
|
5727
|
+
ref: threadRef
|
|
5728
|
+
});
|
|
5729
|
+
} catch (err) {
|
|
5730
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
5731
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
5732
|
+
}
|
|
5733
|
+
}
|
|
5734
|
+
);
|
|
5735
|
+
server.tool(
|
|
5736
|
+
"stop_dev_script",
|
|
5737
|
+
"Stop a run script started with run_dev_script or the desktop Dev button (same as UI Stop). Omit name to stop all scripts on this worktree. Worktree turns may omit ref (uses cwd).",
|
|
5738
|
+
{
|
|
5739
|
+
ref: z9.string().optional().describe("Thread id. Omit on a worktree turn (uses cwd)."),
|
|
5740
|
+
name: z9.string().optional().describe("Script name to stop; omit to stop all active scripts.")
|
|
5741
|
+
},
|
|
5742
|
+
async ({ ref, name }) => {
|
|
5743
|
+
try {
|
|
5744
|
+
const threadRef = resolveRunScriptThreadRef(ref);
|
|
5745
|
+
await orch.stopDev(threadRef, name);
|
|
5746
|
+
return mcpJson({ ok: true, ref: threadRef, stopped: name ?? "all" });
|
|
5747
|
+
} catch (err) {
|
|
5748
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
5749
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
5750
|
+
}
|
|
5751
|
+
}
|
|
5752
|
+
);
|
|
5588
5753
|
if (!worktreeProfile) {
|
|
5589
5754
|
registerSlackTools(server);
|
|
5590
5755
|
registerConnectedIssueVendorTools(server);
|
|
5591
5756
|
registerScheduleTools(server);
|
|
5592
5757
|
const { getCaffeinateHold: getCaffeinateHold2, setCaffeinateHold: setCaffeinateHold2 } = await import("./caffeinate-hold-22VFDPSO.js");
|
|
5593
|
-
const { resolveNewThreadOptions: resolveNewThreadOptions2, resolveThreadDefaults: resolveThreadDefaults2 } = await import("./app-settings-
|
|
5758
|
+
const { resolveNewThreadOptions: resolveNewThreadOptions2, resolveThreadDefaults: resolveThreadDefaults2 } = await import("./app-settings-UXWCPDEA.js");
|
|
5594
5759
|
const accountDefaults = resolveThreadDefaults2();
|
|
5595
5760
|
const accountDefaultsHint = `Account defaults: agent=${accountDefaults.agent}, model=${accountDefaults.model?.trim() || "Auto"}, effort=${accountDefaults.effort}`;
|
|
5596
5761
|
server.tool(
|
|
@@ -6063,45 +6228,6 @@ async function startMcpServer() {
|
|
|
6063
6228
|
}
|
|
6064
6229
|
}
|
|
6065
6230
|
);
|
|
6066
|
-
server.tool(
|
|
6067
|
-
"run_dev_script",
|
|
6068
|
-
"Start a .sideboard/.conductor run script for a thread (default script if name omitted); returns port",
|
|
6069
|
-
{
|
|
6070
|
-
ref: z9.string(),
|
|
6071
|
-
name: z9.string().optional()
|
|
6072
|
-
},
|
|
6073
|
-
async ({ ref, name }) => {
|
|
6074
|
-
const result = await orch.startDev(ref, name);
|
|
6075
|
-
return mcpJson({
|
|
6076
|
-
port: result.port,
|
|
6077
|
-
scriptName: result.scriptName,
|
|
6078
|
-
ports: result.ports,
|
|
6079
|
-
url: `http://localhost:${result.port}`
|
|
6080
|
-
});
|
|
6081
|
-
}
|
|
6082
|
-
);
|
|
6083
|
-
server.tool(
|
|
6084
|
-
"list_run_scripts",
|
|
6085
|
-
"List named run scripts available for a thread",
|
|
6086
|
-
{ ref: z9.string() },
|
|
6087
|
-
async ({ ref }) => {
|
|
6088
|
-
const scripts = orch.listThreadRunScripts(ref);
|
|
6089
|
-
const active = orch.getActiveRuns(ref);
|
|
6090
|
-
return mcpJson({ scripts, active });
|
|
6091
|
-
}
|
|
6092
|
-
);
|
|
6093
|
-
server.tool(
|
|
6094
|
-
"stop_dev_script",
|
|
6095
|
-
"Stop a running script for a thread (all scripts if name omitted)",
|
|
6096
|
-
{
|
|
6097
|
-
ref: z9.string(),
|
|
6098
|
-
name: z9.string().optional()
|
|
6099
|
-
},
|
|
6100
|
-
async ({ ref, name }) => {
|
|
6101
|
-
orch.stopDev(ref, name);
|
|
6102
|
-
return { content: [{ type: "text", text: "ok" }] };
|
|
6103
|
-
}
|
|
6104
|
-
);
|
|
6105
6231
|
server.tool(
|
|
6106
6232
|
"run_setup",
|
|
6107
6233
|
"Re-run workspace setup (Sideboard/Conductor settings, .cursor/worktrees.json, or script/setup). New worktrees already run this automatically.",
|
|
@@ -8589,6 +8715,9 @@ export {
|
|
|
8589
8715
|
ABLETIME_ORG_KEY_PREFIX,
|
|
8590
8716
|
ABLETIME_PAT_PREFIX,
|
|
8591
8717
|
ABLETIME_PM_TOOL_NAMES,
|
|
8718
|
+
AGENT_DONE_CUSTOM_SOUND_EXTENSIONS,
|
|
8719
|
+
AGENT_DONE_CUSTOM_SOUND_MAX_BYTES,
|
|
8720
|
+
AGENT_DONE_SOUNDS,
|
|
8592
8721
|
AGENT_GIT_ACTIONS,
|
|
8593
8722
|
AGENT_RUNNER_MAX_OLD_SPACE_MB,
|
|
8594
8723
|
ATTACHMENTS_DIR,
|
|
@@ -8668,6 +8797,7 @@ export {
|
|
|
8668
8797
|
REVIEW_REQUEST_TEMPLATE,
|
|
8669
8798
|
REVIEW_SKILL_NAME,
|
|
8670
8799
|
REVIEW_SKILL_PATH,
|
|
8800
|
+
RUN_SCRIPT_DESKTOP_ADOPT_MS,
|
|
8671
8801
|
SEED_FULL_TOOL_MESSAGES,
|
|
8672
8802
|
SEED_MAX_CHARS,
|
|
8673
8803
|
SESSION_RESET_OCCUPANCY_TOKENS,
|
|
@@ -8711,6 +8841,9 @@ export {
|
|
|
8711
8841
|
addStackLayerFromThread,
|
|
8712
8842
|
addWorkspace,
|
|
8713
8843
|
adoptThread,
|
|
8844
|
+
agentDoneCustomSoundMime,
|
|
8845
|
+
agentDoneSound,
|
|
8846
|
+
agentDoneSoundsDir,
|
|
8714
8847
|
agentGitPrompt,
|
|
8715
8848
|
alignQueueAttachments,
|
|
8716
8849
|
allAdapters,
|
|
@@ -8789,6 +8922,7 @@ export {
|
|
|
8789
8922
|
claudeUserSettingsPath,
|
|
8790
8923
|
cleanupArchivedHistory,
|
|
8791
8924
|
cleanupOrphanWorktrees,
|
|
8925
|
+
clearAgentDoneCustomSoundFile,
|
|
8792
8926
|
clearBoardPins,
|
|
8793
8927
|
clearHomeBoardCache,
|
|
8794
8928
|
clipAgentEventForPaint,
|
|
@@ -8891,6 +9025,7 @@ export {
|
|
|
8891
9025
|
fetchOriginForWorktree,
|
|
8892
9026
|
fetchPrHead,
|
|
8893
9027
|
finalizeParts,
|
|
9028
|
+
findAgentDoneCustomSoundPath,
|
|
8894
9029
|
findConventionSetup,
|
|
8895
9030
|
findInvalidCacheControlTtlOrder,
|
|
8896
9031
|
findLastBrightsyContextSummary,
|
|
@@ -9025,6 +9160,7 @@ export {
|
|
|
9025
9160
|
historyMaxDays,
|
|
9026
9161
|
hottestClaudeWindow,
|
|
9027
9162
|
httpFetch,
|
|
9163
|
+
importAgentDoneCustomSound,
|
|
9028
9164
|
importConductorWorkspace,
|
|
9029
9165
|
importConductorWorkspaceAsync,
|
|
9030
9166
|
initPrStack,
|
|
@@ -9040,6 +9176,7 @@ export {
|
|
|
9040
9176
|
isAbleTimeConnected,
|
|
9041
9177
|
isAbleTimeOAuthCancelled,
|
|
9042
9178
|
isAbleTimeRejectedCredential,
|
|
9179
|
+
isAgentDoneSound,
|
|
9043
9180
|
isAskUserToolName,
|
|
9044
9181
|
isBrightsyConnected,
|
|
9045
9182
|
isBrightsyNdjsonLine,
|
|
@@ -9090,6 +9227,7 @@ export {
|
|
|
9090
9227
|
isThisProcessDesktopHost,
|
|
9091
9228
|
isThreadCaffeinated,
|
|
9092
9229
|
isThreadRecordFile,
|
|
9230
|
+
isUnclaimedRunScriptRequest,
|
|
9093
9231
|
isUsageOnLimit,
|
|
9094
9232
|
isWorkspaceScratchPath,
|
|
9095
9233
|
issueAttachmentForAbleTimeTask,
|
|
@@ -9231,6 +9369,7 @@ export {
|
|
|
9231
9369
|
primaryCheckoutFromLinkedWorktree,
|
|
9232
9370
|
promptMentionsBrightsy,
|
|
9233
9371
|
pushBranch,
|
|
9372
|
+
readAgentDoneCustomSound,
|
|
9234
9373
|
readExistingReviewRequestFile,
|
|
9235
9374
|
readKeychainVaultKey,
|
|
9236
9375
|
readPlanFile,
|