Trade Research
Phase 8b/10A — 7-agent trade research panel ($0.25 basic via x402).
See gecko_trade_research MCP tool for the description shipped to
Claude Code skill manifests. This handler does the retrieval + panel
invocation in one round trip; payload is JSON in / JSON out, no
streaming in v1.
Body
Phase 8b — request shape for POST /trade_research.
Free in v1 (no x402 gate). The 7-agent panel reads the trading-oracle
corpus filtered by (vertical, protocol) and returns the verdict
shape. protocol is required and lower-cased downstream.
Response
Successful Response
Wire response for POST /trade_research.
Mirrors :class:gecko_core.orchestration.trade_panel.TradePanelVerdict
field-for-field. The turns list carries plain dicts so we don't
couple this surface to the core's pydantic model when consumers
deserialize off the wire.
Issue #14: backtest is the pro-tier-only field that justifies the
3x price delta over basic. Always None on the basic envelope (the
handler does not enable the backtest path); always a dict on pro
(either real PnL stats, or unbacktestable=True + reason when
the price source has no history). Surfacing the unbacktestable shape
is intentional — the buyer paid for evidence either way.
act, pass, defer 0 <= x <= 1x >= 0S35-#99 — 'the data'. Protocol/market-data chunks a panel turn referenced via its inline [N] marker (provider_kind in protocol_native / market_data / paysh_live / bazaar_live). Each entry: {id, source, url, chunk_id, provider_kind, freshness_tier, snippet}. Breaking change: replaces the old single citations[].
S35-#99 — 'the lens'. Investor-canon chunks (provider_kind canon_*) the panel reasoned over. Same item shape as evidence_citations. Not relevance-trimmed: canon is cross-cutting.
Pro-tier only. Realized-history replay of the Strategist intent (pnl_pct, drawdown_pct, hit_rate, source) or {'unbacktestable': True, 'reason': '...'} when the price corpus can't satisfy. Always None on the basic envelope.
Solana on-chain x402 settlement signature; null in stub mode.
Solscan deep link for tx_signature; null in stub mode.
Whether real money moved on chain. Canonical literal lives in gecko_core.types.SettlementMode (Pattern A).
stub, live