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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ OpenKyrozen は Python **3.12 と 3.13** をサポートします。Python 3.14
### macOS または Linux

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

### Windows PowerShell

```powershell
irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.ps1 | iex
irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.ps1 | iex
kyrozen
```

Expand All @@ -53,7 +53,7 @@ make run
### 検証済み release wheel を直接インストール

```bash
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
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
```

## クイックスタート
Expand Down
6 changes: 3 additions & 3 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ OpenKyrozen은 Python **3.12와 3.13**을 지원합니다. Python 3.14는 지원
### macOS 또는 Linux

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

### Windows PowerShell

```powershell
irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.ps1 | iex
irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.ps1 | iex
kyrozen
```

Expand All @@ -53,7 +53,7 @@ make run
### 검증된 release wheel 직접 설치

```bash
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
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
```

## 빠른 시작
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,19 @@

## Install

The current published stable release is **v2.0.8**. It supports Python 3.12 and 3.13; Python 3.14 is outside the supported range.
This release is **v3.0.0**. 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/v2.0.8/install.sh | sh
curl -fsSL https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.sh | sh
kyrozen
```

Windows PowerShell:

```powershell
irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.ps1 | iex
irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.ps1 | iex
kyrozen
```

Expand Down
6 changes: 3 additions & 3 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ OpenKyrozen 支持 Python **3.12 和 3.13**。Python 3.14 暂不支持。
### macOS 或 Linux

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

### Windows PowerShell

```powershell
irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v2.0.8/install.ps1 | iex
irm https://raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/install.ps1 | iex
kyrozen
```

Expand All @@ -53,7 +53,7 @@ make run
### 直接安装已验证的 release wheel

```bash
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
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
```

## 快速开始
Expand Down
10 changes: 5 additions & 5 deletions docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,21 @@

## Requirements

The published v2.0.8 release supports Python 3.12 and 3.13. Python 3.14 is excluded by the package metadata. The official installers provision Python through `uv`; a source checkout needs Git and a supported Python. The optional Bubble Tea terminal UI is a Go binary distributed with the release. Docker uses Python 3.12. See the live [release page](https://github.com/EvanProgramming/OpenKyrozen/releases/latest) before copying a pinned command: installer examples below identify the current release as of 5 October 2026.
The v3.0.0 release supports Python 3.12 and 3.13. Python 3.14 is excluded by the package metadata. The official installers provision Python through `uv`; a source checkout needs Git and a supported Python. The optional Bubble Tea terminal UI is a Go binary distributed with the release. Docker uses Python 3.12. See the live [release page](https://github.com/EvanProgramming/OpenKyrozen/releases/latest) before copying a pinned command: installer examples below identify the v3.0.0 release.

## Install the published release

On macOS or Linux:

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

On Windows PowerShell:

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

Expand All @@ -26,7 +26,7 @@ For a direct Python install, add the optional web server dependencies explicitly

```sh
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
https://github.com/EvanProgramming/OpenKyrozen/releases/download/v3.0.0/openkyrozen-3.0.0-py3-none-any.whl
kyrozen --version
```

Expand Down Expand Up @@ -69,7 +69,7 @@ The value shown is a shell placeholder; replace it locally and never commit a re

For an installed release, type `/update` in the running agent. The updater selects one verified source revision for Python and the terminal binary, checks installed package provenance, and stages the replacement TUI before activation. Restart when prompted so the new process loads the installed version. Updates need network access and package dependencies; errors and partial outcomes include recovery instructions.

The published v2.0.8 one-line installers are pinned. The update command tracks the latest verified `main` revision, so it can install a development revision newer than the release version. If startup reports an incomplete update, exit and rerun the official installer. `kyrozen --help` is also intended to remain available for recovery. Historical Windows installations that predate the staged updater should exit the application and run the current official installer before updating.
The v3.0.0 one-line installers are pinned. The update command tracks the latest verified `main` revision, so it can install a development revision newer than the release version. If startup reports an incomplete update, exit and rerun the official installer. `kyrozen --help` is also intended to remain available for recovery. Historical Windows installations that predate the staged updater should exit the application and run the current official installer before updating.

## State and uninstalling

Expand Down
4 changes: 4 additions & 0 deletions docs/v3-release-evidence.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,7 @@ python -m scripts.publish_v3_preview \
The publisher verifies the commit signature, the signed manifest, every gate and waiver again, and the release workflow's V3 guard. It builds from the committed Git tree, signs an artifact hash record, and creates a signed tag bound to that commit. It creates a **draft prerelease**, downloads and hashes its assets, revalidates the evidence, and only then publishes it as a prerelease. Release notes identify every waived gate and its limitations. If a tag already exists, its signature and remote identity must match before retrying. If publication or its final verification is interrupted, inspect the GitHub release and tag before retrying; the publisher never overwrites an existing release.

Preview usage is limited to Linux and macOS with the filesystem sandbox required. Set `KYROZEN_SANDBOX_REQUIRED=1` when running `kyrozen` or `kyrozen-web`; unavailable required protection blocks execution. Preview `/update` verifies the version at the selected main-branch revision and refuses to stage an older or unverifiable version. It supports numeric release, `a`, `b`, `rc`, and `.dev` versions; an unsupported version format is rejected until the user installs an appropriate release explicitly. Windows remains in the acceptance matrix, but is outside preview distribution scope.

## Full V3 release

The full release candidate uses package version `3.0.0` and tag `v3.0.0`. A full release requires an exact-candidate signed manifest with all 17 gates passed; limited-evidence manifests and waivers do not qualify. The preview publisher only accepts development versions and cannot publish the full release. Keep the V3 automatic-tag exclusion in place, validate the signed full manifest and candidate signature, and publish the signed candidate artifacts only after all release checks and evidence pass.
4 changes: 2 additions & 2 deletions install.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ function Warn([string]$Message) {
}

if ($ShowHelp) {
Write-Output "OpenKyrozen installer: installs the pinned v2.0.8 GitHub release, uv, Python 3.12/3.13, and the Bubble Tea terminal UI."
Write-Output "OpenKyrozen installer: installs the pinned v3.0.0 GitHub release, uv, Python 3.12/3.13, and the Bubble Tea terminal UI."
exit 0
}

$releaseVersion = "2.0.8"
$releaseVersion = "3.0.0"
$releaseTag = "v$releaseVersion"
$goVersion = "1.27.1"
$releaseBaseUrl = "https://github.com/EvanProgramming/OpenKyrozen/releases/download/$releaseTag"
Expand Down
2 changes: 1 addition & 1 deletion install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

set -eu

release_version='3.0.0.dev1'
release_version='3.0.0'
release_tag="v$release_version"
go_version='1.27.1'
release_base_url="https://github.com/EvanProgramming/OpenKyrozen/releases/download/$release_tag"
Expand Down
2 changes: 1 addition & 1 deletion openkyrozen/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
"""OpenKyrozen modular agent application."""
__version__ = "3.0.0.dev1"
__version__ = "3.0.0"
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "openkyrozen"
version = "3.0.0.dev1"
version = "3.0.0"
description = "Self-learning AI Agent with broad LLM provider support"
readme = "README.md"
license = {text = "MIT"}
Expand All @@ -14,7 +14,7 @@ authors = [
]
keywords = ["ai", "agent", "llm", "self-learning", "deepseek", "chatbot", "cli"]
classifiers = [
"Development Status :: 3 - Alpha",
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3.12",
Expand Down
23 changes: 13 additions & 10 deletions tests/test_distribution.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ def selected(tag):
return result

self.assertTrue(selected("v2.0.8"))
self.assertFalse(selected("v3.0.0"))
self.assertFalse(selected("v3.0.0.dev1"))
self.assertIn("!startsWith(inputs.release_tag || github.ref_name, 'v3.')",
workflow["jobs"]["build-release"]["if"])
Expand Down Expand Up @@ -98,9 +99,10 @@ def test_pyproject_exposes_both_entry_points_and_launch_module(self):
with (ROOT / "pyproject.toml").open("rb") as handle:
document = tomllib.load(handle)
project = document["project"]
self.assertEqual(project["version"], "3.0.0.dev1")
self.assertIn("Development Status :: 3 - Alpha", project["classifiers"])
self.assertNotIn("Development Status :: 5 - Production/Stable", project["classifiers"])
self.assertEqual(project["version"], "3.0.0")
self.assertIn('var version = "3.0.0"', (ROOT / "tui" / "model.go").read_text())
self.assertIn("Development Status :: 5 - Production/Stable", project["classifiers"])
self.assertNotIn("Development Status :: 3 - Alpha", project["classifiers"])
self.assertEqual(project["requires-python"], ">=3.12,<3.14")
self.assertEqual(project["scripts"]["kyrozen"], "openkyrozen.interfaces.cli.launcher:main")
self.assertEqual(project["scripts"]["kyrozen-backend"], "openkyrozen.interfaces.tui.backend:main")
Expand Down Expand Up @@ -174,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/"
"v2.0.8/openkyrozen-2.0.8-py3-none-any.whl"
"v3.0.0/openkyrozen-3.0.0-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/v2.0.8/", text)
self.assertIn("raw.githubusercontent.com/EvanProgramming/OpenKyrozen/v3.0.0/", text)
wheel_urls = re.findall(
r"https://github\.com/EvanProgramming/OpenKyrozen/releases/download/[^\s)]+\.whl",
text,
Expand All @@ -202,7 +204,7 @@ def test_posix_installer_has_valid_syntax_and_idempotent_user_path_logic(self):
self.assertIn('PATH="$HOME/.local/bin:$HOME/.cargo/bin:$PATH"', text)
self.assertIn("grep -Fq '$HOME/.local/bin'", text)
self.assertIn('tool install --python', text)
self.assertIn("release_version='3.0.0.dev1'", text)
self.assertIn("release_version='3.0.0'", text)
self.assertIn("-X main.revision=$release_tag", text)
self.assertIn("releases/download", text)
self.assertIn("--with fastapi --with uvicorn", text)
Expand Down Expand Up @@ -237,7 +239,8 @@ def test_powershell_installer_is_static_safe_and_parses_when_available(self):
self.assertIn("[Environment]::GetEnvironmentVariable(\"Path\", \"User\")", text)
self.assertIn("SetEnvironmentVariable(\"Path\"", text)
self.assertIn("tool install --python", text)
self.assertIn("v2.0.8", text)
self.assertIn("v3.0.0", text)
self.assertIn('$releaseVersion = "3.0.0"', text)
self.assertIn("-X main.revision=$releaseTag", text)
self.assertIn("releases/download", text)
self.assertIn("--with fastapi --with uvicorn", text)
Expand Down Expand Up @@ -282,7 +285,7 @@ def test_posix_installer_retries_with_uncached_uv_install(self):
fi
if [ "$1" = "--no-cache" ] && [ "$2" = "tool" ] && [ "$3" = "install" ]; then
mkdir -p "$HOME/.local/bin"
printf '%s\n' '#!/bin/sh' 'if [ "$1" = "--version" ]; then printf "%s\n" "OpenKyrozen 3.0.0.dev1"; fi' > "$HOME/.local/bin/kyrozen"
printf '%s\n' '#!/bin/sh' 'if [ "$1" = "--version" ]; then printf "%s\n" "OpenKyrozen 3.0.0"; fi' > "$HOME/.local/bin/kyrozen"
chmod +x "$HOME/.local/bin/kyrozen"
exit 0
fi
Expand Down Expand Up @@ -324,7 +327,7 @@ def test_cli_and_web_help_version_flags_work_without_provider_setup(self):
})
commands = [
([sys.executable, str(ROOT / "main.py"), "--help"], "--project"),
([sys.executable, str(ROOT / "main.py"), "--version"], "OpenKyrozen 3.0.0.dev1"),
([sys.executable, str(ROOT / "main.py"), "--version"], "OpenKyrozen 3.0.0"),
([sys.executable, str(ROOT / "server.py"), "--help"], "--reload"),
]
for command, marker in commands:
Expand All @@ -338,7 +341,7 @@ def test_cli_and_web_help_version_flags_work_without_provider_setup(self):
from openkyrozen.interfaces.web.service import WebService

server = WebService(None)
self.assertEqual(server.app.version, "3.0.0.dev1")
self.assertEqual(server.app.version, "3.0.0")

def test_web_parser_accepts_project_and_server_flags(self):
from openkyrozen.interfaces.web.service import WebService
Expand Down
3 changes: 2 additions & 1 deletion tests/test_update_transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ def test_no_verified_source_does_not_install(self):
self.assertEqual(result.components['python'], 'unchanged')

def test_preview_does_not_fall_back_to_unverified_release_version(self):
with patch('openkyrozen.updates.service.Path.home', return_value=self.home), \
with patch.object(self.runtime, 'RELEASE_VERSION', '3.0.0.dev1'), \
patch('openkyrozen.updates.service.Path.home', return_value=self.home), \
patch('openkyrozen.updates.service.shutil.which', return_value='/bin/uv'), \
patch.object(self.runtime, '_resolve_update_revision', return_value=None), \
patch.object(self.runtime, '_release_tui_asset_available', return_value=True), \
Expand Down
2 changes: 1 addition & 1 deletion tui/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"time"
)

var version = "2.0.8"
var version = "3.0.0"

var openKyrozenBanner = []string{
" ███ ████ █████ █ █ █ █ █ █ ████ ███ █████ █████ █ █",
Expand Down
4 changes: 2 additions & 2 deletions website/assets/install-platform.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ export function detectInstallPlatform(hints = {}) {

export function installCommand(platform) {
return platform === "windows"
? "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";
? "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";
}
Loading
Loading