
    Baj                    n    d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZ ddZddZddZddZdS )    )annotationsN)Path)
create_app)TradeApprovalRequest)build_crypto_trader_snapshotrecord_trade_approvalpathr   payloaddictreturnNonec                    | j                             dd           |                     t          j        |          d           d S )NTparentsexist_okutf-8encoding)parentmkdir
write_textjsondumps)r	   r
   s     'tests/unit/test_crypto_trader_bridge.py_write_jsonr      sC    KdT222OODJw'''O:::::    rows
list[dict]c                    | j                             dd           |                     d                    d |D                       dz   d           d S )NTr   
c              3  >   K   | ]}t          j        |          V  d S )N)r   r   ).0rows     r   	<genexpr>z _append_jsonl.<locals>.<genexpr>   s*      >>#djoo>>>>>>r   r   r   )r   r   r   join)r	   r   s     r   _append_jsonlr&      sZ    KdT222OODII>>>>>>>EPWOXXXXXr   tmp_pathc                   |                     dt          | dz                       | dz  }|                     dt          |                     |dz  dz  }t          |dz  dz  d	dd
d
d
d
dddddii           t          |dz  dddddddddddd	ii           t          |dz  dddd
ddd
dg           t          |dz  d z  d!d"d#d$g d%g d&d!d%d%d'd(           t          |d)z  i d*d+d,dd-dd.d/d0d1d2dd3d4d5dd6d7d8d9d:d;d<d;d=d>d?d$d@dAdBdCdDd
g           |dz                      d
d
E           |dz  dFz                      dGdHI           t          |          }|j        j        d!k    sJ |j        j	        dJu sJ |j        j
        d%         j        d
