3 Commits

Author SHA1 Message Date
Pnant 84b474c79b chore: bump version to 1.4.1 (#341)
ci / test (3.10) (push) Has been cancelled
ci / test (3.11) (push) Has been cancelled
ci / test (3.12) (push) Has been cancelled
ci / test (3.13) (push) Has been cancelled
ci / wheel-gate (push) Has been cancelled
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 11:47:32 +08:00
Pnant b6241e8e67 ci: add wheel-build gate (duplicate-entry check + clean-venv smoke install) (#340)
Editable installs in CI never exercise wheel packaging, which let the
force-include duplication ship broken source installs while tests stayed
green (#308 #315 #328 #332 #334). This gate builds the real wheel, fails
on any duplicate archive entry, asserts SKILL.md/guides/scripts ship,
and smoke-installs into a clean venv.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 11:45:08 +08:00
nyxst4ck 607f0d2c56 fix(build): drop duplicate force-include that breaks source installs (#329)
Removes the [tool.hatch.build.targets.wheel.force-include] block that duplicated files already included via packages=["agent_reach"], which made modern hatchling fail source installs with 'ValueError: A second file is being added to the wheel archive at the same path'.

Verified before merge: wheel builds clean (48 entries, no duplicates), SKILL.md / guides / scripts all ship in site-packages, 85 tests pass on Python 3.11.

Fixes #334, fixes #332, fixes #328, fixes #315, fixes #308.
2026-06-10 11:41:46 +08:00
5 changed files with 44 additions and 10 deletions
+40
View File
@@ -28,3 +28,43 @@ jobs:
- name: Run tests
run: |
pytest -q
# Editable installs (-e) never exercise wheel packaging, so a broken wheel
# can pass tests and still fail every real `pip install` from source.
# This job builds the actual wheel and installs it into a clean venv.
wheel-gate:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Build wheel
run: |
python -m pip install --upgrade pip build
python -m build
- name: Verify wheel has no duplicate entries and ships data files
run: |
python - <<'PY'
import glob, zipfile, collections
whl = glob.glob("dist/*.whl")[0]
names = zipfile.ZipFile(whl).namelist()
dupes = [n for n, c in collections.Counter(names).items() if c > 1]
assert not dupes, f"duplicate entries in wheel: {dupes}"
assert "agent_reach/skill/SKILL.md" in names, "SKILL.md missing from wheel"
for prefix in ("agent_reach/guides/", "agent_reach/scripts/", "agent_reach/skill/references/"):
assert any(n.startswith(prefix) for n in names), f"{prefix} missing from wheel"
print(f"wheel OK: {len(names)} entries, no duplicates, data files present")
PY
- name: Smoke-install wheel into clean venv
run: |
python -m venv /tmp/smoke
/tmp/smoke/bin/pip install --quiet dist/*.whl
/tmp/smoke/bin/agent-reach version
cd /tmp && /tmp/smoke/bin/python -c "import agent_reach; from importlib.resources import files; assert (files('agent_reach')/'skill'/'SKILL.md').is_file(); print('SKILL.md ships in site-packages OK')"
+1 -1
View File
@@ -3,7 +3,7 @@
## Project
Agent Reach — Python CLI + library that gives AI agents read/search access to 14+ internet platforms.
Positioning: installer + doctor + config tool. NOT a wrapper — after install, agents call upstream tools directly.
Repo: github.com/Panniantong/Agent-Reach | License: MIT | Version: 1.3.0
Repo: github.com/Panniantong/Agent-Reach | License: MIT | Version: 1.4.1
## Commands
- `pip install -e .` — Dev install
+1 -1
View File
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
"""Agent Reach — Give your AI Agent eyes to see the entire internet."""
__version__ = "1.4.0"
__version__ = "1.4.1"
__author__ = "Neo Reid"
from agent_reach.core import AgentReach
+1 -7
View File
@@ -1,6 +1,6 @@
[project]
name = "agent-reach"
version = "1.4.0"
version = "1.4.1"
description = "Give your AI Agent eyes to see the entire internet. Search + Read 10+ platforms."
readme = "README.md"
license = {text = "MIT"}
@@ -64,12 +64,6 @@ build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["agent_reach"]
[tool.hatch.build.targets.wheel.force-include]
"agent_reach/guides" = "agent_reach/guides"
# Keep the whole skill directory so SKILL.md, SKILL_en.md, and references/ ship together.
"agent_reach/skill" = "agent_reach/skill"
"agent_reach/scripts" = "agent_reach/scripts"
[tool.ruff]
target-version = "py310"
line-length = 100
+1 -1
View File
@@ -89,7 +89,7 @@ class TestCheckUpdateRetry:
sequence = [
R(429, headers={"Retry-After": "3"}),
R(200, payload={"tag_name": "v1.4.0"}),
R(200, payload={"tag_name": "v1.4.1"}),
]
with patch("requests.get", side_effect=sequence):