SYMBOL INDEX (737 symbols across 86 files) FILE: benchmark/standalone-xbow-benchmark-runner/run_benchmarks.py function parse_args (line 24) | def parse_args() -> argparse.Namespace: function parse_range (line 115) | def parse_range(range_str: str) -> list[int]: function parse_ids (line 142) | def parse_ids(ids_str: str) -> list[int]: function auto_detect_benchmarks_dir (line 165) | def auto_detect_benchmarks_dir() -> Path: function find_last_run (line 192) | def find_last_run(output_dir: Path) -> Path: function load_failed_benchmarks (line 218) | def load_failed_benchmarks(run_dir: Path) -> list[dict]: function extract_failed_ids (line 248) | def extract_failed_ids(failed_results: list[dict]) -> list[int]: function format_failure_reason (line 268) | def format_failure_reason(result: dict) -> str: function map_model_name (line 295) | def map_model_name(model: str | None) -> str | None: function main (line 319) | async def main(): FILE: benchmark/standalone-xbow-benchmark-runner/src/benchmark_runner.py class BenchmarkRunner (line 16) | class BenchmarkRunner: method __init__ (line 19) | def __init__(self, config: BenchmarkConfig): method _setup_signal_handlers (line 38) | def _setup_signal_handlers(self): method run_all (line 59) | async def run_all(self) -> dict: method run_single_benchmark (line 123) | async def run_single_benchmark(self, info: BenchmarkInfo) -> Benchmark... FILE: benchmark/standalone-xbow-benchmark-runner/src/docker_manager.py class DockerManager (line 11) | class DockerManager: method __init__ (line 14) | def __init__(self): method load_benchmarks (line 18) | def load_benchmarks(self, benchmarks_dir: Path) -> dict[str, Benchmark... method _parse_flag_from_env (line 72) | def _parse_flag_from_env(self, env_file: Path) -> str | None: method start_benchmark (line 94) | def start_benchmark(self, benchmark_path: Path) -> dict: method stop_benchmark (line 177) | def stop_benchmark(self, benchmark_path: Path) -> dict: method get_exposed_port (line 214) | def get_exposed_port(self, benchmark_path: Path) -> int | None: FILE: benchmark/standalone-xbow-benchmark-runner/src/models.py class BenchmarkConfig (line 9) | class BenchmarkConfig: method __post_init__ (line 22) | def __post_init__(self): class BenchmarkInfo (line 29) | class BenchmarkInfo: class BenchmarkResult (line 41) | class BenchmarkResult: method to_dict (line 66) | def to_dict(self) -> dict: class BenchmarkSummary (line 89) | class BenchmarkSummary: method to_dict (line 109) | def to_dict(self) -> dict: FILE: benchmark/standalone-xbow-benchmark-runner/src/output_parser.py class OutputParser (line 6) | class OutputParser: method parse_output (line 23) | def parse_output(self, lines: list[str]) -> dict: method extract_flags (line 74) | def extract_flags(self, text: str) -> list[str]: method validate_strict_pattern (line 92) | def validate_strict_pattern(self, flag: str) -> bool: method filter_strict_flags (line 128) | def filter_strict_flags(self, flags: list[str]) -> list[str]: method parse_done_line (line 140) | def parse_done_line(self, line: str) -> dict | None: FILE: benchmark/standalone-xbow-benchmark-runner/src/pentestgpt_executor.py class PentestGPTExecutor (line 9) | class PentestGPTExecutor: method __init__ (line 12) | def __init__( method _ensure_container_running (line 28) | def _ensure_container_running(self): method execute (line 61) | async def execute( method _build_command (line 142) | def _build_command(self, target_url: str) -> list[str]: method _stream_output (line 171) | async def _stream_output( method _kill_gracefully (line 218) | async def _kill_gracefully(self, process: asyncio.subprocess.Process): FILE: benchmark/standalone-xbow-benchmark-runner/src/reporter.py class Reporter (line 10) | class Reporter: method __init__ (line 13) | def __init__(self, output_dir: Path): method get_benchmark_log_path (line 36) | def get_benchmark_log_path(self, benchmark_id: str) -> Path: method log_start (line 48) | def log_start(self, benchmark_id: str, index: int, total: int): method log_result (line 67) | def log_result(self, result: BenchmarkResult): method generate_summary (line 105) | def generate_summary(self, results: list[BenchmarkResult], start_time:... method _write_text_summary (line 156) | def _write_text_summary(self, summary: BenchmarkSummary): method _print_console_summary (line 233) | def _print_console_summary(self, summary: BenchmarkSummary): FILE: benchmark/standalone-xbow-benchmark-runner/src/state_manager.py class StateManager (line 7) | class StateManager: method __init__ (line 10) | def __init__(self, state_file: Path): method _load (line 22) | def _load(self): method save (line 36) | def save(self): method mark_completed (line 58) | def mark_completed(self, benchmark_id: str, success: bool): method is_completed (line 75) | def is_completed(self, benchmark_id: str) -> bool: method get_remaining (line 87) | def get_remaining(self, all_ids: list[str]) -> list[str]: method clear (line 99) | def clear(self): FILE: benchmark/standalone-xbow-benchmark-runner/tests/test_output_parser.py function test_extract_flags_basic (line 12) | def test_extract_flags_basic(): function test_extract_flags_htb_format (line 29) | def test_extract_flags_htb_format(): function test_extract_flags_hex_format (line 38) | def test_extract_flags_hex_format(): function test_parse_done_line (line 47) | def test_parse_done_line(): function test_parse_done_line_multiple_flags (line 60) | def test_parse_done_line_multiple_flags(): function test_parse_done_line_invalid (line 73) | def test_parse_done_line_invalid(): function test_parse_output_complete (line 83) | def test_parse_output_complete(): function test_parse_output_with_error (line 105) | def test_parse_output_with_error(): function test_flag_deduplication (line 122) | def test_flag_deduplication(): function test_validate_strict_pattern_valid (line 137) | def test_validate_strict_pattern_valid(): function test_validate_strict_pattern_invalid_format (line 149) | def test_validate_strict_pattern_invalid_format(): function test_validate_strict_pattern_too_short (line 159) | def test_validate_strict_pattern_too_short(): function test_validate_strict_pattern_case_insensitive (line 172) | def test_validate_strict_pattern_case_insensitive(): function test_filter_strict_flags (line 183) | def test_filter_strict_flags(): function test_filter_strict_flags_empty (line 203) | def test_filter_strict_flags_empty(): FILE: legacy/.devcontainer/targets/openssh/exploit.py class Color (line 32) | class Color: method string (line 43) | def string(string: str, color: str, bold: bool = False) -> str: class InvalidUsername (line 59) | class InvalidUsername(Exception): function apply_monkey_patch (line 63) | def apply_monkey_patch() -> None: function create_socket (line 112) | def create_socket(hostname: str, port: int) -> Union[socket.socket, None]: function connect (line 126) | def connect( function main (line 166) | def main(**kwargs): FILE: legacy/benchmark/evaluator.py class EvaluationResult (line 17) | class EvaluationResult: method __repr__ (line 23) | def __repr__(self): class VulnerabilityEvaluation (line 29) | class VulnerabilityEvaluation: method __post_init__ (line 35) | def __post_init__(self): class EvaluationReport (line 51) | class EvaluationReport: method print_summary (line 59) | def print_summary(self): class LLMProvider (line 80) | class LLMProvider(ABC): method evaluate (line 84) | def evaluate(self, prompt: str) -> str: class ClaudeLLM (line 89) | class ClaudeLLM(LLMProvider): method __init__ (line 92) | def __init__(self, api_key: Optional[str] = None): method evaluate (line 103) | def evaluate(self, prompt: str) -> str: class OllamaLLM (line 124) | class OllamaLLM(LLMProvider): method __init__ (line 127) | def __init__(self, model_name: str = "llama3", base_url: str = "http:/... method evaluate (line 131) | def evaluate(self, prompt: str) -> str: class PentestEvaluator (line 163) | class PentestEvaluator: method __init__ (line 166) | def __init__(self, llm_provider: LLMProvider): method evaluate_pattern (line 169) | def evaluate_pattern(self, pattern: Pattern, log_content: str, context... method evaluate_indicator (line 233) | def evaluate_indicator(self, indicator: SuccessIndicator, log_content:... method evaluate_target (line 262) | def evaluate_target(self, target: Target, log_content: str) -> Evaluat... method _generate_summary (line 303) | def _generate_summary(self, vuln_evals: List[VulnerabilityEvaluation], FILE: legacy/benchmark/pentestTarget.py class VulnerabilityType (line 11) | class VulnerabilityType(Enum): class Pattern (line 27) | class Pattern: method __repr__ (line 32) | def __repr__(self): class SuccessIndicator (line 37) | class SuccessIndicator: method __repr__ (line 44) | def __repr__(self): class Vulnerability (line 49) | class Vulnerability: method __repr__ (line 58) | def __repr__(self): class AttackStep (line 63) | class AttackStep: method __repr__ (line 71) | def __repr__(self): class Target (line 76) | class Target: method get_all_vulnerabilities (line 84) | def get_all_vulnerabilities(self) -> List[Vulnerability]: method get_attack_chain (line 91) | def get_attack_chain(self, step_id: str) -> List[AttackStep]: method print_attack_chain (line 108) | def print_attack_chain(self): method print_detailed_structure (line 159) | def print_detailed_structure(self): method to_graphviz (line 207) | def to_graphviz(self) -> str: method print_summary (line 237) | def print_summary(self): function create_thinkphp_target (line 268) | def create_thinkphp_target(): FILE: legacy/config/chatgpt_config_sample.py class ChatGPTConfig (line 5) | class ChatGPTConfig: FILE: legacy/pentestgpt/config/chat_config.py class GeminiConfig (line 6) | class GeminiConfig: class GPT4ALLConfig (line 14) | class GPT4ALLConfig: class ChatGPTConfig (line 21) | class ChatGPTConfig: FILE: legacy/pentestgpt/config/chatgpt_config_sample.py class ChatGPTConfig (line 5) | class ChatGPTConfig: FILE: legacy/pentestgpt/extract_cookie.py function main (line 11) | def main(): FILE: legacy/pentestgpt/llm_generation/conversation_manager.py class ConversationManager (line 4) | class ConversationManager: method __init__ (line 6) | def __init__(self): method add_user_message (line 9) | def add_user_message(self, content: str): method add_assistant_message (line 12) | def add_assistant_message(self, content: str): method add_system_message (line 15) | def add_system_message(self, content: str): method get_history (line 18) | def get_history(self): method clear_history (line 21) | def clear_history(self): FILE: legacy/pentestgpt/llm_generation/models/__init__.py function get_model (line 61) | def get_model(model_name: str) -> BaseModel: FILE: legacy/pentestgpt/llm_generation/models/anthropic_official.py class AnthropicOfficial (line 13) | class AnthropicOfficial(BaseModel): method __init__ (line 14) | def __init__(self, model_name: str = "claude-3-7-sonnet-latest"): method generate_response (line 17) | async def generate_response( function main (line 105) | async def main(): FILE: legacy/pentestgpt/llm_generation/models/base.py class BaseModel (line 6) | class BaseModel(ABC): method __init__ (line 7) | def __init__(self, model_name): method generate_response (line 12) | async def generate_response( method generate_json_response (line 24) | async def generate_json_response(self, conversation: list, **kwargs) -... method set_streaming_callback (line 33) | def set_streaming_callback(self, callback): FILE: legacy/pentestgpt/llm_generation/models/data_structure.py class StreamingDelta (line 5) | class StreamingDelta: FILE: legacy/pentestgpt/llm_generation/models/deepseek.py class DeepSeek (line 12) | class DeepSeek(BaseModel): method __init__ (line 13) | def __init__( method generate_response (line 24) | async def generate_response( function main (line 101) | async def main(): FILE: legacy/pentestgpt/llm_generation/models/gemini.py class Gemini (line 13) | class Gemini(BaseModel): method __init__ (line 14) | def __init__(self, model_name: str = "gemini-2.5-pro-preview-03-25"): method generate_response (line 17) | async def generate_response( function main (line 137) | async def main(): FILE: legacy/pentestgpt/llm_generation/models/jina.py class Jina (line 12) | class Jina(BaseModel): method __init__ (line 13) | def __init__(self, model_name: str = "jina-deepsearch-v1"): method generate_response (line 16) | async def generate_response( function main (line 65) | async def main(): FILE: legacy/pentestgpt/llm_generation/models/open_ai.py class OpenAI (line 12) | class OpenAI(BaseModel): method __init__ (line 13) | def __init__(self, model_name: str = "gpt-4o"): method generate_response (line 16) | async def generate_response( function main (line 56) | async def main(): FILE: legacy/pentestgpt/llm_generation/models/perplexity.py class Perplexity (line 14) | class Perplexity(BaseModel): method __init__ (line 15) | def __init__(self, model_name: str = "sonar-reasoning-pro"): method generate_response (line 18) | async def generate_response( function main (line 93) | async def main(): FILE: legacy/pentestgpt/llm_generation/task_processor.py class TaskProcessor (line 18) | class TaskProcessor: method __init__ (line 20) | def __init__( method init_system_prompt (line 45) | def init_system_prompt(self, **kwargs): method _validate_config (line 51) | def _validate_config(self): method _load_prompt_template_config (line 77) | def _load_prompt_template_config( method _call_model (line 87) | async def _call_model(self, user_prompt: str, conversation_round: int): method _format_prompt (line 112) | def _format_prompt(self, conversation_round: int, **kwargs): method _extract_json (line 124) | def _extract_json(self, raw_text): method _remove_thinking_text (line 138) | def _remove_thinking_text(self, raw_text): method run (line 144) | async def run( function main (line 177) | async def main(): FILE: legacy/pentestgpt/main.py class PentestConfig (line 13) | class PentestConfig: class PentestGPTCLI (line 24) | class PentestGPTCLI: method __init__ (line 34) | def __init__(self): method _create_parser (line 37) | def _create_parser(self) -> argparse.ArgumentParser: method parse_args (line 100) | def parse_args(self) -> PentestConfig: method display_available_models (line 123) | def display_available_models(self) -> None: function run_pentest (line 170) | def run_pentest(config: PentestConfig) -> None: function main (line 197) | def main(): FILE: legacy/pentestgpt/prompts/prompt_class.py class PentestGPTPrompt (line 6) | class PentestGPTPrompt: FILE: legacy/pentestgpt/prompts/prompt_class_v1.py class PentestGPTPrompt (line 6) | class PentestGPTPrompt: FILE: legacy/pentestgpt/prompts/prompt_class_v2.py class PentestGPTPrompt (line 6) | class PentestGPTPrompt: FILE: legacy/pentestgpt/tasks/crawler.py function crawl_dotCMS_description_page (line 7) | def crawl_dotCMS_description_page( function crawl_strapi_documentation (line 52) | def crawl_strapi_documentation(url, output_dir="outputs"): FILE: legacy/pentestgpt/tasks/example_sqlmap.py class sqlmapHandler (line 26) | class sqlmapHandler(chatGPTTemplate): method run (line 28) | def run(self): FILE: legacy/pentestgpt/test_connection.py function get_project_version (line 16) | def get_project_version(): function test_connection (line 21) | def test_connection(): FILE: legacy/pentestgpt/utils/APIs/chatgpt_api.py class Message (line 21) | class Message: class Conversation (line 32) | class Conversation: method __hash__ (line 36) | def __hash__(self): method __eq__ (line 39) | def __eq__(self, other): class ChatGPTAPI (line 45) | class ChatGPTAPI(LLMAPI): method __init__ (line 46) | def __init__(self, config_class, use_langfuse_logging=False): method _chat_completion (line 71) | def _chat_completion(self, history: List, model=None, image_url: str =... FILE: legacy/pentestgpt/utils/APIs/deepseek_api.py class Message (line 24) | class Message: class Conversation (line 35) | class Conversation: method __hash__ (line 39) | def __hash__(self): method __eq__ (line 42) | def __eq__(self, other): class DeepseekAPI (line 48) | class DeepseekAPI(LLMAPI): method __init__ (line 49) | def __init__(self, config_class, use_langfuse_logging=False): method _chat_completion (line 74) | def _chat_completion(self, history: List, model=None, image_url: str =... FILE: legacy/pentestgpt/utils/APIs/gemini_api.py class Message (line 29) | class Message: class Conversation (line 40) | class Conversation: method __hash__ (line 44) | def __hash__(self): method __eq__ (line 47) | def __eq__(self, other): class GeminiAPI (line 53) | class GeminiAPI(LLMAPI): method __init__ (line 54) | def __init__(self, config_class, use_langfuse_logging=False): method _chat_completion (line 89) | def _chat_completion(self, history: List, model=None, temperature=0.5)... method send_message (line 130) | def send_message(self, message, conversation_id, debug_mode=False): method send_new_message (line 182) | def send_new_message(self, message): FILE: legacy/pentestgpt/utils/APIs/gpt4all_api.py class Message (line 22) | class Message: class Conversation (line 33) | class Conversation: method __hash__ (line 37) | def __hash__(self): method __eq__ (line 40) | def __eq__(self, other): class GPT4ALLAPI (line 46) | class GPT4ALLAPI(LLMAPI): method __init__ (line 47) | def __init__(self, config_class, use_langfuse_logging=False): method _chat_completion_fallback (line 55) | def _chat_completion_fallback(self, history: List) -> str: method _chat_completion (line 60) | def _chat_completion(self, history: List) -> str: FILE: legacy/pentestgpt/utils/APIs/module_import.py class GPT4O (line 56) | class GPT4O: class GPT4O3 (line 71) | class GPT4O3: # Added GPT-o3 configuration class GPT4O4Mini (line 86) | class GPT4O4Mini: # Added GPT-o4-mini configuration class GPT4ALLConfigClass (line 101) | class GPT4ALLConfigClass: class TitanConfigClass (line 106) | class TitanConfigClass: class Gemini25ConfigClass (line 111) | class Gemini25ConfigClass: # Added Gemini 2.5 flash configuration class Gemini25ProConfigClass (line 125) | class Gemini25ProConfigClass: # Added Gemini 2.5 Pro configuration class DeepseekR1ConfigClass (line 140) | class DeepseekR1ConfigClass: # Added Deepseek configuration class DeepseekV3ConfigClass (line 154) | class DeepseekV3ConfigClass: # Added Deepseek configuration class OllamaConfigClass (line 168) | class OllamaConfigClass: # Added Ollama configuration function dynamic_import (line 176) | def dynamic_import(module_name, log_dir, use_langfuse_logging=False) -> ... FILE: legacy/pentestgpt/utils/APIs/ollama_api.py class Message (line 19) | class Message: class Conversation (line 30) | class Conversation: method __hash__ (line 34) | def __hash__(self): method __eq__ (line 37) | def __eq__(self, other): class OllamaAPI (line 43) | class OllamaAPI(LLMAPI): method __init__ (line 44) | def __init__(self, config_class, use_langfuse_logging=False): method _test_connection (line 60) | def _test_connection(self): method _chat_completion (line 85) | def _chat_completion(self, messages: List[Dict]) -> str: method send_new_message (line 125) | def send_new_message(self, message: str, conversation_id: str = None) ... method send_message (line 172) | def send_message(self, message: str, conversation_id: str) -> str: method get_conversation_history (line 230) | def get_conversation_history(self, conversation_id: str = None) -> Lis... method refresh (line 257) | def refresh(self): method get_model_list (line 264) | def get_model_list(self) -> List[str]: FILE: legacy/pentestgpt/utils/chatgpt.py class Message (line 39) | class Message: class Conversation (line 50) | class Conversation: method __hash__ (line 55) | def __hash__(self): method __eq__ (line 58) | def __eq__(self, other): function chatgpt_completion (line 64) | def chatgpt_completion(history: List) -> str: class ChatGPTAPI (line 72) | class ChatGPTAPI: method __init__ (line 73) | def __init__(self, config: ChatGPTConfig): method send_message (line 78) | def send_message(self, message): method extract_code_fragments (line 82) | def extract_code_fragments(self, text): class ChatGPT (line 86) | class ChatGPT: method __init__ (line 87) | def __init__(self, config: ChatGPTConfig): method refresh (line 108) | def refresh(self) -> str: method get_authorization (line 119) | def get_authorization(self): method get_latest_message_id (line 133) | def get_latest_message_id(self, conversation_id): method _parse_message_raw_output (line 146) | def _parse_message_raw_output(self, response: requests.Response): method send_new_message (line 158) | def send_new_message(self, message, model=None, gen_title=False): method send_message (line 215) | def send_message(self, message, conversation_id): method get_conversation_history (line 279) | def get_conversation_history(self, limit=20, offset=0): method get_cached_conversation (line 296) | def get_cached_conversation(self, conversation_id: str) -> Conversation: method gen_conversation_title (line 299) | def gen_conversation_title(self, conversation_id: str, rsp_message_id:... method delete_conversation (line 317) | def delete_conversation(self, conversation_id=None): method extract_code_fragments (line 336) | def extract_code_fragments(self, text): FILE: legacy/pentestgpt/utils/llm_api.py class Message (line 22) | class Message: class Conversation (line 33) | class Conversation: method __hash__ (line 37) | def __hash__(self): method __eq__ (line 40) | def __eq__(self, other): class LLMAPI (line 46) | class LLMAPI: method __init__ (line 47) | def __init__(self, config: ChatGPTConfig): method _count_token (line 59) | def _count_token(self, messages) -> int: method _token_compression (line 90) | def _token_compression(self, complete_messages) -> str: method _chat_completion_fallback (line 125) | def _chat_completion_fallback(self) -> str: method _chat_completion (line 132) | def _chat_completion(self, history: List, **kwargs) -> str: method send_new_message (line 219) | def send_new_message(self, message: str, image_url: str = None): method send_message (line 258) | def send_message( FILE: legacy/pentestgpt/utils/pentest_gpt.py function prompt_continuation (line 31) | def prompt_continuation(width, line_number, wrap_count): class pentestGPT (line 46) | class pentestGPT: method __init__ (line 61) | def __init__( method log_conversation (line 131) | def log_conversation(self, source, text): method refresh_session (line 149) | def refresh_session(self): method _feed_init_prompts (line 177) | def _feed_init_prompts(self): method initialize (line 209) | def initialize(self, previous_session_ids=None): method reasoning_handler (line 267) | def reasoning_handler(self, text) -> str: method input_parsing_handler (line 295) | def input_parsing_handler(self, text, source=None) -> str: method test_generation_handler (line 318) | def test_generation_handler(self, text): method local_input_handler (line 327) | def local_input_handler(self) -> str: method input_handler (line 414) | def input_handler(self) -> str: method save_session (line 625) | def save_session(self): method _preload_session (line 665) | def _preload_session(self) -> dict: method main (line 730) | def main(self): FILE: legacy/pentestgpt/utils/pentest_gpt_rebuilt.py function prompt_continuation (line 31) | def prompt_continuation(width, line_number, wrap_count): class pentestGPT (line 46) | class pentestGPT: method __init__ (line 54) | def __init__( method log_conversation (line 113) | def log_conversation(self, source, text): method refresh_session (line 131) | def refresh_session(self): method _feed_init_prompts (line 159) | def _feed_init_prompts(self): method initialize (line 189) | def initialize(self, previous_session_ids=None): method reasoning_handler (line 249) | def reasoning_handler(self, text) -> str: method input_parsing_handler (line 277) | def input_parsing_handler(self, text, source=None) -> str: method test_generation_handler (line 300) | def test_generation_handler(self, text): method local_input_handler (line 307) | def local_input_handler(self) -> str: method input_handler (line 394) | def input_handler(self) -> str: method save_session (line 598) | def save_session(self): method _preload_session (line 629) | def _preload_session(self) -> dict: method main (line 678) | def main(self): FILE: legacy/pentestgpt/utils/prompt_select.py function prompt_continuation (line 13) | def prompt_continuation(width, line_number, wrap_count): function prompt_select (line 28) | def prompt_select(title="", values=None, style=None, async_=False): function prompt_ask (line 58) | def prompt_ask(text, multiline=True) -> str: FILE: legacy/pentestgpt/utils/report_generator.py function main (line 9) | def main(file_name): FILE: legacy/pentestgpt/utils/search.py function parse_url_with_newspaper (line 6) | def parse_url_with_newspaper(url: str) -> str: function google_search_keyword_openserp (line 18) | def google_search_keyword_openserp(keyword: str, top_n=2) -> list: function crawl_search (line 52) | def crawl_search(search_results: list) -> list: function check_search_connection (line 78) | def check_search_connection(backend="openserp"): function search_as_RAG (line 99) | def search_as_RAG(list_of_keywords: list, backend="openserp") -> list: FILE: legacy/pentestgpt/utils/spinner.py class Spinner (line 7) | class Spinner: method __init__ (line 8) | def __init__(self, message="Loading...", delay=0.1): method spin (line 15) | def spin(self): method __enter__ (line 22) | def __enter__(self): method __exit__ (line 27) | def __exit__(self, exc_type, exc_value, exc_traceback): FILE: legacy/pentestgpt/utils/task_handler.py class localTaskCompleter (line 13) | class localTaskCompleter(Completer): method get_completions (line 40) | def get_completions(self, document, complete_event): class mainTaskCompleter (line 52) | class mainTaskCompleter(Completer): method get_completions (line 83) | def get_completions(self, document, complete_event): function main_task_entry (line 95) | def main_task_entry(text="> "): function local_task_entry (line 108) | def local_task_entry(text="> "): FILE: legacy/pentestgpt/utils/vectorDB.py class customVectorDB (line 12) | class customVectorDB: method __init__ (line 27) | def __init__(self, project_name: str, vectordb_name: str): method __del__ (line 71) | def __del__(self): method _save_text (line 78) | def _save_text(self, _text: str) -> str: method store_file (line 91) | def store_file(self, filename: str, metadata: [dict] = None): method store_text (line 104) | def store_text(self, content: str, metadata: [dict] = None): method retrieval (line 113) | def retrieval(self, keyword: str, metadata: [dict] = None) -> [dict]: method delete_index (line 127) | def delete_index(self): FILE: legacy/pentestgpt/utils/web_parser.py function is_valid_url (line 16) | def is_valid_url(url): function sanitize_url (line 25) | def sanitize_url(url): function check_local_file_access (line 29) | def check_local_file_access(url): function get_response (line 39) | def get_response(url, timeout=10) -> tuple: function parse_web (line 86) | def parse_web(url) -> str: function google_search (line 109) | def google_search(keyword, num_results=5) -> dict: FILE: legacy/tasks/crawler.py function crawl_dotCMS_description_page (line 6) | def crawl_dotCMS_description_page( function crawl_strapi_documentation (line 51) | def crawl_strapi_documentation(url, output_dir="outputs"): FILE: legacy/tasks/example_sqlmap.py class sqlmapHandler (line 25) | class sqlmapHandler(chatGPTTemplate): method run (line 27) | def run(self): FILE: legacy/tests/testBrowsing.py class TestBrowsing (line 4) | class TestBrowsing(unittest.TestCase): FILE: legacy/tests/testLogin.py class TestLogin (line 7) | class TestLogin(unittest.TestCase): FILE: pentestgpt/benchmark/cli.py function cmd_list (line 23) | def cmd_list(args: argparse.Namespace) -> int: function cmd_start (line 57) | def cmd_start(args: argparse.Namespace) -> int: function cmd_stop (line 94) | def cmd_stop(args: argparse.Namespace) -> int: function cmd_status (line 116) | def cmd_status(args: argparse.Namespace) -> int: function main (line 133) | def main() -> None: FILE: pentestgpt/benchmark/docker.py function start_benchmark (line 13) | def start_benchmark(benchmark_path: Path, port: int = DEFAULT_PORT) -> d... function stop_benchmark (line 79) | def stop_benchmark(benchmark_path: Path) -> dict[str, Any]: function get_exposed_port (line 107) | def get_exposed_port(benchmark_path: Path) -> int | None: function get_running_benchmarks (line 137) | def get_running_benchmarks() -> list[dict[str, Any]]: FILE: pentestgpt/benchmark/registry.py class BenchmarkInfo (line 11) | class BenchmarkInfo: class BenchmarkRegistry (line 22) | class BenchmarkRegistry: method __init__ (line 25) | def __init__(self, benchmarks_dir: Path | None = None): method load (line 29) | def load(self) -> None: method get (line 60) | def get(self, benchmark_id: str) -> BenchmarkInfo | None: method list_all (line 66) | def list_all(self) -> list[BenchmarkInfo]: method filter (line 72) | def filter( method get_all_tags (line 92) | def get_all_tags(self) -> set[str]: FILE: pentestgpt/core/agent.py class PentestAgent (line 50) | class PentestAgent: method __init__ (line 63) | def __init__( method execute (line 81) | async def execute(self, task: str) -> dict[str, Any]: method _build_system_prompt (line 224) | def _build_system_prompt(self) -> str: method _detect_flags (line 228) | def _detect_flags(self, text: str) -> list[str]: method _add_walkthrough_step (line 248) | def _add_walkthrough_step(self, step: str) -> None: function run_pentest (line 262) | async def run_pentest( FILE: pentestgpt/core/backend.py class MessageType (line 10) | class MessageType(Enum): class AgentMessage (line 21) | class AgentMessage: class AgentBackend (line 31) | class AgentBackend(ABC): method connect (line 42) | async def connect(self) -> None: method disconnect (line 47) | async def disconnect(self) -> None: method query (line 52) | async def query(self, prompt: str) -> None: method receive_messages (line 57) | def receive_messages(self) -> AsyncIterator[AgentMessage]: method session_id (line 63) | def session_id(self) -> str | None: method supports_resume (line 68) | def supports_resume(self) -> bool: method resume (line 73) | async def resume(self, session_id: str) -> bool: class ClaudeCodeBackend (line 78) | class ClaudeCodeBackend(AgentBackend): method __init__ (line 81) | def __init__( method connect (line 95) | async def connect(self) -> None: method disconnect (line 135) | async def disconnect(self) -> None: method query (line 143) | async def query(self, prompt: str) -> None: method receive_messages (line 151) | async def receive_messages(self) -> AsyncIterator[AgentMessage]: method session_id (line 186) | def session_id(self) -> str | None: method supports_resume (line 191) | def supports_resume(self) -> bool: method resume (line 195) | async def resume(self, session_id: str) -> bool: FILE: pentestgpt/core/config.py class PentestGPTConfig (line 10) | class PentestGPTConfig(BaseSettings): method __init__ (line 62) | def __init__(self, **data: Any) -> None: method system_prompt_path (line 77) | def system_prompt_path(self) -> Path: method from_env (line 82) | def from_env(cls, **overrides: object) -> "PentestGPTConfig": function load_config (line 87) | def load_config(**overrides: object) -> PentestGPTConfig: FILE: pentestgpt/core/controller.py class AgentState (line 19) | class AgentState(Enum): class AgentController (line 29) | class AgentController: method __init__ (line 50) | def __init__( method state (line 82) | def state(self) -> AgentState: method _set_state (line 86) | def _set_state( method pause (line 106) | def pause(self) -> bool: method resume (line 117) | def resume(self, instruction: str | None = None) -> bool: method stop (line 133) | def stop(self) -> bool: method inject (line 143) | def inject(self, instruction: str) -> bool: method _on_user_command (line 161) | def _on_user_command(self, event: Event) -> None: method _on_user_input (line 171) | def _on_user_input(self, event: Event) -> None: method run (line 179) | async def run(self, task: str, resume_session_id: str | None = None) -... method _process_message (line 308) | async def _process_message( method _detect_flags (line 349) | def _detect_flags(self, text: str) -> list[str]: FILE: pentestgpt/core/events.py class EventType (line 12) | class EventType(Enum): class Event (line 27) | class Event: class EventBus (line 35) | class EventBus: method __init__ (line 41) | def __init__(self) -> None: method get (line 47) | def get(cls) -> "EventBus": method reset (line 55) | def reset(cls) -> None: method subscribe (line 60) | def subscribe(self, event_type: EventType, handler: Callable[[Event], ... method unsubscribe (line 73) | def unsubscribe(self, event_type: EventType, handler: Callable[[Event]... method emit (line 85) | def emit(self, event: Event) -> None: method emit_state (line 101) | def emit_state( method emit_message (line 123) | def emit_message(self, text: str, msg_type: str = "info") -> None: method emit_tool (line 132) | def emit_tool( method emit_flag (line 154) | def emit_flag(self, flag: str, context: str = "") -> None: method emit_command (line 163) | def emit_command(self, command: str) -> None: method emit_input (line 171) | def emit_input(self, text: str) -> None: FILE: pentestgpt/core/langfuse.py function _silence_langfuse_loggers (line 29) | def _silence_langfuse_loggers() -> None: function _get_or_create_user_id (line 51) | def _get_or_create_user_id() -> str: function init_langfuse (line 86) | def init_langfuse(disabled: bool = False) -> bool: function _subscribe_to_events (line 135) | def _subscribe_to_events() -> None: function _handle_state (line 144) | def _handle_state(event: Event) -> None: function _handle_message (line 202) | def _handle_message(event: Event) -> None: function _handle_tool (line 222) | def _handle_tool(event: Event) -> None: function _handle_flag (line 281) | def _handle_flag(event: Event) -> None: function shutdown_langfuse (line 304) | def shutdown_langfuse() -> None: FILE: pentestgpt/core/session.py class SessionStatus (line 12) | class SessionStatus(Enum): class SessionInfo (line 22) | class SessionInfo: method to_dict (line 38) | def to_dict(self) -> dict[str, Any]: method from_dict (line 56) | def from_dict(cls, data: dict[str, Any]) -> "SessionInfo": class SessionStore (line 76) | class SessionStore: method __init__ (line 81) | def __init__(self, sessions_dir: Path | None = None): method create (line 91) | def create(self, target: str, task: str, model: str) -> SessionInfo: method current (line 114) | def current(self) -> SessionInfo | None: method save (line 118) | def save(self) -> None: method load (line 126) | def load(self, session_id: str) -> SessionInfo | None: method list_sessions (line 144) | def list_sessions(self, target: str | None = None) -> list[SessionInfo]: method get_latest (line 163) | def get_latest(self, target: str | None = None) -> SessionInfo | None: method delete (line 175) | def delete(self, session_id: str) -> bool: method update_status (line 194) | def update_status(self, status: SessionStatus) -> None: method add_instruction (line 200) | def add_instruction(self, instruction: str) -> None: method add_flag (line 206) | def add_flag(self, flag: str, context: str) -> None: method set_backend_session_id (line 212) | def set_backend_session_id(self, backend_id: str) -> None: method add_cost (line 218) | def add_cost(self, cost: float) -> None: method set_error (line 224) | def set_error(self, error: str) -> None: FILE: pentestgpt/core/tracer.py class Tracer (line 9) | class Tracer: method __init__ (line 12) | def __init__(self) -> None: method set_activity_callback (line 18) | def set_activity_callback(self, callback: Callable[[dict[str, Any]], N... method track_message (line 22) | def track_message( method track_tool_start (line 45) | def track_tool_start( method track_tool_complete (line 73) | def track_tool_complete( method track_agent_status (line 89) | def track_agent_status( method get_recent_activities (line 101) | def get_recent_activities(self, count: int = 50) -> list[dict[str, Any]]: method get_all_activities (line 106) | def get_all_activities(self) -> list[dict[str, Any]]: method clear (line 111) | def clear(self) -> None: function get_global_tracer (line 122) | def get_global_tracer() -> Tracer: function set_global_tracer (line 134) | def set_global_tracer(tracer: Tracer) -> None: FILE: pentestgpt/interface/components/activity_feed.py function escape_markup (line 12) | def escape_markup(text: str) -> str: class ActivityFeed (line 17) | class ActivityFeed(VerticalScroll): method __init__ (line 20) | def __init__(self, *args: Any, **kwargs: Any) -> None: method compose (line 26) | def compose(self) -> Iterator[Static]: method add_message (line 32) | def add_message( method add_tool_execution (line 48) | def add_tool_execution( method update_last_tool_status (line 71) | def update_last_tool_status(self, status: str, result: Any = None) -> ... method clear (line 83) | def clear(self) -> None: method _render_activities (line 89) | def _render_activities(self) -> None: method _render_message (line 117) | def _render_message(self, activity: dict[str, Any]) -> str: method _render_tool (line 139) | def _render_tool(self, activity: dict[str, Any]) -> str: method _get_tool_class (line 194) | def _get_tool_class(self, tool_name: str) -> str: FILE: pentestgpt/interface/components/renderers.py class BaseToolRenderer (line 9) | class BaseToolRenderer(ABC): method escape_markup (line 16) | def escape_markup(cls, text: str) -> str: method render (line 22) | def render(cls, tool_data: dict[str, Any]) -> str: method get_status_icon (line 27) | def get_status_icon(cls, status: str) -> str: class TerminalRenderer (line 38) | class TerminalRenderer(BaseToolRenderer): method render (line 45) | def render(cls, tool_data: dict[str, Any]) -> str: class ThinkingRenderer (line 78) | class ThinkingRenderer(BaseToolRenderer): method render (line 85) | def render(cls, tool_data: dict[str, Any]) -> str: class ResultRenderer (line 101) | class ResultRenderer(BaseToolRenderer): method render (line 108) | def render(cls, tool_data: dict[str, Any]) -> str: function get_renderer (line 135) | def get_renderer(tool_name: str) -> type[BaseToolRenderer] | None: function render_tool (line 140) | def render_tool(tool_data: dict[str, Any]) -> str: FILE: pentestgpt/interface/components/splash.py class SplashScreen (line 16) | class SplashScreen(Static): method __init__ (line 33) | def __init__(self, *args: Any, **kwargs: Any) -> None: method compose (line 41) | def compose(self) -> Iterator[Static]: method on_mount (line 51) | def on_mount(self) -> None: method on_unmount (line 55) | def on_unmount(self) -> None: method _animate_loading (line 61) | def _animate_loading(self) -> None: method _build_content (line 71) | def _build_content(self, loading_text: Text) -> Group: method _build_loading_text (line 103) | def _build_loading_text(self, phase: int) -> Text: FILE: pentestgpt/interface/main.py function parse_arguments (line 12) | def parse_arguments() -> argparse.Namespace: function validate_environment (line 124) | def validate_environment() -> None: function print_banner (line 135) | def print_banner() -> None: function run_cli_mode (line 151) | async def run_cli_mode(args: argparse.Namespace) -> None: function run_raw_mode (line 265) | async def run_raw_mode(args: argparse.Namespace) -> None: function run_tui_mode (line 372) | async def run_tui_mode(args: argparse.Namespace) -> None: function list_sessions (line 394) | def list_sessions(target: str | None = None) -> None: function main (line 419) | def main() -> None: FILE: pentestgpt/interface/tui.py class HelpScreen (line 23) | class HelpScreen(ModalScreen[None]): method compose (line 26) | def compose(self) -> ComposeResult: method on_key (line 43) | def on_key(self, _event: events.Key) -> None: class QuitScreen (line 48) | class QuitScreen(ModalScreen[None]): method compose (line 51) | def compose(self) -> ComposeResult: method on_mount (line 63) | def on_mount(self) -> None: method on_button_pressed (line 68) | def on_button_pressed(self, event: Button.Pressed) -> None: class PentestGPTApp (line 76) | class PentestGPTApp(App[None]): method __init__ (line 92) | def __init__( method _setup_event_handlers (line 114) | def _setup_event_handlers(self) -> None: method _on_state_change (line 123) | def _on_state_change(self, event: Event) -> None: method _on_agent_message (line 139) | def _on_agent_message(self, event: Event) -> None: method _on_flag (line 152) | def _on_flag(self, event: Event) -> None: method _on_tool (line 164) | def _on_tool(self, event: Event) -> None: method watch_agent_state (line 190) | def watch_agent_state(self, state: str) -> None: method compose (line 204) | def compose(self) -> ComposeResult: method watch_show_splash (line 209) | def watch_show_splash(self, show_splash: bool) -> None: method _build_main_interface (line 222) | def _build_main_interface(self) -> None: method _create_header (line 251) | def _create_header(self) -> Static: method _create_status_bar (line 269) | def _create_status_bar(self) -> Static: method _build_status_text (line 275) | def _build_status_text(self) -> Text: method _update_status_bar (line 308) | def _update_status_bar(self) -> None: method on_mount (line 316) | def on_mount(self) -> None: method _hide_splash (line 325) | def _hide_splash(self) -> None: method _start_agent (line 331) | def _start_agent(self) -> None: method on_input_submitted (line 409) | def on_input_submitted(self, event: Input.Submitted) -> None: method action_toggle_pause (line 423) | def action_toggle_pause(self) -> None: method action_toggle_help (line 433) | def action_toggle_help(self) -> None: method action_request_quit (line 443) | def action_request_quit(self) -> None: method on_unmount (line 451) | def on_unmount(self) -> None: function run_tui (line 461) | async def run_tui( FILE: pentestgpt/prompts/pentesting.py function get_ctf_prompt (line 177) | def get_ctf_prompt(custom_instruction: str | None = None) -> str: FILE: pentestgpt/tools/base.py class BaseTool (line 7) | class BaseTool(ABC): method __init__ (line 10) | def __init__(self, name: str, description: str) -> None: method execute (line 22) | async def execute(self, *args: Any, **kwargs: Any) -> dict[str, Any]: method to_dict (line 34) | def to_dict(self) -> dict[str, Any]: class TerminalTool (line 42) | class TerminalTool(BaseTool): method __init__ (line 45) | def __init__(self) -> None: method execute (line 51) | async def execute(self, command: str = "", **kwargs: Any) -> dict[str,... FILE: pentestgpt/tools/registry.py class ToolRegistry (line 8) | class ToolRegistry: method __init__ (line 11) | def __init__(self) -> None: method _register_default_tools (line 16) | def _register_default_tools(self) -> None: method register (line 20) | def register(self, tool: BaseTool) -> None: method get (line 24) | def get(self, name: str) -> BaseTool | None: method list_tools (line 28) | def list_tools(self) -> list[str]: method get_tool_info (line 32) | def get_tool_info(self, name: str) -> dict[str, Any] | None: function get_registry (line 42) | def get_registry() -> ToolRegistry: FILE: tests/conftest.py function pytest_configure (line 17) | def pytest_configure(config: pytest.Config) -> None: function reset_event_bus (line 31) | def reset_event_bus(): function temp_sessions_dir (line 44) | def temp_sessions_dir(): function temp_working_dir (line 51) | def temp_working_dir(): function sample_config (line 63) | def sample_config(temp_working_dir: Path) -> PentestGPTConfig: class MockBackend (line 76) | class MockBackend(AgentBackend): method __init__ (line 79) | def __init__(self) -> None: method connect (line 84) | async def connect(self) -> None: method disconnect (line 88) | async def disconnect(self) -> None: method query (line 92) | async def query(self, prompt: str) -> None: method receive_messages (line 96) | async def receive_messages(self): method session_id (line 102) | def session_id(self) -> str: method supports_resume (line 107) | def supports_resume(self) -> bool: method resume (line 111) | async def resume(self, session_id: str) -> bool: method set_messages (line 115) | def set_messages(self, messages: list[AgentMessage]) -> None: function mock_backend (line 121) | def mock_backend() -> MockBackend: FILE: tests/docker/test_container_health.py class TestContainerHealth (line 19) | class TestContainerHealth: method running_container (line 23) | def running_container(self): method _exec_in_container (line 67) | def _exec_in_container(self, container: str, command: str) -> subproce... method test_container_starts (line 76) | def test_container_starts(self, running_container: str): method test_workspace_exists (line 87) | def test_workspace_exists(self, running_container: str): method test_python_installed (line 92) | def test_python_installed(self, running_container: str): method test_poetry_installed (line 98) | def test_poetry_installed(self, running_container: str): method test_nmap_installed (line 104) | def test_nmap_installed(self, running_container: str): method test_curl_installed (line 110) | def test_curl_installed(self, running_container: str): method test_git_installed (line 116) | def test_git_installed(self, running_container: str): method test_netcat_installed (line 122) | def test_netcat_installed(self, running_container: str): method test_ripgrep_installed (line 129) | def test_ripgrep_installed(self, running_container: str): method test_tmux_installed (line 135) | def test_tmux_installed(self, running_container: str): method test_pentester_user_exists (line 141) | def test_pentester_user_exists(self, running_container: str): method test_sudo_available (line 147) | def test_sudo_available(self, running_container: str): method test_pentestgpt_importable (line 153) | def test_pentestgpt_importable(self, running_container: str): method test_claude_code_available (line 161) | def test_claude_code_available(self, running_container: str): FILE: tests/docker/test_docker_build.py class TestDockerBuild (line 18) | class TestDockerBuild: method test_dockerfile_exists (line 21) | def test_dockerfile_exists(self): method test_docker_compose_exists (line 26) | def test_docker_compose_exists(self): method test_docker_compose_config_valid (line 31) | def test_docker_compose_config_valid(self): method test_dockerfile_syntax_valid (line 42) | def test_dockerfile_syntax_valid(self): method test_docker_image_builds (line 53) | def test_docker_image_builds(self): method test_scripts_exist (line 70) | def test_scripts_exist(self): method test_entrypoint_script_syntax (line 82) | def test_entrypoint_script_syntax(self): method test_config_script_syntax (line 94) | def test_config_script_syntax(self): FILE: tests/integration/test_benchmark_cli.py class TestBenchmarkCLI (line 18) | class TestBenchmarkCLI: method sample_benchmark_dir (line 22) | def sample_benchmark_dir(self) -> Path: method test_cmd_list_all (line 71) | def test_cmd_list_all(self, sample_benchmark_dir: Path, capsys): method test_cmd_list_filter_by_tag (line 88) | def test_cmd_list_filter_by_tag(self, sample_benchmark_dir: Path, caps... method test_cmd_list_filter_by_level (line 104) | def test_cmd_list_filter_by_level(self, sample_benchmark_dir: Path, ca... method test_cmd_list_show_tags (line 121) | def test_cmd_list_show_tags(self, sample_benchmark_dir: Path, capsys): method test_cmd_list_invalid_dir (line 138) | def test_cmd_list_invalid_dir(self, capsys): method test_cmd_start_success (line 153) | def test_cmd_start_success(self, mock_start: MagicMock, sample_benchma... method test_cmd_start_failure (line 173) | def test_cmd_start_failure(self, mock_start: MagicMock, sample_benchma... method test_cmd_start_not_found (line 191) | def test_cmd_start_not_found(self, sample_benchmark_dir: Path, capsys): method test_cmd_stop_success (line 204) | def test_cmd_stop_success(self, mock_stop: MagicMock, sample_benchmark... method test_cmd_stop_failure (line 220) | def test_cmd_stop_failure(self, mock_stop: MagicMock, sample_benchmark... method test_cmd_stop_not_found (line 237) | def test_cmd_stop_not_found(self, sample_benchmark_dir: Path, capsys): method test_cmd_status_running (line 250) | def test_cmd_status_running(self, mock_running: MagicMock, capsys): method test_cmd_status_none_running (line 270) | def test_cmd_status_none_running(self, mock_running: MagicMock, capsys): FILE: tests/integration/test_controller.py class TestAgentController (line 18) | class TestAgentController: method config (line 22) | def config(self, temp_working_dir: Path) -> PentestGPTConfig: method controller (line 30) | def controller( method test_initial_state (line 44) | def test_initial_state(self, controller: AgentController): method test_run_success (line 49) | async def test_run_success(self, controller: AgentController, mock_bac... method test_run_with_tool_messages (line 67) | async def test_run_with_tool_messages( method test_pause_and_resume (line 94) | async def test_pause_and_resume(self, controller: AgentController, moc... method test_pause_request (line 103) | def test_pause_request(self, controller: AgentController): method test_resume_request (line 108) | def test_resume_request(self, controller: AgentController): method test_stop_request (line 113) | def test_stop_request(self, controller: AgentController): method test_stop_during_run (line 120) | async def test_stop_during_run(self, controller: AgentController, mock... method test_inject_instruction (line 129) | def test_inject_instruction(self, controller: AgentController): method test_flag_detection (line 135) | async def test_flag_detection(self, controller: AgentController, mock_... method test_session_not_found (line 156) | async def test_session_not_found(self, controller: AgentController): method test_backend_error (line 163) | async def test_backend_error(self, controller: AgentController, mock_b... FILE: tests/unit/test_backend_interface.py class TestMessageType (line 12) | class TestMessageType: method test_message_types_exist (line 15) | def test_message_types_exist(self): class TestAgentMessage (line 25) | class TestAgentMessage: method test_create_text_message (line 28) | def test_create_text_message(self): method test_create_tool_start_message (line 40) | def test_create_tool_start_message(self): method test_create_tool_result_message (line 53) | def test_create_tool_result_message(self): method test_create_result_message_with_metadata (line 63) | def test_create_result_message_with_metadata(self): class TestAgentBackendInterface (line 76) | class TestAgentBackendInterface: method test_cannot_instantiate_abstract_class (line 79) | def test_cannot_instantiate_abstract_class(self): method test_interface_methods_defined (line 84) | def test_interface_methods_defined(self): class ConcreteBackend (line 96) | class ConcreteBackend(AgentBackend): method __init__ (line 99) | def __init__(self) -> None: method connect (line 102) | async def connect(self) -> None: method disconnect (line 105) | async def disconnect(self) -> None: method query (line 108) | async def query(self, prompt: str) -> None: method receive_messages (line 111) | async def receive_messages(self): method session_id (line 115) | def session_id(self) -> str: method resume (line 118) | async def resume(self, session_id: str) -> bool: class TestConcreteBackend (line 123) | class TestConcreteBackend: method backend (line 127) | def backend(self) -> ConcreteBackend: method test_session_id (line 130) | def test_session_id(self, backend: ConcreteBackend): method test_supports_resume_default (line 134) | def test_supports_resume_default(self, backend: ConcreteBackend): method test_receive_messages (line 139) | async def test_receive_messages(self, backend: ConcreteBackend): FILE: tests/unit/test_benchmark_registry.py class TestBenchmarkRegistry (line 16) | class TestBenchmarkRegistry: method sample_benchmark_dir (line 20) | def sample_benchmark_dir(self) -> Path: method test_load_benchmarks (line 55) | def test_load_benchmarks(self, sample_benchmark_dir: Path) -> None: method test_get_benchmark (line 61) | def test_get_benchmark(self, sample_benchmark_dir: Path) -> None: method test_filter_by_tags (line 68) | def test_filter_by_tags(self, sample_benchmark_dir: Path) -> None: method test_filter_by_levels (line 75) | def test_filter_by_levels(self, sample_benchmark_dir: Path) -> None: method test_get_all_tags (line 82) | def test_get_all_tags(self, sample_benchmark_dir: Path) -> None: method test_nonexistent_benchmark (line 88) | def test_nonexistent_benchmark(self, sample_benchmark_dir: Path) -> None: FILE: tests/unit/test_config.py class TestPentestGPTConfig (line 17) | class TestPentestGPTConfig: method test_create_config_with_required_fields (line 20) | def test_create_config_with_required_fields(self, temp_working_dir: Pa... method test_default_values (line 29) | def test_default_values(self, temp_working_dir: Path): method test_missing_required_field (line 44) | def test_missing_required_field(self, temp_working_dir: Path): method test_custom_instruction (line 51) | def test_custom_instruction(self, temp_working_dir: Path): method test_interface_mode_validation (line 60) | def test_interface_mode_validation(self, temp_working_dir: Path): method test_permission_mode_validation (line 85) | def test_permission_mode_validation(self, temp_working_dir: Path): method test_working_directory_created (line 101) | def test_working_directory_created(self): method test_system_prompt_path (line 115) | def test_system_prompt_path(self, temp_working_dir: Path): class TestLoadConfig (line 127) | class TestLoadConfig: method test_load_config_with_target (line 130) | def test_load_config_with_target(self, temp_working_dir: Path): method test_load_config_with_multiple_overrides (line 138) | def test_load_config_with_multiple_overrides(self, temp_working_dir: P... method test_from_env_classmethod (line 152) | def test_from_env_classmethod(self, temp_working_dir: Path): method test_load_config_from_environment (line 160) | def test_load_config_from_environment(self, temp_working_dir: Path): FILE: tests/unit/test_events.py class TestEventBus (line 12) | class TestEventBus: method test_singleton (line 15) | def test_singleton(self): method test_subscribe_and_emit (line 21) | def test_subscribe_and_emit(self): method test_unsubscribe (line 35) | def test_unsubscribe(self): method test_multiple_handlers (line 49) | def test_multiple_handlers(self): method test_emit_message (line 68) | def test_emit_message(self): method test_emit_state (line 80) | def test_emit_state(self): method test_emit_tool (line 92) | def test_emit_tool(self): method test_emit_flag (line 105) | def test_emit_flag(self): method test_emit_command (line 117) | def test_emit_command(self): method test_emit_input (line 128) | def test_emit_input(self): method test_handler_exception_doesnt_break_others (line 139) | def test_handler_exception_doesnt_break_others(self): method test_event_has_timestamp (line 157) | def test_event_has_timestamp(self): FILE: tests/unit/test_flag_detection.py function detect_flags (line 21) | def detect_flags(text: str) -> list[str]: class TestFlagDetection (line 34) | class TestFlagDetection: method test_detect_flag_lowercase (line 37) | def test_detect_flag_lowercase(self): method test_detect_flag_uppercase (line 43) | def test_detect_flag_uppercase(self): method test_detect_htb_flag (line 49) | def test_detect_htb_flag(self): method test_detect_ctf_flag (line 55) | def test_detect_ctf_flag(self): method test_detect_custom_ctf_format (line 61) | def test_detect_custom_ctf_format(self): method test_detect_32_char_hex (line 67) | def test_detect_32_char_hex(self): method test_detect_32_char_hex_mixed_case (line 73) | def test_detect_32_char_hex_mixed_case(self): method test_detect_multiple_flags (line 80) | def test_detect_multiple_flags(self): method test_no_false_positives_short_hex (line 94) | def test_no_false_positives_short_hex(self): method test_no_false_positives_31_char_hex (line 102) | def test_no_false_positives_31_char_hex(self): method test_no_false_positives_33_char_hex (line 109) | def test_no_false_positives_33_char_hex(self): method test_flag_with_special_content (line 117) | def test_flag_with_special_content(self): method test_flag_in_json_context (line 123) | def test_flag_in_json_context(self): method test_flag_in_command_output (line 129) | def test_flag_in_command_output(self): method test_empty_string (line 138) | def test_empty_string(self): method test_no_flags (line 143) | def test_no_flags(self): method test_flag_case_insensitive (line 151) | def test_flag_case_insensitive(self): method test_duplicate_flags_not_repeated (line 158) | def test_duplicate_flags_not_repeated(self): FILE: tests/unit/test_langfuse.py class TestLangfuseIntegration (line 17) | class TestLangfuseIntegration: method test_init_langfuse_disabled_via_flag (line 20) | def test_init_langfuse_disabled_via_flag(self): method test_init_langfuse_disabled_via_env_var (line 31) | def test_init_langfuse_disabled_via_env_var(self): method test_init_langfuse_with_mock_v3_api (line 51) | def test_init_langfuse_with_mock_v3_api(self): method test_get_or_create_user_id_creates_new (line 83) | def test_get_or_create_user_id_creates_new(self): method test_get_or_create_user_id_reads_existing (line 106) | def test_get_or_create_user_id_reads_existing(self): method test_shutdown_langfuse_safe_when_not_initialized (line 127) | def test_shutdown_langfuse_safe_when_not_initialized(self): method test_event_handlers_guard_against_no_client (line 138) | def test_event_handlers_guard_against_no_client(self): method test_state_handler_stores_pending_session_on_running (line 156) | def test_state_handler_stores_pending_session_on_running(self): method test_state_handler_uses_target_field (line 186) | def test_state_handler_uses_target_field(self): method test_state_handler_backward_compatible_with_details_only (line 216) | def test_state_handler_backward_compatible_with_details_only(self): method test_state_handler_ends_span_on_completed (line 238) | def test_state_handler_ends_span_on_completed(self): method test_message_handler_creates_nested_span (line 263) | def test_message_handler_creates_nested_span(self): method test_tool_handler_creates_session_span_on_first_tool (line 290) | def test_tool_handler_creates_session_span_on_first_tool(self): method test_tool_handler_creates_nested_span_when_span_exists (line 334) | def test_tool_handler_creates_nested_span_when_span_exists(self): method test_session_discarded_if_no_tools_executed (line 362) | def test_session_discarded_if_no_tools_executed(self): method test_flag_handler_creates_nested_span (line 392) | def test_flag_handler_creates_nested_span(self): method test_eventbus_integration (line 420) | def test_eventbus_integration(self): method test_langfuse_loggers_silenced (line 454) | def test_langfuse_loggers_silenced(self): method test_shutdown_resets_all_state (line 481) | def test_shutdown_resets_all_state(self): FILE: tests/unit/test_session.py class TestSessionInfo (line 15) | class TestSessionInfo: method test_create_session_info (line 18) | def test_create_session_info(self): method test_session_to_dict (line 31) | def test_session_to_dict(self): method test_session_from_dict (line 49) | def test_session_from_dict(self): class TestSessionStore (line 70) | class TestSessionStore: method session_store (line 74) | def session_store(self, temp_sessions_dir: Path) -> SessionStore: method test_create_session (line 78) | def test_create_session(self, session_store: SessionStore): method test_save_and_load_session (line 91) | def test_save_and_load_session(self, session_store: SessionStore, temp... method test_list_sessions (line 110) | def test_list_sessions(self, session_store: SessionStore): method test_get_latest_session (line 125) | def test_get_latest_session(self, session_store: SessionStore): method test_delete_session (line 134) | def test_delete_session(self, session_store: SessionStore, temp_sessio... method test_update_session_status (line 143) | def test_update_session_status(self, session_store: SessionStore): method test_add_flag (line 151) | def test_add_flag(self, session_store: SessionStore): method test_add_cost (line 160) | def test_add_cost(self, session_store: SessionStore): method test_load_nonexistent_session (line 169) | def test_load_nonexistent_session(self, session_store: SessionStore):