@sideboard-ai/core 0.1.317 → 0.1.319

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.
Files changed (40) hide show
  1. package/dist/{abletime-NZ2ABWAL.js → abletime-DVYO4IVS.js} +6 -4
  2. package/dist/{abletime-TKAFNXCM.js → abletime-L3ODNTBT.js} +5 -3
  3. package/dist/{abletime-oauth-S4AXA4WR.js → abletime-oauth-2VWQCXGT.js} +2 -2
  4. package/dist/{abletime-oauth-CBFFBINA.js → abletime-oauth-6DTX7LB7.js} +3 -3
  5. package/dist/{abletime-rest-ORBELZQO.js → abletime-rest-7NICZYOC.js} +2 -2
  6. package/dist/{abletime-rest-NSOP72AI.js → abletime-rest-PYQM234B.js} +3 -3
  7. package/dist/{agents-BJVSYC6Y.js → agents-2AR7I6B6.js} +5 -5
  8. package/dist/{app-settings-RQAFJZCD.js → app-settings-V6YPYY57.js} +1 -1
  9. package/dist/{chunk-CCUGIVYN.js → chunk-5OM7UCTQ.js} +3 -3
  10. package/dist/{chunk-NXNNYY3Q.js → chunk-AESO2KJS.js} +2 -2
  11. package/dist/{chunk-VVV7EI6T.js → chunk-AUJ4XB6H.js} +2 -2
  12. package/dist/{chunk-S3U4HR5F.js → chunk-AZ4GEEGL.js} +2 -2
  13. package/dist/{chunk-U7PNCYNX.js → chunk-E52SQENB.js} +1 -0
  14. package/dist/{chunk-OLYNM52B.js → chunk-FDXHNROD.js} +2 -2
  15. package/dist/{chunk-XWUDFLBX.js → chunk-IAPO7ZFG.js} +4 -4
  16. package/dist/{chunk-VZAJVX36.js → chunk-JD7CC6SW.js} +1 -1
  17. package/dist/{chunk-ELBK34TY.js → chunk-LXBZQP2Q.js} +5 -5
  18. package/dist/{chunk-BXTISNKW.js → chunk-OO3R6CS2.js} +216 -64
  19. package/dist/{chunk-I5CLCWUK.js → chunk-QPLQXWND.js} +8 -4
  20. package/dist/{chunk-4XZJYBO2.js → chunk-ST2UQBJT.js} +4 -4
  21. package/dist/{chunk-YN6XONV5.js → chunk-TUJFCJJU.js} +1 -1
  22. package/dist/{chunk-U53JICJ2.js → chunk-U2N32EA6.js} +233 -81
  23. package/dist/{chunk-GXSV3X3L.js → chunk-WLZHRNE6.js} +9 -5
  24. package/dist/{chunk-PX324N7P.js → chunk-YALFZKSC.js} +2 -2
  25. package/dist/{chunk-7SCVGGF6.js → chunk-ZM43NTJJ.js} +4 -4
  26. package/dist/{conductor-TP2NA44I.js → conductor-MG2RAQNT.js} +4 -4
  27. package/dist/{coordinator-prompt-FQC2SZPP.js → coordinator-prompt-X74F3JIC.js} +3 -3
  28. package/dist/{global-workspace-72K6D354.js → global-workspace-FTNJEML3.js} +3 -3
  29. package/dist/index.cjs +301 -79
  30. package/dist/index.d.cts +29 -9
  31. package/dist/index.d.ts +29 -9
  32. package/dist/index.js +72 -27
  33. package/dist/mcp/run-stdio.cjs +240 -63
  34. package/dist/mcp/run-stdio.js +4 -4
  35. package/dist/{optional-cli-LMSRZNH4.js → optional-cli-6GGESWGE.js} +4 -4
  36. package/dist/{orchestrator-N54V3B76.js → orchestrator-H3DSZ5RM.js} +1 -1
  37. package/dist/{orchestrator-E72HYGTB.js → orchestrator-NCA4LSCC.js} +8 -8
  38. package/dist/{workspaces-GAUHXBUL.js → workspaces-MGKEAYNM.js} +3 -3
  39. package/dist/{worktree-6FUQ7FEF.js → worktree-THAXW5U7.js} +2 -2
  40. package/package.json +1 -1
