mirror of
https://github.com/harivansh-afk/clanker-agent.git
synced 2026-04-15 07:04:45 +00:00
fix: address steer review feedback
Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
parent
4a29c13e0d
commit
89b705194b
2 changed files with 56 additions and 31 deletions
|
|
@ -173,11 +173,19 @@ export class GatewayRuntime {
|
||||||
return this.enqueueManagedMessage({ request });
|
return this.enqueueManagedMessage({ request });
|
||||||
}
|
}
|
||||||
|
|
||||||
private async enqueueManagedMessage(queuedMessage: {
|
private async queueManagedMessage(queuedMessage: {
|
||||||
request: GatewayMessageRequest;
|
request: GatewayMessageRequest;
|
||||||
onStart?: () => void;
|
onStart?: () => void;
|
||||||
onFinish?: () => void;
|
onFinish?: () => void;
|
||||||
}): Promise<GatewayMessageResult> {
|
}):
|
||||||
|
Promise<
|
||||||
|
| { accepted: false; errorResult: GatewayMessageResult }
|
||||||
|
| {
|
||||||
|
accepted: true;
|
||||||
|
managedSession: ManagedGatewaySession;
|
||||||
|
completion: Promise<GatewayMessageResult>;
|
||||||
|
}
|
||||||
|
> {
|
||||||
const managedSession = await this.ensureSession(
|
const managedSession = await this.ensureSession(
|
||||||
queuedMessage.request.sessionKey,
|
queuedMessage.request.sessionKey,
|
||||||
);
|
);
|
||||||
|
|
@ -186,22 +194,39 @@ export class GatewayRuntime {
|
||||||
`[queue] session=${queuedMessage.request.sessionKey} queue full (${this.config.session.maxQueuePerSession})`,
|
`[queue] session=${queuedMessage.request.sessionKey} queue full (${this.config.session.maxQueuePerSession})`,
|
||||||
);
|
);
|
||||||
return {
|
return {
|
||||||
|
accepted: false,
|
||||||
|
errorResult: {
|
||||||
ok: false,
|
ok: false,
|
||||||
response: "",
|
response: "",
|
||||||
error: `Queue full (${this.config.session.maxQueuePerSession} pending).`,
|
error: `Queue full (${this.config.session.maxQueuePerSession} pending).`,
|
||||||
sessionKey: queuedMessage.request.sessionKey,
|
sessionKey: queuedMessage.request.sessionKey,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Promise<GatewayMessageResult>((resolve) => {
|
const completion = new Promise<GatewayMessageResult>((resolve) => {
|
||||||
managedSession.queue.push({ ...queuedMessage, resolve });
|
managedSession.queue.push({ ...queuedMessage, resolve });
|
||||||
|
});
|
||||||
this.logSession(
|
this.logSession(
|
||||||
managedSession,
|
managedSession,
|
||||||
`queued source=${queuedMessage.request.source ?? "extension"} depth=${managedSession.queue.length}`,
|
`queued source=${queuedMessage.request.source ?? "extension"} depth=${managedSession.queue.length}`,
|
||||||
);
|
);
|
||||||
this.emitState(managedSession);
|
this.emitState(managedSession);
|
||||||
void this.processNext(managedSession);
|
void this.processNext(managedSession);
|
||||||
});
|
|
||||||
|
return { accepted: true, managedSession, completion };
|
||||||
|
}
|
||||||
|
|
||||||
|
private async enqueueManagedMessage(queuedMessage: {
|
||||||
|
request: GatewayMessageRequest;
|
||||||
|
onStart?: () => void;
|
||||||
|
onFinish?: () => void;
|
||||||
|
}): Promise<GatewayMessageResult> {
|
||||||
|
const queued = await this.queueManagedMessage(queuedMessage);
|
||||||
|
if (!queued.accepted) {
|
||||||
|
return queued.errorResult;
|
||||||
|
}
|
||||||
|
return queued.completion;
|
||||||
}
|
}
|
||||||
|
|
||||||
async addSubscriber(
|
async addSubscriber(
|
||||||
|
|
@ -1124,24 +1149,24 @@ export class GatewayRuntime {
|
||||||
return { ok: true, mode: "steer", sessionKey };
|
return { ok: true, mode: "steer", sessionKey };
|
||||||
}
|
}
|
||||||
|
|
||||||
if (managedSession.queue.length >= this.config.session.maxQueuePerSession) {
|
const queued = await this.queueManagedMessage({
|
||||||
throw new HttpError(
|
|
||||||
409,
|
|
||||||
`Queue full (${this.config.session.maxQueuePerSession} pending).`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.logSession(
|
|
||||||
managedSession,
|
|
||||||
`steer-fallback queue text="${preview}" depth=${managedSession.queue.length + 1}`,
|
|
||||||
);
|
|
||||||
void this.enqueueManagedMessage({
|
|
||||||
request: {
|
request: {
|
||||||
sessionKey,
|
sessionKey,
|
||||||
text,
|
text,
|
||||||
source: "extension",
|
source: "extension",
|
||||||
},
|
},
|
||||||
}).then((result) => {
|
});
|
||||||
|
if (!queued.accepted) {
|
||||||
|
throw new HttpError(
|
||||||
|
409,
|
||||||
|
queued.errorResult.error ?? "Failed to queue message.",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.logSession(
|
||||||
|
queued.managedSession,
|
||||||
|
`steer-fallback queued text="${preview}"`,
|
||||||
|
);
|
||||||
|
void queued.completion.then((result) => {
|
||||||
if (!result.ok) {
|
if (!result.ok) {
|
||||||
this.log(
|
this.log(
|
||||||
`[steer] session=${sessionKey} queued fallback failed: ${result.error ?? "Unknown error"}`,
|
`[steer] session=${sessionKey} queued fallback failed: ${result.error ?? "Unknown error"}`,
|
||||||
|
|
|
||||||
|
|
@ -107,12 +107,12 @@ describe("GatewayRuntime steer handling", () => {
|
||||||
sessionKey: "chat",
|
sessionKey: "chat",
|
||||||
});
|
});
|
||||||
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
||||||
|
|
||||||
expect(session.steer).not.toHaveBeenCalled();
|
expect(session.steer).not.toHaveBeenCalled();
|
||||||
|
await vi.waitFor(() => {
|
||||||
expect(session.prompt).toHaveBeenCalledWith("pick this up next", {
|
expect(session.prompt).toHaveBeenCalledWith("pick this up next", {
|
||||||
images: undefined,
|
images: undefined,
|
||||||
source: "extension",
|
source: "extension",
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue