@sideboard-ai/core 0.1.173 → 0.1.175
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-PCLL36HW.js → abletime-BFIDZR3O.js} +2 -2
- package/dist/{abletime-7VW4EGPT.js → abletime-INEHQH6K.js} +2 -2
- package/dist/agents/cursor-runner.cjs +91 -62
- package/dist/agents/cursor-runner.js +1 -1
- package/dist/{agents-CTWLBPCV.js → agents-2W7LP7JR.js} +6 -6
- package/dist/{agents-7UTRNLXQ.js → agents-AWSFDB47.js} +7 -7
- package/dist/{chunk-QYZYDO3F.js → chunk-7JIYKYLL.js} +26 -5
- package/dist/{chunk-PXNOT6NV.js → chunk-7O53GXTA.js} +26 -5
- package/dist/{chunk-M267JPEA.js → chunk-AN3THU7F.js} +1 -1
- package/dist/{chunk-AQPVBVJE.js → chunk-BBNUL4IE.js} +1 -1
- package/dist/{chunk-LZ6QMEQC.js → chunk-HVIEYTUK.js} +1 -1
- package/dist/{chunk-XD2BAANL.js → chunk-IEEAVWAP.js} +6 -6
- package/dist/{chunk-WE34LOLO.js → chunk-JIWRBNSO.js} +22 -21
- package/dist/{chunk-ELBYOGVA.js → chunk-N7WZ6NIN.js} +10 -1
- package/dist/{chunk-2RM6BZQ2.js → chunk-NA7P3SZL.js} +4 -4
- package/dist/{chunk-XXIH6XYR.js → chunk-NQTKRAUF.js} +167 -35
- package/dist/{chunk-3F7AXVIL.js → chunk-QTJ2ERA6.js} +6 -6
- package/dist/{chunk-SKKEJZEX.js → chunk-RCICB4OM.js} +19 -18
- package/dist/{chunk-CMJ2FBBV.js → chunk-RE2YWFUQ.js} +1 -1
- package/dist/{chunk-234EKD2F.js → chunk-TNOLCU5B.js} +4 -4
- package/dist/{chunk-6GN5WPYZ.js → chunk-VKQGAWHY.js} +10 -1
- package/dist/{chunk-S42XV45P.js → chunk-Y4MIXGPA.js} +1 -1
- package/dist/{chunk-6X6KMUI2.js → chunk-ZXHV3NHY.js} +225 -96
- package/dist/{connected-teams-DBWAMP7G.js → connected-teams-ON2KIKQX.js} +3 -3
- package/dist/{connected-teams-WGONUQOF.js → connected-teams-WOYCH7FR.js} +3 -3
- package/dist/{coordinator-prompt-7CTI6HRH.js → coordinator-prompt-7OHKB5WV.js} +2 -2
- package/dist/{coordinator-prompt-PM6MPYYB.js → coordinator-prompt-XCQCGUED.js} +2 -2
- package/dist/{global-workspace-CMYSFRCM.js → global-workspace-KPROJ54C.js} +2 -2
- package/dist/{global-workspace-CRJ6ZVIY.js → global-workspace-WSQNEALF.js} +2 -2
- package/dist/index.cjs +600 -386
- package/dist/index.d.cts +49 -8
- package/dist/index.d.ts +49 -8
- package/dist/index.js +74 -28
- package/dist/mcp/run-stdio.cjs +795 -581
- package/dist/mcp/run-stdio.js +75 -26
- package/dist/{oauth-A7XXI2TM.js → oauth-6ZQ4Q4XN.js} +2 -2
- package/dist/{oauth-YJBAURIJ.js → oauth-O7UGLZOY.js} +2 -2
- package/dist/{orchestrator-PEOUSLAY.js → orchestrator-PDEU75EE.js} +8 -8
- package/dist/{orchestrator-QBB2RELD.js → orchestrator-QSNGJ2ER.js} +7 -7
- package/dist/{workspaces-L73MCDFA.js → workspaces-P66DGCZE.js} +2 -2
- package/dist/{workspaces-UYSD2STS.js → workspaces-TEBTNS2M.js} +2 -2
- package/dist/{worktree-SQD3DBYC.js → worktree-LC4VRWDM.js} +1 -1
- package/dist/{worktree-WVEDT3FM.js → worktree-UTDBQXSS.js} +1 -1
- package/package.json +1 -1
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
summarizeTurnStderr,
|
|
34
34
|
toolDescription,
|
|
35
35
|
turnFailChatText
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-ZXHV3NHY.js";
|
|
37
37
|
import {
|
|
38
38
|
extractPresentedPlan,
|
|
39
39
|
readPlanFile,
|
|
@@ -64,7 +64,7 @@ import {
|
|
|
64
64
|
stageAbsolutePathsAsAttachments,
|
|
65
65
|
stageBuffersAsAttachments,
|
|
66
66
|
syncWorkspacesFromThreads
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-TNOLCU5B.js";
|
|
68
68
|
import {
|
|
69
69
|
addPrStackLayer,
|
|
70
70
|
allocateTeamName,
|
|
@@ -114,7 +114,7 @@ import {
|
|
|
114
114
|
worktreeDisplayLabelForGroup,
|
|
115
115
|
worktreeNameFromPath,
|
|
116
116
|
worktreeSlugForTicket
|
|
117
|
-
} from "./chunk-
|
|
117
|
+
} from "./chunk-7O53GXTA.js";
|
|
118
118
|
import {
|
|
119
119
|
ATTACHMENTS_DIR,
|
|
120
120
|
DETACHED_JOBS_DIR,
|
|
@@ -401,7 +401,7 @@ async function continueSourceThread(threadId, prompt) {
|
|
|
401
401
|
await continueOnReply(threadId, prompt);
|
|
402
402
|
return;
|
|
403
403
|
}
|
|
404
|
-
const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-
|
|
404
|
+
const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-QSNGJ2ER.js");
|
|
405
405
|
await getOrchestrator2().send(threadId, prompt);
|
|
406
406
|
} catch {
|
|
407
407
|
}
|
|
@@ -794,9 +794,9 @@ async function spawnAgentTurn(thread, input, onEvent) {
|
|
|
794
794
|
`Cannot spawn ${thread.agent}: thread ${thread.id} has no worktreePath`
|
|
795
795
|
);
|
|
796
796
|
}
|
|
797
|
-
const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-
|
|
797
|
+
const { isGlobalThread: isGlobalThread2 } = await import("./global-workspace-WSQNEALF.js");
|
|
798
798
|
if (isGlobalThread2(thread)) {
|
|
799
|
-
const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-
|
|
799
|
+
const { ensureGlobalCoordinatorCwd: ensureGlobalCoordinatorCwd2 } = await import("./coordinator-prompt-XCQCGUED.js");
|
|
800
800
|
ensureGlobalCoordinatorCwd2(
|
|
801
801
|
isOrchestratorThread(thread) ? { orchestratorThreadId: thread.id } : void 0
|
|
802
802
|
);
|
|
@@ -1355,7 +1355,7 @@ function buildSessionSeed(messages, opts) {
|
|
|
1355
1355
|
for (let i = blocks.length - 1; i >= 0; i--) {
|
|
1356
1356
|
if (keep[i]) continue;
|
|
1357
1357
|
const next = used + blocks[i].length + 2;
|
|
1358
|
-
if (next > maxChars && used > 0)
|
|
1358
|
+
if (next > maxChars && used > 0) continue;
|
|
1359
1359
|
keep[i] = true;
|
|
1360
1360
|
used = next;
|
|
1361
1361
|
}
|
|
@@ -2683,7 +2683,7 @@ function jobAlive(pid) {
|
|
|
2683
2683
|
}
|
|
2684
2684
|
function processGroupAlive(pgid) {
|
|
2685
2685
|
if (process.platform === "win32") return false;
|
|
2686
|
-
if (!Number.isInteger(pgid) || pgid <=
|
|
2686
|
+
if (!Number.isInteger(pgid) || pgid <= 1) return false;
|
|
2687
2687
|
try {
|
|
2688
2688
|
process.kill(-pgid, 0);
|
|
2689
2689
|
return true;
|
|
@@ -2726,7 +2726,7 @@ function listRunningDetachedJobs(worktreePath) {
|
|
|
2726
2726
|
for (const id of ids) {
|
|
2727
2727
|
const dir = resolveJobDir(root, id);
|
|
2728
2728
|
const pid = readIntFile(join11(dir, "pid"));
|
|
2729
|
-
if (
|
|
2729
|
+
if (jobTreeAlive(pid)) running.push(id);
|
|
2730
2730
|
}
|
|
2731
2731
|
return running.sort();
|
|
2732
2732
|
}
|
|
@@ -3555,7 +3555,7 @@ async function createThread(input, _onSetupLine) {
|
|
|
3555
3555
|
let sourceIsFork = false;
|
|
3556
3556
|
if (!input.cowboy && sourceType === "branch" && (!sourceRef || sourceRef === "HEAD" || sourceRef === "default")) {
|
|
3557
3557
|
if (isAbleTimeConnected() && getIssueSource() === "abletime") {
|
|
3558
|
-
const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-
|
|
3558
|
+
const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-BFIDZR3O.js");
|
|
3559
3559
|
const task = await ensureAbleTimeTask({
|
|
3560
3560
|
title: title?.trim() || "Untitled work",
|
|
3561
3561
|
description: input.prompt?.trim() || void 0
|
|
@@ -4063,7 +4063,7 @@ async function adoptThread(input) {
|
|
|
4063
4063
|
messages: input.messages ?? []
|
|
4064
4064
|
});
|
|
4065
4065
|
writeThread(thread);
|
|
4066
|
-
const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-
|
|
4066
|
+
const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-P66DGCZE.js");
|
|
4067
4067
|
await ensureWorkspace2(repoPath);
|
|
4068
4068
|
const { ensureWorktreeSideboardIgnored: ensureWorktreeSideboardIgnored2 } = await import("./worktree-exclude-N5X5I422.js");
|
|
4069
4069
|
await ensureWorktreeSideboardIgnored2(input.worktreePath);
|
|
@@ -6339,7 +6339,7 @@ function formatScheduledPrompt(name, prompt) {
|
|
|
6339
6339
|
${prompt}`;
|
|
6340
6340
|
}
|
|
6341
6341
|
async function defaultDeps() {
|
|
6342
|
-
const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-
|
|
6342
|
+
const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-QSNGJ2ER.js");
|
|
6343
6343
|
const orch = getOrchestrator2();
|
|
6344
6344
|
return {
|
|
6345
6345
|
findThread: (id) => findThreadByRef(id),
|
|
@@ -7127,9 +7127,10 @@ var Orchestrator = class {
|
|
|
7127
7127
|
ts: (/* @__PURE__ */ new Date()).toISOString()
|
|
7128
7128
|
});
|
|
7129
7129
|
thread = this.requireThread(threadId);
|
|
7130
|
+
const gitPrompt = expandCanonicalGitRequest(prompt);
|
|
7130
7131
|
const { agentPrompt: expandedPrompt } = expandComposerPrompt(
|
|
7131
7132
|
thread.worktreePath,
|
|
7132
|
-
|
|
7133
|
+
gitPrompt,
|
|
7133
7134
|
{
|
|
7134
7135
|
attachments: sentAttachments ?? thread.attachments
|
|
7135
7136
|
}
|
|
@@ -7171,13 +7172,13 @@ var Orchestrator = class {
|
|
|
7171
7172
|
artifactReminder,
|
|
7172
7173
|
longRunningReminder
|
|
7173
7174
|
].filter(Boolean).join("\n\n") || void 0;
|
|
7174
|
-
const prGateDirective = thread.agent !== "brightsy" && !isOrchestratorThread(thread) && mentionsPrGoal(
|
|
7175
|
+
const prGateDirective = thread.agent !== "brightsy" && !isOrchestratorThread(thread) && mentionsPrGoal(prompt) ? formatPrGateDirective() : null;
|
|
7175
7176
|
const agentPrompt = [
|
|
7176
7177
|
thread.planMode ? PLAN_MODE_INSTRUCTION : null,
|
|
7177
7178
|
orchestrationReminder,
|
|
7178
7179
|
prGateDirective,
|
|
7179
7180
|
slackReplyContext,
|
|
7180
|
-
|
|
7181
|
+
expandedPrompt
|
|
7181
7182
|
].filter(Boolean).join("\n\n");
|
|
7182
7183
|
if (thread.attachments.length > 0) {
|
|
7183
7184
|
updateThread(threadId, { attachments: [] });
|
|
@@ -8424,7 +8425,7 @@ var Orchestrator = class {
|
|
|
8424
8425
|
this.emit({ type: "status_changed", threadId: archived.id, status: "archived" });
|
|
8425
8426
|
if (thread.repoPath && !isGlobalRepoPath(thread.repoPath)) {
|
|
8426
8427
|
try {
|
|
8427
|
-
const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-
|
|
8428
|
+
const { ensureWorkspace: ensureWorkspace2 } = await import("./workspaces-P66DGCZE.js");
|
|
8428
8429
|
await ensureWorkspace2(thread.repoPath);
|
|
8429
8430
|
} catch {
|
|
8430
8431
|
}
|
|
@@ -8478,7 +8479,7 @@ var Orchestrator = class {
|
|
|
8478
8479
|
`Cowboy checkout missing: ${thread.worktreePath}. Re-add the project folder, then restore.`
|
|
8479
8480
|
);
|
|
8480
8481
|
}
|
|
8481
|
-
const { createThreadWorktree: createThreadWorktree2 } = await import("./worktree-
|
|
8482
|
+
const { createThreadWorktree: createThreadWorktree2 } = await import("./worktree-LC4VRWDM.js");
|
|
8482
8483
|
const slug = thread.worktreePath.split("/").pop();
|
|
8483
8484
|
const dest = thread.worktreePath;
|
|
8484
8485
|
await withRepoGitLock(thread.repoPath, async () => {
|
|
@@ -8588,7 +8589,7 @@ async function startOrchestration(opts) {
|
|
|
8588
8589
|
sourceRef: "default",
|
|
8589
8590
|
...createOpts
|
|
8590
8591
|
}).catch(async () => {
|
|
8591
|
-
const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-
|
|
8592
|
+
const { resolveDefaultBranch: resolveDefaultBranch2, resolveRepoRoot: resolveRepoRoot2 } = await import("./worktree-LC4VRWDM.js");
|
|
8592
8593
|
const repo = await resolveRepoRoot2(repoPath);
|
|
8593
8594
|
const def = await resolveDefaultBranch2(repo);
|
|
8594
8595
|
return orch.createThread({
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
resolveRepoRoot,
|
|
8
8
|
takenSlugsFromThread,
|
|
9
9
|
teamSlugFromName
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-7O53GXTA.js";
|
|
11
11
|
import {
|
|
12
12
|
ATTACHMENTS_DIR,
|
|
13
13
|
attachmentsGitignoreBody
|
|
@@ -345,7 +345,7 @@ var COORDINATOR_TOOL_PLAYBOOK = [
|
|
|
345
345
|
"Workspaces:",
|
|
346
346
|
"- add_workspace / remove_workspace \u2014 register or unregister a git repo",
|
|
347
347
|
"Worktree threads (chats):",
|
|
348
|
-
"- create_thread \u2014 create a worktree + chat from branch | pr | ticket (appears on Home). Do not create a second worktree for a ticket, PR, or named branch that already has one \u2014 that call returns the live thread (alreadyStarted=true). Creating from the default branch still opens a new isolated worktree. Pass repoPath + parentThreadId; omit agent and model
|
|
348
|
+
"- create_thread \u2014 create a worktree + chat from branch | pr | ticket (appears on Home). Do not create a second worktree for a ticket, PR, or named branch that already has one \u2014 that call returns the live thread (alreadyStarted=true). Creating from the default branch still opens a new isolated worktree. Pass repoPath + parentThreadId; omit agent and model so Sideboard applies Settings \u2192 Default agent, model & effort (never pass your own agent or agent=cursor). If the repo has a setup script, Sideboard runs it in the background (does not block send_to_thread). Nested Codex (you are Codex and the child is Codex) deadlocks \u2014 omit agent; Sideboard coerces that case",
|
|
349
349
|
"- start_board_card \u2014 same as create_thread for a ticket/PR/named branch (attaches issue text when resolvable). Then send_to_thread.",
|
|
350
350
|
"- fork_worktree \u2014 fork a worktree chat into a NEW git worktree + chat (transcript attached); optional agent; leave model unset (Auto) unless you have a reason. Not for orchestration chats.",
|
|
351
351
|
"- fork_chat \u2014 fork a worktree chat (same worktree tab) OR a Global orchestration chat (new orchestration tab); optional agent; leave model unset (Auto) unless you have a reason. Remote coordinators: use this to continue another orchestration chat on a different agent after session limits.",
|
|
@@ -486,8 +486,8 @@ function ensureGlobalCoordinatorCwd(opts) {
|
|
|
486
486
|
"",
|
|
487
487
|
"When creating threads, pass `repoPath` from `list_workspaces` (or the path you just registered).",
|
|
488
488
|
orchId ? `Pass parentThreadId="${orchId}" (or omit it). Never invent another parentThreadId.` : "Pass `parentThreadId` for children (this chat's id from the turn reminder).",
|
|
489
|
-
"Omit `agent` / `model` on `create_thread
|
|
490
|
-
"Never pass `agent=codex` when you yourself are Codex \u2014 nested Codex deadlocks on shared ~/.codex locks. Omit agent
|
|
489
|
+
"Omit `agent` / `model` on `create_thread`. Sideboard applies Settings \u2192 Default agent, model & effort. Do not pass your own agent or `agent=cursor` \u2014 those are ignored.",
|
|
490
|
+
"Never pass `agent=codex` when you yourself are Codex \u2014 nested Codex deadlocks on shared ~/.codex locks. Omit agent; Sideboard applies Account defaults (and coerces only that nested-Codex case).",
|
|
491
491
|
"Typical flow (Home board): list_board \u2192 create_thread (sourceType=ticket|pr|branch) \u2192 send_to_thread \u2192 wait_for_turn (loop while stillRunning) \u2192 ask_git create-draft \u2192 wait_for_turn. Merge only if the user explicitly asked (`ask_git` merge).",
|
|
492
492
|
"Typical flow (branch / explicit source): list_workspaces \u2192 list_branches|list_prs|list_issues \u2192 create_thread \u2192 send_to_thread \u2192 wait_for_turn (loop while stillRunning) \u2192 ask_git create-draft.",
|
|
493
493
|
"Typical flow (find work): list_workspaces \u2192 pick repo(s) matching account / project context \u2192 Sideboard list_issues / linear_* (tickets) or list_prs(queue=review) (reviews) \u2192 show the options. Never wait on Claude Linear MCP. Only create_thread + send_to_thread when they asked to start (e.g. \u201Cfind me work and start it\u201D) \u2014 then wait_for_turn (loop while stillRunning) \u2192 ask_git create-draft.",
|
|
@@ -3,17 +3,26 @@
|
|
|
3
3
|
|
|
4
4
|
// src/http/fetch.ts
|
|
5
5
|
var injected = null;
|
|
6
|
+
var TLS_ISSUER_RE = /UNABLE_TO_GET_ISSUER_CERT|UNABLE_TO_VERIFY_LEAF_SIGNATURE|SELF_SIGNED_CERT_IN_CHAIN/i;
|
|
7
|
+
var TLS_ISSUER_HINT = " \u2014 Node rejected the TLS certificate (corporate VPN/proxy CA). Desktop Linear can still work; reconnecting the API key will not fix this.";
|
|
8
|
+
function tlsIssuerHint(code, message) {
|
|
9
|
+
const text = `${code ?? ""} ${message}`;
|
|
10
|
+
return TLS_ISSUER_RE.test(text) ? TLS_ISSUER_HINT : "";
|
|
11
|
+
}
|
|
6
12
|
function formatFetchError(err, url) {
|
|
7
13
|
if (!(err instanceof Error)) return `${String(err)} (${url})`;
|
|
8
14
|
const cause = err.cause;
|
|
9
15
|
let detail = "";
|
|
16
|
+
let hint = tlsIssuerHint(void 0, err.message);
|
|
10
17
|
if (cause instanceof Error) {
|
|
11
18
|
const code = typeof cause.code === "string" ? cause.code : void 0;
|
|
12
19
|
detail = code ? ` [${code}: ${cause.message}]` : ` [${cause.message}]`;
|
|
20
|
+
hint = tlsIssuerHint(code, `${err.message} ${cause.message}`) || hint;
|
|
13
21
|
} else if (cause != null) {
|
|
14
22
|
detail = ` [${String(cause)}]`;
|
|
23
|
+
hint = tlsIssuerHint(void 0, String(cause)) || hint;
|
|
15
24
|
}
|
|
16
|
-
return `${err.message}${detail} (${url})`;
|
|
25
|
+
return `${err.message}${detail} (${url})${hint}`;
|
|
17
26
|
}
|
|
18
27
|
async function httpFetch(input, init) {
|
|
19
28
|
const url = typeof input === "string" ? input : input.href;
|