From 389fe2b6070cf4d5dabf36d75921722e11429817 Mon Sep 17 00:00:00 2001 From: Evan Gong Date: Sat, 7 Nov 2026 01:28:32 +0800 Subject: [PATCH 01/16] fix: keep public downloads on the published stable release --- README.ja.md | 8 +++--- README.ko.md | 8 +++--- README.md | 6 ++--- README.zh-CN.md | 8 +++--- tests/test_distribution.py | 4 +-- tests/test_site_release_boundary.py | 38 +++++++++++++++++++++++++++++ website/assets/install-platform.js | 4 +-- website/build_site.py | 18 ++++++++------ 8 files changed, 70 insertions(+), 24 deletions(-) create mode 100644 tests/test_site_release_boundary.py diff --git a/README.ja.md b/README.ja.md index 3c7aaddc..9aa95a5a 100644 --- a/README.ja.md +++ b/README.ja.md @@ -14,19 +14,21 @@ ## インストール +V3 は未リリースです。以下のコマンドは公開済み安定版 **v2.0.8** をインストールします。 + OpenKyrozen は Python **3.12 と 3.13** をサポートします。Python 3.14 は対象外です。 ### macOS または Linux ```bash -curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.sh | sh +curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.sh | sh kyrozen ``` ### Windows PowerShell ```powershell -irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.ps1 | iex +irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.ps1 | iex kyrozen ``` @@ -53,7 +55,7 @@ make run ### 検証済み release wheel を直接インストール ```bash -uv tool install --python 3.12 --force --with fastapi --with uvicorn https://github.com/EvanProgramming/OpenKyrozen/releases/download/v3.0.0/openkyrozen-3.0.0-py3-none-any.whl +uv tool install --python 3.12 --force --with fastapi --with uvicorn https://github.com/EvanProgramming/OpenKyrozen/releases/download/v2.0.8/openkyrozen-2.0.8-py3-none-any.whl ``` ## クイックスタート diff --git a/README.ko.md b/README.ko.md index d8556a88..acec3fbf 100644 --- a/README.ko.md +++ b/README.ko.md @@ -14,19 +14,21 @@ ## 설치 +V3는 아직 출시되지 않았습니다. 아래 명령은 공개된 안정 버전 **v2.0.8**을 설치합니다. + OpenKyrozen은 Python **3.12와 3.13**을 지원합니다. Python 3.14는 지원 대상이 아닙니다. ### macOS 또는 Linux ```bash -curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.sh | sh +curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.sh | sh kyrozen ``` ### Windows PowerShell ```powershell -irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.ps1 | iex +irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.ps1 | iex kyrozen ``` @@ -53,7 +55,7 @@ make run ### 검증된 release wheel 직접 설치 ```bash -uv tool install --python 3.12 --force --with fastapi --with uvicorn https://github.com/EvanProgramming/OpenKyrozen/releases/download/v3.0.0/openkyrozen-3.0.0-py3-none-any.whl +uv tool install --python 3.12 --force --with fastapi --with uvicorn https://github.com/EvanProgramming/OpenKyrozen/releases/download/v2.0.8/openkyrozen-2.0.8-py3-none-any.whl ``` ## 빠른 시작 diff --git a/README.md b/README.md index 7ee04a39..02437a18 100644 --- a/README.md +++ b/README.md @@ -12,19 +12,19 @@ ## Install -This release is **v3.0.0**. It supports Python 3.12 and 3.13; Python 3.14 is outside the supported range. +V3 is not yet released. The commands below install the published stable **v2.0.8**. It supports Python 3.12 and 3.13; Python 3.14 is outside the supported range. macOS or Linux: ```sh -curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.sh | sh +curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.sh | sh kyrozen ``` Windows PowerShell: ```powershell -irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.ps1 | iex +irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.ps1 | iex kyrozen ``` diff --git a/README.zh-CN.md b/README.zh-CN.md index c4a7aded..21a2e8a5 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -14,19 +14,21 @@ ## 安装 +V3 尚未发布。下方命令安装已发布的稳定版 **v2.0.8**。 + OpenKyrozen 支持 Python **3.12 和 3.13**。Python 3.14 暂不支持。 ### macOS 或 Linux ```bash -curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.sh | sh +curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.sh | sh kyrozen ``` ### Windows PowerShell ```powershell -irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.ps1 | iex +irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.ps1 | iex kyrozen ``` @@ -53,7 +55,7 @@ make run ### 直接安装已验证的 release wheel ```bash -uv tool install --python 3.12 --force --with fastapi --with uvicorn https://github.com/EvanProgramming/OpenKyrozen/releases/download/v3.0.0/openkyrozen-3.0.0-py3-none-any.whl +uv tool install --python 3.12 --force --with fastapi --with uvicorn https://github.com/EvanProgramming/OpenKyrozen/releases/download/v2.0.8/openkyrozen-2.0.8-py3-none-any.whl ``` ## 快速开始 diff --git a/tests/test_distribution.py b/tests/test_distribution.py index c9d20185..97fcbc7d 100644 --- a/tests/test_distribution.py +++ b/tests/test_distribution.py @@ -176,12 +176,12 @@ def test_tag_release_workflow_validates_source_and_installed_artifacts(self): def test_public_install_paths_pin_the_verified_release(self): release_url = ( "https://github.com/EvanProgramming/OpenKyrozen/releases/download/" - "v3.0.0/openkyrozen-3.0.0-py3-none-any.whl" + "v2.0.8/openkyrozen-2.0.8-py3-none-any.whl" ) for readme in sorted(ROOT.glob("README*.md")): text = readme.read_text(encoding="utf-8") with self.subTest(readme=readme.name): - self.assertIn("raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/", text) + self.assertIn("raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/", text) wheel_urls = re.findall( r"https://github\.com/EvanProgramming/OpenKyrozen/releases/download/[^\s)]+\.whl", text, diff --git a/tests/test_site_release_boundary.py b/tests/test_site_release_boundary.py new file mode 100644 index 00000000..17f7d555 --- /dev/null +++ b/tests/test_site_release_boundary.py @@ -0,0 +1,38 @@ +"""Public installation commands must resolve before the V3 release exists.""" +import importlib.util +from pathlib import Path +import unittest + +ROOT = Path(__file__).resolve().parents[1] +spec = importlib.util.spec_from_file_location('release_site', ROOT / 'website/build_site.py') +site = importlib.util.module_from_spec(spec) +spec.loader.exec_module(site) + + +class SiteReleaseBoundaryTests(unittest.TestCase): + def test_rendered_downloads_use_published_stable_release(self): + for lang in ('en', 'zh-cn'): + for slug in ('home', 'install'): + with self.subTest(lang=lang, slug=slug): + rendered = site.document(lang, slug, site.PAGES[lang][slug]) + self.assertIn('/v2.0.8/install.', rendered) + self.assertNotIn('/v3.0.0/', rendered) + self.assertNotIn('openkyrozen-3.0.0-py3', rendered) + + def test_platform_switcher_preserves_published_download(self): + script = (ROOT/'website/assets/install-platform.js').read_text() + self.assertIn('/v2.0.8/install.sh', script) + self.assertIn('/v2.0.8/install.ps1', script) + self.assertNotIn('/v3.0.0/', script) + + def test_v3_is_identified_as_unreleased_in_both_languages(self): + for lang, phrase in (('en','V3 is not yet released'),('zh-cn','V3 尚未发布')): + rendered = site.document(lang,'install',site.PAGES[lang]['install']) + self.assertIn(phrase, rendered) + + def test_readme_downloads_also_use_the_published_release(self): + for readme in ROOT.glob('README*.md'): + text=readme.read_text() + with self.subTest(readme=readme.name): + self.assertTrue('/v2.0.8/install.' in text) + self.assertFalse('/v3.0.0/' in text) diff --git a/website/assets/install-platform.js b/website/assets/install-platform.js index 9e2db3b5..5487fce4 100644 --- a/website/assets/install-platform.js +++ b/website/assets/install-platform.js @@ -8,6 +8,6 @@ export function detectInstallPlatform(hints = {}) { export function installCommand(platform) { return platform === "windows" - ? "irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.ps1 | iex" - : "curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.sh | sh"; + ? "irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.ps1 | iex" + : "curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.sh | sh"; } diff --git a/website/build_site.py b/website/build_site.py index 17c3859e..45bf2671 100644 --- a/website/build_site.py +++ b/website/build_site.py @@ -17,9 +17,10 @@ "en": {"home": "/", "features": "/features/", "install": "/install/", "faq": "/faq/", "docs": "/docs/"}, "zh-cn": {"home": "/zh-cn/", "features": "/zh-cn/features/", "install": "/zh-cn/install/", "faq": "/zh-cn/faq/", "docs": "/zh-cn/docs/"}, } +# Keep public downloads on the published stable release until V3 publication. INSTALL_COMMANDS = { - "unix": "curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.sh | sh", - "windows": "irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.ps1 | iex", + "unix": "curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.sh | sh", + "windows": "irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.ps1 | iex", } PAGES = { @@ -87,10 +88,10 @@ "body": """

