SYMBOL INDEX (1255 symbols across 191 files) FILE: core/agents/architect.py class AppType (line 29) | class AppType(str, Enum): class SystemDependency (line 39) | class SystemDependency(BaseModel): class PackageDependency (line 58) | class PackageDependency(BaseModel): class Architecture (line 69) | class Architecture(BaseModel): class TemplateSelection (line 84) | class TemplateSelection(BaseModel): class Architect (line 95) | class Architect(BaseAgent): method run (line 99) | async def run(self) -> AgentResponse: method select_templates (line 124) | async def select_templates(self, spec: Specification) -> tuple[str, di... method plan_architecture (line 173) | async def plan_architecture(self, spec: Specification): method check_compatibility (line 199) | async def check_compatibility(self, arch: Architecture) -> bool: method prepare_example_project (line 227) | def prepare_example_project(self, spec: Specification): method check_system_dependencies (line 237) | async def check_system_dependencies(self, spec: Specification): method configure_template (line 268) | async def configure_template(self, spec: Specification, template_class... FILE: core/agents/base.py class BaseAgent (line 15) | class BaseAgent: method __init__ (line 23) | def __init__( method current_state (line 47) | def current_state(self) -> ProjectState: method next_state (line 52) | def next_state(self) -> ProjectState: method send_message (line 56) | async def send_message(self, message: str, extra_info: Optional[dict] ... method ask_question (line 70) | async def ask_question( method stream_handler (line 126) | async def stream_handler(self, content: str): method error_handler (line 142) | async def error_handler(self, error: LLMError, message: Optional[str] ... method get_llm (line 175) | def get_llm(self, name=None, stream_output=False, route=None) -> Calla... method run (line 225) | async def run() -> AgentResponse: FILE: core/agents/bug_hunter.py class HuntConclusionType (line 31) | class HuntConclusionType(str, Enum): class HuntConclusionOptions (line 36) | class HuntConclusionOptions(BaseModel): class ImportantLog (line 42) | class ImportantLog(BaseModel): class ImportantLogsForDebugging (line 53) | class ImportantLogsForDebugging(BaseModel): class BugHunter (line 57) | class BugHunter(ChatWithBreakdownMixin, BaseAgent): method run (line 61) | async def run(self) -> AgentResponse: method get_bug_reproduction_instructions (line 82) | async def get_bug_reproduction_instructions(self): method check_logs (line 103) | async def check_logs(self, logs_message: str = None): method ask_user_to_test (line 144) | async def ask_user_to_test(self, awaiting_bug_reproduction: bool = Fal... method start_pair_programming (line 241) | async def start_pair_programming(self): method generate_iteration_convo_so_far (line 363) | def generate_iteration_convo_so_far(self, omit_last_cycle=False): method async_task_finish (line 393) | async def async_task_finish(self): method set_data_for_next_hunting_cycle (line 400) | def set_data_for_next_hunting_cycle(self, human_readable_instructions,... FILE: core/agents/code_monkey.py class Decision (line 35) | class Decision(str, Enum): class Hunk (line 41) | class Hunk(BaseModel): class ReviewChanges (line 47) | class ReviewChanges(BaseModel): class FileDescription (line 52) | class FileDescription(BaseModel): function extract_code_blocks (line 61) | def extract_code_blocks(content): class CodeMonkey (line 68) | class CodeMonkey(FileDiffMixin, BaseAgent): method run (line 72) | async def run(self) -> AgentResponse: method implement_changes (line 81) | async def implement_changes(self, data: Optional[dict] = None) -> dict: method describe_files (line 160) | async def describe_files(self) -> AgentResponse: method describe_file (line 186) | async def describe_file(self, file: File, content: str): method accept_changes (line 213) | async def accept_changes(self, file_path: str, old_content: str, new_c... FILE: core/agents/convo.py class AgentConvo (line 20) | class AgentConvo(Convo): method __init__ (line 23) | def __init__(self, agent: "BaseAgent"): method _init_templates (line 34) | def _init_templates(cls): method _get_default_template_vars (line 41) | def _get_default_template_vars(self) -> dict: method _serialize_prompt_context (line 55) | def _serialize_prompt_context(context: dict) -> dict: method render (line 64) | def render(self, name: str, **kwargs) -> str: method template (line 74) | def template(self, template_name: str, **kwargs) -> "AgentConvo": method fork (line 85) | def fork(self) -> "AgentConvo": method trim (line 91) | def trim(self, trim_index: int, trim_count: int) -> "AgentConvo": method slice (line 100) | def slice(self, slice_index: int, slice_count: int) -> "AgentConvo": method require_schema (line 112) | def require_schema(self, model: BaseModel) -> "AgentConvo": method remove_last_x_messages (line 130) | def remove_last_x_messages(self, x: int) -> "AgentConvo": FILE: core/agents/developer.py class StepType (line 32) | class StepType(str, Enum): class CommandOptions (line 39) | class CommandOptions(BaseModel): class SaveFileOptions (line 45) | class SaveFileOptions(BaseModel): class SaveFileStep (line 49) | class SaveFileStep(BaseModel): class CommandStep (line 54) | class CommandStep(BaseModel): class HumanInterventionStep (line 59) | class HumanInterventionStep(BaseModel): class UtilityFunction (line 64) | class UtilityFunction(BaseModel): class TaskSteps (line 80) | class TaskSteps(BaseModel): function has_correct_num_of_tags (line 84) | def has_correct_num_of_tags(response: str) -> bool: class Developer (line 91) | class Developer(ChatWithBreakdownMixin, RelevantFilesMixin, BaseAgent): method run (line 95) | async def run(self) -> AgentResponse: method breakdown_current_iteration (line 121) | async def breakdown_current_iteration(self) -> AgentResponse: method breakdown_current_task (line 204) | async def breakdown_current_task(self) -> AgentResponse: method set_next_steps (line 313) | def set_next_steps(self, response: TaskSteps, source: str): method remove_duplicate_steps (line 330) | def remove_duplicate_steps(self, data): method ask_to_execute_task (line 349) | async def ask_to_execute_task(self) -> bool: method update_knowledge_base (line 478) | async def update_knowledge_base(self): FILE: core/agents/error_handler.py class ErrorHandler (line 12) | class ErrorHandler(BaseAgent): method run (line 24) | async def run(self) -> AgentResponse: method handle_command_error (line 54) | async def handle_command_error(self, message: str, details: dict) -> A... FILE: core/agents/executor.py class CommandResult (line 23) | class CommandResult(BaseModel): class Executor (line 36) | class Executor(BaseAgent): method __init__ (line 40) | def __init__( method for_step (line 59) | def for_step(self, step): method output_handler (line 65) | async def output_handler(self, out, err): method exit_handler (line 69) | async def exit_handler(self, process): method run (line 72) | async def run(self) -> AgentResponse: method check_command_output (line 147) | async def check_command_output( method complete (line 169) | def complete(self): FILE: core/agents/external_docs.py class DocQueries (line 18) | class DocQueries(BaseModel): class SelectedDocsets (line 22) | class SelectedDocsets(BaseModel): class ExternalDocumentation (line 26) | class ExternalDocumentation(BaseAgent): method run (line 46) | async def run(self) -> AgentResponse: method _get_available_docsets (line 72) | async def _get_available_docsets(self) -> list[tuple]: method _select_docsets (line 85) | async def _select_docsets(self, available_docsets: list[tuple]) -> dic... method _create_queries (line 106) | async def _create_queries(self, docsets: dict[str, str]) -> dict[str, ... method _fetch_snippets (line 131) | async def _fetch_snippets(self, queries: dict[str, list[str]]) -> list... method _store_docs (line 158) | async def _store_docs(self, snippets: list[tuple], available_docsets: ... FILE: core/agents/frontend.py function has_correct_num_of_backticks (line 33) | def has_correct_num_of_backticks(response: str) -> bool: class Frontend (line 40) | class Frontend(FileDiffMixin, GitMixin, BaseAgent): method run (line 44) | async def run(self) -> AgentResponse: method start_frontend (line 61) | async def start_frontend(self): method continue_frontend (line 112) | async def continue_frontend(self): method iterate_frontend (line 151) | async def iterate_frontend(self): method end_frontend_iteration (line 320) | async def end_frontend_iteration(self, finished: bool) -> AgentResponse: method process_response (line 356) | async def process_response(self, response_blocks: list, removed_mock: ... method remove_mock (line 451) | async def remove_mock(self): method set_app_details (line 519) | async def set_app_details(self): method kill_app (line 532) | async def kill_app(self): method try_auto_debug (line 554) | async def try_auto_debug(self) -> str: FILE: core/agents/git.py class GitMixin (line 9) | class GitMixin: method check_git_installed (line 14) | async def check_git_installed(self) -> bool: method is_git_initialized (line 21) | async def is_git_initialized(self) -> bool: method init_git_if_needed (line 35) | async def init_git_if_needed(self) -> bool: method git_commit (line 92) | async def git_commit(self, commit_message: Optional[str] = None) -> None: FILE: core/agents/human_input.py class HumanInput (line 6) | class HumanInput(BaseAgent): method run (line 10) | async def run(self) -> AgentResponse: method human_intervention (line 16) | async def human_intervention(self, step) -> AgentResponse: method input_required (line 29) | async def input_required(self, files: list[dict]) -> AgentResponse: FILE: core/agents/importer.py class Importer (line 17) | class Importer(BaseAgent): method run (line 21) | async def run(self) -> AgentResponse: method start_import_process (line 30) | async def start_import_process(self): method analyze_project (line 56) | async def analyze_project(self): FILE: core/agents/legacy_handler.py class LegacyHandler (line 5) | class LegacyHandler(BaseAgent): method run (line 9) | async def run(self) -> AgentResponse: FILE: core/agents/mixins.py class RelevantFiles (line 21) | class RelevantFiles(BaseModel): class Test (line 27) | class Test(BaseModel): class TestSteps (line 33) | class TestSteps(BaseModel): class ChatWithBreakdownMixin (line 37) | class ChatWithBreakdownMixin: method chat_with_breakdown (line 42) | async def chat_with_breakdown(self, convo: AgentConvo, breakdown: str)... class IterationPromptMixin (line 82) | class IterationPromptMixin: method find_solution (line 89) | async def find_solution( class RelevantFilesMixin (line 122) | class RelevantFilesMixin: method get_relevant_files_parallel (line 130) | async def get_relevant_files_parallel( method get_relevant_files (line 153) | async def get_relevant_files( class FileDiffMixin (line 191) | class FileDiffMixin: method get_line_changes (line 196) | def get_line_changes(self, old_content: str, new_content: str) -> tupl... FILE: core/agents/orchestrator.py class Orchestrator (line 36) | class Orchestrator(BaseAgent, GitMixin): method run (line 48) | async def run(self) -> bool: method install_dependencies (line 169) | async def install_dependencies(self): method set_frontend_script (line 182) | async def set_frontend_script(self): method enable_debugger (line 222) | async def enable_debugger(self): method set_favicon (line 252) | async def set_favicon(self): method set_package_json (line 283) | async def set_package_json(self): method set_vite_config (line 306) | async def set_vite_config(self): method handle_parallel_responses (line 345) | def handle_parallel_responses(self, agent: BaseAgent, responses: List[... method offline_changes_check (line 370) | async def offline_changes_check(self): method handle_done (line 418) | async def handle_done(self, agent: BaseAgent, response: AgentResponse)... method create_agent (line 463) | def create_agent(self, prev_response: Optional[AgentResponse]) -> Unio... method create_agent_for_step (line 554) | def create_agent_for_step(self, step: dict) -> Union[List[BaseAgent], ... method import_files (line 575) | async def import_files(self) -> Optional[AgentResponse]: method init_ui (line 600) | async def init_ui(self): method update_stats (line 620) | async def update_stats(self): FILE: core/agents/problem_solver.py class AlternativeSolutions (line 16) | class AlternativeSolutions(BaseModel): class ProblemSolver (line 27) | class ProblemSolver(IterationPromptMixin, BaseAgent): method __init__ (line 31) | def __init__(self, *args, **kwargs): method run (line 38) | async def run(self) -> AgentResponse: method generate_alternative_solutions (line 49) | async def generate_alternative_solutions(self): method try_alternative_solutions (line 76) | async def try_alternative_solutions(self) -> AgentResponse: method ask_for_preferred_solution (line 107) | async def ask_for_preferred_solution(self) -> Optional[tuple[int, str]]: FILE: core/agents/response.py class ResponseType (line 14) | class ResponseType(str, Enum): class AgentResponse (line 46) | class AgentResponse: method __init__ (line 51) | def __init__(self, type: ResponseType, agent: "BaseAgent", data: Optio... method __repr__ (line 56) | def __repr__(self) -> str: method done (line 60) | def done(agent: "BaseAgent") -> "AgentResponse": method error (line 64) | def error(agent: "BaseAgent", message: str, details: Optional[dict] = ... method cancel (line 72) | def cancel(agent: "BaseAgent") -> "AgentResponse": method exit (line 76) | def exit(agent: "ErrorHandler") -> "AgentResponse": method describe_files (line 80) | def describe_files(agent: "BaseAgent") -> "AgentResponse": method input_required (line 84) | def input_required(agent: "BaseAgent", files: list[dict[str, int]]) ->... method import_project (line 88) | def import_project(agent: "BaseAgent") -> "AgentResponse": method external_docs_required (line 92) | def external_docs_required(agent: "BaseAgent") -> "AgentResponse": method update_specification (line 96) | def update_specification(agent: "BaseAgent", description: str) -> "Age... method create_specification (line 106) | def create_specification(agent: "BaseAgent") -> "AgentResponse": FILE: core/agents/spec_writer.py class SpecWriter (line 19) | class SpecWriter(BaseAgent): method run (line 23) | async def run(self) -> AgentResponse: method apply_template (line 34) | async def apply_template(self): method initialize_spec_and_project (line 63) | async def initialize_spec_and_project(self) -> AgentResponse: method change_spec (line 163) | async def change_spec(self) -> AgentResponse: method update_spec (line 305) | async def update_spec(self, iteration_mode) -> AgentResponse: method check_prompt_complexity (line 345) | async def check_prompt_complexity(self, prompt: str) -> str: FILE: core/agents/task_completer.py class TaskCompleter (line 11) | class TaskCompleter(BaseAgent, GitMixin): method run (line 15) | async def run(self) -> AgentResponse: FILE: core/agents/tech_lead.py class APIEndpoint (line 29) | class APIEndpoint(BaseModel): class Epic (line 37) | class Epic(BaseModel): class Task (line 41) | class Task(BaseModel): class DevelopmentPlan (line 47) | class DevelopmentPlan(BaseModel): class EpicPlan (line 51) | class EpicPlan(BaseModel): class TechLead (line 55) | class TechLead(RelevantFilesMixin, BaseAgent): method run (line 59) | async def run(self) -> AgentResponse: method create_initial_project_epic (line 92) | def create_initial_project_epic(self): method apply_project_templates (line 111) | async def apply_project_templates(self): method ask_for_new_feature (line 146) | async def ask_for_new_feature(self) -> AgentResponse: method process_epic (line 262) | async def process_epic(self, sub_epic_number, sub_epic): method plan_epic (line 296) | async def plan_epic(self, epic) -> AgentResponse: method remove_mocked_data (line 371) | async def remove_mocked_data(self): method update_epics_and_tasks (line 381) | async def update_epics_and_tasks(self): FILE: core/agents/tech_writer.py class TechnicalWriter (line 12) | class TechnicalWriter(BaseAgent): method run (line 16) | async def run(self) -> AgentResponse: method send_congratulations (line 31) | async def send_congratulations(self): method create_readme (line 53) | async def create_readme(self): FILE: core/agents/troubleshooter.py class BugReportQuestions (line 25) | class BugReportQuestions(BaseModel): class RouteFilePaths (line 31) | class RouteFilePaths(BaseModel): class Troubleshooter (line 35) | class Troubleshooter(ChatWithBreakdownMixin, IterationPromptMixin, Relev... method run (line 39) | async def run(self) -> AgentResponse: method propose_solution (line 48) | async def propose_solution(self) -> AgentResponse: method create_iteration (line 63) | async def create_iteration(self) -> AgentResponse: method complete_task (line 148) | async def complete_task(self) -> AgentResponse: method _get_task_convo (line 161) | def _get_task_convo(self) -> AgentConvo: method get_run_command (line 187) | async def get_run_command(self) -> Optional[str]: method get_user_instructions (line 203) | async def get_user_instructions(self) -> Optional[str]: method _get_route_files (line 233) | async def _get_route_files(self) -> list[File]: method get_user_feedback (line 244) | async def get_user_feedback( method try_next_alternative_solution (line 348) | def try_next_alternative_solution(self, user_feedback: str, user_feedb... method generate_bug_report (line 368) | async def generate_bug_report( method trace_loop (line 426) | async def trace_loop(self, trace_event: str): FILE: core/agents/wizard.py class Wizard (line 20) | class Wizard(BaseAgent): method run (line 24) | async def run(self) -> AgentResponse: method init_template (line 30) | async def init_template(self) -> bool: method upload_docs (line 133) | async def upload_docs(self, docs: str) -> (bool, str, list): FILE: core/cli/helpers.py function parse_llm_endpoint (line 61) | def parse_llm_endpoint(value: str) -> Optional[tuple[LLMProvider, str]]: function get_line_changes (line 88) | def get_line_changes(old_content: str, new_content: str) -> tuple[int, i... function calculate_pr_changes (line 117) | def calculate_pr_changes(convo_entries): function parse_llm_key (line 156) | def parse_llm_key(value: str) -> Optional[tuple[LLMProvider, str]]: function parse_arguments (line 180) | def parse_arguments() -> Namespace: function load_config (line 284) | def load_config(args: Namespace) -> Optional[Config]: function list_projects_json (line 333) | async def list_projects_json(db: SessionManager): function insert_new_task (line 354) | def insert_new_task(tasks, new_task): function find_task_by_id (line 370) | def find_task_by_id(tasks, task_id): function change_order_of_task (line 385) | def change_order_of_task(tasks, task_to_move, new_position): function find_first_todo_task (line 395) | def find_first_todo_task(tasks): function find_first_todo_task_index (line 412) | def find_first_todo_task_index(tasks): function get_epic_task_number (line 419) | def get_epic_task_number(state, current_task) -> (int, int): function get_source_for_history (line 437) | def get_source_for_history(msg_type: Optional[str] = "", question: Optio... function print_convo (line 481) | async def print_convo(ui: UIBase, convo: list, fake: Optional[bool] = Tr... function load_convo (line 583) | async def load_convo( function init_sentry (line 833) | def init_sentry(): function capture_exception (line 843) | def capture_exception(exc: Exception): function list_projects_branches_states (line 849) | async def list_projects_branches_states(db: SessionManager): function load_project (line 864) | async def load_project( function delete_project (line 905) | async def delete_project(db: SessionManager, project_id: UUID) -> bool: function show_config (line 918) | def show_config(): function init (line 926) | def init() -> tuple[UIBase, SessionManager, Namespace]: FILE: core/cli/main.py function cleanup (line 51) | async def cleanup(ui: UIBase): function sync_cleanup (line 59) | def sync_cleanup(ui: UIBase): function run_project (line 63) | async def run_project(sm: StateManager, ui: UIBase, args) -> bool: function send_error (line 108) | async def send_error(ui: UIBase, error_source: str, err: Exception): function start_new_project (line 121) | async def start_new_project(sm: StateManager, ui: UIBase, args: Namespac... function run_pythagora_session (line 194) | async def run_pythagora_session(sm: StateManager, ui: UIBase, args: Name... function async_main (line 324) | async def async_main( function run_pythagora (line 429) | def run_pythagora(): FILE: core/config/__init__.py class _StrictModel (line 60) | class _StrictModel(BaseModel): class LLMProvider (line 70) | class LLMProvider(str, Enum): class UIAdapter (line 83) | class UIAdapter(str, Enum): class ProviderConfig (line 93) | class ProviderConfig(_StrictModel): class AgentLLMConfig (line 122) | class AgentLLMConfig(_StrictModel): class LLMConfig (line 140) | class LLMConfig(_StrictModel): method from_provider_and_agent_configs (line 177) | def from_provider_and_agent_configs(cls, provider: ProviderConfig, age... class PromptConfig (line 190) | class PromptConfig(_StrictModel): method validate_paths (line 202) | def validate_paths(cls, v: list[str]) -> list[str]: class LogConfig (line 209) | class LogConfig(_StrictModel): class DBConfig (line 233) | class DBConfig(_StrictModel): method validate_url_scheme (line 251) | def validate_url_scheme(cls, v: str) -> str: class PlainUIConfig (line 263) | class PlainUIConfig(_StrictModel): class LocalIPCConfig (line 271) | class LocalIPCConfig(_StrictModel): class VirtualUIConfig (line 281) | class VirtualUIConfig(_StrictModel): class FileSystemType (line 296) | class FileSystemType(str, Enum): class FileSystemConfig (line 305) | class FileSystemConfig(_StrictModel): class Config (line 325) | class Config(_StrictModel): method llm_for_agent (line 423) | def llm_for_agent(self, agent_name: str = "default") -> LLMConfig: method all_llms (line 436) | def all_llms(self) -> list[LLMConfig]: class ConfigLoader (line 444) | class ConfigLoader: method __init__ (line 457) | def __init__(self): method _remove_json_comments (line 462) | def _remove_json_comments(json_str: str) -> str: method from_json (line 474) | def from_json(cls: "ConfigLoader", config: str) -> Config: method load (line 483) | def load(self, path: str) -> Config: function adapt_for_bedrock (line 507) | def adapt_for_bedrock(config: Config) -> Config: function get_config (line 535) | def get_config() -> Config: FILE: core/config/env_importer.py function import_from_dotenv (line 8) | def import_from_dotenv(new_config_path: str) -> bool: function convert_config (line 44) | def convert_config(values: dict) -> Config: FILE: core/config/user_settings.py class TelemetrySettings (line 17) | class TelemetrySettings(BaseModel): function resolve_config_dir (line 23) | def resolve_config_dir() -> Path: class UserSettings (line 44) | class UserSettings(BaseModel): method load (line 68) | def load(): method save (line 81) | def save(self): method config_path (line 87) | def config_path(self): FILE: core/config/version.py function get_git_commit (line 8) | def get_git_commit() -> Optional[str]: function get_git_branch (line 42) | def get_git_branch() -> Optional[str]: function get_package_version (line 66) | def get_package_version() -> str: function get_version (line 90) | def get_version() -> str: FILE: core/db/fix_migrations.py function get_latest_revision (line 12) | def get_latest_revision(alembic_cfg: Config) -> Optional[str]: function fix_alembic_version (line 20) | def fix_alembic_version(db_path: str, version: str) -> None: function main (line 35) | def main(): FILE: core/db/migrations/env.py function run_migrations_offline (line 30) | def run_migrations_offline() -> None: function run_migrations_online (line 55) | def run_migrations_online() -> None: FILE: core/db/migrations/versions/0173e14719aa_move_metadata_from_file_to_file_content_.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 39) | def downgrade() -> None: FILE: core/db/migrations/versions/0173e14719aa_vacuum_database.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 32) | def downgrade() -> None: FILE: core/db/migrations/versions/08d71952ec2f_refactor_specification_template_to_.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 30) | def downgrade() -> None: FILE: core/db/migrations/versions/0a1bb637fa26_initial.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 191) | def downgrade() -> None: FILE: core/db/migrations/versions/3968d770dced_add_project_type_to_project.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 29) | def downgrade() -> None: FILE: core/db/migrations/versions/675268601278_add_chat_messages_and_convos.py function upgrade (line 22) | def upgrade() -> None: function downgrade (line 46) | def downgrade() -> None: FILE: core/db/migrations/versions/69e50fdaf067_move_knowledge_base_to_separate_table.py function upgrade (line 24) | def upgrade() -> None: function downgrade (line 113) | def downgrade() -> None: FILE: core/db/migrations/versions/b760f66138c0_add_docs_column_to_project_states.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 29) | def downgrade() -> None: FILE: core/db/migrations/versions/c8905d4ce784_add_original_description_and_template_.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 30) | def downgrade() -> None: FILE: core/db/migrations/versions/f352dbe45751_make_relevant_files_nullable.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 29) | def downgrade() -> None: FILE: core/db/migrations/versions/f708791b9270_adding_knowledge_base_field_to_.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 29) | def downgrade() -> None: FILE: core/db/migrations/versions/ff891d366761_add_example_project_to_spec.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 29) | def downgrade() -> None: FILE: core/db/models/base.py class Base (line 13) | class Base(AsyncAttrs, DeclarativeBase): method __repr__ (line 34) | def __repr__(self) -> str: FILE: core/db/models/branch.py class Branch (line 17) | class Branch(Base): method get_by_id (line 38) | async def get_by_id(session: "AsyncSession", branch_id: Union[str, UUI... method get_last_state (line 52) | async def get_last_state(self) -> Optional["ProjectState"]: method get_state_at_step (line 73) | async def get_state_at_step(self, step_index: int) -> Optional["Projec... FILE: core/db/models/chat_convo.py class ChatConvo (line 16) | class ChatConvo(Base): method get_chat_history (line 31) | async def get_chat_history(session: AsyncSession, convo_id) -> list["C... method get_project_state_for_convo_id (line 38) | async def get_project_state_for_convo_id(session: AsyncSession, convo_... FILE: core/db/models/chat_message.py class ChatMessage (line 12) | class ChatMessage(Base): FILE: core/db/models/exec_log.py class ExecLog (line 16) | class ExecLog(Base): method from_exec_log (line 42) | def from_exec_log(cls, project_state: "ProjectState", exec_log: ExecLo... FILE: core/db/models/file.py class File (line 15) | class File(Base): method clone (line 31) | def clone(self) -> "File": method get_referencing_files (line 46) | async def get_referencing_files(session: "AsyncSession", project_state... FILE: core/db/models/file_content.py class FileContent (line 13) | class FileContent(Base): method store (line 27) | async def store(cls, session: AsyncSession, hash: str, content: str, m... method delete_orphans (line 54) | async def delete_orphans(cls, session: AsyncSession): FILE: core/db/models/knowledge_base.py class KnowledgeBase (line 14) | class KnowledgeBase(Base): method clone (line 35) | def clone(self) -> "KnowledgeBase": method delete_orphans (line 51) | async def delete_orphans(cls, session: AsyncSession): FILE: core/db/models/llm_request.py class LLMRequest (line 18) | class LLMRequest(Base): method from_request_log (line 46) | def from_request_log( FILE: core/db/models/project.py class Project (line 18) | class Project(Base): method get_by_id (line 36) | async def get_by_id(session: "AsyncSession", project_id: Union[str, UU... method rename (line 51) | async def rename(session: "AsyncSession", id: UUID, name: str, dir_nam... method get_branch (line 75) | async def get_branch(self, name: Optional[str] = None) -> Optional["Br... method get_file_for_project (line 96) | async def get_file_for_project(session: AsyncSession, project_state_id... method get_branches_for_project_id (line 103) | async def get_branches_for_project_id(session: AsyncSession, project_i... method get_all_projects (line 110) | async def get_all_projects(session: "AsyncSession") -> list[Row]: method get_all_projects_with_branches_states (line 117) | async def get_all_projects_with_branches_states(session: "AsyncSession... method get_folder_from_project_name (line 153) | def get_folder_from_project_name(name: str): method delete_by_id (line 167) | async def delete_by_id(session: "AsyncSession", project_id: UUID) -> int: FILE: core/db/models/project_state.py class TaskStatus (line 32) | class TaskStatus: class IterationStatus (line 43) | class IterationStatus: class ProjectState (line 59) | class ProjectState(Base): method unfinished_steps (line 112) | def unfinished_steps(self) -> list[dict]: method current_step (line 121) | def current_step(self) -> Optional[dict]: method unfinished_iterations (line 133) | def unfinished_iterations(self) -> list[dict]: method current_iteration (line 146) | def current_iteration(self) -> Optional[dict]: method unfinished_tasks (line 158) | def unfinished_tasks(self) -> list[dict]: method current_task (line 169) | def current_task(self) -> Optional[dict]: method unfinished_epics (line 181) | def unfinished_epics(self) -> list[dict]: method current_epic (line 190) | def current_epic(self) -> Optional[dict]: method relevant_file_objects (line 202) | def relevant_file_objects(self): method create_initial_state (line 215) | def create_initial_state(branch: "Branch") -> "ProjectState": method get_project_states (line 238) | async def get_project_states( method create_next_state (line 269) | async def create_next_state(self) -> "ProjectState": method complete_step (line 317) | def complete_step(self, step_type: str): method complete_task (line 327) | def complete_task(self): method complete_epic (line 345) | def complete_epic(self): method complete_iteration (line 358) | def complete_iteration(self): method flag_iterations_as_modified (line 370) | def flag_iterations_as_modified(self): method flag_tasks_as_modified (line 380) | def flag_tasks_as_modified(self): method flag_epics_as_modified (line 390) | def flag_epics_as_modified(self): method flag_knowledge_base_as_modified (line 400) | def flag_knowledge_base_as_modified(self): method set_current_task_status (line 414) | def set_current_task_status(self, status: str): method get_file_by_path (line 428) | def get_file_by_path(self, path: str) -> Optional["File"]: method get_file_content_by_path (line 441) | def get_file_content_by_path(self, path: str) -> Union[FileContent, str]: method save_file (line 452) | def save_file(self, path: str, content: "FileContent", external: bool ... method delete_after (line 492) | async def delete_after(self): method get_last_iteration_steps (line 536) | def get_last_iteration_steps(self) -> list: method get_source_index (line 544) | def get_source_index(self, source: str) -> int: method get_steps_of_type (line 562) | def get_steps_of_type(self, step_type: str) -> [dict]: method has_frontend (line 571) | def has_frontend(self) -> bool: method working_on_frontend (line 580) | def working_on_frontend(self) -> bool: method is_feature (line 583) | def is_feature(self) -> bool: method get_state_for_redo_task (line 592) | async def get_state_for_redo_task(session: AsyncSession, project_state... method get_by_id (line 615) | async def get_by_id(session: "AsyncSession", state_id: UUID) -> Option... method get_all_epics_and_tasks (line 631) | async def get_all_epics_and_tasks(session: "AsyncSession", branch_id: ... method get_project_states_in_between (line 711) | async def get_project_states_in_between( method get_task_conversation_project_states (line 758) | async def get_task_conversation_project_states( method get_fe_states (line 906) | async def get_fe_states( method get_epic_task_number (line 958) | def get_epic_task_number(state, current_task) -> (int, int): method get_be_back_logs (line 976) | async def get_be_back_logs(session: "AsyncSession", branch_id: UUID) -... FILE: core/db/models/specification.py class Complexity (line 14) | class Complexity: class Specification (line 22) | class Specification(Base): method clone (line 43) | def clone(self) -> "Specification": method delete_orphans (line 61) | async def delete_orphans(cls, session: AsyncSession): method update_specification (line 74) | async def update_specification(session: AsyncSession, specification: "... FILE: core/db/models/user_input.py class UserInput (line 17) | class UserInput(Base): method from_user_input (line 37) | def from_user_input(cls, project_state: "ProjectState", question: str,... method find_user_inputs (line 63) | async def find_user_inputs(session: AsyncSession, project_state, branc... method delete_orphans (line 75) | async def delete_orphans(cls, session: AsyncSession): FILE: core/db/session.py class SessionManager (line 10) | class SessionManager: method __init__ (line 21) | def __init__(self, config: DBConfig, args=None): method _on_connect (line 38) | def _on_connect(self, dbapi_connection, _): method start (line 49) | async def start(self) -> AsyncSession: method close (line 58) | async def close(self): method __aenter__ (line 69) | async def __aenter__(self) -> AsyncSession: method __aexit__ (line 72) | async def __aexit__(self, exc_type, exc_val, exc_tb): FILE: core/db/setup.py function _async_to_sync_db_scheme (line 12) | def _async_to_sync_db_scheme(url: str) -> str: function run_migrations (line 29) | def run_migrations(config: DBConfig): FILE: core/db/v0importer.py class ImporterStateManager (line 18) | class ImporterStateManager(StateManager): method init_file_system (line 19) | async def init_file_system(self, load_existing: bool) -> MemoryVFS: class LegacyDatabaseImporter (line 30) | class LegacyDatabaseImporter: method __init__ (line 31) | def __init__(self, session_manager: SessionManager, dbpath: str): method import_database (line 40) | async def import_database(self): method load_legacy_database (line 49) | async def load_legacy_database(self): method verify_schema (line 67) | async def verify_schema(self) -> bool: method get_apps (line 75) | async def get_apps(self) -> dict[str, str]: method get_app_info (line 83) | async def get_app_info(self, app_id: str) -> dict: method get_task_info (line 113) | async def get_task_info(self, dev_step_id, prompt_data_json: str, llm_... method get_task_files (line 132) | async def get_task_files(self, dev_step_id: int): method save_to_new_database (line 157) | async def save_to_new_database(self, info: dict) -> int: method save_app (line 178) | async def save_app(self, app_id: str, app_info: dict): method save_latest_task (line 207) | async def save_latest_task(self, task: dict): method save_task_files (line 265) | async def save_task_files(self, files: dict): FILE: core/disk/ignore.py class IgnoreMatcher (line 6) | class IgnoreMatcher: method __init__ (line 12) | def __init__( method ignore (line 35) | def ignore(self, path: str) -> bool: method _is_in_ignore_list (line 57) | def _is_in_ignore_list(self, path: str) -> bool: method _is_large_file (line 72) | def _is_large_file(self, full_path: str) -> bool: method _is_binary (line 97) | def _is_binary(self, full_path: str) -> bool: FILE: core/disk/vfs.py class VirtualFileSystem (line 12) | class VirtualFileSystem: method save (line 13) | def save(self, path: str, content: str): method read (line 22) | def read(self, path: str) -> str: method remove (line 31) | def remove(self, path: str): method get_full_path (line 42) | def get_full_path(self, path: str) -> str: method _filter_by_prefix (line 56) | def _filter_by_prefix(self, file_list: list[str], prefix: str) -> list... method _get_file_list (line 62) | def _get_file_list(self) -> list[str]: method list (line 65) | def list(self, prefix: str = None) -> list[str]: method hash (line 79) | def hash(self, path: str) -> str: method hash_string (line 84) | def hash_string(content: str) -> str: class MemoryVFS (line 88) | class MemoryVFS(VirtualFileSystem): method __init__ (line 91) | def __init__(self): method save (line 94) | def save(self, path: str, content: str): method read (line 97) | def read(self, path: str) -> str: method remove (line 103) | def remove(self, path: str): method get_full_path (line 107) | def get_full_path(self, path: str) -> str: method _get_file_list (line 111) | def _get_file_list(self) -> list[str]: class LocalDiskVFS (line 115) | class LocalDiskVFS(VirtualFileSystem): method __init__ (line 116) | def __init__( method get_full_path (line 138) | def get_full_path(self, path: str) -> str: method save (line 141) | def save(self, path: str, content: str): method read (line 148) | def read(self, path: str) -> str: method remove (line 157) | def remove(self, path: str): method _get_file_list (line 169) | def _get_file_list(self) -> list[str]: FILE: core/llm/anthropic_client.py class CustomAssertionError (line 22) | class CustomAssertionError(Exception): class AnthropicClient (line 26) | class AnthropicClient(BaseLLMClient): method _init_client (line 29) | def _init_client(self): method _adapt_messages (line 41) | def _adapt_messages(self, convo: Convo) -> list[dict[str, str]]: method _make_request (line 68) | async def _make_request( method rate_limit_sleep (line 124) | def rate_limit_sleep(self, err: RateLimitError) -> Optional[datetime.t... FILE: core/llm/azure_client.py class AzureClient (line 11) | class AzureClient(OpenAIClient): method _init_client (line 15) | def _init_client(self): FILE: core/llm/base.py class LLMError (line 25) | class LLMError(str, Enum): class APIError (line 31) | class APIError(Exception): method __init__ (line 32) | def __init__(self, message: str): class BaseLLMClient (line 36) | class BaseLLMClient: method __init__ (line 55) | def __init__( method _init_client (line 77) | def _init_client(self): method _make_request (line 80) | async def _make_request( method _adapt_messages (line 98) | async def _adapt_messages(self, convo: Convo) -> list[dict[str, str]]: method __call__ (line 124) | async def __call__( method for_provider (line 416) | def for_provider(provider: LLMProvider) -> type["BaseLLMClient"]: method rate_limit_sleep (line 442) | def rate_limit_sleep(self, err: Exception) -> Optional[datetime.timede... FILE: core/llm/convo.py class Convo (line 5) | class Convo: method __init__ (line 18) | def __init__(self, content: Optional[str] = None): method _dedent (line 31) | def _dedent(text: str) -> str: method add (line 46) | def add(self, role: str, content: str, name: Optional[str] = None) -> ... method system (line 75) | def system(self, content: str, name: Optional[str] = None) -> "Convo": method user (line 88) | def user(self, content: str, name: Optional[str] = None) -> "Convo": method assistant (line 98) | def assistant(self, content: str, name: Optional[str] = None) -> "Convo": method function (line 108) | def function(self, content: str, name: Optional[str] = None) -> "Convo": method fork (line 118) | def fork(self) -> "Convo": method after (line 133) | def after(self, parent: "Convo") -> "Convo": method last (line 150) | def last(self) -> Optional[dict[str, str]]: method __iter__ (line 158) | def __iter__(self) -> Iterator[dict[str, str]]: method __repr__ (line 166) | def __repr__(self) -> str: FILE: core/llm/groq_client.py class GroqClient (line 17) | class GroqClient(BaseLLMClient): method _init_client (line 20) | def _init_client(self): method _make_request (line 31) | async def _make_request( method rate_limit_sleep (line 77) | def rate_limit_sleep(self, err: RateLimitError) -> Optional[datetime.t... FILE: core/llm/openai_client.py class OpenAIClient (line 18) | class OpenAIClient(BaseLLMClient): method _init_client (line 22) | def _init_client(self): method _make_request (line 33) | async def _make_request( method rate_limit_sleep (line 89) | def rate_limit_sleep(self, err: RateLimitError) -> Optional[datetime.t... FILE: core/llm/parser.py class CodeBlock (line 9) | class CodeBlock(BaseModel): class ParsedBlocks (line 14) | class ParsedBlocks(BaseModel): class DescriptiveCodeBlockParser (line 19) | class DescriptiveCodeBlockParser: method __init__ (line 40) | def __init__(self): method __call__ (line 43) | def __call__(self, text: str) -> ParsedBlocks: class MultiCodeBlockParser (line 60) | class MultiCodeBlockParser: method __init__ (line 88) | def __init__(self): method __call__ (line 91) | def __call__(self, text: str) -> list[str]: class CodeBlockParser (line 98) | class CodeBlockParser(MultiCodeBlockParser): method __call__ (line 114) | def __call__(self, text: str) -> str: class OptionalCodeBlockParser (line 123) | class OptionalCodeBlockParser: method __call__ (line 124) | def __call__(self, text: str) -> str: class JSONParser (line 136) | class JSONParser: method __init__ (line 137) | def __init__(self, spec: Optional[BaseModel] = None, strict: bool = Tr... method schema (line 143) | def schema(self): method errors_to_markdown (line 147) | def errors_to_markdown(errors: list) -> str: method __call__ (line 156) | def __call__(self, text: str) -> Union[BaseModel, dict, None]: class EnumParser (line 199) | class EnumParser: method __init__ (line 200) | def __init__(self, spec: Enum, ignore_case: bool = True): method __call__ (line 204) | def __call__(self, text: str) -> Enum: class StringParser (line 215) | class StringParser: method __call__ (line 216) | def __call__(self, text: str) -> str: FILE: core/llm/prompt.py class FormatTemplate (line 7) | class FormatTemplate: method __call__ (line 8) | def __call__(self, template: str, **kwargs: dict[str, Any]) -> str: class BaseJinjaTemplate (line 12) | class BaseJinjaTemplate: method __init__ (line 13) | def __init__(self, loader: Optional[BaseLoader]): class JinjaStringTemplate (line 24) | class JinjaStringTemplate(BaseJinjaTemplate): method __init__ (line 25) | def __init__(self): method __call__ (line 28) | def __call__(self, template: str, **kwargs: dict[str, Any]) -> str: class JinjaFileTemplate (line 33) | class JinjaFileTemplate(BaseJinjaTemplate): method __init__ (line 34) | def __init__(self, template_dirs: list[str]): method __call__ (line 40) | def __call__(self, template: str, **kwargs: dict[str, Any]) -> str: FILE: core/llm/relace_client.py class RelaceClient (line 14) | class RelaceClient(BaseLLMClient): method _init_client (line 17) | def _init_client(self): method _make_request (line 24) | async def _make_request( FILE: core/llm/request_log.py class LLMRequestStatus (line 10) | class LLMRequestStatus(str, Enum): class LLMRequestLog (line 15) | class LLMRequestLog(BaseModel): FILE: core/log/__init__.py class LineCountLimitedFileHandler (line 9) | class LineCountLimitedFileHandler(FileHandler): method __init__ (line 15) | def __init__(self, filename, max_lines=LOGS_LINE_LIMIT, mode="a", enco... method _load_existing_lines (line 30) | def _load_existing_lines(self): method emit (line 45) | def emit(self, record): function setup (line 65) | def setup(config: LogConfig, force: bool = False): function get_logger (line 102) | def get_logger(name) -> Logger: FILE: core/proc/exec_log.py class ExecLog (line 7) | class ExecLog(BaseModel): FILE: core/proc/process_manager.py class LocalProcess (line 25) | class LocalProcess: method __hash__ (line 35) | def __hash__(self) -> int: method start (line 39) | async def start( method wait (line 64) | async def wait(self, timeout: Optional[float] = None) -> int: method _nonblock_read (line 79) | async def _nonblock_read(reader: asyncio.StreamReader, timeout: float)... method read_output (line 99) | async def read_output(self, timeout: float = NONBLOCK_READ_TIMEOUT) ->... method _terminate_process_tree (line 106) | async def _terminate_process_tree(self, signal: int): method terminate (line 121) | async def terminate(self, kill: bool = True): method is_running (line 129) | def is_running(self) -> bool: method pid (line 136) | def pid(self) -> int: class ProcessManager (line 140) | class ProcessManager: method __init__ (line 141) | def __init__( method stop_watcher (line 159) | async def stop_watcher(self): method watcher (line 171) | async def watcher(self): method start_process (line 202) | async def start_process( method run_command (line 218) | async def run_command( method list_running_processes (line 268) | def list_running_processes(self): method terminate_process (line 271) | async def terminate_process(self, process_id: UUID) -> tuple[str, str]: FILE: core/state/state_manager.py class StateManager (line 47) | class StateManager: method __init__ (line 60) | def __init__(self, session_manager: SessionManager, ui: Optional[UIBas... method db_blocker (line 84) | async def db_blocker(self): method list_projects (line 94) | async def list_projects(self) -> list[Row]: method get_referencing_files (line 101) | async def get_referencing_files(self, project_state, file_content: str... method list_projects_with_branches_states (line 106) | async def list_projects_with_branches_states(self) -> list[Project]: method get_project_states (line 113) | async def get_project_states(self, project_id: Optional[UUID], branch_... method get_branches_for_project_id (line 116) | async def get_branches_for_project_id(self, project_id: UUID) -> list[... method get_project_state_for_redo_task (line 119) | async def get_project_state_for_redo_task(self, project_state: Project... method get_project_state_by_id (line 122) | async def get_project_state_by_id(self, state_id: UUID) -> Optional[Pr... method get_all_epics_and_tasks (line 125) | async def get_all_epics_and_tasks(self, branch_id: UUID) -> list: method find_user_input (line 128) | async def find_user_input(self, project_state, branch_id) -> Optional[... method get_file_for_project (line 131) | async def get_file_for_project(self, state_id: UUID, path: str): method get_chat_history (line 134) | async def get_chat_history(self, convo_id) -> Optional[list["ChatMessa... method get_project_state_for_convo_id (line 137) | async def get_project_state_for_convo_id(self, convo_id) -> Optional["... method get_task_conversation_project_states (line 140) | async def get_task_conversation_project_states( method get_project_states_in_between (line 151) | async def get_project_states_in_between( method get_fe_states (line 162) | async def get_fe_states(self, limit: Optional[int] = None) -> Optional... method get_be_back_logs (line 165) | async def get_be_back_logs(self): method create_project (line 172) | async def create_project( method delete_project (line 248) | async def delete_project(self, project_id: UUID) -> bool: method update_specification (line 261) | async def update_specification(self, specification: Specification) -> ... method load_project (line 272) | async def load_project( method commit_with_retry (line 418) | async def commit_with_retry(self): method commit (line 433) | async def commit(self) -> ProjectState: method rollback (line 480) | async def rollback(self): method log_llm_request (line 491) | async def log_llm_request(self, request_log: LLMRequestLog, agent: Opt... method log_user_input (line 524) | async def log_user_input(self, question: str, response: UserInputData): method log_command_run (line 539) | async def log_command_run(self, exec_log: ExecLogData): method log_event (line 553) | async def log_event(self, type: str, **kwargs): method log_task_completed (line 569) | async def log_task_completed(self): method get_file_by_path (line 580) | async def get_file_by_path(self, path: str) -> Optional[File]: method save_file (line 589) | async def save_file( method init_file_system (line 628) | async def init_file_system(self, load_existing: bool) -> VirtualFileSy... method get_full_project_root (line 667) | def get_full_project_root(self) -> str: method get_full_parent_project_root (line 679) | def get_full_parent_project_root(self) -> str: method get_project_info (line 686) | def get_project_info(self) -> dict: method import_files (line 703) | async def import_files(self) -> tuple[list[File], list[File]]: method restore_files (line 740) | async def restore_files(self) -> list[File]: method get_modified_files (line 762) | async def get_modified_files(self) -> list[str]: method get_modified_files_with_content (line 786) | async def get_modified_files_with_content(self) -> list[dict]: method workspace_is_empty (line 832) | def workspace_is_empty(self) -> bool: method get_implemented_pages (line 840) | def get_implemented_pages(self) -> list[str]: method update_implemented_pages_and_apis (line 850) | async def update_implemented_pages_and_apis(self): method update_utility_functions (line 876) | async def update_utility_functions(self, utility_function: dict): method get_apis (line 908) | async def get_apis(self) -> list[dict]: method find_backend_implementation (line 950) | async def find_backend_implementation(self, endpoint_line: str) -> dict: method update_apis (line 988) | async def update_apis(self, files_with_implemented_apis: list[dict] = ... method get_input_required (line 1014) | def get_input_required(content: str, file_path: str) -> list[int]: method update_access_token (line 1033) | def update_access_token(self, access_token: str): method get_access_token (line 1039) | def get_access_token(self) -> Optional[str]: FILE: core/telemetry/__init__.py class Telemetry (line 22) | class Telemetry: method __init__ (line 49) | def __init__(self): method clear_data (line 63) | def clear_data(self): method clear_counters (line 113) | def clear_counters(self): method set (line 166) | def set(self, name: str, value: Any): method inc (line 181) | def inc(self, name: str, value: int = 1): method start (line 196) | def start(self): method stop (line 203) | def stop(self): method record_crash (line 214) | def record_crash( method record_llm_request (line 275) | def record_llm_request( method calculate_statistics (line 300) | def calculate_statistics(self): method send (line 322) | async def send(self, event: str = "pythagora-core-telemetry"): method get_project_stats (line 356) | def get_project_stats(self) -> dict: method trace_code_event (line 363) | async def trace_code_event(self, name: str, data: dict): method trace_loop (line 391) | async def trace_loop(self, name: str, task_with_loop: dict): FILE: core/templates/base.py class NoOptions (line 19) | class NoOptions(BaseModel): class Config (line 24) | class Config: class BaseProjectTemplate (line 30) | class BaseProjectTemplate: method __init__ (line 42) | def __init__( method filter (line 65) | def filter(self, path: str) -> Optional[str]: method apply (line 81) | async def apply(self) -> Optional[str]: method install_hook_template (line 123) | async def install_hook_template(self) -> Any: method get_summary (line 132) | def get_summary(self): method install_hook (line 141) | async def install_hook(self): method options_dict (line 148) | def options_dict(self) -> dict[str, Any]: FILE: core/templates/javascript_react.py class JavascriptReactProjectTemplate (line 4) | class JavascriptReactProjectTemplate(BaseProjectTemplate): method install_hook (line 34) | async def install_hook(self): FILE: core/templates/node_express_mongoose.py class NodeExpressMongooseProjectTemplate (line 4) | class NodeExpressMongooseProjectTemplate(BaseProjectTemplate): method install_hook (line 40) | async def install_hook(self): FILE: core/templates/react_express.py class DatabaseType (line 13) | class DatabaseType(str, Enum): class TemplateOptions (line 19) | class TemplateOptions(BaseModel): class ReactExpressProjectTemplate (line 35) | class ReactExpressProjectTemplate(BaseProjectTemplate): method install_hook (line 84) | async def install_hook(self): method filter (line 90) | def filter(self, path: str) -> Optional[str]: FILE: core/templates/registry.py class ProjectTemplateEnum (line 15) | class ProjectTemplateEnum(str, Enum): FILE: core/templates/render.py function escape_string (line 12) | def escape_string(str: str) -> str: class Renderer (line 22) | class Renderer: method __init__ (line 44) | def __init__(self, template_dir: str): method render_template (line 56) | def render_template(self, template: str, context: Any) -> str: method render_tree (line 71) | def render_tree(self, root: str, context: Any, full_root_dir: str, fil... FILE: core/templates/tree/add_raw_tags.py function add_raw_tags_to_file (line 5) | def add_raw_tags_to_file(file_path): function process_directory (line 30) | def process_directory(directory): FILE: core/templates/tree/javascript_react/src/App.jsx function App (line 3) | function App() { FILE: core/templates/tree/node_express_mongoose/services/llm.js constant MAX_RETRIES (line 16) | const MAX_RETRIES = 3; constant RETRY_DELAY (line 17) | const RETRY_DELAY = 1000; function sleep (line 19) | async function sleep(ms) { function sendRequestToOpenAI (line 23) | async function sendRequestToOpenAI(model, message) { function sendRequestToAnthropic (line 40) | async function sendRequestToAnthropic(model, message) { function sendLLMRequest (line 59) | async function sendLLMRequest(provider, model, message) { FILE: core/templates/tree/react_express/api/services/userService.js class UserService (line 11) | class UserService { method list (line 12) | static async list() { method get (line 25) | static async get(id) { method getByEmail (line 44) | static async getByEmail(email) { method update (line 63) | static async update(id, data) { method delete (line 79) | static async delete(id) { method authenticateWithPassword (line 94) | static async authenticateWithPassword(email, password) { method authenticateWithToken (line 129) | static async authenticateWithToken(token) { method createUser (line 147) | static async createUser({ email, password, name = '' }) { method setPassword (line 184) | static async setPassword(user, password) { method regenerateToken (line 208) | static async regenerateToken(user) { FILE: core/templates/tree/react_express/api/utils/log.js constant DEFAULT_LOG_LEVEL (line 3) | const DEFAULT_LOG_LEVEL = process.env.NODE_ENV === "production" ? "info"... FILE: core/templates/tree/react_express/ui/components/ui/alert.jsx function AlertDestructive (line 4) | function AlertDestructive({ title, description }) { FILE: core/templates/tree/react_express/ui/lib/utils.js function cn (line 4) | function cn(...inputs) { FILE: core/templates/tree/react_express/ui/main.jsx function PageNotFound (line 26) | function PageNotFound() { FILE: core/templates/tree/react_express/ui/pages/Home.jsx function Home (line 3) | function Home() { FILE: core/templates/tree/react_express/ui/pages/Login.jsx function Login (line 23) | function Login() { FILE: core/templates/tree/react_express/ui/pages/Register.jsx function Register (line 16) | function Register() { FILE: core/templates/tree/vite_react/client/src/App.tsx function App (line 13) | function App() { FILE: core/templates/tree/vite_react/client/src/api/api.ts constant API_KEY (line 5) | const API_KEY = import.meta.env.VITE_API_KEY; constant EXTERNAL_API_URL (line 9) | const EXTERNAL_API_URL = import.meta.env.VITE_EXTERNAL_API_URL; FILE: core/templates/tree/vite_react/client/src/components/Footer.tsx function Footer (line 2) | function Footer() { FILE: core/templates/tree/vite_react/client/src/components/Header.tsx function Header (line 8) | function Header() { FILE: core/templates/tree/vite_react/client/src/components/Layout.tsx function Layout (line 5) | function Layout() { FILE: core/templates/tree/vite_react/client/src/components/ProtectedRoute.tsx function ProtectedRoute (line 5) | function ProtectedRoute({ children }: { children: React.ReactNode }) { FILE: core/templates/tree/vite_react/client/src/components/ui/badge.tsx type BadgeProps (line 27) | interface BadgeProps function Badge (line 31) | function Badge({ className, variant, ...props }: BadgeProps) { FILE: core/templates/tree/vite_react/client/src/components/ui/button.tsx type ButtonProps (line 37) | interface ButtonProps FILE: core/templates/tree/vite_react/client/src/components/ui/calendar.tsx type CalendarProps (line 9) | type CalendarProps = React.ComponentProps function Calendar (line 11) | function Calendar({ FILE: core/templates/tree/vite_react/client/src/components/ui/carousel.tsx type CarouselApi (line 11) | type CarouselApi = UseEmblaCarouselType[1] type UseCarouselParameters (line 12) | type UseCarouselParameters = Parameters type CarouselOptions (line 13) | type CarouselOptions = UseCarouselParameters[0] type CarouselPlugin (line 14) | type CarouselPlugin = UseCarouselParameters[1] type CarouselProps (line 16) | type CarouselProps = { type CarouselContextProps (line 23) | type CarouselContextProps = { function useCarousel (line 34) | function useCarousel() { FILE: core/templates/tree/vite_react/client/src/components/ui/chart.tsx constant THEMES (line 10) | const THEMES = { light: "", dark: ".dark" } as const type ChartConfig (line 12) | type ChartConfig = { type ChartContextProps (line 22) | type ChartContextProps = { function useChart (line 28) | function useChart() { function getPayloadConfigFromPayload (line 321) | function getPayloadConfigFromPayload( FILE: core/templates/tree/vite_react/client/src/components/ui/form.tsx type FormFieldContextValue (line 21) | type FormFieldContextValue< type FormItemContextValue (line 68) | type FormItemContextValue = { FILE: core/templates/tree/vite_react/client/src/components/ui/pagination.tsx type PaginationLinkProps (line 38) | type PaginationLinkProps = { FILE: core/templates/tree/vite_react/client/src/components/ui/sheet.tsx type SheetContentProps (line 53) | interface SheetContentProps FILE: core/templates/tree/vite_react/client/src/components/ui/sidebar.tsx constant SIDEBAR_COOKIE_NAME (line 21) | const SIDEBAR_COOKIE_NAME = "sidebar:state" constant SIDEBAR_COOKIE_MAX_AGE (line 22) | const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7 constant SIDEBAR_WIDTH (line 23) | const SIDEBAR_WIDTH = "16rem" constant SIDEBAR_WIDTH_MOBILE (line 24) | const SIDEBAR_WIDTH_MOBILE = "18rem" constant SIDEBAR_WIDTH_ICON (line 25) | const SIDEBAR_WIDTH_ICON = "3rem" constant SIDEBAR_KEYBOARD_SHORTCUT (line 26) | const SIDEBAR_KEYBOARD_SHORTCUT = "b" type SidebarContext (line 28) | type SidebarContext = { function useSidebar (line 40) | function useSidebar() { FILE: core/templates/tree/vite_react/client/src/components/ui/skeleton.tsx function Skeleton (line 4) | function Skeleton({ FILE: core/templates/tree/vite_react/client/src/components/ui/sonner.tsx type ToasterProps (line 7) | type ToasterProps = React.ComponentProps FILE: core/templates/tree/vite_react/client/src/components/ui/theme-provider.tsx type Theme (line 3) | type Theme = "dark" | "light" | "system" type ThemeProviderProps (line 5) | type ThemeProviderProps = { type ThemeProviderState (line 11) | type ThemeProviderState = { function ThemeProvider (line 23) | function ThemeProvider({ FILE: core/templates/tree/vite_react/client/src/components/ui/theme-toggle.tsx function ThemeToggle (line 7) | function ThemeToggle() { FILE: core/templates/tree/vite_react/client/src/components/ui/toast.tsx type ToastProps (line 142) | type ToastProps = React.ComponentPropsWithoutRef type ToastActionElement (line 144) | type ToastActionElement = React.ReactElement FILE: core/templates/tree/vite_react/client/src/components/ui/toaster.tsx function Toaster (line 12) | function Toaster() { FILE: core/templates/tree/vite_react/client/src/contexts/AuthContext.tsx type AuthContextType (line 6) | type AuthContextType = { function AuthProvider (line 15) | function AuthProvider({ children }: { children: ReactNode }) { function useAuth (line 63) | function useAuth() { FILE: core/templates/tree/vite_react/client/src/hooks/useMobile.tsx constant MOBILE_BREAKPOINT (line 3) | const MOBILE_BREAKPOINT = 768 function useIsMobile (line 5) | function useIsMobile() { FILE: core/templates/tree/vite_react/client/src/hooks/useToast.ts constant TOAST_LIMIT (line 9) | const TOAST_LIMIT = 1 type ToasterToast (line 11) | type ToasterToast = ToastProps & { function genId (line 27) | function genId() { type ActionType (line 32) | type ActionType = typeof actionTypes type Action (line 34) | type Action = type State (line 52) | interface State { function dispatch (line 133) | function dispatch(action: Action) { type Toast (line 140) | type Toast = Omit function toast (line 142) | function toast({ ...props }: Toast) { function useToast (line 173) | function useToast() { FILE: core/templates/tree/vite_react/client/src/lib/utils.ts function cn (line 5) | function cn(...inputs: ClassValue[]) { FILE: core/templates/tree/vite_react/client/src/pages/BlankPage.tsx function BlankPage (line 7) | function BlankPage() { FILE: core/templates/tree/vite_react/client/src/pages/Login.tsx type LoginForm (line 24) | type LoginForm = { function Login (line 29) | function Login() { FILE: core/templates/tree/vite_react/client/src/pages/Register.tsx type RegisterForm (line 24) | type RegisterForm = { function Register (line 29) | function Register() { FILE: core/templates/tree/vite_react/server/services/llmService.js constant MAX_RETRIES (line 16) | const MAX_RETRIES = 3; constant RETRY_DELAY (line 17) | const RETRY_DELAY = 1000; function sleep (line 19) | async function sleep(ms) { function sendRequestToOpenAI (line 23) | async function sendRequestToOpenAI(model, message) { function sendRequestToAnthropic (line 40) | async function sendRequestToAnthropic(model, message) { function sendLLMRequest (line 59) | async function sendLLMRequest(provider, model, message) { FILE: core/templates/tree/vite_react/server/services/userService.js class UserService (line 7) | class UserService { method list (line 8) | static async list() { method get (line 16) | static async get(id) { method getByEmail (line 24) | static async getByEmail(email) { method update (line 32) | static async update(id, data) { method delete (line 40) | static async delete(id) { method authenticateWithPassword (line 49) | static async authenticateWithPassword(email, password) { method create (line 68) | static async create({ email, password, name = '' }) { method setPassword (line 91) | static async setPassword(user, password) { FILE: core/templates/tree/vite_react_swagger/client/src/App.tsx function App (line 13) | function App() { FILE: core/templates/tree/vite_react_swagger/client/src/api/api.ts constant API_KEY (line 5) | const API_KEY = import.meta.env.VITE_API_KEY; constant EXTERNAL_API_URL (line 9) | const EXTERNAL_API_URL = import.meta.env.VITE_EXTERNAL_API_URL; FILE: core/templates/tree/vite_react_swagger/client/src/components/Footer.tsx function Footer (line 2) | function Footer() { FILE: core/templates/tree/vite_react_swagger/client/src/components/Header.tsx function Header (line 8) | function Header() { FILE: core/templates/tree/vite_react_swagger/client/src/components/Layout.tsx function Layout (line 5) | function Layout() { FILE: core/templates/tree/vite_react_swagger/client/src/components/ProtectedRoute.tsx function ProtectedRoute (line 5) | function ProtectedRoute({ children }: { children: React.ReactNode }) { FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/badge.tsx type BadgeProps (line 27) | interface BadgeProps function Badge (line 31) | function Badge({ className, variant, ...props }: BadgeProps) { FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/button.tsx type ButtonProps (line 37) | interface ButtonProps FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/calendar.tsx type CalendarProps (line 9) | type CalendarProps = React.ComponentProps function Calendar (line 11) | function Calendar({ FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/carousel.tsx type CarouselApi (line 11) | type CarouselApi = UseEmblaCarouselType[1] type UseCarouselParameters (line 12) | type UseCarouselParameters = Parameters type CarouselOptions (line 13) | type CarouselOptions = UseCarouselParameters[0] type CarouselPlugin (line 14) | type CarouselPlugin = UseCarouselParameters[1] type CarouselProps (line 16) | type CarouselProps = { type CarouselContextProps (line 23) | type CarouselContextProps = { function useCarousel (line 34) | function useCarousel() { FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/chart.tsx constant THEMES (line 10) | const THEMES = { light: "", dark: ".dark" } as const type ChartConfig (line 12) | type ChartConfig = { type ChartContextProps (line 22) | type ChartContextProps = { function useChart (line 28) | function useChart() { function getPayloadConfigFromPayload (line 321) | function getPayloadConfigFromPayload( FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/form.tsx type FormFieldContextValue (line 21) | type FormFieldContextValue< type FormItemContextValue (line 68) | type FormItemContextValue = { FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/pagination.tsx type PaginationLinkProps (line 38) | type PaginationLinkProps = { FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/sheet.tsx type SheetContentProps (line 53) | interface SheetContentProps FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/sidebar.tsx constant SIDEBAR_COOKIE_NAME (line 21) | const SIDEBAR_COOKIE_NAME = "sidebar:state" constant SIDEBAR_COOKIE_MAX_AGE (line 22) | const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7 constant SIDEBAR_WIDTH (line 23) | const SIDEBAR_WIDTH = "16rem" constant SIDEBAR_WIDTH_MOBILE (line 24) | const SIDEBAR_WIDTH_MOBILE = "18rem" constant SIDEBAR_WIDTH_ICON (line 25) | const SIDEBAR_WIDTH_ICON = "3rem" constant SIDEBAR_KEYBOARD_SHORTCUT (line 26) | const SIDEBAR_KEYBOARD_SHORTCUT = "b" type SidebarContext (line 28) | type SidebarContext = { function useSidebar (line 40) | function useSidebar() { FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/skeleton.tsx function Skeleton (line 4) | function Skeleton({ FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/sonner.tsx type ToasterProps (line 7) | type ToasterProps = React.ComponentProps FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/theme-provider.tsx type Theme (line 3) | type Theme = "dark" | "light" | "system" type ThemeProviderProps (line 5) | type ThemeProviderProps = { type ThemeProviderState (line 11) | type ThemeProviderState = { function ThemeProvider (line 23) | function ThemeProvider({ FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/theme-toggle.tsx function ThemeToggle (line 7) | function ThemeToggle() { FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/toast.tsx type ToastProps (line 142) | type ToastProps = React.ComponentPropsWithoutRef type ToastActionElement (line 144) | type ToastActionElement = React.ReactElement FILE: core/templates/tree/vite_react_swagger/client/src/components/ui/toaster.tsx function Toaster (line 12) | function Toaster() { FILE: core/templates/tree/vite_react_swagger/client/src/contexts/AuthContext.tsx type AuthContextType (line 6) | type AuthContextType = { function AuthProvider (line 15) | function AuthProvider({ children }: { children: ReactNode }) { function useAuth (line 63) | function useAuth() { FILE: core/templates/tree/vite_react_swagger/client/src/hooks/useMobile.tsx constant MOBILE_BREAKPOINT (line 3) | const MOBILE_BREAKPOINT = 768 function useIsMobile (line 5) | function useIsMobile() { FILE: core/templates/tree/vite_react_swagger/client/src/hooks/useToast.ts constant TOAST_LIMIT (line 9) | const TOAST_LIMIT = 1 type ToasterToast (line 11) | type ToasterToast = ToastProps & { function genId (line 27) | function genId() { type ActionType (line 32) | type ActionType = typeof actionTypes type Action (line 34) | type Action = type State (line 52) | interface State { function dispatch (line 133) | function dispatch(action: Action) { type Toast (line 140) | type Toast = Omit function toast (line 142) | function toast({ ...props }: Toast) { function useToast (line 173) | function useToast() { FILE: core/templates/tree/vite_react_swagger/client/src/lib/utils.ts function cn (line 5) | function cn(...inputs: ClassValue[]) { FILE: core/templates/tree/vite_react_swagger/client/src/pages/BlankPage.tsx function BlankPage (line 7) | function BlankPage() { FILE: core/templates/tree/vite_react_swagger/client/src/pages/Login.tsx type LoginForm (line 24) | type LoginForm = { function Login (line 29) | function Login() { FILE: core/templates/tree/vite_react_swagger/client/src/pages/Register.tsx type RegisterForm (line 24) | type RegisterForm = { function Register (line 29) | function Register() { FILE: core/templates/vite_react.py class ViteReactProjectTemplate (line 4) | class ViteReactProjectTemplate(BaseProjectTemplate): method install_hook (line 122) | async def install_hook(self): FILE: core/templates/vite_react_swagger.py class ViteReactSwaggerProjectTemplate (line 4) | class ViteReactSwaggerProjectTemplate(BaseProjectTemplate): method install_hook (line 107) | async def install_hook(self): FILE: core/ui/api_server.py function send_stream_chunk (line 33) | async def send_stream_chunk(writer: asyncio.StreamWriter, message_type, ... class IPCServer (line 43) | class IPCServer: method __init__ (line 48) | def __init__(self, host: str, port: int, state_manager: StateManager): method _setup_handlers (line 64) | def _setup_handlers(self): method start (line 80) | async def start(self) -> bool: method stop (line 99) | async def stop(self): method _handle_client (line 107) | async def _handle_client(self, reader: asyncio.StreamReader, writer: a... method _process_message (line 152) | async def _process_message(self, message: Message, writer: asyncio.Str... method _send_response (line 169) | async def _send_response(self, writer: asyncio.StreamWriter, message: ... method _add_to_chat_history (line 184) | async def _add_to_chat_history( method _send_streaming_response (line 246) | async def _send_streaming_response(self, writer: asyncio.StreamWriter,... method _send_error (line 356) | async def _send_error(self, writer: asyncio.StreamWriter, error_messag... method _handle_start_chat (line 367) | async def _handle_start_chat(self, message: Message, writer: asyncio.S... method _handle_get_chat_history (line 383) | async def _handle_get_chat_history(self, message: Message, writer: asy... method _handle_epics_and_tasks (line 410) | async def _handle_epics_and_tasks(self, message: Message, writer: asyn... method _handle_project_info (line 434) | async def _handle_project_info(self, message: Message, writer: asyncio... method _handle_knowledge_base (line 449) | async def _handle_knowledge_base(self, message: Message, writer: async... method _handle_project_specs (line 484) | async def _handle_project_specs(self, message: Message, writer: asynci... method _handle_current_task_status (line 511) | async def _handle_current_task_status(self, message: Message, writer: ... method _handle_add_new_task (line 540) | async def _handle_add_new_task(self, message: Message, writer: asyncio... method _handle_start_another_task (line 600) | async def _handle_start_another_task(self, message: Message, writer: a... method _handle_chat_message (line 639) | async def _handle_chat_message(self, message: Message, writer: asyncio... method _handle_task_convo (line 661) | async def _handle_task_convo(self, message: Message, writer: asyncio.S... method _handle_edit_specs (line 702) | async def _handle_edit_specs(self, message: Message, writer: asyncio.S... method _handle_file_diff (line 735) | async def _handle_file_diff(self, message: Message, writer: asyncio.St... FILE: core/ui/base.py class ProjectStage (line 7) | class ProjectStage(str, Enum): class UIClosedError (line 30) | class UIClosedError(Exception): class UserInterruptError (line 34) | class UserInterruptError(Exception): class UISource (line 38) | class UISource: method __init__ (line 52) | def __init__(self, display_name: str, type_name: str): method __str__ (line 62) | def __str__(self) -> str: class AgentSource (line 66) | class AgentSource(UISource): method __init__ (line 75) | def __init__(self, display_name: str, agent_type: str): class UserInput (line 85) | class UserInput(BaseModel): class UIBase (line 104) | class UIBase: method start (line 109) | async def start(self) -> bool: method stop (line 117) | async def stop(self): method send_stream_chunk (line 123) | async def send_stream_chunk( method send_user_input_history (line 141) | async def send_user_input_history( method send_message (line 158) | async def send_message( method send_key_expired (line 178) | async def send_key_expired(self, message: Optional[str] = None): method send_token_expired (line 184) | async def send_token_expired(self): method send_app_finished (line 190) | async def send_app_finished( method send_feature_finished (line 205) | async def send_feature_finished( method ask_question (line 220) | async def ask_question( method send_project_stage (line 264) | async def send_project_stage(self, data: dict): method send_epics_and_tasks (line 272) | async def send_epics_and_tasks( method send_task_progress (line 285) | async def send_task_progress( method send_step_progress (line 308) | async def send_step_progress( method send_modified_files (line 325) | async def send_modified_files( method send_data_about_logs (line 336) | async def send_data_about_logs( method send_run_command (line 347) | async def send_run_command(self, run_command: str): method send_app_link (line 355) | async def send_app_link(self, app_link: str): method open_editor (line 363) | async def open_editor(self, file: str, line: Optional[int] = None, wai... method send_project_info (line 372) | async def send_project_info(self, name: str, project_id: str, folder_n... method set_important_stream (line 383) | async def set_important_stream(self, important_stream: bool = True): method start_breakdown_stream (line 390) | async def start_breakdown_stream(self): method send_project_stats (line 396) | async def send_project_stats(self, stats: dict): method send_test_instructions (line 409) | async def send_test_instructions( method knowledge_base_update (line 421) | async def knowledge_base_update(self, knowledge_base: dict): method send_file_status (line 429) | async def send_file_status( method send_bug_hunter_status (line 442) | async def send_bug_hunter_status(self, status: str, num_cycles: int): method generate_diff (line 451) | async def generate_diff( method stop_app (line 474) | async def stop_app(self): method close_diff (line 480) | async def close_diff(self): method loading_finished (line 486) | async def loading_finished(self): method send_project_description (line 492) | async def send_project_description(self, state: dict): method send_features_list (line 500) | async def send_features_list(self, features: list[str]): method import_project (line 510) | async def import_project(self, project_dir: str): method send_back_logs (line 521) | async def send_back_logs( method send_fatal_error (line 536) | async def send_fatal_error( method send_front_logs_headers (line 545) | async def send_front_logs_headers( method clear_main_logs (line 562) | async def clear_main_logs(self): FILE: core/ui/console.py class PlainConsoleUI (line 11) | class PlainConsoleUI(UIBase): method start (line 16) | async def start(self) -> bool: method stop (line 20) | async def stop(self): method send_stream_chunk (line 23) | async def send_stream_chunk( method send_user_input_history (line 37) | async def send_user_input_history( method send_message (line 49) | async def send_message( method send_key_expired (line 63) | async def send_key_expired(self, message: Optional[str] = None): method send_token_expired (line 67) | async def send_token_expired(self): method send_app_finished (line 70) | async def send_app_finished( method send_feature_finished (line 78) | async def send_feature_finished( method ask_question (line 86) | async def ask_question( method send_project_stage (line 134) | async def send_project_stage(self, data: dict): method send_epics_and_tasks (line 137) | async def send_epics_and_tasks( method send_task_progress (line 144) | async def send_task_progress( method send_step_progress (line 156) | async def send_step_progress( method send_modified_files (line 165) | async def send_modified_files( method send_data_about_logs (line 171) | async def send_data_about_logs( method send_run_command (line 177) | async def send_run_command(self, run_command: str): method send_app_link (line 180) | async def send_app_link(self, app_link: str): method open_editor (line 183) | async def open_editor(self, file: str, line: Optional[int] = None, wai... method send_project_info (line 186) | async def send_project_info(self, name: str, project_id: str, folder_n... method send_project_stats (line 189) | async def send_project_stats(self, stats: dict): method send_test_instructions (line 192) | async def send_test_instructions( method knowledge_base_update (line 197) | async def knowledge_base_update(self, knowledge_base: dict): method send_file_status (line 200) | async def send_file_status( method send_bug_hunter_status (line 205) | async def send_bug_hunter_status(self, status: str, num_cycles: int): method generate_diff (line 208) | async def generate_diff( method stop_app (line 220) | async def stop_app(self): method close_diff (line 223) | async def close_diff(self): method loading_finished (line 226) | async def loading_finished(self): method send_project_description (line 229) | async def send_project_description(self, state: dict): method send_features_list (line 232) | async def send_features_list(self, features: list[str]): method import_project (line 235) | async def import_project(self, project_dir: str): method set_important_stream (line 238) | async def set_important_stream(self, important_stream: bool = True): method start_breakdown_stream (line 241) | async def start_breakdown_stream(self): method send_back_logs (line 244) | async def send_back_logs( method send_fatal_error (line 250) | async def send_fatal_error( method send_front_logs_headers (line 259) | async def send_front_logs_headers( method clear_main_logs (line 268) | async def clear_main_logs(self): FILE: core/ui/ipc_client.py class MessageType (line 21) | class MessageType(str, Enum): class Message (line 75) | class Message(BaseModel): method to_bytes (line 101) | def to_bytes(self) -> bytes: method from_bytes (line 108) | def from_bytes(self, data: bytes) -> "Message": class IPCClientUI (line 130) | class IPCClientUI(UIBase): method __init__ (line 135) | def __init__(self, config: LocalIPCConfig): method start (line 143) | async def start(self): method _send (line 156) | async def _send(self, type: MessageType, fake: Optional[bool] = False,... method _receive (line 174) | async def _receive(self) -> Message: method stop (line 203) | async def stop(self): method send_stream_chunk (line 219) | async def send_stream_chunk( method send_user_input_history (line 241) | async def send_user_input_history( method send_message (line 256) | async def send_message( method send_key_expired (line 278) | async def send_key_expired(self, message: Optional[str] = None): method send_token_expired (line 281) | async def send_token_expired(self): method send_app_finished (line 286) | async def send_app_finished( method send_feature_finished (line 301) | async def send_feature_finished( method ask_question (line 316) | async def ask_question( method send_project_stage (line 396) | async def send_project_stage(self, data: dict): method send_epics_and_tasks (line 399) | async def send_epics_and_tasks( method send_task_progress (line 412) | async def send_task_progress( method send_modified_files (line 437) | async def send_modified_files( method send_step_progress (line 446) | async def send_step_progress( method send_data_about_logs (line 465) | async def send_data_about_logs( method send_run_command (line 474) | async def send_run_command(self, run_command: str): method send_app_link (line 480) | async def send_app_link(self, app_link: str): method open_editor (line 486) | async def open_editor(self, file: str, line: Optional[int] = None, wai... method send_project_info (line 501) | async def send_project_info(self, name: str, project_id: str, folder_n... method set_important_stream (line 513) | async def set_important_stream(self, important_stream: bool = True): method start_breakdown_stream (line 519) | async def start_breakdown_stream(self): method send_project_stats (line 525) | async def send_project_stats(self, stats: dict): method send_test_instructions (line 531) | async def send_test_instructions( method knowledge_base_update (line 555) | async def knowledge_base_update(self, knowledge_base: dict): method send_file_status (line 565) | async def send_file_status( method send_bug_hunter_status (line 578) | async def send_bug_hunter_status(self, status: str, num_cycles: int): method generate_diff (line 587) | async def generate_diff( method stop_app (line 610) | async def stop_app(self): method close_diff (line 614) | async def close_diff(self): method loading_finished (line 618) | async def loading_finished(self): method send_project_description (line 622) | async def send_project_description(self, state: dict): method send_features_list (line 625) | async def send_features_list(self, features: list[str]): method import_project (line 628) | async def import_project(self, project_dir: str): method send_back_logs (line 631) | async def send_back_logs( method send_fatal_error (line 641) | async def send_fatal_error( method send_front_logs_headers (line 656) | async def send_front_logs_headers( method clear_main_logs (line 673) | async def clear_main_logs(self): method load_front_logs (line 678) | async def load_front_logs( FILE: core/ui/virtual.py class VirtualUI (line 9) | class VirtualUI(UIBase): method __init__ (line 14) | def __init__(self, inputs: list[dict[str, str]]): method start (line 17) | async def start(self) -> bool: method stop (line 21) | async def stop(self): method send_stream_chunk (line 24) | async def send_stream_chunk( method send_user_input_history (line 38) | async def send_user_input_history( method send_message (line 46) | async def send_message( method send_key_expired (line 59) | async def send_key_expired(self, message: Optional[str] = None): method send_token_expired (line 62) | async def send_token_expired(self): method send_app_finished (line 65) | async def send_app_finished( method send_feature_finished (line 73) | async def send_feature_finished( method ask_question (line 81) | async def ask_question( method send_project_stage (line 120) | async def send_project_stage(self, data: dict): method send_epics_and_tasks (line 123) | async def send_epics_and_tasks( method send_task_progress (line 130) | async def send_task_progress( method send_step_progress (line 142) | async def send_step_progress( method send_data_about_logs (line 151) | async def send_data_about_logs( method send_modified_files (line 157) | async def send_modified_files( method send_run_command (line 163) | async def send_run_command(self, run_command: str): method send_app_link (line 166) | async def send_app_link(self, app_link: str): method open_editor (line 169) | async def open_editor(self, file: str, line: Optional[int] = None, wai... method send_project_info (line 172) | async def send_project_info(self, name: str, project_id: str, folder_n... method set_important_stream (line 175) | async def set_important_stream(self, important_stream: bool = True): method start_breakdown_stream (line 178) | async def start_breakdown_stream(self): method send_project_stats (line 181) | async def send_project_stats(self, stats: dict): method send_test_instructions (line 184) | async def send_test_instructions(self, test_instructions: str, project... method knowledge_base_update (line 187) | async def knowledge_base_update(self, knowledge_base: dict): method send_file_status (line 190) | async def send_file_status(self, file_path: str, file_status: str, sou... method send_bug_hunter_status (line 193) | async def send_bug_hunter_status(self, status: str, num_cycles: int): method generate_diff (line 196) | async def generate_diff( method stop_app (line 207) | async def stop_app(self): method close_diff (line 210) | async def close_diff(self): method loading_finished (line 213) | async def loading_finished(self): method send_project_description (line 216) | async def send_project_description(self, state: dict): method send_features_list (line 219) | async def send_features_list(self, features: list[str]): method import_project (line 222) | async def import_project(self, project_dir: str): method send_back_logs (line 225) | async def send_back_logs( method send_fatal_error (line 231) | async def send_fatal_error( method send_front_logs_headers (line 240) | async def send_front_logs_headers( method clear_main_logs (line 249) | async def clear_main_logs(self): FILE: core/utils/text.py function trim_logs (line 6) | def trim_logs(logs: str) -> str: FILE: tests/agents/test_base.py class AgentUnderTest (line 9) | class AgentUnderTest(BaseAgent): function test_send_message (line 15) | async def test_send_message(): function test_stream_handler (line 30) | async def test_stream_handler(): function test_ask_question (line 42) | async def test_ask_question(): function test_get_llm (line 71) | async def test_get_llm(mock_BaseLLMClient): FILE: tests/agents/test_convo.py function test_init (line 8) | def test_init(): function test_fork (line 18) | def test_fork(): function test_require_schema (line 32) | def test_require_schema(): FILE: tests/agents/test_external_docs.py function test_stores_documentation_snippets_for_task (line 10) | async def test_stores_documentation_snippets_for_task(agentcontext): function test_continues_without_docs_for_invalid_docset (line 25) | async def test_continues_without_docs_for_invalid_docset(agentcontext): function test_continues_without_docs_if_api_is_down (line 40) | async def test_continues_without_docs_if_api_is_down(agentcontext): FILE: tests/agents/test_orchestrator.py function test_offline_changes_check_restores_if_workspace_empty (line 9) | async def test_offline_changes_check_restores_if_workspace_empty(): function test_offline_changes_check_imports_changes_from_disk (line 19) | async def test_offline_changes_check_imports_changes_from_disk(): function test_offline_changes_check_restores_changes_from_db (line 32) | async def test_offline_changes_check_restores_changes_from_db(): function test_import_if_new_files (line 44) | async def test_import_if_new_files(agentcontext): function test_import_if_modified_files (line 64) | async def test_import_if_modified_files(agentcontext): function test_import_if_deleted_files (line 85) | async def test_import_if_deleted_files(agentcontext): FILE: tests/agents/test_tech_lead.py function test_create_initial_epic (line 12) | async def test_create_initial_epic(agentcontext): function test_apply_project_template (line 35) | async def test_apply_project_template(agentcontext): function test_ask_for_feature (line 52) | async def test_ask_for_feature(agentcontext): function test_plan_epic (line 89) | async def test_plan_epic(agentcontext): FILE: tests/cli/test_cli.py function write_test_config (line 23) | def write_test_config(tmp_path): function test_parse_arguments (line 34) | def test_parse_arguments(mock_ArgumentParser): function test_parse_llm_endpoint (line 81) | def test_parse_llm_endpoint(value, expected): function test_parse_llm_key (line 98) | def test_parse_llm_key(value, expected): function test_load_config_not_found (line 108) | def test_load_config_not_found(mock_import_from_dotenv, tmp_path, capsys): function test_load_config_not_json (line 119) | def test_load_config_not_json(tmp_path, capsys): function test_load_config_defaults (line 130) | def test_load_config_defaults(tmp_path): function test_load_config_overridden (line 141) | def test_load_config_overridden(tmp_path): function test_show_default_config (line 164) | def test_show_default_config(capsys): function test_list_projects_json (line 173) | async def test_list_projects_json(mock_StateManager, capsys): function test_list_projects (line 204) | async def test_list_projects(mock_StateManager, capsys): function test_load_project (line 254) | async def test_load_project(args, kwargs, retval, should_succeed, capsys): function test_init (line 269) | def test_init(tmp_path): function test_main (line 298) | async def test_main(mock_Orchestrator, args, run_orchestrator, retval, t... function test_main_handles_crash (line 331) | async def test_main_handles_crash(mock_Orchestrator, tmp_path): FILE: tests/config/test_config.py function test_parse_config (line 40) | def test_parse_config(): function test_default_agent_llm_config (line 53) | def test_default_agent_llm_config(): function test_builtin_defaults (line 64) | def test_builtin_defaults(): function test_unsupported_provider (line 73) | def test_unsupported_provider(): function test_load_from_file_with_comments (line 97) | def test_load_from_file_with_comments(): function test_default_config (line 104) | def test_default_config(): function test_encodings (line 120) | def test_encodings(encoding, bom, tmp_path): FILE: tests/config/test_env_importer.py function test_convert_config (line 5) | def test_convert_config(): function test_convert_openai_config (line 31) | def test_convert_openai_config(): function test_convert_azure_config (line 45) | def test_convert_azure_config(): function test_convert_openrouter_config (line 57) | def test_convert_openrouter_config(): function test_convert_anthropic_config (line 69) | def test_convert_anthropic_config(): FILE: tests/config/test_version.py function test_get_package_version (line 8) | def test_get_package_version(): function test_get_git_version (line 16) | def test_get_git_version(): function test_get_version (line 24) | def test_get_version(_mock_get_package_version, _mock_get_git_commit): FILE: tests/conftest.py function disable_test_telemetry (line 15) | def disable_test_telemetry(monkeypatch): function testmanager (line 20) | async def testmanager(): function testdb (line 35) | async def testdb(testmanager): function agentcontext (line 47) | async def agentcontext(testmanager): FILE: tests/db/factories.py function create_project_state (line 4) | def create_project_state(project_name="Test Project", branch_name=Branch... FILE: tests/db/test_branch.py function test_get_by_id_requires_valid_uuid (line 11) | async def test_get_by_id_requires_valid_uuid(testdb): function test_get_by_id_no_match (line 17) | async def test_get_by_id_no_match(testdb): function test_get_by_id (line 24) | async def test_get_by_id(testdb): function test_get_last_state_no_steps (line 36) | async def test_get_last_state_no_steps(testdb): function test_get_last_state (line 47) | async def test_get_last_state(testdb): function test_get_last_state_no_session (line 63) | async def test_get_last_state_no_session(): FILE: tests/db/test_db.py function test_migrations (line 11) | def test_migrations(tmp_path): function test_select_empty (line 17) | async def test_select_empty(testdb): function test_create_select_project_branch_state (line 24) | async def test_create_select_project_branch_state(testdb): function test_deleting_project_state_clears_back_references (line 37) | async def test_deleting_project_state_clears_back_references(testdb): FILE: tests/db/test_project.py function test_get_by_id_requires_valid_uuid (line 16) | async def test_get_by_id_requires_valid_uuid(testdb): function test_get_by_id_no_match (line 22) | async def test_get_by_id_no_match(testdb): function test_get_by_id (line 29) | async def test_get_by_id(testdb): function test_delete_by_id (line 39) | async def test_delete_by_id(testdb): function test_get_branch_no_match (line 50) | async def test_get_branch_no_match(testdb): function test_get_branch (line 60) | async def test_get_branch(testdb): function test_get_branch_no_session (line 72) | async def test_get_branch_no_session(): function test_get_all_projects (line 80) | async def test_get_all_projects(testdb, capsys): function test_default_folder_name (line 135) | async def test_default_folder_name(testdb): function test_get_folder_from_project_name (line 154) | def test_get_folder_from_project_name(project_name, expected_folder_name): FILE: tests/db/test_project_state.py function test_get_by_id (line 11) | async def test_get_by_id(testdb): function test_get_last_state_no_session (line 22) | async def test_get_last_state_no_session(): function test_get_by_id_preloads_branch_project_files (line 31) | async def test_get_by_id_preloads_branch_project_files(testdb): function test_create_next_state_clones_files (line 51) | async def test_create_next_state_clones_files(testdb): function test_create_next_deep_copies_fields (line 68) | async def test_create_next_deep_copies_fields(testdb): function test_deleting_state_removes_child_objects (line 96) | async def test_deleting_state_removes_child_objects(testdb): function test_completing_unfinished_steps (line 123) | async def test_completing_unfinished_steps(testdb): function test_completing_unfinished_iterations (line 148) | async def test_completing_unfinished_iterations(testdb): function test_completing_unfinished_tasks (line 173) | async def test_completing_unfinished_tasks(testdb): function test_completing_unfinished_epics (line 199) | async def test_completing_unfinished_epics(testdb): FILE: tests/disk/test_ignore.py function test_ignore_paths (line 28) | def test_ignore_paths(_mock_open, _mock_isfile, path, expected): function test_ignore_large_files (line 52) | def test_ignore_large_files( function test_ignore_binary (line 67) | def test_ignore_binary(_mock_open, _mock_isfile): FILE: tests/disk/test_vfs.py function test_memory_vfs (line 7) | def test_memory_vfs(): function test_local_disk_vfs (line 31) | def test_local_disk_vfs(tmp_path): function test_local_disk_vfs_with_matcher (line 55) | def test_local_disk_vfs_with_matcher(tmp_path): FILE: tests/integration/llm/test_anthropic.py function test_incorrect_key (line 24) | async def test_incorrect_key(): function test_unknown_model (line 43) | async def test_unknown_model(): function test_anthropic_success (line 58) | async def test_anthropic_success(): function test_anthropic_json_mode (line 83) | async def test_anthropic_json_mode(): function test_context_too_large (line 106) | async def test_context_too_large(): FILE: tests/integration/llm/test_groq.py function test_incorrect_key (line 23) | async def test_incorrect_key(): function test_unknown_model (line 42) | async def test_unknown_model(): function test_groq_success (line 57) | async def test_groq_success(): function test_groq_json_mode (line 85) | async def test_groq_json_mode(): function test_context_too_large (line 104) | async def test_context_too_large(): FILE: tests/integration/llm/test_openai.py function test_incorrect_key (line 23) | async def test_incorrect_key(): function test_unknown_model (line 42) | async def test_unknown_model(): function test_openai_success (line 57) | async def test_openai_success(): function test_openai_json_mode (line 82) | async def test_openai_json_mode(): function test_context_too_large (line 101) | async def test_context_too_large(): FILE: tests/llm/test_convo.py function test_convo_constructor_without_content (line 6) | def test_convo_constructor_without_content(): function test_convo_constructor_with_content (line 11) | def test_convo_constructor_with_content(): function test_convo_constructor_with_whitespace_content (line 18) | def test_convo_constructor_with_whitespace_content(): function test_add_unknown_role_raises_value_error (line 25) | def test_add_unknown_role_raises_value_error(): function test_add_adds_message_with_role_and_content (line 32) | def test_add_adds_message_with_role_and_content(): function test_add_adds_message_with_role_content_and_name (line 38) | def test_add_adds_message_with_role_content_and_name(): function test_add_dedents_string_content (line 44) | def test_add_dedents_string_content(): function test_add_forwards_dict_content (line 50) | def test_add_forwards_dict_content(): function test_system_adds_system_message (line 56) | def test_system_adds_system_message(): function test_system_adds_system_message_with_name (line 62) | def test_system_adds_system_message_with_name(): function test_system_dedents_content (line 68) | def test_system_dedents_content(): function test_system_preserves_lines_in_content (line 74) | def test_system_preserves_lines_in_content(): function test_user_adds_user_message (line 80) | def test_user_adds_user_message(): function test_user_adds_user_message_with_name (line 86) | def test_user_adds_user_message_with_name(): function test_user_raises_error_if_content_is_empty_string (line 96) | def test_user_raises_error_if_content_is_empty_string(): function test_user_raises_error_if_content_is_none (line 102) | def test_user_raises_error_if_content_is_none(): function test_assistant_adds_correct_message (line 108) | def test_assistant_adds_correct_message(): function test_assistant_dedents_content (line 114) | def test_assistant_dedents_content(): function test_assistant_adds_name_if_provided (line 120) | def test_assistant_adds_name_if_provided(): function test_assistant_returns_self (line 126) | def test_assistant_returns_self(): function test_function_message_added_correctly (line 132) | def test_function_message_added_correctly(): function test_function_message_with_name_added_correctly (line 140) | def test_function_message_with_name_added_correctly(): function test_function_message_content_dedented (line 149) | def test_function_message_content_dedented(): function test_function_message_return_convo_object (line 157) | def test_function_message_return_convo_object(): function test_function_message_with_empty_content (line 163) | def test_function_message_with_empty_content(): function test_function_message_with_non_string_content (line 169) | def test_function_message_with_non_string_content(): function test_convo_fork (line 175) | def test_convo_fork(): function test_convo_fork_with_no_messages (line 187) | def test_convo_fork_with_no_messages(): function test_convo_fork_with_multiple_messages (line 197) | def test_convo_fork_with_multiple_messages(): function test_after_with_empty_convos (line 208) | def test_after_with_empty_convos(): function test_after_with_no_common_messages (line 215) | def test_after_with_no_common_messages(): function test_after_with_some_common_messages (line 224) | def test_after_with_some_common_messages(): function test_after_with_all_common_messages (line 233) | def test_after_with_all_common_messages(): function test_after_with_more_messages_in_parent_convo (line 241) | def test_after_with_more_messages_in_parent_convo(): function test_last_empty_convo (line 250) | def test_last_empty_convo(): function test_last_single_message_convo (line 255) | def test_last_single_message_convo(): function test_last_multiple_messages_convo (line 261) | def test_last_multiple_messages_convo(): function test_last_after_fork (line 268) | def test_last_after_fork(): function test_last_after_deepcopy (line 277) | def test_last_after_deepcopy(): function test_message_iterator (line 288) | def test_message_iterator(): FILE: tests/llm/test_openai.py function mock_response_generator (line 13) | async def mock_response_generator(*content): function test_openai_calls_gpt (line 23) | async def test_openai_calls_gpt(mock_AsyncOpenAI, mock_state_manager): function test_openai_stream_handler (line 68) | async def test_openai_stream_handler(mock_AsyncOpenAI, mock_state_manager): function test_openai_parser_with_retries (line 98) | async def test_openai_parser_with_retries(mock_AsyncOpenAI, mock_state_m... function test_openai_parser_fails (line 147) | async def test_openai_parser_fails(mock_AsyncOpenAI, mock_state_manager): function test_openai_error_handler_success (line 179) | async def test_openai_error_handler_success(mock_AsyncOpenAI, mock_state... function test_openai_error_handler_failure (line 226) | async def test_openai_error_handler_failure(mock_AsyncOpenAI, mock_state... function test_openai_rate_limit_parser (line 271) | def test_openai_rate_limit_parser( FILE: tests/llm/test_parser.py function test_multi_code_block_parser (line 25) | def test_multi_code_block_parser(input, expected): function test_code_block_parser (line 39) | def test_code_block_parser(input, expected): function test_parse_json_no_spec (line 63) | def test_parse_json_no_spec(input, strict, expected): function test_parse_json_with_spec (line 123) | def test_parse_json_with_spec(input, expected): function test_parse_json_schema (line 148) | def test_parse_json_schema(): function test_enum_parser (line 181) | def test_enum_parser(input, expected): function test_optional_block_parser (line 204) | def test_optional_block_parser(input, expected): FILE: tests/llm/test_prompt.py function test_format_template (line 7) | def test_format_template(): function test_jinja_string_template (line 19) | def test_jinja_string_template(): function test_jinja_template_catches_undefined_variable (line 37) | def test_jinja_template_catches_undefined_variable(): function test_jinja_file_template (line 44) | def test_jinja_file_template(): function test_jinja_file_template_nonexistent_directory (line 57) | def test_jinja_file_template_nonexistent_directory(): FILE: tests/log/test_log.py function test_file_handler (line 7) | def test_file_handler(tmp_path): function test_log_level (line 24) | def test_log_level(capsys): FILE: tests/proc/test_process_manager.py function test_local_process_start_terminate (line 14) | async def test_local_process_start_terminate(tmp_path): function test_local_process_wait (line 39) | async def test_local_process_wait(tmp_path): function test_process_manager_run_command_capture_stdout (line 58) | async def test_process_manager_run_command_capture_stdout(tmp_path): function test_process_manager_run_command_capture_stderr (line 75) | async def test_process_manager_run_command_capture_stderr(tmp_path): function test_process_manager_start_list_terminate (line 92) | async def test_process_manager_start_list_terminate(tmp_path): function test_watcher (line 119) | async def test_watcher(tmp_path): FILE: tests/state/test_state_manager.py function test_list_projects_empty (line 11) | async def test_list_projects_empty(testmanager): function test_create_project (line 19) | async def test_create_project(mock_get_config, testmanager): function test_load_project (line 40) | async def test_load_project(mock_get_config, testmanager): function test_delete_project (line 52) | async def test_delete_project(mock_get_config, testmanager): function test_load_project_branch (line 68) | async def test_load_project_branch(mock_get_config, testmanager): function test_load_nonexistent_step (line 81) | async def test_load_nonexistent_step(mock_get_config, testmanager): function test_load_specific_step (line 92) | async def test_load_specific_step(mock_get_config, testmanager): function test_commit (line 105) | async def test_commit(mock_get_config, testmanager): function test_save_file (line 137) | async def test_save_file(mock_get_config, testmanager): function test_importing_changed_files_to_db (line 170) | async def test_importing_changed_files_to_db(mock_get_config, tmpdir, te... function test_restoring_files_from_db (line 202) | async def test_restoring_files_from_db(mock_get_config, tmpdir, testmana... FILE: tests/telemetry/test_telemetry.py function mock_httpx_post (line 12) | async def mock_httpx_post(): function test_clear_data_resets_data (line 24) | def test_clear_data_resets_data(): function test_clear_data_resets_times (line 45) | def test_clear_data_resets_times(): function test_clear_counter_resets_times_but_leaves_data (line 56) | def test_clear_counter_resets_times_but_leaves_data(): function test_set_updates_data (line 70) | def test_set_updates_data(mock_settings): function test_set_ignores_unknown_field (line 78) | def test_set_ignores_unknown_field(mock_settings): function test_inc_increments_known_data_field (line 86) | def test_inc_increments_known_data_field(mock_settings): function test_inc_ignores_unknown_data_field (line 94) | def test_inc_ignores_unknown_data_field(mock_settings): function test_start_with_telemetry_enabled (line 104) | def test_start_with_telemetry_enabled(mock_settings, mock_time, mock_get... function test_stop_when_not_enabled_does_nothing (line 115) | def test_stop_when_not_enabled_does_nothing(mock_settings): function test_stop_calculates_elapsed_time (line 126) | def test_stop_calculates_elapsed_time(mock_settings, mock_time): function test_send_enabled_and_successful (line 140) | async def test_send_enabled_and_successful(mock_settings, mock_getenv, m... function test_send_enabled_but_post_fails (line 159) | async def test_send_enabled_but_post_fails(mock_settings, mock_getenv, m... function test_send_not_enabled (line 178) | async def test_send_not_enabled(mock_settings, mock_httpx_post): function test_send_no_endpoint_configured (line 190) | async def test_send_no_endpoint_configured(mock_settings, mock_getenv, m... function test_send_clears_counters_after_sending (line 203) | async def test_send_clears_counters_after_sending(mock_settings, mock_ge... function test_record_crash (line 217) | def test_record_crash(mock_settings): function test_record_llm_request (line 235) | def test_record_llm_request(mock_settings): function test_calculate_statistics (line 257) | def test_calculate_statistics(mock_settings): FILE: tests/templates/test_templates.py function test_render_react_express_sql (line 12) | async def test_render_react_express_sql(mock_get_config, testmanager): function test_render_react_express_nosql (line 37) | async def test_render_react_express_nosql(mock_get_config, testmanager): function test_render_node_express_mongoose (line 63) | async def test_render_node_express_mongoose(mock_get_config, testmanager): FILE: tests/ui/test_console.py function test_send_message (line 10) | async def test_send_message(capsys): function test_stream (line 24) | async def test_stream(capsys): function test_ask_question_simple (line 39) | async def test_ask_question_simple(mock_PromptSession): function test_ask_question_with_buttons (line 57) | async def test_ask_question_with_buttons(mock_PromptSession): function test_ask_question_interrupted (line 78) | async def test_ask_question_interrupted(mock_PromptSession): FILE: tests/ui/test_ipc_client.py class IPCServer (line 18) | class IPCServer: method __init__ (line 23) | def __init__(self, responses: list[dict]): method handle_connection (line 39) | async def handle_connection( method __aenter__ (line 72) | async def __aenter__(self) -> tuple[int, list]: method __aexit__ (line 77) | async def __aexit__(self, exc_type, exc_val, exc_tb): function test_send_message (line 86) | async def test_send_message(): function test_stream (line 129) | async def test_stream(): function test_server_not_running (line 185) | async def test_server_not_running(): function test_server_closes_connection (line 193) | async def test_server_closes_connection(): function test_ask_question (line 205) | async def test_ask_question(): function test_ask_question_buttons (line 227) | async def test_ask_question_buttons(): function test_ask_question_buttons_only_with_default (line 256) | async def test_ask_question_buttons_only_with_default(): function test_handle_garbage_response (line 286) | async def test_handle_garbage_response():