{"name":"petri-polymarket-agent","version":"3.1.0","status":"experimental","funds":[{"id":"cheetah","name":"猎豹·S","emoji":"🐆","motto":"机会属于敢于出手的人","monthlyTarget":"+9.139999999999999%","initialBalance":10000},{"id":"cheetah_l","name":"猎豹·L","emoji":"🐆","motto":"机会属于敢于出手的人","monthlyTarget":"+8.92%","initialBalance":1000000},{"id":"cheetah_live","name":"猎豹·S Live","emoji":"🐆","motto":"机会属于敢于出手的人","monthlyTarget":"+9.139999999999999%","initialBalance":10000},{"id":"cheetah_m","name":"猎豹·M","emoji":"🐆","motto":"机会属于敢于出手的人","monthlyTarget":"+1%","initialBalance":100000},{"id":"honey_badger_g2","name":"蜜獾·S","emoji":"🦡","motto":"无所畏惧，绝不退让","monthlyTarget":"+9.65%","initialBalance":10000},{"id":"honey_badger_l","name":"蜜獾·L","emoji":"🦡","motto":"无所畏惧，绝不退让","monthlyTarget":"+11.63%","initialBalance":1000000},{"id":"honey_badger_m","name":"蜜獾·M","emoji":"🦡","motto":"无所畏惧，绝不退让","monthlyTarget":"+1%","initialBalance":100000},{"id":"octopus","name":"章鱼·S","emoji":"🐙","motto":"用数据说话，让公式决策","monthlyTarget":"+7.049999999999999%","initialBalance":10000},{"id":"octopus_l","name":"章鱼·L","emoji":"🐙","motto":"用数据说话，让公式决策","monthlyTarget":"+9.19%","initialBalance":1000000},{"id":"octopus_m","name":"章鱼·M","emoji":"🐙","motto":"用数据说话，让公式决策","monthlyTarget":"+1%","initialBalance":100000},{"id":"shark","name":"鲨鱼·S","emoji":"🦈","motto":"大胆出击，快速收割","monthlyTarget":"+7.42%","initialBalance":10000},{"id":"shark_l","name":"鲨鱼·L","emoji":"🦈","motto":"大胆出击，快速收割","monthlyTarget":"+8.5%","initialBalance":1000000},{"id":"shark_m_g2","name":"鲨鱼·M","emoji":"🦈","motto":"大胆出击，快速收割","monthlyTarget":"+1%","initialBalance":100000},{"id":"turtle","name":"海龟·S","emoji":"🐢","motto":"少即是多，确定性高于一切","monthlyTarget":"+7.59%","initialBalance":10000},{"id":"turtle_l","name":"海龟·L","emoji":"🐢","motto":"少即是多，确定性高于一切","monthlyTarget":"+7.55%","initialBalance":1000000},{"id":"turtle_m","name":"海龟·M","emoji":"🐢","motto":"少即是多，确定性高于一切","monthlyTarget":"+1.22%","initialBalance":100000}],"schedule":{"scan":"every 5 min","riskMonitor":"every 60s (Durable Object alarm)","dailyReport":"0 1 * * * (UTC 01:00 = BJ 09:00)","evolution":"0 0 * * SUN (Sunday UTC 00:00 = BJ 08:00)"},"endpoints":{"GET /api/funds":"Fund rankings and stats","GET /api/trades":"Trade history (query: status, fund, limit; funds in PRIVATE_DETAIL_FUND_IDS / LIVE_FUND_IDS are withheld)","GET /api/signals":"Recent signals (query: limit)","GET /api/snapshots":"Portfolio snapshots (query: fund, limit)","GET /api/market-drivers":"Top markets by realized PnL in time window (query: hours=1|3|12|24|72|168, default 3)","GET /api/evolution":"Evolution log and epoch history","GET /api/shadow":"Shadow order log and paper-vs-shadow comparison (query: fund, limit; private funds withheld)","GET /api/live-status | /api/live-reconcile | /api/live-pnl":"Real-money status, reconcile and P&L (X-Admin-Token required)","GET /api/system":"System config (kill switch, execution mode)","GET /api/heartbeat":"Pipeline heartbeat (last scan time, skip reasons)","GET /api/health":"Health check (includes kill switch + mode)","WS /ws":"Real-time event stream (WebSocket)","POST /run":"Manual scan+trade (auth required)","POST /report":"Manual daily report (auth required)","POST /evolve":"Manual evolution trigger (auth required; 409 while kill switch is active)","POST /api/circuit-breaker":"Reset a fund's circuit breaker (auth required, body: {fundId}; audited)","POST /api/admin/pins/create-twin":"Open the pinned real-money twin (X-Admin-Token, body: {sourceFundId, twinId?}; audited)","GET /api/admin/pins/candidates":"Pending promotion candidates for pinned twins, with diff and evidence (X-Admin-Token)","POST /api/admin/pins/decide":"Approve or reject a promotion candidate (X-Admin-Token, body: {candidateId, decision: 'approve'|'reject'}; audited; approval is the only thing that changes a pinned twin)","GET /api/admin/live-account":"Real-money account limits: state, floors, registered budget and a fresh equity reading to compare with the dashboard (X-Admin-Token; read-only; never returns the wallet address)","POST /api/admin/live-account/reset":"Acknowledge a tripped real-money limit and re-baseline it to a real equity reading (X-Admin-Token; audited; refused when nothing is tripped; distinct from the paper /api/circuit-breaker)","POST /api/admin/pins/propose":"Propose a promotion candidate for a pinned twin (X-Admin-Token, body: {fundId}; audited; changes nothing until approved)","POST /init-funds":"Initialize fund configs in D1 (auth required)","POST /kill-switch":"Toggle kill switch (auth required, body: {active: boolean})","POST /execution-mode":"Set execution mode (auth required, body: {mode: 'paper'|'shadow'})","GET /risk-monitor":"Risk monitor status","POST /risk-monitor":"Arm/disarm risk monitor (auth required, body: {action: 'arm'|'disarm'})"}}