diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..f8e6a5a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,160 @@ +# Contributing to BTerminal + +Thanks for your interest in BTerminal! Contributions of every kind are +welcome — and most of them require **no programming and no git knowledge**. +This guide has two tracks: pick the one that fits you. + +- [I don't code / I've never used GitHub](#track-1--no-programming-needed) +- [I'm a developer](#track-2--code-contributions) + +Questions that don't fit an issue go to +[Discussions](https://github.com/DexterFromLab/BTerminal/discussions). + +--- + +## Track 1 — no programming needed + +### Report a bug + +All you need is a free [GitHub account](https://github.com/signup). + +1. Go to [Issues](https://github.com/DexterFromLab/BTerminal/issues) → + **New issue**. +2. Describe the problem. The more of the following you include, the faster + it gets fixed: + - **BTerminal version** — shown in the window title (e.g. `BTerminal v1.3.5`). + - **Your Linux distribution** (e.g. Linux Mint 22, Pop!_OS 24.04, Ubuntu 24.04). + - **AI provider involved**, if any (Claude Code ✨ / Copilot 🤖 / Aider 🦫). + - **Steps to reproduce** — what you clicked/typed, in order. + - **What you expected** vs **what actually happened**. + - A **screenshot** (drag the image straight into the issue text box). + - For install/update problems: the contents of + `~/.config/bterminal/install_errors.json`. + - For translation/UI-text problems: which **language** you use in + Options → Language. + +There are no bad bug reports. "It crashed when I did X" with a screenshot +is already useful. + +### Suggest a feature + +Open a thread in +[Discussions → Ideas](https://github.com/DexterFromLab/BTerminal/discussions) +and describe the problem you're trying to solve (not only the solution you +imagine). If maintainers pick it up, it becomes an issue. + +### Improve a translation (no coding involved) + +BTerminal ships in 13 languages; each one lives in a single editable file: +`locale//LC_MESSAGES/bterminal.po` (e.g. `locale/de/LC_MESSAGES/bterminal.po`). + +Without git: + +1. Open the `.po` file for your language on GitHub and click + **Download raw file** (the ⤓ icon). +2. Edit it in [Poedit](https://poedit.net/) (free) — it shows + "English → your language" pairs; you only fill in the right column. +3. Open a new issue titled `Translation update: ` and attach the + edited file (zip it first — GitHub issues don't accept bare `.po` files). + +A maintainer will commit it on your behalf, with credit. Want a **new** +language? Open an issue saying which one — the scaffolding takes one command +on our side, then the steps above apply. + +The license dialog is also translated per language +(`defaults/license/LICENSE..md`); translating it is optional — +missing translations fall back to English. + +### Fix documentation from your browser + +For any `.md` file (this one, `README.md`, files in `docs/`): + +1. Open the file on GitHub and click the **pencil icon** (Edit). +2. Make your change in the browser editor. +3. Click **Commit changes…** → "Create a new branch and start a pull + request" → **Propose changes**. GitHub handles the git mechanics + (including forking) automatically. + +### Spread the word + +Star the repository, show BTerminal to colleagues, post screenshots or +short demos. For a project this size, every mention matters. + +--- + +## Track 2 — code contributions + +### Prerequisites + +Linux with GTK 3, Python 3.10+, Node.js 22+ (see +[README → Requirements](README.md#requirements)). + +### Setup + +```bash +git clone https://github.com/DexterFromLab/BTerminal.git +cd BTerminal +./install.sh +``` + +When iterating on BTerminal's own code, use the two-tier deploy described in +[README → Development workflow](README.md#development-workflow): +`tools/sync_install.sh` for fast host deploys, `tools/vm_test.sh` for +isolated VM regression. + +### Tests + +Run before every pull request: + +```bash +pip install pytest httpx Pillow # once +sudo apt install xvfb # once, for component/e2e layers +./tools/test_all.sh --quick # unit layer, sub-second +./tools/test_all.sh # fast suite — minimum bar for a PR +``` + +A PR that adds a feature or fixes a bug should add a test pinning the new +behavior — that's the project convention (every fixed bug gets a pin test). + +### Code conventions + +- **i18n**: every user-facing UI string must be wrapped in `_()` / `N_()`. + `tools/check_i18n.py` (part of the test suite) fails the build otherwise. + After adding strings, run `./tools/i18n.sh extract && ./tools/i18n.sh update`. +- **English-only by policy**: `README.md`, `errata.json`, installer output, + and AI intro prompts stay in English. UI strings are translated via gettext. +- **Commit messages**: Conventional Commits, as in the existing history — + `feat(tasks): …`, `fix(sudo): …`, `docs(readme): …`, `test(e2e): …`, + `chore: …`, `refactor: …`. + +### Pull request workflow + +1. Branch from `master`: `git checkout -b /` + (e.g. `fix/options-scrollbar`, `docs/contributing-guide`). + No write access? Fork first, then branch in your fork. +2. Keep PRs small and focused — one topic per PR. +3. For UI changes, attach a before/after screenshot. +4. Make sure `./tools/test_all.sh` passes. +5. Push and open a pull request against `master`; describe **what** changed + and **why**. + +### Files you should not touch in a regular PR + +- `VERSION` and `errata.json` — these drive the in-app auto-updater and are + bumped by the maintainer when cutting a release. +- `LICENSE.md` and `defaults/license/` — license changes are + maintainer-only. + +Note that `README.md`, `defaults/` and `VERSION` are live-symlinked into +every user's installation: whatever lands on `master` reaches users on +their next `git pull`/update, without a reinstall. Review accordingly. + +--- + +## License + +BTerminal uses a custom attribution-required license +([LICENSE.md](LICENSE.md), v1.1). By submitting a contribution you agree +that it is provided under the same license. The authorship/attribution +information described in the license must remain intact in all +contributions and derivative works. diff --git a/README.md b/README.md index c327fbf..980fc47 100644 --- a/README.md +++ b/README.md @@ -2,66 +2,38 @@ A GTK 3 terminal emulator built for developers who work with SSH servers and AI coding CLIs (Claude Code, GitHub Copilot CLI, Aider). Combines session management, macro automation, a persistent context database, multi-model AI consultation, task orchestration, git awareness, a skills library and a global rules system in a single window. Ships with Catppuccin Mocha (dark) and Latte (light) themes. -**Current release: v1.3.1** +**Current release: v1.3.5** ![BTerminal](screenshot.png) -## What's new in v1.3.1 - -Stability & UX bug-fix release driven by manual QA in Polish locale. -All fixes verified end-to-end on real VM with semi-automatic UI driver -(`tools/_e2e_ui_driver.sh` + `tools/_e2e_atspi_driver.py`). - -**Aider provider:** -- Aider session now receives `--read AIDER.md` (or `CLAUDE.md` fallback) - at spawn, so the LLM sees project conventions from prompt #1 instead - of relying on auto-discovery (which aider 0.86.2 does not do). -- Active ctx rules are materialized to a per-spawn temp file and - passed via `--read` — rules reach the LLM context immediately - rather than waiting for the periodic PTY-feed threshold. - -**Pull Ollama model dialog:** -- Curated dropdown of 7 recommended tags (qwen2.5-coder, deepseek-coder-v2, - codellama, llama3.1, qwen2.5, llava) plus free-form Entry for new - releases. -- "Browse all models on ollama.com →" link button. -- Warning dialog before pulling models below 3 B parameters (qwen 0.5b - cannot follow Aider's edit format). -- Pull failure messages now stripped of ANSI cursor sequences and - mapped to short Polish text (`Model 'X' nie istnieje w bibliotece - Ollama. Sprawdź pisownię na ollama.com/library.` etc.) instead of - multi-line stderr dumps. - -**Options dialog:** -- Wider default size (720 × content) + min size 680 × 480 + resizable - so longer Polish (and other non-English) labels fit without left-edge - cropping. -- Persistent vertical scrollbar (≥ 12 px) with overlay-scrolling off so - expanded `AI providers` + `Local Models` sections stay navigable. -- Theme combo Save now applies the picked target directly via a new - idempotent `_set_theme(target)` setter — fixes the Light → Dark - regression after Dark → Light. - -**Polish locale completeness:** -- `Diagnostyka…` / `Zainstaluj zależności…` Tools menu items. -- `Dodaj wskazówkę vision przy wklejaniu obrazów do sesji Copilot` - Options checkbox. -- `Pobierz model Ollama` / `Pobierz` / `Pobieranie nieudane` / - `Model pobrany` Pull dialog strings. -- `Nowa sesja AI…` File menu (replaces `Nowa sesja Claude Code…` that - predated multi-provider work; clicking it opens the same - provider-picker the sidebar `Add ▾` uses). - -**Test infrastructure:** -- `tools/_e2e_live_monitor.sh` rewritten to action-driven mode — - screenshots taken only on `tag ` instead of polling every - N seconds. Eliminates thousands of duplicate frames per test run. -- New `tools/_e2e_atspi_driver.py` accessibility-tree driver lets pin - tests click GTK widgets by label (XPath-equivalent) instead of - flaky `xdotool mousemove` coordinates. -- 14 new pytest pin tests under `tests/e2e/test_*` — one per fixed - bug — each combining structural source/catalog parsing with - behavioural xvfb-driven contract checks. +## What's new + +**v1.3.5** — safer auto-update: when the working tree has uncommitted local +changes, the updater now asks before discarding them (`git reset --hard` + +`git clean -fd`) instead of auto-stashing and crashing on stash-pop conflicts. + +**v1.3.4** — sudo fixes after the v1.3.3 rollout: AI tab spawn no longer +freezes on Pop!\_OS, the password-attempt counter is correct, and new Claude +sessions default to sudo enabled. + +**v1.3.3** — shared sudo password cache: AI sessions that need root share one +password dialog per window, reused by every subsequent tab; Tools menu items +to set/clear the cached password; a typing guard that blocks rules/ctx +injection while you are composing a message; stats bar accuracy fixes +(♻️ cache-hit label, `tok/h` now counts only freshly-processed tokens). + +**v1.3.2** — Aider setup wizard (`tools/aider_setup_wizard`): detects missing +Ollama models, presents the curated catalog and orchestrates pulls instead of +dumping a raw LiteLLM stack trace; reachable from **Tools → Aider Setup +Wizard…**; Memory panel **Apply Rules** now affects the current tab without a +restart. + +Since v1.3.5, `master` additionally ships task reordering (`tasks move + ` plus reorder buttons in the Tasks panel) and +License v1.1 (co-authors added). + +Full per-release change lists live in [`errata.json`](errata.json) — the same +data the in-app update dialog shows. ## Features @@ -211,12 +183,15 @@ provider-aware reference into the prompt: default phrasing too verbose). - **Per-session override** — Edit any AI session and fill in the "Image paste template (optional):" Entry. Examples: + ``` Take a careful look at: {path} — describe UI elements only. ``` + ``` Image attached: {path} — focus on layout, ignore colors. ``` + The `{path}` placeholder gets substituted with the absolute saved image path. Leave the Entry empty to fall back to the provider default. The session-level override **bypasses** the global kill- @@ -260,7 +235,7 @@ running BT to pick up changes without a full `install.sh`): `sync_install.sh` skips apt/npm/license/symlinks (handled once by `install.sh`); only the `bterminal/` package, CLI tools (`ctx`, -`consult`, `tasks`, `claude_log`, `memory_wizard`, `mock_ai_cli`) +`consult`, `tasks`, `claude_log`, `memory_wizard`, `aider_setup_wizard`, `mock_ai_cli`) and recompiled `.mo` translation catalogs are touched. Restart BTerminal to load the new code. @@ -269,7 +244,7 @@ changes (Node, Python, GTK, gettext). ### Git Panel -A right-side panel that appears only on Claude Code tabs (`Ctrl+G` to toggle). Auto-refreshes every 3 seconds and monitors `.git/` for changes. +A right-side panel that appears on AI session tabs — any provider (`Ctrl+G` to toggle). Auto-refreshes every 3 seconds and monitors `.git/` for changes. Accordion sections: **Branch** (current branch + HEAD), **Changes** (unstaged/untracked with numstat), **Stash**, **LFS/Binary** (detection + setup), **Activity** (recent commits), **Log** (last 20 oneline entries). Includes a `git init` button for uninitialized repos. @@ -332,12 +307,13 @@ Skills are never overwritten on update — user edits are preserved. New bundled The sidebar **Files** tab is a project file browser similar to the IntelliJ project tree. -- **Project dropdown** — lists all saved Claude Code sessions with a `project_dir`; defaults to the active Claude Code tab. Switching the dropdown pins the tree to that project. +- **Project dropdown** — lists all saved AI sessions with a `project_dir`; defaults to the active AI tab. Switching the dropdown pins the tree to that project. - **Auto git root** — if the session's project directory is a generic subdirectory (`docs/`, `src/`, `tests/`, etc.), the panel automatically walks up to the nearest git root and shows the full project. - **Double-click a file** — opens a diff dialog in meld - **Double-click a directory** — expand / collapse **Diff dialog** (meld): + - Dropdown with the last 10 commits (short hash + subject) - Text field for any custom ref: full hash, branch name, `HEAD~5`, etc. - Extracts the historical version via `git show` and opens `meld ` @@ -407,10 +383,11 @@ tasks add myproject "description" tasks add myproject 1 "subtask" # creates 1.a tasks done myproject tasks pending myproject +tasks move myproject 2 1 # reorder: move task to position 1 tasks --help ``` -The sidebar **Tasks** tab shows a per-project task list with checkboxes, add/edit/delete, and a 2-second auto-refresh poll. An **auto-trigger** system (start/stop buttons) continuously feeds pending tasks to Claude Code sessions — task claims are atomic to prevent collisions in multi-session setups. Auto-trigger flags reset to OFF on every app startup for safety. +The sidebar **Tasks** tab shows a per-project task list with checkboxes, add/edit/delete, reorder buttons, and a 2-second auto-refresh poll. The project dropdown also lists CLI-only projects (created with `tasks add` outside any saved session). An **auto-trigger** system (start/stop buttons) continuously feeds pending tasks to Claude Code sessions — task claims are atomic to prevent collisions in multi-session setups. Auto-trigger flags reset to OFF on every app startup for safety. ### Plugins @@ -503,7 +480,8 @@ issue if you'd like it prioritized. - **Python 3.10+** with PyGObject, GTK 3 and VTE 2.91 bindings - **Node.js 22+** and **npm 10+** -- **Claude Code** CLI — requires an active Claude subscription (Max or Pro); the installer sets it up automatically +- **Claude Code** CLI — needed for the Claude provider; requires an active Claude subscription (Max or Pro); the installer sets it up automatically +- **GitHub Copilot CLI / Aider** *(optional)* — alternative AI providers; Copilot requires a Copilot subscription (never auto-installed), Aider can run fully offline against local Ollama models - **OpenRouter account** *(optional)* — needed only for the Consult feature; requires API credits at [openrouter.ai](https://openrouter.ai) ## Installation @@ -520,7 +498,7 @@ The installer reads `defaults/dependencies.json` and enforces version requiremen 2. Install or update Claude Code CLI via npm; create a stable symlink at `~/.local/bin/claude` 3. Install system tools: `git`, `ssh`, `meld`, `pandoc`, LaTeX tools (`pdflatex`, `latexmk`, `poppler-utils`) — all installed automatically via apt if missing 4. Install GTK bindings: `python3-gi`, `gir1.2-gtk-3.0`, `gir1.2-vte-2.91` -5. Copy the `bterminal/` Python package (recursively) and CLI tools (`ctx`, `consult`, `tasks`, `claude_log`, `memory_wizard` from `tools/`) to `~/.local/share/bterminal/`, and create a `bterminal-launcher` shell script that runs `python3 -m bterminal` +5. Copy the `bterminal/` Python package (recursively) and CLI tools (`ctx`, `consult`, `tasks`, `claude_log`, `memory_wizard`, `aider_setup_wizard` from `tools/`) to `~/.local/share/bterminal/`, and create a `bterminal-launcher` shell script that runs `python3 -m bterminal` 6. Create live symlinks for `defaults/`, `README.md`, `VERSION` — `git pull` takes effect immediately, no reinstall needed 7. Install new bundled skills to `~/.claude/commands/` (never overwrites existing files) 8. Create symlinks in `~/.local/bin/` @@ -553,7 +531,7 @@ The sidebar has eight built-in tabs: **Sessions**, **Ctx**, **Consult**, **Tasks | `Ctrl+Tab` | Next tab (wraps around) | | `Ctrl+PageUp` / `Ctrl+PageDown` | Previous / next tab | | `Ctrl+B` | Toggle sidebar | -| `Ctrl+G` | Toggle Git panel (Claude Code tabs) | +| `Ctrl+G` | Toggle Git panel (AI tabs) | | `F5` | Refresh Git panel | | `Ctrl+Shift+C` | Copy | | `Ctrl+Shift+V` | Paste (detects clipboard images) | @@ -565,7 +543,7 @@ Files in `~/.config/bterminal/`: | File | Contents | |------|----------| | `sessions.json` | SSH sessions and macros | -| `claude_sessions.json` | Claude Code session configs | +| `ai_sessions.json` | AI session configs (provider-aware schema R4.2); legacy `claude_sessions.json` is migrated automatically on first launch | | `consult.json` | OpenRouter API key, models and tribunal presets | | `install_errors.json` | Last installer run: errors and warnings | | `plugins.json` | Plugin enable/disable state | @@ -578,8 +556,8 @@ Files in `~/.config/bterminal/`: |-----|---------|---------| | `language` | `null` | UI locale code (`en`, `pl`, `de`, ...) or `null` for **Auto-detect** (LANGUAGE / LANG env). Set via Options dialog. | | `tell_ai_language` | `true` | When ON and language ≠ `en`, appends a one-line user-language hint to AI session intro prompts. | -| `license_accepted_hash` | _(unset)_ | SHA-256 of the LICENSE the user accepted. Hash mismatch (license updated, language switched) triggers re-prompt on next launch. | -| `license_accepted_at` | _(unset)_ | ISO-8601 timestamp of acceptance. | +| `license_accepted_hash` | *(unset)* | SHA-256 of the LICENSE the user accepted. Hash mismatch (license updated, language switched) triggers re-prompt on next launch. | +| `license_accepted_at` | *(unset)* | ISO-8601 timestamp of acceptance. | Context database: `~/.claude-context/context.db` @@ -637,7 +615,7 @@ bterminal/ ← Python package (~50 modules) tools/ ← standalone CLI scripts (installed flat to │ ~/.local/share/bterminal/, symlinked to │ ~/.local/bin/) -├── ctx, consult, tasks, claude_log, memory_wizard +├── ctx, consult, tasks, claude_log, memory_wizard, aider_setup_wizard ├── mock_ai_cli ← test harness (provider-agnostic state machine) ├── test_all.sh ← local test runner (unit/component/e2e/slow) ├── verify_e2e.sh ← bash smoke test against running BTerminal @@ -654,13 +632,13 @@ requirements with acceptance criteria. ## Testing -The full suite runs **locally**, without a VM. 207 tests, ~26 s wall-clock -on the dev machine. +The full suite runs **locally**, without a VM — ~190 test files / 2,500+ test +functions as of v1.3.5; `./tools/test_all.sh` prints current totals. ```bash ./tools/test_all.sh # fast (~16 s, 205 tests, skips slow) ./tools/test_all.sh --quick # unit only (~0.3 s, 135 tests, no xvfb) -./tools/test_all.sh --slow # full incl. exploration (~26 s, 207 tests) +./tools/test_all.sh --slow # full incl. exploration ./tools/test_all.sh --layer e2e # tests/e2e/ only (smoke battery + CLI tools) ./tools/test_all.sh --watch # auto-rerun on changes (needs pytest-watch) ``` @@ -673,6 +651,9 @@ Local requirements: ### Test layers +Per-layer counts below are the v1.2.0 refactor baseline; the suite has grown +every release since (pin tests are added for each fixed bug). + | Layer | Count | Time | What it covers | |-------|-------|------|----------------| | **Unit** | 135 | 0.3 s | pure functions: `config`, `models`, `ctx.helpers`, plugin contracts, updater, password cache, legacy shim, entry-point | @@ -740,6 +721,7 @@ in `locale//LC_MESSAGES/bterminal.po`; the runtime loads compiled | `ko` | 한국어 | Korean | 1-form | Each language ships: + - `locale//LC_MESSAGES/bterminal.po` — UI catalog (~75 strings) - `defaults/license/LICENSE..md` — full legal translation @@ -764,7 +746,7 @@ new Polish strings that were added without a `_()` / `N_()` wrapper, and completeness, plural-form correctness, and license attribution: ```bash -./tools/test_all.sh --quick # 314 tests, ~0.7s +./tools/test_all.sh --quick # unit layer, sub-second ``` ### Add a new language @@ -848,11 +830,20 @@ why switching language re-prompts: different file = different hash). The audit script (`tools/check_i18n.py`) does not flag PL in installer / docs / comments — only in user-facing UI strings inside `bterminal/`. +## Contributing + +Contributions of every kind are welcome — bug reports, feature ideas, +translations, documentation, screenshots and code. You do **not** need to know +git or programming to help. Start with +[CONTRIBUTING.md](CONTRIBUTING.md); questions go to +[Discussions](https://github.com/DexterFromLab/BTerminal/discussions). + ## License -Copyright (c) 2024-2026 **Bartosz Czarnota** <> +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +Contact: , , , -BTerminal is provided under a custom license requiring **attribution**. +BTerminal is provided under a custom license (v1.1) requiring **attribution**. The full terms are in [LICENSE.md](LICENSE.md). In short: you may use, modify, and redistribute the Software, but every copy and derivative work must reproduce the original authorship information (author name, diff --git a/defaults/license/LICENSE.cs.md b/defaults/license/LICENSE.cs.md index b918aa5..4f6cbab 100644 --- a/defaults/license/LICENSE.cs.md +++ b/defaults/license/LICENSE.cs.md @@ -2,10 +2,11 @@ **Verze 1.1** — platná od 2026-06-10 -Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** Kontakt: + --- @@ -23,8 +24,8 @@ Všechny kopie Softwaru, včetně podstatných částí a odvozených děl, původního autora**. Konkrétně musí v každé distribuci zůstat viditelné následující identifikátory: -- Jméno autora: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** -- Kontakt autora: ****, ****, **** +- Jméno autora: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +- Kontakt autora: ****, ****, ****, **** - Původní projekt: **BTerminal** Výše uvedené informace se musí objevit ve **všech** následujících @@ -83,5 +84,8 @@ Pokud odmítnete, aplikace se zavře nebo bude aktualizace zrušena. **Paweł Jesionkowski** (spoluautor) +**Tomasz Frankowski** (spoluautor) + + Toto upozornění o autorských právech a tyto podmínky musí být zahrnuty ve všech kopiích nebo podstatných částech Softwaru. diff --git a/defaults/license/LICENSE.de.md b/defaults/license/LICENSE.de.md index ded315b..68b6467 100644 --- a/defaults/license/LICENSE.de.md +++ b/defaults/license/LICENSE.de.md @@ -2,10 +2,11 @@ **Version 1.1** — gültig ab 2026-06-10 -Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** Kontakt: + --- @@ -24,8 +25,8 @@ Werke, **müssen die ursprünglichen Urheberinformationen** vollständig und unverändert wiedergeben. Insbesondere müssen folgende Angaben in jeder Distribution sichtbar bleiben: -- Name des Autors: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** -- Kontakt des Autors: ****, ****, **** +- Name des Autors: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +- Kontakt des Autors: ****, ****, ****, **** - Name des Originalprojekts: **BTerminal** Die obigen Informationen müssen an **allen** der folgenden Stellen jeder @@ -85,5 +86,8 @@ Bei Ablehnung wird die Anwendung geschlossen oder das Update abgebrochen. **Paweł Jesionkowski** (Mitautor) +**Tomasz Frankowski** (Mitautor) + + Dieser Urheberrechtshinweis und diese Bedingungen müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein. diff --git a/defaults/license/LICENSE.en.md b/defaults/license/LICENSE.en.md index 4c4a258..3b23588 100644 --- a/defaults/license/LICENSE.en.md +++ b/defaults/license/LICENSE.en.md @@ -2,10 +2,11 @@ **Version 1.1** — effective 2026-06-10 -Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** Contact: + --- @@ -23,8 +24,8 @@ derivative works, **must reproduce the authorship information of the original author** in full and unaltered. Specifically, the following identifiers must remain visible in every distribution: -- Author name: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** -- Author contact: ****, ****, **** +- Author name: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +- Author contact: ****, ****, ****, **** - Original project: **BTerminal** The above information must appear in **all** of the following surfaces @@ -82,5 +83,8 @@ performed. **Paweł Jesionkowski** (co-author) +**Tomasz Frankowski** (co-author) + + This copyright notice and these conditions shall be included in all copies or substantial portions of the Software. diff --git a/defaults/license/LICENSE.es.md b/defaults/license/LICENSE.es.md index e0c9761..34b0f81 100644 --- a/defaults/license/LICENSE.es.md +++ b/defaults/license/LICENSE.es.md @@ -2,10 +2,11 @@ **Versión 1.1** — vigente desde el 2026-06-10 -Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** Contacto: + --- @@ -24,8 +25,8 @@ trabajos derivados, **deben reproducir la información de autoría del autor original** de forma íntegra e inalterada. En particular, los siguientes identificadores deben permanecer visibles en cada distribución: -- Nombre del autor: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** -- Contacto del autor: ****, ****, **** +- Nombre del autor: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +- Contacto del autor: ****, ****, ****, **** - Proyecto original: **BTerminal** La información anterior debe aparecer en **todas** las siguientes @@ -84,5 +85,8 @@ Si rechaza, la aplicación se cerrará o se cancelará la actualización. **Paweł Jesionkowski** (coautor) +**Tomasz Frankowski** (coautor) + + Este aviso de derechos de autor y estas condiciones deberán incluirse en todas las copias o porciones sustanciales del Software. diff --git a/defaults/license/LICENSE.fr.md b/defaults/license/LICENSE.fr.md index d7fe0ac..ada847b 100644 --- a/defaults/license/LICENSE.fr.md +++ b/defaults/license/LICENSE.fr.md @@ -2,10 +2,11 @@ **Version 1.1** — en vigueur depuis le 2026-06-10 -Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** Contact : + --- @@ -25,8 +26,8 @@ l'auteur original** de manière complète et inaltérée. Plus précisément, les identifiants suivants doivent rester visibles dans chaque distribution : -- Nom de l'auteur : **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** -- Contact de l'auteur : ****, ****, **** +- Nom de l'auteur : **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +- Contact de l'auteur : ****, ****, ****, **** - Projet original : **BTerminal** Les informations ci-dessus doivent apparaître à **tous** les endroits @@ -86,5 +87,8 @@ En cas de refus, l'application se fermera ou la mise à jour sera annulée. **Paweł Jesionkowski** (co-auteur) +**Tomasz Frankowski** (co-auteur) + + Cette notice de droit d'auteur et ces conditions doivent être incluses dans toutes les copies ou portions substantielles du Logiciel. diff --git a/defaults/license/LICENSE.it.md b/defaults/license/LICENSE.it.md index 45657f5..e786b54 100644 --- a/defaults/license/LICENSE.it.md +++ b/defaults/license/LICENSE.it.md @@ -2,10 +2,11 @@ **Versione 1.1** — in vigore dal 2026-06-10 -Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** Contatto: + --- @@ -25,8 +26,8 @@ le informazioni di paternità dell'autore originale**. In particolare, i seguenti identificativi devono rimanere visibili in ogni distribuzione: -- Nome dell'autore: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** -- Contatto dell'autore: ****, ****, **** +- Nome dell'autore: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +- Contatto dell'autore: ****, ****, ****, **** - Progetto originale: **BTerminal** Le suddette informazioni devono comparire in **tutte** le seguenti @@ -87,5 +88,8 @@ verrà annullato. **Paweł Jesionkowski** (coautore) +**Tomasz Frankowski** (coautore) + + La presente nota di copyright e le presenti condizioni devono essere incluse in tutte le copie o porzioni sostanziali del Software. diff --git a/defaults/license/LICENSE.ja.md b/defaults/license/LICENSE.ja.md index 311151b..76efd5c 100644 --- a/defaults/license/LICENSE.ja.md +++ b/defaults/license/LICENSE.ja.md @@ -2,10 +2,11 @@ **バージョン 1.1** — 2026-06-10 より有効 -Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** 連絡先: + --- @@ -21,8 +22,8 @@ Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionko **原著作者の帰属情報を完全かつ変更せずに再現する**必要があります。 具体的には、以下の識別情報を各配布物において表示し続ける必要があります。 -- 著作者氏名: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** -- 著作者連絡先: ****, ****, **** +- 著作者氏名: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +- 著作者連絡先: ****, ****, ****, **** - 元プロジェクト: **BTerminal** 上記の情報は、再配布または派生著作物の以下の**すべての**箇所に @@ -77,5 +78,8 @@ BTerminal のライセンスダイアログで **「同意する」** をクリ **Paweł Jesionkowski** (共著者) +**Tomasz Frankowski** (共著者) + + この著作権表示およびこれらの条件は、本ソフトウェアのすべての複製 または重要な部分に含めなければなりません。 diff --git a/defaults/license/LICENSE.ko.md b/defaults/license/LICENSE.ko.md index a23034f..fec26b0 100644 --- a/defaults/license/LICENSE.ko.md +++ b/defaults/license/LICENSE.ko.md @@ -2,10 +2,11 @@ **버전 1.1** — 2026-06-10부터 효력 발생 -Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** 연락처: + --- @@ -21,8 +22,8 @@ Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionko **원저작자의 저작자 표시 정보를 완전하게 변경 없이 재현해야 합니다**. 구체적으로 다음 식별 정보가 모든 배포물에 가시적으로 유지되어야 합니다: -- 저작자 이름: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** -- 저작자 연락처: ****, ****, **** +- 저작자 이름: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +- 저작자 연락처: ****, ****, ****, **** - 원래 프로젝트: **BTerminal** 위의 정보는 모든 재배포 또는 파생 저작물의 다음 **모든** 위치에 @@ -76,5 +77,8 @@ BTerminal 라이선스 대화 상자에서 **"동의함"**을 클릭하면 위 **Paweł Jesionkowski** (공동 저자) +**Tomasz Frankowski** (공동 저자) + + 이 저작권 고지 및 본 조건은 소프트웨어의 모든 사본 또는 상당 부분에 포함되어야 합니다. diff --git a/defaults/license/LICENSE.pl.md b/defaults/license/LICENSE.pl.md index c7e74a5..7722af9 100644 --- a/defaults/license/LICENSE.pl.md +++ b/defaults/license/LICENSE.pl.md @@ -2,10 +2,11 @@ **Wersja 1.1** — obowiązuje od 2026-06-10 -Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** Kontakt: + --- @@ -24,8 +25,8 @@ pochodne, **muszą w pełni i w niezmienionej formie zachowywać informacje o autorstwie oryginału**. W szczególności następujące dane muszą pozostać widoczne w każdej dystrybucji: -- Imię i nazwisko autora: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** -- Kontakt z autorem: ****, ****, **** +- Imię i nazwisko autora: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +- Kontakt z autorem: ****, ****, ****, **** - Nazwa oryginalnego projektu: **BTerminal** Powyższe informacje muszą znaleźć się we **wszystkich** poniższych @@ -85,5 +86,8 @@ przerwana. **Paweł Jesionkowski** (współautor) +**Tomasz Frankowski** (współautor) + + Niniejsza nota o prawach autorskich wraz z powyższymi warunkami musi być zawarta we wszystkich kopiach lub istotnych częściach Oprogramowania. diff --git a/defaults/license/LICENSE.pt.md b/defaults/license/LICENSE.pt.md index 86c4c9b..97d0bbd 100644 --- a/defaults/license/LICENSE.pt.md +++ b/defaults/license/LICENSE.pt.md @@ -2,10 +2,11 @@ **Versão 1.1** — em vigor a partir de 2026-06-10 -Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** Contato: + --- @@ -25,8 +26,8 @@ original** integralmente e sem alterações. Em particular, os seguintes identificadores devem permanecer visíveis em todas as distribuições: -- Nome do autor: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** -- Contato do autor: ****, ****, **** +- Nome do autor: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +- Contato do autor: ****, ****, ****, **** - Projeto original: **BTerminal** As informações acima devem aparecer em **todos** os seguintes locais @@ -85,5 +86,8 @@ cancelada. **Paweł Jesionkowski** (coautor) +**Tomasz Frankowski** (coautor) + + Este aviso de direitos autorais e estas condições deverão ser incluídos em todas as cópias ou porções substanciais do Software. diff --git a/defaults/license/LICENSE.ru.md b/defaults/license/LICENSE.ru.md index 63fad42..08ebd2f 100644 --- a/defaults/license/LICENSE.ru.md +++ b/defaults/license/LICENSE.ru.md @@ -2,10 +2,11 @@ **Версия 1.1** — действует с 2026-06-10 -Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** Контакт: + --- @@ -25,8 +26,8 @@ Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionko В частности, следующие идентификаторы должны оставаться видимыми в каждом распространении: -- Имя автора: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** -- Контакт автора: ****, ****, **** +- Имя автора: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +- Контакт автора: ****, ****, ****, **** - Оригинальный проект: **BTerminal** Указанная информация должна присутствовать **во всех** следующих @@ -87,6 +88,9 @@ Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionko **Paweł Jesionkowski** (соавтор) +**Tomasz Frankowski** (соавтор) + + Данное уведомление об авторских правах и эти условия должны включаться во все копии или существенные части Программного обеспечения. diff --git a/defaults/license/LICENSE.uk.md b/defaults/license/LICENSE.uk.md index c1a1d25..81d3eee 100644 --- a/defaults/license/LICENSE.uk.md +++ b/defaults/license/LICENSE.uk.md @@ -2,10 +2,11 @@ **Версія 1.1** — чинна з 2026-06-10 -Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** Контакт: + --- @@ -24,8 +25,8 @@ Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionko інформацію про авторство оригінального автора**. Зокрема, наступні ідентифікатори мають залишатися видимими в кожному розповсюдженні: -- Ім'я автора: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** -- Контакт автора: ****, ****, **** +- Ім'я автора: **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +- Контакт автора: ****, ****, ****, **** - Оригінальний проєкт: **BTerminal** Зазначена інформація повинна з'являтися в **усіх** наведених нижче @@ -85,5 +86,8 @@ Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionko **Paweł Jesionkowski** (співавтор) +**Tomasz Frankowski** (співавтор) + + Це повідомлення про авторське право та ці умови повинні бути включені в усі копії або істотні частини Програмного забезпечення. diff --git a/defaults/license/LICENSE.zh.md b/defaults/license/LICENSE.zh.md index 2ff3fcc..510d7ad 100644 --- a/defaults/license/LICENSE.zh.md +++ b/defaults/license/LICENSE.zh.md @@ -2,10 +2,11 @@ **版本 1.1** — 自 2026-06-10 起生效 -Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** +Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** 联系方式: + --- @@ -19,8 +20,8 @@ Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionko 本软件的所有副本,包括其重要部分和衍生作品,**必须完整且不加更改地复制 原作者的署名信息**。具体而言,以下标识必须在每次分发中保持可见: -- 作者姓名:**Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski** -- 作者联系方式:****, ****, **** +- 作者姓名:**Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionkowski**, **Tomasz Frankowski** +- 作者联系方式:****, ****, ****, **** - 原始项目:**BTerminal** 上述信息必须出现在任何再分发或衍生作品的**所有**以下位置: @@ -66,4 +67,7 @@ Copyright (c) 2024-2026 **Bartosz Czarnota**, **Jakub Szpak**, **Paweł Jesionko **Paweł Jesionkowski** (联合作者) +**Tomasz Frankowski** (联合作者) + + 此版权声明和这些条件应包含在本软件的所有副本或重要部分中。