From 0291da17030466a4bb22c83cefa2da76b43e3348 Mon Sep 17 00:00:00 2001 From: Open-Squilla <275096992+Open-Squilla@users.noreply.github.com> Date: Sat, 4 Jul 2026 01:50:17 +0800 Subject: [PATCH] Prepare OpenSquilla 0.5.0rc1 release Prepare OpenSquilla 0.5.0rc1 release metadata, notes, release asset contracts, and no-portable current install docs. --- .github/workflows/wheelhouse-release.yml | 110 ++----------- CHANGELOG.md | 33 ++++ CONTRIBUTORS.md | 14 ++ README.de.md | 97 +++-------- README.es.md | 68 ++------ README.fr.md | 101 +++--------- README.ja.md | 70 ++------ README.md | 142 ++++++---------- README.product.md | 2 +- README.zh-Hans.md | 81 +++------- RELEASES.md | 153 +++++++++--------- desktop/electron/package-lock.json | 4 +- desktop/electron/package.json | 2 +- docs/README.md | 1 + docs/cli.md | 2 +- docs/code-signing-policy.md | 8 +- docs/mcp-server.md | 2 +- docs/operations.md | 2 +- docs/quickstart.md | 2 +- docs/releases/0.5.0rc1.md | 129 +++++++++++++++ install.ps1 | 4 +- install.sh | 8 +- pyproject.toml | 2 +- tests/test_ci/test_workflows.py | 4 +- tests/test_install_scripts.py | 2 +- tests/test_public_release_hygiene.py | 12 +- tests/test_release_consistency.py | 56 ++++--- .../test_scripts/test_build_wheelhouse_zip.py | 27 ++-- uv.lock | 2 +- 29 files changed, 491 insertions(+), 649 deletions(-) create mode 100644 docs/releases/0.5.0rc1.md diff --git a/.github/workflows/wheelhouse-release.yml b/.github/workflows/wheelhouse-release.yml index 3b1b2d17e..016f95a71 100644 --- a/.github/workflows/wheelhouse-release.yml +++ b/.github/workflows/wheelhouse-release.yml @@ -10,14 +10,6 @@ on: description: Optional existing tag to upload artifacts to required: false default: "" - python_runtime_release: - description: python-build-standalone release tag - required: true - default: "20260414" - python_runtime_version: - description: Full CPython runtime version from python-build-standalone - required: true - default: "3.12.13" permissions: contents: read @@ -29,12 +21,10 @@ concurrency: env: RELEASE_PROFILE: recommended RELEASE_TAG: ${{ github.event_name == 'push' && github.ref_name || github.event.inputs.tag }} - PYTHON_RUNTIME_RELEASE: ${{ github.event.inputs.python_runtime_release || '20260414' }} - PYTHON_RUNTIME_VERSION: ${{ github.event.inputs.python_runtime_version || '3.12.13' }} jobs: build-release-assets: - name: Build Windows release assets + name: Build Python release assets runs-on: windows-latest timeout-minutes: 90 steps: @@ -45,14 +35,6 @@ jobs: echo "Release tag must look like v0.2.0rc1 or v0.2.0: ${RELEASE_TAG}" >&2 exit 1 fi - if [[ ! "${PYTHON_RUNTIME_RELEASE}" =~ ^[0-9]{8}$ ]]; then - echo "python_runtime_release must be a YYYYMMDD python-build-standalone release tag." >&2 - exit 1 - fi - if [[ ! "${PYTHON_RUNTIME_VERSION}" =~ ^3[.]12[.][0-9]+$ ]]; then - echo "python_runtime_version must be a CPython 3.12 patch version." >&2 - exit 1 - fi - name: Checkout uses: actions/checkout@v4 @@ -116,75 +98,32 @@ jobs: exit 1 fi - - name: Test release builder + - name: Test release asset contracts run: uv run --extra dev pytest tests/test_scripts/test_build_wheelhouse_zip.py - - name: Build versioned portable zip + - name: Build versioned wheel shell: bash run: | rm -rf dist build/wheelhouse-zip - python scripts/build_wheelhouse_zip.py \ - --profile "${RELEASE_PROFILE}" \ - --platform-tag windows-x64 \ - --python-runtime-release "${PYTHON_RUNTIME_RELEASE}" \ - --python-runtime-version "${PYTHON_RUNTIME_VERSION}" \ - --bundle-python-runtime - - - name: Collect versioned wheel - shell: bash - run: | - python - <<'PY' - import shutil - from pathlib import Path - - wheels = sorted(Path("build/wheelhouse-zip/wheels").glob("opensquilla-*.whl")) - assert len(wheels) == 1, f"expected one built wheel, got {len(wheels)}" - shutil.copy2(wheels[0], Path("dist") / wheels[0].name) - PY + uv build --wheel --out-dir dist - name: Smoke versioned release artifacts shell: bash run: | python - <<'PY' - import json import tomllib from pathlib import Path from zipfile import ZipFile version = tomllib.loads(Path("pyproject.toml").read_text(encoding="utf-8"))["project"]["version"] - zips = sorted( - path for path in Path("dist").glob("OpenSquilla-*.zip") - if path.name != "OpenSquilla-windows-x64-portable.zip" - ) wheels = sorted( path for path in Path("dist").glob("opensquilla-*.whl") ) - assert len(zips) == 1, f"expected one versioned portable zip, got {len(zips)}" assert len(wheels) == 1, f"expected one versioned wheel, got {len(wheels)}" - assert zips[0].name == ( - f"OpenSquilla-{version}-windows-x64-py312-recommended-portable.zip" - ) assert wheels[0].name == f"opensquilla-{version}-py3-none-any.whl" - - with ZipFile(zips[0]) as archive: - names = set(archive.namelist()) - archive_roots = sorted({name.split("/", 1)[0] for name in names if "/" in name}) - assert len(archive_roots) == 1, f"expected one archive root: {archive_roots}" - root = archive_roots[0] + "/" - manifest = json.loads(archive.read(root + "manifest.json")) - assert manifest["version"] == version, "manifest.version must match project version" - assert manifest["platform_tag"] == "windows-x64" - assert root + "LICENSE" in names - assert root + "THIRD_PARTY_NOTICES.md" in names - assert root + "README.md" in names - assert root + "packages/" + manifest["wheel_name"] in names - assert manifest["portable"] is True - assert root + "start.sh" in names - assert root + "start.ps1" in names - assert root + "Start OpenSquilla.cmd" in names - assert root + "install.sh" not in names - assert root + "install.ps1" not in names - assert any(name.startswith(root + "runtime/python/") for name in names) + assert not list(Path("dist").glob("OpenSquilla-*portable*.zip")), ( + "0.5+ release assets must not include Windows portable zips" + ) with ZipFile(wheels[0]) as archive: for info in archive.infolist(): @@ -201,29 +140,18 @@ jobs: run: | python - <<'PY' import hashlib - import re - import shutil import tomllib from pathlib import Path dist = Path("dist") project = tomllib.loads(Path("pyproject.toml").read_text(encoding="utf-8")) version = project["project"]["version"] - is_prerelease = bool(re.search(r"(?:a|b|rc)[0-9]+$", version)) - zips = sorted( - path for path in dist.glob("OpenSquilla-*.zip") - if path.name != "OpenSquilla-windows-x64-portable.zip" - ) wheels = sorted( path for path in dist.glob("opensquilla-*.whl") ) - assert len(zips) == 1, f"expected one versioned portable zip, got {len(zips)}" assert len(wheels) == 1, f"expected one versioned wheel, got {len(wheels)}" - assets = [zips[0], wheels[0]] - if not is_prerelease: - stable_zip = dist / "OpenSquilla-windows-x64-portable.zip" - shutil.copy2(zips[0], stable_zip) - assets = [zips[0], stable_zip, wheels[0]] + assert wheels[0].name == f"opensquilla-{version}-py3-none-any.whl" + assets = [wheels[0]] lines = [ f"{hashlib.sha256(path.read_bytes()).hexdigest()} {path.name}" for path in assets @@ -234,9 +162,8 @@ jobs: - name: Upload workflow artifact uses: actions/upload-artifact@v4 with: - name: opensquilla-release-assets-windows-x64-${{ env.RELEASE_PROFILE }} + name: opensquilla-release-assets-python-${{ env.RELEASE_PROFILE }} path: | - dist/*.zip dist/*.whl dist/SHA256SUMS @@ -418,7 +345,7 @@ jobs: - name: Download release assets uses: actions/download-artifact@v4 with: - pattern: opensquilla-release-assets-windows-x64-${{ env.RELEASE_PROFILE }} + pattern: opensquilla-release-assets-python-${{ env.RELEASE_PROFILE }} path: dist merge-multiple: true @@ -440,7 +367,6 @@ jobs: python - <<'PY' import hashlib import os - import re from pathlib import Path dist = Path("dist") @@ -451,7 +377,6 @@ jobs: wheels = sorted(dist.glob("opensquilla-*-py3-none-any.whl")) assert len(wheels) == 1, f"expected one wheel when RELEASE_TAG is empty, got {len(wheels)}" version = wheels[0].name.removeprefix("opensquilla-").removesuffix("-py3-none-any.whl") - is_prerelease = bool(re.search(r"(?:a|b|rc)[0-9]+$", version)) asset_names = [ f"OpenSquilla-{version}-mac-arm64.dmg", f"OpenSquilla-{version}-mac-arm64.zip", @@ -462,10 +387,7 @@ jobs: f"OpenSquilla-{version}-win-x64.exe.blockmap", "latest.yml", f"opensquilla-{version}-py3-none-any.whl", - f"OpenSquilla-{version}-windows-x64-py312-recommended-portable.zip", ] - if not is_prerelease: - asset_names.append("OpenSquilla-windows-x64-portable.zip") lines = [] for name in asset_names: path = dist / name @@ -480,7 +402,6 @@ jobs: python - <<'PY' import hashlib import os - import re from pathlib import Path dist = Path("dist") @@ -491,7 +412,6 @@ jobs: wheels = sorted(dist.glob("opensquilla-*-py3-none-any.whl")) assert len(wheels) == 1, f"expected one wheel when RELEASE_TAG is empty, got {len(wheels)}" version = wheels[0].name.removeprefix("opensquilla-").removesuffix("-py3-none-any.whl") - is_prerelease = bool(re.search(r"(?:a|b|rc)[0-9]+$", version)) sha256s = dist / "SHA256SUMS" asset_names = [ f"OpenSquilla-{version}-mac-arm64.dmg", @@ -503,10 +423,7 @@ jobs: f"OpenSquilla-{version}-win-x64.exe.blockmap", "latest.yml", f"opensquilla-{version}-py3-none-any.whl", - f"OpenSquilla-{version}-windows-x64-py312-recommended-portable.zip", ] - if not is_prerelease: - asset_names.append("OpenSquilla-windows-x64-portable.zip") assets = [dist / name for name in asset_names] assert sha256s.is_file(), "missing SHA256SUMS" for path in assets: @@ -607,13 +524,11 @@ jobs: python - <<'PY' import json import os - import re import subprocess import sys tag = os.environ["TAG"] version = tag.removeprefix("v") - is_prerelease = bool(re.search(r"(?:a|b|rc)[0-9]+$", version)) expected = { f"OpenSquilla-{version}-mac-arm64.dmg", f"OpenSquilla-{version}-mac-arm64.zip", @@ -624,11 +539,8 @@ jobs: f"OpenSquilla-{version}-win-x64.exe.blockmap", "latest.yml", f"opensquilla-{version}-py3-none-any.whl", - f"OpenSquilla-{version}-windows-x64-py312-recommended-portable.zip", "SHA256SUMS", } - if not is_prerelease: - expected.add("OpenSquilla-windows-x64-portable.zip") raw = subprocess.check_output( ["gh", "release", "view", tag, "--json", "assets"], text=True, diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bd677d71..5e189f11c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,39 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed +## [0.5.0rc1] - 2026-07-04 + +### Added + +- Added dynamic Model Ensemble routing, OpenAI/Codex-oriented provider support, + direct single-model routing defaults, and progressive reveal behavior so + preview users can test the new routing line before the next stable release. +- Added managed execution host-routing paths and sandbox/approval alignment for + safer terminal, desktop, and host-execution workflows. +- Added Control UI and desktop affordances for router/provider settings, + drag-and-drop attachments, history materialization, and image preview + navigation. +- Added OpenTUI preview improvements for terminal and gateway workflows. + +### Changed + +- Preview release assets now publish Electron desktop installers, updater + metadata, a versioned Python wheel, and `SHA256SUMS`; new 0.5 preview releases + no longer publish Windows portable zips or portable latest aliases. +- Sandbox run modes, approval boundaries, and managed host execution now share + clearer authorization and diagnostics across Windows, Linux, and desktop + sessions. +- Desktop update, privacy, code-signing, and release documentation now describe + the preview asset set and portable retirement path. + +### Fixed + +- Improved Windows subprocess encoding, process cleanup, gateway lifecycle + diagnostics, router timeout handling, and packaged desktop runtime checks. +- Fixed desktop/Web UI recovery cases around settings restore, refreshed + sessions, image preview movement, attachment handling, and provider/router + visibility. + ## [0.4.1] - 2026-06-30 ### Added diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index fbdf74a0f..ee1ad5d05 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -26,6 +26,20 @@ trailers. | [@ab2ence](https://github.com/ab2ence) | macOS Seatbelt backend execution, denial escalation, and release-candidate type-check cleanup. | [#46](https://github.com/opensquilla/opensquilla/pull/46), [`fb1e6225`](https://github.com/opensquilla/opensquilla/pull/46/commits/fb1e6225e4db9cb0801ea347a89c2066e3e0601b), [`f73ac3eb`](https://github.com/opensquilla/opensquilla/pull/46/commits/f73ac3eb0044c64c79cfd18f9ec03d1bba9128ff), [`cf3b046f`](https://github.com/opensquilla/opensquilla/pull/46/commits/cf3b046f42a42efc951320b0af80e9d066dcf7d2) | | [@kimjune01](https://github.com/kimjune01) | Provider stream timeout cleanup fix that prevents double-closing provider streams. | [#46](https://github.com/opensquilla/opensquilla/pull/46), [`06e3126d`](https://github.com/opensquilla/opensquilla/pull/46/commits/06e3126d8ebda4ad4cf349ca7be0d0804e0c008d) | +## OpenSquilla 0.5.0rc1 + +The 0.5.0 Preview 1 release records new human contributor work after the +0.4.1 release. It intentionally does not repeat the earlier 0.4.x contributor +lists. + +| Contributor | 0.5.0 Preview 1 contribution | Evidence | +| --- | --- | --- | +| [@ab2ence](https://github.com/ab2ence) | Added drag-and-drop attachments, dynamic Model Ensemble routing, and ensemble timeout tuning. | [#388](https://github.com/opensquilla/opensquilla/pull/388), [`bc9ab2fe`](https://github.com/opensquilla/opensquilla/commit/bc9ab2fe), [#454](https://github.com/opensquilla/opensquilla/pull/454) | +| [@Liu-RK](https://github.com/Liu-RK) | Aligned sandbox run-mode authorization and approval behavior, then fixed managed execution host routing. | [#412](https://github.com/opensquilla/opensquilla/pull/412), [#450](https://github.com/opensquilla/opensquilla/pull/450) | +| [@TUOXI293](https://github.com/TUOXI293) | Added image preview navigation. | [#447](https://github.com/opensquilla/opensquilla/pull/447) | +| Tqangxl | Improved gateway lifecycle conflict diagnostics and promoted SQLAlchemy to a core dependency. | [`1fede3ea`](https://github.com/opensquilla/opensquilla/commit/1fede3ea), [`eb6776f2`](https://github.com/opensquilla/opensquilla/commit/eb6776f2) | +| Shuo Zhang | Fixed WeCom AI Bot websocket mode. | [`94e4b1c1`](https://github.com/opensquilla/opensquilla/commit/94e4b1c1) | + ## OpenSquilla 0.4.1 The 0.4.1 release records new human contributor work after the 0.4.0 diff --git a/README.de.md b/README.de.md index 385a180f0..1318ff447 100644 --- a/README.de.md +++ b/README.de.md @@ -43,7 +43,7 @@ Provider-Schicht spricht mit OpenRouter, OpenAI, Anthropic, Ollama, DeepSeek, Gemini, Qwen/DashScope und über 20 weiteren LLM-Providern — ohne Änderung an deinem Code oder deinem Konfigurationsschema. -OpenSquilla 0.4.1 ist die aktuelle Version. +OpenSquilla 0.5.0 Preview 1 ist die aktuelle Preview-Version. Für aufgabenorientierte Produktdokumentation beginnst du am besten mit dem [OpenSquilla-Produktleitfaden](README.product.md) oder dem @@ -56,41 +56,36 @@ dem [OpenSquilla-Produktleitfaden](README.product.md) oder dem OpenSquilla läuft unter Windows, macOS und Linux. Wähle den Weg, der zu deinem Einsatzzweck passt. -Desktop-Installationsprogramme, Windows Portable und die schnelle -Terminal-Installation liefern dir ein vorgefertigtes **Release** — kein +Desktop-Installationsprogramme und die schnelle Terminal-Installation liefern dir +ein vorgefertigtes **Release** — kein Git erforderlich. Die beiden anderen — Aus Quellcode installieren und Aus Quellcode entwickeln — bauen **aus einem Git-Checkout** (`git clone` + Git LFS). Release-Installationsbefehle verwenden veröffentlichte GitHub-Release-Assets. -Das Windows-Portable-ZIP hat außerdem einen -`/releases/latest/download/`-Alias für die aktuelle Version. Python-Wheel-Installationen verwenden versionsbehaftete Wheel-Dateinamen, weil die Installationsprogramme die im Wheel-Dateinamen eingebettete Version prüfen. -Für den Desktop-Einsatz von 0.4.1 bevorzugst du die gepackten +Für den Desktop-Einsatz von 0.5.0 Preview 1 bevorzugst du die gepackten Desktop-Installationsprogramme aus dem GitHub-Release: -`OpenSquilla-0.4.1-mac-arm64.dmg` unter macOS und -`OpenSquilla-0.4.1-win-x64.exe` unter Windows. Das Windows-Portable-ZIP -bleibt als Kompatibilitätspaket für Skripte und Portable-Ordner-Workflows -weiterhin verfügbar. +`OpenSquilla-0.5.0rc1-mac-arm64.dmg` unter macOS und +`OpenSquilla-0.5.0rc1-win-x64.exe` unter Windows. | Weg | Zielgruppe | Wann verwenden | | --- | --- | --- | | [Desktop-Installationsprogramme](#desktop-installers) **(empfohlen für Desktop)** | macOS- und Windows-Nutzer | Gepackte Desktop-App | -| [Windows Portable](#windows-portable-no-python) | Windows-Nutzer | Kompatibilität; keine Python-Toolchain; Start aus einem ZIP | | [Schnelle Terminal-Installation](#quick-terminal-install) **(empfohlen)** | Endnutzer auf jedem Betriebssystem | Release-Wheel aus dem Terminal | | [Aus Quellcode installieren](#install-from-source) | Nutzer, die `main` verfolgen | Aus einem Checkout ausführen, nicht bearbeiten | | [Aus Quellcode entwickeln](#develop-from-source) | Mitwirkende | Quellcode bearbeiten, testen oder debuggen | ### Voraussetzungen -| Anforderung | Windows Portable | Schnelle Terminal-Installation | Aus Quellcode installieren | Aus Quellcode entwickeln | -| --- | :---: | :---: | :---: | :---: | -| Python 3.12+ | mitgeliefert | über `uv` | über `uv` oder System | über `uv` | -| Git + Git LFS | — | — | erforderlich | erforderlich | -| `uv` | — | wird bei Bedarf installiert | empfohlen | erforderlich | +| Anforderung | Schnelle Terminal-Installation | Aus Quellcode installieren | Aus Quellcode entwickeln | +| --- | :---: | :---: | :---: | +| Python 3.12+ | über `uv` | über `uv` oder System | über `uv` | +| Git + Git LFS | — | erforderlich | erforderlich | +| `uv` | wird bei Bedarf installiert | empfohlen | erforderlich | Das Standardprofil `recommended` installiert **SquillaRouter** — OpenSquillas Modell-Router auf dem Gerät — und seine Modell-Assets; @@ -99,9 +94,8 @@ separate Onboarding-Flag `--router disabled` behält die installierten Abhängigkeiten bei, schaltet den Router aber zur Laufzeit ab. Unter Windows benötigt die mit SquillaRouter gebündelte ONNX-Runtime -zusätzlich die Visual-C++-Runtime. Der Windows-Portable-Launcher und das -PowerShell-Installationsprogramm für die Quellcode-Installation -installieren sie automatisch über `winget`; der Weg über die +zusätzlich die Visual-C++-Runtime. Das PowerShell-Installationsprogramm für die +Quellcode-Installation installiert sie automatisch über `winget`; der Weg über die **schnelle Terminal-Installation** (`uv tool install`) tut das nicht — falls beim Start ein `DLL load failed`-Fehler protokolliert wird, installiere sie manuell (siehe [Fehlerbehebung](#troubleshooting)). @@ -125,66 +119,16 @@ Installationslinks: [Git](https://git-scm.com/downloads) · ### Desktop-Installationsprogramme -Die 0.4.1-Desktop-Installationsprogramme bündeln die Vue-Steuerkonsole +Die 0.5.0-Preview-1-Desktop-Installationsprogramme bündeln die Vue-Steuerkonsole und die Gateway-Runtime in einer Electron-Hülle. -- macOS Apple Silicon: -- Windows x64: +- macOS Apple Silicon: +- Windows x64: Beende vor dem Upgrade jede laufende OpenSquilla-Desktop-App. Vorhandene `~/.opensquilla/config.toml` und Sitzungsdaten werden weiterverwendet. - - -### Windows Portable (ohne Python) - -Der Kompatibilitätsweg unter Windows — das ZIP bringt eine gebündelte -CPython-Runtime mit, sodass keine separate Python-Installation nötig ist. - -1. Lade das aktuelle Portable-ZIP herunter: - -2. Entpacke es in einen beschreibbaren Ordner wie „Downloads“ oder - „Dokumente“, klicke dann mit der rechten Maustaste auf - `Start OpenSquilla.cmd` und wähle **Als Administrator ausführen**. -3. Schließe die Ersteinrichtung ab und öffne anschließend - . - -> [!NOTE] -> Windows-Builds sind derzeit unsigniert; der Start als Administrator ist der -> unterstützte Weg. Erscheint SmartScreen, wähle **Weitere Informationen** -> → **Trotzdem ausführen**. Blockiert Smart App Control oder eine -> Unternehmensrichtlinie die unsignierte App, nutze stattdessen die -> [schnelle Terminal-Installation](#quick-terminal-install). - -
-Fortgeschrittene Portable-Nutzung - -Stelle vor dem ersten Start einen OpenRouter-Key bereit: - -```powershell -$env:OPENROUTER_API_KEY="sk-..." -Set-ExecutionPolicy -Scope Process Bypass -.\start.ps1 -``` - -Wenn `OPENROUTER_API_KEY` gesetzt ist und keine lokale Konfiguration -existiert, schreibt der Launcher eine Konfiguration mit Verweis auf die -Umgebungsvariable und startet das Gateway ohne Nachfrage. Ist die -Variable nicht gesetzt, kannst du im Onboarding-Assistenten einen -beliebigen unterstützten Provider auswählen. - -Das Portable-ZIP installiert keinen globalen `opensquilla`-Befehl. Für -ein Terminal, in dem `opensquilla …` funktioniert, führe -`OpenSquilla Shell.cmd` aus oder rufe den gebündelten Launcher direkt -auf: - -```powershell -.\opensquilla.cmd onboard --provider openrouter --api-key-env OPENROUTER_API_KEY -``` - -
- ### Schnelle Terminal-Installation @@ -216,7 +160,7 @@ $env:Path = "$env:USERPROFILE\.local\bin;" + $env:Path **2. OpenSquilla installieren** — derselbe Befehl auf jeder Plattform. ```sh -uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl" +uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl" ``` Damit wird das OpenSquilla-Wheel von der Release-URL installiert; @@ -244,7 +188,7 @@ opensquilla gateway run Für eine vollständig festgelegte Installation verwende die versionsbehaftete Wheel-URL: -`https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl`. +`https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl`. @@ -789,9 +733,8 @@ direktem Single-Model-Routing weiter, aber die gebündelte `SquillaRouter`-Runtime bleibt inaktiv, bis das Visual C++ Redistributable für Visual Studio 2015–2022 (x64) installiert ist. -Der Windows-Portable-Launcher und das PowerShell-Installationsprogramm -für die Quellcode-Installation versuchen, das Redistributable über -`winget` zu installieren. Wenn du die schnelle Terminal-Installation +Das PowerShell-Installationsprogramm für die Quellcode-Installation versucht, +das Redistributable über `winget` zu installieren. Wenn du die schnelle Terminal-Installation verwendet hast oder `winget` nicht verfügbar ist, installiere es manuell und starte PowerShell neu: . Stelle anschließend den diff --git a/README.es.md b/README.es.md index 01ecd70b0..44de15e0a 100644 --- a/README.es.md +++ b/README.es.md @@ -34,7 +34,7 @@ OpenSquilla es un agente de IA con microkernel y eficiente en el uso de tokens. Cada punto de entrada —Web UI, CLI y canales de chat— se ejecuta a través de ese mismo bucle, de modo que el envío de herramientas, los reintentos y el registro de decisiones se comportan de forma idéntica en todas partes. Una capa de proveedores conectable se comunica con OpenRouter, OpenAI, Anthropic, Ollama, DeepSeek, Gemini, Qwen/DashScope y más de 20 proveedores de LLM adicionales, sin ningún cambio en tu código ni en el esquema de configuración. -OpenSquilla 0.4.1 es la versión actual. +OpenSquilla 0.5.0 Preview 1 es la versión preliminar actual. Para documentación de producto orientada a tareas, comienza por la [Guía de producto de OpenSquilla](README.product.md) o el [índice de documentación](docs/README.md). @@ -44,31 +44,30 @@ Para documentación de producto orientada a tareas, comienza por la [Guía de pr OpenSquilla funciona en Windows, macOS y Linux. Elige la ruta que se ajuste a tu caso de uso. -Los instaladores de escritorio, la versión portable de Windows y la instalación rápida desde terminal te ofrecen una **versión** precompilada, sin necesidad de Git. Las otras dos —instalar desde el código fuente y desarrollar desde el código fuente— se compilan **a partir de un checkout de Git** (`git clone` + Git LFS). +Los instaladores de escritorio y la instalación rápida desde terminal te ofrecen una **versión** precompilada, sin necesidad de Git. Las otras dos —instalar desde el código fuente y desarrollar desde el código fuente— se compilan **a partir de un checkout de Git** (`git clone` + Git LFS). -Los comandos de instalación de versiones usan los recursos de release publicados en GitHub. El zip portable de Windows también dispone de un alias `/releases/latest/download/` que apunta a la versión actual. Las instalaciones del wheel de Python usan nombres de archivo de wheel con versión, porque los instaladores validan la versión incrustada en el nombre del archivo del wheel. +Los comandos de instalación de versiones usan los recursos de release publicados en GitHub. Las instalaciones del wheel de Python usan nombres de archivo de wheel con versión, porque los instaladores validan la versión incrustada en el nombre del archivo del wheel. -Para el uso de escritorio de 0.4.1, opta por los instaladores de escritorio empaquetados de la Release de GitHub: `OpenSquilla-0.4.1-mac-arm64.dmg` en macOS y `OpenSquilla-0.4.1-win-x64.exe` en Windows. El zip portable de Windows se mantiene como paquete de compatibilidad heredada para scripts y flujos de trabajo basados en carpetas portables. +Para el uso de escritorio de 0.5.0 Preview 1, opta por los instaladores de escritorio empaquetados de la Release de GitHub: `OpenSquilla-0.5.0rc1-mac-arm64.dmg` en macOS y `OpenSquilla-0.5.0rc1-win-x64.exe` en Windows. | Ruta | Público | Cuándo usarla | | --- | --- | --- | | [Instaladores de escritorio](#desktop-installers) **(recomendado para escritorio)** | Usuarios de macOS y Windows | Aplicación de escritorio empaquetada | -| [Versión portable de Windows](#windows-portable-no-python) | Usuarios de Windows | Compatibilidad heredada; sin cadena de herramientas de Python; arranque desde un solo zip | | [Instalación rápida desde terminal](#quick-terminal-install) **(recomendado)** | Usuarios finales en cualquier SO | Wheel de release desde una terminal | | [Instalar desde el código fuente](#install-from-source) | Usuarios que siguen `main` | Ejecutar desde un checkout, no editarlo | | [Desarrollar desde el código fuente](#develop-from-source) | Colaboradores | Editar, probar o depurar el código fuente | ### Requisitos previos -| Requisito | Versión portable de Windows | Instalación rápida desde terminal | Instalar desde el código fuente | Desarrollar desde el código fuente | -| --- | :---: | :---: | :---: | :---: | -| Python 3.12+ | incluido | mediante `uv` | mediante `uv` o el sistema | mediante `uv` | -| Git + Git LFS | — | — | requerido | requerido | -| `uv` | — | se instala si falta | recomendado | requerido | +| Requisito | Instalación rápida desde terminal | Instalar desde el código fuente | Desarrollar desde el código fuente | +| --- | :---: | :---: | :---: | +| Python 3.12+ | mediante `uv` | mediante `uv` o el sistema | mediante `uv` | +| Git + Git LFS | — | requerido | requerido | +| `uv` | se instala si falta | recomendado | requerido | El perfil predeterminado `recommended` instala **SquillaRouter** —el enrutador de modelos en el dispositivo de OpenSquilla— y sus recursos de modelo; `OPENSQUILLA_INSTALL_PROFILE=core` omite esas dependencias. El indicador de onboarding independiente `--router disabled` mantiene las dependencias instaladas, pero apaga el enrutador en tiempo de ejecución. -En Windows, el runtime ONNX que incluye SquillaRouter también necesita el runtime de Visual C++. El lanzador portable de Windows y el instalador de PowerShell desde el código fuente lo instalan automáticamente mediante `winget`; la ruta de **instalación rápida desde terminal** (`uv tool install`) no lo hace: si el arranque registra un error `DLL load failed`, instálalo manualmente (consulta [Solución de problemas](#troubleshooting)). OpenSquilla sigue funcionando con enrutamiento directo a un único modelo hasta que se instale. +En Windows, el runtime ONNX que incluye SquillaRouter también necesita el runtime de Visual C++. El instalador de PowerShell desde el código fuente lo instala automáticamente mediante `winget`; la ruta de **instalación rápida desde terminal** (`uv tool install`) no lo hace: si el arranque registra un error `DLL load failed`, instálalo manualmente (consulta [Solución de problemas](#troubleshooting)). OpenSquilla sigue funcionando con enrutamiento directo a un único modelo hasta que se instale. En las instalaciones desde terminal de macOS, el runtime LightGBM de SquillaRouter también puede necesitar la biblioteca OpenMP del sistema. La aplicación de escritorio incluye el runtime que necesita, pero la **instalación rápida desde terminal** no instala bibliotecas de Homebrew ni del sistema. Si el arranque registra `Library not loaded: @rpath/libomp.dylib`, ejecuta `brew install libomp` y luego reinicia el gateway. OpenSquilla sigue funcionando con enrutamiento directo a un único modelo hasta que se instale. @@ -80,48 +79,13 @@ Enlaces de instalación: [Git](https://git-scm.com/downloads) · ### Instaladores de escritorio -Los instaladores de escritorio de 0.4.1 empaquetan la consola de control de Vue y el runtime del gateway en una carcasa de Electron. +Los instaladores de escritorio de 0.5.0 Preview 1 empaquetan la consola de control de Vue y el runtime del gateway en una carcasa de Electron. -- macOS Apple Silicon: -- Windows x64: +- macOS Apple Silicon: +- Windows x64: Cierra cualquier aplicación de escritorio de OpenSquilla en ejecución antes de actualizar. Se reutilizan el `~/.opensquilla/config.toml` y los datos de sesión existentes. - - -### Versión portable de Windows (sin Python) - -La ruta de compatibilidad heredada en Windows: el zip incluye un runtime de CPython empaquetado, por lo que no se requiere una instalación de Python aparte. - -1. Descarga el zip portable actual: - -2. Descomprímelo en una carpeta con permisos de escritura, como Descargas o Documentos, luego haz clic derecho en `Start OpenSquilla.cmd` y elige **Ejecutar como administrador**. -3. Completa la configuración inicial y luego abre . - -> [!NOTE] -> Las builds Windows no están firmadas actualmente; el arranque como administrador es la ruta admitida. Si aparece SmartScreen, elige **Más información** → **Ejecutar de todas formas**. Si Smart App Control o una política empresarial bloquea la aplicación sin firmar, usa en su lugar la [instalación rápida desde terminal](#quick-terminal-install). - -
-Uso avanzado de la versión portable - -Proporciona una clave de OpenRouter antes del primer arranque: - -```powershell -$env:OPENROUTER_API_KEY="sk-..." -Set-ExecutionPolicy -Scope Process Bypass -.\start.ps1 -``` - -Si `OPENROUTER_API_KEY` está definida y no existe ninguna configuración local, el lanzador escribe una configuración que referencia la variable de entorno e inicia el gateway sin preguntar. Si no está definida, el asistente de onboarding te permite elegir cualquier proveedor compatible. - -El zip portable no instala un comando global `opensquilla`. Para obtener una terminal donde funcione `opensquilla …`, ejecuta `OpenSquilla Shell.cmd` o llama directamente al lanzador incluido: - -```powershell -.\opensquilla.cmd onboard --provider openrouter --api-key-env OPENROUTER_API_KEY -``` - -
- ### Instalación rápida desde terminal @@ -147,7 +111,7 @@ $env:Path = "$env:USERPROFILE\.local\bin;" + $env:Path **2. Instala OpenSquilla**: el mismo comando en todas las plataformas. ```sh -uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl" +uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl" ``` Esto instala el wheel de OpenSquilla desde la URL de la release y luego deja que `uv` descargue las dependencias declaradas por los extras seleccionados. El extra predeterminado `recommended` incluye dependencias del runtime de SquillaRouter como ONNX Runtime, LightGBM, NumPy y tokenizers, así que una primera instalación necesita acceso a la red salvo que esos wheels ya estén en caché. `uv` no instala runtimes nativos del sistema como `libomp` de macOS o el Visual C++ Redistributable de Windows; consulta [Solución de problemas](#troubleshooting) si el runtime del enrutador informa de un error de carga de biblioteca nativa. @@ -163,7 +127,7 @@ opensquilla gateway run > Si no se encuentra `opensquilla` justo después de una instalación nueva con `uv`, abre una terminal nueva o vuelve a ejecutar la línea de PATH del paso 1. Para una instalación totalmente fijada, usa la URL del wheel con versión: -`https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl`. +`https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl`. @@ -550,7 +514,7 @@ opensquilla gateway restart Si el arranque registra `DLL load failed while importing onnxruntime_pybind11_state`, OpenSquilla sigue funcionando con enrutamiento directo a un único modelo, pero el runtime `SquillaRouter` incluido permanece inactivo hasta que se instale el Visual C++ Redistributable para Visual Studio 2015–2022 (x64). -El lanzador portable de Windows y el instalador de PowerShell desde el código fuente intentan instalar el redistributable mediante `winget`. Si usaste la instalación rápida desde terminal, o `winget` no está disponible, instálalo manualmente y reinicia PowerShell: . Luego restaura el enrutador recomendado: +El instalador de PowerShell desde el código fuente intenta instalar el redistributable mediante `winget`. Si usaste la instalación rápida desde terminal, o `winget` no está disponible, instálalo manualmente y reinicia PowerShell: . Luego restaura el enrutador recomendado: ```powershell opensquilla onboard --provider openrouter --api-key-env OPENROUTER_API_KEY --router recommended diff --git a/README.fr.md b/README.fr.md index 9ce584b1b..44cc9d4c3 100644 --- a/README.fr.md +++ b/README.fr.md @@ -43,7 +43,7 @@ enfichable dialogue avec OpenRouter, OpenAI, Anthropic, Ollama, DeepSeek, Gemini Qwen/DashScope et plus de 20 autres fournisseurs de LLM, sans aucun changement dans votre code ni dans votre schéma de configuration. -OpenSquilla 0.4.1 est la version actuelle. +OpenSquilla 0.5.0 Preview 1 est la préversion actuelle. Pour une documentation produit orientée tâches, commencez par le [Guide produit OpenSquilla](README.product.md) ou par l'[index de la @@ -56,38 +56,34 @@ documentation](docs/README.md). OpenSquilla fonctionne sous Windows, macOS et Linux. Choisissez la voie qui correspond à votre cas d'usage. -Les installateurs de bureau, la version portable Windows et l'installation rapide en -terminal vous fournissent une **version** préconstruite — aucun Git requis. Les deux +Les installateurs de bureau et l'installation rapide en terminal vous fournissent +une **version** préconstruite — aucun Git requis. Les deux autres — Installation depuis les sources et Développement depuis les sources — construisent **à partir d'un dépôt Git** (`git clone` + Git LFS). Les commandes d'installation de la version publiée utilisent les ressources de release -GitHub publiées. Le zip portable Windows dispose aussi d'un alias -`/releases/latest/download/` pointant vers la version actuelle. Les installations de -wheel Python utilisent des noms de fichier de wheel versionnés, car les installateurs -valident la version intégrée au nom de fichier du wheel. +GitHub publiées. Les installations de wheel Python utilisent des noms de fichier de +wheel versionnés, car les installateurs valident la version intégrée au nom de +fichier du wheel. -Pour un usage bureau en 0.4.1, préférez les installateurs de bureau empaquetés issus de la -Release GitHub : `OpenSquilla-0.4.1-mac-arm64.dmg` sous macOS et -`OpenSquilla-0.4.1-win-x64.exe` sous Windows. Le zip portable Windows reste disponible -en tant que paquet de compatibilité héritée pour les scripts et les workflows en -dossier portable. +Pour un usage bureau en 0.5.0 Preview 1, préférez les installateurs de bureau empaquetés issus de la +Release GitHub : `OpenSquilla-0.5.0rc1-mac-arm64.dmg` sous macOS et +`OpenSquilla-0.5.0rc1-win-x64.exe` sous Windows. | Voie | Public | Quand l'utiliser | | --- | --- | --- | | [Installateurs de bureau](#desktop-installers) **(recommandé pour le bureau)** | Utilisateurs macOS et Windows | Application de bureau empaquetée | -| [Version portable Windows](#windows-portable-no-python) | Utilisateurs Windows | Compatibilité héritée ; pas de chaîne d'outils Python ; lancement en un seul zip | | [Installation rapide en terminal](#quick-terminal-install) **(recommandé)** | Utilisateurs finaux sur tout OS | Wheel de la version publiée depuis un terminal | | [Installation depuis les sources](#install-from-source) | Utilisateurs suivant `main` | Exécuter depuis un dépôt, sans le modifier | | [Développement depuis les sources](#develop-from-source) | Contributeurs | Modifier, tester ou déboguer les sources | ### Prérequis -| Exigence | Version portable Windows | Installation rapide en terminal | Installation depuis les sources | Développement depuis les sources | -| --- | :---: | :---: | :---: | :---: | -| Python 3.12+ | inclus | via `uv` | via `uv` ou le système | via `uv` | -| Git + Git LFS | — | — | requis | requis | -| `uv` | — | installé s'il manque | recommandé | requis | +| Exigence | Installation rapide en terminal | Installation depuis les sources | Développement depuis les sources | +| --- | :---: | :---: | :---: | +| Python 3.12+ | via `uv` | via `uv` ou le système | via `uv` | +| Git + Git LFS | — | requis | requis | +| `uv` | installé s'il manque | recommandé | requis | Le profil `recommended` par défaut installe **SquillaRouter** — le routeur de modèles exécuté sur l'appareil d'OpenSquilla — ainsi que ses ressources de modèle ; @@ -96,9 +92,8 @@ distinct `--router disabled` conserve les dépendances installées mais désacti routeur à l'exécution. Sous Windows, l'environnement d'exécution ONNX intégré à SquillaRouter a aussi besoin -de l'environnement d'exécution Visual C++. Le lanceur portable Windows et -l'installateur PowerShell depuis les sources l'installent automatiquement via -`winget` ; la voie **Installation rapide en terminal** (`uv tool install`) ne le fait +de l'environnement d'exécution Visual C++. L'installateur PowerShell depuis les +sources l'installe automatiquement via `winget` ; la voie **Installation rapide en terminal** (`uv tool install`) ne le fait pas — si le démarrage journalise une erreur `DLL load failed`, installez-le manuellement (voir [Dépannage](#troubleshooting)). OpenSquilla continue de fonctionner avec un routage direct vers un modèle unique jusqu'à ce qu'il soit installé. @@ -120,64 +115,16 @@ Liens d'installation : [Git](https://git-scm.com/downloads) · ### Installateurs de bureau -Les installateurs de bureau 0.4.1 empaquettent la console de contrôle Vue et +Les installateurs de bureau 0.5.0 Preview 1 empaquettent la console de contrôle Vue et l'environnement d'exécution de la passerelle dans une enveloppe Electron. -- macOS Apple Silicon : -- Windows x64 : +- macOS Apple Silicon : +- Windows x64 : Quittez toute application de bureau OpenSquilla en cours d'exécution avant la mise à niveau. Les fichiers `~/.opensquilla/config.toml` et les données de session existants sont réutilisés. - - -### Version portable Windows (sans Python) - -La voie de compatibilité héritée sous Windows — le zip embarque un environnement -d'exécution CPython, si bien qu'aucune installation Python distincte n'est requise. - -1. Téléchargez le zip portable actuel : - -2. Extrayez-le dans un dossier accessible en écriture tel que Téléchargements ou - Documents, puis faites un clic droit sur `Start OpenSquilla.cmd` et choisissez - **Exécuter en tant qu'administrateur**. -3. Terminez la configuration de premier démarrage, puis ouvrez - . - -> [!NOTE] -> Les builds Windows ne sont actuellement pas signés ; le lancement en administrateur est la -> voie prise en charge. Si SmartScreen apparaît, choisissez **Informations -> complémentaires** → **Exécuter quand même**. Si Smart App Control ou une stratégie -> d'entreprise bloque l'application non signée, utilisez plutôt l'[Installation rapide -> en terminal](#quick-terminal-install). - -
-Usage avancé de la version portable - -Fournissez une clé OpenRouter avant le premier démarrage : - -```powershell -$env:OPENROUTER_API_KEY="sk-..." -Set-ExecutionPolicy -Scope Process Bypass -.\start.ps1 -``` - -Si `OPENROUTER_API_KEY` est défini et qu'aucune configuration locale n'existe, le -lanceur écrit une configuration référençant la variable d'environnement et démarre la -passerelle sans rien demander. S'il n'est pas défini, l'assistant d'onboarding vous -laisse choisir n'importe quel fournisseur pris en charge. - -Le zip portable n'installe pas de commande globale `opensquilla`. Pour disposer d'un -terminal où `opensquilla …` fonctionne, exécutez `OpenSquilla Shell.cmd`, ou appelez -directement le lanceur intégré : - -```powershell -.\opensquilla.cmd onboard --provider openrouter --api-key-env OPENROUTER_API_KEY -``` - -
- ### Installation rapide en terminal @@ -207,7 +154,7 @@ $env:Path = "$env:USERPROFILE\.local\bin;" + $env:Path **2. Installer OpenSquilla** — la même commande sur toutes les plateformes. ```sh -uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl" +uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl" ``` Cela installe le wheel OpenSquilla depuis l'URL de release, puis laisse `uv` @@ -232,7 +179,7 @@ opensquilla gateway run > nouveau terminal, ou réexécutez la ligne PATH de l'étape 1. Pour une installation entièrement épinglée, utilisez l'URL de wheel versionnée : -`https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl`. +`https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl`. @@ -754,9 +701,9 @@ vers un modèle unique, mais l'environnement d'exécution `SquillaRouter` intég inactif jusqu'à ce que le Visual C++ Redistributable pour Visual Studio 2015–2022 (x64) soit installé. -Le lanceur portable Windows et l'installateur PowerShell depuis les sources tentent -d'installer le redistributable via `winget`. Si vous avez utilisé l'installation rapide -en terminal, ou si `winget` n'est pas disponible, installez-le manuellement et +L'installateur PowerShell depuis les sources tente d'installer le redistributable via +`winget`. Si vous avez utilisé l'installation rapide en terminal, ou si `winget` +n'est pas disponible, installez-le manuellement et redémarrez PowerShell : . Puis rétablissez le routeur recommandé : diff --git a/README.ja.md b/README.ja.md index 64f3c74b4..bc254b040 100644 --- a/README.ja.md +++ b/README.ja.md @@ -34,7 +34,7 @@ OpenSquilla は、Token を効率的に使うマイクロカーネル AI Agent すべての入口——Web UI、CLI、チャットチャネル——が同じループ上で動くため、ツールのディスパッチ、リトライ、判断ログの挙動はどこでも同一です。プラグイン可能なプロバイダ層は OpenRouter、OpenAI、Anthropic、Ollama、DeepSeek、Gemini、Qwen/DashScope をはじめとする 20 以上の LLM プロバイダと、あなたのコードや設定スキーマを変えることなくやり取りします。 -OpenSquilla 0.4.1 が現在のリリースです。 +OpenSquilla 0.5.0 Preview 1 が現在のプレビューリリースです。 タスク指向の製品ドキュメントについては、[OpenSquilla 製品ガイド](README.product.md)または[ドキュメント索引](docs/README.md)から始めてください。 @@ -44,31 +44,30 @@ OpenSquilla 0.4.1 が現在のリリースです。 OpenSquilla は Windows、macOS、Linux で動作します。ご自身のユースケースに合った方法を選んでください。 -デスクトップインストーラー、Windows ポータブル版、ターミナルからのクイックインストールは、ビルド済みの**リリース**版をそのまま入手できます——Git は不要です。残りの 2 つ——ソースからのインストールとソースからの開発——は、**Git のチェックアウトから**ビルドします(`git clone` + Git LFS)。 +デスクトップインストーラーとターミナルからのクイックインストールは、ビルド済みの**リリース**版をそのまま入手できます——Git は不要です。残りの 2 つ——ソースからのインストールとソースからの開発——は、**Git のチェックアウトから**ビルドします(`git clone` + Git LFS)。 -リリース版のインストールコマンドは、公開された GitHub リリースのアセットを使います。Windows ポータブル版の zip には、現在のリリースを指す `/releases/latest/download/` というエイリアスもあります。Python wheel のインストールでは、バージョン付きの wheel ファイル名を使います。インストーラーが wheel ファイル名に埋め込まれたバージョンを検証するためです。 +リリース版のインストールコマンドは、公開された GitHub リリースのアセットを使います。Python wheel のインストールでは、バージョン付きの wheel ファイル名を使います。インストーラーが wheel ファイル名に埋め込まれたバージョンを検証するためです。 -0.4.1 をデスクトップで使う場合は、GitHub リリースからパッケージ版デスクトップインストーラーを使うことをおすすめします。macOS では `OpenSquilla-0.4.1-mac-arm64.dmg`、Windows では `OpenSquilla-0.4.1-win-x64.exe` です。Windows ポータブル版の zip は、スクリプトやポータブルフォルダ向けのワークフロー用に、旧版互換パッケージとして引き続き提供されています。 +0.5.0 Preview 1 をデスクトップで使う場合は、GitHub リリースからパッケージ版デスクトップインストーラーを使うことをおすすめします。macOS では `OpenSquilla-0.5.0rc1-mac-arm64.dmg`、Windows では `OpenSquilla-0.5.0rc1-win-x64.exe` です。 | 方法 | 対象 | 使うべき場面 | | --- | --- | --- | | [デスクトップインストーラー](#desktop-installers)**(デスクトップ推奨)** | macOS および Windows ユーザー | パッケージ版デスクトップアプリ | -| [Windows ポータブル版](#windows-portable-no-python) | Windows ユーザー | 旧版互換;Python ツールチェーン不要;zip 一つで起動 | | [ターミナルからのクイックインストール](#quick-terminal-install)**(推奨)** | あらゆる OS のエンドユーザー | ターミナルからリリース版 wheel をインストール | | [ソースからのインストール](#install-from-source) | `main` を追跡するユーザー | チェックアウトを編集せずに実行する | | [ソースからの開発](#develop-from-source) | コントリビューター | ソースを編集、テスト、デバッグする | ### 前提条件 -| 要件 | Windows ポータブル版 | クイックインストール | ソースからのインストール | ソースからの開発 | -| --- | :---: | :---: | :---: | :---: | -| Python 3.12+ | 同梱 | `uv` 経由 | `uv` またはシステム経由 | `uv` 経由 | -| Git + Git LFS | — | — | 必須 | 必須 | -| `uv` | — | なければ自動インストール | 推奨 | 必須 | +| 要件 | クイックインストール | ソースからのインストール | ソースからの開発 | +| --- | :---: | :---: | :---: | +| Python 3.12+ | `uv` 経由 | `uv` またはシステム経由 | `uv` 経由 | +| Git + Git LFS | — | 必須 | 必須 | +| `uv` | なければ自動インストール | 推奨 | 必須 | デフォルトの `recommended` プロファイルは **SquillaRouter**——OpenSquilla のデバイス上モデルルーター——とそのモデルアセットをインストールします。`OPENSQUILLA_INSTALL_PROFILE=core` ではこれらの依存関係を省きます。これとは別の `--router disabled` というオンボーディングフラグは、依存関係はインストールしたまま、実行時にルーターをオフにします。 -Windows では、SquillaRouter に同梱された ONNX ランタイムが Visual C++ ランタイムも必要とします。Windows ポータブル版のランチャーとソースからの PowerShell インストーラーは、`winget` 経由でこれを自動的にインストールします。一方、**ターミナルからのクイックインストール**(`uv tool install`)の経路ではインストールしません——起動時に `DLL load failed` エラーが記録された場合は、手動でインストールしてください([トラブルシューティング](#troubleshooting)を参照)。インストールされるまで、OpenSquilla は単一モデルへの直接ルーティングで動作を続けます。 +Windows では、SquillaRouter に同梱された ONNX ランタイムが Visual C++ ランタイムも必要とします。ソースからの PowerShell インストーラーは、`winget` 経由でこれを自動的にインストールします。一方、**ターミナルからのクイックインストール**(`uv tool install`)の経路ではインストールしません——起動時に `DLL load failed` エラーが記録された場合は、手動でインストールしてください([トラブルシューティング](#troubleshooting)を参照)。インストールされるまで、OpenSquilla は単一モデルへの直接ルーティングで動作を続けます。 macOS のターミナルインストールでは、SquillaRouter の LightGBM ランタイムがシステムの OpenMP ライブラリも必要とすることがあります。デスクトップアプリは必要なランタイムを同梱していますが、**ターミナルからのクイックインストール**は Homebrew やシステムライブラリをインストールしません。起動時に `Library not loaded: @rpath/libomp.dylib` が記録された場合は、`brew install libomp` を実行してからゲートウェイを再起動してください。インストールされるまで、OpenSquilla は単一モデルへの直接ルーティングで動作を続けます。 @@ -80,50 +79,13 @@ macOS のターミナルインストールでは、SquillaRouter の LightGBM ### デスクトップインストーラー -0.4.1 のデスクトップインストーラーは、Vue 製コントロールコンソールとゲートウェイランタイムを Electron シェルにまとめています。 +0.5.0 Preview 1 のデスクトップインストーラーは、Vue 製コントロールコンソールとゲートウェイランタイムを Electron シェルにまとめています。 -- macOS Apple Silicon: -- Windows x64: +- macOS Apple Silicon: +- Windows x64: アップグレードの前に、実行中の OpenSquilla デスクトップアプリをすべて終了してください。既存の `~/.opensquilla/config.toml` とセッションデータはそのまま再利用されます。 - - -### Windows ポータブル版(Python 不要) - -Windows 向けの旧版互換経路です——zip に CPython ランタイムが同梱されているため、Python を別途インストールする必要はありません。 - -1. 現在のポータブル版 zip をダウンロードします: - -2. ダウンロードフォルダやドキュメントフォルダなど、書き込み可能なフォルダに展開し、 - `Start OpenSquilla.cmd` を右クリックして**管理者として実行**を選びます。 -3. 初回セットアップを完了したら、 を開きます。 - -> [!NOTE] -> Windows ビルドは現在署名されていません。管理者として起動するのがサポートされた方法です。SmartScreen が表示された場合は、**詳細情報** → **実行** を選んでください。 -> Smart App Control や企業ポリシーが未署名アプリをブロックする場合は、代わりに[ターミナルからのクイックインストール](#quick-terminal-install)を使ってください。 - -
-ポータブル版の高度な使い方 - -初回起動の前に OpenRouter のキーを設定します: - -```powershell -$env:OPENROUTER_API_KEY="sk-..." -Set-ExecutionPolicy -Scope Process Bypass -.\start.ps1 -``` - -`OPENROUTER_API_KEY` が設定されていて、ローカル設定が存在しない場合、ランチャーは環境変数を参照する設定を書き込み、プロンプトを出さずにゲートウェイを起動します。設定されていない場合は、オンボーディングウィザードでサポートされている任意のプロバイダを選べます。 - -ポータブル版の zip はグローバルな `opensquilla` コマンドをインストールしません。`opensquilla …` が使えるターミナルが欲しい場合は、`OpenSquilla Shell.cmd` を実行するか、同梱のランチャーを直接呼び出してください: - -```powershell -.\opensquilla.cmd onboard --provider openrouter --api-key-env OPENROUTER_API_KEY -``` - -
- ### ターミナルからのクイックインストール @@ -149,7 +111,7 @@ $env:Path = "$env:USERPROFILE\.local\bin;" + $env:Path **2. OpenSquilla をインストールする**——どのプラットフォームでも同じコマンドです。 ```sh -uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl" +uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl" ``` これはリリース URL から OpenSquilla wheel をインストールし、続いて `uv` が、選択した extra が宣言する依存関係をダウンロードします。デフォルトの `recommended` extra には、ONNX Runtime、LightGBM、NumPy、tokenizers といった SquillaRouter のランタイム依存関係が含まれるため、これらの wheel がすでにキャッシュされていない限り、初回インストールにはネットワークアクセスが必要です。`uv` は macOS の `libomp` や Windows の Visual C++ Redistributable のようなシステムネイティブのランタイムはインストールしません。ルーターランタイムがネイティブライブラリの読み込みエラーを報告した場合は、[トラブルシューティング](#troubleshooting)を参照してください。 @@ -165,7 +127,7 @@ opensquilla gateway run > 新規の `uv` インストール直後に `opensquilla` が見つからない場合は、新しいターミナルを開くか、ステップ 1 の PATH 設定の行を再実行してください。 完全にバージョンを固定したインストールには、バージョン付きの wheel URL を使ってください: -`https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl`。 +`https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl`。 @@ -563,7 +525,7 @@ opensquilla gateway restart 起動時に `DLL load failed while importing onnxruntime_pybind11_state` が記録された場合、OpenSquilla は単一モデルへの直接ルーティングで動作を続けますが、同梱の `SquillaRouter` ランタイムは、Visual Studio 2015〜2022(x64)向けの Visual C++ Redistributable がインストールされるまで非アクティブのままです。 -Windows ポータブル版のランチャーと、ソースからの PowerShell インストーラーは、`winget` 経由でこの redistributable のインストールを試みます。ターミナルからのクイックインストールを使った場合、または `winget` が利用できない場合は、手動でインストールしてから PowerShell を再起動してください: 。その後、推奨のルーターを復元します: +ソースからの PowerShell インストーラーは、`winget` 経由でこの redistributable のインストールを試みます。ターミナルからのクイックインストールを使った場合、または `winget` が利用できない場合は、手動でインストールしてから PowerShell を再起動してください: 。その後、推奨のルーターを復元します: ```powershell opensquilla onboard --provider openrouter --api-key-env OPENROUTER_API_KEY --router recommended diff --git a/README.md b/README.md index 4dd1bf3ec..7f01e6e41 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ OpenRouter, OpenAI, Anthropic, Ollama, DeepSeek, Gemini, Qwen/DashScope, and 20+ other LLM providers with no change to your code or config schema. -OpenSquilla 0.4.1 is the current release. +OpenSquilla 0.5.0 Preview 1 is the current preview release. For task-oriented product documentation, start with the [OpenSquilla Product Guide](README.product.md) or the @@ -50,36 +50,31 @@ For task-oriented product documentation, start with the OpenSquilla runs on Windows, macOS, and Linux. Pick the path that matches your use case. -Desktop installers, Windows portable, and Quick terminal install give you a -prebuilt **release** — no Git required. The other two — Install from source and +Desktop installers and Quick terminal install give you a prebuilt **release** — +no Git required. The other two — Install from source and Develop from source — build **from a Git checkout** (`git clone` + Git LFS). -Release install commands use published GitHub release assets. The -Windows portable zip also has a `/releases/latest/download/` alias for -the current release. Python wheel installs use versioned wheel filenames -because installers validate the version embedded in the wheel filename. +Release install commands use published GitHub release assets. Python wheel installs use versioned wheel filenames because installers validate the version +embedded in the wheel filename. -For 0.4.1 desktop use, prefer the packaged desktop installers from the GitHub -Release: `OpenSquilla-0.4.1-mac-arm64.dmg` on macOS and -`OpenSquilla-0.4.1-win-x64.exe` on Windows. The Windows portable zip remains -available as a legacy compatibility package for scripts and portable-folder -workflows. +For 0.5.0 Preview 1 desktop use, prefer the packaged desktop installers from +the GitHub Release: `OpenSquilla-0.5.0rc1-mac-arm64.dmg` on macOS and +`OpenSquilla-0.5.0rc1-win-x64.exe` on Windows. | Path | Audience | When to use | | --- | --- | --- | | [Desktop installers](#desktop-installers) **(recommended desktop)** | macOS and Windows users | Packaged desktop app | -| [Windows portable](#windows-portable-no-python) | Windows users | Legacy compatibility; no Python toolchain; one-zip launch | | [Quick terminal install](#quick-terminal-install) **(recommended)** | End users on any OS | Release wheel from a terminal | | [Install from source](#install-from-source) | Users tracking `main` | Run from a checkout, not edit it | | [Develop from source](#develop-from-source) | Contributors | Edit, test, or debug the source | ### Prerequisites -| Requirement | Windows portable | Quick terminal install | Install from source | Develop from source | -| --- | :---: | :---: | :---: | :---: | -| Python 3.12+ | bundled | via `uv` | via `uv` or system | via `uv` | -| Git + Git LFS | — | — | required | required | -| `uv` | — | installed if missing | recommended | required | +| Requirement | Quick terminal install | Install from source | Develop from source | +| --- | :---: | :---: | :---: | +| Python 3.12+ | via `uv` | via `uv` or system | via `uv` | +| Git + Git LFS | — | required | required | +| `uv` | installed if missing | recommended | required | The default `recommended` profile installs **SquillaRouter** — OpenSquilla's on-device model router — and its model assets; @@ -88,12 +83,11 @@ separate `--router disabled` onboarding flag keeps the dependencies installed but turns the router off at runtime. On Windows, SquillaRouter's bundled ONNX runtime also needs the Visual -C++ runtime. The Windows portable launcher and the from-source -PowerShell installer install it automatically via `winget`; the -**Quick terminal install** (`uv tool install`) path does not — if +C++ runtime. The from-source PowerShell installer installs it automatically via +`winget`; the **Quick terminal install** (`uv tool install`) path does not — if startup logs a `DLL load failed` error, install it manually (see -[Troubleshooting](#troubleshooting)). OpenSquilla keeps running with -direct single-model routing until it is installed. +[Troubleshooting](#troubleshooting)). OpenSquilla keeps running with direct +single-model routing until it is installed. On macOS terminal installs, SquillaRouter's LightGBM runtime may also need the system OpenMP library. The desktop app bundles the @@ -109,60 +103,22 @@ Install links: [Git](https://git-scm.com/downloads) · ### Desktop installers -The 0.4.1 desktop installers package the Vue control console and gateway -runtime in an Electron shell. +The 0.5.0 Preview 1 desktop installers package the Vue control console and +gateway runtime in an Electron shell. -- macOS Apple Silicon: -- Windows x64: +- macOS Apple Silicon: +- Windows x64: Quit any running OpenSquilla desktop app before upgrading. Existing `~/.opensquilla/config.toml` and session data are reused. Code signing policy: [`docs/code-signing-policy.md`](docs/code-signing-policy.md). -### Windows portable (no Python) - -The legacy compatibility path on Windows — the zip ships a bundled CPython -runtime, so no separate Python install is required. - -1. Download the current portable zip: - -2. Extract it to a writable folder such as Downloads or Documents, - then right-click `Start OpenSquilla.cmd` and choose **Run as - administrator**. -3. Complete the first-run setup, then open . - > [!NOTE] -> Windows builds are currently unsigned; administrator launch is the supported -> path. If SmartScreen appears, choose **More info** → **Run anyway**. -> If Smart App Control or enterprise policy blocks the unsigned app, -> use [Quick terminal install](#quick-terminal-install) instead. - -
-Advanced portable usage - -Provide an OpenRouter key before first start: - -```powershell -$env:OPENROUTER_API_KEY="sk-..." -Set-ExecutionPolicy -Scope Process Bypass -.\start.ps1 -``` - -If `OPENROUTER_API_KEY` is set and no local config exists, the launcher -writes an env-reference config and starts the gateway without -prompting. If unset, the onboarding wizard lets you pick any supported -provider. - -The portable zip does not install a global `opensquilla` command. For a -terminal where `opensquilla …` works, run `OpenSquilla Shell.cmd`, or -call the bundled launcher directly: - -```powershell -.\opensquilla.cmd onboard --provider openrouter --api-key-env OPENROUTER_API_KEY -``` - -
+> Windows builds are currently unsigned. If SmartScreen appears, choose +> **More info** → **Run anyway**. If Smart App Control or enterprise policy +> blocks the unsigned app, use [Quick terminal install](#quick-terminal-install) +> instead. ### Quick terminal install @@ -191,7 +147,7 @@ $env:Path = "$env:USERPROFILE\.local\bin;" + $env:Path **2. Install OpenSquilla** — the same command on every platform. ```sh -uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl" +uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl" ``` This installs the OpenSquilla wheel from the release URL, then lets @@ -215,7 +171,7 @@ opensquilla gateway run > a new terminal, or re-run the PATH line from step 1. For a fully pinned install, use the versioned wheel URL: -`https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl`. +`https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl`. ### Install from source @@ -623,27 +579,27 @@ settings live in `opensquilla.toml.example`. --- -## What's New in 0.4.1 +## What's New in 0.5.0 Preview 1 -OpenSquilla 0.4.1 is a maintenance release for the desktop and Control UI line: +OpenSquilla 0.5.0 Preview 1 is a preview release for the new routing and +desktop/runtime line: -- **Desktop reliability** - packaged gateway checks now cover Coding mode, - `code-task`, and SquillaRouter startup, and desktop window/artifact handling - is more stable. -- **Six-language client support** - the Control UI and desktop client support - English, Simplified Chinese, Japanese, French, German, and Spanish across - first-paint and settings surfaces. -- **Coding mode and router packaging** - desktop builds fail fast if router - assets are missing or still Git LFS pointers, preventing degraded release - packages. -- **Telemetry and Windows polish** - install telemetry skips CI and test - environments, and Windows desktop assets use the OpenSquilla logo. -- **Mainline governance** - ordinary pull requests and release integration are - aligned around `main`, with maintainer branches reserved for release, hotfix, - staging, integration, and sandbox work. +- **Model Ensemble and smarter routing** - dynamic Model Ensemble routing, + OpenAI-compatible provider handling, Codex-style provider support, + progressive reveal, and direct single-model defaults are easier to configure + and inspect. +- **Managed execution alignment** - sandbox, run-mode, approval, and host + execution paths share clearer authorization boundaries and diagnostics. +- **Desktop and Control UI polish** - settings, router controls, drag-and-drop + attachments, history materialization, and image preview navigation are + steadier across refreshes and desktop sessions. +- **OpenTUI and terminal reliability** - the preview terminal frontend, gateway + lifecycle handling, subprocess encoding, and Windows process cleanup all get + tighter failure behavior. +- **Simplified release assets** - 0.5 preview releases publish Electron desktop installers and the Python wheel only. Full notes: [`CHANGELOG.md`](CHANGELOG.md) · -[`docs/releases/0.4.1.md`](docs/releases/0.4.1.md). +[`docs/releases/0.5.0rc1.md`](docs/releases/0.5.0rc1.md). ## What's New in 0.2.1 @@ -762,11 +718,11 @@ single-model routing, but the bundled `SquillaRouter` runtime stays inactive until the Visual C++ Redistributable for Visual Studio 2015–2022 (x64) is installed. -The Windows portable launcher and the from-source PowerShell installer -attempt to install the redistributable via `winget`. If you used Quick -terminal install, or `winget` is unavailable, install it manually and -restart PowerShell: . -Then restore the recommended router: +The from-source PowerShell installer attempts to install the redistributable via +`winget`. If you used Quick terminal install, or `winget` is unavailable, +install it manually and restart PowerShell: +. Then restore the recommended +router: ```powershell opensquilla onboard --provider openrouter --api-key-env OPENROUTER_API_KEY --router recommended diff --git a/README.product.md b/README.product.md index 29acd4912..0464cfd64 100644 --- a/README.product.md +++ b/README.product.md @@ -14,7 +14,7 @@ This guide is the product and usage entry point. The existing 1. Install OpenSquilla: ```sh - uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl" + uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl" ``` 2. Configure your provider: diff --git a/README.zh-Hans.md b/README.zh-Hans.md index 5bdf49449..65d6dc93d 100644 --- a/README.zh-Hans.md +++ b/README.zh-Hans.md @@ -37,7 +37,7 @@ OpenSquilla 是一个高效利用 Token 的微内核 AI Agent。本地模型路 Ollama、DeepSeek、Gemini、Qwen/DashScope 等 20 多个 LLM 提供商,无需改动你的代码或 配置结构。 -OpenSquilla 0.4.1 是当前发布版本。 +OpenSquilla 0.5.0 Preview 1 是当前预览发布版本。 如需面向任务的产品文档,请从 [OpenSquilla 产品指南](README.product.md)或[文档索引](docs/README.md)开始。 @@ -48,38 +48,34 @@ OpenSquilla 0.4.1 是当前发布版本。 OpenSquilla 可运行于 Windows、macOS 和 Linux。请选择与你的使用场景匹配的安装方式。 -桌面安装包、Windows 便携版和终端快速安装会直接给你一个预构建的**发布版**,无需 Git。另外两种——从源码安装和从源码开发——则需要克隆 Git 仓库后再构建(`git clone` + Git LFS)。 +桌面安装包和终端快速安装会直接给你一个预构建的**发布版**,无需 Git。另外两种——从源码安装和从源码开发——则需要克隆 Git 仓库后再构建(`git clone` + Git LFS)。 -发布版安装命令使用 GitHub 上已发布的 release 资源。Windows 便携版 zip 还有一个 -`/releases/latest/download/` 别名指向当前发布版。Python wheel 安装使用带版本号的 wheel +发布版安装命令使用 GitHub 上已发布的 release 资源。Python wheel 安装使用带版本号的 wheel 文件名,因为安装器会校验嵌入在 wheel 文件名中的版本号。 -对于 0.4.1 的桌面使用,建议从 GitHub Release 下载打包桌面安装包:macOS 上为 -`OpenSquilla-0.4.1-mac-arm64.dmg`,Windows 上为 `OpenSquilla-0.4.1-win-x64.exe`。 -Windows 便携版 zip 仍作为面向脚本和便携文件夹工作流的旧版兼容包保留。 +对于 0.5.0 Preview 1 的桌面使用,建议从 GitHub Release 下载打包桌面安装包:macOS 上为 +`OpenSquilla-0.5.0rc1-mac-arm64.dmg`,Windows 上为 `OpenSquilla-0.5.0rc1-win-x64.exe`。 | 安装方式 | 适合人群 | 何时使用 | | --- | --- | --- | | [桌面安装包](#desktop-installers)**(推荐桌面用户)** | macOS 和 Windows 用户 | 打包桌面应用 | -| [Windows 便携版](#windows-portable-no-python) | Windows 用户 | 旧版兼容;无需 Python 工具链;单 zip 启动 | | [终端快速安装](#quick-terminal-install)**(推荐)** | 任意系统的最终用户 | 在终端中安装发布版 wheel | | [从源码安装](#install-from-source) | 跟踪 `main` 分支的用户 | 从检出运行,而非修改它 | | [从源码开发](#develop-from-source) | 贡献者 | 编辑、测试或调试源码 | ### 前置条件 -| 要求 | Windows 便携版 | 终端快速安装 | 从源码安装 | 从源码开发 | -| --- | :---: | :---: | :---: | :---: | -| Python 3.12+ | 已内置 | 通过 `uv` | 通过 `uv` 或系统 | 通过 `uv` | -| Git + Git LFS | — | — | 必需 | 必需 | -| `uv` | — | 缺失则自动安装 | 推荐 | 必需 | +| 要求 | 终端快速安装 | 从源码安装 | 从源码开发 | +| --- | :---: | :---: | :---: | +| Python 3.12+ | 通过 `uv` | 通过 `uv` 或系统 | 通过 `uv` | +| Git + Git LFS | — | 必需 | 必需 | +| `uv` | 缺失则自动安装 | 推荐 | 必需 | 默认的 `recommended` 安装档会安装 **SquillaRouter**——OpenSquilla 的设备端模型路由 ——及其模型资源;`OPENSQUILLA_INSTALL_PROFILE=core` 则会省略这些依赖。而 `--router disabled` 这个独立的 onboarding 标志则会保留已装好的依赖,只在运行时关闭路由。 -在 Windows 上,SquillaRouter 内置的 ONNX 运行时还需要 Visual C++ 运行库。Windows -便携版启动器,以及源码安装用的 PowerShell 安装器,都会通过 `winget` 自动装好它;而 -**终端快速安装**(`uv tool install`)这条路径不会——如果启动时记录了 `DLL load failed` +在 Windows 上,SquillaRouter 内置的 ONNX 运行时还需要 Visual C++ 运行库。源码安装用的 +PowerShell 安装器会通过 `winget` 自动装好它;而**终端快速安装**(`uv tool install`)这条路径不会——如果启动时记录了 `DLL load failed` 错误,请手动安装(见[故障排查](#troubleshooting))。在装好之前,OpenSquilla 会以直连单一模型的路由方式继续运行。 在 macOS 终端安装时,SquillaRouter 的 LightGBM 运行时可能还需要系统的 OpenMP 库。 @@ -96,54 +92,14 @@ Windows 便携版 zip 仍作为面向脚本和便携文件夹工作流的旧版 ### 桌面安装包 -0.4.1 桌面安装包将 Vue 控制台和网关运行时打包在一个 Electron 外壳中。 +0.5.0 Preview 1 桌面安装包将 Vue 控制台和网关运行时打包在一个 Electron 外壳中。 -- macOS Apple Silicon: -- Windows x64: +- macOS Apple Silicon: +- Windows x64: 升级前请退出任何正在运行的 OpenSquilla 桌面应用。已有的 `~/.opensquilla/config.toml` 和会话数据会被复用。 - - -### Windows 便携版(无需 Python) - -Windows 上的旧版兼容路径——zip 附带了内置的 CPython 运行时,因此无需单独安装 Python。 - -1. 下载当前的便携版 zip: - -2. 将其解压到一个可写文件夹(如“下载”或“文档”),然后右键 - `Start OpenSquilla.cmd` 并选择**以管理员身份运行**。 -3. 完成首次配置,然后打开 。 - -> [!NOTE] -> Windows 构建当前未签名;以管理员身份启动是受支持的路径。如果出现 SmartScreen,请选择 -> **更多信息** → **仍要运行**。如果 Smart App Control 或企业策略拦截了未签名应用, -> 请改用[终端快速安装](#quick-terminal-install)。 - -
-便携版进阶用法 - -在首次启动前提供一个 OpenRouter key: - -```powershell -$env:OPENROUTER_API_KEY="sk-..." -Set-ExecutionPolicy -Scope Process Bypass -.\start.ps1 -``` - -如果设置了 `OPENROUTER_API_KEY` 且不存在本地配置,启动器会写入一个引用环境变量的配置 -并启动网关,而不会提示。如果未设置,onboarding 向导会让你选择任意受支持的提供商。 - -便携版 zip 不会安装全局的 `opensquilla` 命令。要获得一个 `opensquilla …` 可用的终端, -请运行 `OpenSquilla Shell.cmd`,或直接调用内置启动器: - -```powershell -.\opensquilla.cmd onboard --provider openrouter --api-key-env OPENROUTER_API_KEY -``` - -
- ### 终端快速安装 @@ -170,7 +126,7 @@ $env:Path = "$env:USERPROFILE\.local\bin;" + $env:Path **2. 安装 OpenSquilla**——所有平台命令相同。 ```sh -uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl" +uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl" ``` 这会从 release URL 安装 OpenSquilla wheel,再由 `uv` 下载所选 extra 所声明的依赖。 @@ -191,7 +147,7 @@ opensquilla gateway run > PATH 设置命令。 如需完全锁定版本的安装,请使用带版本号的 wheel URL: -`https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl`。 +`https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl`。 @@ -646,8 +602,7 @@ opensquilla gateway restart OpenSquilla 会以直连单一模型的路由方式继续运行,但内置的 `SquillaRouter` 运行时会保持 不活动,直到安装适用于 Visual Studio 2015–2022(x64)的 Visual C++ Redistributable。 -Windows 便携版启动器和从源码安装的 PowerShell 安装器会尝试通过 `winget` 安装该 -redistributable。如果你使用的是终端快速安装,或 `winget` 不可用,请手动安装它并重启 +从源码安装的 PowerShell 安装器会尝试通过 `winget` 安装该 redistributable。如果你使用的是终端快速安装,或 `winget` 不可用,请手动安装它并重启 PowerShell:。然后恢复推荐的路由: ```powershell diff --git a/RELEASES.md b/RELEASES.md index 33190d525..a2bb729bf 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -2,6 +2,7 @@ | Version | Tag | Date | Notes | |---|---|---|---| +| 0.5.0rc1 | v0.5.0rc1 | 2026-07-04 | Preview: Model Ensemble routing, Control UI, managed execution, OpenTUI, and portable retirement | | 0.4.1 | v0.4.1 | 2026-06-30 | Desktop reliability, six-language client support, telemetry accuracy, router packaging, and mainline governance | | 0.4.0 | v0.4.0 | 2026-06-27 | Control UI refresh, manual MetaSkills, coding mode, search expansion, and runtime hardening | | 0.3.0 | v0.3.0 | 2026-05-31 | MetaSkills, Health Doctor, tool compression, and docs release | @@ -10,35 +11,35 @@ | 0.2.0rc1 | v0.2.0rc1 | 2026-05-19 | Second public preview | | 0.1.0rc1 | v0.1.0rc1 | 2026-05-12 | First public preview | -Preview releases publish only versioned assets: - -- `OpenSquilla--windows-x64-py312-recommended-portable.zip` -- `opensquilla--py3-none-any.whl` -- `SHA256SUMS` - -0.4.x non-preview releases publish desktop installers plus the Python wheel. -The Windows desktop installer is currently unsigned; release notes and download -sections must link to `docs/code-signing-policy.md` until a signing workflow is -approved and enabled. The Windows portable zip is still published as a legacy -compatibility asset for existing scripts and portable-folder workflows. -Non-preview releases also publish a version-independent alias for the legacy -Windows portable zip `/releases/latest/download/` URL: +0.5.x preview releases publish Electron desktop installers, updater metadata, +the versioned Python wheel, and `SHA256SUMS`: - `OpenSquilla--mac-arm64.dmg` - `OpenSquilla--mac-arm64.zip` - `OpenSquilla--win-x64.exe` +- `latest-mac.yml` +- `latest.yml` +- `*.blockmap` - `opensquilla--py3-none-any.whl` -- `OpenSquilla--windows-x64-py312-recommended-portable.zip` -- `OpenSquilla-windows-x64-portable.zip` - `SHA256SUMS` +0.5.x preview releases are GitHub pre-releases and must not be marked as Latest. +They do not publish Windows portable zips, Windows portable latest aliases, +public wheelhouse zips, macOS portable zips, or Linux portable zips. +Existing 0.4.x release pages keep their legacy Windows portable downloads for +historical compatibility, but new 0.5.x releases only publish Electron desktop +installers plus the Python wheel. + +The Windows desktop installer is currently unsigned; release notes and download +sections must link to `docs/code-signing-policy.md` until a signing workflow is +approved and enabled. Windows browser downloads may carry Mark-of-the-Web, and +SmartScreen, Smart App Control, enterprise policy, and unsigned binary +reputation must be checked on a real Windows machine before broad promotion. + GitHub source archives remain available for code review and developer -reference; source installs should use `git clone` plus Git LFS. Public -wheelhouse zips, macOS portable zips, and Linux portable zips are intentionally -not published. Linux users install the same wheel through the versioned -`uv tool install` command documented in the README. -Python wheel filenames must remain versioned because installers validate the -version segment inside the wheel filename. +reference; source installs should use `git clone` plus Git LFS. Python wheel +filenames must remain versioned because installers validate the version segment +inside the wheel filename. Release docs must describe the unified non-user-initiated network observability switch. `OPENSQUILLA_PRIVACY_DISABLE_NETWORK_OBSERVABILITY=true` or: @@ -51,59 +52,68 @@ disable_network_observability = true disables automatic install telemetry, passive update checks, and desktop startup auto-update checks. The legacy compatibility environment variables `OPENSQUILLA_TELEMETRY_DISABLED=true` and -`OPENSQUILLA_UPDATE_CHECK_DISABLED=true` remain honored. Manual -user-initiated release, download, or update checks may still contact GitHub -after user intent. +`OPENSQUILLA_UPDATE_CHECK_DISABLED=true` remain honored. Manual user-initiated +release, download, or update checks may still contact GitHub after user intent. -Preview releases are GitHub pre-releases. Their README install commands must -use tag-pinned URLs such as: +Preview README install commands must use tag-pinned URLs such as: -- `https://github.com/opensquilla/opensquilla/releases/download/v0.2.0rc1/OpenSquilla-0.2.0rc1-windows-x64-py312-recommended-portable.zip` -- `https://github.com/opensquilla/opensquilla/releases/download/v0.2.0rc1/opensquilla-0.2.0rc1-py3-none-any.whl` - -0.4.x install commands use versioned wheel URLs because Python installers -validate wheel filenames. The legacy Windows portable zip may use the -`/releases/latest/download/` alias after the non-pre-release GitHub Release -exists. Fully pinned URLs remain available for every primary asset: - -- `https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/OpenSquilla-0.4.1-mac-arm64.dmg` -- `https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/OpenSquilla-0.4.1-win-x64.exe` -- `https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/OpenSquilla-0.4.1-windows-x64-py312-recommended-portable.zip` -- `https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl` +- `https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/OpenSquilla-0.5.0rc1-mac-arm64.dmg` +- `https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/OpenSquilla-0.5.0rc1-win-x64.exe` +- `https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl` ## Release SOP -1. Verify `git status` is clean. -2. Update `CHANGELOG.md`: move entries from `[Unreleased]` to the release section; reopen empty `[Unreleased]`. -3. Confirm the release notes and README download sections link to `PRIVACY.md`, - `THIRD_PARTY_NOTICES.md`, and `docs/code-signing-policy.md`, and do not - claim Windows code signing before it is enabled. Confirm privacy wording - documents the unified network observability switch and legacy opt-out - environment variables. -4. Bump `pyproject.toml` and `uv.lock` to the release version. -5. `git tag -a v0.4.1 -m "OpenSquilla 0.4.1"` -6. `git push origin v0.4.1` (this triggers `.github/workflows/wheelhouse-release.yml`) -7. Wait for the Release Assets workflow → review the draft GitHub Release. - For non-preview releases, confirm it contains desktop installers, the - versioned wheel, the legacy Windows portable assets, `SHA256SUMS`, plus - GitHub's generated source archives before publishing. -8. Confirm the draft GitHub Release is not marked as a pre-release. -9. Publish the GitHub Release, then run the post-publish tag URL checks: +1. Verify `git status` is clean before starting release prep. +2. Confirm the latest `origin/main` SHA is the intended release baseline and + that its required CI run completed successfully. +3. Prepare a release PR from `origin/main`: update version metadata, + `CHANGELOG.md`, `RELEASES.md`, `CONTRIBUTORS.md`, release notes, README + download sections, install scripts, workflow asset contracts, and release + tests. +4. Confirm release notes and README download sections link to `PRIVACY.md`, + `THIRD_PARTY_NOTICES.md`, and `docs/code-signing-policy.md`; do not claim + Windows code signing before it is enabled. Confirm privacy wording documents + the unified network observability switch and legacy opt-out environment + variables. +5. Bump `pyproject.toml`, `uv.lock`, `desktop/electron/package.json`, + `desktop/electron/package-lock.json`, `install.sh`, and `install.ps1` to the + release version. +6. Run the focused release contract tests locally, then open and merge the + release PR only after review and CI pass. +7. Fetch `origin main --tags`, verify the merged `origin/main` SHA and CI one + more time, then create the annotated tag on that exact SHA: ```sh - curl --fail --head --location https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/OpenSquilla-0.4.1-mac-arm64.dmg - curl --fail --head --location https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/OpenSquilla-0.4.1-win-x64.exe - curl --fail --head --location https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/OpenSquilla-0.4.1-windows-x64-py312-recommended-portable.zip - curl --fail --head --location https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl + git tag -a v0.5.0rc1 -m "OpenSquilla 0.5.0 Preview 1" + git push origin v0.5.0rc1 ``` -10. Run the post-publish latest URL check: +8. Wait for `.github/workflows/wheelhouse-release.yml`, then review the draft + GitHub Release. For `v0.5.0rc1`, confirm it is a pre-release, is not marked + Latest, and contains only the Electron installers, updater metadata, + versioned wheel, `SHA256SUMS`, plus GitHub's generated source archives. It + must not contain `OpenSquilla-*-portable.zip` or + `OpenSquilla-windows-x64-portable.zip`. +9. Publish the GitHub Release only after maintainer confirmation, then run the + post-publish tag URL checks: ```sh - curl --fail --head --location https://github.com/opensquilla/opensquilla/releases/latest/download/OpenSquilla-windows-x64-portable.zip + curl --fail --head --location https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/OpenSquilla-0.5.0rc1-mac-arm64.dmg + curl --fail --head --location https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/OpenSquilla-0.5.0rc1-win-x64.exe + curl --fail --head --location https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl + curl --fail --head --location https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/SHA256SUMS ``` -11. For subsequent previews: bump `pyproject.toml`, `uv.lock`, `CHANGELOG.md`, and the tag to the next preview version, for example `0.3.2rc1` / `v0.3.2rc1`. Preview GitHub Releases must be marked as pre-releases and should use tag-pinned README URLs until the next non-preview release exists. +10. If a release tag is wrong before publication, stop and repair it explicitly: + delete the local and remote tag, recreate it on the verified SHA, push it, + and rerun Release Assets. If a draft release already exists for the wrong + tag, delete the draft release before moving the tag so stale assets cannot + survive the repair. +11. For subsequent previews: bump the package version, docs, workflow + contracts, and tag to the next preview version, for example `0.5.0rc2` / + `v0.5.0rc2`. Preview GitHub Releases must remain pre-releases and use + tag-pinned README URLs until a later stable release is intentionally + promoted. ## GitHub-only release checks @@ -111,13 +121,12 @@ These checks cannot be fully proven by local artifact generation: - The tag exists on GitHub and matches `pyproject.toml`. - The release workflow can fetch hydrated Git LFS router assets. -- Preview GitHub Releases contain the versioned assets and `SHA256SUMS` after - `gh release upload --clobber`. -- Non-preview GitHub Releases contain the desktop installers, versioned wheel, - legacy Windows portable assets, update metadata, and `SHA256SUMS` after - `gh release upload --clobber`. -- After a non-preview GitHub Release is published, the latest legacy Windows portable URL resolves: - `.../releases/latest/download/OpenSquilla-windows-x64-portable.zip`. +- The draft GitHub Release title is `OpenSquilla 0.5.0 Preview 1`. +- The draft GitHub Release is marked Pre-release and is not marked Latest. +- Preview GitHub Releases contain the Electron installers, updater metadata, + versioned wheel, and `SHA256SUMS` after `gh release upload --clobber`. +- Preview GitHub Releases do not contain Windows portable zips or portable + latest aliases. - After a preview GitHub Release is published, the tag-pinned release asset URLs resolve. - Windows browser downloads may carry Mark-of-the-Web; SmartScreen, @@ -126,7 +135,7 @@ These checks cannot be fully proven by local artifact generation: ## Why preview package versions use rc -Release zips are distributed as built artifacts, so the package filename, -manifest, zip name, and tag should describe the same preview build. PEP 440 -accepts `0.2.0rc1`, while the public GitHub Release title can use the friendlier -name "OpenSquilla 0.2.0 Preview 1". +Release assets are distributed as built artifacts, so the package filename, +installer name, wheel name, and tag should describe the same preview build. +PEP 440 accepts `0.5.0rc1`, while the public GitHub Release title can use the +friendlier name "OpenSquilla 0.5.0 Preview 1". diff --git a/desktop/electron/package-lock.json b/desktop/electron/package-lock.json index bbd26b6c4..176da878c 100644 --- a/desktop/electron/package-lock.json +++ b/desktop/electron/package-lock.json @@ -1,12 +1,12 @@ { "name": "@opensquilla/desktop-electron", - "version": "0.4.1", + "version": "0.5.0rc1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@opensquilla/desktop-electron", - "version": "0.4.1", + "version": "0.5.0rc1", "dependencies": { "electron-updater": "^6.6.2" }, diff --git a/desktop/electron/package.json b/desktop/electron/package.json index 835acd6c3..e80ed5ae7 100644 --- a/desktop/electron/package.json +++ b/desktop/electron/package.json @@ -1,6 +1,6 @@ { "name": "@opensquilla/desktop-electron", - "version": "0.4.1", + "version": "0.5.0rc1", "private": true, "description": "Electron desktop shell for the OpenSquilla Control UI.", "repository": { diff --git a/docs/README.md b/docs/README.md index 2c7f4f0a0..3e3312037 100644 --- a/docs/README.md +++ b/docs/README.md @@ -39,6 +39,7 @@ root release README with task-oriented guides. ## Surfaces and Operations +- [`releases/0.5.0rc1.md`](releases/0.5.0rc1.md) - OpenSquilla 0.5.0 Preview 1 release notes. - [`releases/0.4.1.md`](releases/0.4.1.md) - OpenSquilla 0.4.1 release notes. - [`releases/0.4.0.md`](releases/0.4.0.md) - OpenSquilla 0.4.0 release notes. - [`releases/0.3.0.md`](releases/0.3.0.md) - OpenSquilla 0.3.0 release notes. diff --git a/docs/cli.md b/docs/cli.md index a14c90477..b795a0354 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -141,7 +141,7 @@ combined with `--repo`. install path. It requires Docker plus the `swebench` extra. ```sh -uv tool install --python 3.12 "opensquilla[recommended,swebench] @ https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl" +uv tool install --python 3.12 "opensquilla[recommended,swebench] @ https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl" opensquilla swebench pull django__django-16429 --dataset verified opensquilla swebench solve django__django-16429 --dataset verified --json opensquilla swebench eval predictions.jsonl --dataset verified diff --git a/docs/code-signing-policy.md b/docs/code-signing-policy.md index da80766fc..c5ed5d3f4 100644 --- a/docs/code-signing-policy.md +++ b/docs/code-signing-policy.md @@ -6,10 +6,10 @@ artifacts and the rules for any future signing workflow. ## Current Status Windows release builds are currently unsigned. The Windows desktop installer, -portable zip, updater metadata, and checksums are built and published without a -Windows code-signing certificate. Download pages and release notes must not -claim Windows code signing until a signing workflow has been approved, enabled, -and verified for the specific release artifact. +updater metadata, and checksums are built and published without a Windows +code-signing certificate. Download pages and release notes must not claim Windows code signing +until a signing workflow has been approved, enabled, and verified for the +specific release artifact. macOS release packaging is handled separately through the Apple signing and notarization path configured by maintainers for macOS artifacts. This document's diff --git a/docs/mcp-server.md b/docs/mcp-server.md index fc7fc0f32..3e6cf9850 100644 --- a/docs/mcp-server.md +++ b/docs/mcp-server.md @@ -12,7 +12,7 @@ UI, CLI, channels, and gateway control console. Install OpenSquilla with the MCP extra when you need this bridge: ```sh -uv tool install --python 3.12 "opensquilla[recommended,mcp] @ https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl" +uv tool install --python 3.12 "opensquilla[recommended,mcp] @ https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl" ``` Start the OpenSquilla gateway: diff --git a/docs/operations.md b/docs/operations.md index 0de71c030..66e8cb683 100644 --- a/docs/operations.md +++ b/docs/operations.md @@ -176,7 +176,7 @@ opensquilla mcp-server run Install with: ```sh -uv tool install --python 3.12 "opensquilla[recommended,mcp] @ https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl" +uv tool install --python 3.12 "opensquilla[recommended,mcp] @ https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl" ``` Use this when another MCP-capable client should access OpenSquilla-managed tools diff --git a/docs/quickstart.md b/docs/quickstart.md index 0f628b7ce..c57b2aac5 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -16,7 +16,7 @@ UI, SquillaRouter, memory/search support, and safe local defaults. Install the current release wheel with the recommended extras: ```sh -uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.4.1/opensquilla-0.4.1-py3-none-any.whl" +uv tool install --python 3.12 "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl" ``` The `recommended` extra includes SquillaRouter dependencies and memory/search diff --git a/docs/releases/0.5.0rc1.md b/docs/releases/0.5.0rc1.md new file mode 100644 index 000000000..3e2999cb7 --- /dev/null +++ b/docs/releases/0.5.0rc1.md @@ -0,0 +1,129 @@ +# OpenSquilla 0.5.0 Preview 1 + +## Overview + +OpenSquilla 0.5.0 Preview 1 is a preview release for the next routing and +managed-execution line. The headline feature is dynamic Model Ensemble routing: +OpenSquilla can route across multiple candidate models, progressively reveal +results, and still fall back to direct single-model defaults when that is the +better fit. The second major theme is sandbox and managed-execution alignment, +followed by Control UI polish, OpenTUI preview reliability, and Windows/runtime +cleanup. + +Existing gateway configuration and session data stay in place. Users upgrading +from 0.4.1 should close any running desktop app or gateway process, install the +0.5.0 Preview 1 package, and restart OpenSquilla. + +## What's Improved + +### Model Ensemble and smarter provider routing + +Dynamic Model Ensemble routing is a first-class preview feature: OpenSquilla +can route across multiple candidate models, progressively reveal results, and +fall back to direct single-model defaults when that is the better fit. +OpenAI-compatible and Codex-oriented provider paths are easier to select, +inspect, and combine with router timeout tuning and clearer target labels for +model requests. + +### Managed execution and sandbox alignment + +Sandbox run modes, approval boundaries, and managed host execution now share +clearer authorization behavior and diagnostics. This preview also tightens +gateway lifecycle conflict reporting and cross-platform subprocess handling. + +### Desktop and Control UI polish + +The desktop app and Control UI improve router/provider settings, drag-and-drop +attachments, history materialization, image preview navigation, settings +restore, refreshed-session recovery, and package runtime checks. + +### OpenTUI preview and terminal reliability + +OpenTUI preview work continues with stronger terminal behavior, while Windows +process cleanup, GBK/UTF-8 subprocess handling, pidlock behavior, and gateway +runtime diagnostics are more predictable. + +Non-user-initiated network observability can be disabled before startup with +`OPENSQUILLA_PRIVACY_DISABLE_NETWORK_OBSERVABILITY=true` or: + +```toml +[privacy] +disable_network_observability = true +``` + +That unified switch covers automatic install telemetry, passive update checks, +and desktop startup auto-update checks. The legacy compatibility environment +variables `OPENSQUILLA_TELEMETRY_DISABLED=true` and +`OPENSQUILLA_UPDATE_CHECK_DISABLED=true` remain honored; manual user-initiated +release, download, or update checks may still contact GitHub after user intent. + +## Downloads + +Recommended desktop downloads: + +- macOS desktop installer: `OpenSquilla-0.5.0rc1-mac-arm64.dmg` +- macOS desktop zip: `OpenSquilla-0.5.0rc1-mac-arm64.zip` +- Windows desktop installer: `OpenSquilla-0.5.0rc1-win-x64.exe` + +Code signing policy: [`docs/code-signing-policy.md`](../code-signing-policy.md). + +Terminal and automation downloads: + +- Python wheel: `opensquilla-0.5.0rc1-py3-none-any.whl` +- Checksums: `SHA256SUMS` + +No Windows portable assets are published for 0.5.0 preview releases. Existing +0.4.x portable downloads remain available on their original release pages for +legacy scripts and portable-folder workflows. New Windows users should use the +Electron installer or the terminal wheel install path. + +Privacy and third-party attribution are documented in +[`PRIVACY.md`](../../PRIVACY.md) and +[`THIRD_PARTY_NOTICES.md`](../../THIRD_PARTY_NOTICES.md). + +Updater metadata: + +- `latest-mac.yml` +- `latest.yml` +- `*.blockmap` + +## Upgrading from 0.4.1 + +If OpenSquilla was installed with `uv tool install`, reinstall 0.5.0 Preview 1 +over the existing tool environment: + +```sh +uv tool install --python 3.12 --force --reinstall-package opensquilla \ + "opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.5.0rc1/opensquilla-0.5.0rc1-py3-none-any.whl" +``` + +The release installers use the same forced reinstall path. Close any running +OpenSquilla gateway or desktop app before upgrading, then restart it after the +install. Existing `~/.opensquilla/config.toml` and session data are reused. + +Desktop users should quit the running desktop app before replacing it. macOS +users install the `.dmg` by dragging OpenSquilla into Applications. Windows +users run the `.exe` installer. + +Legacy Windows portable users should switch to the Windows Electron installer +or terminal wheel install path for 0.5.0 previews. Do not expect a new +0.5.0rc1 portable zip or `/releases/latest/download/` portable alias. + +## Acknowledgements + +Thanks to the contributors whose work is newly present in the 0.5.0 Preview 1 +release surface: + +- [@ab2ence](https://github.com/ab2ence) for drag-and-drop attachment work, + dynamic Model Ensemble routing, and ensemble timeout tuning. +- [@Liu-RK](https://github.com/Liu-RK) for sandbox authorization alignment and + managed execution host routing. +- [@TUOXI293](https://github.com/TUOXI293), a first-time OpenSquilla release + contributor, for image preview navigation. +- Tqangxl, a first-time OpenSquilla release contributor, for gateway lifecycle + conflict diagnostics and SQLAlchemy core dependency work. +- Shuo Zhang, a first-time OpenSquilla release contributor, for WeCom AI Bot + websocket mode work. + +See [`CONTRIBUTORS.md`](https://github.com/opensquilla/opensquilla/blob/main/CONTRIBUTORS.md) +for the full attribution ledger and PR/commit evidence. diff --git a/install.ps1 b/install.ps1 index 5447e7697..202e954ce 100644 --- a/install.ps1 +++ b/install.ps1 @@ -12,7 +12,7 @@ param( Set-StrictMode -Version Latest $ErrorActionPreference = 'Stop' -$defaultVersion = 'v0.4.1' +$defaultVersion = 'v0.5.0rc1' $repoSlug = if ($env:OPENSQUILLA_REPOSITORY) { $env:OPENSQUILLA_REPOSITORY } else { 'opensquilla/opensquilla' } $pythonVersion = if ($env:OPENSQUILLA_PYTHON_VERSION) { $env:OPENSQUILLA_PYTHON_VERSION } else { '3.12' } $originalPath = if ($env:Path) { $env:Path } else { '' } @@ -94,7 +94,7 @@ function Test-ReleaseVersion { } if ($Version -notin @('latest', 'stable') -and -not (Test-ReleaseVersion $Version)) { - Write-Error "install.ps1: unsupported OPENSQUILLA_VERSION='$Version'. The release installer only supports latest, stable, or release versions like v0.4.1. Use git clone plus scripts/install_source.ps1 for main, dev, branch, or source installs." + Write-Error "install.ps1: unsupported OPENSQUILLA_VERSION='$Version'. The release installer only supports latest, stable, or release versions like v0.5.0rc1. Use git clone plus scripts/install_source.ps1 for main, dev, branch, or source installs." exit 1 } diff --git a/install.sh b/install.sh index e7cc2f79e..145a6641b 100755 --- a/install.sh +++ b/install.sh @@ -7,7 +7,7 @@ set -euo pipefail -default_version="v0.4.1" +default_version="v0.5.0rc1" repo_slug="${OPENSQUILLA_REPOSITORY:-opensquilla/opensquilla}" python_version="${OPENSQUILLA_PYTHON_VERSION:-3.12}" original_path="${PATH:-}" @@ -18,10 +18,10 @@ cli_extras="" usage() { cat <&2 - echo "install.sh: the release installer only supports latest, stable, or release versions like v0.4.1." >&2 + echo "install.sh: the release installer only supports latest, stable, or release versions like v0.5.0rc1." >&2 echo "install.sh: use git clone plus scripts/install_source.sh for main, dev, branch, or source installs." >&2 exit 1 fi diff --git a/pyproject.toml b/pyproject.toml index ae04c70c3..2917eb215 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "opensquilla" -version = "0.4.1" +version = "0.5.0rc1" description = "OpenSquilla — microkernel Python agent runtime with MCP-native tools and multi-channel messaging" license = "Apache-2.0" readme = "README.md" diff --git a/tests/test_ci/test_workflows.py b/tests/test_ci/test_workflows.py index 4d3dd90ca..2b60ce3fb 100644 --- a/tests/test_ci/test_workflows.py +++ b/tests/test_ci/test_workflows.py @@ -685,7 +685,9 @@ def test_wheelhouse_release_publishes_only_recommended_router_profile() -> None: assert " profile:\n" not in text assert "RELEASE_PROFILE: recommended" in text - assert "--profile \"${RELEASE_PROFILE}\"" in text + assert "opensquilla-release-assets-python-${{ env.RELEASE_PROFILE }}" in text + assert "opensquilla-release-assets-${{ env.RELEASE_PROFILE }}" in text + assert "--profile \"${RELEASE_PROFILE}\"" not in text assert "- core" not in text diff --git a/tests/test_install_scripts.py b/tests/test_install_scripts.py index 302aa1941..97a14d349 100644 --- a/tests/test_install_scripts.py +++ b/tests/test_install_scripts.py @@ -7,7 +7,7 @@ RELEASE_PS1 = ROOT / "install.ps1" RELEASE_SH = ROOT / "install.sh" SOURCE_PS1 = ROOT / "scripts" / "install_source.ps1" SOURCE_SH = ROOT / "scripts" / "install_source.sh" -CURRENT_RELEASE_TAG = "v0.4.1" +CURRENT_RELEASE_TAG = "v0.5.0rc1" def test_source_install_scripts_force_refresh_local_uv_tool_package() -> None: diff --git a/tests/test_public_release_hygiene.py b/tests/test_public_release_hygiene.py index 040882c22..0ba284b64 100644 --- a/tests/test_public_release_hygiene.py +++ b/tests/test_public_release_hygiene.py @@ -190,15 +190,15 @@ def test_release_sop_documents_github_only_validation_boundary() -> None: required_phrases = [ "GitHub-only release checks", - "Preview releases publish only versioned assets", - "also publish a version-independent alias", - "OpenSquilla-windows-x64-portable.zip", + "0.5.x preview releases publish Electron desktop installers", + "must not be marked as Latest", + "do not publish Windows portable zips", + "portable latest aliases", "filenames must remain versioned", "SHA256SUMS", - "latest legacy Windows portable", - "post-publish latest URL check", + "post-publish tag URL checks", "curl --fail --head --location", - "wheelhouse zips, macOS portable zips, and Linux portable zips are intentionally", + "public wheelhouse zips, macOS portable zips, or Linux portable zips", "Mark-of-the-Web", "SmartScreen", "Smart App Control", diff --git a/tests/test_release_consistency.py b/tests/test_release_consistency.py index 47b6aef5b..67fc4be6b 100644 --- a/tests/test_release_consistency.py +++ b/tests/test_release_consistency.py @@ -5,10 +5,10 @@ import re import tomllib from pathlib import Path -CURRENT_VERSION = "0.4.1" +CURRENT_VERSION = "0.5.0rc1" CURRENT_TAG = f"v{CURRENT_VERSION}" -PREVIEW_VERSION = "0.2.0rc1" -PREVIEW_TAG = f"v{PREVIEW_VERSION}" +HISTORICAL_PREVIEW_VERSION = "0.2.0rc1" +HISTORICAL_PREVIEW_TAG = f"v{HISTORICAL_PREVIEW_VERSION}" def test_pyproject_version_matches_current_release() -> None: @@ -254,10 +254,13 @@ def test_releases_md_exists_and_references_current_and_preview_tags() -> None: assert releases.is_file(), "RELEASES.md must exist at the repository root" text = releases.read_text(encoding="utf-8") assert CURRENT_TAG in text, f"RELEASES.md must reference the tag '{CURRENT_TAG}'" - assert PREVIEW_TAG in text, f"RELEASES.md must reference the tag '{PREVIEW_TAG}'" + assert ( + HISTORICAL_PREVIEW_TAG in text + ), f"RELEASES.md must retain the historical tag '{HISTORICAL_PREVIEW_TAG}'" assert f"OpenSquilla-{CURRENT_VERSION}-mac-arm64.dmg" in text assert f"OpenSquilla-{CURRENT_VERSION}-win-x64.exe" in text - assert "legacy Windows portable" in text + assert "do not publish Windows portable zips" in text + assert "legacy Windows portable downloads" in text def test_changelog_has_current_release_section_and_unreleased() -> None: @@ -275,11 +278,9 @@ def test_readme_release_install_uses_latest_assets_and_pinned_alternative() -> N assert f"OpenSquilla-{CURRENT_VERSION}-mac-arm64.dmg" in readme assert f"OpenSquilla-{CURRENT_VERSION}-win-x64.exe" in readme - assert "legacy compatibility package" in readme - assert ( - "releases/latest/download/OpenSquilla-windows-x64-portable.zip" - in readme - ) + assert "Simplified release assets" in readme + assert "desktop installers and the Python wheel only" in readme + assert "releases/latest/download/OpenSquilla-windows-x64-portable.zip" not in readme assert ( f"releases/download/{CURRENT_TAG}/opensquilla-{CURRENT_VERSION}-py3-none-any.whl" in readme @@ -333,9 +334,8 @@ def test_release_workflow_marks_preview_tags_as_prereleases() -> None: assert "IS_PRERELEASE" in workflow assert "--prerelease" in workflow assert "OpenSquilla {match.group(1)} Preview {match.group(2)}" in workflow - assert "is_prerelease = bool(re.search" in workflow - assert "if not is_prerelease:" in workflow - assert "expected.add(\"OpenSquilla-windows-x64-portable.zip\")" in workflow + assert "0.5+ release assets must not include Windows portable zips" in workflow + assert "OpenSquilla-windows-x64-portable.zip" not in workflow assert "opensquilla-latest-py3-none-any.whl" not in workflow @@ -346,7 +346,7 @@ def test_historical_040_release_notes_remain_available() -> None: assert "OpenSquilla-0.4.0-mac-arm64.dmg" in notes -def test_current_release_notes_prioritize_desktop_and_legacy_portable() -> None: +def test_current_release_notes_prioritize_model_ensemble_and_sandbox() -> None: notes = Path(f"docs/releases/{CURRENT_VERSION}.md").read_text(encoding="utf-8") assert "## Downloads" in notes @@ -354,11 +354,18 @@ def test_current_release_notes_prioritize_desktop_and_legacy_portable() -> None: assert f"OpenSquilla-{CURRENT_VERSION}-mac-arm64.zip" in notes assert f"OpenSquilla-{CURRENT_VERSION}-win-x64.exe" in notes assert f"opensquilla-{CURRENT_VERSION}-py3-none-any.whl" in notes - assert "Legacy Windows portable" in notes - assert "legacy compatibility" in notes - assert "## Upgrading from 0.4.0" in notes + assert notes.index("### Model Ensemble") < notes.index( + "### Managed execution and sandbox alignment" + ) + assert notes.index("### Managed execution and sandbox alignment") < notes.index( + "### Desktop and Control UI polish" + ) + assert "No Windows portable assets are published for 0.5.0 preview releases" in notes + assert "0.5.0rc1 portable zip" in notes + assert "## Upgrading from 0.4.1" in notes assert "## Acknowledgements" in notes assert "@ab2ence" in notes + assert "first-time OpenSquilla release contributor" in notes def test_docs_index_links_current_release_notes() -> None: @@ -368,13 +375,20 @@ def test_docs_index_links_current_release_notes() -> None: assert "releases/0.4.0.md" in index -def test_current_contributor_ledger_records_041_attribution_without_repeating_040() -> None: +def test_current_contributor_ledger_records_050rc1_attribution() -> None: ledger = Path("CONTRIBUTORS.md").read_text(encoding="utf-8") - section = ledger.split("## OpenSquilla 0.4.1", 1)[1].split("## OpenSquilla 0.4.0", 1)[0] + section = ledger.split("## OpenSquilla 0.5.0rc1", 1)[1].split("## OpenSquilla 0.4.1", 1)[0] assert "@ab2ence" in section - assert "#348" in section - assert "#355" in section + assert "@Liu-RK" in section + assert "@TUOXI293" in section + assert "#388" in section + assert "#412" in section + assert "#447" in section + assert "#450" in section + assert "#454" in section + assert "Tqangxl" in section + assert "Shuo Zhang" in section assert "@nice-code-la" not in section assert "Codex" not in section assert "Claude Code" not in section diff --git a/tests/test_scripts/test_build_wheelhouse_zip.py b/tests/test_scripts/test_build_wheelhouse_zip.py index 73677b5bc..42f19fae5 100644 --- a/tests/test_scripts/test_build_wheelhouse_zip.py +++ b/tests/test_scripts/test_build_wheelhouse_zip.py @@ -831,7 +831,7 @@ def test_write_sha256s_records_all_release_zips(tmp_path: Path) -> None: assert checksum_path.read_text(encoding="utf-8").splitlines() == expected -def test_release_workflow_publishes_windows_portable_zip_and_wheel() -> None: +def test_release_workflow_publishes_wheel_and_electron_assets_without_portable() -> None: workflow = WORKFLOW_PATH.read_text(encoding="utf-8") assert "concurrency:" in workflow @@ -843,24 +843,25 @@ def test_release_workflow_publishes_windows_portable_zip_and_wheel() -> None: assert "build-desktop-macos:" in workflow assert "build-desktop-windows:" in workflow assert "Validate workflow inputs" in workflow - assert "python_runtime_release must be a YYYYMMDD" in workflow - assert "python_runtime_version must be a CPython 3.12 patch version" in workflow + assert "python_runtime_release" not in workflow + assert "python_runtime_version" not in workflow assert "persist-credentials: false" in workflow assert "bundle_python_runtime:" not in workflow - assert "--platform-tag windows-x64" in workflow + assert "--platform-tag windows-x64" not in workflow assert "platform_tag: macos-arm64" not in workflow assert "platform_tag: linux-x64" not in workflow assert "for mode in portable wheelhouse" not in workflow - assert "--bundle-python-runtime" in workflow - assert "expected one versioned portable zip" in workflow + assert "--bundle-python-runtime" not in workflow + assert "uv build --wheel --out-dir dist" in workflow + assert "expected one versioned portable zip" not in workflow assert "expected one versioned wheel" in workflow - assert "manifest[\"portable\"] is True" in workflow + assert "manifest[\"portable\"] is True" not in workflow assert "SHA256SUMS" in workflow - assert "manifest.version" in workflow + assert "manifest.version" not in workflow assert "GH_REPO: ${{ github.repository }}" in workflow - assert "is_prerelease = bool(re.search" in workflow - assert "if not is_prerelease:" in workflow - assert "OpenSquilla-windows-x64-portable.zip" in workflow + assert "0.5+ release assets must not include Windows portable zips" in workflow + assert "if not is_prerelease:" not in workflow + assert "OpenSquilla-windows-x64-portable.zip" not in workflow assert "OpenSquilla-{version}-mac-arm64.dmg" in workflow assert "OpenSquilla-{version}-win-x64.exe" in workflow assert "opensquilla-latest-py3-none-any.whl" not in workflow @@ -874,8 +875,8 @@ def test_release_workflow_publishes_windows_portable_zip_and_wheel() -> None: assert "Unexpected GitHub Release assets" in workflow assert "\"unexpected\": unexpected" in workflow assert "zip_path.stem" not in workflow - assert "archive_roots =" in workflow - assert "root = archive_roots[0] + \"/\"" in workflow + assert "archive_roots =" not in workflow + assert "root = archive_roots[0] + \"/\"" not in workflow def test_release_workflow_publishes_from_version_tags() -> None: diff --git a/uv.lock b/uv.lock index 7fb769c76..1418a9e78 100644 --- a/uv.lock +++ b/uv.lock @@ -1993,7 +1993,7 @@ wheels = [ [[package]] name = "opensquilla" -version = "0.4.1" +version = "0.5.0rc1" source = { editable = "." } dependencies = [ { name = "aiosqlite" },