























@@ -42,6 +42,50 @@ vi.mock("../tasks/task-registry.maintenance.js", () => ({
4242import { createChatRunState } from "./server-chat-state.js";
4343import { startGatewayEarlyRuntime, startGatewayPluginDiscovery } from "./server-startup-early.js";
444445+type StartGatewayEarlyRuntimeInput = Parameters<typeof startGatewayEarlyRuntime>[0];
46+47+const log = {
48+info: () => {},
49+warn: () => {},
50+};
51+52+function earlyRuntimeInput(
53+overrides: Partial<StartGatewayEarlyRuntimeInput> = {},
54+): StartGatewayEarlyRuntimeInput {
55+const chatRunState = createChatRunState();
56+return {
57+minimalTestGateway: true,
58+cfgAtStart: {} as never,
59+port: 18_789,
60+gatewayTls: { enabled: false },
61+gatewayDirectReachable: false,
62+tailscaleMode: "off" as never,
63+ log,
64+logDiscovery: log,
65+nodeRegistry: {} as never,
66+broadcast: () => {},
67+nodeSendToAllSubscribed: () => {},
68+getPresenceVersion: () => 0,
69+getHealthVersion: () => 0,
70+refreshGatewayHealthSnapshot: async () => ({}) as never,
71+logHealth: { error: () => {} },
72+dedupe: new Map(),
73+chatAbortControllers: new Map(),
74+ chatRunState,
75+chatRunBuffers: chatRunState.buffers,
76+chatDeltaSentAt: chatRunState.deltaSentAt,
77+chatDeltaLastBroadcastLen: chatRunState.deltaLastBroadcastLen,
78+removeChatRun: () => undefined,
79+agentRunSeq: new Map(),
80+nodeSendToSession: () => {},
81+skillsRefreshDelayMs: 30_000,
82+getSkillsRefreshTimer: () => null,
83+setSkillsRefreshTimer: () => {},
84+getRuntimeConfig: () => ({}) as never,
85+ ...overrides,
86+};
87+}
88+4589describe("startGatewayEarlyRuntime", () => {
4690beforeEach(() => {
4791mocks.getMachineDisplayName.mockClear();
@@ -60,88 +104,21 @@ describe("startGatewayEarlyRuntime", () => {
60104});
6110562106it("does not eagerly start the MCP loopback server", async () => {
63-const chatRunState = createChatRunState();
64-const earlyRuntime = await startGatewayEarlyRuntime({
65-minimalTestGateway: true,
66-cfgAtStart: {} as never,
67-port: 18_789,
68-gatewayTls: { enabled: false },
69-gatewayDirectReachable: false,
70-tailscaleMode: "off" as never,
71-log: {
72-info: () => {},
73-warn: () => {},
74-},
75-logDiscovery: {
76-info: () => {},
77-warn: () => {},
78-},
79-nodeRegistry: {} as never,
80-broadcast: () => {},
81-nodeSendToAllSubscribed: () => {},
82-getPresenceVersion: () => 0,
83-getHealthVersion: () => 0,
84-refreshGatewayHealthSnapshot: async () => ({}) as never,
85-logHealth: { error: () => {} },
86-dedupe: new Map(),
87-chatAbortControllers: new Map(),
88- chatRunState,
89-chatRunBuffers: chatRunState.buffers,
90-chatDeltaSentAt: chatRunState.deltaSentAt,
91-chatDeltaLastBroadcastLen: chatRunState.deltaLastBroadcastLen,
92-removeChatRun: () => undefined,
93-agentRunSeq: new Map(),
94-nodeSendToSession: () => {},
95-skillsRefreshDelayMs: 30_000,
96-getSkillsRefreshTimer: () => null,
97-setSkillsRefreshTimer: () => {},
98-getRuntimeConfig: () => ({}) as never,
99-});
107+const earlyRuntime = await startGatewayEarlyRuntime(earlyRuntimeInput());
100108101109expect(earlyRuntime).not.toHaveProperty("mcpServer");
102110});
103111104112it("wires non-minimal skills runtime through lazy startup imports", async () => {
105-const chatRunState = createChatRunState();
106113const nodeRegistry = { node: { id: "node" } };
107114mocks.getInspectableActiveTaskRestartBlockers.mockReturnValueOnce(["active-task"]);
108115109-const earlyRuntime = await startGatewayEarlyRuntime({
110-minimalTestGateway: false,
111-cfgAtStart: {} as never,
112-port: 18_789,
113-gatewayTls: { enabled: false },
114-gatewayDirectReachable: false,
115-tailscaleMode: "off" as never,
116-log: {
117-info: () => {},
118-warn: () => {},
119-},
120-logDiscovery: {
121-info: () => {},
122-warn: () => {},
123-},
124-nodeRegistry: nodeRegistry as never,
125-broadcast: () => {},
126-nodeSendToAllSubscribed: () => {},
127-getPresenceVersion: () => 0,
128-getHealthVersion: () => 0,
129-refreshGatewayHealthSnapshot: async () => ({}) as never,
130-logHealth: { error: () => {} },
131-dedupe: new Map(),
132-chatAbortControllers: new Map(),
133- chatRunState,
134-chatRunBuffers: chatRunState.buffers,
135-chatDeltaSentAt: chatRunState.deltaSentAt,
136-chatDeltaLastBroadcastLen: chatRunState.deltaLastBroadcastLen,
137-removeChatRun: () => undefined,
138-agentRunSeq: new Map(),
139-nodeSendToSession: () => {},
140-skillsRefreshDelayMs: 30_000,
141-getSkillsRefreshTimer: () => null,
142-setSkillsRefreshTimer: () => {},
143-getRuntimeConfig: () => ({}) as never,
144-});
116+const earlyRuntime = await startGatewayEarlyRuntime(
117+earlyRuntimeInput({
118+minimalTestGateway: false,
119+nodeRegistry: nodeRegistry as never,
120+}),
121+);
145122146123expect(mocks.setSkillsRemoteRegistry).toHaveBeenCalledWith(nodeRegistry);
147124expect(mocks.primeRemoteSkillsCache).toHaveBeenCalledTimes(1);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。