({ spawnSession, stopSession, requestShutdown }: MachineRpcHandlers)
| 248 | } |
| 249 | |
| 250 | setRPCHandlers({ spawnSession, stopSession, requestShutdown }: MachineRpcHandlers): void { |
| 251 | this.rpcHandlerManager.registerHandler(RPC_METHODS.SpawnHappySession, async (params: any) => { |
| 252 | const { directory, sessionId, resumeSessionId, machineId, approvedNewDirectoryCreation, agent, model, effort, modelReasoningEffort, yolo, permissionMode, token, sessionType, worktreeName } = params || {} |
| 253 | |
| 254 | if (!directory) { |
| 255 | throw new Error('Directory is required') |
| 256 | } |
| 257 | |
| 258 | const resolvedDirectory = await this.resolveForWorkspaceCheck(directory) |
| 259 | if (!this.isWithinWorkspaceRoots(resolvedDirectory)) { |
| 260 | return { type: 'error', errorMessage: 'Directory is outside this machine\'s workspace roots' } |
| 261 | } |
| 262 | |
| 263 | const result = await spawnSession({ |
| 264 | directory, |
| 265 | sessionId, |
| 266 | resumeSessionId, |
| 267 | machineId, |
| 268 | approvedNewDirectoryCreation, |
| 269 | agent, |
| 270 | model, |
| 271 | effort, |
| 272 | modelReasoningEffort, |
| 273 | yolo, |
| 274 | permissionMode, |
| 275 | token, |
| 276 | sessionType, |
| 277 | worktreeName |
| 278 | }) |
| 279 | |
| 280 | switch (result.type) { |
| 281 | case 'success': |
| 282 | return { type: 'success', sessionId: result.sessionId } |
| 283 | case 'requestToApproveDirectoryCreation': |
| 284 | return { type: 'requestToApproveDirectoryCreation', directory: result.directory } |
| 285 | case 'error': |
| 286 | return { type: 'error', errorMessage: result.errorMessage } |
| 287 | } |
| 288 | }) |
| 289 | |
| 290 | this.rpcHandlerManager.registerHandler(RPC_METHODS.StopSession, (params: any) => { |
| 291 | const { sessionId } = params || {} |
| 292 | if (!sessionId) { |
| 293 | throw new Error('Session ID is required') |
| 294 | } |
| 295 | |
| 296 | const success = stopSession(sessionId) |
| 297 | if (!success) { |
| 298 | throw new Error('Session not found or failed to stop') |
| 299 | } |
| 300 | |
| 301 | return { message: 'Session stopped' } |
| 302 | }) |
| 303 | |
| 304 | this.rpcHandlerManager.registerHandler(RPC_METHODS.StopRunner, () => { |
| 305 | setTimeout(() => requestShutdown(), 100) |
| 306 | return { message: 'Runner stop request acknowledged' } |
| 307 | }) |
no test coverage detected