u sJ |j        j        dKk    sJ |j        j        d%         j        dk    sJ |j        j        d%         j        dLk    sJ |j        j        d%         j        d7k    sJ |j        j        d7k    sJ |j        j        dMk    sJ |j        j        d#k    sJ |j        j        dN         j        d7k    sJ |j        j        d%         j        dk    sJ |j        j        d%         j        d7k    sJ |j        j        d7k    sJ |j        j        d!k    sJ |j        j        d"k    sJ dO |j        j        D             h dPk    sJ |j        d%         j        dQk    sJ |j        d%         j         dJu sJ |j!        d%         j        dk    sJ |j!        d%         j"        dRk    sJ |j!        d%         j         dJu sJ |j#        d%         j	        dJu sJ tI          tK          |j!        d%         j&        dSd
dTU                    }|j        dVk    sJ |j         dJu sJ | dz  dWz  dXz  '                                sJ | dz  dWz  dXz  (                    dHI          )                                }tU          j+        |dN                   }|d-         dk    sJ |d,         dk    sJ |dY         dZk    sJ t          |          }|j!        d%         j"        d[k    sJ d S )\NJARVIS_FINANCE_RUNTIME_DIRfinance_runtimeruntime!JARVIS_CRYPTO_TRADER_RUNTIME_ROOTexperiments%candidate_swing_trend_retest_researchreportsz v76_paper_supervisor_latest.jsonafterTi  z9runtime/experiments/candidate_swing_trend_retest_researchzMruntime/experiments/candidate_swing_trend_retest_research/trade_journal.jsonlzNruntime/experiments/candidate_swing_trend_retest_research/signal_journal.jsonl)running
paper_onlyenv_okcmd_okpidruntime_dirtrade_journalsignal_journalz
state.jsonopen_positionsSOL100z0.595110z1.2z-0.3   z2026-06-30T12:00:00+00:00)	strategy_identrysize	stop_losstake_profitmfe_pctmae_pct
ticks_held	opened_atzsignal_journal.jsonlpaper_opened_lifecyclez25.6)	timestampcoinr?   would_enterfinal_decisionsignal_scoredata_quality_allowedz!hl_reconcile_watchdog_latest.jsonokz75.49z100.000r   )status	free_usdcequitymargin_usage_pctopen_ordersstops_missing_countwarnings)rQ   open_orders_countrV   )	reconcilewatchdogztrade_journal.jsonlrI   z2026-06-30T12:30:00+00:00rJ   r?   eventexitsidelongentry_price
exit_price102rA   net_pnl_usdz0.80gross_pnl_usdz1.00entry_fee_usdz0.05exit_fee_usdslippage_cost_usdz0.10funding_cost_usdexit_reasonrC   candles_held   paper_tradingr   z"hyperliquid_daily_report_latest.mdzv76 Lifecycle Scorecard: source=true_lifecycle_exits_only, closed=99, winrate=35.35%, pf=0.58, net_pnl=-2.55 USDC, blocker=lifecycle_pnl_not_positive, live=nein
r   r   Fhyperliquidz50.00   c                    h | ]	}|j         
S  )key)r"   checks     r   	<setcomp>zStest_crypto_trader_bridge_builds_read_only_snapshot_from_runtime.<locals>.<setcomp>   s    BBB%EIBBBr   >   stopsrY   kill_switchdata_qualityexecution_modeBUYawaiting_approvalr2   test)	intent_iddecisionconfirmnoterecordedcrypto_traderztrade_approvals.jsonlsource_engineCryptoTraderpaper_only_approved),setenvstrr   r&   r   r   r   rQ   bridge_statuslive_allowed	processesr2   	portfolioportfolio_idr9   rJ   notional_usdrecent_closed_tradesrb   realized_pnl_usdclosed_trades_countwinrate_pctperformance_pointspaper_pnl_usdstrategy_performancer?   $experimental_legacy_realized_pnl_usdreconcile_statusrR   risk_checkssignalssignalexecution_allowedtrade_intentsapproval_status
scorecardsr   r   r{   exists	read_text
splitlinesr   loads)	r'   monkeypatchr+   strategysnapshotresponse
audit_rowsaudit_payloadupdateds	            r   @test_crypto_trader_bridge_builds_read_only_snapshot_from_runtimer      s   3SDU9U5V5VWWW"G:CLLIII&)PPH)@@7#"&""#^%t&v	: 	:	
  " <#J"!!%#($%"#!<
 
	
  $ )) 9F#": &(, 
	
   )AA $"$'!'(  $(aXYZZ	
 	
   ((8 F 	
  u e  v      $V #C }  !"  #	
  0 yt<<<y??KK 	m L   
 ,G44H?(D0000?'50000?$Q'2d::::*m;;;;,Q/4====,Q/<GGGG215AVKKKK.&88881Q6666)X555504BfLLLL215AElllll215AVKKKKBfLLLL.$6666'72222BB8#5#ABBB  GN  GN  GN  N  N  N  NA%....A0E9999!!$)U2222!!$48KKKKK!!$6%????q!.%7777$%9HDZ[\D]Dgr~  IM  TZ  &[  &[  &[  \  \H?j((((%....((?:=TT\\^^^^^..@CZZeeoveww  C  C  E  EJJz"~..M'+RRRRR E)))))^;;;;*733G #37LLLLLLLr   c                     t                      } |                                 d         }d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d S )Npathsz/api/crypto-trader/statusz/api/crypto-trader/snapshotz(/api/crypto-trader/hyperliquid-portfolioz /api/crypto-trader/trade-intentsz"/api/crypto-trader/trade-approvals)r   openapi)appr   s     r   (test_crypto_trader_api_routes_registeredr      sx    
,,CKKMM'"E&%////(E11115>>>>-6666/5888888r   )r	   r   r
   r   r   r   )r	   r   r   r   r   r   )r'   r   r   r   )r   r   )
__future__r   r   pathlibr   jarvis_finance.api.mainr   (jarvis_finance.api.schemas.crypto_traderr   ,jarvis_finance.services.crypto_trader_bridger   r   r   r&   r   r   rp   r   r   <module>r      s    " " " " " "        . . . . . . I I I I I I l l l l l l l l; ; ; ;
Y Y Y Y
GM GM GM GMT9 9 9 9 9 9r   