PyBreeze 1.0.24__tar.gz → 1.0.26__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 (184) hide show
  1. {pybreeze-1.0.24 → pybreeze-1.0.26}/PKG-INFO +25 -1
  2. {pybreeze-1.0.24 → pybreeze-1.0.26}/README.md +24 -0
  3. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend_multi_language/extend_english.py +215 -0
  4. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend_multi_language/extend_traditional_chinese.py +215 -0
  5. pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/tools/tools_menu.py +424 -0
  6. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/curl_import_gui.py +134 -0
  7. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/diff_gui.py +76 -0
  8. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/hash_gui.py +57 -0
  9. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/header_analyzer_gui.py +108 -0
  10. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/http_status_gui.py +67 -0
  11. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/json_format_gui.py +83 -0
  12. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/jwt_decoder_gui.py +101 -0
  13. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/output_actions.py +131 -0
  14. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/query_json_gui.py +84 -0
  15. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/regex_gui.py +106 -0
  16. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/response_inspector_gui.py +181 -0
  17. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/timestamp_gui.py +84 -0
  18. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/tool_tabs.py +31 -0
  19. pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui/url_builder_gui.py +89 -0
  20. pybreeze-1.0.26/pybreeze/utils/curl_import/curl_parser.py +439 -0
  21. pybreeze-1.0.26/pybreeze/utils/curl_import/request_body.py +67 -0
  22. pybreeze-1.0.26/pybreeze/utils/curl_import/request_codegen.py +152 -0
  23. pybreeze-1.0.26/pybreeze/utils/curl_import/script_templates.py +221 -0
  24. pybreeze-1.0.26/pybreeze/utils/diff_tools/text_diff.py +76 -0
  25. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/utils/exception/exception_tags.py +27 -0
  26. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/utils/exception/exceptions.py +36 -0
  27. pybreeze-1.0.26/pybreeze/utils/hash_tools/hash_text.py +49 -0
  28. pybreeze-1.0.26/pybreeze/utils/header_tools/__init__.py +0 -0
  29. pybreeze-1.0.26/pybreeze/utils/header_tools/header_analyzer.py +318 -0
  30. pybreeze-1.0.26/pybreeze/utils/http_reference/__init__.py +0 -0
  31. pybreeze-1.0.26/pybreeze/utils/http_reference/status_codes.py +91 -0
  32. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/utils/json_format/json_process.py +18 -0
  33. pybreeze-1.0.26/pybreeze/utils/jwt_tools/__init__.py +0 -0
  34. pybreeze-1.0.26/pybreeze/utils/jwt_tools/jwt_decoder.py +116 -0
  35. pybreeze-1.0.26/pybreeze/utils/logging/__init__.py +0 -0
  36. pybreeze-1.0.26/pybreeze/utils/manager/__init__.py +0 -0
  37. pybreeze-1.0.26/pybreeze/utils/manager/package_manager/__init__.py +0 -0
  38. pybreeze-1.0.26/pybreeze/utils/network/__init__.py +0 -0
  39. pybreeze-1.0.26/pybreeze/utils/query_tools/__init__.py +0 -0
  40. pybreeze-1.0.26/pybreeze/utils/query_tools/query_convert.py +89 -0
  41. pybreeze-1.0.26/pybreeze/utils/regex_tools/__init__.py +0 -0
  42. pybreeze-1.0.26/pybreeze/utils/regex_tools/regex_tester.py +113 -0
  43. pybreeze-1.0.26/pybreeze/utils/response_inspector/__init__.py +0 -0
  44. pybreeze-1.0.26/pybreeze/utils/response_inspector/response_analyzer.py +134 -0
  45. pybreeze-1.0.26/pybreeze/utils/timestamp_tools/__init__.py +0 -0
  46. pybreeze-1.0.26/pybreeze/utils/timestamp_tools/timestamp_converter.py +104 -0
  47. pybreeze-1.0.26/pybreeze/utils/url_tools/__init__.py +0 -0
  48. pybreeze-1.0.26/pybreeze/utils/url_tools/url_convert.py +117 -0
  49. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze.egg-info/PKG-INFO +25 -1
  50. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze.egg-info/SOURCES.txt +41 -1
  51. {pybreeze-1.0.24 → pybreeze-1.0.26}/pyproject.toml +1 -1
  52. pybreeze-1.0.24/pybreeze/pybreeze_ui/menu/tools/tools_menu.py +0 -186
  53. {pybreeze-1.0.24 → pybreeze-1.0.26}/LICENSE +0 -0
  54. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/__init__.py +0 -0
  55. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/__main__.py +0 -0
  56. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/__init__.py +0 -0
  57. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/mail_thunder_extend/__init__.py +0 -0
  58. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/mail_thunder_extend/mail_thunder_setting.py +0 -0
  59. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/__init__.py +0 -0
  60. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/api_testka/__init__.py +0 -0
  61. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/api_testka/api_testka_process.py +0 -0
  62. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/auto_control/__init__.py +0 -0
  63. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/auto_control/auto_control_process.py +0 -0
  64. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/file_automation/__init__.py +0 -0
  65. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/file_automation/file_automation_process.py +0 -0
  66. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/file_runner_process.py +0 -0
  67. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/load_density/__init__.py +0 -0
  68. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/load_density/load_density_process.py +0 -0
  69. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/mail_thunder/__init__.py +0 -0
  70. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/mail_thunder/mail_thunder_process.py +0 -0
  71. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/process_executor_utils.py +0 -0
  72. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/python_task_process_manager.py +0 -0
  73. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/queue_pump.py +0 -0
  74. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/test_pioneer/__init__.py +0 -0
  75. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/test_pioneer/test_pioneer_process_manager.py +0 -0
  76. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/web_runner/__init__.py +0 -0
  77. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend/process_executor/web_runner/web_runner_process.py +0 -0
  78. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend_multi_language/__init__.py +0 -0
  79. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/extend_multi_language/update_language_dict.py +0 -0
  80. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/__init__.py +0 -0
  81. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/connect_gui/__init__.py +0 -0
  82. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/connect_gui/ssh/__init__.py +0 -0
  83. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_command_widget.py +0 -0
  84. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_file_viewer_widget.py +0 -0
  85. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_host_key_policy.py +0 -0
  86. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_key_loader.py +0 -0
  87. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_login_widget.py +0 -0
  88. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_main_widget.py +0 -0
  89. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/connect_gui/url/__init__.py +0 -0
  90. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/connect_gui/url/ai_code_review_gui.py +0 -0
  91. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/diagram_editor/__init__.py +0 -0
  92. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/diagram_editor/diagram_commands.py +0 -0
  93. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/diagram_editor/diagram_editor_widget.py +0 -0
  94. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/diagram_editor/diagram_items.py +0 -0
  95. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/diagram_editor/diagram_mermaid_parser.py +0 -0
  96. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/diagram_editor/diagram_net_utils.py +0 -0
  97. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/diagram_editor/diagram_property_panel.py +0 -0
  98. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/diagram_editor/diagram_scene.py +0 -0
  99. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/diagram_editor/diagram_view.py +0 -0
  100. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/editor_main/__init__.py +0 -0
  101. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/editor_main/file_tree_context_menu.py +0 -0
  102. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/editor_main/main_ui.py +0 -0
  103. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/__init__.py +0 -0
  104. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/ai_gui_global_variable.py +0 -0
  105. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/__init__.py +0 -0
  106. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/code_review_thread.py +0 -0
  107. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/cot_code_review_gui.py +0 -0
  108. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/__init__.py +0 -0
  109. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/__init__.py +0 -0
  110. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/code_smell_detector.py +0 -0
  111. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_code_review.py +0 -0
  112. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_summary_prompt.py +0 -0
  113. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/global_rule.py +0 -0
  114. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge.py +0 -0
  115. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge_single_review.py +0 -0
  116. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/linter.py +0 -0
  117. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/step_by_step_analysis.py +0 -0
  118. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/total_summary.py +0 -0
  119. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_prompt_editor_widget.py +0 -0
  120. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/prompt_file_io.py +0 -0
  121. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_editor_widget.py +0 -0
  122. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/__init__.py +0 -0
  123. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_explainer.py +0 -0
  124. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_review.py +0 -0
  125. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/skills/__init__.py +0 -0
  126. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/extend_ai_gui/skills/skills_send_gui.py +0 -0
  127. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/jupyter_lab_gui/__init__.py +0 -0
  128. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyter_lab_thread.py +0 -0
  129. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyter_lab_widget.py +0 -0
  130. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/__init__.py +0 -0
  131. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/__init__.py +0 -0
  132. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/__init__.py +0 -0
  133. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/build_api_testka_menu.py +0 -0
  134. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/__init__.py +0 -0
  135. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/build_autocontrol_menu.py +0 -0
  136. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/__init__.py +0 -0
  137. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/build_automation_file_menu.py +0 -0
  138. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/automation_menu_factory.py +0 -0
  139. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/__init__.py +0 -0
  140. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/build_load_density_menu.py +0 -0
  141. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/__init__.py +0 -0
  142. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/build_mail_thunder_menu.py +0 -0
  143. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu/__init__.py +0 -0
  144. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu/build_test_pioneer_menu.py +0 -0
  145. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/__init__.py +0 -0
  146. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/build_webrunner_menu.py +0 -0
  147. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/build_menubar.py +0 -0
  148. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu/__init__.py +0 -0
  149. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu/jupyter_lab_tab.py +0 -0
  150. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/install_menu/__init__.py +0 -0
  151. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/install_menu/automation_menu/__init__.py +0 -0
  152. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/install_menu/automation_menu/build_automation_install_menu.py +0 -0
  153. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/install_menu/install_utils.py +0 -0
  154. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/install_menu/tools_menu/__init__.py +0 -0
  155. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/install_menu/tools_menu/build_tool_install_menu.py +0 -0
  156. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/menu_utils.py +0 -0
  157. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/plugin_menu/__init__.py +0 -0
  158. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/plugin_menu/build_plugin_menu.py +0 -0
  159. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/plugin_menu/build_run_with_menu.py +0 -0
  160. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/menu/tools/__init__.py +0 -0
  161. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/show_code_window/__init__.py +0 -0
  162. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/show_code_window/code_window.py +0 -0
  163. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/syntax/__init__.py +0 -0
  164. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/syntax/syntax_extend.py +0 -0
  165. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/pybreeze_ui/syntax/syntax_keyword.py +0 -0
  166. {pybreeze-1.0.24/pybreeze/utils → pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui}/__init__.py +0 -0
  167. {pybreeze-1.0.24/pybreeze/utils/exception → pybreeze-1.0.26/pybreeze/utils}/__init__.py +0 -0
  168. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/utils/app_dirs.py +0 -0
  169. {pybreeze-1.0.24/pybreeze/utils/file_process → pybreeze-1.0.26/pybreeze/utils/curl_import}/__init__.py +0 -0
  170. {pybreeze-1.0.24/pybreeze/utils/logging → pybreeze-1.0.26/pybreeze/utils/diff_tools}/__init__.py +0 -0
  171. {pybreeze-1.0.24/pybreeze/utils/manager → pybreeze-1.0.26/pybreeze/utils/exception}/__init__.py +0 -0
  172. {pybreeze-1.0.24/pybreeze/utils/manager/package_manager → pybreeze-1.0.26/pybreeze/utils/file_process}/__init__.py +0 -0
  173. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/utils/file_process/get_dir_file_list.py +0 -0
  174. {pybreeze-1.0.24/pybreeze/utils/network → pybreeze-1.0.26/pybreeze/utils/hash_tools}/__init__.py +0 -0
  175. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/utils/json_format/__init__.py +0 -0
  176. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/utils/logging/logger.py +0 -0
  177. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/utils/manager/package_manager/package_manager_class.py +0 -0
  178. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/utils/network/http_client.py +0 -0
  179. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/utils/network/url_validation.py +0 -0
  180. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze/utils/subprocess_util.py +0 -0
  181. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze.egg-info/dependency_links.txt +0 -0
  182. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze.egg-info/requires.txt +0 -0
  183. {pybreeze-1.0.24 → pybreeze-1.0.26}/pybreeze.egg-info/top_level.txt +0 -0
  184. {pybreeze-1.0.24 → pybreeze-1.0.26}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pybreeze
