Spaces:
Sleeping
Sleeping
| """Command-line interface for the OSINT Expert Agent.""" | |
| from __future__ import annotations | |
| import argparse | |
| from .osint_agent import OSINTAgent | |
| def interactive_mode(agent: OSINTAgent) -> None: | |
| print("OSINT Expert Agent — Interactive Mode") | |
| print("Commands: 'exit'/'quit' to end, 'reset' to clear history.\n") | |
| while True: | |
| try: | |
| user_input = input("You: ").strip() | |
| except (EOFError, KeyboardInterrupt): | |
| print("\nExiting.") | |
| break | |
| if not user_input: | |
| continue | |
| if user_input.lower() in ("exit", "quit"): | |
| print("Session ended.") | |
| break | |
| if user_input.lower() == "reset": | |
| agent.reset() | |
| print("[Conversation history cleared]\n") | |
| continue | |
| print("Agent: ", end="", flush=True) | |
| for chunk in agent.stream_chat(user_input): | |
| print(chunk, end="", flush=True) | |
| print("\n") | |
| def main() -> None: | |
| parser = argparse.ArgumentParser( | |
| description="OSINT Expert Agent powered by Claude 3.5 Sonnet", | |
| formatter_class=argparse.RawDescriptionHelpFormatter, | |
| epilog=""" | |
| Examples: | |
| python -m agent.cli # interactive mode | |
| python -m agent.cli --target example.com # full analysis | |
| python -m agent.cli --target example.com --type passive | |
| python -m agent.cli --target 1.2.3.4 --type threat --context "seen in phishing" | |
| python -m agent.cli --iocs 1.2.3.4 bad.com abc123hash | |
| python -m agent.cli --explain "certificate transparency log mining" | |
| """, | |
| ) | |
| parser.add_argument("--target", "-t", help="Target to analyze (domain, IP, username, etc.)") | |
| parser.add_argument( | |
| "--type", | |
| choices=["full", "passive", "threat", "footprint", "breach", "darkweb", "socmint"], | |
| default="full", | |
| help="Analysis type (default: full)", | |
| ) | |
| parser.add_argument("--context", "-c", help="Additional context for the analysis") | |
| parser.add_argument("--iocs", nargs="+", metavar="IOC", help="IOCs for enrichment report") | |
| parser.add_argument("--explain", "-e", metavar="TECHNIQUE", help="Explain an OSINT technique") | |
| parser.add_argument("--model", default="claude-3-5-sonnet-20241022", help="Claude model to use") | |
| parser.add_argument("--no-stream", action="store_true", help="Disable streaming output") | |
| args = parser.parse_args() | |
| agent = OSINTAgent(model=args.model) | |
| if args.iocs: | |
| result = agent.generate_ioc_report(args.iocs) | |
| print(result) | |
| elif args.explain: | |
| result = agent.explain_technique(args.explain) | |
| print(result) | |
| elif args.target: | |
| prompt = OSINTAgent._build_analysis_prompt(args.target, args.type, args.context) | |
| if args.no_stream: | |
| result = agent.chat(prompt) | |
| print(result) | |
| else: | |
| for chunk in agent.stream_chat(prompt): | |
| print(chunk, end="", flush=True) | |
| print() | |
| else: | |
| interactive_mode(agent) | |
| if __name__ == "__main__": | |
| main() | |