gitextract_kaxuv8xc/ ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── CODE_OF_CONDUCT.md │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ ├── feature-request.yml │ │ └── howto.yml │ ├── copyright_template.txt │ ├── ip_assignment.yml │ └── workflows/ │ ├── ci.yml │ └── cloud-staging-build.yaml ├── .gitignore ├── .pre-commit-config.yaml ├── CHANGELOG.md ├── Dockerfile ├── LICENSE ├── README.md ├── cloud/ │ ├── config-docker.json │ ├── entrypoint.sh │ ├── on-event-extension-install.sh │ ├── posthog.html │ ├── settings.json │ └── setup-dependencies.sh ├── core/ │ ├── agents/ │ │ ├── __init__.py │ │ ├── architect.py │ │ ├── base.py │ │ ├── bug_hunter.py │ │ ├── code_monkey.py │ │ ├── convo.py │ │ ├── developer.py │ │ ├── error_handler.py │ │ ├── executor.py │ │ ├── external_docs.py │ │ ├── frontend.py │ │ ├── git.py │ │ ├── human_input.py │ │ ├── importer.py │ │ ├── legacy_handler.py │ │ ├── mixins.py │ │ ├── orchestrator.py │ │ ├── problem_solver.py │ │ ├── response.py │ │ ├── spec_writer.py │ │ ├── task_completer.py │ │ ├── tech_lead.py │ │ ├── tech_writer.py │ │ ├── troubleshooter.py │ │ └── wizard.py │ ├── cli/ │ │ ├── __init__.py │ │ ├── helpers.py │ │ └── main.py │ ├── config/ │ │ ├── __init__.py │ │ ├── actions.py │ │ ├── constants.py │ │ ├── env_importer.py │ │ ├── magic_words.py │ │ ├── user_settings.py │ │ └── version.py │ ├── db/ │ │ ├── __init__.py │ │ ├── alembic.ini │ │ ├── fix_migrations.py │ │ ├── migrations/ │ │ │ ├── README │ │ │ ├── env.py │ │ │ ├── script.py.mako │ │ │ └── versions/ │ │ │ ├── 0173e14719aa_move_metadata_from_file_to_file_content_.py │ │ │ ├── 0173e14719aa_vacuum_database.py │ │ │ ├── 08d71952ec2f_refactor_specification_template_to_.py │ │ │ ├── 0a1bb637fa26_initial.py │ │ │ ├── 3968d770dced_add_project_type_to_project.py │ │ │ ├── 675268601278_add_chat_messages_and_convos.py │ │ │ ├── 69e50fdaf067_move_knowledge_base_to_separate_table.py │ │ │ ├── b760f66138c0_add_docs_column_to_project_states.py │ │ │ ├── c8905d4ce784_add_original_description_and_template_.py │ │ │ ├── f352dbe45751_make_relevant_files_nullable.py │ │ │ ├── f708791b9270_adding_knowledge_base_field_to_.py │ │ │ └── ff891d366761_add_example_project_to_spec.py │ │ ├── models/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── branch.py │ │ │ ├── chat_convo.py │ │ │ ├── chat_message.py │ │ │ ├── exec_log.py │ │ │ ├── file.py │ │ │ ├── file_content.py │ │ │ ├── knowledge_base.py │ │ │ ├── llm_request.py │ │ │ ├── project.py │ │ │ ├── project_state.py │ │ │ ├── specification.py │ │ │ └── user_input.py │ │ ├── session.py │ │ ├── setup.py │ │ └── v0importer.py │ ├── disk/ │ │ ├── __init__.py │ │ ├── ignore.py │ │ └── vfs.py │ ├── llm/ │ │ ├── __init__.py │ │ ├── anthropic_client.py │ │ ├── azure_client.py │ │ ├── base.py │ │ ├── convo.py │ │ ├── groq_client.py │ │ ├── openai_client.py │ │ ├── parser.py │ │ ├── prompt.py │ │ ├── relace_client.py │ │ └── request_log.py │ ├── log/ │ │ └── __init__.py │ ├── proc/ │ │ ├── __init__.py │ │ ├── exec_log.py │ │ └── process_manager.py │ ├── prompts/ │ │ ├── architect/ │ │ │ ├── configure_template.prompt │ │ │ ├── select_templates.prompt │ │ │ ├── system.prompt │ │ │ └── technologies.prompt │ │ ├── bug-hunter/ │ │ │ ├── ask_a_question.prompt │ │ │ ├── bug_found_or_add_logs.prompt │ │ │ ├── data_about_logs.prompt │ │ │ ├── get_bug_reproduction_instructions.prompt │ │ │ ├── instructions_from_human_hint.prompt │ │ │ ├── iteration.prompt │ │ │ ├── log_data.prompt │ │ │ ├── problem_explanation.prompt │ │ │ ├── system.prompt │ │ │ └── tell_me_more.prompt │ │ ├── chat-agent/ │ │ │ ├── chat.prompt │ │ │ └── system.prompt │ │ ├── code-monkey/ │ │ │ ├── breakdown.prompt │ │ │ ├── describe_file.prompt │ │ │ ├── implement_changes.prompt │ │ │ ├── iteration.prompt │ │ │ ├── review_changes.prompt │ │ │ ├── review_feedback.prompt │ │ │ └── system.prompt │ │ ├── developer/ │ │ │ ├── breakdown.prompt │ │ │ ├── filter_files.prompt │ │ │ ├── iteration.prompt │ │ │ ├── parse_task.prompt │ │ │ └── system.prompt │ │ ├── error-handler/ │ │ │ └── debug.prompt │ │ ├── executor/ │ │ │ └── ran_command.prompt │ │ ├── external-docs/ │ │ │ ├── create_docs_queries.prompt │ │ │ ├── select_docset.prompt │ │ │ └── system.prompt │ │ ├── frontend/ │ │ │ ├── build_frontend.prompt │ │ │ ├── create_rag_query.prompt │ │ │ ├── is_relevant_for_docs_search.prompt │ │ │ ├── iterate_frontend.prompt │ │ │ ├── remove_mock.prompt │ │ │ ├── system.prompt │ │ │ └── system_relace.prompt │ │ ├── importer/ │ │ │ ├── analyze_project.prompt │ │ │ └── get_entrypoints.prompt │ │ ├── partials/ │ │ │ ├── breakdown_code_instructions.prompt │ │ │ ├── coding_rules.prompt │ │ │ ├── doc_snippets.prompt │ │ │ ├── execution_order.prompt │ │ │ ├── features_list.prompt │ │ │ ├── file_naming.prompt │ │ │ ├── file_size_limit.prompt │ │ │ ├── files_descriptions.prompt │ │ │ ├── files_list.prompt │ │ │ ├── files_list_relevant.prompt │ │ │ ├── human_intervention_explanation.prompt │ │ │ ├── project_details.prompt │ │ │ ├── project_tasks.prompt │ │ │ ├── relative_paths.prompt │ │ │ └── user_feedback.prompt │ │ ├── problem-solver/ │ │ │ ├── get_alternative_solutions.prompt │ │ │ ├── iteration.prompt │ │ │ └── system.prompt │ │ ├── pythagora/ │ │ │ └── commit.prompt │ │ ├── spec-writer/ │ │ │ ├── add_new_feature.prompt │ │ │ ├── add_to_specification.prompt │ │ │ ├── ask_questions.prompt │ │ │ ├── build_full_specification.prompt │ │ │ ├── need_auth.prompt │ │ │ ├── project_name.prompt │ │ │ ├── prompt_complexity.prompt │ │ │ ├── review_spec.prompt │ │ │ └── system.prompt │ │ ├── tech-lead/ │ │ │ ├── epic_breakdown.prompt │ │ │ ├── filter_files.prompt │ │ │ ├── plan.prompt │ │ │ └── system.prompt │ │ ├── tech-writer/ │ │ │ ├── create_readme.prompt │ │ │ └── system.prompt │ │ └── troubleshooter/ │ │ ├── breakdown.prompt │ │ ├── bug_report.prompt │ │ ├── define_user_review_goal.prompt │ │ ├── filter_files.prompt │ │ ├── get_route_files.prompt │ │ ├── get_run_command.prompt │ │ ├── iteration.prompt │ │ └── system.prompt │ ├── state/ │ │ ├── __init__.py │ │ └── state_manager.py │ ├── telemetry/ │ │ └── __init__.py │ ├── templates/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── example_project.py │ │ ├── info/ │ │ │ ├── javascript_react/ │ │ │ │ └── summary.tpl │ │ │ ├── node_express_mongoose/ │ │ │ │ └── summary.tpl │ │ │ ├── react_express/ │ │ │ │ └── summary.tpl │ │ │ ├── vite_react/ │ │ │ │ └── summary.tpl │ │ │ └── vite_react_swagger/ │ │ │ └── summary.tpl │ │ ├── javascript_react.py │ │ ├── node_express_mongoose.py │ │ ├── react_express.py │ │ ├── registry.py │ │ ├── render.py │ │ ├── tree/ │ │ │ ├── add_raw_tags.py │ │ │ ├── javascript_react/ │ │ │ │ ├── .eslintrc.cjs │ │ │ │ ├── .gitignore │ │ │ │ ├── index.html │ │ │ │ ├── package.json │ │ │ │ ├── public/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── src/ │ │ │ │ │ ├── App.css │ │ │ │ │ ├── App.jsx │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── index.css │ │ │ │ │ └── main.jsx │ │ │ │ └── vite.config.js │ │ │ ├── node_express_mongoose/ │ │ │ │ ├── models/ │ │ │ │ │ └── User.js │ │ │ │ ├── package.json │ │ │ │ ├── public/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── style.css │ │ │ │ │ └── js/ │ │ │ │ │ └── main.js │ │ │ │ ├── routes/ │ │ │ │ │ ├── authRoutes.js │ │ │ │ │ └── middleware/ │ │ │ │ │ └── authMiddleware.js │ │ │ │ ├── server.js │ │ │ │ ├── services/ │ │ │ │ │ └── llm.js │ │ │ │ └── views/ │ │ │ │ ├── index.ejs │ │ │ │ ├── login.ejs │ │ │ │ ├── partials/ │ │ │ │ │ ├── _footer.ejs │ │ │ │ │ ├── _head.ejs │ │ │ │ │ └── _header.ejs │ │ │ │ └── register.ejs │ │ │ ├── react_express/ │ │ │ │ ├── .babelrc │ │ │ │ ├── .eslintrc.json │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── api/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── middlewares/ │ │ │ │ │ │ ├── authMiddleware.js │ │ │ │ │ │ └── errorMiddleware.js │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── init.js │ │ │ │ │ │ └── user.js │ │ │ │ │ ├── routes/ │ │ │ │ │ │ ├── authRoutes.js │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── services/ │ │ │ │ │ │ └── userService.js │ │ │ │ │ └── utils/ │ │ │ │ │ ├── log.js │ │ │ │ │ ├── mail.js │ │ │ │ │ └── password.js │ │ │ │ ├── components.json │ │ │ │ ├── index.html │ │ │ │ ├── jsconfig.json │ │ │ │ ├── package.json │ │ │ │ ├── postcss.config.js │ │ │ │ ├── prisma/ │ │ │ │ │ └── schema.prisma │ │ │ │ ├── public/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── server.js │ │ │ │ ├── tailwind.config.js │ │ │ │ ├── tsconfig.json │ │ │ │ ├── ui/ │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── components/ │ │ │ │ │ │ └── ui/ │ │ │ │ │ │ ├── alert.jsx │ │ │ │ │ │ ├── button.jsx │ │ │ │ │ │ ├── card.jsx │ │ │ │ │ │ ├── input.jsx │ │ │ │ │ │ └── label.jsx │ │ │ │ │ ├── index.css │ │ │ │ │ ├── lib/ │ │ │ │ │ │ └── utils.js │ │ │ │ │ ├── main.jsx │ │ │ │ │ └── pages/ │ │ │ │ │ ├── Home.css │ │ │ │ │ ├── Home.jsx │ │ │ │ │ ├── Login.jsx │ │ │ │ │ └── Register.jsx │ │ │ │ └── vite.config.js │ │ │ ├── vite_react/ │ │ │ │ ├── .gitignore │ │ │ │ ├── client/ │ │ │ │ │ ├── components.json │ │ │ │ │ ├── eslint.config.js │ │ │ │ │ ├── index.html │ │ │ │ │ ├── package.json │ │ │ │ │ ├── postcss.config.js │ │ │ │ │ ├── src/ │ │ │ │ │ │ ├── App.css │ │ │ │ │ │ ├── App.tsx │ │ │ │ │ │ ├── api/ │ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ │ └── auth.ts │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ ├── Footer.tsx │ │ │ │ │ │ │ ├── Header.tsx │ │ │ │ │ │ │ ├── Layout.tsx │ │ │ │ │ │ │ ├── ProtectedRoute.tsx │ │ │ │ │ │ │ └── ui/ │ │ │ │ │ │ │ ├── accordion.tsx │ │ │ │ │ │ │ ├── alert-dialog.tsx │ │ │ │ │ │ │ ├── alert.tsx │ │ │ │ │ │ │ ├── aspect-ratio.tsx │ │ │ │ │ │ │ ├── avatar.tsx │ │ │ │ │ │ │ ├── badge.tsx │ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ │ ├── button.tsx │ │ │ │ │ │ │ ├── calendar.tsx │ │ │ │ │ │ │ ├── card.tsx │ │ │ │ │ │ │ ├── carousel.tsx │ │ │ │ │ │ │ ├── chart.tsx │ │ │ │ │ │ │ ├── checkbox.tsx │ │ │ │ │ │ │ ├── collapsible.tsx │ │ │ │ │ │ │ ├── command.tsx │ │ │ │ │ │ │ ├── context-menu.tsx │ │ │ │ │ │ │ ├── dialog.tsx │ │ │ │ │ │ │ ├── drawer.tsx │ │ │ │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ │ │ │ ├── form.tsx │ │ │ │ │ │ │ ├── hover-card.tsx │ │ │ │ │ │ │ ├── input-otp.tsx │ │ │ │ │ │ │ ├── input.tsx │ │ │ │ │ │ │ ├── label.tsx │ │ │ │ │ │ │ ├── menubar.tsx │ │ │ │ │ │ │ ├── navigation-menu.tsx │ │ │ │ │ │ │ ├── pagination.tsx │ │ │ │ │ │ │ ├── popover.tsx │ │ │ │ │ │ │ ├── progress.tsx │ │ │ │ │ │ │ ├── radio-group.tsx │ │ │ │ │ │ │ ├── resizable.tsx │ │ │ │ │ │ │ ├── scroll-area.tsx │ │ │ │ │ │ │ ├── select.tsx │ │ │ │ │ │ │ ├── separator.tsx │ │ │ │ │ │ │ ├── sheet.tsx │ │ │ │ │ │ │ ├── sidebar.tsx │ │ │ │ │ │ │ ├── skeleton.tsx │ │ │ │ │ │ │ ├── slider.tsx │ │ │ │ │ │ │ ├── sonner.tsx │ │ │ │ │ │ │ ├── switch.tsx │ │ │ │ │ │ │ ├── table.tsx │ │ │ │ │ │ │ ├── tabs.tsx │ │ │ │ │ │ │ ├── textarea.tsx │ │ │ │ │ │ │ ├── theme-provider.tsx │ │ │ │ │ │ │ ├── theme-toggle.tsx │ │ │ │ │ │ │ ├── toast.tsx │ │ │ │ │ │ │ ├── toaster.tsx │ │ │ │ │ │ │ ├── toggle-group.tsx │ │ │ │ │ │ │ ├── toggle.tsx │ │ │ │ │ │ │ └── tooltip.tsx │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── constants.ts │ │ │ │ │ │ ├── contexts/ │ │ │ │ │ │ │ └── AuthContext.tsx │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ ├── useMobile.tsx │ │ │ │ │ │ │ └── useToast.ts │ │ │ │ │ │ ├── index.css │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── main.tsx │ │ │ │ │ │ ├── pages/ │ │ │ │ │ │ │ ├── BlankPage.tsx │ │ │ │ │ │ │ ├── Login.tsx │ │ │ │ │ │ │ └── Register.tsx │ │ │ │ │ │ └── vite-env.d.ts │ │ │ │ │ ├── tailwind.config.js │ │ │ │ │ ├── tsconfig.app.json │ │ │ │ │ ├── tsconfig.json │ │ │ │ │ ├── tsconfig.node.json │ │ │ │ │ └── vite.config.ts │ │ │ │ ├── package.json │ │ │ │ └── server/ │ │ │ │ ├── config/ │ │ │ │ │ └── database.js │ │ │ │ ├── models/ │ │ │ │ │ ├── User.js │ │ │ │ │ └── init.js │ │ │ │ ├── package.json │ │ │ │ ├── routes/ │ │ │ │ │ ├── authRoutes.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── middleware/ │ │ │ │ │ └── auth.js │ │ │ │ ├── server.js │ │ │ │ ├── services/ │ │ │ │ │ ├── llmService.js │ │ │ │ │ └── userService.js │ │ │ │ └── utils/ │ │ │ │ ├── auth.js │ │ │ │ └── password.js │ │ │ └── vite_react_swagger/ │ │ │ ├── .gitignore │ │ │ ├── client/ │ │ │ │ ├── components.json │ │ │ │ ├── eslint.config.js │ │ │ │ ├── index.html │ │ │ │ ├── package.json │ │ │ │ ├── postcss.config.js │ │ │ │ ├── src/ │ │ │ │ │ ├── App.css │ │ │ │ │ ├── App.tsx │ │ │ │ │ ├── api/ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ └── auth.ts │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── Footer.tsx │ │ │ │ │ │ ├── Header.tsx │ │ │ │ │ │ ├── Layout.tsx │ │ │ │ │ │ ├── ProtectedRoute.tsx │ │ │ │ │ │ └── ui/ │ │ │ │ │ │ ├── accordion.tsx │ │ │ │ │ │ ├── alert-dialog.tsx │ │ │ │ │ │ ├── alert.tsx │ │ │ │ │ │ ├── aspect-ratio.tsx │ │ │ │ │ │ ├── avatar.tsx │ │ │ │ │ │ ├── badge.tsx │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ ├── button.tsx │ │ │ │ │ │ ├── calendar.tsx │ │ │ │ │ │ ├── card.tsx │ │ │ │ │ │ ├── carousel.tsx │ │ │ │ │ │ ├── chart.tsx │ │ │ │ │ │ ├── checkbox.tsx │ │ │ │ │ │ ├── collapsible.tsx │ │ │ │ │ │ ├── command.tsx │ │ │ │ │ │ ├── context-menu.tsx │ │ │ │ │ │ ├── dialog.tsx │ │ │ │ │ │ ├── drawer.tsx │ │ │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ │ │ ├── form.tsx │ │ │ │ │ │ ├── hover-card.tsx │ │ │ │ │ │ ├── input-otp.tsx │ │ │ │ │ │ ├── input.tsx │ │ │ │ │ │ ├── label.tsx │ │ │ │ │ │ ├── menubar.tsx │ │ │ │ │ │ ├── navigation-menu.tsx │ │ │ │ │ │ ├── pagination.tsx │ │ │ │ │ │ ├── popover.tsx │ │ │ │ │ │ ├── progress.tsx │ │ │ │ │ │ ├── radio-group.tsx │ │ │ │ │ │ ├── resizable.tsx │ │ │ │ │ │ ├── scroll-area.tsx │ │ │ │ │ │ ├── select.tsx │ │ │ │ │ │ ├── separator.tsx │ │ │ │ │ │ ├── sheet.tsx │ │ │ │ │ │ ├── sidebar.tsx │ │ │ │ │ │ ├── skeleton.tsx │ │ │ │ │ │ ├── slider.tsx │ │ │ │ │ │ ├── sonner.tsx │ │ │ │ │ │ ├── switch.tsx │ │ │ │ │ │ ├── table.tsx │ │ │ │ │ │ ├── tabs.tsx │ │ │ │ │ │ ├── textarea.tsx │ │ │ │ │ │ ├── theme-provider.tsx │ │ │ │ │ │ ├── theme-toggle.tsx │ │ │ │ │ │ ├── toast.tsx │ │ │ │ │ │ ├── toaster.tsx │ │ │ │ │ │ ├── toggle-group.tsx │ │ │ │ │ │ ├── toggle.tsx │ │ │ │ │ │ └── tooltip.tsx │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── constants.ts │ │ │ │ │ ├── contexts/ │ │ │ │ │ │ └── AuthContext.tsx │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── useMobile.tsx │ │ │ │ │ │ └── useToast.ts │ │ │ │ │ ├── index.css │ │ │ │ │ ├── lib/ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── main.tsx │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── BlankPage.tsx │ │ │ │ │ │ ├── Login.tsx │ │ │ │ │ │ └── Register.tsx │ │ │ │ │ └── vite-env.d.ts │ │ │ │ ├── tailwind.config.js │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.json │ │ │ │ ├── tsconfig.node.json │ │ │ │ └── vite.config.ts │ │ │ └── package.json │ │ ├── vite_react.py │ │ └── vite_react_swagger.py │ ├── ui/ │ │ ├── api_server.py │ │ ├── base.py │ │ ├── console.py │ │ ├── ipc_client.py │ │ └── virtual.py │ └── utils/ │ ├── __init__.py │ └── text.py ├── docs/ │ └── TELEMETRY.md ├── example-config.json ├── main.py ├── pyproject.toml ├── requirements.txt └── tests/ ├── __init__.py ├── agents/ │ ├── __init__.py │ ├── test_base.py │ ├── test_convo.py │ ├── test_external_docs.py │ ├── test_orchestrator.py │ └── test_tech_lead.py ├── cli/ │ ├── __init__.py │ └── test_cli.py ├── config/ │ ├── __init__.py │ ├── test_config.py │ ├── test_env_importer.py │ ├── test_version.py │ └── testconfig.json ├── conftest.py ├── db/ │ ├── __init__.py │ ├── factories.py │ ├── test_branch.py │ ├── test_db.py │ ├── test_project.py │ └── test_project_state.py ├── disk/ │ ├── __init__.py │ ├── test_ignore.py │ └── test_vfs.py ├── integration/ │ ├── __init__.py │ └── llm/ │ ├── __init__.py │ ├── test_anthropic.py │ ├── test_groq.py │ └── test_openai.py ├── llm/ │ ├── __init__.py │ ├── prompts/ │ │ └── test.txt │ ├── test_convo.py │ ├── test_openai.py │ ├── test_parser.py │ └── test_prompt.py ├── log/ │ ├── __init__.py │ └── test_log.py ├── proc/ │ ├── __init__.py │ └── test_process_manager.py ├── state/ │ ├── __init__.py │ └── test_state_manager.py ├── telemetry/ │ └── test_telemetry.py ├── templates/ │ └── test_templates.py └── ui/ ├── __init__.py ├── test_console.py └── test_ipc_client.py