@@ -22170,6 +22170,7 @@ var init_abletime_projects = __esm({
22170
22170
  var abletime_exports = {};
22171
22171
  __export(abletime_exports, {
22172
22172
  ableTimeDependencyTarget: () => ableTimeDependencyTarget,
22173
+ ableTimeStateIsClosed: () => ableTimeStateIsClosed,
22173
22174
  commentAbleTimeTask: () => commentAbleTimeTask,
22174
22175
  createAbleTimeTask: () => createAbleTimeTask,
22175
22176
  downloadAbleTimeAttachment: () => downloadAbleTimeAttachment,
@@ -22323,9 +22324,12 @@ function issueAttachmentForAbleTimeTask(task) {
22323
22324
  ].filter(Boolean).join("\n")
22324
22325
  };
22325
22326
  }
22327
+ function ableTimeStateIsClosed(state) {
22328
+ const value = (state ?? "").trim().toLowerCase();
22329
+ return Boolean(value && CLOSED_STATES.has(value));
22330
+ }
22326
22331
  function isOpenTask(task) {
22327
- const state = (task.state ?? "").toLowerCase();
22328
- return !state || !CLOSED_STATES.has(state);
22332
+ return !ableTimeStateIsClosed(task.state);
22329
22333
  }
22330
22334
  async function getAbleTimeOrientation(opts) {
22331
22335
  const raw = await callAbleTimeTool("orientation", {}, opts);
@@ -23301,6 +23305,9 @@ function writeTurnLive(threadId, progress) {
23301
23305
  }
23302
23306
  }
23303
23307
  }
23308
+ function readTurnLiveParts(threadId) {
23309
+ return buffers.get(threadId)?.parts.slice() ?? [];
23310
+ }
23304
23311
  function readTurnLive(threadId) {
23305
23312
  const path = threadLivePath(threadId);
23306
23313
  if (!(0, import_node_fs55.existsSync)(path)) return null;
@@ -25585,6 +25592,41 @@ var init_expand = __esm({
25585
25592
  }
25586
25593
  });
25587
25594
 
25595
+ // src/composer/agent-has-replied.ts
25596
+ function joinSteerPrompt(base, addition) {
25597
+ const next = addition.trim();
25598
+ if (!next) return base;
25599
+ const head = base.replace(/\s+$/, "");
25600
+ if (!head) return next;
25601
+ return `${head}
25602
+ ${next}`;
25603
+ }
25604
+ function trailingUnansweredUserText(messages) {
25605
+ for (let i = messages.length - 1; i >= 0; i--) {
25606
+ const message = messages[i];
25607
+ if (!message || message.origin === "continue" || message.role === "summary") continue;
25608
+ if (message.role === "agent") {
25609
+ const text7 = (message.text ?? "").trim();
25610
+ if (text7 || (message.parts?.length ?? 0) > 0) return null;
25611
+ continue;
25612
+ }
25613
+ if (message.role === "user") return message.text;
25614
+ }
25615
+ return null;
25616
+ }
25617
+ function livePartsShowAgentReply(parts) {
25618
+ for (const part of parts) {
25619
+ if (part.type === "tool") return true;
25620
+ if ((part.type === "text" || part.type === "thinking") && part.text.trim()) return true;
25621
+ }
25622
+ return false;
25623
+ }
25624
+ var init_agent_has_replied = __esm({
25625
+ "src/composer/agent-has-replied.ts"() {
25626
+ "use strict";
25627
+ }
25628
+ });
25629
+
25588
25630
  // src/composer/consume-attachments.ts
25589
25631
  function consumeComposerAttachments(thread) {
25590
25632
  return {
@@ -25642,6 +25684,142 @@ var init_consume_attachments = __esm({
25642
25684
  }
25643
25685
  });
25644
25686
 
25687
+ // src/orchestrator/enqueue-thread-send.ts
25688
+ function resolveSendFollowUp(thread, requested) {
25689
+ if (requested === "steer" || requested === "queue") return requested;
25690
+ return isOrchestratorThread(thread) ? followUpBehavior() : "queue";
25691
+ }
25692
+ function rewriteTrailingUserPrompt(threadId, from, to) {
25693
+ if (from === to) return;
25694
+ const thread = readThread(threadId);
25695
+ if (!thread) return;
25696
+ const messages = thread.messages.slice();
25697
+ for (let i = messages.length - 1; i >= 0; i--) {
25698
+ const message = messages[i];
25699
+ if (!message || message.origin === "continue" || message.role === "summary") continue;
25700
+ if (message.role === "user" && message.text === from) {
25701
+ messages[i] = { ...message, text: to };
25702
+ updateThread(threadId, { messages });
25703
+ }
25704
+ return;
25705
+ }
25706
+ }
25707
+ function reuseJoinedUserBubble(reused, threadId, last, promptText) {
25708
+ return reused.delete(threadId) && last?.role === "user" && last.origin !== "continue" && last.text === promptText;
25709
+ }
25710
+ function promptForJoinedSteer(input) {
25711
+ if (input.latestPrompt === input.promptText) return input.agentPrompt;
25712
+ rewriteTrailingUserPrompt(input.threadId, input.promptText, input.latestPrompt);
25713
+ const { agentPrompt: expandedLatest } = expandComposerPrompt(
25714
+ input.worktreePath,
25715
+ expandCanonicalGitRequest(input.latestPrompt),
25716
+ { attachments: input.attachments }
25717
+ );
25718
+ return input.expandedPrompt && input.agentPrompt.endsWith(input.expandedPrompt) ? input.agentPrompt.slice(0, -input.expandedPrompt.length) + expandedLatest : `${input.agentPrompt}
25719
+
25720
+ ${expandedLatest}`;
25721
+ }
25722
+ function clearSendBookkeeping(host, threadId) {
25723
+ host.crashContinued.delete(threadId);
25724
+ host.jobContinueCount.delete(threadId);
25725
+ host.jobContinueNudged.delete(threadId);
25726
+ host.haltDrain.delete(threadId);
25727
+ }
25728
+ async function enqueueThreadSend(host, threadRef, prompt, opts) {
25729
+ const thread = host.requireThread(threadRef);
25730
+ if (thread.status === "archived") {
25731
+ throw new Error(`Thread is archived: ${thread.id}`);
25732
+ }
25733
+ let shouldSteer = false;
25734
+ const sent = await withThreadLock(thread.id, async () => {
25735
+ const current = host.requireThread(thread.id);
25736
+ if (current.status === "archived") {
25737
+ throw new Error(`Thread is archived: ${thread.id}`);
25738
+ }
25739
+ const followUp = resolveSendFollowUp(current, opts?.followUp);
25740
+ const explicit = opts?.attachments;
25741
+ const consumed = explicit !== void 0 ? { attachments: current.attachments, consumed: explicit } : consumeComposerAttachments(current);
25742
+ const inFlightEarly = host.activeTurns.has(thread.id) || host.startingTurns.has(thread.id) || current.status === "running";
25743
+ const agentHasRepliedEarly = livePartsShowAgentReply(readTurnLiveParts(current.id));
25744
+ const draft = host.openSteerPrompt.get(current.id);
25745
+ const queuedHead = !inFlightEarly && current.status === "queued" && current.queue.length > 0 ? current.queue[0] : null;
25746
+ const unanswered = followUp === "steer" && !agentHasRepliedEarly ? draft?.text ?? (inFlightEarly ? trailingUnansweredUserText(current.messages) : queuedHead) : null;
25747
+ if (unanswered != null && (draft ? !draft.spawned : queuedHead != null)) {
25748
+ clearSendBookkeeping(host, thread.id);
25749
+ const combined = joinSteerPrompt(unanswered, prompt);
25750
+ if (draft && !draft.spawned) {
25751
+ draft.text = combined;
25752
+ rewriteTrailingUserPrompt(current.id, unanswered, combined);
25753
+ } else {
25754
+ const queue = current.queue.slice();
25755
+ queue[0] = combined;
25756
+ const queueAttachments = alignQueueAttachments(queue.length, current.queueAttachments);
25757
+ if (consumed.consumed.length > 0) {
25758
+ queueAttachments[0] = [...queueAttachments[0] ?? [], ...consumed.consumed];
25759
+ }
25760
+ const patch2 = { queue, queueAttachments };
25761
+ if (explicit === void 0 && consumed.consumed.length > 0) {
25762
+ patch2.attachments = consumed.attachments;
25763
+ }
25764
+ updateThread(current.id, patch2);
25765
+ host.emit({ type: "queue_changed", threadId: current.id, queue });
25766
+ }
25767
+ if (thisProcessShouldDrainAgentQueues() && !inFlightEarly) {
25768
+ host.armDrain(current.id);
25769
+ }
25770
+ return host.requireThread(current.id);
25771
+ }
25772
+ const promptToQueue = unanswered != null ? joinSteerPrompt(unanswered, prompt) : prompt;
25773
+ if (unanswered != null) {
25774
+ if (draft) draft.text = promptToQueue;
25775
+ rewriteTrailingUserPrompt(current.id, unanswered, promptToQueue);
25776
+ host.reusedUserPrompt.add(current.id);
25777
+ }
25778
+ const queued = appendQueuedItem(
25779
+ current.queue,
25780
+ current.queueAttachments,
25781
+ promptToQueue,
25782
+ consumed.consumed
25783
+ );
25784
+ clearSendBookkeeping(host, thread.id);
25785
+ const inFlight = host.activeTurns.has(thread.id) || host.startingTurns.has(thread.id) || current.status === "running";
25786
+ shouldSteer = followUp === "steer" && (inFlight || current.queue.length > 0);
25787
+ const patch = queued;
25788
+ if (explicit === void 0 && consumed.consumed.length > 0) {
25789
+ patch.attachments = consumed.attachments;
25790
+ }
25791
+ if (!inFlight) patch.status = "queued";
25792
+ const pid = current.agentPid;
25793
+ if (typeof pid === "number" && pid > 0 && !host.pidAlive(pid)) {
25794
+ patch.agentPid = null;
25795
+ }
25796
+ updateThread(thread.id, patch);
25797
+ host.emit({ type: "queue_changed", threadId: thread.id, queue: queued.queue });
25798
+ if (!inFlight) {
25799
+ host.emit({ type: "status_changed", threadId: thread.id, status: "queued" });
25800
+ }
25801
+ if (thisProcessShouldDrainAgentQueues() && !shouldSteer) {
25802
+ host.armDrain(thread.id);
25803
+ }
25804
+ return host.requireThread(thread.id);
25805
+ });
25806
+ return { thread: sent, shouldSteer };
25807
+ }
25808
+ var init_enqueue_thread_send = __esm({
25809
+ "src/orchestrator/enqueue-thread-send.ts"() {
25810
+ "use strict";
25811
+ init_agent_git_actions();
25812
+ init_agent_has_replied();
25813
+ init_expand();
25814
+ init_consume_attachments();
25815
+ init_desktop_host();
25816
+ init_thread_store();
25817
+ init_turn_live();
25818
+ init_app_settings();
25819
+ init_global_workspace();
25820
+ }
25821
+ });
25822
+
25645
25823
  // src/skills/detached-job-path.ts
25646
25824
  function compiledModuleDir() {
25647
25825
  const cjsDir = typeof __dirname !== "undefined" ? __dirname : "";
@@ -27385,10 +27563,6 @@ async function waitForPidExit(pid, timeoutMs) {
27385
27563
  }
27386
27564
  return true;
27387
27565
  }
27388
- function resolveSendFollowUp(thread, requested) {
27389
- if (requested === "steer" || requested === "queue") return requested;
27390
- return isOrchestratorThread(thread) ? followUpBehavior() : "queue";
27391
- }
27392
27566
  function resolveOrchChildFollowUp(requested) {
27393
27567
  if (requested === "steer" || requested === "queue") return requested;
27394
27568
  return followUpBehavior();
@@ -27538,6 +27712,7 @@ var init_orchestrator = __esm({
27538
27712
  init_read_worktree_tail();
27539
27713
  init_discover();
27540
27714
  init_expand();
27715
+ init_enqueue_thread_send();
27541
27716
  init_consume_attachments();
27542
27717
  init_stage_files();
27543
27718
  init_context_compact();
@@ -27555,6 +27730,7 @@ var init_orchestrator = __esm({
27555
27730
  init_caffeinate_hold();
27556
27731
  init_schedule_runner();
27557
27732
  init_coordinator_prompt();
27733
+ init_enqueue_thread_send();
27558
27734
  LIVE_TURN_SPAWN_GRACE_MS = 15e3;
27559
27735
  RUN_SCRIPT_DESKTOP_ADOPT_MS = 2e4;
27560
27736
  STALE_AGENT_PID_WAIT_MS = 2500;
@@ -27566,6 +27742,13 @@ var init_orchestrator = __esm({
27566
27742
  draining = /* @__PURE__ */ new Set();
27567
27743
  /** Threads past setStatus(running) but not yet in activeTurns (spawn in flight). */
27568
27744
  startingTurns = /* @__PURE__ */ new Set();
27745
+ /**
27746
+ * Prompt for the turn that has not been answered yet. Steer follow-ups before
27747
+ * any agent output are joined onto this text instead of starting a second bubble.
27748
+ */
27749
+ openSteerPrompt = /* @__PURE__ */ new Map();
27750
+ /** Next runTurn should keep the user bubble already rewritten to this prompt. */
27751
+ reusedUserPrompt = /* @__PURE__ */ new Set();
27569
27752
  /** Last sync thread-file read for false-stop heal (throttled per thread). */
27570
27753
  lastReconcileHealAt = /* @__PURE__ */ new Map();
27571
27754
  /** Per-repo timestamp of the last `reconcile(repo, { light: true })`. */
@@ -28176,54 +28359,29 @@ var init_orchestrator = __esm({
28176
28359
  return thread;
28177
28360
  }
28178
28361
  async send(threadRef, prompt, opts) {
28179
- const thread = this.requireThread(threadRef);
28180
- if (thread.status === "archived") {
28181
- throw new Error(`Thread is archived: ${thread.id}`);
28182
- }
28183
- let shouldSteer = false;
28184
- const sent = await withThreadLock(thread.id, async () => {
28185
- const current = this.requireThread(thread.id);
28186
- if (current.status === "archived") {
28187
- throw new Error(`Thread is archived: ${thread.id}`);
28188
- }
28189
- const followUp = resolveSendFollowUp(current, opts?.followUp);
28190
- const explicit = opts?.attachments;
28191
- const consumed = explicit !== void 0 ? { attachments: current.attachments, consumed: explicit } : consumeComposerAttachments(current);
28192
- const queued = appendQueuedItem(
28193
- current.queue,
28194
- current.queueAttachments,
28195
- prompt,
28196
- consumed.consumed
28197
- );
28198
- this.crashContinued.delete(thread.id);
28199
- this.jobContinueCount.delete(thread.id);
28200
- this.jobContinueNudged.delete(thread.id);
28201
- this.haltDrain.delete(thread.id);
28202
- const inFlight = this.activeTurns.has(thread.id) || this.startingTurns.has(thread.id) || current.status === "running";
28203
- shouldSteer = followUp === "steer" && (inFlight || current.queue.length > 0);
28204
- const patch = queued;
28205
- if (explicit === void 0 && consumed.consumed.length > 0) {
28206
- patch.attachments = consumed.attachments;
28207
- }
28208
- if (!inFlight) patch.status = "queued";
28209
- const pid = current.agentPid;
28210
- if (typeof pid === "number" && pid > 0 && !isPidAlive(pid)) {
28211
- patch.agentPid = null;
28212
- }
28213
- updateThread(thread.id, patch);
28214
- this.emit({ type: "queue_changed", threadId: thread.id, queue: queued.queue });
28215
- if (!inFlight) {
28216
- this.emit({ type: "status_changed", threadId: thread.id, status: "queued" });
28217
- }
28218
- if (thisProcessShouldDrainAgentQueues() && !shouldSteer) {
28219
- this.armDrain(thread.id);
28220
- }
28221
- return this.requireThread(thread.id);
28222
- });
28223
- if (shouldSteer && sent.queue.length > 0) {
28224
- return this.sendQueuedMessageNow(sent.id, sent.queue.length - 1);
28362
+ const sent = await enqueueThreadSend(
28363
+ {
28364
+ activeTurns: this.activeTurns,
28365
+ startingTurns: this.startingTurns,
28366
+ openSteerPrompt: this.openSteerPrompt,
28367
+ reusedUserPrompt: this.reusedUserPrompt,
28368
+ crashContinued: this.crashContinued,
28369
+ jobContinueCount: this.jobContinueCount,
28370
+ jobContinueNudged: this.jobContinueNudged,
28371
+ haltDrain: this.haltDrain,
28372
+ emit: (event) => this.emit(event),
28373
+ armDrain: (id) => this.armDrain(id),
28374
+ requireThread: (ref) => this.requireThread(ref),
28375
+ pidAlive: (pid) => isPidAlive(pid)
28376
+ },
28377
+ threadRef,
28378
+ prompt,
28379
+ opts
28380
+ );
28381
+ if (sent.shouldSteer && sent.thread.queue.length > 0) {
28382
+ return this.sendQueuedMessageNow(sent.thread.id, sent.thread.queue.length - 1);
28225
28383
  }
28226
- return sent;
28384
+ return sent.thread;
28227
28385
  }
28228
28386
  async fanOut(threadRefs, prompt, opts) {
28229
28387
  const results = [];
@@ -28380,6 +28538,10 @@ var init_orchestrator = __esm({
28380
28538
  this.emit({ type: "status_changed", threadId, status: "running" });
28381
28539
  this.emit({ type: "turn_started", threadId, prompt });
28382
28540
  try {
28541
+ this.openSteerPrompt.set(threadId, {
28542
+ text: typeof prompt === "string" ? prompt : "",
28543
+ spawned: false
28544
+ });
28383
28545
  try {
28384
28546
  const baseline = await captureTurnBaseline(thread.worktreePath);
28385
28547
  if (baseline) this.turnBaselines.set(threadId, baseline);
@@ -28405,18 +28567,21 @@ var init_orchestrator = __esm({
28405
28567
  this.emit({ type: "error", threadId, message: `context compact failed: ${message}` });
28406
28568
  thread = this.requireThread(threadId);
28407
28569
  }
28408
- const promptText = typeof prompt === "string" ? prompt : "";
28570
+ const promptText = this.openSteerPrompt.get(threadId)?.text ?? (typeof prompt === "string" ? prompt : "");
28409
28571
  const autoContinue = isJobContinuePrompt(promptText) || promptText.startsWith("The previous agent process ended before it finished.");
28410
28572
  const parked = takePendingTurnAttachments(thread);
28411
28573
  const sentAttachments = !autoContinue && parked.length > 0 ? parked : void 0;
28412
28574
  if (!autoContinue) clearAgentBlock(threadId);
28413
- appendMessage(threadId, {
28414
- role: "user",
28415
- text: promptText,
28416
- ...sentAttachments ? { attachments: sentAttachments } : {},
28417
- ...autoContinue ? { origin: "continue" } : {},
28418
- ts: (/* @__PURE__ */ new Date()).toISOString()
28419
- });
28575
+ const lastShown = this.requireThread(threadId).messages.at(-1);
28576
+ if (!reuseJoinedUserBubble(this.reusedUserPrompt, threadId, lastShown, promptText)) {
28577
+ appendMessage(threadId, {
28578
+ role: "user",
28579
+ text: promptText,
28580
+ ...sentAttachments ? { attachments: sentAttachments } : {},
28581
+ ...autoContinue ? { origin: "continue" } : {},
28582
+ ts: (/* @__PURE__ */ new Date()).toISOString()
28583
+ });
28584
+ }
28420
28585
  if (!autoContinue) {
28421
28586
  const live = this.requireThread(threadId);
28422
28587
  const stamp = agentPurposeStamp({
@@ -28615,11 +28780,22 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
28615
28780
  ].filter(Boolean).join("\n\n---\n\n");
28616
28781
  const stderrTail = [];
28617
28782
  traceTurn("runTurn.beforeSpawn", { threadId, agent: fresh.agent });
28783
+ const steerDraft = this.openSteerPrompt.get(threadId);
28784
+ if (steerDraft) steerDraft.spawned = true;
28785
+ const promptForAgent = promptForJoinedSteer({
28786
+ threadId,
28787
+ promptText,
28788
+ latestPrompt: steerDraft?.text ?? promptText,
28789
+ agentPrompt,
28790
+ expandedPrompt,
28791
+ worktreePath: fresh.worktreePath,
28792
+ attachments: autoContinue ? [] : sentAttachments ?? []
28793
+ });
28618
28794
  const handle = await spawnAgentTurn(
28619
28795
  fresh,
28620
28796
  {
28621
28797
  cachedPrefix,
28622
- prompt: agentPrompt,
28798
+ prompt: promptForAgent,
28623
28799
  systemPrompt: turnReminders,
28624
28800
  isolateCodexPlugins: fresh.isolateCodexPlugins === true
28625
28801
  },
@@ -28747,7 +28923,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
28747
28923
  retryThread,
28748
28924
  {
28749
28925
  cachedPrefix: retryPrefix,
28750
- prompt: agentPrompt,
28926
+ prompt: promptForAgent,
28751
28927
  systemPrompt: turnReminders,
28752
28928
  isolateCodexPlugins: isolateCodexPluginRetry || retryThread.isolateCodexPlugins === true
28753
28929
  },
@@ -28907,6 +29083,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
28907
29083
  } finally {
28908
29084
  this.startingTurns.delete(threadId);
28909
29085
  this.activeTurns.delete(threadId);
29086
+ this.openSteerPrompt.delete(threadId);
28910
29087
  this.processes.delete(`${threadId}:agent`);
28911
29088
  this.stoppedTurns.delete(threadId);
28912
29089
  this.runningCount = Math.max(0, this.runningCount - 1);
@@ -56,7 +56,7 @@ import {
56
56
  updateSchedule,
57
57
  workspaceTagTargetRef,
58
58
  writeAgentBlock
59
- } from "../chunk-BXTISNKW.js";
59
+ } from "../chunk-OO3R6CS2.js";
60
60
  import "../chunk-LX5R5JOR.js";
61
61
  import {
62
62
  commentAbleTimeTask,
@@ -76,9 +76,9 @@ import {
76
76
  searchAbleTimeTasks,
77
77
  toAbleTimeIssueInfo,
78
78
  updateAbleTimeTask
79
- } from "../chunk-I5CLCWUK.js";
80
- import "../chunk-VZAJVX36.js";
81
- import "../chunk-7SCVGGF6.js";
79
+ } from "../chunk-QPLQXWND.js";
80
+ import "../chunk-JD7CC6SW.js";
81
+ import "../chunk-ZM43NTJJ.js";
82
82
  import {
83
83
  normalizeServiceOrigin
84
84
  } from "../chunk-MBYGWNLQ.js";
@@ -3,12 +3,12 @@ import {
3
3
  detectOptionalServiceClis,
4
4
  installOptionalServiceCli,
5
5
  optionalCliPresence
6
- } from "./chunk-S3U4HR5F.js";
7
- import "./chunk-OLYNM52B.js";
8
- import "./chunk-NXNNYY3Q.js";
6
+ } from "./chunk-AZ4GEEGL.js";
7
+ import "./chunk-FDXHNROD.js";
8
+ import "./chunk-AESO2KJS.js";
9
9
  import "./chunk-JAT3JFOS.js";
10
10
  import "./chunk-QVN2WOKJ.js";
11
- import "./chunk-U7PNCYNX.js";
11
+ import "./chunk-E52SQENB.js";
12
12
  import "./chunk-77WWLBCI.js";
13
13
  import "./chunk-4TR3HZFT.js";
14
14
  import "./chunk-WDRMZKVB.js";
@@ -11,7 +11,7 @@ import {
11
11
  resolveSendFollowUp,
12
12
  startOrchestration,
13
13
  waitForPidExit
14
- } from "./chunk-BXTISNKW.js";
14
+ } from "./chunk-OO3R6CS2.js";
15
15
  import "./chunk-LX5R5JOR.js";
16
16
  import "./chunk-MBYGWNLQ.js";
17
17
  import "./chunk-4GK32AYX.js";
@@ -9,17 +9,17 @@ import {
9
9
  resolveSendFollowUp,
10
10
  startOrchestration,
11
11
  waitForPidExit
12
- } from "./chunk-U53JICJ2.js";
12
+ } from "./chunk-U2N32EA6.js";
13
13
  import "./chunk-PGPSIEMW.js";
14
- import "./chunk-XWUDFLBX.js";
14
+ import "./chunk-IAPO7ZFG.js";
15
15
  import "./chunk-HH3VVTEC.js";
16
- import "./chunk-4XZJYBO2.js";
16
+ import "./chunk-ST2UQBJT.js";
17
17
  import "./chunk-7Q327QF2.js";
18
18
  import "./chunk-7H655NEW.js";
19
- import "./chunk-OLYNM52B.js";
20
- import "./chunk-NXNNYY3Q.js";
21
- import "./chunk-PX324N7P.js";
22
- import "./chunk-YN6XONV5.js";
19
+ import "./chunk-FDXHNROD.js";
20
+ import "./chunk-AESO2KJS.js";
21
+ import "./chunk-YALFZKSC.js";
22
+ import "./chunk-TUJFCJJU.js";
23
23
  import "./chunk-YEIHCSZS.js";
24
24
  import "./chunk-2P4XKWV2.js";
25
25
  import "./chunk-RSA47QYR.js";
@@ -32,7 +32,7 @@ import "./chunk-6K64FJDD.js";
32
32
  import "./chunk-LG6RJBIY.js";
33
33
  import "./chunk-QVN2WOKJ.js";
34
34
  import "./chunk-YDUHLWI5.js";
35
- import "./chunk-U7PNCYNX.js";
35
+ import "./chunk-E52SQENB.js";
36
36
  import "./chunk-77WWLBCI.js";
37
37
  import "./chunk-4TR3HZFT.js";
38
38
  import "./chunk-WDRMZKVB.js";
@@ -9,15 +9,15 @@ import {
9
9
  removeWorkspace,
10
10
  sameWorkspacePath,
11
11
  syncWorkspacesFromThreads
12
- } from "./chunk-PX324N7P.js";
13
- import "./chunk-YN6XONV5.js";
12
+ } from "./chunk-YALFZKSC.js";
13
+ import "./chunk-TUJFCJJU.js";
14
14
  import "./chunk-YEIHCSZS.js";
15
15
  import "./chunk-2P4XKWV2.js";
16
16
  import "./chunk-F2PVRF3B.js";
17
17
  import "./chunk-6K64FJDD.js";
18
18
  import "./chunk-LG6RJBIY.js";
19
19
  import "./chunk-QVN2WOKJ.js";
20
- import "./chunk-U7PNCYNX.js";
20
+ import "./chunk-E52SQENB.js";
21
21
  import "./chunk-77WWLBCI.js";
22
22
  import "./chunk-4TR3HZFT.js";
23
23
  import "./chunk-WDRMZKVB.js";
@@ -48,7 +48,7 @@ import {
48
48
  slugify,
49
49
  suggestSlug,
50
50
  switchWorktreeBranch
51
- } from "./chunk-YN6XONV5.js";
51
+ } from "./chunk-TUJFCJJU.js";
52
52
  import {
53
53
  FAMOUS_SOCCER_TEAMS,
54
54
  allocateTeamName,
@@ -70,7 +70,7 @@ import "./chunk-F2PVRF3B.js";
70
70
  import "./chunk-6K64FJDD.js";
71
71
  import "./chunk-LG6RJBIY.js";
72
72
  import "./chunk-QVN2WOKJ.js";
73
- import "./chunk-U7PNCYNX.js";
73
+ import "./chunk-E52SQENB.js";
74
74
  import "./chunk-77WWLBCI.js";
75
75
  import "./chunk-4TR3HZFT.js";
76
76
  import "./chunk-WDRMZKVB.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sideboard-ai/core",
3
- "version": "0.1.317",
3
+ "version": "0.1.319",
4
4
  "description": "Sideboard core — orchestration, agents, git worktrees, MCP server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",