Initial commit: prospecting agent loop MVP

Closed-loop account-intelligence system: harvest -> relevance filter vs.
Capability Library -> synthesize -> score -> deliver -> feedback.

- 40-capability Broadcom + VMware library
- Live Exa.ai news connector with hard free-plan request ceilings
- Provider-agnostic LLM layer (Gemini/Anthropic) with offline mock fallback
- LLM confidence wired into composite scoring + low-confidence floor
- 7-account pilot list

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-23 11:39:59 -04:00
commit 39a338990f
35 changed files with 4020 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
"""Job posting harvester (v1 placeholder -> JSearch/Adzuna in production)."""
from __future__ import annotations
from ..types import RawSignal
from . import account_fixture
def harvest(account: dict) -> list[RawSignal]:
out: list[RawSignal] = []
for item in account_fixture(account["accountId"]).get("jobs", []):
count = item.get("count", 1)
prefix = f"[{count} openings] " if count > 1 else ""
out.append(
RawSignal(
account_id=account["accountId"],
source="jobs",
signal_type="hiring_surge" if count > 1 else "job_posting",
content=f"{prefix}{item['title']}: {item['content']}",
published_at=item["publishedAt"],
url=item["url"],
extra={"title": item["title"], "count": count},
)
)
return out