- Add Trade Strategist agent (trade_strategist_node.py): generates 5
actionable trade setups (Entry, SL, TP, R:R, Win%) after Portfolio Manager
- Wire Trade Strategist into LangGraph pipeline (setup.py)
- Add 'trade_possibilities' field to AgentState schema
- Initialize trade_possibilities in Propagator initial state
- Integrate SqliteSaver (langgraph-checkpoint-sqlite) for node-by-node
state persistence to trading_agents_state.sqlite
- Add unique thread_id (ticker_date) to graph config for checkpoint isolation
- Update CLI (main.py) to display Trade Strategist progress + save report section
- Restore full standard Python .gitignore (200+ rules) stripped in prior PR
- Fix: convert trade_strategist_node to factory function (create_trade_strategist)
to resolve LangGraph TypeError on missing 'llm' argument
- Fix: use sqlite3.connect() directly instead of SqliteSaver.from_conn_string()
to avoid _GeneratorContextManager TypeError
Add effort parameter (high/medium/low) for Claude 4.5+ and 4.6 models,
consistent with OpenAI reasoning_effort and Google thinking_level.
Also add content normalization for Anthropic responses.
InvestDebateState was missing bull_history, bear_history, judge_decision.
RiskDebateState was missing aggressive_history, conservative_history,
neutral_history, latest_speaker, judge_decision. This caused KeyError
in _log_state() and reflection, especially with edge-case config values.
Prevents UnicodeEncodeError on Windows where the default encoding
(cp1252/gbk) cannot handle Unicode characters in LLM output.
Closes#77, closes#114, closes#126, closes#215, closes#332
- Add StatsCallbackHandler for tracking LLM calls, tool calls, and tokens
- Integrate callbacks into TradingAgentsGraph and all LLM clients
- Dynamic agent/report counts based on selected analysts
- Fix report completion counting (tied to agent completion)