3
- Version: 1.0.24
3
+ Version: 1.0.26
4
4
  Summary: IDE for multi automation
5
5
  Author-email: JE-Chen <jechenmailman@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/Intergration-Automation-Testing/AutomationEditor
@@ -109,6 +109,18 @@ PyBreeze is not just a code editor — it is a command center for the automation
109
109
  - Mermaid `flowchart` / `graph` import
110
110
  - Save/Open as `.diagram.json`, export to PNG or SVG
111
111
  - Undo/redo, align, distribute, grid, snap, and zoom controls
112
+ - **cURL Import** — Paste a `curl` command copied from your browser's dev tools and generate a ready-to-run script for the target of your choice: **Python `requests`**, an **APITestka Python** snippet (`test_api_method_requests(...)`), an **APITestka JSON action** (`[["AT_test_api_method", {...}]]`) that `execute_files` runs directly, or a **LoadDensity** Locust load-test (`start_test(...)`). (These are the HTTP-oriented modules; a curl request has no meaningful mapping to the browser or desktop-GUI automation modules.) Parses the method, URL, headers, body, basic auth, `-G` query parameters, `-F` multipart form fields (file uploads become `files=open(...)`), the `--json` shortcut (which also sets the JSON `Content-Type`/`Accept`), and `-d @file` bodies (which become `open(...).read()`, while `--data-raw` stays literal) — all with multi-line `\` / `^` continuations. It knows the arity of curl's common flags, so value-taking options like `--max-time 30` or `-o out.json` never leak into the URL; it URL-encodes `--data-urlencode` values the way curl does; and it infers `POST` when a body or form is present and sends JSON bodies as JSON. Targets include Python `requests`, a ready-to-run **pytest test** (a named `test_...` function that sends the request and asserts the status), APITestka (Python and JSON action), and a LoadDensity load test. Pick one from the dropdown, then copy the result, **open it straight into a new editor tab**, or **save it to a `.py` / `.json` file** (the extension follows the chosen target). A repeated `-H` is handled the way HTTP handles it — the values are combined into one header (with `; ` for cookies) rather than the last one silently winning, and names are matched case-insensitively so an explicit header always beats one implied by another flag. One click also **hands the parsed URL to the URL parser/builder**, query string and all. The parser is pure logic and never executes the command.
113
+ - **JWT Decoder** — Paste a JSON Web Token and read its header and payload as pretty-printed JSON, with standard timestamp claims (`exp`, `iat`, `nbf`, `auth_time`) rendered as readable UTC times. Inspection only — the signature is never verified and the token is never trusted.
114
+ - **Timestamp Converter** — Enter a Unix epoch value (seconds or milliseconds, auto-detected) or an ISO-8601 date-time (with `Z` or an offset) and get every representation back in UTC. Deterministic and independent of the local time zone.
115
+ - **Hash Generator** — Compute SHA-256, SHA-512, SHA-1 and MD5 digests of any text at once. A general-purpose checksum tool (MD5/SHA-1 are provided for interoperability with `usedforsecurity=False`, never for security decisions).
116
+ - **Query ⇄ JSON** — Convert an `application/x-www-form-urlencoded` query string to pretty JSON and back, URL-decoding and -encoding as needed. Repeated keys become JSON arrays and vice versa. Copy the result, open it in an editor tab, or save it to a file.
117
+ - **URL Parser / Builder** — Paste a URL to see its scheme, host, port, path, query, fragment and credentials as an editable JSON object, tweak any part, and turn it back into a URL. Round-trips both ways, brackets IPv6 literals, and re-encodes query parameters for you. The cURL importer can send a request's URL straight here.
118
+ - **HTTP Header Analyzer** — Paste a request or response header block (from dev tools, `curl -i`, or a proxy log) and read back every field plus what is worth knowing about it: names sent more than once, `Set-Cookie` entries missing `Secure` / `HttpOnly` / `SameSite`, a wildcard CORS policy (and the wildcard-plus-credentials combination browsers reject outright), an HSTS `max-age` too short to survive a restart, CSP `unsafe-inline` / `unsafe-eval`, product banners, deprecated headers, and — for responses — the security headers that are absent. Headers carrying credentials are reported by name only; their values are never copied into the report. The Response Inspector hands its headers here in one click.
119
+ - **Regex Tester** — Try a regular expression against sample text with `IGNORECASE` / `MULTILINE` / `DOTALL` / `VERBOSE` flags, and see every match with its offsets, numbered groups and named groups. Invalid patterns report a friendly error instead of crashing.
120
+ - **HTTP Status Reference** — Search the full HTTP status code table (sourced from the standard library, so it stays current) by code prefix or keyword, with the reason phrase, description and status class for each.
121
+ - **Text Diff** — Compare two pieces of text (for example an expected vs. actual API response) side by side and get a unified diff plus a one-line summary of how many lines were added or removed. Copy the diff, open it in an editor tab, or save it to a file.
122
+ - **JSON Format** — Pretty-print or minify a JSON payload, with a clear validation error when the input is not valid JSON. Copy the result, open it in a new editor tab, or save it to a file.
123
+ - **Response Inspector** — Paste a raw HTTP response and get a decoded summary in one step: the status code is looked up in the HTTP reference, headers are parsed, a JSON body is pretty-printed, and any JWTs anywhere in the text (for example an `Authorization: Bearer` header) are decoded with their timestamp claims shown in UTC. Ties the HTTP-status, JSON-format and JWT tools together, and can open a found status code, JWT, or the whole header block directly in its dedicated tool tab, pre-filled.
112
124
  - **File Tree Context Menu** — Right-click any file or folder in the project tree to create files/folders, rename, delete, copy absolute or relative paths, or reveal the item in your platform file manager. Renaming or deleting a file that is currently open in an editor tab keeps the tab in sync.
