@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.
- 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-B7G4BQTS.js} +4 -4
- package/dist/{agents-QQ77D7VT.js → agents-ZKP7QNXA.js} +4 -4
- 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-WHYJL7CP.js → chunk-6HKGCUDN.js} +24 -22
- package/dist/{chunk-N2VST3NL.js → chunk-7YKXBFQE.js} +2 -2
- package/dist/{chunk-KTZESHYH.js → chunk-AMMRFFB7.js} +1 -1
- package/dist/{chunk-HSYE5ID6.js → chunk-AS4UN7QL.js} +5 -5
- package/dist/{chunk-3NWUHXU3.js → chunk-C774RJJA.js} +3 -3
- package/dist/{chunk-NFWPDEN4.js → chunk-F3GT6DQW.js} +1 -1
- package/dist/{chunk-CLI5DVU4.js → chunk-GHRZNPBK.js} +2 -2
- package/dist/{chunk-EWHJNJHV.js → chunk-I5NC7DWO.js} +38 -0
- package/dist/{chunk-VUW3VKLW.js → chunk-LULHFLPU.js} +17 -4
- package/dist/{chunk-646I442S.js → chunk-MVLXDYN5.js} +5 -5
- package/dist/{chunk-P2EAAM3H.js → chunk-N7UXGM3Y.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-SQHRPJ7P.js → chunk-T7Y5ULHM.js} +14 -4
- package/dist/{chunk-72XUASTH.js → chunk-UHT6OS7V.js} +24 -23
- package/dist/{coordinator-prompt-JLMQVORO.js → coordinator-prompt-DZMMCDRW.js} +3 -3
- package/dist/{coordinator-prompt-VZ7OSRLD.js → coordinator-prompt-RL3GKIAQ.js} +3 -3
- package/dist/{global-workspace-QPSJEXGR.js → global-workspace-G3QEVRGZ.js} +3 -3
- package/dist/{global-workspace-3FDAUNN2.js → global-workspace-QW4OXCLJ.js} +3 -3
- package/dist/index.cjs +820 -619
- package/dist/index.d.cts +68 -2
- package/dist/index.d.ts +68 -2
- package/dist/index.js +202 -67
- package/dist/mcp/run-stdio.cjs +131 -44
- package/dist/mcp/run-stdio.js +86 -50
- package/dist/{orchestrator-6XEWQWSM.js → orchestrator-GKAHLGXT.js} +5 -5
- package/dist/{orchestrator-QUJORSTA.js → orchestrator-X4VFA5WW.js} +5 -5
- package/dist/{workspaces-76W7IEKR.js → workspaces-77C5XQEY.js} +3 -3
- package/dist/{workspaces-TDBA64II.js → workspaces-WXRPLT2N.js} +3 -3
- package/dist/{worktree-I573UOPD.js → worktree-L6FJXFUC.js} +2 -2
- package/dist/{worktree-7V67XTEO.js → worktree-P67WAJKH.js} +2 -2
- package/package.json +1 -1
package/dist/mcp/run-stdio.cjs
CHANGED
|
@@ -3787,12 +3787,14 @@ var init_issue_source_labels = __esm({
|
|
|
3787
3787
|
// src/store/app-settings.ts
|
|
3788
3788
|
var app_settings_exports = {};
|
|
3789
3789
|
__export(app_settings_exports, {
|
|
3790
|
+
AGENT_DONE_SOUNDS: () => AGENT_DONE_SOUNDS,
|
|
3790
3791
|
FOLLOW_UP_BEHAVIORS: () => FOLLOW_UP_BEHAVIORS,
|
|
3791
3792
|
GITHUB_GIT_AUTH_MODES: () => GITHUB_GIT_AUTH_MODES,
|
|
3792
3793
|
HARNESS_ENV_KEYS: () => HARNESS_ENV_KEYS,
|
|
3793
3794
|
ISSUE_SOURCE_LABELS: () => ISSUE_SOURCE_LABELS,
|
|
3794
3795
|
PROFILE_NOTES_MAX: () => PROFILE_NOTES_MAX,
|
|
3795
3796
|
USAGE_ON_LIMIT_VALUES: () => USAGE_ON_LIMIT_VALUES,
|
|
3797
|
+
agentDoneSound: () => agentDoneSound,
|
|
3796
3798
|
appSettingsPath: () => appSettingsPath,
|
|
3797
3799
|
applyAppEnvironment: () => applyAppEnvironment,
|
|
3798
3800
|
autoArchiveOnMergeEnabled: () => autoArchiveOnMergeEnabled,
|
|
@@ -3840,6 +3842,7 @@ __export(app_settings_exports, {
|
|
|
3840
3842
|
historyMaxCount: () => historyMaxCount,
|
|
3841
3843
|
historyMaxDays: () => historyMaxDays,
|
|
3842
3844
|
isAbleTimeConnected: () => isAbleTimeConnected,
|
|
3845
|
+
isAgentDoneSound: () => isAgentDoneSound,
|
|
3843
3846
|
isIssueSourceConnected: () => isIssueSourceConnected,
|
|
3844
3847
|
isLinearConnected: () => isLinearConnected,
|
|
3845
3848
|
isUsageOnLimit: () => isUsageOnLimit,
|
|
@@ -3881,6 +3884,9 @@ __export(app_settings_exports, {
|
|
|
3881
3884
|
usageOnLimit: () => usageOnLimit,
|
|
3882
3885
|
writeViewerContext: () => writeViewerContext
|
|
3883
3886
|
});
|
|
3887
|
+
function isAgentDoneSound(value) {
|
|
3888
|
+
return AGENT_DONE_SOUNDS.includes(value);
|
|
3889
|
+
}
|
|
3884
3890
|
function emptyPublicIntegrations() {
|
|
3885
3891
|
return {
|
|
3886
3892
|
hasLinearApiKey: false,
|
|
@@ -4311,6 +4317,13 @@ function normalizeAdvanced(raw) {
|
|
|
4311
4317
|
if (source.followUpBehavior === "queue" || source.followUpBehavior === "steer") {
|
|
4312
4318
|
out.followUpBehavior = source.followUpBehavior;
|
|
4313
4319
|
}
|
|
4320
|
+
if (isAgentDoneSound(source.agentDoneSound)) {
|
|
4321
|
+
out.agentDoneSound = source.agentDoneSound;
|
|
4322
|
+
}
|
|
4323
|
+
if (typeof source.agentDoneCustomSoundName === "string") {
|
|
4324
|
+
const name = source.agentDoneCustomSoundName.trim();
|
|
4325
|
+
if (name) out.agentDoneCustomSoundName = name.slice(0, 200);
|
|
4326
|
+
}
|
|
4314
4327
|
return out;
|
|
4315
4328
|
}
|
|
4316
4329
|
function normalizeSettings(raw) {
|
|
@@ -5221,6 +5234,16 @@ function updateAdvancedSettings(patch) {
|
|
|
5221
5234
|
if (patch.followUpBehavior === "queue" || patch.followUpBehavior === "steer") {
|
|
5222
5235
|
advanced.followUpBehavior = patch.followUpBehavior;
|
|
5223
5236
|
}
|
|
5237
|
+
if (isAgentDoneSound(patch.agentDoneSound)) {
|
|
5238
|
+
advanced.agentDoneSound = patch.agentDoneSound;
|
|
5239
|
+
}
|
|
5240
|
+
if (patch.agentDoneCustomSoundName === null || patch.agentDoneCustomSoundName === "") {
|
|
5241
|
+
delete advanced.agentDoneCustomSoundName;
|
|
5242
|
+
} else if (typeof patch.agentDoneCustomSoundName === "string") {
|
|
5243
|
+
const name = patch.agentDoneCustomSoundName.trim();
|
|
5244
|
+
if (name) advanced.agentDoneCustomSoundName = name.slice(0, 200);
|
|
5245
|
+
else delete advanced.agentDoneCustomSoundName;
|
|
5246
|
+
}
|
|
5224
5247
|
return saveAppSettings({ ...current, advanced });
|
|
5225
5248
|
}
|
|
5226
5249
|
function autoRenameBranchEnabled(settings = loadAppSettings()) {
|
|
@@ -5288,6 +5311,9 @@ function orchestrationQuotaFallbackAgent(settings = loadAppSettings()) {
|
|
|
5288
5311
|
function followUpBehavior(settings = loadAppSettings()) {
|
|
5289
5312
|
return settings.advanced.followUpBehavior === "queue" ? "queue" : "steer";
|
|
5290
5313
|
}
|
|
5314
|
+
function agentDoneSound(settings = loadAppSettings()) {
|
|
5315
|
+
return isAgentDoneSound(settings.advanced.agentDoneSound) ? settings.advanced.agentDoneSound : "none";
|
|
5316
|
+
}
|
|
5291
5317
|
function maxConcurrentAgents(settings = loadAppSettings()) {
|
|
5292
5318
|
const n = settings.advanced.maxConcurrent;
|
|
5293
5319
|
if (typeof n === "number" && Number.isFinite(n)) {
|
|
@@ -5375,7 +5401,7 @@ function childEnvWithAppSettings(extra) {
|
|
|
5375
5401
|
function harnessEnvKey(harness) {
|
|
5376
5402
|
return HARNESS_ENV_KEYS[harness];
|
|
5377
5403
|
}
|
|
5378
|
-
var import_node_crypto3, import_node_fs15, import_node_os5, import_node_path18, HARNESS_ENV_KEYS, DEFAULT_AGENTS, GITHUB_GIT_AUTH_MODES, FOLLOW_UP_BEHAVIORS, CLOUD_CONNECT_AGENTS, ISSUE_SOURCES, GIT_AUTH_MODES, EMPTY_SETTINGS, CONFIRM_ACCOUNT, CONFIRM_PROJECT, DEFAULT_CLI_BIN;
|
|
5404
|
+
var import_node_crypto3, import_node_fs15, import_node_os5, import_node_path18, HARNESS_ENV_KEYS, DEFAULT_AGENTS, GITHUB_GIT_AUTH_MODES, FOLLOW_UP_BEHAVIORS, AGENT_DONE_SOUNDS, CLOUD_CONNECT_AGENTS, ISSUE_SOURCES, GIT_AUTH_MODES, EMPTY_SETTINGS, CONFIRM_ACCOUNT, CONFIRM_PROJECT, DEFAULT_CLI_BIN;
|
|
5379
5405
|
var init_app_settings = __esm({
|
|
5380
5406
|
"src/store/app-settings.ts"() {
|
|
5381
5407
|
"use strict";
|
|
@@ -5412,6 +5438,18 @@ var init_app_settings = __esm({
|
|
|
5412
5438
|
]);
|
|
5413
5439
|
GITHUB_GIT_AUTH_MODES = ["auto", "gh", "ssh", "token"];
|
|
5414
5440
|
FOLLOW_UP_BEHAVIORS = ["steer", "queue"];
|
|
5441
|
+
AGENT_DONE_SOUNDS = [
|
|
5442
|
+
"none",
|
|
5443
|
+
"goal",
|
|
5444
|
+
"bell",
|
|
5445
|
+
"level",
|
|
5446
|
+
"coin",
|
|
5447
|
+
"fanfare",
|
|
5448
|
+
"magic",
|
|
5449
|
+
"rooster",
|
|
5450
|
+
"whistle",
|
|
5451
|
+
"custom"
|
|
5452
|
+
];
|
|
5415
5453
|
CLOUD_CONNECT_AGENTS = /* @__PURE__ */ new Set([
|
|
5416
5454
|
"claude",
|
|
5417
5455
|
"codex",
|
|
@@ -10242,6 +10280,9 @@ var init_injected_mcp = __esm({
|
|
|
10242
10280
|
"mcp__sideboard__present_plan",
|
|
10243
10281
|
"mcp__sideboard__wait_for_job",
|
|
10244
10282
|
"mcp__sideboard__stop_job",
|
|
10283
|
+
"mcp__sideboard__list_run_scripts",
|
|
10284
|
+
"mcp__sideboard__run_dev_script",
|
|
10285
|
+
"mcp__sideboard__stop_dev_script",
|
|
10245
10286
|
"mcp__sideboard__get_viewer_context",
|
|
10246
10287
|
"mcp__sideboard__update_viewer_context"
|
|
10247
10288
|
];
|
|
@@ -10451,6 +10492,13 @@ function toolDescription(name, input) {
|
|
|
10451
10492
|
if (/stop_job$/i.test(name)) {
|
|
10452
10493
|
return str2(input?.id) ? `Stop ${str2(input?.id)}` : "Stop job";
|
|
10453
10494
|
}
|
|
10495
|
+
if (/list_run_scripts$/i.test(name)) return "List run scripts";
|
|
10496
|
+
if (/run_dev_script$/i.test(name)) {
|
|
10497
|
+
return str2(input?.name) ? `Start ${str2(input?.name)}` : "Start Dev script";
|
|
10498
|
+
}
|
|
10499
|
+
if (/stop_dev_script$/i.test(name)) {
|
|
10500
|
+
return str2(input?.name) ? `Stop ${str2(input?.name)}` : "Stop Dev script";
|
|
10501
|
+
}
|
|
10454
10502
|
if (isSubagentToolName(name)) {
|
|
10455
10503
|
const desc = str2(input?.description);
|
|
10456
10504
|
const sub = asRecord(input?.subagentType);
|
|
@@ -20529,12 +20577,13 @@ function formatLongRunningDirective(opts) {
|
|
|
20529
20577
|
"- 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>`.",
|
|
20530
20578
|
"- 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.",
|
|
20531
20579
|
"- 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.",
|
|
20532
|
-
"State: `.context/.sideboard/detached-jobs/<id>/` (local scratch). Full guide: `/long-running` (always available)."
|
|
20580
|
+
"State: `.context/.sideboard/detached-jobs/<id>/` (local scratch). Full guide: `/long-running` (always available).",
|
|
20581
|
+
"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."
|
|
20533
20582
|
].join("\n");
|
|
20534
20583
|
}
|
|
20535
20584
|
function formatLongRunningReminder(opts) {
|
|
20536
20585
|
const invoke = formatDetachedJobInvoke(opts?.scriptPath);
|
|
20537
|
-
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.`;
|
|
20586
|
+
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).`;
|
|
20538
20587
|
}
|
|
20539
20588
|
function formatArtifactDirective() {
|
|
20540
20589
|
return [
|
|
@@ -20546,7 +20595,7 @@ function formatArtifactDirective() {
|
|
|
20546
20595
|
].join("\n");
|
|
20547
20596
|
}
|
|
20548
20597
|
function formatUiReminder() {
|
|
20549
|
-
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.";
|
|
20598
|
+
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.";
|
|
20550
20599
|
}
|
|
20551
20600
|
var import_node_fs50, import_node_path49, PR_GOAL_RE, GITHUB_TICKET_REF, KEYED_TICKET_REF;
|
|
20552
20601
|
var init_instructions = __esm({
|
|
@@ -25730,6 +25779,23 @@ function mcpArchiveBlockedReason(thread) {
|
|
|
25730
25779
|
|
|
25731
25780
|
// src/mcp/server.ts
|
|
25732
25781
|
init_profile();
|
|
25782
|
+
|
|
25783
|
+
// src/mcp/run-script-ref.ts
|
|
25784
|
+
init_chat_tabs();
|
|
25785
|
+
function resolveRunScriptThreadRef(ref) {
|
|
25786
|
+
const explicit = ref?.trim();
|
|
25787
|
+
if (explicit) return explicit;
|
|
25788
|
+
const siblings = threadsSharingWorktree(process.cwd());
|
|
25789
|
+
const thread = siblings[0];
|
|
25790
|
+
if (!thread) {
|
|
25791
|
+
throw new Error(
|
|
25792
|
+
"No Sideboard thread for this cwd. Pass ref (thread id), or call from a worktree chat."
|
|
25793
|
+
);
|
|
25794
|
+
}
|
|
25795
|
+
return thread.id;
|
|
25796
|
+
}
|
|
25797
|
+
|
|
25798
|
+
// src/mcp/server.ts
|
|
25733
25799
|
init_wait_for_turn();
|
|
25734
25800
|
init_wait_for_job();
|
|
25735
25801
|
init_message_parts();
|
|
@@ -28161,13 +28227,73 @@ async function startMcpServer() {
|
|
|
28161
28227
|
"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.",
|
|
28162
28228
|
{
|
|
28163
28229
|
id: import_zod9.z.string().describe("Detached job id (same kebab-case id passed to detached-job.cjs start)"),
|
|
28164
|
-
reason: import_zod9.z.string().optional().describe("Why you are stopping (hanging, no progress, wrong output, already have the
|
|
28230
|
+
reason: import_zod9.z.string().optional().describe("Why you are stopping (hanging, no progress, wrong output, already have the answer)")
|
|
28165
28231
|
},
|
|
28166
28232
|
async ({ id, reason }) => {
|
|
28167
28233
|
const result = await stopDetachedJob(process.cwd(), id, { reason });
|
|
28168
28234
|
return mcpJson(result);
|
|
28169
28235
|
}
|
|
28170
28236
|
);
|
|
28237
|
+
server.tool(
|
|
28238
|
+
"list_run_scripts",
|
|
28239
|
+
"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).",
|
|
28240
|
+
{
|
|
28241
|
+
ref: import_zod9.z.string().optional().describe("Thread id. Omit on a worktree turn (uses cwd).")
|
|
28242
|
+
},
|
|
28243
|
+
async ({ ref }) => {
|
|
28244
|
+
try {
|
|
28245
|
+
const threadRef = resolveRunScriptThreadRef(ref);
|
|
28246
|
+
const scripts = orch.listThreadRunScripts(threadRef);
|
|
28247
|
+
const active = orch.getActiveRuns(threadRef);
|
|
28248
|
+
return mcpJson({ scripts, active, ref: threadRef });
|
|
28249
|
+
} catch (err) {
|
|
28250
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
28251
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
28252
|
+
}
|
|
28253
|
+
}
|
|
28254
|
+
);
|
|
28255
|
+
server.tool(
|
|
28256
|
+
"run_dev_script",
|
|
28257
|
+
"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.",
|
|
28258
|
+
{
|
|
28259
|
+
ref: import_zod9.z.string().optional().describe("Thread id. Omit on a worktree turn (uses cwd)."),
|
|
28260
|
+
name: import_zod9.z.string().optional().describe("Script name from list_run_scripts (default script if omitted).")
|
|
28261
|
+
},
|
|
28262
|
+
async ({ ref, name }) => {
|
|
28263
|
+
try {
|
|
28264
|
+
const threadRef = resolveRunScriptThreadRef(ref);
|
|
28265
|
+
const result = await orch.startDev(threadRef, name);
|
|
28266
|
+
return mcpJson({
|
|
28267
|
+
port: result.port,
|
|
28268
|
+
scriptName: result.scriptName,
|
|
28269
|
+
ports: result.ports,
|
|
28270
|
+
url: `http://localhost:${result.port}`,
|
|
28271
|
+
ref: threadRef
|
|
28272
|
+
});
|
|
28273
|
+
} catch (err) {
|
|
28274
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
28275
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
28276
|
+
}
|
|
28277
|
+
}
|
|
28278
|
+
);
|
|
28279
|
+
server.tool(
|
|
28280
|
+
"stop_dev_script",
|
|
28281
|
+
"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).",
|
|
28282
|
+
{
|
|
28283
|
+
ref: import_zod9.z.string().optional().describe("Thread id. Omit on a worktree turn (uses cwd)."),
|
|
28284
|
+
name: import_zod9.z.string().optional().describe("Script name to stop; omit to stop all active scripts.")
|
|
28285
|
+
},
|
|
28286
|
+
async ({ ref, name }) => {
|
|
28287
|
+
try {
|
|
28288
|
+
const threadRef = resolveRunScriptThreadRef(ref);
|
|
28289
|
+
orch.stopDev(threadRef, name);
|
|
28290
|
+
return mcpJson({ ok: true, ref: threadRef, stopped: name ?? "all" });
|
|
28291
|
+
} catch (err) {
|
|
28292
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
28293
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
28294
|
+
}
|
|
28295
|
+
}
|
|
28296
|
+
);
|
|
28171
28297
|
if (!worktreeProfile) {
|
|
28172
28298
|
registerSlackTools(server);
|
|
28173
28299
|
registerConnectedIssueVendorTools(server);
|
|
@@ -28646,45 +28772,6 @@ async function startMcpServer() {
|
|
|
28646
28772
|
}
|
|
28647
28773
|
}
|
|
28648
28774
|
);
|
|
28649
|
-
server.tool(
|
|
28650
|
-
"run_dev_script",
|
|
28651
|
-
"Start a .sideboard/.conductor run script for a thread (default script if name omitted); returns port",
|
|
28652
|
-
{
|
|
28653
|
-
ref: import_zod9.z.string(),
|
|
28654
|
-
name: import_zod9.z.string().optional()
|
|
28655
|
-
},
|
|
28656
|
-
async ({ ref, name }) => {
|
|
28657
|
-
const result = await orch.startDev(ref, name);
|
|
28658
|
-
return mcpJson({
|
|
28659
|
-
port: result.port,
|
|
28660
|
-
scriptName: result.scriptName,
|
|
28661
|
-
ports: result.ports,
|
|
28662
|
-
url: `http://localhost:${result.port}`
|
|
28663
|
-
});
|
|
28664
|
-
}
|
|
28665
|
-
);
|
|
28666
|
-
server.tool(
|
|
28667
|
-
"list_run_scripts",
|
|
28668
|
-
"List named run scripts available for a thread",
|
|
28669
|
-
{ ref: import_zod9.z.string() },
|
|
28670
|
-
async ({ ref }) => {
|
|
28671
|
-
const scripts = orch.listThreadRunScripts(ref);
|
|
28672
|
-
const active = orch.getActiveRuns(ref);
|
|
28673
|
-
return mcpJson({ scripts, active });
|
|
28674
|
-
}
|
|
28675
|
-
);
|
|
28676
|
-
server.tool(
|
|
28677
|
-
"stop_dev_script",
|
|
28678
|
-
"Stop a running script for a thread (all scripts if name omitted)",
|
|
28679
|
-
{
|
|
28680
|
-
ref: import_zod9.z.string(),
|
|
28681
|
-
name: import_zod9.z.string().optional()
|
|
28682
|
-
},
|
|
28683
|
-
async ({ ref, name }) => {
|
|
28684
|
-
orch.stopDev(ref, name);
|
|
28685
|
-
return { content: [{ type: "text", text: "ok" }] };
|
|
28686
|
-
}
|
|
28687
|
-
);
|
|
28688
28775
|
server.tool(
|
|
28689
28776
|
"run_setup",
|
|
28690
28777
|
"Re-run workspace setup (Sideboard/Conductor settings, .cursor/worktrees.json, or script/setup). New worktrees already run this automatically.",
|
package/dist/mcp/run-stdio.js
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
searchAbleTimeTasks,
|
|
12
12
|
toAbleTimeIssueInfo,
|
|
13
13
|
updateAbleTimeTask
|
|
14
|
-
} from "../chunk-
|
|
14
|
+
} from "../chunk-RGNPPRZZ.js";
|
|
15
15
|
import {
|
|
16
16
|
AGENT_GIT_ACTIONS,
|
|
17
17
|
BOARD_COLUMN_DEFS,
|
|
@@ -48,9 +48,10 @@ import {
|
|
|
48
48
|
slackTokenFor,
|
|
49
49
|
stopDetachedJob,
|
|
50
50
|
syncBoardPins,
|
|
51
|
+
threadsSharingWorktree,
|
|
51
52
|
updateSchedule,
|
|
52
53
|
waitForDetachedJob
|
|
53
|
-
} from "../chunk-
|
|
54
|
+
} from "../chunk-6HKGCUDN.js";
|
|
54
55
|
import "../chunk-JFOPOMK7.js";
|
|
55
56
|
import "../chunk-YWI3IBP2.js";
|
|
56
57
|
import {
|
|
@@ -61,16 +62,16 @@ import {
|
|
|
61
62
|
materializeSystemCaBundle,
|
|
62
63
|
sideboardMcpProfile,
|
|
63
64
|
trustSystemCertificates
|
|
64
|
-
} from "../chunk-
|
|
65
|
+
} from "../chunk-T7Y5ULHM.js";
|
|
65
66
|
import {
|
|
66
67
|
GLOBAL_WORKSPACE_ID,
|
|
67
68
|
isCloudCoordinatorThread,
|
|
68
69
|
listWorkspaces
|
|
69
|
-
} from "../chunk-
|
|
70
|
+
} from "../chunk-N7UXGM3Y.js";
|
|
70
71
|
import "../chunk-SXFRXNBM.js";
|
|
71
72
|
import "../chunk-P2BSMNHB.js";
|
|
72
|
-
import "../chunk-
|
|
73
|
-
import "../chunk-
|
|
73
|
+
import "../chunk-GHRZNPBK.js";
|
|
74
|
+
import "../chunk-AS4UN7QL.js";
|
|
74
75
|
import {
|
|
75
76
|
httpFetch
|
|
76
77
|
} from "../chunk-VKQGAWHY.js";
|
|
@@ -84,7 +85,7 @@ import {
|
|
|
84
85
|
resolveListPrsOptions,
|
|
85
86
|
resolveRepoRoot,
|
|
86
87
|
warmGithubAgentAuth
|
|
87
|
-
} from "../chunk-
|
|
88
|
+
} from "../chunk-F3GT6DQW.js";
|
|
88
89
|
import "../chunk-D6JWYJ4P.js";
|
|
89
90
|
import "../chunk-HY2GFZ5S.js";
|
|
90
91
|
import "../chunk-X5B3OS5I.js";
|
|
@@ -105,7 +106,7 @@ import {
|
|
|
105
106
|
resolveViewerProfileForRepo,
|
|
106
107
|
saveLinearOAuth,
|
|
107
108
|
writeViewerContext
|
|
108
|
-
} from "../chunk-
|
|
109
|
+
} from "../chunk-RZTRWN2V.js";
|
|
109
110
|
import "../chunk-NSTQ6QKD.js";
|
|
110
111
|
import "../chunk-KGZBYWZ3.js";
|
|
111
112
|
import {
|
|
@@ -1797,6 +1798,20 @@ function mcpArchiveBlockedReason(thread) {
|
|
|
1797
1798
|
return null;
|
|
1798
1799
|
}
|
|
1799
1800
|
|
|
1801
|
+
// src/mcp/run-script-ref.ts
|
|
1802
|
+
function resolveRunScriptThreadRef(ref) {
|
|
1803
|
+
const explicit = ref?.trim();
|
|
1804
|
+
if (explicit) return explicit;
|
|
1805
|
+
const siblings = threadsSharingWorktree(process.cwd());
|
|
1806
|
+
const thread = siblings[0];
|
|
1807
|
+
if (!thread) {
|
|
1808
|
+
throw new Error(
|
|
1809
|
+
"No Sideboard thread for this cwd. Pass ref (thread id), or call from a worktree chat."
|
|
1810
|
+
);
|
|
1811
|
+
}
|
|
1812
|
+
return thread.id;
|
|
1813
|
+
}
|
|
1814
|
+
|
|
1800
1815
|
// src/mcp/thread-visibility.ts
|
|
1801
1816
|
function lastMessagePreview(messages, max = 160) {
|
|
1802
1817
|
if (!messages?.length) return null;
|
|
@@ -3883,7 +3898,7 @@ async function startMcpServer() {
|
|
|
3883
3898
|
);
|
|
3884
3899
|
}
|
|
3885
3900
|
try {
|
|
3886
|
-
const { maxConcurrentAgents } = await import("../app-settings-
|
|
3901
|
+
const { maxConcurrentAgents } = await import("../app-settings-KBL2G7M4.js");
|
|
3887
3902
|
orch.setMaxConcurrent(maxConcurrentAgents());
|
|
3888
3903
|
} catch {
|
|
3889
3904
|
}
|
|
@@ -4186,19 +4201,79 @@ async function startMcpServer() {
|
|
|
4186
4201
|
"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.",
|
|
4187
4202
|
{
|
|
4188
4203
|
id: z9.string().describe("Detached job id (same kebab-case id passed to detached-job.cjs start)"),
|
|
4189
|
-
reason: z9.string().optional().describe("Why you are stopping (hanging, no progress, wrong output, already have the
|
|
4204
|
+
reason: z9.string().optional().describe("Why you are stopping (hanging, no progress, wrong output, already have the answer)")
|
|
4190
4205
|
},
|
|
4191
4206
|
async ({ id, reason }) => {
|
|
4192
4207
|
const result = await stopDetachedJob(process.cwd(), id, { reason });
|
|
4193
4208
|
return mcpJson(result);
|
|
4194
4209
|
}
|
|
4195
4210
|
);
|
|
4211
|
+
server.tool(
|
|
4212
|
+
"list_run_scripts",
|
|
4213
|
+
"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).",
|
|
4214
|
+
{
|
|
4215
|
+
ref: z9.string().optional().describe("Thread id. Omit on a worktree turn (uses cwd).")
|
|
4216
|
+
},
|
|
4217
|
+
async ({ ref }) => {
|
|
4218
|
+
try {
|
|
4219
|
+
const threadRef = resolveRunScriptThreadRef(ref);
|
|
4220
|
+
const scripts = orch.listThreadRunScripts(threadRef);
|
|
4221
|
+
const active = orch.getActiveRuns(threadRef);
|
|
4222
|
+
return mcpJson({ scripts, active, ref: threadRef });
|
|
4223
|
+
} catch (err) {
|
|
4224
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
4225
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
4226
|
+
}
|
|
4227
|
+
}
|
|
4228
|
+
);
|
|
4229
|
+
server.tool(
|
|
4230
|
+
"run_dev_script",
|
|
4231
|
+
"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.",
|
|
4232
|
+
{
|
|
4233
|
+
ref: z9.string().optional().describe("Thread id. Omit on a worktree turn (uses cwd)."),
|
|
4234
|
+
name: z9.string().optional().describe("Script name from list_run_scripts (default script if omitted).")
|
|
4235
|
+
},
|
|
4236
|
+
async ({ ref, name }) => {
|
|
4237
|
+
try {
|
|
4238
|
+
const threadRef = resolveRunScriptThreadRef(ref);
|
|
4239
|
+
const result = await orch.startDev(threadRef, name);
|
|
4240
|
+
return mcpJson({
|
|
4241
|
+
port: result.port,
|
|
4242
|
+
scriptName: result.scriptName,
|
|
4243
|
+
ports: result.ports,
|
|
4244
|
+
url: `http://localhost:${result.port}`,
|
|
4245
|
+
ref: threadRef
|
|
4246
|
+
});
|
|
4247
|
+
} catch (err) {
|
|
4248
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
4249
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
4250
|
+
}
|
|
4251
|
+
}
|
|
4252
|
+
);
|
|
4253
|
+
server.tool(
|
|
4254
|
+
"stop_dev_script",
|
|
4255
|
+
"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).",
|
|
4256
|
+
{
|
|
4257
|
+
ref: z9.string().optional().describe("Thread id. Omit on a worktree turn (uses cwd)."),
|
|
4258
|
+
name: z9.string().optional().describe("Script name to stop; omit to stop all active scripts.")
|
|
4259
|
+
},
|
|
4260
|
+
async ({ ref, name }) => {
|
|
4261
|
+
try {
|
|
4262
|
+
const threadRef = resolveRunScriptThreadRef(ref);
|
|
4263
|
+
orch.stopDev(threadRef, name);
|
|
4264
|
+
return mcpJson({ ok: true, ref: threadRef, stopped: name ?? "all" });
|
|
4265
|
+
} catch (err) {
|
|
4266
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
4267
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
4268
|
+
}
|
|
4269
|
+
}
|
|
4270
|
+
);
|
|
4196
4271
|
if (!worktreeProfile) {
|
|
4197
4272
|
registerSlackTools(server);
|
|
4198
4273
|
registerConnectedIssueVendorTools(server);
|
|
4199
4274
|
registerScheduleTools(server);
|
|
4200
4275
|
const { getCaffeinateHold, setCaffeinateHold } = await import("../caffeinate-hold-OK4JJ5PP.js");
|
|
4201
|
-
const { resolveNewThreadOptions, resolveThreadDefaults } = await import("../app-settings-
|
|
4276
|
+
const { resolveNewThreadOptions, resolveThreadDefaults } = await import("../app-settings-KBL2G7M4.js");
|
|
4202
4277
|
const accountDefaults = resolveThreadDefaults();
|
|
4203
4278
|
const accountDefaultsHint = `Account defaults: agent=${accountDefaults.agent}, model=${accountDefaults.model?.trim() || "Auto"}, effort=${accountDefaults.effort}`;
|
|
4204
4279
|
server.tool(
|
|
@@ -4671,45 +4746,6 @@ async function startMcpServer() {
|
|
|
4671
4746
|
}
|
|
4672
4747
|
}
|
|
4673
4748
|
);
|
|
4674
|
-
server.tool(
|
|
4675
|
-
"run_dev_script",
|
|
4676
|
-
"Start a .sideboard/.conductor run script for a thread (default script if name omitted); returns port",
|
|
4677
|
-
{
|
|
4678
|
-
ref: z9.string(),
|
|
4679
|
-
name: z9.string().optional()
|
|
4680
|
-
},
|
|
4681
|
-
async ({ ref, name }) => {
|
|
4682
|
-
const result = await orch.startDev(ref, name);
|
|
4683
|
-
return mcpJson({
|
|
4684
|
-
port: result.port,
|
|
4685
|
-
scriptName: result.scriptName,
|
|
4686
|
-
ports: result.ports,
|
|
4687
|
-
url: `http://localhost:${result.port}`
|
|
4688
|
-
});
|
|
4689
|
-
}
|
|
4690
|
-
);
|
|
4691
|
-
server.tool(
|
|
4692
|
-
"list_run_scripts",
|
|
4693
|
-
"List named run scripts available for a thread",
|
|
4694
|
-
{ ref: z9.string() },
|
|
4695
|
-
async ({ ref }) => {
|
|
4696
|
-
const scripts = orch.listThreadRunScripts(ref);
|
|
4697
|
-
const active = orch.getActiveRuns(ref);
|
|
4698
|
-
return mcpJson({ scripts, active });
|
|
4699
|
-
}
|
|
4700
|
-
);
|
|
4701
|
-
server.tool(
|
|
4702
|
-
"stop_dev_script",
|
|
4703
|
-
"Stop a running script for a thread (all scripts if name omitted)",
|
|
4704
|
-
{
|
|
4705
|
-
ref: z9.string(),
|
|
4706
|
-
name: z9.string().optional()
|
|
4707
|
-
},
|
|
4708
|
-
async ({ ref, name }) => {
|
|
4709
|
-
orch.stopDev(ref, name);
|
|
4710
|
-
return { content: [{ type: "text", text: "ok" }] };
|
|
4711
|
-
}
|
|
4712
|
-
);
|
|
4713
4749
|
server.tool(
|
|
4714
4750
|
"run_setup",
|
|
4715
4751
|
"Re-run workspace setup (Sideboard/Conductor settings, .cursor/worktrees.json, or script/setup). New worktrees already run this automatically.",
|
|
@@ -10,21 +10,21 @@ import {
|
|
|
10
10
|
resolveSendFollowUp,
|
|
11
11
|
startOrchestration,
|
|
12
12
|
waitForPidExit
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-6HKGCUDN.js";
|
|
14
14
|
import "./chunk-JFOPOMK7.js";
|
|
15
15
|
import "./chunk-YWI3IBP2.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-T7Y5ULHM.js";
|
|
17
|
+
import "./chunk-N7UXGM3Y.js";
|
|
18
18
|
import "./chunk-SXFRXNBM.js";
|
|
19
19
|
import "./chunk-P2BSMNHB.js";
|
|
20
20
|
import "./chunk-VKQGAWHY.js";
|
|
21
|
-
import "./chunk-
|
|
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-
|
|
27
|
+
import "./chunk-RZTRWN2V.js";
|
|
28
28
|
import "./chunk-NSTQ6QKD.js";
|
|
29
29
|
import "./chunk-KGZBYWZ3.js";
|
|
30
30
|
import "./chunk-EQNRWDLN.js";
|
|
@@ -8,11 +8,11 @@ import {
|
|
|
8
8
|
resolveSendFollowUp,
|
|
9
9
|
startOrchestration,
|
|
10
10
|
waitForPidExit
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-UHT6OS7V.js";
|
|
12
12
|
import "./chunk-DJU54RYW.js";
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-LULHFLPU.js";
|
|
14
|
+
import "./chunk-7YKXBFQE.js";
|
|
15
|
+
import "./chunk-AMMRFFB7.js";
|
|
16
16
|
import "./chunk-6K64FJDD.js";
|
|
17
17
|
import "./chunk-PO4M4JAJ.js";
|
|
18
18
|
import "./chunk-ZXJMAKEP.js";
|
|
@@ -20,7 +20,7 @@ import "./chunk-ROPGQRPU.js";
|
|
|
20
20
|
import "./chunk-N7WZ6NIN.js";
|
|
21
21
|
import "./chunk-AXQ4ZWHK.js";
|
|
22
22
|
import "./chunk-TQBUXKIB.js";
|
|
23
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-I5NC7DWO.js";
|
|
24
24
|
import "./chunk-WDRMZKVB.js";
|
|
25
25
|
import "./chunk-4TYXWPAJ.js";
|
|
26
26
|
import "./chunk-JT7R45JB.js";
|
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
primaryCheckoutFromLinkedWorktree,
|
|
6
6
|
removeWorkspace,
|
|
7
7
|
syncWorkspacesFromThreads
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-7YKXBFQE.js";
|
|
9
|
+
import "./chunk-AMMRFFB7.js";
|
|
10
10
|
import "./chunk-6K64FJDD.js";
|
|
11
11
|
import "./chunk-PO4M4JAJ.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-I5NC7DWO.js";
|
|
13
13
|
import "./chunk-WDRMZKVB.js";
|
|
14
14
|
import "./chunk-JT7R45JB.js";
|
|
15
15
|
import "./chunk-3IMSQNTS.js";
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
primaryCheckoutFromLinkedWorktree,
|
|
8
8
|
removeWorkspace,
|
|
9
9
|
syncWorkspacesFromThreads
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-N7UXGM3Y.js";
|
|
11
|
+
import "./chunk-F3GT6DQW.js";
|
|
12
12
|
import "./chunk-D6JWYJ4P.js";
|
|
13
13
|
import "./chunk-HY2GFZ5S.js";
|
|
14
14
|
import "./chunk-X5B3OS5I.js";
|
|
15
15
|
import "./chunk-SZJZEFTY.js";
|
|
16
16
|
import "./chunk-ABOBTSO6.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-RZTRWN2V.js";
|
|
18
18
|
import "./chunk-NSTQ6QKD.js";
|
|
19
19
|
import "./chunk-KGZBYWZ3.js";
|
|
20
20
|
import "./chunk-EQNRWDLN.js";
|
|
@@ -60,13 +60,13 @@ import {
|
|
|
60
60
|
worktreeDisplayLabelForGroup,
|
|
61
61
|
worktreeNameFromPath,
|
|
62
62
|
worktreeSlugForTicket
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-F3GT6DQW.js";
|
|
64
64
|
import "./chunk-D6JWYJ4P.js";
|
|
65
65
|
import "./chunk-HY2GFZ5S.js";
|
|
66
66
|
import "./chunk-X5B3OS5I.js";
|
|
67
67
|
import "./chunk-SZJZEFTY.js";
|
|
68
68
|
import "./chunk-ABOBTSO6.js";
|
|
69
|
-
import "./chunk-
|
|
69
|
+
import "./chunk-RZTRWN2V.js";
|
|
70
70
|
import "./chunk-NSTQ6QKD.js";
|
|
71
71
|
import "./chunk-KGZBYWZ3.js";
|
|
72
72
|
import "./chunk-EQNRWDLN.js";
|
|
@@ -58,10 +58,10 @@ import {
|
|
|
58
58
|
worktreeDisplayLabelForGroup,
|
|
59
59
|
worktreeNameFromPath,
|
|
60
60
|
worktreeSlugForTicket
|
|
61
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-AMMRFFB7.js";
|
|
62
62
|
import "./chunk-6K64FJDD.js";
|
|
63
63
|
import "./chunk-PO4M4JAJ.js";
|
|
64
|
-
import "./chunk-
|
|
64
|
+
import "./chunk-I5NC7DWO.js";
|
|
65
65
|
import "./chunk-WDRMZKVB.js";
|
|
66
66
|
import "./chunk-JT7R45JB.js";
|
|
67
67
|
import "./chunk-3IMSQNTS.js";
|