| 114 | } |
| 115 | |
| 116 | write(message: JsonRpcMessage): void { |
| 117 | this.written.push(message); |
| 118 | if (!('method' in message)) return; |
| 119 | |
| 120 | const req = message as JsonRpcRequest; |
| 121 | if (req.method === 'initialize') { |
| 122 | queueMicrotask(() => { |
| 123 | this.emit({ |
| 124 | jsonrpc: '2.0', |
| 125 | id: req.id, |
| 126 | result: { |
| 127 | protocolVersion: 1, |
| 128 | agentCapabilities: { loadSession: this.loadSession }, |
| 129 | }, |
| 130 | } as JsonRpcResponse); |
| 131 | }); |
| 132 | return; |
| 133 | } |
| 134 | |
| 135 | if (req.method === 'session/new') { |
| 136 | queueMicrotask(() => { |
| 137 | this.emit({ |
| 138 | jsonrpc: '2.0', |
| 139 | id: req.id, |
| 140 | result: { sessionId: this.sessionId }, |
| 141 | } as JsonRpcResponse); |
| 142 | }); |
| 143 | return; |
| 144 | } |
| 145 | |
| 146 | if (req.method === 'session/prompt') { |
| 147 | this.promptRequests.push(req); |
| 148 | queueMicrotask(() => { |
| 149 | this.updates.forEach((update) => { |
| 150 | this.emit({ |
| 151 | jsonrpc: '2.0', |
| 152 | method: 'session/update', |
| 153 | params: { sessionId: this.sessionId, update }, |
| 154 | } as any); |
| 155 | }); |
| 156 | this.emit({ |
| 157 | jsonrpc: '2.0', |
| 158 | id: req.id, |
| 159 | result: { stopReason: 'end' }, |
| 160 | } as JsonRpcResponse); |
| 161 | }); |
| 162 | } |
| 163 | } |
| 164 | |
| 165 | onMessage(cb: (message: JsonRpcMessage) => void): void { |
| 166 | this.handlers.push(cb); |