@sideboard-ai/core 0.1.307 → 0.1.309

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/index.js CHANGED
@@ -177,6 +177,9 @@ import {
177
177
  shouldRunHistoryCleanup,
178
178
  shouldRunWorktreeCleanup,
179
179
  shouldStampSetupLastError,
180
+ sidebarParentSelectId,
181
+ sidebarQuestionThreadId,
182
+ sidebarRowAgentBlock,
180
183
  sliceRunLogOutput,
181
184
  spawnAgentTurn,
182
185
  stackAgentDefaultsFrom,
@@ -198,7 +201,7 @@ import {
198
201
  worktreeCleanupSettings,
199
202
  writeAgentBlock,
200
203
  writeWorktreeFile
201
- } from "./chunk-R5RQLKMP.js";
204
+ } from "./chunk-M6PAT6HG.js";
202
205
  import {
203
206
  LEGACY_PLAN_FILE_REL,
204
207
  PLAN_FILE_NAME,
@@ -292,7 +295,7 @@ import {
292
295
  userMcpNamesToDisable,
293
296
  worktreeMcpToolNames,
294
297
  writeInjectedMcpConfig
295
- } from "./chunk-G2L3CR3A.js";
298
+ } from "./chunk-FMSLOWKR.js";
296
299
  import {
297
300
  brightsyMcpServerName,
298
301
  connectBrightsyTeam,
@@ -421,7 +424,7 @@ import {
421
424
  workspaceAgentChatSummaries,
422
425
  worktreeRunPortsPath,
423
426
  wrapReviewSkillMarkdown
424
- } from "./chunk-OVNIP265.js";
427
+ } from "./chunk-VBVSJUM2.js";
425
428
  import {
426
429
  STDERR_EVENT_MAX_CHARS,
427
430
  STDOUT_EVENT_MAX_CHARS,
@@ -463,7 +466,7 @@ import {
463
466
  visibleToolRowDetail,
464
467
  withEventParentId,
465
468
  withEventsParentId
466
- } from "./chunk-F36QRDM4.js";
469
+ } from "./chunk-7Q327QF2.js";
467
470
  import "./chunk-7H655NEW.js";
