From 40389244156465d1352abbfc373982e7f6076296 Mon Sep 17 00:00:00 2001 From: buua436 Date: Thu, 11 Dec 2025 19:01:45 +0800 Subject: [PATCH] update --- agent/component/begin.py | 2 +- api/apps/sdk/agents.py | 37 +++++++++++++++++++++++++++---------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/agent/component/begin.py b/agent/component/begin.py index 1314aff74..bcbfdbf24 100644 --- a/agent/component/begin.py +++ b/agent/component/begin.py @@ -28,7 +28,7 @@ class BeginParam(UserFillUpParam): self.prologue = "Hi! I'm your smart assistant. What can I do for you?" def check(self): - self.check_valid_value(self.mode, "The 'mode' should be either `conversational` or `task`", ["conversational", "task"]) + self.check_valid_value(self.mode, "The 'mode' should be either `conversational` or `task`", ["conversational", "task","Webhook"]) def get_input_form(self) -> dict[str, dict]: return getattr(self, "inputs") diff --git a/api/apps/sdk/agents.py b/api/apps/sdk/agents.py index 13a4798ba..2f5186a31 100644 --- a/api/apps/sdk/agents.py +++ b/api/apps/sdk/agents.py @@ -159,7 +159,12 @@ async def webhook(agent_id: str): return get_data_error_result(message="Invalid DSL format.") # 4. Check webhook configuration in DSL - webhook_cfg = dsl.get("webhook", {}) + components = dsl.get("components", {}) + for k, _ in components.items(): + cpn_obj = components[k]["obj"] + if cpn_obj["component_name"].lower() == "begin" and cpn_obj["params"]["mode"] == "Webhook": + webhook_cfg = cpn_obj["params"] + if not webhook_cfg: return get_data_error_result(message="Webhook not configured for this agent.") @@ -259,7 +264,7 @@ async def webhook(agent_id: str): limit = rl.get("limit", 60) per = rl.get("per", "minute") - window = {"second": 1, "minute": 60, "hour": 3600}.get(per, 60) + window = {"second": 1, "minute": 60, "hour": 3600, "day": 86400}.get(per, 60) key = f"rl:{agent_id}" now = int(time.time()) @@ -277,8 +282,9 @@ async def webhook(agent_id: str): def _validate_token_auth(security_cfg): """Validate header-based token authentication.""" - header = security_cfg.get("token_header") - token_value = security_cfg.get("token_value") + token_cfg = security_cfg.get("token",{}) + header = token_cfg.get("token_header") + token_value = token_cfg.get("token_value") provided = request.headers.get(header) if provided != token_value: @@ -344,7 +350,8 @@ async def webhook(agent_id: str): raise Exception("Invalid HMAC signature") try: - await validate_webhook_security(webhook_cfg.get("security", {})) + security_config=webhook_cfg.get("security", {}) + await validate_webhook_security(security_config) except Exception as e: return get_data_error_result(message=str(e)) @@ -687,15 +694,25 @@ async def webhook(agent_id: str): return value - def render_template(text: str, clean_request: dict): - matches = placeholder_pattern.findall(text) - results = {} + def render_template(tpl, clean_request: dict): + if isinstance(tpl, dict): + return {k: render_template(v, clean_request) for k, v in tpl.items()} + + if isinstance(tpl, list): + return [render_template(item, clean_request) for item in tpl] + + if not isinstance(tpl, str): + return tpl + + matches = placeholder_pattern.findall(tpl) + rendered = tpl for m in matches: val = extract_placeholder_value(m, clean_request) - results[m] = val + rendered = rendered.replace(f"{{{m}}}", str(val)) + + return rendered - return results # Render "{xxx@query.xxx}" syntax headers = render_template(headers_tpl, clean_request) body = render_template(body_tpl, clean_request)