feat: add daemon mode with configurable interval for continuous issue processing

This commit is contained in:
Jon Michael Aanes (aider) 2025-04-13 17:56:39 +02:00
parent da8ff0177a
commit d8595dae05

View File

@ -13,6 +13,7 @@ import dataclasses
import tempfile
import subprocess
import os
import time
import re
from . import secrets
@ -127,6 +128,8 @@ def parse_args():
parser.add_argument("--owner", required=True, help="Owner of the repository")
parser.add_argument("--repo", required=True, help="Repository name")
parser.add_argument("--base-branch", default="main", help="Base branch to use for new branches (default: main)")
parser.add_argument("--daemon", action="store_true", help="Run in daemon mode to continuously monitor for new issues")
parser.add_argument("--interval", type=int, default=300, help="Interval in seconds between checks in daemon mode (default: 300)")
return parser.parse_args()
def push_changes(cwd: Path, branch_name: str, issue_number: str, issue_title: str, issue_description: str, base_branch: str) -> None:
@ -159,13 +162,8 @@ def process_issue(args, tmpdirname: Path, branch_name: str, issue_title: str, is
run_cmd(["git", "add", "."], tmpdirname)
push_changes(tmpdirname, branch_name, issue_number, issue_title, issue_description, args.base_branch)
def main():
logging.basicConfig(level='INFO')
args = parse_args()
seen_issues_db = SeenIssuesDB()
client = GiteaClient(args.gitea_url, secrets.gitea_token())
def handle_issues(args, client, seen_issues_db):
"""Process all open issues with the 'aider' label."""
try:
issues = client.get_issues(args.owner, args.repo)
except Exception:
@ -195,5 +193,26 @@ def main():
seen_issues_db.mark_as_seen(issue_text)
def main():
logging.basicConfig(level='INFO')
args = parse_args()
seen_issues_db = SeenIssuesDB()
client = GiteaClient(args.gitea_url, secrets.gitea_token())
if args.daemon:
logger.info(f"Starting daemon mode, checking for new issues every {args.interval} seconds")
try:
while True:
logger.info("Checking for new issues...")
handle_issues(args, client, seen_issues_db)
logger.info(f"Sleeping for {args.interval} seconds...")
time.sleep(args.interval)
except KeyboardInterrupt:
logger.info("Daemon stopped by user")
else:
# One-off run
handle_issues(args, client, seen_issues_db)
if __name__ == "__main__":
main()