113
125
  - **Package Manager** — Install automation modules and build tools directly from the IDE menu without leaving the editor.
114
126
  - **Integrated Documentation** — Quick access to documentation and GitHub pages for each automation module directly from the menu bar.
@@ -239,6 +251,18 @@ PyBreeze UI (PySide6)
239
251
  │ ├── Skill Prompt Editor
240
252
  │ ├── Skill Send GUI
241
253
  │ ├── Diagram Editor (WYSIWYG, Mermaid import, PNG/SVG export)
254
+ │ ├── cURL Import (curl → Python requests code)
255
+ │ ├── JWT Decoder (header/payload inspection)
256
+ │ ├── Timestamp Converter (epoch ⇄ ISO-8601)
257
+ │ ├── Hash Generator (SHA-256/512, SHA-1, MD5)
258
+ │ ├── Query ⇄ JSON Converter
259
+ │ ├── URL Parser / Builder (URL ⇄ JSON parts)
260
+ │ ├── HTTP Header Analyzer (duplicates, cookie flags, security headers)
261
+ │ ├── Regex Tester
262
+ │ ├── HTTP Status Reference
263
+ │ ├── Text Diff
264
+ │ ├── JSON Format (pretty / minify)
265
+ │ ├── Response Inspector (status + JSON + JWT)
242
266
  │ └── JupyterLab Integration
243
267
  └── Install Menu
244
268
  ├── Automation Module Installers
@@ -76,6 +76,18 @@ PyBreeze is not just a code editor — it is a command center for the automation
76
76
  - Mermaid `flowchart` / `graph` import
77
77
  - Save/Open as `.diagram.json`, export to PNG or SVG
78
78
  - Undo/redo, align, distribute, grid, snap, and zoom controls
