system-prompts-and-models-o.../dealix/api/routers/intelligence_layer.py
Sami Assiri b13cb389cc feat(dealix): sync full Dealix package to repo
- API routers, ACA modules, integrations (draft operators)
- Docs, landing pages, scripts (launch readiness, scorecard)
- Tests and CI workflow updates for Dealix

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-01 21:01:17 +03:00

123 lines
5.1 KiB
Python

"""Intelligence layer API — deterministic JSON; optional ten-in-ten bridge."""
from __future__ import annotations
from typing import Any
from fastapi import APIRouter, Body
from auto_client_acquisition.innovation.ten_in_ten import build_ten_opportunities
from auto_client_acquisition.intelligence_layer.action_graph import build_action_graph_trace
from auto_client_acquisition.intelligence_layer.board_brief import build_board_brief
from auto_client_acquisition.intelligence_layer.competitive_moves import build_competitive_moves
from auto_client_acquisition.intelligence_layer.decision_memory import list_decisions, record_decision
from auto_client_acquisition.intelligence_layer.growth_brain import build_growth_profile
from auto_client_acquisition.intelligence_layer.intel_command_feed import build_intel_command_feed
from auto_client_acquisition.intelligence_layer.mission_engine import get_mission, list_mission_catalog
from auto_client_acquisition.intelligence_layer.opportunity_simulator import simulate_opportunities
from auto_client_acquisition.intelligence_layer.revenue_dna import build_revenue_dna
from auto_client_acquisition.intelligence_layer.trust_score import compute_trust_score
router = APIRouter(prefix="/api/v1/intelligence", tags=["intelligence_layer"])
@router.post("/growth-profile")
async def growth_profile(company: dict[str, Any] = Body(default_factory=dict)) -> dict[str, Any]:
return build_growth_profile(company or {})
@router.get("/command-feed")
async def intel_command_feed() -> dict[str, Any]:
return build_intel_command_feed()
@router.get("/command-feed/demo")
async def intel_command_feed_demo() -> dict[str, Any]:
"""Alias of ``GET /command-feed`` for product/docs compatibility."""
return build_intel_command_feed()
@router.post("/missions/first-10-opportunities")
async def missions_first_10_opportunities(
payload: dict[str, Any] = Body(default_factory=dict),
) -> dict[str, Any]:
"""Thin wrapper around innovation ``build_ten_opportunities`` — no duplicate logic."""
return build_ten_opportunities(payload or None)
@router.get("/missions/catalog")
async def missions_catalog() -> dict[str, Any]:
"""Mission engine metadata + pointer to innovation missions."""
return list_mission_catalog()
@router.get("/missions/{mission_id}")
async def mission_detail(mission_id: str) -> dict[str, Any]:
return get_mission(mission_id)
@router.post("/action-graph/demo")
async def action_graph_demo(payload: dict[str, Any] = Body(default_factory=dict)) -> dict[str, Any]:
return build_action_graph_trace(payload or {})
@router.get("/decision-memory/demo")
async def decision_memory_demo() -> dict[str, Any]:
return list_decisions(limit=20)
@router.post("/decision-memory/record")
async def decision_memory_record(entry: dict[str, Any] = Body(default_factory=dict)) -> dict[str, Any]:
return record_decision(entry or {})
@router.post("/trust-score")
async def trust_score(signals: dict[str, Any] = Body(default_factory=dict)) -> dict[str, Any]:
return compute_trust_score(signals or {})
@router.post("/revenue-dna")
async def revenue_dna(context: dict[str, Any] = Body(default_factory=dict)) -> dict[str, Any]:
return build_revenue_dna(context or {})
@router.post("/opportunity-simulator")
async def opportunity_simulator(inputs: dict[str, Any] = Body(default_factory=dict)) -> dict[str, Any]:
return simulate_opportunities(inputs or {})
@router.post("/board-brief")
async def board_brief(snapshot: dict[str, Any] = Body(default_factory=dict)) -> dict[str, Any]:
return build_board_brief(snapshot or {})
@router.get("/competitive-moves")
async def competitive_moves(sector: str | None = None) -> dict[str, Any]:
return build_competitive_moves(sector)
@router.post("/bundle")
async def intelligence_bundle(
payload: dict[str, Any] = Body(default_factory=dict),
) -> dict[str, Any]:
"""
Single round-trip for demos. Optional ``include_ten_in_ten`` merges
``build_ten_opportunities`` without exposing a duplicate HTTP path.
"""
company = payload.get("company") if isinstance(payload.get("company"), dict) else {}
out: dict[str, Any] = {
"growth_profile": build_growth_profile(company),
"intel_command_feed": build_intel_command_feed({"append_custom": payload.get("extra_card")}),
"trust_score": compute_trust_score(payload.get("trust_signals") if isinstance(payload.get("trust_signals"), dict) else {}),
"revenue_dna": build_revenue_dna(payload.get("revenue_context") if isinstance(payload.get("revenue_context"), dict) else {}),
"opportunity_simulator": simulate_opportunities(
payload.get("simulator") if isinstance(payload.get("simulator"), dict) else {}
),
"board_brief": build_board_brief(payload.get("board") if isinstance(payload.get("board"), dict) else {}),
"competitive_moves": build_competitive_moves(str(payload.get("sector") or "") or None),
}
if payload.get("include_ten_in_ten"):
ten_payload = payload.get("ten_in_ten") if isinstance(payload.get("ten_in_ten"), dict) else company
out["ten_in_ten"] = build_ten_opportunities(ten_payload)
return out