From ae85d9ee013257ccacf5c95033be21aab89f49eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20St=C3=B6ckli?= Date: Thu, 29 Jan 2026 10:05:14 +0000 Subject: [PATCH 1/4] print banner before taskflow runs --- src/seclab_taskflow_agent/__main__.py | 3 +++ src/seclab_taskflow_agent/banner.py | 35 +++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 src/seclab_taskflow_agent/banner.py diff --git a/src/seclab_taskflow_agent/__main__.py b/src/seclab_taskflow_agent/__main__.py index b3a0fc51..7ab12bed 100644 --- a/src/seclab_taskflow_agent/__main__.py +++ b/src/seclab_taskflow_agent/__main__.py @@ -25,6 +25,8 @@ from openai import APITimeoutError, BadRequestError, RateLimitError from openai.types.responses import ResponseTextDeltaEvent +from seclab_taskflow_agent.banner import get_banner + from .agent import DEFAULT_MODEL, TaskAgent, TaskAgentHooks, TaskRunHooks from .available_tools import AvailableTools from .capi import get_AI_token, list_tool_call_models @@ -677,4 +679,5 @@ async def _deploy_task_agents(resolved_agents, prompt): print(help_msg) sys.exit(1) + print(get_banner()) # print banner only before starting main event loop asyncio.run(main(available_tools, p, t, cli_globals, user_prompt), debug=True) diff --git a/src/seclab_taskflow_agent/banner.py b/src/seclab_taskflow_agent/banner.py new file mode 100644 index 00000000..0dea412d --- /dev/null +++ b/src/seclab_taskflow_agent/banner.py @@ -0,0 +1,35 @@ +from seclab_taskflow_agent.capi import get_AI_endpoint + +def get_banner(): + api_endpoint = get_AI_endpoint() + banner = f""" + ╔══════════════════════════════════════════════════════════════════╗ + ║ ║ + ║ ██████╗ ██╗████████╗██╗ ██╗██╗ ██╗██████╗ ║ + ║ ██╔════╝ ██║╚══██╔══╝██║ ██║██║ ██║██╔══██╗ ║ + ║ ██║ ███╗██║ ██║ ███████║██║ ██║██████╔╝ ║ + ║ ██║ ██║██║ ██║ ██╔══██║██║ ██║██╔══██╗ ║ + ║ ╚██████╔╝██║ ██║ ██║ ██║╚██████╔╝██████╔╝ ║ + ║ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ║ + ║ ║ + ║ ███████╗███████╗ ██████╗██╗ ██╗██████╗ ██╗████████╗██╗ ██╗ ║ + ║ ██╔════╝██╔════╝██╔════╝██║ ██║██╔══██╗██║╚══██╔══╝╚██╗ ██╔╝ ║ + ║ ███████╗█████╗ ██║ ██║ ██║██████╔╝██║ ██║ ╚████╔╝ ║ + ║ ╚════██║██╔══╝ ██║ ██║ ██║██╔══██╗██║ ██║ ╚██╔╝ ║ + ║ ███████║███████╗╚██████╗╚██████╔╝██║ ██║██║ ██║ ██║ ║ + ║ ╚══════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ║ + ║ ║ + ║ ██╗ █████╗ ██████╗ ║ + ║ ██║ ██╔══██╗██╔══██╗ ║ + ║ ██║ ███████║██████╔╝ ║ + ║ ██║ ██╔══██║██╔══██╗ ║ + ║ ███████╗██║ ██║██████╔╝ ║ + ║ ╚══════╝╚═╝ ╚═╝╚═════╝ ║ + ║ ║ + ║ TASKFLOW AGENT ║ + ║ ║ + ╠══════════════════════════════════════════════════════════════════╣ + ║ AI API Endpoint: {api_endpoint:<48}║ + ╚══════════════════════════════════════════════════════════════════╝ + """ + return banner From ef5df9c7d35c6ed21ac15dc2b1c84a466d717b04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20St=C3=B6ckli?= Date: Thu, 29 Jan 2026 10:07:36 +0000 Subject: [PATCH 2/4] move import --- src/seclab_taskflow_agent/__main__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/seclab_taskflow_agent/__main__.py b/src/seclab_taskflow_agent/__main__.py index 7ab12bed..1cbee0cc 100644 --- a/src/seclab_taskflow_agent/__main__.py +++ b/src/seclab_taskflow_agent/__main__.py @@ -25,10 +25,9 @@ from openai import APITimeoutError, BadRequestError, RateLimitError from openai.types.responses import ResponseTextDeltaEvent -from seclab_taskflow_agent.banner import get_banner - from .agent import DEFAULT_MODEL, TaskAgent, TaskAgentHooks, TaskRunHooks from .available_tools import AvailableTools +from .banner import get_banner from .capi import get_AI_token, list_tool_call_models from .env_utils import TmpEnv from .mcp_utils import ( From 201f2efd8c98cdf5de7669e5c55f298cfaf5082c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20St=C3=B6ckli?= Date: Thu, 29 Jan 2026 10:10:44 +0000 Subject: [PATCH 3/4] add copyright header --- src/seclab_taskflow_agent/banner.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/seclab_taskflow_agent/banner.py b/src/seclab_taskflow_agent/banner.py index 0dea412d..6f4eafd2 100644 --- a/src/seclab_taskflow_agent/banner.py +++ b/src/seclab_taskflow_agent/banner.py @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: 2026 GitHub +# SPDX-License-Identifier: MIT + from seclab_taskflow_agent.capi import get_AI_endpoint def get_banner(): From f54a3ad85de88dae438d91b0a2d2c673c977848c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20St=C3=B6ckli?= Date: Thu, 29 Jan 2026 10:11:54 +0000 Subject: [PATCH 4/4] use relative import --- src/seclab_taskflow_agent/banner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/seclab_taskflow_agent/banner.py b/src/seclab_taskflow_agent/banner.py index 6f4eafd2..668e1410 100644 --- a/src/seclab_taskflow_agent/banner.py +++ b/src/seclab_taskflow_agent/banner.py @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2026 GitHub # SPDX-License-Identifier: MIT -from seclab_taskflow_agent.capi import get_AI_endpoint +from .capi import get_AI_endpoint def get_banner(): api_endpoint = get_AI_endpoint()