Gap
In core, watchPrices, watchUserPositions, and watchUserTransactions are implemented exclusively on LimitlessExchange. The Python SDK incorrectly adds all three methods to the base Exchange class, meaning every exchange subclass (Kalshi, Polymarket, Myriad, etc.) inherits them. Calling these methods on any non-Limitless exchange via the Python SDK will produce a runtime error because the sidecar will attempt to call a method that doesn't exist on those exchange instances.
Core
core/src/exchanges/limitless/index.ts:495 — watchPrices exists ONLY on LimitlessExchange
core/src/exchanges/limitless/index.ts:506 — watchUserPositions exists ONLY on LimitlessExchange
core/src/exchanges/limitless/index.ts:517 — watchUserTransactions exists ONLY on LimitlessExchange
No other exchange class (KalshiExchange, PolymarketExchange, etc.) implements these methods. They are not on PredictionMarketExchange (base class).
TypeScript SDK
Missing entirely — tracked in issue #841.
Python SDK
sdks/python/pmxt/client.py:2180
def watch_prices(self, market_address: str, callback=None) -> Dict[str, Any]:
... # on Exchange base class — inherited by ALL subclasses
sdks/python/pmxt/client.py:2216
def watch_user_positions(self, callback=None) -> List[Position]:
... # on Exchange base class
sdks/python/pmxt/client.py:2253
def watch_user_transactions(self, callback=None) -> Dict[str, Any]:
... # on Exchange base class
All three methods are defined on Exchange (the abstract base) rather than on the Limitless subclass. Every exchange inherits them. Calling Kalshi().watch_prices(...) will route to the sidecar which calls kalshi.watchPrices(...) — a method that doesn't exist — resulting in a runtime error with no static warning.
Evidence
watchPrices, watchUserPositions, watchUserTransactions appear at limitless/index.ts:495,506,517 and nowhere else in any other exchange's index.ts. The base class BaseExchange.ts does not define them. The Python SDK adds them to the base Exchange class at client.py:2180,2216,2253 — confirmed by searching for these method names.
Impact
Kalshi().watch_prices(...), Polymarket().watch_user_positions(...), etc. appear valid to static analysis and IDEs but fail at runtime.
- These methods should be on a
Limitless-specific class or guarded with a capability check.
- Users writing generic code that iterates exchange instances may unknowingly call these on unsupported exchanges.
- No type-level signal distinguishes Limitless from other exchanges for these capabilities.
Found by automated Core-to-SDK surface coverage audit
Gap
In core,
watchPrices,watchUserPositions, andwatchUserTransactionsare implemented exclusively onLimitlessExchange. The Python SDK incorrectly adds all three methods to the baseExchangeclass, meaning every exchange subclass (Kalshi,Polymarket,Myriad, etc.) inherits them. Calling these methods on any non-Limitless exchange via the Python SDK will produce a runtime error because the sidecar will attempt to call a method that doesn't exist on those exchange instances.Core
core/src/exchanges/limitless/index.ts:495—watchPricesexists ONLY onLimitlessExchangecore/src/exchanges/limitless/index.ts:506—watchUserPositionsexists ONLY onLimitlessExchangecore/src/exchanges/limitless/index.ts:517—watchUserTransactionsexists ONLY onLimitlessExchangeNo other exchange class (
KalshiExchange,PolymarketExchange, etc.) implements these methods. They are not onPredictionMarketExchange(base class).TypeScript SDK
Missing entirely — tracked in issue #841.
Python SDK
sdks/python/pmxt/client.py:2180sdks/python/pmxt/client.py:2216sdks/python/pmxt/client.py:2253All three methods are defined on
Exchange(the abstract base) rather than on theLimitlesssubclass. Every exchange inherits them. CallingKalshi().watch_prices(...)will route to the sidecar which callskalshi.watchPrices(...)— a method that doesn't exist — resulting in a runtime error with no static warning.Evidence
watchPrices,watchUserPositions,watchUserTransactionsappear atlimitless/index.ts:495,506,517and nowhere else in any other exchange'sindex.ts. The base classBaseExchange.tsdoes not define them. The Python SDK adds them to the baseExchangeclass atclient.py:2180,2216,2253— confirmed by searching for these method names.Impact
Kalshi().watch_prices(...),Polymarket().watch_user_positions(...), etc. appear valid to static analysis and IDEs but fail at runtime.Limitless-specific class or guarded with a capability check.Found by automated Core-to-SDK surface coverage audit