homelab-brain/homelab-ai-bot/tools/forgejo.py

74 lines
2.1 KiB
Python

"""Forgejo Git/Issue Tools."""
from core import config, forgejo_client
TOOLS = [
{
"type": "function",
"function": {
"name": "get_forgejo_status",
"description": "Forgejo Git-Server Status: Repos, offene Issues, letzte Commits.",
"parameters": {"type": "object", "properties": {}, "required": []},
},
},
{
"type": "function",
"function": {
"name": "create_issue",
"description": "Neues Forgejo-Issue/TODO erstellen.",
"parameters": {
"type": "object",
"properties": {
"title": {"type": "string", "description": "Titel des Issues"},
"body": {"type": "string", "description": "Beschreibung (optional)", "default": ""}
},
"required": ["title"],
},
},
},
{
"type": "function",
"function": {
"name": "close_issue",
"description": "Forgejo-Issue als erledigt schliessen.",
"parameters": {
"type": "object",
"properties": {
"number": {"type": "number", "description": "Issue-Nummer"}
},
"required": ["number"],
},
},
},
]
def handle_get_forgejo_status(**kw):
cfg = config.parse_config()
forgejo_client.init(cfg)
return forgejo_client.format_overview()
def handle_create_issue(title, body="", **kw):
cfg = config.parse_config()
forgejo_client.init(cfg)
result = forgejo_client.create_issue(title, body)
if "error" in result:
return result["error"]
return f"Issue #{result['number']} erstellt: {result['title']}"
def handle_close_issue(number, **kw):
cfg = config.parse_config()
forgejo_client.init(cfg)
result = forgejo_client.close_issue(int(number))
if "error" in result:
return result["error"]
return f"Issue #{result['number']} geschlossen: {result['title']}"
HANDLERS = {
"get_forgejo_status": handle_get_forgejo_status,
"create_issue": handle_create_issue,
"close_issue": handle_close_issue,
}