Conversation
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Release v0.1.20. Two new config-load validators harden upstream prefix handling, plus a CLI dispatch parity fix, the 64-char tool name overflow guard, and a test-suite flake fix accumulated since v0.1.19.
Headline
ValidationErrorat config load (proxy/config: fail-fast on duplicate upstream prefixes #265). Two upstreams sharing a prefix used to silently drop the second-loaded duplicate atProxyManager.start()with only alogger.warning. The new@model_validator(mode="after")onProxyConfigraises with every collision group named in one error so both the upstream dict keys (what the user edited) and the prefix value (what collides) surface together. Hot-reload (ProxyConfigLoader.get) keeps the previous good config on validation failure.ValidationErrorat config load (proxy/config: reject empty upstream prefix #266).prefix=""used to validate fine and produce composed names like__list_itemsthat surfaced as broken entries intools/list, also skewing the 64-char overflow guard. Sibling validator placed before the uniqueness check so aprefix=""/prefix=""pair surfaces the more actionable empty error rather than the duplicate one.mms addrejects prefixes that guarantee overflow;ProxyManager._connect_serverper-tool checks the composed length at boot and skips offending tools (better one missing tool than the whole upstream);mms health --namesre-runs the check on demand.MMS_CLIENT_SERVER_NAMEenv var lets users who registered STM under a shorter alias get accurate budget arithmetic.memtomem-stmworked as an MCP-server registration target;memtomem-stm-proxyandmmsresolved to the Click group whose bare invocation printed help and exited 2. Now all three[project.scripts]entry points dispatch identically based onsys.stdin.isatty().Internal
TestAutoIndexStartupWarningno longer flakes under full-suite event-loop pressure (test: TestAutoIndexStartupWarning leaks asyncio.CancelledError past except-Exception #264). The MCP SDK's stdio reader can surfaceecho-upstream handshake failure asasyncio.CancelledError(BaseException);try/except Exceptiondidn't catch it. Catch widened to(Exception, asyncio.CancelledError)with a comment naming the SDK cancellation path. No production code touched.mms health --namesflag and the new prefix invariants are now documented indocs/cli.mdanddocs/configuration.mdrespectively. The pre-existing hot-reload paragraph was promoted to its own subheading so the new prefix invariants subsection has a structural peer.Behavior change
prefix=""(proxy/config: reject empty upstream prefix #266) now fail at startup withValidationError. Hot-reload retains the last-good config on validation failure, so a running proxy keeps serving its last known-good upstreams instead of going dark.WARNINGlog naming the tool and the suggested fix; previously the tool just disappeared from the client's catalogue.mmsandmemtomem-stm-proxyregistered as an MCP client'scommandnow boot the stdio server identically tomemtomem-stminstead of failing with: calling "initialize": EOF.Test plan
uv run pytest -m "not ollama" -q— 1751/1751 pass on this branchuv run ruff check src && uv run ruff format --check src— cleanuv lockresolves cleanly,memtomem-stmpackage version bumped to 0.1.20Post-merge release steps
v0.1.20and push — trusted-publisher OIDC publishes to PyPI (PyPI environment approval gate required, seereference_pypi_publish.md).gh release create v0.1.20(Release is not auto-created from the tag —reference_github_release.md).🤖 Generated with Claude Code