| | const { Telemetry } = require("../models/telemetry"); |
| | const { |
| | WorkspaceAgentInvocation, |
| | } = require("../models/workspaceAgentInvocation"); |
| | const { AgentHandler } = require("../utils/agents"); |
| | const { |
| | WEBSOCKET_BAIL_COMMANDS, |
| | } = require("../utils/agents/aibitat/plugins/websocket"); |
| | const { safeJsonParse } = require("../utils/http"); |
| |
|
| | |
| | function relayToSocket(message) { |
| | if (this.handleFeedback) return this?.handleFeedback?.(message); |
| | this.checkBailCommand(message); |
| | } |
| |
|
| | function agentWebsocket(app) { |
| | if (!app) return; |
| |
|
| | app.ws("/agent-invocation/:uuid", async function (socket, request) { |
| | try { |
| | const agentHandler = await new AgentHandler({ |
| | uuid: String(request.params.uuid), |
| | }).init(); |
| |
|
| | if (!agentHandler.invocation) { |
| | socket.close(); |
| | return; |
| | } |
| |
|
| | socket.on("message", relayToSocket); |
| | socket.on("close", () => { |
| | agentHandler.closeAlert(); |
| | WorkspaceAgentInvocation.close(String(request.params.uuid)); |
| | return; |
| | }); |
| |
|
| | socket.checkBailCommand = (data) => { |
| | const content = safeJsonParse(data)?.feedback; |
| | if (WEBSOCKET_BAIL_COMMANDS.includes(content)) { |
| | agentHandler.log( |
| | `User invoked bail command while processing. Closing session now.` |
| | ); |
| | agentHandler.aibitat.abort(); |
| | socket.close(); |
| | return; |
| | } |
| | }; |
| |
|
| | await Telemetry.sendTelemetry("agent_chat_started"); |
| | await agentHandler.createAIbitat({ socket }); |
| | await agentHandler.startAgentCluster(); |
| | } catch (e) { |
| | console.error(e.message, e); |
| | socket?.send(JSON.stringify({ type: "wssFailure", content: e.message })); |
| | socket?.close(); |
| | } |
| | }); |
| | } |
| |
|
| | module.exports = { agentWebsocket }; |
| |
|