system-prompts-and-models-o.../salesflow-saas/backend/scripts/gtm_os_dry_run.py
Claude 20277e0afc
feat: Dealix GTM Intelligence OS — multi-agent system
8 agents + 4 models + 4 configs + CLI dry-run + 3 docs.
Tested on agency/real_estate/clinic/saas — all pass.
Safety: LinkedIn scraping PROHIBITED, WhatsApp blast PROHIBITED.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 17:16:52 +00:00

125 lines
4.4 KiB
Python

#!/usr/bin/env python3
"""
Dealix GTM OS — Dry Run CLI
Analyzes a company and generates a complete GTM pack.
DRY-RUN ONLY — does NOT send any messages.
"""
import asyncio
import argparse
import json
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
from dealix_gtm_os.agents.supervisor_agent import SupervisorAgent
async def run(company_name: str, website: str, sector: str, city: str, email: str):
supervisor = SupervisorAgent()
result = await supervisor.run({
"name": company_name,
"website": website,
"sector": sector,
"city": city,
"email": email,
})
print("=" * 60)
print(f" DEALIX GTM OS — DRY RUN")
print(f" Company: {company_name}")
print(f" ⚠️ DRY-RUN ONLY — لا يرسل رسائل")
print("=" * 60)
intel = result["intelligence"]
print(f"\n{'' * 40}")
print("1. COMPANY INTELLIGENCE")
print(f"{'' * 40}")
print(f" Sector: {intel.get('sector', '?')}")
print(f" Summary: {intel.get('business_summary', '?')}")
print(f" Services: {', '.join(intel.get('products_services', []))}")
print(f" Customers: {', '.join(intel.get('target_customers', []))}")
print(f" Pain Points: {', '.join(intel.get('pain_points', []))}")
print(f" Partnership: {intel.get('partnership_potential', '?')}")
print(f" Opportunity: {', '.join(intel.get('opportunity_types', []))}")
print(f" Confidence: {intel.get('confidence', 0):.0%}")
score = result["score"]
print(f"\n{'' * 40}")
print("2. TARGET SCORE")
print(f"{'' * 40}")
print(f" Fit: {score['fit']}/5 | Urgency: {score['urgency']}/5 | Access: {score['access']}/5")
print(f" Partner: {score['partner']}/5 | Payment: {score['payment']}/5 | Case Study: {score['case_study']}/5")
print(f" Risk: {score['risk']}/5")
print(f" TOTAL: {score['total']} → Priority: {score['priority']}")
channel = result["channel_plan"]
print(f"\n{'' * 40}")
print("3. CHANNEL STRATEGY")
print(f"{'' * 40}")
print(f" Primary: {channel['primary_channel']}")
print(f" Secondary: {channel['secondary_channel']}")
print(f" Automation: {channel['automation_level']}")
print(f" Reason: {channel['reason']}")
if channel.get("risk_flags"):
print(f" Risk Flags: {', '.join(channel['risk_flags'])}")
comp = result["compliance"]
print(f"\n{'' * 40}")
print("4. COMPLIANCE")
print(f"{'' * 40}")
print(f" Allowed: {'' if comp['allowed'] else ''}")
print(f" Level: {comp['level']}")
print(f" Reason: {comp['reason']}")
msg = result["message"]
print(f"\n{'' * 40}")
print("5. MESSAGE (DRAFT — NOT SENT)")
print(f"{'' * 40}")
print(f" Channel: {msg['channel']}")
print(f" Subject: {msg.get('subject', 'N/A')}")
print(f" Approval Required: {'✅ YES' if msg['approval_required'] else 'No'}")
print(f"\n --- BODY ---")
for line in msg["body"].split("\n"):
print(f" {line}")
print(f" --- END ---")
print(f"\n Follow-up 24h: {msg['follow_up_24h'][:80]}...")
print(f" Follow-up 72h: {msg['follow_up_72h'][:80]}...")
print(f" Stop: {msg['stop_condition']}")
print(f"\n{'' * 40}")
print("6. NEXT ACTION")
print(f"{'' * 40}")
print(f" Action: {result['next_action']}")
print(f" Approval Required: {'✅ YES — Sami must approve before sending' if result['approval_required'] else 'No'}")
prohibited = []
if "linkedin" in channel["primary_channel"]:
prohibited.append("LinkedIn scraping")
prohibited.append("LinkedIn auto-DM")
prohibited.extend(["WhatsApp cold blast", "Instagram mass DM", "Fake accounts"])
print(f"\n{'' * 40}")
print("7. PROHIBITED ACTIONS")
print(f"{'' * 40}")
for p in prohibited:
print(f"{p}")
print(f"\n{'=' * 60}")
print(" ⚠️ DRY-RUN COMPLETE — NO MESSAGES SENT")
print(f"{'=' * 60}")
def main():
parser = argparse.ArgumentParser(description="Dealix GTM OS Dry Run")
parser.add_argument("--company-name", required=True)
parser.add_argument("--website", default="")
parser.add_argument("--sector", default="agency")
parser.add_argument("--city", default="الرياض")
parser.add_argument("--email", default="")
args = parser.parse_args()
asyncio.run(run(args.company_name, args.website, args.sector, args.city, args.email))
if __name__ == "__main__":
main()