PyBreeze-dev 1.0.19__tar.gz → 1.0.21__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/PKG-INFO +14 -11
  2. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/README.md +12 -8
  3. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/editor_main/main_ui.py +52 -13
  4. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/navigation/navigation_dock.py +40 -12
  5. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze_dev.egg-info/PKG-INFO +14 -11
  6. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pyproject.toml +2 -3
  7. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/LICENSE +0 -0
  8. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/__init__.py +0 -0
  9. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/__main__.py +0 -0
  10. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/__init__.py +0 -0
  11. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/language_server/__init__.py +0 -0
  12. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/language_server/__main__.py +0 -0
  13. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/language_server/launch.py +0 -0
  14. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/language_server/server_main.py +0 -0
  15. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/mail_thunder_extend/__init__.py +0 -0
  16. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/mail_thunder_extend/mail_thunder_setting.py +0 -0
  17. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/__init__.py +0 -0
  18. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/file_runner_process.py +0 -0
  19. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/process_executor_utils.py +0 -0
  20. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/prthinker/__init__.py +0 -0
  21. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/prthinker/prthinker_process.py +0 -0
  22. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/python_task_process_manager.py +0 -0
  23. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/queue_pump.py +0 -0
  24. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/run_notice.py +0 -0
  25. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/test_pioneer/__init__.py +0 -0
  26. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/test_pioneer/test_pioneer_process_manager.py +0 -0
  27. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/prthinker_extend/__init__.py +0 -0
  28. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/prthinker_extend/prthinker_setting.py +0 -0
  29. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/__init__.py +0 -0
  30. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/english_integrations.py +0 -0
  31. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/extend_english.py +0 -0
  32. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/extend_traditional_chinese.py +0 -0
  33. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/supported_languages.py +0 -0
  34. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/traditional_chinese_error_text.py +0 -0
  35. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/traditional_chinese_integrations.py +0 -0
  36. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/update_language_dict.py +0 -0
  37. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/__init__.py +0 -0
  38. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/busy_cursor.py +0 -0
  39. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/closing.py +0 -0
  40. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/code_result_logs.py +0 -0
  41. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/__init__.py +0 -0
  42. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/__init__.py +0 -0
  43. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/sftp_session.py +0 -0
  44. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_command_widget.py +0 -0
  45. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_connect_thread.py +0 -0
  46. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_file_viewer_widget.py +0 -0
  47. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_host_key_policy.py +0 -0
  48. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_key_loader.py +0 -0
  49. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_login_widget.py +0 -0
  50. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_main_widget.py +0 -0
  51. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/url/__init__.py +0 -0
  52. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/url/ai_code_review_gui.py +0 -0
  53. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/design/__init__.py +0 -0
  54. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/design/flow_layout.py +0 -0
  55. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/design/panels.py +0 -0
  56. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/design/tokens.py +0 -0
  57. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/__init__.py +0 -0
  58. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_commands.py +0 -0
  59. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_editor_widget.py +0 -0
  60. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_items.py +0 -0
  61. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_mermaid_parser.py +0 -0
  62. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_net_utils.py +0 -0
  63. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_property_panel.py +0 -0
  64. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_scene.py +0 -0
  65. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_view.py +0 -0
  66. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/dialog/__init__.py +0 -0
  67. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/dialog/prthinker_setting_dialog.py +0 -0
  68. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/editor_main/__init__.py +0 -0
  69. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/editor_main/file_tree_context_menu.py +0 -0
  70. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/editor_main/pybreeze_icon.ico +0 -0
  71. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/error_text.py +0 -0
  72. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/exact_text.py +0 -0
  73. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/__init__.py +0 -0
  74. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/ai_gui_global_variable.py +0 -0
  75. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/__init__.py +0 -0
  76. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/code_review_thread.py +0 -0
  77. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/cot_chain.py +0 -0
  78. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/cot_code_review_gui.py +0 -0
  79. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/__init__.py +0 -0
  80. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/__init__.py +0 -0
  81. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/code_smell_detector.py +0 -0
  82. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_code_review.py +0 -0
  83. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_summary_prompt.py +0 -0
  84. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/global_rule.py +0 -0
  85. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge.py +0 -0
  86. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge_single_review.py +0 -0
  87. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/linter.py +0 -0
  88. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/step_by_step_analysis.py +0 -0
  89. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/total_summary.py +0 -0
  90. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_prompt_editor_widget.py +0 -0
  91. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/prompt_editor_widget.py +0 -0
  92. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/prompt_file_io.py +0 -0
  93. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_editor_widget.py +0 -0
  94. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/__init__.py +0 -0
  95. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_explainer.py +0 -0
  96. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_review.py +0 -0
  97. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_store.py +0 -0
  98. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/skills/__init__.py +0 -0
  99. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/skills/skills_send_gui.py +0 -0
  100. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/fixed_pitch.py +0 -0
  101. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/gui_thread_gc.py +0 -0
  102. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/jupyter_lab_gui/__init__.py +0 -0
  103. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyter_lab_thread.py +0 -0
  104. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyter_lab_widget.py +0 -0
  105. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/jupyter_lab_gui/lab_page.py +0 -0
  106. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/mcp_gui/__init__.py +0 -0
  107. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/mcp_gui/mcp_client_gui.py +0 -0
  108. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/mcp_gui/mcp_panels.py +0 -0
  109. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/mcp_gui/mcp_profile_dialog.py +0 -0
  110. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/mcp_gui/mcp_server_panel.py +0 -0
  111. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/mcp_gui/mcp_worker.py +0 -0
  112. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/__init__.py +0 -0
  113. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/__init__.py +0 -0
  114. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/__init__.py +0 -0
  115. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/build_api_testka_menu.py +0 -0
  116. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/__init__.py +0 -0
  117. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/build_autocontrol_menu.py +0 -0
  118. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/__init__.py +0 -0
  119. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/build_automation_file_menu.py +0 -0
  120. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/automation_menu_factory.py +0 -0
  121. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/__init__.py +0 -0
  122. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/build_load_density_menu.py +0 -0
  123. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/__init__.py +0 -0
  124. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/build_mail_thunder_menu.py +0 -0
  125. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/prthinker_menu/__init__.py +0 -0
  126. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/prthinker_menu/build_prthinker_menu.py +0 -0
  127. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu/__init__.py +0 -0
  128. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu/build_test_pioneer_menu.py +0 -0
  129. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/__init__.py +0 -0
  130. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/build_webrunner_menu.py +0 -0
  131. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/build_menubar.py +0 -0
  132. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu/__init__.py +0 -0
  133. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu/jupyter_lab_tab.py +0 -0
  134. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/install_menu/__init__.py +0 -0
  135. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/install_menu/automation_menu/__init__.py +0 -0
  136. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/install_menu/automation_menu/build_automation_install_menu.py +0 -0
  137. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/install_menu/install_utils.py +0 -0
  138. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/install_menu/tools_menu/__init__.py +0 -0
  139. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/install_menu/tools_menu/build_tool_install_menu.py +0 -0
  140. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/menu_utils.py +0 -0
  141. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/plugin_menu/__init__.py +0 -0
  142. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/plugin_menu/build_plugin_menu.py +0 -0
  143. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/plugin_menu/build_run_with_menu.py +0 -0
  144. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/tools/__init__.py +0 -0
  145. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/tools/tools_menu.py +0 -0
  146. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/navigation/__init__.py +0 -0
  147. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/navigation/navigation_model.py +0 -0
  148. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/plain_text.py +0 -0
  149. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/report_gui/__init__.py +0 -0
  150. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/report_gui/report_viewer_gui.py +0 -0
  151. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/run_shortcut.py +0 -0
  152. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/show_code_window/__init__.py +0 -0
  153. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/show_code_window/code_window.py +0 -0
  154. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/syntax/__init__.py +0 -0
  155. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/syntax/syntax_extend.py +0 -0
  156. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/syntax/syntax_keyword.py +0 -0
  157. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/terminal_view.py +0 -0
  158. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/thread_keeper.py +0 -0
  159. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/__init__.py +0 -0
  160. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/curl_import_gui.py +0 -0
  161. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/diff_gui.py +0 -0
  162. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/har_import_gui.py +0 -0
  163. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/hash_gui.py +0 -0
  164. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/header_analyzer_gui.py +0 -0
  165. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/http_status_gui.py +0 -0
  166. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/import_gaps.py +0 -0
  167. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/json_editor_gui.py +0 -0
  168. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/json_format_gui.py +0 -0
  169. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/json_tree_panel.py +0 -0
  170. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/jwt_decoder_gui.py +0 -0
  171. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/keyword_reference_gui.py +0 -0
  172. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/output_actions.py +0 -0
  173. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/query_json_gui.py +0 -0
  174. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/regex_gui.py +0 -0
  175. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/response_inspector_gui.py +0 -0
  176. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/timestamp_gui.py +0 -0
  177. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/tool_tabs.py +0 -0
  178. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/url_builder_gui.py +0 -0
  179. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/__init__.py +0 -0
  180. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/app_dirs.py +0 -0
  181. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/curl_import/__init__.py +0 -0
  182. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/curl_import/curl_parser.py +0 -0
  183. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/curl_import/request_body.py +0 -0
  184. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/curl_import/request_codegen.py +0 -0
  185. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/curl_import/script_templates.py +0 -0
  186. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/diff_tools/__init__.py +0 -0
  187. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/diff_tools/text_diff.py +0 -0
  188. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/exception/__init__.py +0 -0
  189. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/exception/error_templates.py +0 -0
  190. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/exception/exception_tags.py +0 -0
  191. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/exception/exceptions.py +0 -0
  192. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/__init__.py +0 -0
  193. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/html_report.py +0 -0
  194. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/junit_xml.py +0 -0
  195. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/record_reports.py +0 -0
  196. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/report_files.py +0 -0
  197. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/report_filter.py +0 -0
  198. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/report_schema.py +0 -0
  199. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/safe_xml.py +0 -0
  200. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/file_process/__init__.py +0 -0
  201. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/file_process/get_dir_file_list.py +0 -0
  202. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/file_process/read_capped.py +0 -0
  203. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/file_process/replace_file.py +0 -0
  204. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/har_import/__init__.py +0 -0
  205. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/har_import/har_codegen.py +0 -0
  206. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/har_import/har_parser.py +0 -0
  207. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/hash_tools/__init__.py +0 -0
  208. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/hash_tools/hash_text.py +0 -0
  209. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/header_tools/__init__.py +0 -0
  210. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/header_tools/header_analyzer.py +0 -0
  211. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/header_tools/header_merge.py +0 -0
  212. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/header_tools/header_rules.py +0 -0
  213. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/header_tools/header_sarif.py +0 -0
  214. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/http_reference/__init__.py +0 -0
  215. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/http_reference/status_codes.py +0 -0
  216. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/import_targets/__init__.py +0 -0
  217. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/import_targets/builtin_targets.py +0 -0
  218. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/import_targets/normalized_request.py +0 -0
  219. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/import_targets/target_registry.py +0 -0
  220. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/import_targets/webrunner_target.py +0 -0
  221. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/json_format/__init__.py +0 -0
  222. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/json_format/json_document.py +0 -0
  223. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/json_format/json_process.py +0 -0
  224. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/json_format/json_tree_edit.py +0 -0
  225. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/json_format/view_safe.py +0 -0
  226. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/jwt_tools/__init__.py +0 -0
  227. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/jwt_tools/jwt_decoder.py +0 -0
  228. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/__init__.py +0 -0
  229. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/action_adapter.py +0 -0
  230. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/framework_profiles.py +0 -0
  231. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/json_scan.py +0 -0
  232. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/keyword_metadata.py +0 -0
  233. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/lsp_server.py +0 -0
  234. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/metadata_probe.py +0 -0
  235. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/service_adapter.py +0 -0
  236. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/logging/__init__.py +0 -0
  237. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/logging/logger.py +0 -0
  238. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/manager/__init__.py +0 -0
  239. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/manager/package_manager/__init__.py +0 -0
  240. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/manager/package_manager/package_manager_class.py +0 -0
  241. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/mcp/__init__.py +0 -0
  242. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/mcp/mcp_call_log.py +0 -0
  243. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/mcp/mcp_client.py +0 -0
  244. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/mcp/mcp_profile.py +0 -0
  245. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/mcp/mcp_redaction.py +0 -0
  246. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/mcp/mcp_transport.py +0 -0
  247. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/network/__init__.py +0 -0
  248. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/network/http_client.py +0 -0
  249. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/network/public_http.py +0 -0
  250. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/network/url_validation.py +0 -0
  251. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/query_tools/__init__.py +0 -0
  252. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/query_tools/query_convert.py +0 -0
  253. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/regex_tools/__init__.py +0 -0
  254. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/regex_tools/regex_tester.py +0 -0
  255. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/response_inspector/__init__.py +0 -0
  256. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/response_inspector/response_analyzer.py +0 -0
  257. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/subprocess_util.py +0 -0
  258. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/terminal_style.py +0 -0
  259. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/terminal_text.py +0 -0
  260. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/timestamp_tools/__init__.py +0 -0
  261. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/timestamp_tools/timestamp_converter.py +0 -0
  262. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/ui_state.py +0 -0
  263. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/url_tools/__init__.py +0 -0
  264. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/url_tools/url_convert.py +0 -0
  265. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze_dev.egg-info/SOURCES.txt +0 -0
  266. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze_dev.egg-info/dependency_links.txt +0 -0
  267. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze_dev.egg-info/requires.txt +0 -0
  268. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze_dev.egg-info/top_level.txt +0 -0
  269. {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/setup.cfg +0 -0
@@ -1,11 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pybreeze_dev
3
- Version: 1.0.19
3
+ Version: 1.0.21
4
4
  Summary: IDE for multi automation
5
5
  Author-email: JE-Chen <jechenmailman@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/Integration-Automation/PyBreeze
7
7
  Project-URL: Code, https://github.com/Integration-Automation/PyBreeze
8
- Classifier: Programming Language :: Python :: 3.10
9
8
  Classifier: Programming Language :: Python :: 3.11
10
9
  Classifier: Programming Language :: Python :: 3.12
11
10
  Classifier: Programming Language :: Python :: 3.13
@@ -15,7 +14,7 @@ Classifier: Environment :: Win32 (MS Windows)
15
14
  Classifier: Environment :: MacOS X
16
15
  Classifier: Environment :: X11 Applications
17
16
  Classifier: Operating System :: OS Independent
18
- Requires-Python: >=3.10
17
+ Requires-Python: >=3.11
19
18
  Description-Content-Type: text/markdown
20
19
  License-File: LICENSE
21
20
  Requires-Dist: je-editor>=1.0.27
@@ -33,7 +32,7 @@ Dynamic: license-file
33
32
 
34
33
  # PyBreeze: The Automation-First IDE
35
34
 
36
- [![Python 3.10–3.14](https://img.shields.io/badge/python-3.10--3.14-blue.svg)](https://www.python.org/downloads/)
35
+ [![Python 3.11–3.14](https://img.shields.io/badge/python-3.11--3.14-blue.svg)](https://www.python.org/downloads/)
37
36
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
38
37
  [![PySide6](https://img.shields.io/badge/GUI-PySide6-green.svg)](https://doc.qt.io/qtforpython/)
39
38
  [![Documentation](https://readthedocs.org/projects/pybreeze/badge/?version=latest)](https://pybreeze.readthedocs.io/en/latest/index.html)
@@ -44,7 +43,11 @@ Dynamic: license-file
44
43
 
45
44
  ![PyBreeze main window](images/main_window.png)
46
45
 
47
- *The main window: an APITestka action file open in the editor, project tree on the left, run/format/debug/terminal panes below.*
46
+ *The main window in the default theme: an APITestka action file open in the editor, the Navigation view in the side bar with the activity bar at its left, and the output, problems, terminal and debug panes below.*
47
+
48
+ ![PyBreeze main window, light theme](images/main_window_light.png)
49
+
50
+ *The same window in JEditor Light, with the Explorer in the side bar.*
48
51
 
49
52
  ---
50
53
 
@@ -108,7 +111,7 @@ Each module gets the same menu shape: **Run** (single script, batch directory, w
108
111
 
109
112
  - **Automation keyword sets** — the `AT_*` / GUI / Web / Load keyword sets are registered for `.json`, and TestPioneer's schema for `.yml` and `.yaml`, on top of JEditor's language support. JEditor does not colour them yet: it highlights those files with its own rules for the suffix, which leave registered keywords out
110
113
  - **Code editor** — built on [JEditor](https://github.com/Integration-Automation/JEDITOR): tabs, project tree, format checker, debugger, terminal and a git client pane
111
- - **Navigation panel** — a dock at the left lists what the menus hold as one tree (Automation, Tools, Settings): type in its box to find a tool or a command by name, then press Enter or double-click to open it. **Dock ▸ Navigation** shows and hides it, and a panel closed on purpose stays closed at the next start
114
+ - **Navigation panel** — a view of the side bar, with its own icon in the activity bar, lists what the menus hold as one tree (Automation, Tools, Settings): type in its box to find a tool or a command by name, then press Enter or double-click to open it. It is the view shown on a first start; the activity bar or **View ▸ Navigation** switches to it, and the view left open is the one shown at the next start
112
115
  - **Fits a small screen** — a tool tab never asks for more than 60 font heights of width: a row of buttons too long for the tab wraps onto the next line instead of pushing the window wider than the display
113
116
  - **Script execution** — single or batch, each run in a window of its own with a Stop button (Run ▸ Stop All Program stops them all), which asks whether to stop the run when it is closed while the run goes on; action files are passed by path, and a script from the tab in front that is too long for a Windows command line (~32 KB) goes through a temporary file
114
117
  - **Report generation** — HTML / JSON / XML after a run, with optional email delivery
@@ -413,7 +416,7 @@ pip install -r requirements.txt
413
416
 
414
417
  ### System requirements
415
418
 
416
- - **Python**: 3.10 – 3.14
419
+ - **Python**: 3.11 – 3.14
417
420
  - **OS**: Windows, macOS, Linux
418
421
  - **GUI**: PySide6 6.11.2 (installed automatically)
419
422
 
@@ -429,8 +432,8 @@ python exe/start_pybreeze.py # from the exe directory
429
432
  ```python
430
433
  from pybreeze import start_editor
431
434
 
432
- start_editor() # the theme picked from UI Style (dark_amber until one is)
433
- start_editor(theme="dark_teal.xml") # any qt_material theme; it becomes the picked one
435
+ start_editor() # the theme picked from UI Style (JEditor Dark until one is)
436
+ start_editor(theme="jeditor_light") # a JEditor theme, or any qt_material one such as "dark_teal.xml"; it becomes the picked one
434
437
  ```
435
438
 
436
439
  Once launched:
@@ -548,7 +551,7 @@ python -m pytest test/test_utils/ -v --tb=short
548
551
 
549
552
  - **Unit tests** — `test/test_utils/`, covering the pure-logic layer (curl and HAR parsing, header analysis, SSRF validation, JWT, hashing, timestamps, diffing) plus headless Qt widget tests via `QT_QPA_PLATFORM=offscreen`, with Hypothesis property tests over the parsers. The SSH terminal and the SFTP file tree also log in to an SSH server the tests start on the loopback address, which serves a temporary folder over SFTP
550
553
  - **Startup tests** — `test/unit_test/start_automation/` launches the IDE in debug mode and verifies it comes up and exits cleanly
551
- - **CI** — GitHub Actions: the whole suite on Windows across Python 3.10 – 3.14, and a short set of platform smoke tests on Linux and macOS, on every push and PR plus a nightly run; a push to `dev` that passes the suite also publishes `pybreeze_dev` when the package changed
554
+ - **CI** — GitHub Actions: the whole suite on Windows across Python 3.11 – 3.14, and a short set of platform smoke tests on Linux and macOS, on every push and PR plus a nightly run; a push to `dev` that passes the suite also publishes `pybreeze_dev` when the package changed
552
555
  - **Static analysis** — SonarCloud, Codacy and Bandit
553
556
 
554
557
  ---
@@ -572,4 +575,4 @@ MIT — see [LICENSE](LICENSE). Copyright (c) 2022 JE-Chen
572
575
 
573
576
  ---
574
577
 
575
- <sub>Screenshots are rendered from the actual PyBreeze widgets on Windows 11 with the default `dark_amber` theme; the sample data in each tool is real input processed by the real code path.</sub>
578
+ <sub>Screenshots are rendered from the actual PyBreeze widgets on Windows 11: the main window and the menus in the default JEditor Dark theme, the tool tabs in `dark_amber`, the default when those were taken; the sample data in each tool is real input processed by the real code path.</sub>
@@ -1,6 +1,6 @@
1
1
  # PyBreeze: The Automation-First IDE
2
2
 
3
- [![Python 3.10–3.14](https://img.shields.io/badge/python-3.10--3.14-blue.svg)](https://www.python.org/downloads/)
3
+ [![Python 3.11–3.14](https://img.shields.io/badge/python-3.11--3.14-blue.svg)](https://www.python.org/downloads/)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
5
5
  [![PySide6](https://img.shields.io/badge/GUI-PySide6-green.svg)](https://doc.qt.io/qtforpython/)
6
6
  [![Documentation](https://readthedocs.org/projects/pybreeze/badge/?version=latest)](https://pybreeze.readthedocs.io/en/latest/index.html)
@@ -11,7 +11,11 @@
11
11
 
12
12
  ![PyBreeze main window](images/main_window.png)
13
13
 
14
- *The main window: an APITestka action file open in the editor, project tree on the left, run/format/debug/terminal panes below.*
14
+ *The main window in the default theme: an APITestka action file open in the editor, the Navigation view in the side bar with the activity bar at its left, and the output, problems, terminal and debug panes below.*
15
+
16
+ ![PyBreeze main window, light theme](images/main_window_light.png)
17
+
18
+ *The same window in JEditor Light, with the Explorer in the side bar.*
15
19
 
16
20
  ---
17
21
 
@@ -75,7 +79,7 @@ Each module gets the same menu shape: **Run** (single script, batch directory, w
75
79
 
76
80
  - **Automation keyword sets** — the `AT_*` / GUI / Web / Load keyword sets are registered for `.json`, and TestPioneer's schema for `.yml` and `.yaml`, on top of JEditor's language support. JEditor does not colour them yet: it highlights those files with its own rules for the suffix, which leave registered keywords out
77
81
  - **Code editor** — built on [JEditor](https://github.com/Integration-Automation/JEDITOR): tabs, project tree, format checker, debugger, terminal and a git client pane
78
- - **Navigation panel** — a dock at the left lists what the menus hold as one tree (Automation, Tools, Settings): type in its box to find a tool or a command by name, then press Enter or double-click to open it. **Dock ▸ Navigation** shows and hides it, and a panel closed on purpose stays closed at the next start
82
+ - **Navigation panel** — a view of the side bar, with its own icon in the activity bar, lists what the menus hold as one tree (Automation, Tools, Settings): type in its box to find a tool or a command by name, then press Enter or double-click to open it. It is the view shown on a first start; the activity bar or **View ▸ Navigation** switches to it, and the view left open is the one shown at the next start
79
83
  - **Fits a small screen** — a tool tab never asks for more than 60 font heights of width: a row of buttons too long for the tab wraps onto the next line instead of pushing the window wider than the display
80
84
  - **Script execution** — single or batch, each run in a window of its own with a Stop button (Run ▸ Stop All Program stops them all), which asks whether to stop the run when it is closed while the run goes on; action files are passed by path, and a script from the tab in front that is too long for a Windows command line (~32 KB) goes through a temporary file
81
85
  - **Report generation** — HTML / JSON / XML after a run, with optional email delivery
@@ -380,7 +384,7 @@ pip install -r requirements.txt
380
384
 
381
385
  ### System requirements
382
386
 
383
- - **Python**: 3.10 – 3.14
387
+ - **Python**: 3.11 – 3.14
384
388
  - **OS**: Windows, macOS, Linux
385
389
  - **GUI**: PySide6 6.11.2 (installed automatically)
386
390
 
@@ -396,8 +400,8 @@ python exe/start_pybreeze.py # from the exe directory
396
400
  ```python
397
401
  from pybreeze import start_editor
398
402
 
399
- start_editor() # the theme picked from UI Style (dark_amber until one is)
400
- start_editor(theme="dark_teal.xml") # any qt_material theme; it becomes the picked one
403
+ start_editor() # the theme picked from UI Style (JEditor Dark until one is)
404
+ start_editor(theme="jeditor_light") # a JEditor theme, or any qt_material one such as "dark_teal.xml"; it becomes the picked one
401
405
  ```
402
406
 
403
407
  Once launched:
@@ -515,7 +519,7 @@ python -m pytest test/test_utils/ -v --tb=short
515
519
 
516
520
  - **Unit tests** — `test/test_utils/`, covering the pure-logic layer (curl and HAR parsing, header analysis, SSRF validation, JWT, hashing, timestamps, diffing) plus headless Qt widget tests via `QT_QPA_PLATFORM=offscreen`, with Hypothesis property tests over the parsers. The SSH terminal and the SFTP file tree also log in to an SSH server the tests start on the loopback address, which serves a temporary folder over SFTP
517
521
  - **Startup tests** — `test/unit_test/start_automation/` launches the IDE in debug mode and verifies it comes up and exits cleanly
518
- - **CI** — GitHub Actions: the whole suite on Windows across Python 3.10 – 3.14, and a short set of platform smoke tests on Linux and macOS, on every push and PR plus a nightly run; a push to `dev` that passes the suite also publishes `pybreeze_dev` when the package changed
522
+ - **CI** — GitHub Actions: the whole suite on Windows across Python 3.11 – 3.14, and a short set of platform smoke tests on Linux and macOS, on every push and PR plus a nightly run; a push to `dev` that passes the suite also publishes `pybreeze_dev` when the package changed
519
523
  - **Static analysis** — SonarCloud, Codacy and Bandit
520
524
 
521
525
  ---
@@ -539,4 +543,4 @@ MIT — see [LICENSE](LICENSE). Copyright (c) 2022 JE-Chen
539
543
 
540
544
  ---
541
545
 
542
- <sub>Screenshots are rendered from the actual PyBreeze widgets on Windows 11 with the default `dark_amber` theme; the sample data in each tool is real input processed by the real code path.</sub>
546
+ <sub>Screenshots are rendered from the actual PyBreeze widgets on Windows 11: the main window and the menus in the default JEditor Dark theme, the tool tabs in `dark_amber`, the default when those were taken; the sample data in each tool is real input processed by the real code path.</sub>
@@ -30,7 +30,12 @@ from pybreeze.pybreeze_ui.closing import AskingDock, may_close
30
30
  from pybreeze.pybreeze_ui.editor_main.file_tree_context_menu import setup_file_tree_context_menu
31
31
  from pybreeze.pybreeze_ui.gui_thread_gc import collect_garbage_on_gui_thread
32
32
  from pybreeze.pybreeze_ui.menu.build_menubar import add_menu_to_menubar
33
- from pybreeze.pybreeze_ui.navigation.navigation_dock import VISIBLE_STATE, NavigationDock
33
+ from pybreeze.pybreeze_ui.navigation.navigation_dock import (
34
+ NAVIGATION_VIEW,
35
+ VISIBLE_STATE,
36
+ NavigationDock,
37
+ NavigationPanel,
38
+ )
34
39
  from pybreeze.pybreeze_ui.navigation.navigation_model import build_navigation
35
40
  from pybreeze.pybreeze_ui.show_code_window.code_window import CodeWindow
36
41
  from pybreeze.pybreeze_ui.syntax.syntax_extend import \
@@ -115,7 +120,7 @@ class PyBreezeMainWindow(EditorMain):
115
120
  self.run_menu.stop_all_program_action.triggered.connect(self.stop_all_runs)
116
121
 
117
122
  # Navigation: what the menus hold, as a tree that stays in view
118
- self._add_navigation_dock()
123
+ self._add_navigation()
119
124
 
120
125
  # Action scripts are completed and checked from the installed frameworks' keywords
121
126
  self._offer_language_server()
@@ -132,15 +137,43 @@ class PyBreezeMainWindow(EditorMain):
132
137
  close_timer.timeout.connect(self.debug_close)
133
138
  close_timer.start()
134
139
 
135
- def _add_navigation_dock(self) -> None:
136
- """Add the navigation panel at the left, shown unless the user closed it last time.
140
+ def _add_navigation(self) -> None:
141
+ """Add the navigation panel: a view of the side bar where the window has a shell.
137
142
 
138
- Built after the menus: each of its lines is one of their actions. Its
139
- entry in the Dock menu shows and hides it. Whether it is shown is
143
+ Built after the menus: each of its lines is one of their actions.
144
+ JEditor's shell gives it an icon in the activity bar and an entry in
145
+ the View menu, and remembers with its own layout whether it is the
146
+ view shown. JEditor restored that layout while it was building the
147
+ window, before this view existed, so it is restored again here; on a
148
+ first start, with nothing saved, the panel is the view shown. A JEditor
149
+ from before its window had a shell gets the panel in a dock instead.
150
+ """
151
+ navigation = build_navigation(self)
152
+ workbench = getattr(self, "workbench", None)
153
+ if workbench is None:
154
+ self._add_navigation_dock(navigation)
155
+ return
156
+ self.navigation_dock = None
157
+ self.navigation_panel = NavigationPanel(navigation)
158
+ workbench.add_view(
159
+ NAVIGATION_VIEW, "side", widget=self.navigation_panel,
160
+ title_key="navigation_dock_title", icon="navigation")
161
+ if workbench.has_saved_layout():
162
+ workbench.restore_layout()
163
+ else:
164
+ workbench.show_view(NAVIGATION_VIEW)
165
+
166
+ def _add_navigation_dock(self, navigation: dict) -> None:
167
+ """Add the navigation panel in a dock at the left, shown unless the user closed it last time.
168
+
169
+ Its entry in the Dock menu shows and hides it. Whether it is shown is
140
170
  remembered only when the user says so (that entry, or the panel's own
141
171
  close button): the entry's checked state also changes as the IDE closes.
172
+
173
+ :param navigation: what each category holds (``build_navigation``)
142
174
  """
143
- self.navigation_dock = NavigationDock(build_navigation(self), self)
175
+ self.navigation_dock = NavigationDock(navigation, self)
176
+ self.navigation_panel = self.navigation_dock.panel
144
177
  self.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.navigation_dock)
145
178
  self.navigation_dock.setVisible(read_ui_state().get(VISIBLE_STATE) is not False)
146
179
  toggle = self.navigation_dock.toggleViewAction()
@@ -268,9 +301,10 @@ def start_editor(debug_mode: bool = False, theme: str | None = None, **kwargs) -
268
301
  """
269
302
  Start editor instance
270
303
  :param debug_mode: enable debug mode with auto-close timer
271
- :param theme: qt_material theme name (e.g. "dark_teal.xml", "light_blue.xml"). It replaces
272
- the theme picked from UI Style, and is kept as the picked one. ``None`` starts with the
273
- picked theme, ``dark_amber.xml`` until one is picked
304
+ :param theme: a theme of JEditor's own ("jeditor_dark", "jeditor_light") or a qt_material
305
+ theme name (e.g. "dark_teal.xml", "light_blue.xml"). It replaces the theme picked from
306
+ UI Style, and is kept as the picked one. ``None`` starts with the picked theme, JEditor's
307
+ default until one is picked
274
308
  :return: None
275
309
  """
276
310
  new_ide = QCoreApplication.instance()
@@ -297,8 +331,8 @@ def open_main_window(app: QApplication, debug_mode: bool = False, theme: str | N
297
331
 
298
332
  :param app: the running application, which the theme is applied to
299
333
  :param debug_mode: close by itself after a while, as the startup tests need
300
- :param theme: qt_material theme name, which replaces the one picked from UI Style and is
301
- kept as the picked one; ``None`` keeps the picked one
334
+ :param theme: a JEditor or qt_material theme name, which replaces the one picked from UI
335
+ Style and is kept as the picked one; ``None`` keeps the picked one
302
336
  :return: the window, which the caller keeps for as long as the IDE runs
303
337
  """
304
338
  window = PyBreezeMainWindow(debug_mode=debug_mode, **kwargs)
@@ -322,4 +356,9 @@ def _apply_given_theme(app: QApplication, window: PyBreezeMainWindow, theme: str
322
356
  # a bad one is logged, and the theme is still applied.
323
357
  except (OSError, ValueError, TypeError, KeyError, RuntimeError) as error:
324
358
  pybreeze_logger.error("Startup setting error: %r", error)
325
- apply_stylesheet(app, theme=theme)
359
+ apply_style = getattr(window, "apply_style", None)
360
+ if callable(apply_style):
361
+ # JEditor applies its own themes and qt_material's alike, with the editor's colours
362
+ apply_style(theme)
363
+ else:
364
+ apply_stylesheet(app, theme=theme)
@@ -1,8 +1,13 @@
1
1
  """The navigation panel: PyBreeze's areas as a tree that stays in view and can be searched.
2
2
 
3
- It is a dock at the left of the main window. Typing in its box keeps the lines
4
- that hold the text, and Enter or a double click on a line does what the menu
5
- entry it stands for does. What it lists is decided by ``navigation_model``.
3
+ Typing in its box keeps the lines that hold the text, and Enter or a double
4
+ click on a line does what the menu entry it stands for does. What it lists is
5
+ decided by ``navigation_model``.
6
+
7
+ ``NavigationPanel`` is the panel itself. Where JEditor's window has a shell it
8
+ is a view of the side bar, with an icon in the activity bar; ``NavigationDock``
9
+ holds one in a dock at the left of the main window, for a JEditor from before
10
+ its window had a shell.
6
11
  """
7
12
  from __future__ import annotations
8
13
 
@@ -16,26 +21,27 @@ from pybreeze.pybreeze_ui.navigation.navigation_model import CATEGORIES, Navigat
16
21
  from pybreeze.utils.logging.logger import pybreeze_logger
17
22
  from pybreeze.utils.ui_state import remember
18
23
 
19
- # The name the panel's visibility is remembered under (utils/ui_state.py)
24
+ # The name the dock's visibility is remembered under (utils/ui_state.py)
20
25
  VISIBLE_STATE = "navigation_visible"
26
+ # The panel's ID as a view of JEditor's shell, which its saved layout names
27
+ NAVIGATION_VIEW = "pybreeze_navigation"
21
28
  # The least width the panel asks for, in ems: room for a tool's name
22
29
  _MIN_WIDTH_EMS = 14
23
30
  # Where an item keeps the entry it stands for
24
31
  _ENTRY_ROLE = Qt.ItemDataRole.UserRole
25
32
 
26
33
 
27
- class NavigationDock(QDockWidget):
34
+ class NavigationPanel(QWidget):
28
35
  """The navigation tree with its search box.
29
36
 
30
37
  :param navigation: what each category holds, by the category's key
31
38
  (``navigation_model.build_navigation``)
32
- :param parent: the main window
39
+ :param parent: the Qt parent
33
40
  """
34
41
 
35
42
  def __init__(self, navigation: dict[str, list[NavigationEntry]], parent: QWidget | None = None) -> None:
36
43
  word = language_wrapper.language_word_dict
37
- super().__init__(word.get("navigation_dock_title"), parent)
38
- self.setObjectName("pybreeze_navigation")
44
+ super().__init__(parent)
39
45
 
40
46
  self.filter_edit = QLineEdit()
41
47
  self.filter_edit.setPlaceholderText(word.get("navigation_filter_placeholder"))
@@ -49,14 +55,12 @@ class NavigationDock(QDockWidget):
49
55
  self.status = StatusLine()
50
56
  self.status.hide()
51
57
 
52
- body = QWidget()
53
- layout = QVBoxLayout(body)
58
+ layout = QVBoxLayout(self)
54
59
  apply_spacing(layout, around=Space.TIGHT)
55
60
  layout.addWidget(self.filter_edit)
56
61
  layout.addWidget(self.tree)
57
62
  layout.addWidget(self.status)
58
- body.setMinimumWidth(_MIN_WIDTH_EMS * em(body))
59
- self.setWidget(body)
63
+ self.setMinimumWidth(_MIN_WIDTH_EMS * em(self))
60
64
 
61
65
  self._fill(navigation)
62
66
 
@@ -121,6 +125,30 @@ class NavigationDock(QDockWidget):
121
125
  item.setExpanded(True)
122
126
  return shown
123
127
 
128
+
129
+
130
+ class NavigationDock(QDockWidget):
131
+ """The navigation panel in a dock at the left of the main window.
132
+
133
+ :param navigation: what each category holds, by the category's key
134
+ (``navigation_model.build_navigation``)
135
+ :param parent: the main window
136
+ """
137
+
138
+ def __init__(self, navigation: dict[str, list[NavigationEntry]], parent: QWidget | None = None) -> None:
139
+ super().__init__(language_wrapper.language_word_dict.get("navigation_dock_title"), parent)
140
+ self.setObjectName("pybreeze_navigation")
141
+ self.panel = NavigationPanel(navigation)
142
+ # The panel's parts under the names the dock always had them
143
+ self.filter_edit = self.panel.filter_edit
144
+ self.tree = self.panel.tree
145
+ self.status = self.panel.status
146
+ self.setWidget(self.panel)
147
+
148
+ def apply_filter(self, text: str) -> None:
149
+ """Keep the lines that hold *text* (``NavigationPanel.apply_filter``)."""
150
+ self.panel.apply_filter(text)
151
+
124
152
  def closeEvent(self, event) -> None:
125
153
  # Closed with its own button: stay closed next time. The Dock menu's
126
154
  # entry remembers the same when it is used (main_ui.py).
@@ -1,11 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pybreeze_dev
3
- Version: 1.0.19
3
+ Version: 1.0.21
4
4
  Summary: IDE for multi automation
5
5
  Author-email: JE-Chen <jechenmailman@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/Integration-Automation/PyBreeze
7
7
  Project-URL: Code, https://github.com/Integration-Automation/PyBreeze
8
- Classifier: Programming Language :: Python :: 3.10
9
8
  Classifier: Programming Language :: Python :: 3.11
10
9
  Classifier: Programming Language :: Python :: 3.12
11
10
  Classifier: Programming Language :: Python :: 3.13
@@ -15,7 +14,7 @@ Classifier: Environment :: Win32 (MS Windows)
15
14
  Classifier: Environment :: MacOS X
16
15
  Classifier: Environment :: X11 Applications
17
16
  Classifier: Operating System :: OS Independent
18
- Requires-Python: >=3.10
17
+ Requires-Python: >=3.11
19
18
  Description-Content-Type: text/markdown
20
19
  License-File: LICENSE
21
20
  Requires-Dist: je-editor>=1.0.27
@@ -33,7 +32,7 @@ Dynamic: license-file
33
32
 
34
33
  # PyBreeze: The Automation-First IDE
35
34
 
36
- [![Python 3.10–3.14](https://img.shields.io/badge/python-3.10--3.14-blue.svg)](https://www.python.org/downloads/)
35
+ [![Python 3.11–3.14](https://img.shields.io/badge/python-3.11--3.14-blue.svg)](https://www.python.org/downloads/)
37
36
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
38
37
  [![PySide6](https://img.shields.io/badge/GUI-PySide6-green.svg)](https://doc.qt.io/qtforpython/)
39
38
  [![Documentation](https://readthedocs.org/projects/pybreeze/badge/?version=latest)](https://pybreeze.readthedocs.io/en/latest/index.html)
@@ -44,7 +43,11 @@ Dynamic: license-file
44
43
 
45
44
  ![PyBreeze main window](images/main_window.png)
46
45
 
47
- *The main window: an APITestka action file open in the editor, project tree on the left, run/format/debug/terminal panes below.*
46
+ *The main window in the default theme: an APITestka action file open in the editor, the Navigation view in the side bar with the activity bar at its left, and the output, problems, terminal and debug panes below.*
47
+
48
+ ![PyBreeze main window, light theme](images/main_window_light.png)
49
+
50
+ *The same window in JEditor Light, with the Explorer in the side bar.*
48
51
 
49
52
  ---
50
53
 
@@ -108,7 +111,7 @@ Each module gets the same menu shape: **Run** (single script, batch directory, w
108
111
 
109
112
  - **Automation keyword sets** — the `AT_*` / GUI / Web / Load keyword sets are registered for `.json`, and TestPioneer's schema for `.yml` and `.yaml`, on top of JEditor's language support. JEditor does not colour them yet: it highlights those files with its own rules for the suffix, which leave registered keywords out
110
113
  - **Code editor** — built on [JEditor](https://github.com/Integration-Automation/JEDITOR): tabs, project tree, format checker, debugger, terminal and a git client pane
111
- - **Navigation panel** — a dock at the left lists what the menus hold as one tree (Automation, Tools, Settings): type in its box to find a tool or a command by name, then press Enter or double-click to open it. **Dock ▸ Navigation** shows and hides it, and a panel closed on purpose stays closed at the next start
114
+ - **Navigation panel** — a view of the side bar, with its own icon in the activity bar, lists what the menus hold as one tree (Automation, Tools, Settings): type in its box to find a tool or a command by name, then press Enter or double-click to open it. It is the view shown on a first start; the activity bar or **View ▸ Navigation** switches to it, and the view left open is the one shown at the next start
112
115
  - **Fits a small screen** — a tool tab never asks for more than 60 font heights of width: a row of buttons too long for the tab wraps onto the next line instead of pushing the window wider than the display
113
116
  - **Script execution** — single or batch, each run in a window of its own with a Stop button (Run ▸ Stop All Program stops them all), which asks whether to stop the run when it is closed while the run goes on; action files are passed by path, and a script from the tab in front that is too long for a Windows command line (~32 KB) goes through a temporary file
114
117
  - **Report generation** — HTML / JSON / XML after a run, with optional email delivery
@@ -413,7 +416,7 @@ pip install -r requirements.txt
413
416
 
414
417
  ### System requirements
415
418
 
416
- - **Python**: 3.10 – 3.14
419
+ - **Python**: 3.11 – 3.14
417
420
  - **OS**: Windows, macOS, Linux
418
421
  - **GUI**: PySide6 6.11.2 (installed automatically)
419
422
 
@@ -429,8 +432,8 @@ python exe/start_pybreeze.py # from the exe directory
429
432
  ```python
430
433
  from pybreeze import start_editor
431
434
 
432
- start_editor() # the theme picked from UI Style (dark_amber until one is)
433
- start_editor(theme="dark_teal.xml") # any qt_material theme; it becomes the picked one
435
+ start_editor() # the theme picked from UI Style (JEditor Dark until one is)
436
+ start_editor(theme="jeditor_light") # a JEditor theme, or any qt_material one such as "dark_teal.xml"; it becomes the picked one
434
437
  ```
435
438
 
436
439
  Once launched:
@@ -548,7 +551,7 @@ python -m pytest test/test_utils/ -v --tb=short
548
551
 
549
552
  - **Unit tests** — `test/test_utils/`, covering the pure-logic layer (curl and HAR parsing, header analysis, SSRF validation, JWT, hashing, timestamps, diffing) plus headless Qt widget tests via `QT_QPA_PLATFORM=offscreen`, with Hypothesis property tests over the parsers. The SSH terminal and the SFTP file tree also log in to an SSH server the tests start on the loopback address, which serves a temporary folder over SFTP
550
553
  - **Startup tests** — `test/unit_test/start_automation/` launches the IDE in debug mode and verifies it comes up and exits cleanly
551
- - **CI** — GitHub Actions: the whole suite on Windows across Python 3.10 – 3.14, and a short set of platform smoke tests on Linux and macOS, on every push and PR plus a nightly run; a push to `dev` that passes the suite also publishes `pybreeze_dev` when the package changed
554
+ - **CI** — GitHub Actions: the whole suite on Windows across Python 3.11 – 3.14, and a short set of platform smoke tests on Linux and macOS, on every push and PR plus a nightly run; a push to `dev` that passes the suite also publishes `pybreeze_dev` when the package changed
552
555
  - **Static analysis** — SonarCloud, Codacy and Bandit
553
556
 
554
557
  ---
@@ -572,4 +575,4 @@ MIT — see [LICENSE](LICENSE). Copyright (c) 2022 JE-Chen
572
575
 
573
576
  ---
574
577
 
575
- <sub>Screenshots are rendered from the actual PyBreeze widgets on Windows 11 with the default `dark_amber` theme; the sample data in each tool is real input processed by the real code path.</sub>
578
+ <sub>Screenshots are rendered from the actual PyBreeze widgets on Windows 11: the main window and the menus in the default JEditor Dark theme, the tool tabs in `dark_amber`, the default when those were taken; the sample data in each tool is real input processed by the real code path.</sub>
@@ -7,12 +7,12 @@ build-backend = "setuptools.build_meta"
7
7
 
8
8
  [project]
9
9
  name = "pybreeze_dev"
10
- version = "1.0.19"
10
+ version = "1.0.21"
11
11
  authors = [
12
12
  { name = "JE-Chen", email = "jechenmailman@gmail.com" },
13
13
  ]
14
14
  description = "IDE for multi automation"
15
- requires-python = ">=3.10"
15
+ requires-python = ">=3.11"
16
16
  license-files = ["LICENSE"]
17
17
  dependencies = [
18
18
  "je-editor>=1.0.27", "je_auto_control", "je_web_runner",
@@ -21,7 +21,6 @@ dependencies = [
21
21
  "jupyterlab",
22
22
  ]
23
23
  classifiers = [
24
- "Programming Language :: Python :: 3.10",
25
24
  "Programming Language :: Python :: 3.11",
26
25
  "Programming Language :: Python :: 3.12",
27
26
  "Programming Language :: Python :: 3.13",
File without changes