SysOps: voice-agy-webbuilder-backup — 2026-06-23 10:04 UTC
This commit is contained in:
Executable
+98
@@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Matrix-driven agent scheduler — daily handoff chains with correlation_id."""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import sys
|
||||
import urllib.request
|
||||
import uuid
|
||||
from datetime import datetime, timezone
|
||||
|
||||
COCKPIT_URL = "http://127.0.0.1:8600"
|
||||
TOOLS_URL = "http://127.0.0.1:8700"
|
||||
|
||||
|
||||
def _post(url: str, payload: dict | None = None, timeout: int = 120) -> dict:
|
||||
data = json.dumps(payload or {}).encode("utf-8")
|
||||
req = urllib.request.Request(
|
||||
url,
|
||||
data=data,
|
||||
headers={"Content-Type": "application/json"},
|
||||
method="POST",
|
||||
)
|
||||
with urllib.request.urlopen(req, timeout=timeout) as resp:
|
||||
return json.loads(resp.read().decode("utf-8"))
|
||||
|
||||
|
||||
def _handoff(from_agent: str, to_agent: str, handoff_type: str, payload: dict, cid: str) -> None:
|
||||
try:
|
||||
_post(
|
||||
f"{COCKPIT_URL}/api/agents/handoff",
|
||||
{
|
||||
"from_agent": from_agent,
|
||||
"to_agent": to_agent,
|
||||
"handoff_type": handoff_type,
|
||||
"payload": payload,
|
||||
"correlation_id": cid,
|
||||
},
|
||||
)
|
||||
print(f"handoff {from_agent} -> {to_agent} ({handoff_type})")
|
||||
except Exception as exc:
|
||||
print(f"handoff failed {from_agent}->{to_agent}: {exc}", file=sys.stderr)
|
||||
|
||||
|
||||
def _trigger_tools(path: str, label: str) -> dict:
|
||||
try:
|
||||
return _post(f"{TOOLS_URL}{path}", timeout=180)
|
||||
except Exception as exc:
|
||||
print(f"{label} failed: {exc}", file=sys.stderr)
|
||||
return {"ok": False, "error": str(exc)}
|
||||
|
||||
|
||||
def run_chain_0600(cid: str) -> None:
|
||||
research = _trigger_tools("/research/run", "research")
|
||||
_handoff("browser", "research", "scrape", {"step": "morning_research"}, cid)
|
||||
_handoff("research", "marketing", "intel", {"research_ok": research.get("ok", False)}, cid)
|
||||
rss = _trigger_tools("/retail/rss/refresh", "rss")
|
||||
_handoff("marketing", "retail", "trends", {"rss_ok": rss.get("ok", True), "items": rss.get("count", 0)}, cid)
|
||||
|
||||
|
||||
def run_chain_0630(cid: str) -> None:
|
||||
_handoff("sourcing", "product", "suppliers", {"step": "morning_sourcing"}, cid)
|
||||
_handoff("product", "halal", "compliance", {"step": "ingredient_check"}, cid)
|
||||
|
||||
|
||||
def run_chain_0700(cid: str) -> None:
|
||||
_handoff("sysops", "knowledge", "logs", {"step": "infra_archive"}, cid)
|
||||
_handoff("hr", "sysops", "onboarding", {"step": "hr_check", "note": "placeholder check-in"}, cid)
|
||||
_handoff("sysops", "herman", "infra_status", {"step": "daily_ops"}, cid)
|
||||
|
||||
|
||||
def run_chain_0800(cid: str) -> None:
|
||||
_handoff("email", "bizdev", "leads", {"step": "morning_leads_digest"}, cid)
|
||||
_handoff("retail", "bizdev", "opportunities", {"step": "top_opportunities"}, cid)
|
||||
_handoff("bizdev", "finance", "valuation", {"step": "pipeline_margin"}, cid)
|
||||
|
||||
|
||||
def main() -> int:
|
||||
today = datetime.now(timezone.utc).strftime("%Y-%m-%d")
|
||||
base_cid = str(uuid.uuid4())
|
||||
print(f"agent_scheduler start {today} correlation={base_cid}")
|
||||
|
||||
run_chain_0600(base_cid)
|
||||
run_chain_0630(str(uuid.uuid4()))
|
||||
run_chain_0700(str(uuid.uuid4()))
|
||||
run_chain_0800(str(uuid.uuid4()))
|
||||
|
||||
try:
|
||||
_post(f"{COCKPIT_URL}/api/herman/briefing", timeout=300)
|
||||
print("briefing triggered")
|
||||
except Exception as exc:
|
||||
print(f"briefing skip: {exc}", file=sys.stderr)
|
||||
|
||||
print("agent_scheduler done")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user