codex-channel-molecule/pyproject.toml
Molecule AI · Infra-Runtime-BE 06739ba9e0
All checks were successful
CI / test (3.11) (pull_request) Successful in 2m10s
CI / test (3.12) (pull_request) Successful in 2m10s
fix(deps): raise molecule-ai-workspace-runtime floor to >=0.1.129
Pre-0.1.129 the runtime's inline A2A response sniffer in
``send_a2a_message`` checked only for ``result`` / ``error`` keys and
routed the poll-mode success envelope —
``{"status": "queued", "delivery_mode": "poll", "method": "..."}`` —
to the malformed branch:

    [A2A_ERROR] unexpected response shape (no result, no error): {...}

That string then propagated through ``tool_delegate_task`` into the
caller workspace's activity row, surfacing on canvas as the workspace's
task label and triggering a ~3s retry storm.

0.1.129 introduced ``a2a_response.py`` (SSOT typed parser with explicit
``Queued`` variant) + matching ``_A2A_QUEUED_PREFIX`` handling in
``a2a_tools_delegation.tool_delegate_task`` that falls back to the
durable ``/delegate`` + ``/delegations`` polling path — the correct
synchronous facade for poll-mode peers.

The existing ``>=0.1.110`` pin allowed a fresh ``pip install
codex-channel-molecule`` to resolve to a buggy wheel and reproduce the
incident. Raising the floor to 0.1.129 closes that window.

Adds a ``test_runtime_dependency_floor.py`` regression test that
parses ``pyproject.toml`` and asserts the lower bound stays at or
above 0.1.129 — bumps the version to 0.1.3 so a republish carries the
floor downstream.

Closes molecule-ai/internal#424.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:44:25 -07:00

49 lines
1.9 KiB
TOML

[build-system]
requires = ["setuptools>=68", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "codex-channel-molecule"
version = "0.1.3"
description = "Bridge daemon for codex CLI ↔ Molecule platform — long-polls the platform inbox, runs `codex exec --resume <session>` per inbound message, replies via send_message_to_user MCP tool. Counterpart to hermes-channel-molecule."
readme = "README.md"
requires-python = ">=3.11"
license = { text = "Apache-2.0" }
authors = [{ name = "Molecule AI" }]
dependencies = [
# Floor raised from 0.1.110 → 0.1.129 to pull in the SSOT A2A response
# parser (a2a_response.py, introduced 0.1.129). Pre-0.1.129 the legacy
# inline sniffer in a2a_client.send_a2a_message treated the poll-mode
# ``{"status": "queued", "delivery_mode": "poll", "method": "..."}``
# envelope as malformed and surfaced ``[A2A_ERROR] unexpected response
# shape (no result, no error): ...`` on every reply attempt — that
# then propagated to canvas as the workspace's task label and triggered
# a ~3s retry storm. The 0.1.129+ runtime classifies the envelope as
# ``Queued`` and short-circuits to the durable /delegate-poll path
# (a2a_tools_delegation._delegate_sync_via_polling). See
# ``molecule-ai/internal#424`` and ``molecule-core#2967`` for the
# full incident + fix history.
"molecule-ai-workspace-runtime>=0.1.129",
]
[project.optional-dependencies]
test = [
"pytest>=8",
"pytest-asyncio>=0.23",
]
[project.scripts]
codex-channel-molecule = "codex_channel_molecule.daemon:main"
[project.urls]
Homepage = "https://git.moleculesai.app/molecule-ai/codex-channel-molecule"
Repository = "https://git.moleculesai.app/molecule-ai/codex-channel-molecule"
[tool.setuptools.packages.find]
include = ["codex_channel_molecule*"]
exclude = ["tests*"]
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]