79
+ - **cURL Import** — Paste a `curl` command copied from your browser's dev tools and generate a ready-to-run script for the target of your choice: **Python `requests`**, an **APITestka Python** snippet (`test_api_method_requests(...)`), an **APITestka JSON action** (`[["AT_test_api_method", {...}]]`) that `execute_files` runs directly, or a **LoadDensity** Locust load-test (`start_test(...)`). (These are the HTTP-oriented modules; a curl request has no meaningful mapping to the browser or desktop-GUI automation modules.) Parses the method, URL, headers, body, basic auth, `-G` query parameters, `-F` multipart form fields (file uploads become `files=open(...)`), the `--json` shortcut (which also sets the JSON `Content-Type`/`Accept`), and `-d @file` bodies (which become `open(...).read()`, while `--data-raw` stays literal) — all with multi-line `\` / `^` continuations. It knows the arity of curl's common flags, so value-taking options like `--max-time 30` or `-o out.json` never leak into the URL; it URL-encodes `--data-urlencode` values the way curl does; and it infers `POST` when a body or form is present and sends JSON bodies as JSON. Targets include Python `requests`, a ready-to-run **pytest test** (a named `test_...` function that sends the request and asserts the status), APITestka (Python and JSON action), and a LoadDensity load test. Pick one from the dropdown, then copy the result, **open it straight into a new editor tab**, or **save it to a `.py` / `.json` file** (the extension follows the chosen target). A repeated `-H` is handled the way HTTP handles it — the values are combined into one header (with `; ` for cookies) rather than the last one silently winning, and names are matched case-insensitively so an explicit header always beats one implied by another flag. One click also **hands the parsed URL to the URL parser/builder**, query string and all. The parser is pure logic and never executes the command.
80
+ - **JWT Decoder** — Paste a JSON Web Token and read its header and payload as pretty-printed JSON, with standard timestamp claims (`exp`, `iat`, `nbf`, `auth_time`) rendered as readable UTC times. Inspection only — the signature is never verified and the token is never trusted.
81
+ - **Timestamp Converter** — Enter a Unix epoch value (seconds or milliseconds, auto-detected) or an ISO-8601 date-time (with `Z` or an offset) and get every representation back in UTC. Deterministic and independent of the local time zone.
82
+ - **Hash Generator** — Compute SHA-256, SHA-512, SHA-1 and MD5 digests of any text at once. A general-purpose checksum tool (MD5/SHA-1 are provided for interoperability with `usedforsecurity=False`, never for security decisions).
83
+ - **Query ⇄ JSON** — Convert an `application/x-www-form-urlencoded` query string to pretty JSON and back, URL-decoding and -encoding as needed. Repeated keys become JSON arrays and vice versa. Copy the result, open it in an editor tab, or save it to a file.
84
+ - **URL Parser / Builder** — Paste a URL to see its scheme, host, port, path, query, fragment and credentials as an editable JSON object, tweak any part, and turn it back into a URL. Round-trips both ways, brackets IPv6 literals, and re-encodes query parameters for you. The cURL importer can send a request's URL straight here.
85
+ - **HTTP Header Analyzer** — Paste a request or response header block (from dev tools, `curl -i`, or a proxy log) and read back every field plus what is worth knowing about it: names sent more than once, `Set-Cookie` entries missing `Secure` / `HttpOnly` / `SameSite`, a wildcard CORS policy (and the wildcard-plus-credentials combination browsers reject outright), an HSTS `max-age` too short to survive a restart, CSP `unsafe-inline` / `unsafe-eval`, product banners, deprecated headers, and — for responses — the security headers that are absent. Headers carrying credentials are reported by name only; their values are never copied into the report. The Response Inspector hands its headers here in one click.
86
+ - **Regex Tester** — Try a regular expression against sample text with `IGNORECASE` / `MULTILINE` / `DOTALL` / `VERBOSE` flags, and see every match with its offsets, numbered groups and named groups. Invalid patterns report a friendly error instead of crashing.
87
+ - **HTTP Status Reference** — Search the full HTTP status code table (sourced from the standard library, so it stays current) by code prefix or keyword, with the reason phrase, description and status class for each.
88
+ - **Text Diff** — Compare two pieces of text (for example an expected vs. actual API response) side by side and get a unified diff plus a one-line summary of how many lines were added or removed. Copy the diff, open it in an editor tab, or save it to a file.
89
+ - **JSON Format** — Pretty-print or minify a JSON payload, with a clear validation error when the input is not valid JSON. Copy the result, open it in a new editor tab, or save it to a file.
90
+ - **Response Inspector** — Paste a raw HTTP response and get a decoded summary in one step: the status code is looked up in the HTTP reference, headers are parsed, a JSON body is pretty-printed, and any JWTs anywhere in the text (for example an `Authorization: Bearer` header) are decoded with their timestamp claims shown in UTC. Ties the HTTP-status, JSON-format and JWT tools together, and can open a found status code, JWT, or the whole header block directly in its dedicated tool tab, pre-filled.
79
91
  - **File Tree Context Menu** — Right-click any file or folder in the project tree to create files/folders, rename, delete, copy absolute or relative paths, or reveal the item in your platform file manager. Renaming or deleting a file that is currently open in an editor tab keeps the tab in sync.
80
92
  - **Package Manager** — Install automation modules and build tools directly from the IDE menu without leaving the editor.
81
93
  - **Integrated Documentation** — Quick access to documentation and GitHub pages for each automation module directly from the menu bar.
@@ -206,6 +218,18 @@ PyBreeze UI (PySide6)
206
218
  │ ├── Skill Prompt Editor
207
219
  │ ├── Skill Send GUI
208
220
  │ ├── Diagram Editor (WYSIWYG, Mermaid import, PNG/SVG export)
221
+ │ ├── cURL Import (curl → Python requests code)
222
+ │ ├── JWT Decoder (header/payload inspection)
223
+ │ ├── Timestamp Converter (epoch ⇄ ISO-8601)
224
+ │ ├── Hash Generator (SHA-256/512, SHA-1, MD5)
225
+ │ ├── Query ⇄ JSON Converter
226
+ │ ├── URL Parser / Builder (URL ⇄ JSON parts)
227
+ │ ├── HTTP Header Analyzer (duplicates, cookie flags, security headers)
228
+ │ ├── Regex Tester
229
+ │ ├── HTTP Status Reference
230
+ │ ├── Text Diff
231
+ │ ├── JSON Format (pretty / minify)
232
+ │ ├── Response Inspector (status + JSON + JWT)
209
233
  │ └── JupyterLab Integration
210
234
  └── Install Menu
211
235
  ├── Automation Module Installers
