@sideboard-ai/core 0.1.318 → 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.
@@ -2989,7 +2989,7 @@ async function createThread(input, _onSetupLine) {
2989
2989
  let sourceIsFork = false;
2990
2990
  if (!input.cowboy && sourceType === "branch" && (!sourceRef || sourceRef === "HEAD" || sourceRef === "default")) {
2991
2991
  if (isAbleTimeConnected() && getIssueSource() === "abletime") {
2992
- const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-KWOBUL46.js");
2992
+ const { ensureAbleTimeTask, issueAttachmentForAbleTimeTask } = await import("./abletime-DVYO4IVS.js");
2993
2993
  const task = await ensureAbleTimeTask({
2994
2994
  title: title?.trim() || "Untitled work",
2995
2995
  description: input.prompt?.trim() || void 0
@@ -5710,6 +5710,36 @@ function expandComposerPrompt(worktreePath, prompt, opts) {
5710
5710
  };
5711
5711
  }
5712
5712
 
5713
+ // src/composer/agent-has-replied.ts
5714
+ function joinSteerPrompt(base, addition) {
5715
+ const next = addition.trim();
5716
+ if (!next) return base;
5717
+ const head = base.replace(/\s+$/, "");
5718
+ if (!head) return next;
5719
+ return `${head}
5720
+ ${next}`;
5721
+ }
5722
+ function trailingUnansweredUserText(messages) {
5723
+ for (let i = messages.length - 1; i >= 0; i--) {
5724
+ const message = messages[i];
5725
+ if (!message || message.origin === "continue" || message.role === "summary") continue;
5726
+ if (message.role === "agent") {
5727
+ const text3 = (message.text ?? "").trim();
5728
+ if (text3 || (message.parts?.length ?? 0) > 0) return null;
5729
+ continue;
5730
+ }
5731
+ if (message.role === "user") return message.text;
5732
+ }
5733
+ return null;
5734
+ }
5735
+ function livePartsShowAgentReply(parts) {
5736
+ for (const part of parts) {
5737
+ if (part.type === "tool") return true;
5738
+ if ((part.type === "text" || part.type === "thinking") && part.text.trim()) return true;
5739
+ }
5740
+ return false;
5741
+ }
5742
+
5713
5743
  // src/composer/consume-attachments.ts
5714
5744
  function consumeComposerAttachments(thread) {
5715
5745
  return {
@@ -5762,6 +5792,128 @@ function shiftQueuedItem(queue, queueAttachments) {
5762
5792
  };
5763
5793
  }
5764
5794
 
5795
+ // src/orchestrator/enqueue-thread-send.ts
5796
+ function resolveSendFollowUp(thread, requested) {
5797
+ if (requested === "steer" || requested === "queue") return requested;
5798
+ return isOrchestratorThread(thread) ? followUpBehavior() : "queue";
5799
+ }
5800
+ function rewriteTrailingUserPrompt(threadId, from, to) {
5801
+ if (from === to) return;
5802
+ const thread = readThread(threadId);
5803
+ if (!thread) return;
5804
+ const messages = thread.messages.slice();
5805
+ for (let i = messages.length - 1; i >= 0; i--) {
5806
+ const message = messages[i];
5807
+ if (!message || message.origin === "continue" || message.role === "summary") continue;
5808
+ if (message.role === "user" && message.text === from) {
5809
+ messages[i] = { ...message, text: to };
5810
+ updateThread(threadId, { messages });
5811
+ }
5812
+ return;
5813
+ }
5814
+ }
5815
+ function reuseJoinedUserBubble(reused, threadId, last, promptText) {
5816
+ return reused.delete(threadId) && last?.role === "user" && last.origin !== "continue" && last.text === promptText;
5817
+ }
5818
+ function promptForJoinedSteer(input) {
5819
+ if (input.latestPrompt === input.promptText) return input.agentPrompt;
5820
+ rewriteTrailingUserPrompt(input.threadId, input.promptText, input.latestPrompt);
5821
+ const { agentPrompt: expandedLatest } = expandComposerPrompt(
5822
+ input.worktreePath,
5823
+ expandCanonicalGitRequest(input.latestPrompt),
5824
+ { attachments: input.attachments }
5825
+ );
5826
+ return input.expandedPrompt && input.agentPrompt.endsWith(input.expandedPrompt) ? input.agentPrompt.slice(0, -input.expandedPrompt.length) + expandedLatest : `${input.agentPrompt}
5827
+
5828
+ ${expandedLatest}`;
5829
+ }
5830
+ function clearSendBookkeeping(host, threadId) {
5831
+ host.crashContinued.delete(threadId);
5832
+ host.jobContinueCount.delete(threadId);
5833
+ host.jobContinueNudged.delete(threadId);
5834
+ host.haltDrain.delete(threadId);
5835
+ }
5836
+ async function enqueueThreadSend(host, threadRef, prompt, opts) {
5837
+ const thread = host.requireThread(threadRef);
5838
+ if (thread.status === "archived") {
5839
+ throw new Error(`Thread is archived: ${thread.id}`);
5840
+ }
5841
+ let shouldSteer = false;
5842
+ const sent = await withThreadLock(thread.id, async () => {
5843
+ const current = host.requireThread(thread.id);
5844
+ if (current.status === "archived") {
5845
+ throw new Error(`Thread is archived: ${thread.id}`);
5846
+ }
5847
+ const followUp = resolveSendFollowUp(current, opts?.followUp);
5848
+ const explicit = opts?.attachments;
5849
+ const consumed = explicit !== void 0 ? { attachments: current.attachments, consumed: explicit } : consumeComposerAttachments(current);
5850
+ const inFlightEarly = host.activeTurns.has(thread.id) || host.startingTurns.has(thread.id) || current.status === "running";
5851
+ const agentHasRepliedEarly = livePartsShowAgentReply(readTurnLiveParts(current.id));
5852
+ const draft = host.openSteerPrompt.get(current.id);
5853
+ const queuedHead = !inFlightEarly && current.status === "queued" && current.queue.length > 0 ? current.queue[0] : null;
5854
+ const unanswered = followUp === "steer" && !agentHasRepliedEarly ? draft?.text ?? (inFlightEarly ? trailingUnansweredUserText(current.messages) : queuedHead) : null;
5855
+ if (unanswered != null && (draft ? !draft.spawned : queuedHead != null)) {
5856
+ clearSendBookkeeping(host, thread.id);
5857
+ const combined = joinSteerPrompt(unanswered, prompt);
5858
+ if (draft && !draft.spawned) {
5859
+ draft.text = combined;
5860
+ rewriteTrailingUserPrompt(current.id, unanswered, combined);
5861
+ } else {
5862
+ const queue = current.queue.slice();
5863
+ queue[0] = combined;
5864
+ const queueAttachments = alignQueueAttachments(queue.length, current.queueAttachments);
5865
+ if (consumed.consumed.length > 0) {
5866
+ queueAttachments[0] = [...queueAttachments[0] ?? [], ...consumed.consumed];
5867
+ }
5868
+ const patch2 = { queue, queueAttachments };
5869
+ if (explicit === void 0 && consumed.consumed.length > 0) {
5870
+ patch2.attachments = consumed.attachments;
5871
+ }
5872
+ updateThread(current.id, patch2);
5873
+ host.emit({ type: "queue_changed", threadId: current.id, queue });
5874
+ }
5875
+ if (thisProcessShouldDrainAgentQueues() && !inFlightEarly) {
5876
+ host.armDrain(current.id);
5877
+ }
5878
+ return host.requireThread(current.id);
5879
+ }
5880
+ const promptToQueue = unanswered != null ? joinSteerPrompt(unanswered, prompt) : prompt;
5881
+ if (unanswered != null) {
5882
+ if (draft) draft.text = promptToQueue;
5883
+ rewriteTrailingUserPrompt(current.id, unanswered, promptToQueue);
5884
+ host.reusedUserPrompt.add(current.id);
5885
+ }
5886
+ const queued = appendQueuedItem(
5887
+ current.queue,
5888
+ current.queueAttachments,
5889
+ promptToQueue,
5890
+ consumed.consumed
5891
+ );
5892
+ clearSendBookkeeping(host, thread.id);
5893
+ const inFlight = host.activeTurns.has(thread.id) || host.startingTurns.has(thread.id) || current.status === "running";
5894
+ shouldSteer = followUp === "steer" && (inFlight || current.queue.length > 0);
5895
+ const patch = queued;
5896
+ if (explicit === void 0 && consumed.consumed.length > 0) {
5897
+ patch.attachments = consumed.attachments;
5898
+ }
5899
+ if (!inFlight) patch.status = "queued";
5900
+ const pid = current.agentPid;
5901
+ if (typeof pid === "number" && pid > 0 && !host.pidAlive(pid)) {
5902
+ patch.agentPid = null;
5903
+ }
5904
+ updateThread(thread.id, patch);
5905
+ host.emit({ type: "queue_changed", threadId: thread.id, queue: queued.queue });
5906
+ if (!inFlight) {
5907
+ host.emit({ type: "status_changed", threadId: thread.id, status: "queued" });
5908
+ }
5909
+ if (thisProcessShouldDrainAgentQueues() && !shouldSteer) {
5910
+ host.armDrain(thread.id);
5911
+ }
5912
+ return host.requireThread(thread.id);
5913
+ });
5914
+ return { thread: sent, shouldSteer };
5915
+ }
5916
+
5765
5917
  // src/agents/instructions.ts
5766
5918
  import { existsSync as existsSync12 } from "fs";
5767
5919
  import { join as join12 } from "path";
@@ -6815,7 +6967,7 @@ function formatScheduledPrompt(name, prompt) {
6815
6967
  ${prompt}`;
6816
6968
  }
6817
6969
  async function defaultDeps() {
6818
- const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-2SXK4U65.js");
6970
+ const { getOrchestrator: getOrchestrator2, startOrchestration: startOrchestration2 } = await import("./orchestrator-NCA4LSCC.js");
6819
6971
  const orch = getOrchestrator2();
6820
6972
  return {
6821
6973
  findThread: (id) => findThreadByRef(id),
@@ -6931,10 +7083,6 @@ async function waitForPidExit(pid, timeoutMs) {
6931
7083
  }
6932
7084
  return true;
6933
7085
  }
6934
- function resolveSendFollowUp(thread, requested) {
6935
- if (requested === "steer" || requested === "queue") return requested;
6936
- return isOrchestratorThread(thread) ? followUpBehavior() : "queue";
6937
- }
6938
7086
  function resolveOrchChildFollowUp(requested) {
6939
7087
  if (requested === "steer" || requested === "queue") return requested;
6940
7088
  return followUpBehavior();
@@ -6963,6 +7111,13 @@ var Orchestrator = class {
6963
7111
  draining = /* @__PURE__ */ new Set();
6964
7112
  /** Threads past setStatus(running) but not yet in activeTurns (spawn in flight). */
6965
7113
  startingTurns = /* @__PURE__ */ new Set();
7114
+ /**
7115
+ * Prompt for the turn that has not been answered yet. Steer follow-ups before
7116
+ * any agent output are joined onto this text instead of starting a second bubble.
7117
+ */
7118
+ openSteerPrompt = /* @__PURE__ */ new Map();
7119
+ /** Next runTurn should keep the user bubble already rewritten to this prompt. */
7120
+ reusedUserPrompt = /* @__PURE__ */ new Set();
6966
7121
  /** Last sync thread-file read for false-stop heal (throttled per thread). */
6967
7122
  lastReconcileHealAt = /* @__PURE__ */ new Map();
6968
7123
  /** Per-repo timestamp of the last `reconcile(repo, { light: true })`. */
@@ -7573,54 +7728,29 @@ var Orchestrator = class {
7573
7728
  return thread;
7574
7729
  }
7575
7730
  async send(threadRef, prompt, opts) {
7576
- const thread = this.requireThread(threadRef);
7577
- if (thread.status === "archived") {
7578
- throw new Error(`Thread is archived: ${thread.id}`);
7579
- }
7580
- let shouldSteer = false;
7581
- const sent = await withThreadLock(thread.id, async () => {
7582
- const current = this.requireThread(thread.id);
7583
- if (current.status === "archived") {
7584
- throw new Error(`Thread is archived: ${thread.id}`);
7585
- }
7586
- const followUp = resolveSendFollowUp(current, opts?.followUp);
7587
- const explicit = opts?.attachments;
7588
- const consumed = explicit !== void 0 ? { attachments: current.attachments, consumed: explicit } : consumeComposerAttachments(current);
7589
- const queued = appendQueuedItem(
7590
- current.queue,
7591
- current.queueAttachments,
7592
- prompt,
7593
- consumed.consumed
7594
- );
7595
- this.crashContinued.delete(thread.id);
7596
- this.jobContinueCount.delete(thread.id);
7597
- this.jobContinueNudged.delete(thread.id);
7598
- this.haltDrain.delete(thread.id);
7599
- const inFlight = this.activeTurns.has(thread.id) || this.startingTurns.has(thread.id) || current.status === "running";
7600
- shouldSteer = followUp === "steer" && (inFlight || current.queue.length > 0);
7601
- const patch = queued;
7602
- if (explicit === void 0 && consumed.consumed.length > 0) {
7603
- patch.attachments = consumed.attachments;
7604
- }
7605
- if (!inFlight) patch.status = "queued";
7606
- const pid = current.agentPid;
7607
- if (typeof pid === "number" && pid > 0 && !isPidAlive(pid)) {
7608
- patch.agentPid = null;
7609
- }
7610
- updateThread(thread.id, patch);
7611
- this.emit({ type: "queue_changed", threadId: thread.id, queue: queued.queue });
7612
- if (!inFlight) {
7613
- this.emit({ type: "status_changed", threadId: thread.id, status: "queued" });
7614
- }
7615
- if (thisProcessShouldDrainAgentQueues() && !shouldSteer) {
7616
- this.armDrain(thread.id);
7617
- }
7618
- return this.requireThread(thread.id);
7619
- });
7620
- if (shouldSteer && sent.queue.length > 0) {
7621
- return this.sendQueuedMessageNow(sent.id, sent.queue.length - 1);
7731
+ const sent = await enqueueThreadSend(
7732
+ {
7733
+ activeTurns: this.activeTurns,
7734
+ startingTurns: this.startingTurns,
7735
+ openSteerPrompt: this.openSteerPrompt,
7736
+ reusedUserPrompt: this.reusedUserPrompt,
7737
+ crashContinued: this.crashContinued,
7738
+ jobContinueCount: this.jobContinueCount,
7739
+ jobContinueNudged: this.jobContinueNudged,
7740
+ haltDrain: this.haltDrain,
7741
+ emit: (event) => this.emit(event),
7742
+ armDrain: (id) => this.armDrain(id),
7743
+ requireThread: (ref) => this.requireThread(ref),
7744
+ pidAlive: (pid) => isPidAlive(pid)
7745
+ },
7746
+ threadRef,
7747
+ prompt,
7748
+ opts
7749
+ );
7750
+ if (sent.shouldSteer && sent.thread.queue.length > 0) {
7751
+ return this.sendQueuedMessageNow(sent.thread.id, sent.thread.queue.length - 1);
7622
7752
  }
7623
- return sent;
7753
+ return sent.thread;
7624
7754
  }
7625
7755
  async fanOut(threadRefs, prompt, opts) {
7626
7756
  const results = [];
@@ -7777,6 +7907,10 @@ var Orchestrator = class {
7777
7907
  this.emit({ type: "status_changed", threadId, status: "running" });
7778
7908
  this.emit({ type: "turn_started", threadId, prompt });
7779
7909
  try {
7910
+ this.openSteerPrompt.set(threadId, {
7911
+ text: typeof prompt === "string" ? prompt : "",
7912
+ spawned: false
7913
+ });
7780
7914
  try {
7781
7915
  const baseline = await captureTurnBaseline(thread.worktreePath);
7782
7916
  if (baseline) this.turnBaselines.set(threadId, baseline);
@@ -7802,18 +7936,21 @@ var Orchestrator = class {
7802
7936
  this.emit({ type: "error", threadId, message: `context compact failed: ${message}` });
7803
7937
  thread = this.requireThread(threadId);
7804
7938
  }
7805
- const promptText = typeof prompt === "string" ? prompt : "";
7939
+ const promptText = this.openSteerPrompt.get(threadId)?.text ?? (typeof prompt === "string" ? prompt : "");
7806
7940
  const autoContinue = isJobContinuePrompt(promptText) || promptText.startsWith("The previous agent process ended before it finished.");
7807
7941
  const parked = takePendingTurnAttachments(thread);
7808
7942
  const sentAttachments = !autoContinue && parked.length > 0 ? parked : void 0;
7809
7943
  if (!autoContinue) clearAgentBlock(threadId);
7810
- appendMessage(threadId, {
7811
- role: "user",
7812
- text: promptText,
7813
- ...sentAttachments ? { attachments: sentAttachments } : {},
7814
- ...autoContinue ? { origin: "continue" } : {},
7815
- ts: (/* @__PURE__ */ new Date()).toISOString()
7816
- });
7944
+ const lastShown = this.requireThread(threadId).messages.at(-1);
7945
+ if (!reuseJoinedUserBubble(this.reusedUserPrompt, threadId, lastShown, promptText)) {
7946
+ appendMessage(threadId, {
7947
+ role: "user",
7948
+ text: promptText,
7949
+ ...sentAttachments ? { attachments: sentAttachments } : {},
7950
+ ...autoContinue ? { origin: "continue" } : {},
7951
+ ts: (/* @__PURE__ */ new Date()).toISOString()
7952
+ });
7953
+ }
7817
7954
  if (!autoContinue) {
7818
7955
  const live = this.requireThread(threadId);
7819
7956
  const stamp = agentPurposeStamp({
@@ -8012,11 +8149,22 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
8012
8149
  ].filter(Boolean).join("\n\n---\n\n");
8013
8150
  const stderrTail = [];
8014
8151
  traceTurn("runTurn.beforeSpawn", { threadId, agent: fresh.agent });
8152
+ const steerDraft = this.openSteerPrompt.get(threadId);
8153
+ if (steerDraft) steerDraft.spawned = true;
8154
+ const promptForAgent = promptForJoinedSteer({
8155
+ threadId,
8156
+ promptText,
8157
+ latestPrompt: steerDraft?.text ?? promptText,
8158
+ agentPrompt,
8159
+ expandedPrompt,
8160
+ worktreePath: fresh.worktreePath,
8161
+ attachments: autoContinue ? [] : sentAttachments ?? []
8162
+ });
8015
8163
  const handle = await spawnAgentTurn(
8016
8164
  fresh,
8017
8165
  {
8018
8166
  cachedPrefix,
8019
- prompt: agentPrompt,
8167
+ prompt: promptForAgent,
8020
8168
  systemPrompt: turnReminders,
8021
8169
  isolateCodexPlugins: fresh.isolateCodexPlugins === true
8022
8170
  },
@@ -8144,7 +8292,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
8144
8292
  retryThread,
8145
8293
  {
8146
8294
  cachedPrefix: retryPrefix,
8147
- prompt: agentPrompt,
8295
+ prompt: promptForAgent,
8148
8296
  systemPrompt: turnReminders,
8149
8297
  isolateCodexPlugins: isolateCodexPluginRetry || retryThread.isolateCodexPlugins === true
8150
8298
  },
@@ -8304,6 +8452,7 @@ ${formatEnvReminder(projectNameForRepoPath(thread.repoPath || thread.worktreePat
8304
8452
  } finally {
8305
8453
  this.startingTurns.delete(threadId);
8306
8454
  this.activeTurns.delete(threadId);
8455
+ this.openSteerPrompt.delete(threadId);
8307
8456
  this.processes.delete(`${threadId}:agent`);
8308
8457
  this.stoppedTurns.delete(threadId);
8309
8458
  this.runningCount = Math.max(0, this.runningCount - 1);
@@ -9867,6 +10016,9 @@ export {
9867
10016
  discoverSkills,
9868
10017
  readSkillBody,
9869
10018
  expandComposerPrompt,
10019
+ joinSteerPrompt,
10020
+ trailingUnansweredUserText,
10021
+ livePartsShowAgentReply,
9870
10022
  consumeComposerAttachments,
9871
10023
  takePendingTurnAttachments,
9872
10024
  alignQueueAttachments,
@@ -9875,6 +10027,7 @@ export {
9875
10027
  removeQueuedItem,
9876
10028
  moveQueuedItemToFront,
9877
10029
  shiftQueuedItem,
10030
+ resolveSendFollowUp,
9878
10031
  packagedDetachedJobPath,
9879
10032
  resolveDetachedJobScript,
9880
10033
  formatDetachedJobInvoke,
@@ -9914,7 +10067,6 @@ export {
9914
10067
  RUN_SCRIPT_DESKTOP_ADOPT_MS,
9915
10068
  isPidAlive,
9916
10069
  waitForPidExit,
9917
- resolveSendFollowUp,
9918
10070
  resolveOrchChildFollowUp,
9919
10071
  LIGHT_RECONCILE_THROTTLE_MS,
9920
10072
  Orchestrator,
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  abletimeRestUrl,
3
3
  textFromAbleTimeDoc
4
- } from "./chunk-2HOZMSKQ.js";
4
+ } from "./chunk-AUJ4XB6H.js";
5
5
  import {
6
6
  assertAbleTimeCredential,
7
7
  callAbleTimeTool,
8
8
  normalizeAbleTimeHost,
9
9
  rewriteAbleTimeError
10
- } from "./chunk-7ADEYEMH.js";
10
+ } from "./chunk-LXBZQP2Q.js";
11
11
  import {
12
12
  httpFetch
13
13
  } from "./chunk-JAT3JFOS.js";
@@ -549,9 +549,12 @@ function issueAttachmentForAbleTimeTask(task) {
549
549
  ].filter(Boolean).join("\n")
550
550
  };
551
551
  }
552
+ function ableTimeStateIsClosed(state) {
553
+ const value = (state ?? "").trim().toLowerCase();
554
+ return Boolean(value && CLOSED_STATES.has(value));
555
+ }
552
556
  function isOpenTask(task) {
553
- const state = (task.state ?? "").toLowerCase();
554
- return !state || !CLOSED_STATES.has(state);
557
+ return !ableTimeStateIsClosed(task.state);
555
558
  }
556
559
  async function getAbleTimeOrientation(opts) {
557
560
  const raw = await callAbleTimeTool("orientation", {}, opts);
@@ -847,6 +850,7 @@ export {
847
850
  mapAbleTimeTask,
848
851
  toAbleTimeIssueInfo,
849
852
  issueAttachmentForAbleTimeTask,
853
+ ableTimeStateIsClosed,
850
854
  getAbleTimeOrientation,
851
855
  listAbleTimeProjects,
852
856
  listAbleTimeTasks,
@@ -155,7 +155,7 @@ function textsFromUnknown(value) {
155
155
  return "";
156
156
  }
157
157
  async function abletimeMcpRequest(method, params, opts) {
158
- const rawToken = opts?.token ?? await import("./abletime-oauth-S4AXA4WR.js").then((m) => m.ensureAbleTimeAccessToken());
158
+ const rawToken = opts?.token ?? await import("./abletime-oauth-2VWQCXGT.js").then((m) => m.ensureAbleTimeAccessToken());
159
159
  if (!rawToken?.trim()) {
160
160
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
161
161
  }
@@ -226,9 +226,9 @@ async function callAbleTimeTool(name, args = {}, opts) {
226
226
  if (!opts?.token && !isAbleTimeConnected()) {
227
227
  throw new Error("AbleTime is not connected \u2014 paste a personal access token in Account settings");
228
228
  }
229
- const rawToken = opts?.token ?? await import("./abletime-oauth-S4AXA4WR.js").then((m) => m.ensureAbleTimeAccessToken());
229
+ const rawToken = opts?.token ?? await import("./abletime-oauth-2VWQCXGT.js").then((m) => m.ensureAbleTimeAccessToken());
230
230
  if (rawToken && ableTimeUsesRest(rawToken)) {
231
- const { callAbleTimeRestTool } = await import("./abletime-rest-ORBELZQO.js");
231
+ const { callAbleTimeRestTool } = await import("./abletime-rest-7NICZYOC.js");
232
232
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
233
233
  }
234
234
  const requestOpts = { ...opts, pm: opts?.pm ?? abletimeToolUsesPm(name) };
@@ -244,7 +244,7 @@ async function callAbleTimeTool(name, args = {}, opts) {
244
244
  return await call();
245
245
  }
246
246
  if (rawToken && ableTimeUsesRest(rawToken) && isAbleTimeRejectedCredential(message)) {
247
- const { callAbleTimeRestTool } = await import("./abletime-rest-ORBELZQO.js");
247
+ const { callAbleTimeRestTool } = await import("./abletime-rest-7NICZYOC.js");
248
248
  return callAbleTimeRestTool(name, args, { ...opts, token: rawToken });
249
249
  }
250
250
  throw err instanceof Error ? new Error(rewriteAbleTimeError(err.message)) : err;