Skip to content

Commit 009d6b2

Browse files
committed
fix(qa): retain crabline delivery targets
1 parent 654544b commit 009d6b2

2 files changed

Lines changed: 43 additions & 2 deletions

File tree

extensions/qa-lab/src/crabline-transport.test.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,40 @@ describe("crabline transport", () => {
115115
direction: "outbound",
116116
text: "assistant via fake telegram",
117117
});
118+
119+
await transport.state.reset();
120+
const delivery = transport.buildAgentDelivery({ target: "dm:qa-operator" });
121+
const { response: directResponse, release: directRelease } = await fetchWithSsrFGuard({
122+
url: `${telegram?.apiRoot}/bot${telegram?.botToken}/sendMessage`,
123+
init: {
124+
body: JSON.stringify({
125+
chat_id: delivery.to,
126+
text: "assistant after reset",
127+
}),
128+
headers: { "content-type": "application/json" },
129+
method: "POST",
130+
},
131+
policy: { allowPrivateNetwork: true },
132+
auditContext: "qa-lab-crabline-transport-reset-test",
133+
});
134+
await directRelease();
135+
expect(directResponse.ok).toBe(true);
136+
137+
await expect(
138+
transport.state.waitFor({
139+
direction: "outbound",
140+
kind: "message-text",
141+
textIncludes: "assistant after reset",
142+
timeoutMs: 1_000,
143+
}),
144+
).resolves.toMatchObject({
145+
conversation: {
146+
id: "qa-operator",
147+
kind: "direct",
148+
},
149+
direction: "outbound",
150+
text: "assistant after reset",
151+
});
118152
} finally {
119153
await transport.cleanup?.();
120154
}

extensions/qa-lab/src/crabline-transport.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ const RECORDER_SYNC_INTERVAL_MS = 50;
3333

3434
type QaCrablineTransportState = QaTransportState & {
3535
cleanup: () => Promise<void>;
36+
rememberProviderTarget: (providerTargetKey: string, qaTarget: string) => void;
3637
};
3738

3839
async function waitForCrablineReady(params: {
@@ -193,6 +194,9 @@ function createCrablineState(params: {
193194
});
194195
return message;
195196
},
197+
rememberProviderTarget(providerTargetKey, qaTarget) {
198+
targetByProviderTarget.set(providerTargetKey, qaTarget);
199+
},
196200
addOutboundMessage: baseState.addOutboundMessage.bind(baseState),
197201
readMessage: baseState.readMessage.bind(baseState),
198202
async searchMessages(input: QaBusSearchMessagesInput) {
@@ -247,8 +251,11 @@ class QaCrablineTransport extends QaStateBackedTransportAdapter {
247251
channel: this.#adapter.channel,
248252
});
249253

250-
buildAgentDelivery = ({ target }: { target: string }) =>
251-
this.#adapter.createAgentDelivery({ target });
254+
buildAgentDelivery = ({ target }: { target: string }) => {
255+
const delivery = this.#adapter.createAgentDelivery({ target });
256+
this.#state.rememberProviderTarget(delivery.to ?? delivery.replyTo, target);
257+
return delivery;
258+
};
252259

253260
handleAction = async (_params: {
254261
action: QaTransportActionName;

0 commit comments

Comments
 (0)