You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

202 lines
5.3 KiB

const { AgentFlows } = require("../utils/agentFlows");
const {
flexUserRoleValid,
ROLES,
} = require("../utils/middleware/multiUserProtected");
const { validatedRequest } = require("../utils/middleware/validatedRequest");
const { Telemetry } = require("../models/telemetry");
function agentFlowEndpoints(app) {
if (!app) return;
// Save a flow configuration
app.post(
"/agent-flows/save",
[validatedRequest, flexUserRoleValid([ROLES.admin])],
async (request, response) => {
try {
const { name, config, uuid } = request.body;
if (!name || !config) {
return response.status(400).json({
success: false,
error: "Name and config are required",
});
}
const flow = AgentFlows.saveFlow(name, config, uuid);
if (!flow) {
return response.status(500).json({
success: false,
error: "Failed to save flow",
});
}
if (!uuid) {
await Telemetry.sendTelemetry("agent_flow_created", {
blockCount: config.blocks?.length || 0,
});
}
return response.status(200).json({
success: true,
flow,
});
} catch (error) {
console.error("Error saving flow:", error);
return response.status(500).json({
success: false,
error: error.message,
});
}
}
);
// List all available flows
app.get(
"/agent-flows/list",
[validatedRequest, flexUserRoleValid([ROLES.admin])],
async (_request, response) => {
try {
const flows = AgentFlows.listFlows();
return response.status(200).json({
success: true,
flows,
});
} catch (error) {
console.error("Error listing flows:", error);
return response.status(500).json({
success: false,
error: error.message,
});
}
}
);
// Get a specific flow by UUID
app.get(
"/agent-flows/:uuid",
[validatedRequest, flexUserRoleValid([ROLES.admin])],
async (request, response) => {
try {
const { uuid } = request.params;
const flow = AgentFlows.loadFlow(uuid);
if (!flow) {
return response.status(404).json({
success: false,
error: "Flow not found",
});
}
return response.status(200).json({
success: true,
flow,
});
} catch (error) {
console.error("Error getting flow:", error);
return response.status(500).json({
success: false,
error: error.message,
});
}
}
);
// Run a specific flow
// app.post(
// "/agent-flows/:uuid/run",
// [validatedRequest, flexUserRoleValid([ROLES.admin])],
// async (request, response) => {
// try {
// const { uuid } = request.params;
// const { variables = {} } = request.body;
// // TODO: Implement flow execution
// console.log("Running flow with UUID:", uuid);
// await Telemetry.sendTelemetry("agent_flow_executed", {
// variableCount: Object.keys(variables).length,
// });
// return response.status(200).json({
// success: true,
// results: {
// success: true,
// results: "test",
// variables: variables,
// },
// });
// } catch (error) {
// console.error("Error running flow:", error);
// return response.status(500).json({
// success: false,
// error: error.message,
// });
// }
// }
// );
// Delete a specific flow
app.delete(
"/agent-flows/:uuid",
[validatedRequest, flexUserRoleValid([ROLES.admin])],
async (request, response) => {
try {
const { uuid } = request.params;
const { success } = AgentFlows.deleteFlow(uuid);
if (!success) {
return response.status(500).json({
success: false,
error: "Failed to delete flow",
});
}
return response.status(200).json({
success,
});
} catch (error) {
console.error("Error deleting flow:", error);
return response.status(500).json({
success: false,
error: error.message,
});
}
}
);
// Toggle flow active status
app.post(
"/agent-flows/:uuid/toggle",
[validatedRequest, flexUserRoleValid([ROLES.admin])],
async (request, response) => {
try {
const { uuid } = request.params;
const { active } = request.body;
const flow = AgentFlows.loadFlow(uuid);
if (!flow) {
return response
.status(404)
.json({ success: false, error: "Flow not found" });
}
flow.config.active = active;
const { success } = AgentFlows.saveFlow(flow.name, flow.config, uuid);
if (!success) {
return response
.status(500)
.json({ success: false, error: "Failed to update flow" });
}
return response.json({ success: true, flow });
} catch (error) {
console.error("Error toggling flow:", error);
response.status(500).json({ success: false, error: error.message });
}
}
);
}
module.exports = { agentFlowEndpoints };