agent-gear 1.0.4 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,163 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ vi.mock('node:net', () => ({
3
+ default: {
4
+ connect: vi.fn(),
5
+ },
6
+ }));
7
+ import net from 'node:net';
8
+ import { PortForwardManager } from './port-forward.js';
9
+ function createMockLocalSocket() {
10
+ const handlers = new Map();
11
+ return {
12
+ once: vi.fn((event, handler) => {
13
+ handlers.set(event, handler);
14
+ }),
15
+ on: vi.fn((event, handler) => {
16
+ handlers.set(event, handler);
17
+ }),
18
+ removeListener: vi.fn(),
19
+ destroy: vi.fn(),
20
+ write: vi.fn(),
21
+ emit: vi.fn(),
22
+ _handlers: handlers,
23
+ _trigger(event, ...args) {
24
+ const handler = handlers.get(event);
25
+ if (handler)
26
+ handler(...args);
27
+ },
28
+ };
29
+ }
30
+ function createMockServerSocket() {
31
+ return {
32
+ emit: vi.fn(),
33
+ };
34
+ }
35
+ describe('PortForwardManager', () => {
36
+ let portForwardManager;
37
+ beforeEach(() => {
38
+ vi.clearAllMocks();
39
+ portForwardManager = new PortForwardManager();
40
+ });
41
+ describe('createTunnel', () => {
42
+ it('should send port-forward:created(success: true) and store tunnel on connection success', async () => {
43
+ const mockLocalSocket = createMockLocalSocket();
44
+ const mockServerSocket = createMockServerSocket();
45
+ vi.mocked(net.connect).mockReturnValue(mockLocalSocket);
46
+ const promise = portForwardManager.createTunnel('tunnel-1', 3000, mockServerSocket);
47
+ mockLocalSocket._trigger('connect');
48
+ await promise;
49
+ expect(net.connect).toHaveBeenCalledWith({ host: '127.0.0.1', port: 3000 });
50
+ expect(mockServerSocket.emit).toHaveBeenCalledWith('port-forward:created', {
51
+ tunnelId: 'tunnel-1',
52
+ success: true,
53
+ });
54
+ });
55
+ it('should send port-forward:created(success: false, error) and destroy socket on connection failure', async () => {
56
+ const mockLocalSocket = createMockLocalSocket();
57
+ const mockServerSocket = createMockServerSocket();
58
+ vi.mocked(net.connect).mockReturnValue(mockLocalSocket);
59
+ const promise = portForwardManager.createTunnel('tunnel-1', 3000, mockServerSocket);
60
+ mockLocalSocket._trigger('error', new Error('ECONNREFUSED'));
61
+ await promise;
62
+ expect(mockServerSocket.emit).toHaveBeenCalledWith('port-forward:created', {
63
+ tunnelId: 'tunnel-1',
64
+ success: false,
65
+ error: 'ECONNREFUSED',
66
+ });
67
+ expect(mockLocalSocket.destroy).toHaveBeenCalled();
68
+ });
69
+ it('should send port-forward:data with base64 encoded data when local socket receives data', async () => {
70
+ const mockLocalSocket = createMockLocalSocket();
71
+ const mockServerSocket = createMockServerSocket();
72
+ vi.mocked(net.connect).mockReturnValue(mockLocalSocket);
73
+ const promise = portForwardManager.createTunnel('tunnel-1', 3000, mockServerSocket);
74
+ mockLocalSocket._trigger('connect');
75
+ await promise;
76
+ const testData = Buffer.from('hello world');
77
+ mockLocalSocket._trigger('data', testData);
78
+ expect(mockServerSocket.emit).toHaveBeenCalledWith('port-forward:data', {
79
+ tunnelId: 'tunnel-1',
80
+ data: testData.toString('base64'),
81
+ });
82
+ });
83
+ it('should send port-forward:close and remove tunnel when local socket closes', async () => {
84
+ const mockLocalSocket = createMockLocalSocket();
85
+ const mockServerSocket = createMockServerSocket();
86
+ vi.mocked(net.connect).mockReturnValue(mockLocalSocket);
87
+ const promise = portForwardManager.createTunnel('tunnel-1', 3000, mockServerSocket);
88
+ mockLocalSocket._trigger('connect');
89
+ await promise;
90
+ mockLocalSocket._trigger('close');
91
+ expect(mockServerSocket.emit).toHaveBeenCalledWith('port-forward:close', {
92
+ tunnelId: 'tunnel-1',
93
+ });
94
+ });
95
+ it('should send port-forward:error and remove tunnel when local socket errors after connect', async () => {
96
+ const mockLocalSocket = createMockLocalSocket();
97
+ const mockServerSocket = createMockServerSocket();
98
+ vi.mocked(net.connect).mockReturnValue(mockLocalSocket);
99
+ const promise = portForwardManager.createTunnel('tunnel-1', 3000, mockServerSocket);
100
+ mockLocalSocket._trigger('connect');
101
+ await promise;
102
+ mockLocalSocket._trigger('error', new Error('ECONNRESET'));
103
+ expect(mockServerSocket.emit).toHaveBeenCalledWith('port-forward:error', {
104
+ tunnelId: 'tunnel-1',
105
+ error: 'ECONNRESET',
106
+ });
107
+ });
108
+ });
109
+ describe('handleTunnelData', () => {
110
+ it('should write base64 decoded data to the corresponding local socket', async () => {
111
+ const mockLocalSocket = createMockLocalSocket();
112
+ const mockServerSocket = createMockServerSocket();
113
+ vi.mocked(net.connect).mockReturnValue(mockLocalSocket);
114
+ const promise = portForwardManager.createTunnel('tunnel-1', 3000, mockServerSocket);
115
+ mockLocalSocket._trigger('connect');
116
+ await promise;
117
+ const base64Data = Buffer.from('test payload').toString('base64');
118
+ portForwardManager.handleTunnelData('tunnel-1', base64Data);
119
+ expect(mockLocalSocket.write).toHaveBeenCalledWith(Buffer.from('test payload'));
120
+ });
121
+ it('should log warning and ignore for unknown tunnelId', () => {
122
+ const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
123
+ portForwardManager.handleTunnelData('unknown-tunnel', 'data');
124
+ expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('unknown tunnel'));
125
+ warnSpy.mockRestore();
126
+ });
127
+ });
128
+ describe('closeTunnel', () => {
129
+ it('should destroy local socket and remove tunnel from map', async () => {
130
+ const mockLocalSocket = createMockLocalSocket();
131
+ const mockServerSocket = createMockServerSocket();
132
+ vi.mocked(net.connect).mockReturnValue(mockLocalSocket);
133
+ const promise = portForwardManager.createTunnel('tunnel-1', 3000, mockServerSocket);
134
+ mockLocalSocket._trigger('connect');
135
+ await promise;
136
+ portForwardManager.closeTunnel('tunnel-1');
137
+ expect(mockLocalSocket.destroy).toHaveBeenCalled();
138
+ });
139
+ it('should silently ignore unknown tunnelId', () => {
140
+ expect(() => portForwardManager.closeTunnel('unknown-tunnel')).not.toThrow();
141
+ });
142
+ });
143
+ describe('closeAll', () => {
144
+ it('should close all tunnels and clear the map', async () => {
145
+ const socket1 = createMockLocalSocket();
146
+ const socket2 = createMockLocalSocket();
147
+ const mockServerSocket = createMockServerSocket();
148
+ vi.mocked(net.connect)
149
+ .mockReturnValueOnce(socket1)
150
+ .mockReturnValueOnce(socket2);
151
+ const promise1 = portForwardManager.createTunnel('tunnel-1', 3000, mockServerSocket);
152
+ socket1._trigger('connect');
153
+ await promise1;
154
+ const promise2 = portForwardManager.createTunnel('tunnel-2', 4000, mockServerSocket);
155
+ socket2._trigger('connect');
156
+ await promise2;
157
+ portForwardManager.closeAll();
158
+ expect(socket1.destroy).toHaveBeenCalled();
159
+ expect(socket2.destroy).toHaveBeenCalled();
160
+ });
161
+ });
162
+ });
163
+ //# sourceMappingURL=port-forward.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port-forward.test.js","sourceRoot":"","sources":["../src/port-forward.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"socketio-client.d.ts","sourceRoot":"","sources":["../src/socketio-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA2I3E,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,MAAM,CAgbR;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE/C"}
1
+ {"version":3,"file":"socketio-client.d.ts","sourceRoot":"","sources":["../src/socketio-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA+I3E,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,MAAM,CA8dR;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE/C"}
@@ -4,7 +4,7 @@ import { readdir, access } from 'fs/promises';
4
4
  import { join } from 'path';
5
5
  import { homedir } from 'os';
6
6
  import { Heartbeat } from './heartbeat.js';
7
- import { clearConfigKey } from './config.js';
7
+ import { clearConfigKey, getResumeTokenFromConfig, saveResumeTokenToConfig, clearResumeTokenFromConfig } from './config.js';
8
8
  import { acpDetector } from './acp/detector.js';
9
9
  import { AcpSpawner } from './acp/spawner.js';
10
10
  import { AcpSessionBridge } from './acp/bridge.js';
@@ -12,8 +12,10 @@ import { AcpSyncBridge } from './acp/sync-bridge.js';
12
12
  import { gitHandler } from './git-handler.js';
13
13
  import { worktreeHandler } from './worktree-handler.js';
14
14
  import { fsHandler } from './fs-handler.js';
15
- const CONTROLLER_VERSION = '1.0.4';
15
+ import { portForwardManager } from './port-forward.js';
16
+ const CONTROLLER_VERSION = '1.1.1';
16
17
  const acpBridges = new Map();
18
+ const permissionRequestBridge = new Map();
17
19
  function createSpawner(serverType, sessionId, cwd) {
18
20
  const config = acpDetector.getSpawnerConfig(serverType);
19
21
  return new AcpSpawner({ sessionId, cwd, command: config.command, args: config.args });
@@ -29,20 +31,30 @@ export function connectToServer(endpoint, key, options) {
29
31
  const controllerName = options?.serverName || hostname();
30
32
  socket.on('connect', () => {
31
33
  console.log(`Connected to ${endpoint}`);
34
+ const resumeToken = getResumeTokenFromConfig();
32
35
  socket.emit('register', {
33
36
  key,
34
37
  hostname: controllerName,
35
38
  version: CONTROLLER_VERSION,
39
+ resumeToken,
36
40
  });
37
41
  });
38
42
  socket.on('registered', (data) => {
39
43
  console.log(`Controller registered: ${data.controllerId}`);
44
+ if (data.resumeToken) {
45
+ saveResumeTokenToConfig(data.resumeToken);
46
+ console.log('Resume token saved to config');
47
+ }
40
48
  heartbeat.start(() => socket.emit('heartbeat'));
41
49
  });
42
50
  socket.on('error', (data) => {
43
51
  console.error(`Server error: ${data.code} - ${data.message}`);
44
52
  if (data.code === 'KEY_ALREADY_ONLINE') {
45
- console.error('This key is already in use on another machine.');
53
+ console.log('Clearing resume token and retrying connection...');
54
+ clearResumeTokenFromConfig();
55
+ // Don't exit, let the reconnection logic handle it
56
+ socket.disconnect();
57
+ return;
46
58
  }
47
59
  socket.disconnect();
48
60
  process.exit(1);
@@ -80,6 +92,9 @@ export function connectToServer(endpoint, key, options) {
80
92
  mcpServers: data.mcpServers,
81
93
  }, spawner);
82
94
  acpBridges.set(data.sessionId, bridge);
95
+ bridge.on('permission:sent', (requestId) => {
96
+ permissionRequestBridge.set(requestId, bridge);
97
+ });
83
98
  const onInitialized = (payload) => {
84
99
  if (payload.sessionId !== data.sessionId)
85
100
  return;
@@ -142,6 +157,9 @@ export function connectToServer(endpoint, key, options) {
142
157
  cwd: data.cwd,
143
158
  }, spawner);
144
159
  acpBridges.set(data.sessionId, bridge);
160
+ bridge.on('permission:sent', (requestId) => {
161
+ permissionRequestBridge.set(requestId, bridge);
162
+ });
145
163
  const onInitialized = (payload) => {
146
164
  if (payload.sessionId !== data.sessionId)
147
165
  return;
@@ -415,9 +433,30 @@ export function connectToServer(endpoint, key, options) {
415
433
  const result = await worktreeHandler.commit(data.path, data.message);
416
434
  socket.emit('git:commit:result', { requestId: data.requestId, ...result });
417
435
  });
436
+ // Port Forward events
437
+ socket.on('port-forward:create', async (data) => {
438
+ console.log(`Port forward create requested: tunnelId=${data.tunnelId} port=${data.port}`);
439
+ await portForwardManager.createTunnel(data.tunnelId, data.port, socket);
440
+ });
441
+ socket.on('port-forward:data', (data) => {
442
+ portForwardManager.handleTunnelData(data.tunnelId, data.data);
443
+ });
444
+ socket.on('port-forward:close', (data) => {
445
+ console.log(`Port forward close: tunnelId=${data.tunnelId}`);
446
+ portForwardManager.closeTunnel(data.tunnelId);
447
+ });
448
+ socket.on('acp:permission:response', (data) => {
449
+ const bridge = permissionRequestBridge.get(data.requestId);
450
+ if (bridge) {
451
+ permissionRequestBridge.delete(data.requestId);
452
+ bridge.handlePermissionResponse(data.requestId, data.outcome);
453
+ }
454
+ });
418
455
  socket.on('disconnect', (reason) => {
419
456
  console.log(`Disconnected: ${reason}`);
420
457
  heartbeat.stop();
458
+ portForwardManager.closeAll();
459
+ permissionRequestBridge.clear();
421
460
  });
422
461
  socket.on('connect_error', (err) => {
423
462
  console.error(`Connection error: ${err.message}`);
@@ -1 +1 @@
1
- {"version":3,"file":"socketio-client.js","sourceRoot":"","sources":["../src/socketio-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socketio-client.js","sourceRoot":"","sources":["../src/socketio-client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-gear",
3
- "version": "1.0.4",
3
+ "version": "1.1.1",
4
4
  "description": "ZeroAsh Agent Gear - Agent controller daemon",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,196 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+
3
+ vi.mock('@agentclientprotocol/sdk', () => ({
4
+ ndJsonStream: vi.fn(() => ({})),
5
+ ClientSideConnection: vi.fn(function () {
6
+ return {
7
+ initialize: vi.fn().mockResolvedValue({ protocolVersion: 1 }),
8
+ newSession: vi.fn().mockResolvedValue({ sessionId: 'acp-sess-abc' }),
9
+ resumeSession: vi.fn().mockResolvedValue({}),
10
+ prompt: vi.fn().mockResolvedValue({ stopReason: 'end_turn' }),
11
+ cancel: vi.fn().mockResolvedValue(undefined),
12
+ closeSession: vi.fn().mockResolvedValue({}),
13
+ setSessionMode: vi.fn().mockResolvedValue({}),
14
+ unstable_setSessionModel: vi.fn().mockResolvedValue({}),
15
+ };
16
+ }),
17
+ }));
18
+
19
+ import { AcpSessionBridge } from './bridge.js';
20
+
21
+ class MockAcpSpawner {
22
+ start = vi.fn();
23
+ stop = vi.fn();
24
+ isRunning = vi.fn().mockReturnValue(true);
25
+ _stdin = new WritableStream();
26
+ _stdout = new ReadableStream();
27
+ get stdin() { return this._stdin; }
28
+ get stdout() { return this._stdout; }
29
+ get closed() { return Promise.resolve(); }
30
+ }
31
+
32
+ function createMockSocket() {
33
+ return { emit: vi.fn(), on: vi.fn(), off: vi.fn() };
34
+ }
35
+
36
+ describe('AcpSessionBridge - requestPermission', () => {
37
+ let mockSocket: ReturnType<typeof createMockSocket>;
38
+ let mockSpawner: MockAcpSpawner;
39
+
40
+ function createBridge() {
41
+ return new AcpSessionBridge(
42
+ mockSocket as never,
43
+ { sessionId: 'sess-1', cwd: '/home/user' },
44
+ mockSpawner as never,
45
+ );
46
+ }
47
+
48
+ beforeEach(() => {
49
+ vi.clearAllMocks();
50
+ vi.useFakeTimers();
51
+ mockSocket = createMockSocket();
52
+ mockSpawner = new MockAcpSpawner();
53
+ });
54
+
55
+ afterEach(() => {
56
+ vi.useRealTimers();
57
+ vi.restoreAllMocks();
58
+ });
59
+
60
+ it('should emit acp:permission and wait for response', async () => {
61
+ const bridge = createBridge();
62
+ const options = [
63
+ { optionId: 'opt-1', name: 'Allow', kind: 'allow_once' as const },
64
+ { optionId: 'opt-2', name: 'Reject', kind: 'reject_once' as const },
65
+ ];
66
+
67
+ const promise = bridge.requestPermission({
68
+ toolCall: { toolCallId: 'tc-1' },
69
+ options,
70
+ } as never);
71
+
72
+ expect(mockSocket.emit).toHaveBeenCalledWith('acp:permission', expect.objectContaining({
73
+ sessionId: 'sess-1',
74
+ toolCall: { toolCallId: 'tc-1' },
75
+ options,
76
+ }));
77
+
78
+ const emitCall = mockSocket.emit.mock.calls.find((c: unknown[]) => c[0] === 'acp:permission');
79
+ const requestId = (emitCall![1] as { requestId: string }).requestId;
80
+ expect(requestId).toMatch(/^perm_\d+_/);
81
+
82
+ bridge.handlePermissionResponse(requestId, { outcome: 'selected', optionId: 'opt-1' });
83
+
84
+ const result = await promise;
85
+ expect(result).toEqual({ outcome: { outcome: 'selected', optionId: 'opt-1' } });
86
+ });
87
+
88
+ it('should resolve with cancelled after 65s timeout', async () => {
89
+ const bridge = createBridge();
90
+
91
+ const promise = bridge.requestPermission({
92
+ toolCall: { toolCallId: 'tc-1' },
93
+ options: [{ optionId: 'opt-1', name: 'Allow', kind: 'allow_once' }],
94
+ } as never);
95
+
96
+ await vi.advanceTimersByTimeAsync(65_000);
97
+
98
+ const result = await promise;
99
+ expect(result).toEqual({ outcome: { outcome: 'cancelled' } });
100
+ });
101
+
102
+ it('should not resolve with cancelled if response arrives before timeout', async () => {
103
+ const bridge = createBridge();
104
+
105
+ const promise = bridge.requestPermission({
106
+ toolCall: { toolCallId: 'tc-1' },
107
+ options: [{ optionId: 'opt-1', name: 'Allow', kind: 'allow_once' }],
108
+ } as never);
109
+
110
+ const emitCall = mockSocket.emit.mock.calls.find((c: unknown[]) => c[0] === 'acp:permission');
111
+ const requestId = (emitCall![1] as { requestId: string }).requestId;
112
+
113
+ await vi.advanceTimersByTimeAsync(30_000);
114
+ bridge.handlePermissionResponse(requestId, { outcome: 'selected', optionId: 'opt-1' });
115
+
116
+ const result = await promise;
117
+ expect(result).toEqual({ outcome: { outcome: 'selected', optionId: 'opt-1' } });
118
+
119
+ await vi.advanceTimersByTimeAsync(35_000);
120
+ });
121
+
122
+ it('should warn and ignore invalid requestId in handlePermissionResponse', () => {
123
+ const bridge = createBridge();
124
+ const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
125
+
126
+ bridge.handlePermissionResponse('invalid-id', { outcome: 'selected', optionId: 'opt-1' });
127
+
128
+ expect(warnSpy).toHaveBeenCalledWith('Permission request invalid-id not found');
129
+ warnSpy.mockRestore();
130
+ });
131
+
132
+ it('should handle cancelled outcome from user', async () => {
133
+ const bridge = createBridge();
134
+
135
+ const promise = bridge.requestPermission({
136
+ toolCall: { toolCallId: 'tc-1' },
137
+ options: [{ optionId: 'opt-1', name: 'Allow', kind: 'allow_once' }],
138
+ } as never);
139
+
140
+ const emitCall = mockSocket.emit.mock.calls.find((c: unknown[]) => c[0] === 'acp:permission');
141
+ const requestId = (emitCall![1] as { requestId: string }).requestId;
142
+
143
+ bridge.handlePermissionResponse(requestId, { outcome: 'cancelled' });
144
+
145
+ const result = await promise;
146
+ expect(result).toEqual({ outcome: { outcome: 'cancelled' } });
147
+ });
148
+
149
+ it('should handle concurrent permission requests independently', async () => {
150
+ const bridge = createBridge();
151
+
152
+ const promise1 = bridge.requestPermission({
153
+ toolCall: { toolCallId: 'tc-1' },
154
+ options: [{ optionId: 'opt-1', name: 'Allow', kind: 'allow_once' }],
155
+ } as never);
156
+
157
+ const promise2 = bridge.requestPermission({
158
+ toolCall: { toolCallId: 'tc-2' },
159
+ options: [{ optionId: 'opt-2', name: 'Reject', kind: 'reject_once' }],
160
+ } as never);
161
+
162
+ const calls = mockSocket.emit.mock.calls.filter((c: unknown[]) => c[0] === 'acp:permission');
163
+ expect(calls).toHaveLength(2);
164
+
165
+ const requestId1 = (calls[0][1] as { requestId: string }).requestId;
166
+ const requestId2 = (calls[1][1] as { requestId: string }).requestId;
167
+ expect(requestId1).not.toBe(requestId2);
168
+
169
+ bridge.handlePermissionResponse(requestId2, { outcome: 'selected', optionId: 'opt-2' });
170
+ bridge.handlePermissionResponse(requestId1, { outcome: 'selected', optionId: 'opt-1' });
171
+
172
+ const [result1, result2] = await Promise.all([promise1, promise2]);
173
+ expect(result1).toEqual({ outcome: { outcome: 'selected', optionId: 'opt-1' } });
174
+ expect(result2).toEqual({ outcome: { outcome: 'selected', optionId: 'opt-2' } });
175
+ });
176
+
177
+ it('should clean up pending entry after timeout', async () => {
178
+ const bridge = createBridge();
179
+
180
+ const promise = bridge.requestPermission({
181
+ toolCall: { toolCallId: 'tc-1' },
182
+ options: [{ optionId: 'opt-1', name: 'Allow', kind: 'allow_once' }],
183
+ } as never);
184
+
185
+ await vi.advanceTimersByTimeAsync(65_000);
186
+ await promise;
187
+
188
+ const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
189
+ const emitCall = mockSocket.emit.mock.calls.find((c: unknown[]) => c[0] === 'acp:permission');
190
+ const requestId = (emitCall![1] as { requestId: string }).requestId;
191
+
192
+ bridge.handlePermissionResponse(requestId, { outcome: 'selected', optionId: 'opt-1' });
193
+ expect(warnSpy).toHaveBeenCalled();
194
+ warnSpy.mockRestore();
195
+ });
196
+ });