Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,8 @@ All code must satisfy common static-analysis rules enforced by SonarQube and Cod
## Commit & PR rules

- Commit messages: short imperative sentence (e.g., "Update stable version", "Fix github actions")
- Do not mention any AI tools, assistants, or co-authors in commit messages or PR descriptions
- Do not add `Co-Authored-By` headers referencing any AI
- **No AI attribution (mandatory)**: Never mention any AI tool, assistant, agent, model name, or vendor in commit messages, commit trailers, branch names, PR titles, PR descriptions, issue text, code comments, or documentation
- Do not add `Co-Authored-By` headers referencing any AI
- No "Generated with ...", "Created by ...", or similar footers in commits or PR bodies
- PR titles and bodies describe **what changed and why** — nothing about how the change was authored
- PR target: `dev` for development work, `main` for stable releases
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,16 @@ PyBreeze is not just a code editor — it is a command center for the automation
- Mermaid `flowchart` / `graph` import
- Save/Open as `.diagram.json`, export to PNG or SVG
- Undo/redo, align, distribute, grid, snap, and zoom controls
- **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). The parser is pure logic and never executes the command.
- **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.
- **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.
- **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).
- **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.
- **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.
- **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.
- **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.
- **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.
- **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 or JWT directly in its dedicated tool tab, pre-filled.
- **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.
- **Package Manager** — Install automation modules and build tools directly from the IDE menu without leaving the editor.
- **Integrated Documentation** — Quick access to documentation and GitHub pages for each automation module directly from the menu bar.
Expand Down Expand Up @@ -206,6 +216,16 @@ PyBreeze UI (PySide6)
│ ├── Skill Prompt Editor
│ ├── Skill Send GUI
│ ├── Diagram Editor (WYSIWYG, Mermaid import, PNG/SVG export)
│ ├── cURL Import (curl → Python requests code)
│ ├── JWT Decoder (header/payload inspection)
│ ├── Timestamp Converter (epoch ⇄ ISO-8601)
│ ├── Hash Generator (SHA-256/512, SHA-1, MD5)
│ ├── Query ⇄ JSON Converter
│ ├── Regex Tester
│ ├── HTTP Status Reference
│ ├── Text Diff
│ ├── JSON Format (pretty / minify)
│ ├── Response Inspector (status + JSON + JWT)
│ └── JupyterLab Integration
└── Install Menu
├── Automation Module Installers
Expand Down
145 changes: 145 additions & 0 deletions pybreeze/extend_multi_language/extend_english.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,151 @@
"extend_tools_menu_diagram_editor_tab_label": "Diagram Editor",
"extend_tools_menu_diagram_editor_dock_action": "Diagram Editor Dock",
"extend_tools_menu_diagram_editor_dock_title": "Diagram Editor",
# cURL Import — Menu
"extend_tools_menu_curl_import_tab_action": "cURL Import Tab",
"extend_tools_menu_curl_import_tab_label": "cURL Import",
"extend_tools_menu_curl_import_dock_action": "cURL Import Dock",
"extend_tools_menu_curl_import_dock_title": "cURL Import",
# cURL Import — Widget
"curl_import_input_label": "Paste a curl command:",
"curl_import_input_placeholder": "curl 'https://api.example.com/v1/items' -H 'Accept: application/json'",
"curl_import_convert_button": "Convert to Python requests",
"curl_import_output_label": "Generated code:",
"curl_import_error": "Could not parse the curl command: {error}",
"curl_import_empty_hint": "Paste a curl command above, then click convert.",
"curl_import_target_label": "Generate for:",
"curl_import_target_requests": "Python requests",
"curl_import_target_pytest": "pytest test",
"curl_import_target_apitestka_python": "APITestka (Python)",
"curl_import_target_apitestka_action": "APITestka (JSON action)",
"curl_import_target_loaddensity_python": "LoadDensity (Python)",
# Shared output actions (copy / open in editor / save to file)
"output_actions_copy": "Copy",
"output_actions_open_editor": "Open in editor tab",
"output_actions_save": "Save to file...",
"output_actions_editor_tab_label": "Generated",
"output_actions_save_dialog_title": "Save output",
"output_actions_filter_python": "Python (*.py)",
"output_actions_filter_json": "JSON (*.json)",
"output_actions_filter_text": "Text (*.txt)",
# JWT Decoder — Menu
"extend_tools_menu_jwt_decoder_tab_action": "JWT Decoder Tab",
"extend_tools_menu_jwt_decoder_tab_label": "JWT Decoder",
"extend_tools_menu_jwt_decoder_dock_action": "JWT Decoder Dock",
"extend_tools_menu_jwt_decoder_dock_title": "JWT Decoder",
# JWT Decoder — Widget
"jwt_decoder_input_label": "Paste a JWT (header.payload.signature):",
"jwt_decoder_input_placeholder": "<base64-header>.<base64-payload>.<signature>",
"jwt_decoder_decode_button": "Decode (no signature check)",
"jwt_decoder_output_label": "Decoded token:",
"jwt_decoder_header_label": "== Header ==",
"jwt_decoder_payload_label": "== Payload ==",
"jwt_decoder_times_label": "== Timestamps (UTC) ==",
"jwt_decoder_error": "Could not decode the token: {error}",
"jwt_decoder_empty_hint": "Paste a JWT above, then click decode.",
# Timestamp Converter — Menu
"extend_tools_menu_timestamp_tab_action": "Timestamp Converter Tab",
"extend_tools_menu_timestamp_tab_label": "Timestamp",
"extend_tools_menu_timestamp_dock_action": "Timestamp Converter Dock",
"extend_tools_menu_timestamp_dock_title": "Timestamp",
# Timestamp Converter — Widget
"timestamp_input_label": "Epoch (seconds or ms) or ISO-8601 date-time:",
"timestamp_input_placeholder": "1609459200 or 2021-01-01T00:00:00Z",
"timestamp_convert_button": "Convert",
"timestamp_output_label": "All representations (UTC):",
"timestamp_epoch_seconds_label": "Epoch (seconds)",
"timestamp_epoch_millis_label": "Epoch (milliseconds)",
"timestamp_iso_label": "ISO-8601 (UTC)",
"timestamp_error": "Could not convert the value: {error}",
"timestamp_empty_hint": "Enter an epoch value or an ISO date-time above.",
# Hash Generator — Menu
"extend_tools_menu_hash_tab_action": "Hash Generator Tab",
"extend_tools_menu_hash_tab_label": "Hash",
"extend_tools_menu_hash_dock_action": "Hash Generator Dock",
"extend_tools_menu_hash_dock_title": "Hash",
# Hash Generator — Widget
"hash_input_label": "Text to hash:",
"hash_input_placeholder": "Type or paste text to hash...",
"hash_button": "Compute hashes",
"hash_output_label": "Digests:",
# Query <-> JSON — Menu
"extend_tools_menu_query_json_tab_action": "Query / JSON Tab",
"extend_tools_menu_query_json_tab_label": "Query / JSON",
"extend_tools_menu_query_json_dock_action": "Query / JSON Dock",
"extend_tools_menu_query_json_dock_title": "Query / JSON",
# Query <-> JSON — Widget
"query_json_input_label": "Query string or JSON object:",
"query_json_input_placeholder": "a=1&b=2 or {\"a\": \"1\", \"b\": \"2\"}",
"query_json_to_json_button": "Query → JSON",
"query_json_to_query_button": "JSON → Query",
"query_json_output_label": "Result:",
"query_json_error": "Could not convert: {error}",
"query_json_empty_hint": "Enter a query string or a JSON object above.",
# Regex Tester — Menu
"extend_tools_menu_regex_tab_action": "Regex Tester Tab",
"extend_tools_menu_regex_tab_label": "Regex",
"extend_tools_menu_regex_dock_action": "Regex Tester Dock",
"extend_tools_menu_regex_dock_title": "Regex",
# Regex Tester — Widget
"regex_pattern_label": "Pattern:",
"regex_pattern_placeholder": r"(\d{4})-(\d{2})-(\d{2})",
"regex_text_label": "Test text:",
"regex_text_placeholder": "Paste the text to search...",
"regex_test_button": "Find matches",
"regex_output_label": "Matches:",
"regex_match_count": "{count} match(es):",
"regex_no_match": "No matches.",
"regex_error": "Regex error: {error}",
# HTTP Status Reference — Menu
"extend_tools_menu_http_status_tab_action": "HTTP Status Reference Tab",
"extend_tools_menu_http_status_tab_label": "HTTP Status",
"extend_tools_menu_http_status_dock_action": "HTTP Status Reference Dock",
"extend_tools_menu_http_status_dock_title": "HTTP Status",
# HTTP Status Reference — Widget
"http_status_search_label": "Search by code or keyword:",
"http_status_search_placeholder": "404 or not found",
"http_status_no_match": "No matching status codes.",
# Text Diff — Menu
"extend_tools_menu_diff_tab_action": "Text Diff Tab",
"extend_tools_menu_diff_tab_label": "Text Diff",
"extend_tools_menu_diff_dock_action": "Text Diff Dock",
"extend_tools_menu_diff_dock_title": "Text Diff",
# Text Diff — Widget
"diff_left_label": "Expected:",
"diff_right_label": "Actual:",
"diff_compare_button": "Compare",
"diff_identical": "The two texts are identical.",
"diff_summary": "{added} line(s) added, {removed} line(s) removed.",
# JSON Format — Menu
"extend_tools_menu_json_format_tab_action": "JSON Format Tab",
"extend_tools_menu_json_format_tab_label": "JSON Format",
"extend_tools_menu_json_format_dock_action": "JSON Format Dock",
"extend_tools_menu_json_format_dock_title": "JSON Format",
# JSON Format — Widget
"json_format_input_label": "JSON:",
"json_format_input_placeholder": "{\"a\": 1, \"b\": [2, 3]}",
"json_format_format_button": "Format",
"json_format_minify_button": "Minify",
"json_format_output_label": "Result:",
"json_format_error": "Invalid JSON: {error}",
"json_format_empty_hint": "Paste JSON above, then format or minify.",
# Response Inspector — Menu
"extend_tools_menu_response_tab_action": "Response Inspector Tab",
"extend_tools_menu_response_tab_label": "Response Inspector",
"extend_tools_menu_response_dock_action": "Response Inspector Dock",
"extend_tools_menu_response_dock_title": "Response Inspector",
# Response Inspector — Widget
"response_input_label": "Paste a raw HTTP response:",
"response_input_placeholder": "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\"ok\": true}",
"response_analyze_button": "Analyze",
"response_output_label": "Analysis:",
"response_open_jwt_button": "Open JWT in decoder",
"response_open_status_button": "Open status in reference",
"response_empty_hint": "Paste a response above, then click analyze.",
"response_status_label": "== Status ==",
"response_headers_label": "== Headers ==",
"response_jwt_label": "== JWT(s) found ==",
"response_body_label": "== Body ==",
# Diagram Editor — Tools
"diagram_editor_tool_select": "Select",
"diagram_editor_tool_rect": "Rect",
Expand Down
Loading
Loading