From ee2347a46fcfb553fd0f16c1e3d1b2eefc210bdb Mon Sep 17 00:00:00 2001 From: vvillait88 Date: Thu, 30 Apr 2026 03:30:18 -0700 Subject: [PATCH 1/6] docs(stripe_multichain): drop infra-specific "ECS Fargate" from pi_cache docstring Generalize to "multi-instance deployments" so the comment describes the constraint (shared cache needed) rather than the AgentScore deployment topology. --- agentscore_commerce/stripe_multichain/pi_cache.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agentscore_commerce/stripe_multichain/pi_cache.py b/agentscore_commerce/stripe_multichain/pi_cache.py index 68f3f8d..0fe8114 100644 --- a/agentscore_commerce/stripe_multichain/pi_cache.py +++ b/agentscore_commerce/stripe_multichain/pi_cache.py @@ -18,8 +18,8 @@ All three are TTL-bounded (default 300s — long enough for an agent to retry, short enough to bound memory). Backed by Redis when ``redis_url`` is set, falls back to in-process dict otherwise. Single-instance servers can use the in-memory cache; -ECS Fargate / multi-task deployments need Redis so a deposit lands on whichever -task settles it. +multi-instance deployments need a shared cache (Redis) so a deposit lands on +whichever instance settles it. """ from __future__ import annotations From 1c36f4697a695b8d62f76e46327714f09ad08c43 Mon Sep 17 00:00:00 2001 From: vvillait88 Date: Thu, 30 Apr 2026 03:44:27 -0700 Subject: [PATCH 2/6] docs/tests: scrub internal merchant references + private test default - agentscore_commerce/identity/policy.py: drop the "extracted from " attribution paragraph - examples/per_product_policy_merchant.py: drop the same attribution - tests/test_integration.py: integration tests now require both AGENTSCORE_API_KEY and AGENTSCORE_BASE_URL to be set; no default to a private (`*.internal`) endpoint --- agentscore_commerce/identity/policy.py | 6 ++---- examples/per_product_policy_merchant.py | 4 ---- tests/test_integration.py | 7 +++++-- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/agentscore_commerce/identity/policy.py b/agentscore_commerce/identity/policy.py index 03f2e2e..fd9c8b0 100644 --- a/agentscore_commerce/identity/policy.py +++ b/agentscore_commerce/identity/policy.py @@ -21,10 +21,8 @@ return a structured :class:`GateResult`. All three are additive — vendors that don't need per-product policy can keep -using ``AgentScoreGate(...)`` directly. The pattern was extracted from the -``agentscore/store`` merchant; see its ``store/routes/purchase.py`` for the -full per-request flow including shipping checks (which most merchants will -implement adjacent to the gate). +using ``AgentScoreGate(...)`` directly. Most merchants will implement shipping +checks adjacent to the gate per-request. """ from __future__ import annotations diff --git a/examples/per_product_policy_merchant.py b/examples/per_product_policy_merchant.py index a2388a3..c754d07 100644 --- a/examples/per_product_policy_merchant.py +++ b/examples/per_product_policy_merchant.py @@ -17,10 +17,6 @@ - shipping_country_allowed / shipping_state_allowed Per-product shipping allowlists (NULL = ship anywhere). -The pattern was extracted from agentscore/store. See its -``store/routes/purchase.py`` for the full per-request flow including code -redemption + order persistence. - Peer deps: pip install agentscore-commerce[fastapi] diff --git a/tests/test_integration.py b/tests/test_integration.py index e2b6924..fad9896 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -4,10 +4,13 @@ import pytest API_KEY = os.environ.get("AGENTSCORE_API_KEY") -BASE_URL = os.environ.get("AGENTSCORE_BASE_URL", "http://api.dev.agentscore.internal") +BASE_URL = os.environ.get("AGENTSCORE_BASE_URL") TEST_ADDRESS = "0x339559a2d1cd15059365fc7bd36b3047bba480e0" -pytestmark = pytest.mark.skipif(not API_KEY, reason="AGENTSCORE_API_KEY not set") +pytestmark = pytest.mark.skipif( + not (API_KEY and BASE_URL), + reason="AGENTSCORE_API_KEY and AGENTSCORE_BASE_URL must both be set", +) def _assess(body=None): From 01878f10c5e76175988cafb6cb57748183b93bd9 Mon Sep 17 00:00:00 2001 From: vvillait88 Date: Thu, 30 Apr 2026 03:47:00 -0700 Subject: [PATCH 3/6] docs(CLAUDE): drop "from production code ()" framing Mirror of the node-commerce scrub. --- CLAUDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index c9feb25..040354a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,7 +2,7 @@ Agent commerce SDK for Python. The full merchant-side toolkit: identity gating + payment helpers + 402 builders + discovery + Stripe multichain. One install, submodule imports per concern. -Every helper lifts directly from working production code (`agentscore/martin-estate`) — extract from real consumers, not speculation. +Every helper is extracted from a real consumer, not speculated. ## Submodules From ff0ec74e93e6252db2c8c22957cd63e849720b8a Mon Sep 17 00:00:00 2001 From: vvillait88 Date: Thu, 30 Apr 2026 21:00:56 -0700 Subject: [PATCH 4/6] chore(deps): uv lock --upgrade + bump to v1.0.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - typer 0.25.0 → 0.25.1 (transitive; new agent-skill metadata file + devdep bumps; no runtime code change) - bump package to v1.0.2 All 555 tests pass with --all-extras. Co-Authored-By: Claude Opus 4.7 (1M context) --- pyproject.toml | 2 +- uv.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c638fb2..7b80868 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "agentscore-commerce" -version = "1.0.1" +version = "1.0.2" description = "Agent commerce SDK for Python — identity middleware (FastAPI, Flask, Django, AIOHTTP, Sanic, ASGI) + payment helpers + 402 builders + discovery + Stripe multichain. The full merchant-side toolkit for AgentScore-powered agent commerce." readme = "README.md" license = "MIT" diff --git a/uv.lock b/uv.lock index 976f27f..cdbb8c5 100644 --- a/uv.lock +++ b/uv.lock @@ -2788,7 +2788,7 @@ wheels = [ [[package]] name = "typer" -version = "0.25.0" +version = "0.25.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-doc" }, @@ -2796,9 +2796,9 @@ dependencies = [ { name = "rich" }, { name = "shellingham" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7b/27/ede8cec7596e0041ba7e7b80b47d132562f56ff454313a16f6084e555c9f/typer-0.25.0.tar.gz", hash = "sha256:123eaf9f19bb40fd268310e12a542c0c6b4fab9c98d9d23342a01ff95e3ce930", size = 120150, upload-time = "2026-04-26T08:46:14.767Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/51/9aed62104cea109b820bbd6c14245af756112017d309da813ef107d42e7e/typer-0.25.1.tar.gz", hash = "sha256:9616eb8853a09ffeabab1698952f33c6f29ffdbceb4eaeecf571880e8d7664cc", size = 122276, upload-time = "2026-04-30T19:32:16.964Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/72/193d4e586ec5a4db834a36bbeb47641a62f951f114ffd0fe5b1b46e8d56f/typer-0.25.0-py3-none-any.whl", hash = "sha256:ac01b48823d3db9a83c9e164338057eadbb1c9957a2a6b4eeb486669c560b5dc", size = 55993, upload-time = "2026-04-26T08:46:15.889Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f9/2b3ff4e56e5fa7debfaf9eb135d0da96f3e9a1d5b27222223c7296336e5f/typer-0.25.1-py3-none-any.whl", hash = "sha256:75caa44ed46a03fb2dab8808753ffacdbfea88495e74c85a28c5eefcf5f39c89", size = 58409, upload-time = "2026-04-30T19:32:18.271Z" }, ] [[package]] From 0f96b3577f8c3c927fc1ce844c4978205fdc9256 Mon Sep 17 00:00:00 2001 From: vvillait88 Date: Thu, 30 Apr 2026 21:04:27 -0700 Subject: [PATCH 5/6] chore: sync uv.lock with v1.0.2 self-reference Co-Authored-By: Claude Opus 4.7 (1M context) --- uv.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uv.lock b/uv.lock index cdbb8c5..93b43d9 100644 --- a/uv.lock +++ b/uv.lock @@ -10,7 +10,7 @@ resolution-markers = [ [[package]] name = "agentscore-commerce" -version = "1.0.1" +version = "1.0.2" source = { editable = "." } dependencies = [ { name = "agentscore-py" }, From 644a3bcaf55597f575b9023827f406b938b82cae Mon Sep 17 00:00:00 2001 From: vvillait88 Date: Thu, 30 Apr 2026 21:18:02 -0700 Subject: [PATCH 6/6] =?UTF-8?q?chore(deps):=20bump=20agentscore-py=202.0.1?= =?UTF-8?q?=20=E2=86=92=202.0.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Picks up the latest published sdk patch. All 555 tests pass. Co-Authored-By: Claude Opus 4.7 (1M context) --- uv.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/uv.lock b/uv.lock index 93b43d9..464d6de 100644 --- a/uv.lock +++ b/uv.lock @@ -110,14 +110,14 @@ dev = [ [[package]] name = "agentscore-py" -version = "2.0.1" +version = "2.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "httpx" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/32/861a7b4d19f677f103ac2b54462e121f76906dbc5ef0119d283ae9276af1/agentscore_py-2.0.1.tar.gz", hash = "sha256:518fac4749aeaaca3a895087d2cb3f6d4e264db15fb194c2a59d4a35bb986a45", size = 50755, upload-time = "2026-04-30T04:19:44.312Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/b4/198df9e3f774ab9366b34f68cddfb0ababde0bf3c1bb58ee7c6ca9d10a68/agentscore_py-2.0.2.tar.gz", hash = "sha256:16b16af6a93e56db00dee17db3d1c17772c99a4c98ccc5c544895c7abfce1747", size = 50747, upload-time = "2026-05-01T04:15:08.931Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/4b/bb898c79e62e4b4c4d9e8b4f621192ceeecdcd03fff2d12a50f00e74a800/agentscore_py-2.0.1-py3-none-any.whl", hash = "sha256:141eee41337e2156b9324527981f64a6edbdc375c4c218dd8c8d17cb287e1281", size = 14492, upload-time = "2026-04-30T04:19:43Z" }, + { url = "https://files.pythonhosted.org/packages/14/b4/ee74a2f1baa6863ac09d8b0c6a72e67d4e2b2bc20f386b2607ad04085e39/agentscore_py-2.0.2-py3-none-any.whl", hash = "sha256:95447ae29cdb490f988534ac53fabc49d6029b7605cb24f5b3bc0e3b524e98df", size = 14483, upload-time = "2026-05-01T04:15:07.475Z" }, ] [[package]]