@sideboard-ai/core 0.1.175 → 0.1.177

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.
@@ -7844,7 +7844,7 @@ function ensureGlobalCoordinatorCwd(opts) {
7844
7844
  "When creating threads, pass `repoPath` from `list_workspaces` (or the path you just registered).",
7845
7845
  orchId ? `Pass parentThreadId="${orchId}" (or omit it). Never invent another parentThreadId.` : "Pass `parentThreadId` for children (this chat's id from the turn reminder).",
7846
7846
  "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.",
7847
- "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).",
7847
+ "Never pass `agent=codex` when you yourself are Codex \u2014 nested Codex can deadlock on shared ~/.codex locks. Omit agent; Sideboard applies Account defaults, and switches that nested-Codex case to Cursor only when a CURSOR_API_KEY is configured.",
7848
7848
  "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).",
7849
7849
  "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.",
7850
7850
  "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.",
@@ -7921,7 +7921,7 @@ var init_coordinator_prompt = __esm({
7921
7921
  "Workspaces:",
7922
7922
  "- add_workspace / remove_workspace \u2014 register or unregister a git repo",
7923
7923
  "Worktree threads (chats):",
7924
- "- 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",
7924
+ "- 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 would be Codex) can deadlock on ~/.codex locks \u2014 omit agent; Sideboard switches the child to Cursor when a CURSOR_API_KEY is set, otherwise keeps the Account default",
7925
7925
  "- start_board_card \u2014 same as create_thread for a ticket/PR/named branch (attaches issue text when resolvable). Then send_to_thread.",
7926
7926
  "- 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.",
7927
7927
  "- 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.",
@@ -7936,9 +7936,9 @@ var init_coordinator_prompt = __esm({
7936
7936
  "- get_diff \u2014 compact diff summary",
7937
7937
  "- get_pr_checks \u2014 snapshot of a worktree thread's PR checks (null = no PR). Use this to inspect status. If the user gave a goal, the worktree agent watches with `gh pr checks --watch` \u2014 do not poll for the human.",
7938
7938
  '- request_review \u2014 open a Review chat tab on a worktree thread (attaches .claude/skills/review/SKILL.md when present, else .context/review.md copied from .sideboard/review.md / stock; sends "Review changes in this workspace."); then wait_for_turn (loop while stillRunning) / get_turn_result on the returned id',
7939
- "- ask_git \u2014 commit & push, open a draft PR, resolve conflicts, or merge. When the worktree is clean, Sideboard pushes / opens the PR itself. When dirty, it queues the worktree agent \u2014 then wait_for_turn (loop while stillRunning). Prefer this over paraphrasing. If ask_git / get_thread lastError says the GraphQL/PR body is too long, the branch is already pushed \u2014 send_to_thread so the worktree agent runs `gh pr create --body-file` with a short description. Do not invent SSH or auth failures from that error. If the user gave a goal (Greptile 5/5, CI green), send_to_thread that goal so the worktree agent enters the watch-fix-push loop \u2014 do not tell the human to poll.",
7939
+ "- ask_git \u2014 commit & push, open a draft PR, mark ready for review, resolve conflicts, or merge. When the worktree is clean, Sideboard pushes / opens the PR itself. When dirty, it queues the worktree agent \u2014 then wait_for_turn (loop while stillRunning). Prefer this over paraphrasing. If ask_git / get_thread lastError says the GraphQL/PR body is too long, the branch is already pushed \u2014 send_to_thread so the worktree agent runs `gh pr create --body-file` with a short description. Do not invent SSH or auth failures from that error. If the user gave a goal (Greptile 5/5, CI green), send_to_thread that goal so the worktree agent enters the watch-fix-push loop \u2014 do not tell the human to poll.",
7940
7940
  '- Merge (`ask_git` action=merge / send_to_thread "Merge PR.") only when the user explicitly asked to merge that PR. Do not merge because the work looks done, CI is green, or a typical flow includes it.',
7941
- '- Or send_to_thread with those exact phrases: "Commit and push.", "Commit, push, and open a draft PR.", "Merge the remote branch (main) into your branch and resolve conflicts. Then, commit and push your changes.", "Merge PR." (draft PRs: `gh pr create --draft -R <origin-owner/name>` using the workspace `github:` slug \u2014 never upstream). Never run git/gh from this orchestration cwd, and never merge the PR yourself.',
7941
+ '- Or send_to_thread with those exact phrases: "Commit and push.", "Commit, push, and open a draft PR.", "Ready for review.", "Merge the remote branch (main) into your branch and resolve conflicts. Then, commit and push your changes.", "Merge PR." (draft PRs: `gh pr create --draft -R <origin-owner/name>` using the workspace `github:` slug \u2014 never upstream). Never run git/gh from this orchestration cwd, and never merge the PR yourself.',
7942
7942
  "Process guides:",
7943
7943
  "- Long child jobs (pack, test, deploy, anything that may run more than ~30s): workers always have `/long-running` (Sideboard product skill). Tell them to detach and wait; they may `stop_job` if it hangs or is doing the wrong thing; do not ask the human to poll.",
7944
7944
  "- Recurring multi-item / fan-out: if the child worktree has `.claude/skills/graph-engineering/SKILL.md`, tell the worker to follow it (`/graph-engineering`). Judge first; state on disk; grow the rulebook; do not patch three threads.",
@@ -11296,6 +11296,9 @@ function resolveCursorApiKey() {
11296
11296
  if (fromEnv) return fromEnv;
11297
11297
  return (loadAppSettings().environment.CURSOR_API_KEY || "").trim();
11298
11298
  }
11299
+ function isCursorApiKeyConfigured() {
11300
+ return Boolean(resolveCursorApiKey());
11301
+ }
11299
11302
  async function listCursorModels() {
11300
11303
  const now = Date.now();
11301
11304
  if (cachedModels && now - cachedModels.at < MODEL_CACHE_MS) {
@@ -12468,6 +12471,8 @@ function agentGitPrompt(action, opts) {
12468
12471
  const named = base ? ` (${base})` : "";
12469
12472
  return `Merge the remote branch${named} into your branch and resolve conflicts. Then, commit and push your changes.`;
12470
12473
  }
12474
+ case "ready-for-review":
12475
+ return "Ready for review.";
12471
12476
  case "merge":
12472
12477
  return "Merge PR.";
12473
12478
  }
@@ -12482,6 +12487,8 @@ function gitActionExpansion(action, base) {
12482
12487
  return "Commit, push, then `gh pr create --web -R <origin-owner/name>`.";
12483
12488
  case "resolve-conflicts":
12484
12489
  return `Fetch the PR base${base ? ` (\`${base}\`)` : ""}, merge it into this branch, resolve conflicts carefully, then commit and push until the PR is mergeable.`;
12490
+ case "ready-for-review":
12491
+ return "This phrase is the explicit ask to mark this thread's draft pull request ready for review on GitHub (`gh pr ready -R <origin-owner/name>` or `gh pr ready`). Update title/body if the purpose drifted. Do not merge.";
12485
12492
  case "merge":
12486
12493
  return "This phrase is the explicit ask to merge this thread's open pull request on GitHub. If `gh stack view` shows a stack, use `gh stack merge`; otherwise `gh pr merge` (respect repo defaults / squash vs merge). Do not force-push main/master or merge locally into the main checkout.";
12487
12494
  }
@@ -12524,6 +12531,7 @@ var init_agent_git_actions = __esm({
12524
12531
  "create-draft",
12525
12532
  "create-web",
12526
12533
  "resolve-conflicts",
12534
+ "ready-for-review",
12527
12535
  "merge"
12528
12536
  ];
12529
12537
  RESOLVE_CONFLICTS_RE = /^Merge the remote branch(?: \(([^)]+)\))? into your branch and resolve conflicts\. Then, commit and push your changes\.$/;
@@ -18114,7 +18122,7 @@ function formatWorktreeDirective(thread, opts) {
18114
18122
  );
18115
18123
  }
18116
18124
  lines.push(
18117
- '- Sideboard git buttons send short phrases ("Commit and push.", "Merge PR.", \u2026) with their meaning attached \u2014 act on them without asking for clarification. If the user gives a goal (Greptile 5/5, CI green, until checks pass), you get the watch-fix-push playbook with that request.'
18125
+ '- Sideboard git buttons send short phrases ("Commit and push.", "Ready for review.", "Merge PR.", \u2026) with their meaning attached \u2014 act on them without asking for clarification. If the user gives a goal (Greptile 5/5, CI green, until checks pass), you get the watch-fix-push playbook with that request.'
18118
18126
  );
18119
18127
  lines.push("");
18120
18128
  lines.push(formatProcessGuideDirective({ worktreePath: thread.worktreePath }));
@@ -19163,6 +19171,7 @@ __export(orchestrator_exports, {
19163
19171
  Orchestrator: () => Orchestrator,
19164
19172
  getOrchestrator: () => getOrchestrator,
19165
19173
  isPidAlive: () => isPidAlive,
19174
+ resolveSendFollowUp: () => resolveSendFollowUp,
19166
19175
  startOrchestration: () => startOrchestration,
19167
19176
  waitForPidExit: () => waitForPidExit
19168
19177
  });
@@ -19183,6 +19192,10 @@ async function waitForPidExit(pid, timeoutMs) {
19183
19192
  }
19184
19193
  return true;
19185
19194
  }
19195
+ function resolveSendFollowUp(thread, requested) {
19196
+ if (requested === "steer" || requested === "queue") return requested;
19197
+ return isOrchestratorThread(thread) ? followUpBehavior() : "queue";
19198
+ }
19186
19199
  function writeLiveStatus(threadId, status, lastError) {
19187
19200
  const latest = readThread(threadId);
19188
19201
  if (!latest || latest.status === "archived") return latest;
@@ -19775,13 +19788,13 @@ var init_orchestrator = __esm({
19775
19788
  if (thread.status === "archived") {
19776
19789
  throw new Error(`Thread is archived: ${thread.id}`);
19777
19790
  }
19778
- const followUp = opts?.followUp === "steer" ? "steer" : "queue";
19779
19791
  let shouldSteer = false;
19780
19792
  const sent = await withThreadLock(thread.id, async () => {
19781
19793
  const current = this.requireThread(thread.id);
19782
19794
  if (current.status === "archived") {
19783
19795
  throw new Error(`Thread is archived: ${thread.id}`);
19784
19796
  }
19797
+ const followUp = resolveSendFollowUp(current, opts?.followUp);
19785
19798
  const queue = [...current.queue, prompt];
19786
19799
  this.crashContinued.delete(thread.id);
19787
19800
  this.jobContinueCount.delete(thread.id);
@@ -21106,7 +21119,7 @@ var init_orchestrator = __esm({
21106
21119
  "ask_git targets a worktree agent thread (not the orchestrator). Pass a child/worktree thread ref."
21107
21120
  );
21108
21121
  }
21109
- if (action === "merge" && !thread.prUrl) {
21122
+ if ((action === "merge" || action === "ready-for-review") && !thread.prUrl) {
21110
21123
  throw new Error(
21111
21124
  "No pull request linked. Ask the worktree agent to open a draft PR first (ask_git create-draft)."
21112
21125
  );
@@ -24221,11 +24234,13 @@ async function getHomeBoardInputs(workspaces, opts) {
24221
24234
  init_home_board();
24222
24235
 
24223
24236
  // src/mcp/create-thread-agent.ts
24237
+ init_cursor();
24224
24238
  function resolveOrchCreateThreadOptions(input) {
24225
24239
  const { resolveNewThreadOptions: resolveNewThreadOptions2 } = input;
24226
24240
  const account = resolveNewThreadOptions2({});
24227
24241
  const requested = input.requestedAgent;
24228
24242
  const parent = input.parentAgent ?? void 0;
24243
+ const cursorReady = input.cursorReady ?? isCursorApiKeyConfigured();
24229
24244
  let agent = account.agent;
24230
24245
  let ignoredAgent;
24231
24246
  let honorRequestedModel = false;
@@ -24240,7 +24255,7 @@ function resolveOrchCreateThreadOptions(input) {
24240
24255
  }
24241
24256
  }
24242
24257
  let coercedFrom;
24243
- if (agent === "codex" && parent === "codex") {
24258
+ if (agent === "codex" && parent === "codex" && cursorReady) {
24244
24259
  coercedFrom = requested ?? "codex";
24245
24260
  agent = "cursor";
24246
24261
  }
@@ -24256,7 +24271,7 @@ function resolveOrchCreateThreadOptions(input) {
24256
24271
  }
24257
24272
  function orchCreateThreadAgentNote(input) {
24258
24273
  if (input.coercedFrom) {
24259
- return `Avoid nested Codex under a Codex orchestrator \u2014 used Account default agent=${input.agent}`;
24274
+ return `Avoid nested Codex under a Codex orchestrator \u2014 used agent=${input.agent}`;
24260
24275
  }
24261
24276
  if (input.ignoredAgent) {
24262
24277
  return `Ignored agent=${input.ignoredAgent} \u2014 used Account default agent=${input.agent}`;
@@ -25026,11 +25041,11 @@ async function startMcpServer() {
25026
25041
  );
25027
25042
  server.tool(
25028
25043
  "ask_git",
25029
- "Commit & push, open a draft PR, resolve conflicts, or merge \u2014 same actions as the desktop git buttons. When the worktree is clean, Sideboard pushes / opens the PR itself (HTTPS via `gh` even when origin is SSH / Settings \u2192 Git is SSH). When dirty, queues the worktree agent to commit; then wait_for_turn (loop while stillRunning). Do not start a checks loop on a plain push \u2014 only if the user gave a goal (Greptile 5/5, CI green). Pass a worktree thread ref (not the orchestrator). action=merge only when the user explicitly asked to merge that PR. Do not run git or gh from the orchestration cwd. If this tool errors that the GraphQL/PR body is too long, the branch is already pushed \u2014 have the worktree agent retry `gh pr create --body-file` with a short description (GitHub limit 65,536 characters). Do not invent SSH/auth failures from that error.",
25044
+ "Commit & push, open a draft PR, mark ready for review, resolve conflicts, or merge \u2014 same actions as the desktop git buttons. When the worktree is clean, Sideboard pushes / opens the PR itself (HTTPS via `gh` even when origin is SSH / Settings \u2192 Git is SSH). When dirty, queues the worktree agent to commit; then wait_for_turn (loop while stillRunning). Do not start a checks loop on a plain push \u2014 only if the user gave a goal (Greptile 5/5, CI green). Pass a worktree thread ref (not the orchestrator). action=ready-for-review and action=merge only when the user explicitly asked (or clicked the desktop button). Do not run git or gh from the orchestration cwd. If this tool errors that the GraphQL/PR body is too long, the branch is already pushed \u2014 have the worktree agent retry `gh pr create --body-file` with a short description (GitHub limit 65,536 characters). Do not invent SSH/auth failures from that error.",
25030
25045
  {
25031
25046
  ref: import_zod8.z.string().describe("Worktree thread id/ref"),
25032
25047
  action: import_zod8.z.enum(AGENT_GIT_ACTIONS).describe(
25033
- "commit-push | create-draft | create-web | resolve-conflicts | merge"
25048
+ "commit-push | create-draft | create-web | resolve-conflicts | ready-for-review | merge"
25034
25049
  )
25035
25050
  },
25036
25051
  async ({ ref, action }) => {
@@ -37,15 +37,16 @@ import {
37
37
  syncBoardPins,
38
38
  updateSchedule,
39
39
  waitForDetachedJob
40
- } from "../chunk-RCICB4OM.js";
40
+ } from "../chunk-DJUDDKXM.js";
41
41
  import {
42
42
  applySystemCaEnv,
43
+ isCursorApiKeyConfigured,
43
44
  isInternalAgentStatusText,
44
45
  listModelsForAgent,
45
46
  materializeSystemCaBundle,
46
47
  sideboardMcpProfile,
47
48
  trustSystemCertificates
48
- } from "../chunk-ZXHV3NHY.js";
49
+ } from "../chunk-W44EKPIR.js";
49
50
  import "../chunk-HVIEYTUK.js";
50
51
  import "../chunk-Y4MIXGPA.js";
51
52
  import {
@@ -70,7 +71,7 @@ import {
70
71
  GLOBAL_WORKSPACE_ID,
71
72
  isCloudCoordinatorThread,
72
73
  listWorkspaces
73
- } from "../chunk-TNOLCU5B.js";
74
+ } from "../chunk-FJWQCZ74.js";
74
75
  import {
75
76
  canonicalizeRepoPath,
76
77
  formatGhLandError,
@@ -2872,6 +2873,7 @@ function resolveOrchCreateThreadOptions(input) {
2872
2873
  const account = resolveNewThreadOptions({});
2873
2874
  const requested = input.requestedAgent;
2874
2875
  const parent = input.parentAgent ?? void 0;
2876
+ const cursorReady = input.cursorReady ?? isCursorApiKeyConfigured();
2875
2877
  let agent = account.agent;
2876
2878
  let ignoredAgent;
2877
2879
  let honorRequestedModel = false;
@@ -2886,7 +2888,7 @@ function resolveOrchCreateThreadOptions(input) {
2886
2888
  }
2887
2889
  }
2888
2890
  let coercedFrom;
2889
- if (agent === "codex" && parent === "codex") {
2891
+ if (agent === "codex" && parent === "codex" && cursorReady) {
2890
2892
  coercedFrom = requested ?? "codex";
2891
2893
  agent = "cursor";
2892
2894
  }
@@ -2902,7 +2904,7 @@ function resolveOrchCreateThreadOptions(input) {
2902
2904
  }
2903
2905
  function orchCreateThreadAgentNote(input) {
2904
2906
  if (input.coercedFrom) {
2905
- return `Avoid nested Codex under a Codex orchestrator \u2014 used Account default agent=${input.agent}`;
2907
+ return `Avoid nested Codex under a Codex orchestrator \u2014 used agent=${input.agent}`;
2906
2908
  }
2907
2909
  if (input.ignoredAgent) {
2908
2910
  return `Ignored agent=${input.ignoredAgent} \u2014 used Account default agent=${input.agent}`;
@@ -3672,11 +3674,11 @@ async function startMcpServer() {
3672
3674
  );
3673
3675
  server.tool(
3674
3676
  "ask_git",
3675
- "Commit & push, open a draft PR, resolve conflicts, or merge \u2014 same actions as the desktop git buttons. When the worktree is clean, Sideboard pushes / opens the PR itself (HTTPS via `gh` even when origin is SSH / Settings \u2192 Git is SSH). When dirty, queues the worktree agent to commit; then wait_for_turn (loop while stillRunning). Do not start a checks loop on a plain push \u2014 only if the user gave a goal (Greptile 5/5, CI green). Pass a worktree thread ref (not the orchestrator). action=merge only when the user explicitly asked to merge that PR. Do not run git or gh from the orchestration cwd. If this tool errors that the GraphQL/PR body is too long, the branch is already pushed \u2014 have the worktree agent retry `gh pr create --body-file` with a short description (GitHub limit 65,536 characters). Do not invent SSH/auth failures from that error.",
3677
+ "Commit & push, open a draft PR, mark ready for review, resolve conflicts, or merge \u2014 same actions as the desktop git buttons. When the worktree is clean, Sideboard pushes / opens the PR itself (HTTPS via `gh` even when origin is SSH / Settings \u2192 Git is SSH). When dirty, queues the worktree agent to commit; then wait_for_turn (loop while stillRunning). Do not start a checks loop on a plain push \u2014 only if the user gave a goal (Greptile 5/5, CI green). Pass a worktree thread ref (not the orchestrator). action=ready-for-review and action=merge only when the user explicitly asked (or clicked the desktop button). Do not run git or gh from the orchestration cwd. If this tool errors that the GraphQL/PR body is too long, the branch is already pushed \u2014 have the worktree agent retry `gh pr create --body-file` with a short description (GitHub limit 65,536 characters). Do not invent SSH/auth failures from that error.",
3676
3678
  {
3677
3679
  ref: z8.string().describe("Worktree thread id/ref"),
3678
3680
  action: z8.enum(AGENT_GIT_ACTIONS).describe(
3679
- "commit-push | create-draft | create-web | resolve-conflicts | merge"
3681
+ "commit-push | create-draft | create-web | resolve-conflicts | ready-for-review | merge"
3680
3682
  )
3681
3683
  },
3682
3684
  async ({ ref, action }) => {
@@ -3,12 +3,13 @@ import {
3
3
  Orchestrator,
4
4
  getOrchestrator,
5
5
  isPidAlive,
6
+ resolveSendFollowUp,
6
7
  startOrchestration,
7
8
  waitForPidExit
8
- } from "./chunk-JIWRBNSO.js";
9
+ } from "./chunk-DVYRABZC.js";
9
10
  import "./chunk-DJU54RYW.js";
10
- import "./chunk-QTJ2ERA6.js";
11
- import "./chunk-NA7P3SZL.js";
11
+ import "./chunk-NIB6BTC6.js";
12
+ import "./chunk-3ZFGZ7RT.js";
12
13
  import "./chunk-7JIYKYLL.js";
13
14
  import "./chunk-6K64FJDD.js";
14
15
  import "./chunk-IEEAVWAP.js";
@@ -30,6 +31,7 @@ export {
30
31
  Orchestrator,
31
32
  getOrchestrator,
32
33
  isPidAlive,
34
+ resolveSendFollowUp,
33
35
  startOrchestration,
34
36
  waitForPidExit
35
37
  };
@@ -5,16 +5,17 @@ import {
5
5
  Orchestrator,
6
6
  getOrchestrator,
7
7
  isPidAlive,
8
+ resolveSendFollowUp,
8
9
  startOrchestration,
9
10
  waitForPidExit
10
- } from "./chunk-RCICB4OM.js";
11
- import "./chunk-ZXHV3NHY.js";
11
+ } from "./chunk-DJUDDKXM.js";
12
+ import "./chunk-W44EKPIR.js";
12
13
  import "./chunk-HVIEYTUK.js";
13
14
  import "./chunk-Y4MIXGPA.js";
14
15
  import "./chunk-VKQGAWHY.js";
15
16
  import "./chunk-JFOPOMK7.js";
16
17
  import "./chunk-OCQPTUR7.js";
17
- import "./chunk-TNOLCU5B.js";
18
+ import "./chunk-FJWQCZ74.js";
18
19
  import "./chunk-7O53GXTA.js";
19
20
  import "./chunk-D6JWYJ4P.js";
20
21
  import "./chunk-LZQULFIT.js";
@@ -29,6 +30,7 @@ export {
29
30
  Orchestrator,
30
31
  getOrchestrator,
31
32
  isPidAlive,
33
+ resolveSendFollowUp,
32
34
  startOrchestration,
33
35
  waitForPidExit
34
36
  };
@@ -6,7 +6,7 @@ import {
6
6
  listWorkspaces,
7
7
  removeWorkspace,
8
8
  syncWorkspacesFromThreads
9
- } from "./chunk-TNOLCU5B.js";
9
+ } from "./chunk-FJWQCZ74.js";
10
10
  import "./chunk-7O53GXTA.js";
11
11
  import "./chunk-D6JWYJ4P.js";
12
12
  import "./chunk-LZQULFIT.js";
@@ -4,7 +4,7 @@ import {
4
4
  listWorkspaces,
5
5
  removeWorkspace,
6
6
  syncWorkspacesFromThreads
7
- } from "./chunk-NA7P3SZL.js";
7
+ } from "./chunk-3ZFGZ7RT.js";
8
8
  import "./chunk-7JIYKYLL.js";
9
9
  import "./chunk-6K64FJDD.js";
10
10
  import "./chunk-J7LQVLFQ.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sideboard-ai/core",
3
- "version": "0.1.175",
3
+ "version": "0.1.177",
4
4
  "description": "Sideboard core — orchestration, agents, git worktrees, MCP server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",