From 26b1a8fb5a47f04c09e6dcb6c5f71290a04708cc Mon Sep 17 00:00:00 2001 From: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> Date: Tue, 27 Oct 2026 12:45:45 +0800 Subject: [PATCH 1/2] release: prepare 2.2.0 package and documentation identity Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> --- docs/book/chapters/00-reading-guide.md | 2 +- docs/book/en/chapters/00-reading-guide.md | 4 ++-- docs/book/en/index.md | 2 +- docs/book/index.md | 2 +- loopx/__init__.py | 2 +- man/loopx.1 | 2 +- pyproject.toml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/book/chapters/00-reading-guide.md b/docs/book/chapters/00-reading-guide.md index a9a95c4b8b..9e8bb8f350 100644 --- a/docs/book/chapters/00-reading-guide.md +++ b/docs/book/chapters/00-reading-guide.md @@ -180,7 +180,7 @@ lifecycle 选择,不是所有贡献的默认终点。 ## 版本基线 -当前内容面向 LoopX release `v2.1.0`;本地命令示例已按 `loopx 2.1.0` 的 +当前内容面向 LoopX release `v2.2.0`;本地命令示例已按 `loopx 2.2.0` 的 公开 CLI 与协议表面复核。该版本要求 Python 3.11+ 与 Node.js 22.22.3+。LoopX 会自动管理 空闲后退出的 TypeScript Effect runtime,用户不需要手工维护 daemon。 diff --git a/docs/book/en/chapters/00-reading-guide.md b/docs/book/en/chapters/00-reading-guide.md index b905409b16..0f56ad1ef9 100644 --- a/docs/book/en/chapters/00-reading-guide.md +++ b/docs/book/en/chapters/00-reading-guide.md @@ -199,8 +199,8 @@ Do not bypass a newer permission or lifecycle check just to make an older exampl ## Version baseline -This book targets LoopX release `v2.1.0`. Local command examples were checked against -the public `loopx 2.1.0` CLI and protocol surface. It requires Python 3.11+ and Node.js 22.22.3+. +This book targets LoopX release `v2.2.0`. Local command examples were checked against +the public `loopx 2.2.0` CLI and protocol surface. It requires Python 3.11+ and Node.js 22.22.3+. LoopX starts and reuses its managed, idle-exiting TypeScript Effect runtime automatically; users do not operate that runtime as a manual daemon. diff --git a/docs/book/en/index.md b/docs/book/en/index.md index b465e88fd7..9ae2b0f5c1 100644 --- a/docs/book/en/index.md +++ b/docs/book/en/index.md @@ -79,7 +79,7 @@ versioned or optional functionality, not the default shape of every contribution - Source format: Markdown - Site generator: MkDocs Material - Hosting: GitHub Pages -- LoopX release anchor: `v2.1.0` +- LoopX release anchor: `v2.2.0` - Runtime prerequisites: Python 3.11+ and Node.js 22.22.3+ The official public protocols remain authoritative for protocol facts. Commands that change across diff --git a/docs/book/index.md b/docs/book/index.md index c98e02a7b0..c7a655f613 100644 --- a/docs/book/index.md +++ b/docs/book/index.md @@ -70,7 +70,7 @@ Extension 只是可独立版本化和交付的一种路径。 - 正文格式:Markdown; - 站点生成器:MkDocs Material; - 在线发布:GitHub Pages; -- LoopX 发布锚点:`v2.1.0`; +- LoopX 发布锚点:`v2.2.0`; - 运行时前提:Python 3.11+ 与 Node.js 22.22.3+。 协议解释以 LoopX 官方公开合同为事实源。易变化的命令仍以对应发布物、官方文档和当前 diff --git a/loopx/__init__.py b/loopx/__init__.py index a5d9202b25..f00e8306a3 100644 --- a/loopx/__init__.py +++ b/loopx/__init__.py @@ -2,4 +2,4 @@ __all__ = ["__version__"] -__version__ = "2.1.0" +__version__ = "2.2.0" diff --git a/man/loopx.1 b/man/loopx.1 index 610cf98e43..1b2a0855fe 100644 --- a/man/loopx.1 +++ b/man/loopx.1 @@ -1,4 +1,4 @@ -.TH LOOPX 1 "" "LoopX 2.1.0" "User Commands" +.TH LOOPX 1 "" "LoopX 2.2.0" "User Commands" .SH NAME loopx \- control-plane helper for long-running agent work .SH SYNOPSIS diff --git a/pyproject.toml b/pyproject.toml index 13e2e1e421..ac23ce6060 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "loopx" -version = "2.1.0" +version = "2.2.0" description = "A Loop Engineering control plane for long-running agent goals (requires Node.js 22.22.3+)." readme = "README.md" requires-python = ">=3.11" From 22134b747377a0824660224c4631e42cb33c4ea3 Mon Sep 17 00:00:00 2001 From: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> Date: Tue, 27 Oct 2026 13:05:10 +0800 Subject: [PATCH 2/2] test(install): drain owned runtime before help fixture cleanup Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> --- examples/cli-help-manpage-smoke.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/examples/cli-help-manpage-smoke.py b/examples/cli-help-manpage-smoke.py index 86e3b5343a..218781f737 100644 --- a/examples/cli-help-manpage-smoke.py +++ b/examples/cli-help-manpage-smoke.py @@ -9,12 +9,16 @@ import sys import tempfile import tomllib +from contextlib import ExitStack from pathlib import Path REPO_ROOT = Path(__file__).resolve().parents[1] if str(REPO_ROOT) not in sys.path: sys.path.insert(0, str(REPO_ROOT)) +sys.path.insert(0, str(REPO_ROOT / "tests")) + +from managed_effect_runtime_fixture import stop_disposable_effect_runtimes # noqa: E402 from loopx import __version__ # noqa: E402 from loopx.cli import build_parser # noqa: E402 @@ -151,8 +155,11 @@ def assert_installer_manpage_surface() -> None: script = REPO_ROOT / "scripts" / "install-local.sh" subprocess.run(["bash", "-n", str(script)], check=True) - with tempfile.TemporaryDirectory(prefix="loopx-help-manpage-smoke-") as raw_tmp: + with tempfile.TemporaryDirectory(prefix="loopx-help-manpage-smoke-") as raw_tmp, ExitStack() as cleanup: tmp = Path(raw_tmp) + temporary = tmp / "temporary" + temporary.mkdir() + cleanup.callback(stop_disposable_effect_runtimes, tmp) home = tmp / "home" bin_dir = home / ".local" / "bin" man_root = home / ".local" / "share" / "man" @@ -172,6 +179,9 @@ def assert_installer_manpage_surface() -> None: "LOOPX_RELEASE_ID": "help-manpage-smoke-release", "PATH": os.environ.get("PATH", ""), "SHELL": "/bin/zsh", + "TMPDIR": str(temporary), + "TEMP": str(temporary), + "TMP": str(temporary), } help_result = subprocess.run(