MCPcopy
hub / github.com/coder/mux / waitForIdle

Method waitForIdle

src/node/services/agentSession.ts:4973–5007  ·  view source on GitHub ↗
(signal?: AbortSignal)

Source from the content-addressed store, hash-verified

4971 }
4972
4973 async waitForIdle(signal?: AbortSignal): Promise<void> {
4974 assert(
4975 signal == null || typeof signal.aborted === "boolean",
4976 "waitForIdle signal must be an AbortSignal"
4977 );
4978 if (signal?.aborted === true) {
4979 throw new Error("Waiting for session idle canceled.");
4980 }
4981 if (this.turnPhase === TurnPhase.IDLE) {
4982 return;
4983 }
4984
4985 await new Promise<void>((resolve, reject) => {
4986 let settled = false;
4987 const settle = (callback: () => void) => {
4988 if (settled) {
4989 return;
4990 }
4991 settled = true;
4992 signal?.removeEventListener("abort", abort);
4993 callback();
4994 };
4995 const waiter = () => settle(resolve);
4996 const abort = () => {
4997 const waiterIndex = this.idleWaiters.indexOf(waiter);
4998 if (waiterIndex !== -1) {
4999 this.idleWaiters.splice(waiterIndex, 1);
5000 }
5001 settle(() => reject(new Error("Waiting for session idle canceled.")));
5002 };
5003
5004 this.idleWaiters.push(waiter);
5005 signal?.addEventListener("abort", abort, { once: true });
5006 });
5007 }
5008
5009 /**
5010 * Slash workflow commands are user follow-ups even though they do not live in MessageQueue.

Calls 3

pushMethod · 0.65
assertFunction · 0.50
addEventListenerMethod · 0.45

Tested by

no test coverage detected