RECOMMENDED · macOS OR LINUX

Install from a terminal.

Run the installer, then launch OpenKyrozen. The first run guides you through provider setup.

-
Shell
curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.sh | sh
+  
Shell
curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.sh | sh
 kyrozen

WINDOWS POWERSHELL

Use the Windows installer.

-
PowerShell
irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.ps1 | iex
+  
PowerShell
irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.ps1 | iex
 kyrozen

@@ -102,7 +103,7 @@

OTHER PATHS

Prefer to work from source?

A

Clone the repository

For development, install the project dependencies and run the agent from the checkout.

git clone https://github.com/EvanProgramming/OpenKyrozen.git
cd OpenKyrozen
make install
make run
Source repository
-
B

Install the verified wheel

Use the project’s published release wheel with uv and Python 3.12.

uv tool install --python 3.12 --force --with fastapi --with uvicorn https://github.com/EvanProgramming/OpenKyrozen/releases/download/v3.0.0/openkyrozen-3.0.0-py3-none-any.whl
Browse releases
+
B

Install the verified wheel

Use the project’s published release wheel with uv and Python 3.12.

uv tool install --python 3.12 --force --with fastapi --with uvicorn https://github.com/EvanProgramming/OpenKyrozen/releases/download/v2.0.8/openkyrozen-2.0.8-py3-none-any.whl
Browse releases

