

























@@ -24,26 +24,57 @@ function summarizeSessionRows(rows: Array<Record<string, unknown>> | undefined)
2424}));
2525}
262627+function formatUnknownError(error: unknown): string {
28+if (error instanceof Error) {
29+return error.message;
30+}
31+if (error === undefined || error === null) {
32+return "";
33+}
34+if (typeof error === "string") {
35+return error;
36+}
37+if (typeof error === "number" || typeof error === "boolean" || typeof error === "bigint") {
38+return `${error}`;
39+}
40+if (typeof error === "symbol") {
41+return error.description ?? "symbol";
42+}
43+try {
44+return JSON.stringify(error) ?? "";
45+} catch {
46+return Object.prototype.toString.call(error);
47+}
48+}
49+2750async function waitForGatewaySeededConversation(gateway: GatewayRpcClient) {
2851let lastList: { sessions?: Array<Record<string, unknown>> } | undefined;
52+let lastError: unknown;
2953try {
3054return await waitFor(
3155"seeded conversation in gateway sessions.list",
3256async () => {
33-lastList = await gateway.request<{ sessions?: Array<Record<string, unknown>> }>(
34-"sessions.list",
35-{ limit: 50, includeDerivedTitles: true, includeLastMessage: true },
36-);
57+try {
58+lastList = await gateway.request<{ sessions?: Array<Record<string, unknown>> }>(
59+"sessions.list",
60+{ limit: 50, includeDerivedTitles: false, includeLastMessage: false },
61+);
62+lastError = undefined;
63+} catch (error) {
64+lastError = error;
65+return undefined;
66+}
3767return lastList.sessions?.find((entry) => entry.key === "agent:main:main");
3868},
39-60_000,
69+180_000,
4070);
4171} catch (error) {
4272throw new Error(
4373`gateway sessions.list did not include seeded conversation: ${JSON.stringify(
4474 {
4575 count: lastList?.sessions?.length ?? 0,
4676 sessions: summarizeSessionRows(lastList?.sessions),
77+ lastError: formatUnknownError(lastError),
4778 },
4879 null,
4980 2,
@@ -60,24 +91,9 @@ async function main() {
6091assert(gatewayToken, "missing GW_TOKEN");
61926293const gateway = await connectGateway({ url: gatewayUrl, token: gatewayToken });
63-let mcpHandle = await connectMcpClient({
64- gatewayUrl,
65- gatewayToken,
66-});
67-let mcp = mcpHandle.client;
94+let mcpHandle: Awaited<ReturnType<typeof connectMcpClient>> | undefined;
68956996try {
70-if (await maybeApprovePendingBridgePairing(gateway)) {
71-await Promise.allSettled([mcp.close(), mcpHandle.transport.close()]);
72-mcpHandle = await connectMcpClient({
73- gatewayUrl,
74- gatewayToken,
75-});
76-mcp = mcpHandle.client;
77-}
78-const callTool = <T>(params: Parameters<typeof mcp.callTool>[0]) =>
79-mcp.callTool(params, undefined, { timeout: 240_000 }) as Promise<T>;
80-8197const gatewayConversation = await waitForGatewaySeededConversation(gateway);
8298assert(
8399(gatewayConversation.deliveryContext as { channel?: unknown } | undefined)?.channel ===
@@ -89,6 +105,23 @@ async function main() {
89105"expected seeded gateway deliveryContext target",
90106);
91107108+mcpHandle = await connectMcpClient({
109+ gatewayUrl,
110+ gatewayToken,
111+});
112+let mcp = mcpHandle.client;
113+114+if (await maybeApprovePendingBridgePairing(gateway)) {
115+await Promise.allSettled([mcp.close(), mcpHandle.transport.close()]);
116+mcpHandle = await connectMcpClient({
117+ gatewayUrl,
118+ gatewayToken,
119+});
120+mcp = mcpHandle.client;
121+}
122+const callTool = <T>(params: Parameters<typeof mcp.callTool>[0]) =>
123+mcp.callTool(params, undefined, { timeout: 240_000 }) as Promise<T>;
124+92125let lastMcpConversationList: unknown;
93126const conversation = await waitFor(
94127"seeded conversation in conversations_list",
@@ -333,7 +366,10 @@ async function main() {
333366) + "\n",
334367);
335368} finally {
336-await Promise.allSettled([mcp.close(), mcpHandle.transport.close(), gateway.close()]);
369+await Promise.allSettled([
370+ ...(mcpHandle ? [mcpHandle.client.close(), mcpHandle.transport.close()] : []),
371+gateway.close(),
372+]);
337373}
338374}
339375此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。