468
471
  import {
469
472
  ABLETIME_OAUTH_CALLBACK_PATH,
@@ -780,7 +783,7 @@ import {
780
783
  import {
781
784
  clipMcpToolResult,
782
785
  cursorToolErrorText
783
- } from "./chunk-YJBUYGPN.js";
786
+ } from "./chunk-NCHOTN3C.js";
784
787
  import "./chunk-AXQ4ZWHK.js";
785
788
  import {
786
789
  AGENT_RUNNER_MAX_OLD_SPACE_MB,
@@ -796,8 +799,8 @@ import {
796
799
  trustSystemCertificates,
797
800
  turnCostUsdFromCursorUsage,
798
801
  withMaxOldSpaceSize
799
- } from "./chunk-MMVMQ34G.js";
800
- import "./chunk-HO5R3ZRH.js";
802
+ } from "./chunk-UA3YKQ3D.js";
803
+ import "./chunk-5XNT6BCG.js";
801
804
  import {
802
805
  ATTACHMENTS_DIR,
803
806
  CLI_DIR,
@@ -2465,10 +2468,9 @@ function parsePhoneMcpUi(value, op, chatId) {
2465
2468
  }
2466
2469
  function phoneMcpToolPayload(parts, tool, callId) {
2467
2470
  if (!parts) return null;
2468
- const matches = parts.filter(
2469
- (part2) => part2.type === "tool" && part2.name === tool && !part2.parentId
2471
+ const part = parts.find(
2472
+ (row2) => row2.type === "tool" && row2.id === callId && row2.name === tool && !row2.parentId
2470
2473
  );
2471
- const part = matches.find((row2) => row2.id === callId) ?? matches[matches.length - 1];
2472
2474
  if (!part) return null;
2473
2475
  return {
2474
2476
  input: part.input ?? {},
@@ -2476,6 +2478,15 @@ function phoneMcpToolPayload(parts, tool, callId) {
2476
2478
  isError: part.status === "error"
2477
2479
  };
2478
2480
  }
2481
+ function phoneMcpToolPayloadFromMessages(messages, tool, callId) {
2482
+ for (let i = messages.length - 1; i >= 0; i--) {
2483
+ const message = messages[i];
2484
+ if (message?.role !== "agent") continue;
2485
+ const payload = phoneMcpToolPayload(message.parts, tool, callId);
2486
+ if (payload) return payload;
2487
+ }
2488
+ return null;
2489
+ }
2479
2490
 
2480
2491
  // src/remote/phone-stream.ts
2481
2492
  var PHONE_STREAM_FLUSH_MS = 80;
@@ -2534,8 +2545,8 @@ function listPhoneMessages(thread) {
2534
2545
  const names = (message.attachments ?? []).map((item) => item.name.trim()).filter(Boolean);
2535
2546
  const visible = [phoneVisibleText(message.role, message.text), names.length ? names.join(", ") : ""].filter(Boolean).join("\n");
2536
2547
  const text5 = message.role === "agent" ? phoneArtifactText(visible, message.parts, MESSAGE_LIMIT) : clip(visible, MESSAGE_LIMIT);
2537
- if (!text5) continue;
2538
2548
  const apps = message.role === "agent" ? phoneMcpApps(thread.agent, message.parts) : [];
2549
+ if (!text5 && apps.length === 0) continue;
2539
2550
  out.push({ role: message.role, text: text5, ...apps.length ? { apps } : {} });
2540
2551
  }
2541
2552
  const live = withLiveTail(thread, out);
@@ -3199,10 +3210,12 @@ function emitChatTurn(opts, chatId, threadId) {
3199
3210
  return;
3200
3211
  }
3201
3212
  const result = getOrchestrator().getTurnResult(thread.id);
3202
- const pending = extractPendingPlanQuestions(
3203
- [...thread.messages].reverse().find((m) => m.role === "agent")?.parts
3204
- );
3205
- if (result.taskState === "input-required" && pending) {
3213
+ const pending = latestPendingPlanQuestions({
3214
+ messages: thread.messages,
3215
+ agentBlock: thread.agentBlock,
3216
+ dismissedQuestionSignature: thread.dismissedQuestionSignature
3217
+ });
3218
+ if (pending && result.taskState !== "failed" && result.taskState !== "canceled" && (result.taskState === "input-required" || thread.agentBlock?.source === "ask_user")) {
3206
3219
  emitControl(opts, {
3207
3220
  op: "ask",
3208
3221
  chatId,
@@ -3286,8 +3299,7 @@ function dispatchPhoneMcpUi(cmd, opts) {
3286
3299
  );
3287
3300
  return true;
3288
3301
  }
3289
- const agentMessage = [...thread.messages].reverse().find((message) => message.role === "agent");
3290
- const payload = phoneMcpToolPayload(agentMessage?.parts, cmd.tool, cmd.callId);
3302
+ const payload = phoneMcpToolPayloadFromMessages(thread.messages, cmd.tool, cmd.callId);
3291
3303
  void getMcpUiHost().viewForClaudeTool(cmd.tool, projectDirs).then((view) => {
3292
3304
  if (!view || view.html.length > PHONE_HTML_CAP) {
3293
3305
  emitControl(opts, { op: "mcp-ui", chatId, reqId, view: null });
@@ -3558,7 +3570,11 @@ function dispatchPhonePermission(text5, emit) {
3558
3570
  function republishPendingAsk(opts, chatId) {
3559
3571
  const thread = readPhoneThread(chatId);
3560
3572
  if (!thread) return;
3561
- const pending = latestPendingPlanQuestions({ messages: thread.messages });
3573
+ const pending = latestPendingPlanQuestions({
3574
+ messages: thread.messages,
3575
+ agentBlock: thread.agentBlock,
3576
+ dismissedQuestionSignature: thread.dismissedQuestionSignature
3577
+ });
3562
3578
  if (!pending) return;
3563
3579
  emitControl(opts, {
3564
3580
  op: "ask",
@@ -5779,10 +5795,12 @@ function runCoordinatorPrompt(opts, body, generation) {
5779
5795
  thread = readThread(thread.id) ?? thread;
5780
5796
  if (thread.status === "stopped") return;
5781
5797
  const result = orch.getTurnResult(thread.id);
5782
- const pending = extractPendingPlanQuestions(
5783
- [...thread.messages].reverse().find((m) => m.role === "agent")?.parts
5784
- );
5785
- if (result.taskState === "input-required" && pending) {
5798
+ const pending = latestPendingPlanQuestions({
5799
+ messages: thread.messages,
5800
+ agentBlock: thread.agentBlock,
5801
+ dismissedQuestionSignature: thread.dismissedQuestionSignature
5802
+ });
5803
+ if (pending && result.taskState !== "failed" && result.taskState !== "canceled" && (result.taskState === "input-required" || thread.agentBlock?.source === "ask_user")) {
5786
5804
  opts.onOutbound({
5787
5805
  type: "ask_user",
5788
5806
  text: result.text.trim(),
@@ -8873,7 +8891,7 @@ async function startHeadlessHost(opts) {
8873
8891
  };
8874
8892
  const refreshRunning = async () => {
8875
8893
  try {
8876
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-XRTUGSKX.js");
8894
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-T76JRIIN.js");
8877
8895
  agentsRunning = getOrchestrator2().getRuntime().running;
8878
8896
  } catch {
8879
8897
  agentsRunning = 0;
@@ -10805,7 +10823,7 @@ async function handleJobStop(params, _ctx) {
10805
10823
  return stopDetachedJob(jobCwd(rec), id, reason ? { reason } : void 0);
10806
10824
  }
10807
10825
  async function defaultTurnWait(ref, timeoutMs) {
10808
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-XRTUGSKX.js");
10826
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-T76JRIIN.js");
10809
10827
  const orch = getOrchestrator2();
10810
10828
  const thread = await orch.waitForTurn(ref, timeoutMs, {
10811
10829
  resolveIfStillRunning: true
@@ -14178,7 +14196,7 @@ async function continueSourceThread(threadId, prompt) {
14178
14196
  await continueOnReply(threadId, prompt);
14179
14197
  return;
14180
14198
  }
14181
- const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-XRTUGSKX.js");
14199
+ const { getOrchestrator: getOrchestrator2 } = await import("./orchestrator-T76JRIIN.js");
14182
14200
  await getOrchestrator2().send(threadId, prompt);
14183
14201
  } catch {
14184
14202
  }
@@ -15388,6 +15406,9 @@ export {
15388
15406
  shouldRunWorktreeCleanup,
15389
15407
  shouldStampSetupLastError,
15390
15408
  showCostEnabled,
15409
+ sidebarParentSelectId,
15410
+ sidebarQuestionThreadId,
15411
+ sidebarRowAgentBlock,
15391
15412
  sideboardHomeDir,
15392
15413
  sideboardMcpProfile,
15393
15414
  sideboardReposDir,
@@ -784,6 +784,12 @@ var init_system_ca = __esm({
784
784
  function looksLikeCursorStreamCutOff(text7) {
785
785
  return CURSOR_STREAM_CUTOFF.test(text7.trim());
786
786
  }
787
+ function looksLikeCursorStreamIdleAfterTools(text7) {
788
+ return CURSOR_STREAM_IDLE_AFTER_TOOLS.test(text7.trim());
789
+ }
790
+ function looksLikeCursorStreamFailure(text7) {
791
+ return looksLikeCursorStreamCutOff(text7) || looksLikeCursorStreamIdleAfterTools(text7);
792
+ }
787
793
  function cursorStreamCutOffContinueLimit(detail) {
788
794
  if (looksLikeCursorStreamCutOff(detail) || /connection stalled/i.test(detail)) {
789
795
  return CURSOR_STREAM_CUTOFF_CONTINUE_LIMIT;
@@ -795,11 +801,12 @@ function nextCrashContinueCount(detail, used) {
795
801
  if (used >= limit) return null;
796
802
  return used + 1;
797
803
  }
798
- var CURSOR_STREAM_CUTOFF, CURSOR_STREAM_CUTOFF_CONTINUE_LIMIT;
804
+ var CURSOR_STREAM_CUTOFF, CURSOR_STREAM_IDLE_AFTER_TOOLS, CURSOR_STREAM_CUTOFF_CONTINUE_LIMIT;
799
805
  var init_cursor_stream_cutoff = __esm({
800
806
  "src/agents/cursor-stream-cutoff.ts"() {
801
807
  "use strict";
802
808
  CURSOR_STREAM_CUTOFF = /nghttp2|premature close|\[unavailable\]\s+error\b|http\/2 stream closed|\bcancel \(0x8\)|error code cancel\b/i;
809
+ CURSOR_STREAM_IDLE_AFTER_TOOLS = /stopped responding after a tool call/i;
803
810
  CURSOR_STREAM_CUTOFF_CONTINUE_LIMIT = 3;
804
811
  }
805
812
  });
@@ -1003,7 +1010,7 @@ function looksLikeRetryableRunnerCrash(text7) {
1003
1010
  if (looksLikeInvalidAgentSession(text7)) return false;
1004
1011
  if (looksLikeV8Oom(text7)) return false;
1005
1012
  if (looksLikeHugeToolResultDump(text7)) return true;
1006
- if (looksLikeCursorStreamCutOff(text7)) return true;
1013
+ if (looksLikeCursorStreamFailure(text7)) return true;
1007
1014
  if (looksLikeBrightsyEmptyCompletion(text7)) return true;
1008
1015
  const lower = text7.trim().toLowerCase();
1009
1016
  if (/cannot find (?:package|module)|err_module_not_found/.test(lower)) return false;
@@ -1080,7 +1087,7 @@ function humanizeAgentFailDetail(detail) {
1080
1087
  if (/corrupt local agent checkpoint|missing root blob|truncated crash dump/.test(lower)) {
1081
1088
  return `${raw} \u2014 retry the turn (Sideboard will start a fresh Cursor session).`;
1082
1089
  }
1083
- if (/connection stalled/.test(lower) || looksLikeCursorStreamCutOff(raw)) {
1090
+ if (/connection stalled/.test(lower) || looksLikeCursorStreamFailure(raw)) {
1084
1091
  return /retry the turn/i.test(raw) ? raw : `${raw} \u2014 retry the turn (Sideboard will start a fresh Cursor session).`;
1085
1092
  }
1086
1093
  if (looksLikeBrightsyEmptyCompletion(raw)) {
@@ -2122,12 +2129,23 @@ function isAskUserToolName(name) {
2122
2129
  const base = name.replace(/^mcp__sideboard__/i, "");
2123
2130
  return ASK_USER_TOOL_RE.test(name) || /^ask_user$/i.test(base);
2124
2131
  }
2132
+ function questionsFromToolPart(part) {
2133
+ const fromInput = parsePlanQuestionsInput(part.input);
2134
+ if (fromInput.length) return fromInput;
2135
+ const raw = part.result?.trim();
2136
+ if (!raw || !raw.startsWith("{")) return [];
2137
+ try {
2138
+ return parsePlanQuestionsInput(JSON.parse(raw));
2139
+ } catch {
2140
+ return [];
2141
+ }
2142
+ }
2125
2143
  function extractPendingPlanQuestions(parts) {
2126
2144
  if (!parts?.length) return null;
2127
2145
  for (let i = parts.length - 1; i >= 0; i--) {
2128
2146
  const p = parts[i];
2129
2147
  if (p.type !== "tool" || !isAskUserToolName(p.name)) continue;
2130
- const questions = parsePlanQuestionsInput(p.input);
2148
+ const questions = questionsFromToolPart(p);
2131
2149
  if (!questions.length) continue;
2132
2150
  return {
2133
2151
  id: p.id || `ask-${i}`,
@@ -18897,7 +18915,7 @@ function decisionBlockFromParts(parts, planMode, at = (/* @__PURE__ */ new Date(
18897
18915
  const reason = pending ? formatAskUserNotifyMessage(pending.questions) : "Waiting for an answer in that chat.";
18898
18916
  return {
18899
18917
  ...makeAgentBlock("ask_user", reason, at),
18900
- ...pending ? { questionSignature: pending.signature } : {}
18918
+ ...pending ? { questionSignature: pending.signature, questions: pending.questions } : {}
18901
18919
  };
18902
18920
  }
18903
18921
  if (!planMode || last?.type !== "tool") return null;
@@ -18912,14 +18930,24 @@ function decisionBlockFromParts(parts, planMode, at = (/* @__PURE__ */ new Date(
18912
18930
  at
18913
18931
  );
18914
18932
  }
18933
+ function withStampedQuestions(decision, existing) {
18934
+ if (decision.source !== "ask_user" || decision.questions?.length) return decision;
18935
+ if (existing?.source !== "ask_user" || !existing.questions?.length) return decision;
18936
+ return {
18937
+ ...decision,
18938
+ questions: existing.questions,
18939
+ questionSignature: decision.questionSignature ?? existing.questionSignature
18940
+ };
18941
+ }
18915
18942
  function agentBlockAfterTurn(input) {
18916
18943
  if (input.failed) return null;
18917
18944
  const decision = decisionBlockFromParts(input.parts, input.planMode);
18918
18945
  if (decision) {
18919
- if (isDismissedAskUserBlock(decision, input.dismissedQuestionSignature)) {
18946
+ const next = withStampedQuestions(decision, input.existing);
18947
+ if (isDismissedAskUserBlock(next, input.dismissedQuestionSignature)) {
18920
18948
  return input.existing?.source === "reported" ? input.existing : null;
18921
18949
  }
18922
- return decision;
18950
+ return next;
18923
18951
  }
18924
18952
  if (input.existing && input.existing.source !== "reported" && lastTopLevelTool(input.parts)) {
18925
18953
  return null;
@@ -18962,7 +18990,7 @@ function settleAgentBlock(threadId, parts, failed) {
18962
18990
  });
18963
18991
  const prev = thread.agentBlock ?? null;
18964
18992
  if (prev === next) return;
18965
- if (prev && next && prev.source === next.source && prev.reason === next.reason && prev.at === next.at && prev.questionSignature === next.questionSignature) {
18993
+ if (prev && next && prev.source === next.source && prev.reason === next.reason && prev.at === next.at && prev.questionSignature === next.questionSignature && planQuestionsSignature(prev.questions ?? []) === planQuestionsSignature(next.questions ?? [])) {
18966
18994
  return;
18967
18995
  }
18968
18996
  updateThread(threadId, { agentBlock: next });
@@ -18985,7 +19013,11 @@ function stampAskUserBlock(resolveCaller, questions) {
18985
19013
  try {
18986
19014
  writeAgentBlock(
18987
19015
  resolveCaller().id,
18988
- parsed.length ? { ...block, questionSignature: planQuestionsSignature(parsed) } : block
19016
+ parsed.length ? {
19017
+ ...block,
19018
+ questionSignature: planQuestionsSignature(parsed),
19019
+ questions: parsed
19020
+ } : block
18989
19021
  );
18990
19022
  } catch {
18991
19023
  }
@@ -24858,7 +24890,7 @@ function formatWorktreeReminder() {
24858
24890
  return "Sideboard workspace: stay in this cwd for all file and git work. Push and open PRs against origin, never upstream. Do not edit the main repo checkout. If a goal is given (Greptile 5/5, CI green), watch-fix-push until it lands \u2014 do not watch after every push. Schedules: create_schedule (at / every / cron; chatId=self for this chat). set_workspace_tags updates labels on this workspace (omit ref).";
24859
24891
  }
24860
24892
  function formatClaudeSubagentReminder() {
24861
- return 'Claude subagents: if Task/Agent workers will edit files, write a short plan in this chat and continue in the same turn. Do not ask the user whether to isolate, and do not set worktree.bgIsolation to none. One writer may edit this workspace. Every other writer is an Agent with isolation "worktree" and a disjoint file list (read-only explore agents may overlap). While those agents run, leave their files alone. Merge each returned branch into this workspace, then remove the temporary worktree. You stay in this cwd. If Claude says another write-capable agent is in this directory, or that writes to the shared checkout are blocked, re-spawn that agent with isolation "worktree" or make the edit yourself.';
24893
+ return 'Claude subagents: if Task/Agent workers will edit files, write a short plan in this chat and continue in the same turn. Do not ask the user whether to isolate, and do not set worktree.bgIsolation to none. One writer may edit this workspace. Every other writer is an Agent with isolation "worktree" and a disjoint file list (read-only explore agents may overlap). While those agents run, leave their files alone. Merge each returned branch into this workspace, then remove the temporary worktree. You stay in this cwd. If Claude says another write-capable agent is in this directory, or that writes to the shared checkout are blocked, re-spawn that agent with isolation "worktree" or make the edit yourself. That note is another worker in this chat, or a worker Claude still has marked running. Do not mention it to the user.';
24862
24894
  }
24863
24895
  function claudeSubagentTurnReminder(thread) {
24864
24896
  if (thread.agent !== "claude" || thread.planMode || isOrchestratorThread(thread)) {
@@ -56,7 +56,7 @@ import {
56
56
  updateSchedule,
57
57
  workspaceTagTargetRef,
58
58
  writeAgentBlock
59
- } from "../chunk-IEOOYBYT.js";
59
+ } from "../chunk-OU5V56OI.js";
60
60
  import "../chunk-LX5R5JOR.js";
61
61
  import {
62
62
  commentAbleTimeTask,
@@ -99,7 +99,7 @@ import {
99
99
  sideboardMcpProfile,
100
100
  trustSystemCertificates,
101
101
  worktreeMcpToolNames
102
- } from "../chunk-EZYZGDWU.js";
102
+ } from "../chunk-VXI7FFGO.js";
103
103
  import "../chunk-EGTCXNQM.js";
104
104
  import "../chunk-42JGPPVS.js";
105
105
  import "../chunk-PXMLMBMI.js";
@@ -116,14 +116,14 @@ import {
116
116
  waitForDetachedJob,
117
117
  waitForTurnToolResult,
118
118
  workspaceAgentChatSummaries
119
- } from "../chunk-5SFA27CF.js";
119
+ } from "../chunk-AILQRQ26.js";
120
120
  import {
121
121
  HUGE_TOOL_RESULT_SUMMARY,
122
122
  clipToolResultForStore,
123
123
  formatUnknownDetail,
124
124
  isInternalAgentStatusText,
125
125
  looksLikeHugeToolResultDump
126
- } from "../chunk-5XQ43YZU.js";
126
+ } from "../chunk-I5TESHDN.js";
127
127
  import {
128
128
  GLOBAL_WORKSPACE_ID,
129
129
  isCloudCoordinatorThread
@@ -11,18 +11,18 @@ import {
11
11
  resolveSendFollowUp,
12
12
  startOrchestration,
13
13
  waitForPidExit
14
- } from "./chunk-IEOOYBYT.js";
14
+ } from "./chunk-OU5V56OI.js";
15
15
  import "./chunk-LX5R5JOR.js";
16
16
  import "./chunk-62ESCTJ4.js";
17
17
  import "./chunk-4GK32AYX.js";
18
18
  import "./chunk-DC3VZXMA.js";
19
- import "./chunk-EZYZGDWU.js";
19
+ import "./chunk-VXI7FFGO.js";
20
20
  import "./chunk-EGTCXNQM.js";
21
21
  import "./chunk-42JGPPVS.js";
22
22
  import "./chunk-PXMLMBMI.js";
23
23
  import "./chunk-2GPQZZLY.js";
24
- import "./chunk-5SFA27CF.js";
25
- import "./chunk-5XQ43YZU.js";
24
+ import "./chunk-AILQRQ26.js";
25
+ import "./chunk-I5TESHDN.js";
26
26
  import "./chunk-X3FSWWW2.js";
27
27
  import "./chunk-DLGGLV2M.js";
28
28
  import "./chunk-N2WW62LF.js";
@@ -9,12 +9,12 @@ import {
9
9
  resolveSendFollowUp,
10
10
  startOrchestration,
11
11
  waitForPidExit
12
- } from "./chunk-R5RQLKMP.js";
12
+ } from "./chunk-M6PAT6HG.js";
13
13
  import "./chunk-PGPSIEMW.js";
14
- import "./chunk-G2L3CR3A.js";
14
+ import "./chunk-FMSLOWKR.js";
15
15
  import "./chunk-VEVFHO6K.js";
16
- import "./chunk-OVNIP265.js";
17
- import "./chunk-F36QRDM4.js";
16
+ import "./chunk-VBVSJUM2.js";
17
+ import "./chunk-7Q327QF2.js";
18
18
  import "./chunk-7H655NEW.js";
19
19
  import "./chunk-WRZRX4Q7.js";
20
20
  import "./chunk-U4WACWBC.js";
@@ -26,8 +26,8 @@ import "./chunk-33KDPEK4.js";
26
26
  import "./chunk-JAT3JFOS.js";
27
27
  import "./chunk-F2PVRF3B.js";
28
28
  import "./chunk-AXQ4ZWHK.js";
29
- import "./chunk-MMVMQ34G.js";
30
- import "./chunk-HO5R3ZRH.js";
29
+ import "./chunk-UA3YKQ3D.js";
30
+ import "./chunk-5XNT6BCG.js";
31
31
  import "./chunk-6K64FJDD.js";
32
32
  import "./chunk-LG6RJBIY.js";
33
33
  import "./chunk-QVN2WOKJ.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sideboard-ai/core",
3
- "version": "0.1.307",
3
+ "version": "0.1.309",
4
4
  "description": "Sideboard core — orchestration, agents, git worktrees, MCP server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",