NEXT

See what OpenKyrozen can do.

Learn about the tools, memory, learning system, and safety model.

Explore capabilities
@@ -193,10 +194,10 @@ "body": """

推荐 · macOS 或 Linux

在终端中安装。

运行安装程序后启动 OpenKyrozen。首次启动会引导你配置模型服务商。

-
Shell
curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.sh | sh
+  
Shell
curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.sh | sh
 kyrozen

WINDOWS POWERSHELL

使用 Windows 安装程序。

-
PowerShell
irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.ps1 | iex
+  
PowerShell
irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.ps1 | iex
 kyrozen

@@ -208,7 +209,7 @@

其他方式

更喜欢从源码运行?

A

克隆代码仓库

用于开发的方式:安装项目依赖并从源码目录运行智能体。

git clone https://github.com/EvanProgramming/OpenKyrozen.git
cd OpenKyrozen
make install
make run
源代码仓库
-
B

安装已验证的 wheel

使用 uv 和 Python 3.12 安装项目发布的 wheel。

uv tool install --python 3.12 --force --with fastapi --with uvicorn https://github.com/EvanProgramming/OpenKyrozen/releases/download/v3.0.0/openkyrozen-3.0.0-py3-none-any.whl
查看发布版本
+
B

安装已验证的 wheel

使用 uv 和 Python 3.12 安装项目发布的 wheel。

uv tool install --python 3.12 --force --with fastapi --with uvicorn https://github.com/EvanProgramming/OpenKyrozen/releases/download/v2.0.8/openkyrozen-2.0.8-py3-none-any.whl
查看发布版本

下一步

了解 OpenKyrozen 能做什么。

查看工具、记忆、学习系统与安全模型。

浏览产品能力
@@ -361,6 +362,7 @@ def document(lang, slug, page): {('
OPENKYROZEN / TUIPROJECT CONTEXT
' + escape(image_alt, quote=True) + '
' + ('Terminal-native · Evidence-backed · Local-first' if lang == 'en' else '终端原生 · 证据驱动 · 本地优先') + '
') if slug == 'home' else ''} {page['body']} + {('

V3 is not yet released. Public downloads install stable V2.0.8.

' if lang == 'en' else '

V3 尚未发布。公开下载仍安装稳定版 V2.0.8。

') if slug in {'home', 'install'} else ''}