@@ -313,6 +313,221 @@ pybreeze_english_word_dict = {
313
313
  "extend_tools_menu_diagram_editor_tab_label": "Diagram Editor",
314
314
  "extend_tools_menu_diagram_editor_dock_action": "Diagram Editor Dock",
315
315
  "extend_tools_menu_diagram_editor_dock_title": "Diagram Editor",
316
+ # cURL Import — Menu
317
+ "extend_tools_menu_curl_import_tab_action": "cURL Import Tab",
318
+ "extend_tools_menu_curl_import_tab_label": "cURL Import",
319
+ "extend_tools_menu_curl_import_dock_action": "cURL Import Dock",
320
+ "extend_tools_menu_curl_import_dock_title": "cURL Import",
321
+ # cURL Import — Widget
322
+ "curl_import_input_label": "Paste a curl command:",
323
+ "curl_import_input_placeholder": "curl 'https://api.example.com/v1/items' -H 'Accept: application/json'",
324
+ "curl_import_convert_button": "Convert to Python requests",
325
+ "curl_import_output_label": "Generated code:",
326
+ "curl_import_error": "Could not parse the curl command: {error}",
327
+ "curl_import_empty_hint": "Paste a curl command above, then click convert.",
328
+ "curl_import_target_label": "Generate for:",
329
+ "curl_import_target_requests": "Python requests",
330
+ "curl_import_target_pytest": "pytest test",
331
+ "curl_import_target_apitestka_python": "APITestka (Python)",
332
+ "curl_import_target_apitestka_action": "APITestka (JSON action)",
333
+ "curl_import_target_loaddensity_python": "LoadDensity (Python)",
334
+ "curl_import_open_url_button": "Open URL in parser / builder",
335
+ # Shared output actions (copy / open in editor / save to file)
336
+ "output_actions_copy": "Copy",
337
+ "output_actions_open_editor": "Open in editor tab",
338
+ "output_actions_save": "Save to file...",
339
+ "output_actions_editor_tab_label": "Generated",
340
+ "output_actions_save_dialog_title": "Save output",
341
+ "output_actions_filter_python": "Python (*.py)",
342
+ "output_actions_filter_json": "JSON (*.json)",
343
+ "output_actions_filter_text": "Text (*.txt)",
344
+ # JWT Decoder — Menu
345
+ "extend_tools_menu_jwt_decoder_tab_action": "JWT Decoder Tab",
346
+ "extend_tools_menu_jwt_decoder_tab_label": "JWT Decoder",
347
+ "extend_tools_menu_jwt_decoder_dock_action": "JWT Decoder Dock",
348
+ "extend_tools_menu_jwt_decoder_dock_title": "JWT Decoder",
349
+ # JWT Decoder — Widget
350
+ "jwt_decoder_input_label": "Paste a JWT (header.payload.signature):",
351
+ "jwt_decoder_input_placeholder": "<base64-header>.<base64-payload>.<signature>",
352
+ "jwt_decoder_decode_button": "Decode (no signature check)",
353
+ "jwt_decoder_output_label": "Decoded token:",
354
+ "jwt_decoder_header_label": "== Header ==",
355
+ "jwt_decoder_payload_label": "== Payload ==",
356
+ "jwt_decoder_times_label": "== Timestamps (UTC) ==",
357
+ "jwt_decoder_error": "Could not decode the token: {error}",
358
+ "jwt_decoder_empty_hint": "Paste a JWT above, then click decode.",
359
+ # Timestamp Converter — Menu
360
+ "extend_tools_menu_timestamp_tab_action": "Timestamp Converter Tab",
361
+ "extend_tools_menu_timestamp_tab_label": "Timestamp",
362
+ "extend_tools_menu_timestamp_dock_action": "Timestamp Converter Dock",
363
+ "extend_tools_menu_timestamp_dock_title": "Timestamp",
364
+ # Timestamp Converter — Widget
365
+ "timestamp_input_label": "Epoch (seconds or ms) or ISO-8601 date-time:",
366
+ "timestamp_input_placeholder": "1609459200 or 2021-01-01T00:00:00Z",
367
+ "timestamp_convert_button": "Convert",
368
+ "timestamp_output_label": "All representations (UTC):",
369
+ "timestamp_epoch_seconds_label": "Epoch (seconds)",
370
+ "timestamp_epoch_millis_label": "Epoch (milliseconds)",
371
+ "timestamp_iso_label": "ISO-8601 (UTC)",
372
+ "timestamp_error": "Could not convert the value: {error}",
373
+ "timestamp_empty_hint": "Enter an epoch value or an ISO date-time above.",
374
+ # Hash Generator — Menu
375
+ "extend_tools_menu_hash_tab_action": "Hash Generator Tab",
376
+ "extend_tools_menu_hash_tab_label": "Hash",
377
+ "extend_tools_menu_hash_dock_action": "Hash Generator Dock",
378
+ "extend_tools_menu_hash_dock_title": "Hash",
379
+ # Hash Generator — Widget
380
+ "hash_input_label": "Text to hash:",
381
+ "hash_input_placeholder": "Type or paste text to hash...",
382
+ "hash_button": "Compute hashes",
383
+ "hash_output_label": "Digests:",
384
+ # Query <-> JSON — Menu
385
+ "extend_tools_menu_query_json_tab_action": "Query / JSON Tab",
386
+ "extend_tools_menu_query_json_tab_label": "Query / JSON",
387
+ "extend_tools_menu_query_json_dock_action": "Query / JSON Dock",
388
+ "extend_tools_menu_query_json_dock_title": "Query / JSON",
389
+ # Query <-> JSON — Widget
390
+ "query_json_input_label": "Query string or JSON object:",
391
+ "query_json_input_placeholder": "a=1&b=2 or {\"a\": \"1\", \"b\": \"2\"}",
392
+ "query_json_to_json_button": "Query → JSON",
393
+ "query_json_to_query_button": "JSON → Query",
394
+ "query_json_output_label": "Result:",
395
+ "query_json_error": "Could not convert: {error}",
396
+ "query_json_empty_hint": "Enter a query string or a JSON object above.",
397
+ # URL Parser / Builder — Menu
398
+ "extend_tools_menu_url_builder_tab_action": "URL Parser / Builder Tab",
399
+ "extend_tools_menu_url_builder_tab_label": "URL Parser / Builder",
400
+ "extend_tools_menu_url_builder_dock_action": "URL Parser / Builder Dock",
401
+ "extend_tools_menu_url_builder_dock_title": "URL Parser / Builder",
402
+ # URL Parser / Builder — Widget
403
+ "url_builder_input_label": "A URL, or a JSON object of URL parts:",
404
+ "url_builder_input_placeholder":
405
+ "https://user@host:8080/path?a=1#frag or {\"scheme\": \"https\", \"host\": \"host\"}",
406
+ "url_builder_to_json_button": "URL → JSON",
407
+ "url_builder_to_url_button": "JSON → URL",
408
+ "url_builder_output_label": "Result:",
409
+ "url_builder_error": "Could not build URL: {error}",
410
+ "url_builder_empty_hint": "Enter a URL or a JSON object of URL parts above.",
411
+ # Regex Tester — Menu
412
+ "extend_tools_menu_regex_tab_action": "Regex Tester Tab",
413
+ "extend_tools_menu_regex_tab_label": "Regex",
414
+ "extend_tools_menu_regex_dock_action": "Regex Tester Dock",
415
+ "extend_tools_menu_regex_dock_title": "Regex",
416
+ # Regex Tester — Widget
417
+ "regex_pattern_label": "Pattern:",
418
+ "regex_pattern_placeholder": r"(\d{4})-(\d{2})-(\d{2})",
419
+ "regex_text_label": "Test text:",
420
+ "regex_text_placeholder": "Paste the text to search...",
421
+ "regex_test_button": "Find matches",
422
+ "regex_output_label": "Matches:",
423
+ "regex_match_count": "{count} match(es):",
424
+ "regex_no_match": "No matches.",
425
+ "regex_error": "Regex error: {error}",
426
+ # HTTP Status Reference — Menu
427
+ "extend_tools_menu_http_status_tab_action": "HTTP Status Reference Tab",
428
+ "extend_tools_menu_http_status_tab_label": "HTTP Status",
429
+ "extend_tools_menu_http_status_dock_action": "HTTP Status Reference Dock",
430
+ "extend_tools_menu_http_status_dock_title": "HTTP Status",
431
+ # HTTP Status Reference — Widget
432
+ "http_status_search_label": "Search by code or keyword:",
433
+ "http_status_search_placeholder": "404 or not found",
434
+ "http_status_no_match": "No matching status codes.",
435
+ # Text Diff — Menu
436
+ "extend_tools_menu_diff_tab_action": "Text Diff Tab",
437
+ "extend_tools_menu_diff_tab_label": "Text Diff",
438
+ "extend_tools_menu_diff_dock_action": "Text Diff Dock",
439
+ "extend_tools_menu_diff_dock_title": "Text Diff",
440
+ # Text Diff — Widget
441
+ "diff_left_label": "Expected:",
442
+ "diff_right_label": "Actual:",
443
+ "diff_compare_button": "Compare",
444
+ "diff_identical": "The two texts are identical.",
445
+ "diff_summary": "{added} line(s) added, {removed} line(s) removed.",
446
+ # JSON Format — Menu
447
+ "extend_tools_menu_json_format_tab_action": "JSON Format Tab",
448
+ "extend_tools_menu_json_format_tab_label": "JSON Format",
449
+ "extend_tools_menu_json_format_dock_action": "JSON Format Dock",
450
+ "extend_tools_menu_json_format_dock_title": "JSON Format",
451
+ # JSON Format — Widget
452
+ "json_format_input_label": "JSON:",
453
+ "json_format_input_placeholder": "{\"a\": 1, \"b\": [2, 3]}",
454
+ "json_format_format_button": "Format",
455
+ "json_format_minify_button": "Minify",
456
+ "json_format_output_label": "Result:",
457
+ "json_format_error": "Invalid JSON: {error}",
458
+ "json_format_empty_hint": "Paste JSON above, then format or minify.",
459
+ # Response Inspector — Menu
460
+ "extend_tools_menu_response_tab_action": "Response Inspector Tab",
461
+ "extend_tools_menu_response_tab_label": "Response Inspector",
462
+ "extend_tools_menu_response_dock_action": "Response Inspector Dock",
463
+ "extend_tools_menu_response_dock_title": "Response Inspector",
464
+ # Response Inspector — Widget
465
+ "response_input_label": "Paste a raw HTTP response:",
466
+ "response_input_placeholder": "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\"ok\": true}",
467
+ "response_analyze_button": "Analyze",
468
+ "response_output_label": "Analysis:",
469
+ "response_open_jwt_button": "Open JWT in decoder",
470
+ "response_open_status_button": "Open status in reference",
471
+ "response_open_headers_button": "Open headers in analyzer",
472
+ "response_empty_hint": "Paste a response above, then click analyze.",
473
+ "response_status_label": "== Status ==",
474
+ "response_headers_label": "== Headers ==",
475
+ "response_jwt_label": "== JWT(s) found ==",
476
+ "response_body_label": "== Body ==",
477
+ # HTTP Header Analyzer — Menu
478
+ "extend_tools_menu_header_analyzer_tab_action": "HTTP Header Analyzer Tab",
479
+ "extend_tools_menu_header_analyzer_tab_label": "Header Analyzer",
480
+ "extend_tools_menu_header_analyzer_dock_action": "HTTP Header Analyzer Dock",
481
+ "extend_tools_menu_header_analyzer_dock_title": "Header Analyzer",
482
+ # HTTP Header Analyzer — Widget
483
+ "header_analyzer_input_label": "Paste request or response headers:",
484
+ "header_analyzer_input_placeholder":
485
+ "HTTP/1.1 200 OK\nContent-Type: text/html\nSet-Cookie: sid=abc; Path=/",
486
+ "header_analyzer_analyze_button": "Analyze headers",
487
+ "header_analyzer_output_label": "Analysis:",
488
+ "header_analyzer_headers_label": "== Headers ({count}) ==",
489
+ "header_analyzer_duplicates_label": "== Repeated names ==",
490
+ "header_analyzer_findings_label": "== Findings ==",
491
+ "header_analyzer_no_findings": "Nothing worth reporting.",
492
+ "header_analyzer_no_headers": "No header lines found in that text.",
493
+ "header_analyzer_empty_hint": "Paste a header block above, then click analyze.",
494
+ "header_analyzer_level_warning": "WARNING",
495
+ "header_analyzer_level_info": "INFO",
496
+ # HTTP Header Analyzer — Findings ({header} is the header, {detail} its value)
497
+ "header_finding_duplicate_header":
498
+ "{header}: sent {detail} times; the receiver joins the values into one.",
499
+ "header_finding_content_type_options_not_nosniff":
500
+ "{header}: '{detail}' has no effect, only 'nosniff' stops MIME sniffing.",
501
+ "header_finding_hsts_weak_max_age":
502
+ "{header}: max-age={detail} is short; 15552000 (180 days) is the usual minimum.",
503
+ "header_finding_csp_unsafe_directive":
504
+ "{header}: contains '{detail}', which re-allows what the policy should block.",
505
+ "header_finding_cors_wildcard_origin": "{header}: every origin is allowed (*).",
506
+ "header_finding_cors_wildcard_with_credentials":
507
+ "{header}: '*' with Access-Control-Allow-Credentials: true is rejected by browsers.",
508
+ "header_finding_cookie_not_secure":
509
+ "{header}: cookie '{detail}' has no Secure attribute, so it can travel over plain HTTP.",
510
+ "header_finding_cookie_not_httponly":
511
+ "{header}: cookie '{detail}' has no HttpOnly attribute, so scripts can read it.",
512
+ "header_finding_cookie_no_samesite":
513
+ "{header}: cookie '{detail}' has no SameSite attribute; browsers default it to Lax.",
514
+ "header_finding_content_type_no_charset":
515
+ "{header}: '{detail}' names no charset, so the client has to guess the encoding.",
516
+ "header_finding_server_banner": "{header}: '{detail}' reveals the software in use.",
517
+ "header_finding_deprecated_header":
518
+ "{header}: '{detail}' is deprecated and ignored by current browsers.",
519
+ "header_finding_sensitive_header":
520
+ "{header}: carries a credential; mask it before sharing this output.",
521
+ "header_finding_missing_hsts":
522
+ "{header}: not set, so a browser may fall back to plain HTTP.",
523
+ "header_finding_missing_csp":
524
+ "{header}: not set, so nothing limits where scripts may be loaded from.",
525
+ "header_finding_missing_content_type_options":
526
+ "{header}: not set, so a browser may MIME-sniff the response.",
527
+ "header_finding_missing_frame_options":
528
+ "{header}: not set; it (or CSP frame-ancestors) controls who may frame the page.",
529
+ "header_finding_missing_referrer_policy":
530
+ "{header}: not set, so full URLs may leak to other sites.",
316
531
  # Diagram Editor — Tools
317
532
  "diagram_editor_tool_select": "Select",
318
533
  "diagram_editor_tool_rect": "Rect",
@@ -291,6 +291,221 @@ pybreeze_traditional_chinese_word_dict = {
291
291
  "extend_tools_menu_diagram_editor_tab_label": "架構圖編輯器",
292
292
  "extend_tools_menu_diagram_editor_dock_action": "架構圖編輯器停駐窗格",
293
293
  "extend_tools_menu_diagram_editor_dock_title": "架構圖編輯器",
294
+ # cURL 匯入 — 選單
295
+ "extend_tools_menu_curl_import_tab_action": "cURL 匯入分頁",
296
+ "extend_tools_menu_curl_import_tab_label": "cURL 匯入",
297
+ "extend_tools_menu_curl_import_dock_action": "cURL 匯入停駐窗格",
298
+ "extend_tools_menu_curl_import_dock_title": "cURL 匯入",
299
+ # cURL 匯入 — 介面
300
+ "curl_import_input_label": "貼上 curl 指令:",
301
+ "curl_import_input_placeholder": "curl 'https://api.example.com/v1/items' -H 'Accept: application/json'",
302
+ "curl_import_convert_button": "轉換為 Python requests",
303
+ "curl_import_output_label": "產生的程式碼:",
304
+ "curl_import_error": "無法解析 curl 指令:{error}",
305
+ "curl_import_empty_hint": "請先在上方貼上 curl 指令,再按轉換。",
306
+ "curl_import_target_label": "產生目標:",
307
+ "curl_import_target_requests": "Python requests",
308
+ "curl_import_target_pytest": "pytest 測試",
309
+ "curl_import_target_apitestka_python": "APITestka(Python)",
310
+ "curl_import_target_apitestka_action": "APITestka(JSON action)",
311
+ "curl_import_target_loaddensity_python": "LoadDensity(Python)",
312
+ "curl_import_open_url_button": "在 URL 解析/組建器開啟網址",
313
+ # 共用輸出動作(複製 / 開成分頁 / 存檔)
314
+ "output_actions_copy": "複製",
315
+ "output_actions_open_editor": "開成編輯器分頁",
316
+ "output_actions_save": "存成檔案...",
317
+ "output_actions_editor_tab_label": "產生內容",
318
+ "output_actions_save_dialog_title": "儲存輸出",
319
+ "output_actions_filter_python": "Python (*.py)",
320
+ "output_actions_filter_json": "JSON (*.json)",
321
+ "output_actions_filter_text": "Text (*.txt)",
322
+ # JWT 解碼器 — 選單
323
+ "extend_tools_menu_jwt_decoder_tab_action": "JWT 解碼器分頁",
324
+ "extend_tools_menu_jwt_decoder_tab_label": "JWT 解碼器",
325
+ "extend_tools_menu_jwt_decoder_dock_action": "JWT 解碼器停駐窗格",
326
+ "extend_tools_menu_jwt_decoder_dock_title": "JWT 解碼器",
327
+ # JWT 解碼器 — 介面
328
+ "jwt_decoder_input_label": "貼上 JWT(header.payload.signature):",
329
+ "jwt_decoder_input_placeholder": "<base64-header>.<base64-payload>.<signature>",
330
+ "jwt_decoder_decode_button": "解碼(不驗證簽章)",
331
+ "jwt_decoder_output_label": "解碼結果:",
332
+ "jwt_decoder_header_label": "== 標頭 Header ==",
333
+ "jwt_decoder_payload_label": "== 內容 Payload ==",
334
+ "jwt_decoder_times_label": "== 時間戳記(UTC)==",
335
+ "jwt_decoder_error": "無法解碼此 token:{error}",
336
+ "jwt_decoder_empty_hint": "請先在上方貼上 JWT,再按解碼。",
337
+ # 時間戳記轉換器 — 選單
338
+ "extend_tools_menu_timestamp_tab_action": "時間戳記轉換器分頁",
339
+ "extend_tools_menu_timestamp_tab_label": "時間戳記",
340
+ "extend_tools_menu_timestamp_dock_action": "時間戳記轉換器停駐窗格",
341
+ "extend_tools_menu_timestamp_dock_title": "時間戳記",
342
+ # 時間戳記轉換器 — 介面
343
+ "timestamp_input_label": "Epoch(秒或毫秒)或 ISO-8601 日期時間:",
344
+ "timestamp_input_placeholder": "1609459200 或 2021-01-01T00:00:00Z",
345
+ "timestamp_convert_button": "轉換",
346
+ "timestamp_output_label": "所有表示法(UTC):",
347
+ "timestamp_epoch_seconds_label": "Epoch(秒)",
348
+ "timestamp_epoch_millis_label": "Epoch(毫秒)",
349
+ "timestamp_iso_label": "ISO-8601(UTC)",
350
+ "timestamp_error": "無法轉換此值:{error}",
351
+ "timestamp_empty_hint": "請在上方輸入 epoch 值或 ISO 日期時間。",
352
+ # 雜湊產生器 — 選單
353
+ "extend_tools_menu_hash_tab_action": "雜湊產生器分頁",
354
+ "extend_tools_menu_hash_tab_label": "雜湊",
355
+ "extend_tools_menu_hash_dock_action": "雜湊產生器停駐窗格",
356
+ "extend_tools_menu_hash_dock_title": "雜湊",
357
+ # 雜湊產生器 — 介面
358
+ "hash_input_label": "要雜湊的文字:",
359
+ "hash_input_placeholder": "輸入或貼上要雜湊的文字...",
360
+ "hash_button": "計算雜湊",
361
+ "hash_output_label": "摘要:",
362
+ # Query <-> JSON — 選單
363
+ "extend_tools_menu_query_json_tab_action": "Query / JSON 分頁",
364
+ "extend_tools_menu_query_json_tab_label": "Query / JSON",
365
+ "extend_tools_menu_query_json_dock_action": "Query / JSON 停駐窗格",
366
+ "extend_tools_menu_query_json_dock_title": "Query / JSON",
367
+ # Query <-> JSON — 介面
368
+ "query_json_input_label": "查詢字串或 JSON 物件:",
369
+ "query_json_input_placeholder": "a=1&b=2 或 {\"a\": \"1\", \"b\": \"2\"}",
370
+ "query_json_to_json_button": "Query → JSON",
371
+ "query_json_to_query_button": "JSON → Query",
372
+ "query_json_output_label": "結果:",
373
+ "query_json_error": "無法轉換:{error}",
374
+ "query_json_empty_hint": "請在上方輸入查詢字串或 JSON 物件。",
375
+ # URL 解析/組建器 — 選單
376
+ "extend_tools_menu_url_builder_tab_action": "URL 解析/組建器分頁",
377
+ "extend_tools_menu_url_builder_tab_label": "URL 解析/組建器",
378
+ "extend_tools_menu_url_builder_dock_action": "URL 解析/組建器停駐窗格",
379
+ "extend_tools_menu_url_builder_dock_title": "URL 解析/組建器",
380
+ # URL 解析/組建器 — 介面
381
+ "url_builder_input_label": "一個 URL,或描述 URL 各部分的 JSON 物件:",
382
+ "url_builder_input_placeholder":
383
+ "https://user@host:8080/path?a=1#frag 或 {\"scheme\": \"https\", \"host\": \"host\"}",
384
+ "url_builder_to_json_button": "URL → JSON",
385
+ "url_builder_to_url_button": "JSON → URL",
386
+ "url_builder_output_label": "結果:",
387
+ "url_builder_error": "無法組建 URL:{error}",
388
+ "url_builder_empty_hint": "請在上方輸入 URL 或描述 URL 各部分的 JSON 物件。",
389
+ # 正規表示式測試器 — 選單
390
+ "extend_tools_menu_regex_tab_action": "正規表示式測試器分頁",
391
+ "extend_tools_menu_regex_tab_label": "Regex",
392
+ "extend_tools_menu_regex_dock_action": "正規表示式測試器停駐窗格",
393
+ "extend_tools_menu_regex_dock_title": "Regex",
394
+ # 正規表示式測試器 — 介面
395
+ "regex_pattern_label": "樣式:",
396
+ "regex_pattern_placeholder": r"(\d{4})-(\d{2})-(\d{2})",
397
+ "regex_text_label": "測試文字:",
398
+ "regex_text_placeholder": "貼上要搜尋的文字...",
399
+ "regex_test_button": "尋找符合項",
400
+ "regex_output_label": "符合項:",
401
+ "regex_match_count": "{count} 個符合:",
402
+ "regex_no_match": "沒有符合項。",
403
+ "regex_error": "正規表示式錯誤:{error}",
404
+ # HTTP 狀態碼參考 — 選單
405
+ "extend_tools_menu_http_status_tab_action": "HTTP 狀態碼參考分頁",
406
+ "extend_tools_menu_http_status_tab_label": "HTTP 狀態碼",
407
+ "extend_tools_menu_http_status_dock_action": "HTTP 狀態碼參考停駐窗格",
408
+ "extend_tools_menu_http_status_dock_title": "HTTP 狀態碼",
409
+ # HTTP 狀態碼參考 — 介面
410
+ "http_status_search_label": "以代碼或關鍵字搜尋:",
411
+ "http_status_search_placeholder": "404 或 not found",
412
+ "http_status_no_match": "沒有符合的狀態碼。",
413
+ # 文字差異 — 選單
414
+ "extend_tools_menu_diff_tab_action": "文字差異分頁",
415
+ "extend_tools_menu_diff_tab_label": "文字差異",
416
+ "extend_tools_menu_diff_dock_action": "文字差異停駐窗格",
417
+ "extend_tools_menu_diff_dock_title": "文字差異",
418
+ # 文字差異 — 介面
419
+ "diff_left_label": "預期:",
420
+ "diff_right_label": "實際:",
421
+ "diff_compare_button": "比較",
422
+ "diff_identical": "兩段文字完全相同。",
423
+ "diff_summary": "新增 {added} 行,移除 {removed} 行。",
424
+ # JSON 格式化 — 選單
425
+ "extend_tools_menu_json_format_tab_action": "JSON 格式化分頁",
426
+ "extend_tools_menu_json_format_tab_label": "JSON 格式化",
427
+ "extend_tools_menu_json_format_dock_action": "JSON 格式化停駐窗格",
428
+ "extend_tools_menu_json_format_dock_title": "JSON 格式化",
429
+ # JSON 格式化 — 介面
430
+ "json_format_input_label": "JSON:",
431
+ "json_format_input_placeholder": "{\"a\": 1, \"b\": [2, 3]}",
432
+ "json_format_format_button": "格式化",
433
+ "json_format_minify_button": "壓縮",
434
+ "json_format_output_label": "結果:",
435
+ "json_format_error": "無效的 JSON:{error}",
436
+ "json_format_empty_hint": "請在上方貼上 JSON,再按格式化或壓縮。",
437
+ # 回應檢視器 — 選單
438
+ "extend_tools_menu_response_tab_action": "回應檢視器分頁",
439
+ "extend_tools_menu_response_tab_label": "回應檢視器",
440
+ "extend_tools_menu_response_dock_action": "回應檢視器停駐窗格",
441
+ "extend_tools_menu_response_dock_title": "回應檢視器",
442
+ # 回應檢視器 — 介面
443
+ "response_input_label": "貼上原始 HTTP 回應:",
444
+ "response_input_placeholder": "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\"ok\": true}",
445
+ "response_analyze_button": "分析",
446
+ "response_output_label": "分析結果:",
447
+ "response_open_jwt_button": "在解碼器開啟 JWT",
448
+ "response_open_status_button": "在參考開啟狀態碼",
449
+ "response_open_headers_button": "在分析器開啟標頭",
450
+ "response_empty_hint": "請先在上方貼上回應,再按分析。",
451
+ "response_status_label": "== 狀態 Status ==",
452
+ "response_headers_label": "== 標頭 Headers ==",
453
+ "response_jwt_label": "== 找到的 JWT ==",
454
+ "response_body_label": "== 內容 Body ==",
455
+ # HTTP 標頭分析器 — 選單
456
+ "extend_tools_menu_header_analyzer_tab_action": "HTTP 標頭分析器分頁",
457
+ "extend_tools_menu_header_analyzer_tab_label": "標頭分析器",
458
+ "extend_tools_menu_header_analyzer_dock_action": "HTTP 標頭分析器停駐窗格",
459
+ "extend_tools_menu_header_analyzer_dock_title": "標頭分析器",
460
+ # HTTP 標頭分析器 — 介面
461
+ "header_analyzer_input_label": "貼上請求或回應的標頭:",
462
+ "header_analyzer_input_placeholder":
463
+ "HTTP/1.1 200 OK\nContent-Type: text/html\nSet-Cookie: sid=abc; Path=/",
464
+ "header_analyzer_analyze_button": "分析標頭",
465
+ "header_analyzer_output_label": "分析結果:",
466
+ "header_analyzer_headers_label": "== 標頭({count})==",
467
+ "header_analyzer_duplicates_label": "== 重複出現的名稱 ==",
468
+ "header_analyzer_findings_label": "== 分析發現 ==",
469
+ "header_analyzer_no_findings": "沒有需要注意的項目。",
470
+ "header_analyzer_no_headers": "這段文字中找不到標頭。",
471
+ "header_analyzer_empty_hint": "請先在上方貼上標頭,再按分析。",
472
+ "header_analyzer_level_warning": "警告",
473
+ "header_analyzer_level_info": "資訊",
474
+ # HTTP 標頭分析器 — 發現({header} 為標頭名稱,{detail} 為其值)
475
+ "header_finding_duplicate_header":
476
+ "{header}:送出 {detail} 次,接收端會把這些值合併成一個。",
477
+ "header_finding_content_type_options_not_nosniff":
478
+ "{header}:'{detail}' 沒有作用,只有 'nosniff' 能阻止 MIME 探測。",
479
+ "header_finding_hsts_weak_max_age":
480
+ "{header}:max-age={detail} 太短,一般至少要 15552000(180 天)。",
481
+ "header_finding_csp_unsafe_directive":
482
+ "{header}:含有 '{detail}',等於把此政策原本要擋下的行為又放行了。",
483
+ "header_finding_cors_wildcard_origin": "{header}:允許任何來源(*)。",
484
+ "header_finding_cors_wildcard_with_credentials":
485
+ "{header}:'*' 搭配 Access-Control-Allow-Credentials: true,瀏覽器會直接拒絕。",
486
+ "header_finding_cookie_not_secure":
487
+ "{header}:cookie '{detail}' 沒有 Secure 屬性,可能以純 HTTP 傳送。",
488
+ "header_finding_cookie_not_httponly":
489
+ "{header}:cookie '{detail}' 沒有 HttpOnly 屬性,指令碼可以讀取。",
490
+ "header_finding_cookie_no_samesite":
491
+ "{header}:cookie '{detail}' 沒有 SameSite 屬性,瀏覽器會預設為 Lax。",
492
+ "header_finding_content_type_no_charset":
493
+ "{header}:'{detail}' 沒有指定 charset,用戶端只能自行猜測編碼。",
494
+ "header_finding_server_banner": "{header}:'{detail}' 洩漏了所使用的軟體。",
495
+ "header_finding_deprecated_header":
496
+ "{header}:'{detail}' 已淘汰,現行瀏覽器不再處理。",
497
+ "header_finding_sensitive_header":
498
+ "{header}:內含憑證,分享這份輸出前請先遮蔽。",
499
+ "header_finding_missing_hsts":
500
+ "{header}:未設定,瀏覽器可能退回純 HTTP。",
501
+ "header_finding_missing_csp":
502
+ "{header}:未設定,沒有任何規則限制指令碼的載入來源。",
503
+ "header_finding_missing_content_type_options":
504
+ "{header}:未設定,瀏覽器可能對回應做 MIME 探測。",
505
+ "header_finding_missing_frame_options":
506
+ "{header}:未設定;此標頭(或 CSP frame-ancestors)決定誰能將頁面內嵌成框架。",
507
+ "header_finding_missing_referrer_policy":
508
+ "{header}:未設定,完整網址可能外洩給其他網站。",
294
509
  # Diagram Editor — 工具
295
510
  "diagram_editor_tool_select": "選取",
296
511
  "diagram_editor_tool_rect": "矩形",