This commit is contained in:
marko-kraemer 2025-07-27 22:09:01 +02:00
parent 1545af26f6
commit 2819840fb6
2 changed files with 0 additions and 165 deletions

View File

@ -114,31 +114,6 @@ async def verify_agent_access(agent_id: str, user_id: str):
raise HTTPException(status_code=404, detail="Agent not found or access denied") raise HTTPException(status_code=404, detail="Agent not found or access denied")
@router.get("/providers", response_model=List[ProviderResponse])
async def get_providers():
if not await is_enabled("agent_triggers"):
raise HTTPException(status_code=403, detail="Agent triggers are not enabled")
try:
_, _, provider_svc = await get_services()
providers = await provider_svc.get_available_providers()
return [
ProviderResponse(
provider_id=provider.provider_id,
name=provider.name,
description=provider.description,
trigger_type=provider.trigger_type.value,
webhook_enabled=provider.webhook_enabled,
setup_required=provider.setup_required,
config_schema=provider.config_schema
)
for provider in providers
]
except Exception as e:
logger.error(f"Error getting providers: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
@router.get("/providers/{provider_id}/schema") @router.get("/providers/{provider_id}/schema")
async def get_provider_schema(provider_id: str): async def get_provider_schema(provider_id: str):

View File

@ -368,143 +368,3 @@ async def execute_agent_workflow(
@router.post("/agents/{agent_id}/workflows/{workflow_id}/webhook")
async def trigger_workflow_webhook(
agent_id: str,
workflow_id: str,
request: Request
):
try:
logger.info(f"Workflow webhook received for agent {agent_id}, workflow {workflow_id}")
body = await request.body()
headers = dict(request.headers)
try:
if body:
webhook_data = await request.json()
else:
webhook_data = {}
except Exception as e:
logger.warning(f"Failed to parse JSON body: {e}")
webhook_data = {
"raw_body": body.decode('utf-8', errors='ignore'),
"content_type": headers.get('content-type', '')
}
webhook_data["webhook_headers"] = headers
webhook_data["webhook_timestamp"] = datetime.now(timezone.utc).isoformat()
db = await get_db_connection()
client = await db.client
workflow_result = await client.table('agent_workflows').select('*').eq('id', workflow_id).eq('agent_id', agent_id).execute()
if not workflow_result.data:
return JSONResponse(
status_code=404,
content={"error": "Workflow not found"}
)
workflow = workflow_result.data[0]
if workflow['status'] != 'active':
return JSONResponse(
status_code=400,
content={"error": "Workflow is not active"}
)
agent_result = await client.table('agents').select('*, agent_versions!current_version_id(*)').eq('agent_id', agent_id).execute()
if not agent_result.data:
return JSONResponse(
status_code=404,
content={"error": "Agent not found"}
)
agent_data = agent_result.data[0]
account_id = agent_data['account_id']
execution_variables = ExecutionVariables(variables={
'triggered_by': 'webhook',
'webhook_timestamp': webhook_data["webhook_timestamp"],
'webhook_source': headers.get('user-agent', 'unknown'),
'webhook_ip': headers.get('x-forwarded-for', headers.get('x-real-ip', 'unknown'))
})
trigger_result = TriggerResult(
success=True,
should_execute_workflow=True,
workflow_id=workflow_id,
workflow_input=webhook_data,
execution_variables=execution_variables
)
trigger_event = TriggerEvent(
trigger_id=f"webhook_{workflow_id}_{uuid.uuid4()}",
agent_id=agent_id,
trigger_type=TriggerType.WEBHOOK,
raw_data=webhook_data
)
execution_service = TriggerExecutionService(db)
execution_result = await execution_service.execute_trigger_result(
agent_id=agent_id,
trigger_result=trigger_result,
trigger_event=trigger_event
)
if execution_result["success"]:
logger.info(f"Workflow webhook execution started: {execution_result}")
return JSONResponse(content={
"message": f"Workflow '{workflow['name']}' execution started via webhook",
"execution_id": execution_result.get("execution_id"),
"thread_id": execution_result.get("thread_id"),
"agent_run_id": execution_result.get("agent_run_id"),
"workflow_id": workflow_id,
"agent_id": agent_id,
"status": "running"
})
else:
logger.error(f"Workflow webhook execution failed: {execution_result}")
return JSONResponse(
status_code=500,
content={
"error": "Failed to start workflow execution",
"details": execution_result.get("error", "Unknown error")
}
)
except Exception as e:
logger.error(f"Error processing workflow webhook: {e}")
import traceback
logger.error(f"Traceback: {traceback.format_exc()}")
return JSONResponse(
status_code=500,
content={"error": "Internal server error"}
)
@router.get("/agents/{agent_id}/workflows/{workflow_id}/webhook-url")
async def get_workflow_webhook_url(
agent_id: str,
workflow_id: str,
user_id: str = Depends(get_current_user_id_from_jwt),
request: Request = None
):
db = await get_db_connection()
client = await db.client
workflow_result = await client.table('agent_workflows').select('*').eq('id', workflow_id).eq('agent_id', agent_id).execute()
if not workflow_result.data:
raise HTTPException(status_code=404, detail="Workflow not found")
agent_result = await client.table('agents').select('account_id').eq('agent_id', agent_id).execute()
if not agent_result.data:
raise HTTPException(status_code=404, detail="Agent not found")
base_url = os.getenv("WEBHOOK_BASE_URL", "http://localhost:8000")
webhook_url = f"{base_url}/api/workflows/agents/{agent_id}/workflows/{workflow_id}/webhook"
return {
"webhook_url": webhook_url,
"workflow_id": workflow_id,
"agent_id": agent_id,
"workflow_name": workflow_result.data[0]['name'],
"status": workflow_result.data[0]['status']
}