fix: clean up tasks.py imports, correct hermes-agent path
This commit is contained in:
53
tasks.py
53
tasks.py
@@ -1,10 +1,13 @@
|
||||
"""Timmy's scheduled work — triage, PR review, dispatch."""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Gitea client lives in hermes-agent
|
||||
sys.path.insert(0, str(Path.home() / ".hermes" / "hermes-agent"))
|
||||
|
||||
from orchestration import huey
|
||||
from huey import crontab
|
||||
|
||||
# Import the Gitea client we already own
|
||||
import sys; sys.path.insert(0, str(__import__('pathlib').Path.home() / '.hermes' / 'hermes-agent'))
|
||||
from tools.gitea_client import GiteaClient
|
||||
|
||||
REPOS = [
|
||||
@@ -15,57 +18,63 @@ REPOS = [
|
||||
NET_LINE_LIMIT = 10
|
||||
|
||||
|
||||
@huey.periodic_task(crontab(minute='*/15'))
|
||||
@huey.periodic_task(crontab(minute="*/15"))
|
||||
def triage_issues():
|
||||
"""Score and assign unassigned issues across all repos."""
|
||||
g = GiteaClient()
|
||||
found = 0
|
||||
for repo in REPOS:
|
||||
for issue in g.find_unassigned_issues(repo, limit=10):
|
||||
g.create_comment(repo, issue.number, "🔍 Triaged by Huey — needs assignment.")
|
||||
found += 1
|
||||
g.create_comment(
|
||||
repo, issue.number,
|
||||
"🔍 Triaged by Huey — needs assignment."
|
||||
)
|
||||
return {"triaged": found}
|
||||
|
||||
|
||||
@huey.periodic_task(crontab(minute='*/30'))
|
||||
@huey.periodic_task(crontab(minute="*/30"))
|
||||
def review_prs():
|
||||
"""Review open PRs: check net diff, reject violations, merge clean ones."""
|
||||
"""Review open PRs: check net diff, reject violations."""
|
||||
g = GiteaClient()
|
||||
reviewed, rejected = 0, 0
|
||||
for repo in REPOS:
|
||||
for pr in g.list_pulls(repo, state="open", limit=20):
|
||||
reviewed += 1
|
||||
files = g.get_pull_files(repo, pr.number)
|
||||
net = sum(f.additions - f.deletions for f in files)
|
||||
if net > NET_LINE_LIMIT:
|
||||
rejected += 1
|
||||
g.create_comment(
|
||||
repo, pr.number,
|
||||
f"❌ Net +{net} lines exceeds the {NET_LINE_LIMIT}-line limit. "
|
||||
f"Find {net - NET_LINE_LIMIT} lines to cut. See CONTRIBUTING.md."
|
||||
)
|
||||
continue
|
||||
if pr.user.login == pr.head_repo: # self-merge guard placeholder
|
||||
continue
|
||||
# Clean PR — could auto-merge here when CI gate exists
|
||||
return {"reviewed": reviewed, "rejected": rejected}
|
||||
|
||||
|
||||
@huey.periodic_task(crontab(minute='*/10'))
|
||||
@huey.periodic_task(crontab(minute="*/10"))
|
||||
def dispatch_assigned():
|
||||
"""Pick up issues assigned to agents and dispatch work."""
|
||||
"""Pick up issues assigned to agents and kick off work."""
|
||||
g = GiteaClient()
|
||||
agents = ["claude", "gemini", "kimi", "grok", "perplexity"]
|
||||
dispatched = 0
|
||||
for repo in REPOS:
|
||||
for agent in agents:
|
||||
issues = g.find_agent_issues(repo, agent, limit=5)
|
||||
for issue in issues:
|
||||
if any(c.body and "dispatched" in c.body.lower()
|
||||
for c in g.list_comments(repo, issue.number, limit=5)):
|
||||
continue # Already dispatched
|
||||
dispatch_work.schedule((repo, issue.number, agent), delay=0)
|
||||
for issue in g.find_agent_issues(repo, agent, limit=5):
|
||||
comments = g.list_comments(repo, issue.number, limit=5)
|
||||
if any(c.body and "dispatched" in c.body.lower() for c in comments):
|
||||
continue
|
||||
dispatch_work(repo, issue.number, agent)
|
||||
dispatched += 1
|
||||
return {"dispatched": dispatched}
|
||||
|
||||
|
||||
@huey.task(retries=3, retry_delay=60)
|
||||
def dispatch_work(repo, issue_number, agent):
|
||||
"""Dispatch a single issue to an agent. Huey handles retry."""
|
||||
g = GiteaClient()
|
||||
issue = g.get_issue(repo, issue_number)
|
||||
g.create_comment(
|
||||
repo, issue_number,
|
||||
f"⚡ Dispatched to `{agent}`. Huey task queued with retry."
|
||||
f"⚡ Dispatched to `{agent}`. Huey task queued."
|
||||
)
|
||||
# Agent execution happens via hermes harness — this is the bridge
|
||||
|
||||
Reference in New Issue
Block a user