SYMBOL INDEX (854 symbols across 177 files) FILE: app/backend/alembic/env.py function run_migrations_offline (line 28) | def run_migrations_offline() -> None: function run_migrations_online (line 52) | def run_migrations_online() -> None: FILE: app/backend/alembic/versions/1b1feba3d897_add_data_column_to_hedge_fund_flows.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 28) | def downgrade() -> None: FILE: app/backend/alembic/versions/2f8c5d9e4b1a_add_hedgefundflowrun_table.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 43) | def downgrade() -> None: FILE: app/backend/alembic/versions/3f9a6b7c8d2e_add_hedgefundflowruncycle_table.py function upgrade (line 18) | def upgrade(): function downgrade (line 70) | def downgrade(): FILE: app/backend/alembic/versions/5274886e5bee_add_hedgefundflow_table.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 41) | def downgrade() -> None: FILE: app/backend/alembic/versions/add_api_keys_table.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 40) | def downgrade() -> None: FILE: app/backend/database/connection.py function get_db (line 27) | def get_db(): FILE: app/backend/database/models.py class HedgeFundFlow (line 6) | class HedgeFundFlow(Base): class HedgeFundFlowRun (line 29) | class HedgeFundFlowRun(Base): class HedgeFundFlowRunCycle (line 59) | class HedgeFundFlowRunCycle(Base): class ApiKey (line 97) | class ApiKey(Base): FILE: app/backend/main.py function startup_event (line 33) | async def startup_event(): FILE: app/backend/models/events.py class BaseEvent (line 5) | class BaseEvent(BaseModel): method to_sse (line 10) | def to_sse(self) -> str: class StartEvent (line 16) | class StartEvent(BaseEvent): class ProgressUpdateEvent (line 22) | class ProgressUpdateEvent(BaseEvent): class ErrorEvent (line 32) | class ErrorEvent(BaseEvent): class CompleteEvent (line 40) | class CompleteEvent(BaseEvent): FILE: app/backend/models/schemas.py class FlowRunStatus (line 9) | class FlowRunStatus(str, Enum): class AgentModelConfig (line 16) | class AgentModelConfig(BaseModel): class PortfolioPosition (line 22) | class PortfolioPosition(BaseModel): method price_must_be_positive (line 29) | def price_must_be_positive(cls, v: float) -> float: class GraphNode (line 35) | class GraphNode(BaseModel): class GraphEdge (line 42) | class GraphEdge(BaseModel): class HedgeFundResponse (line 50) | class HedgeFundResponse(BaseModel): class ErrorResponse (line 55) | class ErrorResponse(BaseModel): class BaseHedgeFundRequest (line 61) | class BaseHedgeFundRequest(BaseModel): method get_agent_ids (line 72) | def get_agent_ids(self) -> List[str]: method get_agent_model_config (line 76) | def get_agent_model_config(self, agent_id: str) -> tuple[str, ModelPro... class BacktestRequest (line 94) | class BacktestRequest(BaseHedgeFundRequest): class BacktestDayResult (line 100) | class BacktestDayResult(BaseModel): class BacktestPerformanceMetrics (line 115) | class BacktestPerformanceMetrics(BaseModel): class BacktestResponse (line 125) | class BacktestResponse(BaseModel): class HedgeFundRequest (line 131) | class HedgeFundRequest(BaseHedgeFundRequest): method get_start_date (line 136) | def get_start_date(self) -> str: class FlowCreateRequest (line 144) | class FlowCreateRequest(BaseModel): class FlowUpdateRequest (line 155) | class FlowUpdateRequest(BaseModel): class FlowResponse (line 166) | class FlowResponse(BaseModel): class Config (line 179) | class Config: class FlowSummaryResponse (line 183) | class FlowSummaryResponse(BaseModel): class Config (line 193) | class Config: class FlowRunCreateRequest (line 198) | class FlowRunCreateRequest(BaseModel): class FlowRunUpdateRequest (line 203) | class FlowRunUpdateRequest(BaseModel): class FlowRunResponse (line 210) | class FlowRunResponse(BaseModel): class Config (line 224) | class Config: class FlowRunSummaryResponse (line 228) | class FlowRunSummaryResponse(BaseModel): class Config (line 239) | class Config: class ApiKeyCreateRequest (line 244) | class ApiKeyCreateRequest(BaseModel): class ApiKeyUpdateRequest (line 252) | class ApiKeyUpdateRequest(BaseModel): class ApiKeyResponse (line 259) | class ApiKeyResponse(BaseModel): class Config (line 270) | class Config: class ApiKeySummaryResponse (line 274) | class ApiKeySummaryResponse(BaseModel): class Config (line 285) | class Config: class ApiKeyBulkUpdateRequest (line 289) | class ApiKeyBulkUpdateRequest(BaseModel): FILE: app/backend/repositories/api_key_repository.py class ApiKeyRepository (line 9) | class ApiKeyRepository: method __init__ (line 12) | def __init__(self, db: Session): method create_or_update_api_key (line 15) | def create_or_update_api_key( method get_api_key_by_provider (line 48) | def get_api_key_by_provider(self, provider: str) -> Optional[ApiKey]: method get_all_api_keys (line 55) | def get_all_api_keys(self, include_inactive: bool = False) -> List[Api... method update_api_key (line 62) | def update_api_key( method delete_api_key (line 86) | def delete_api_key(self, provider: str) -> bool: method deactivate_api_key (line 96) | def deactivate_api_key(self, provider: str) -> bool: method update_last_used (line 107) | def update_last_used(self, provider: str) -> bool: method bulk_create_or_update (line 120) | def bulk_create_or_update(self, api_keys_data: List[dict]) -> List[Api... FILE: app/backend/repositories/flow_repository.py class FlowRepository (line 6) | class FlowRepository: method __init__ (line 9) | def __init__(self, db: Session): method create_flow (line 12) | def create_flow(self, name: str, nodes: dict, edges: dict, description... method get_flow_by_id (line 30) | def get_flow_by_id(self, flow_id: int) -> Optional[HedgeFundFlow]: method get_all_flows (line 34) | def get_all_flows(self, include_templates: bool = True) -> List[HedgeF... method get_flows_by_name (line 41) | def get_flows_by_name(self, name: str) -> List[HedgeFundFlow]: method update_flow (line 47) | def update_flow(self, flow_id: int, name: str = None, description: str... method delete_flow (line 76) | def delete_flow(self, flow_id: int) -> bool: method duplicate_flow (line 86) | def duplicate_flow(self, flow_id: int, new_name: str = None) -> Option... FILE: app/backend/repositories/flow_run_repository.py class FlowRunRepository (line 9) | class FlowRunRepository: method __init__ (line 12) | def __init__(self, db: Session): method create_flow_run (line 15) | def create_flow_run(self, flow_id: int, request_data: Dict[str, Any] =... method get_flow_run_by_id (line 31) | def get_flow_run_by_id(self, run_id: int) -> Optional[HedgeFundFlowRun]: method get_flow_runs_by_flow_id (line 35) | def get_flow_runs_by_flow_id(self, flow_id: int, limit: int = 50, offs... method get_active_flow_run (line 46) | def get_active_flow_run(self, flow_id: int) -> Optional[HedgeFundFlowR... method get_latest_flow_run (line 57) | def get_latest_flow_run(self, flow_id: int) -> Optional[HedgeFundFlowR... method update_flow_run (line 66) | def update_flow_run( method delete_flow_run (line 98) | def delete_flow_run(self, run_id: int) -> bool: method delete_flow_runs_by_flow_id (line 108) | def delete_flow_runs_by_flow_id(self, flow_id: int) -> int: method get_flow_run_count (line 118) | def get_flow_run_count(self, flow_id: int) -> int: method _get_next_run_number (line 126) | def _get_next_run_number(self, flow_id: int) -> int: FILE: app/backend/routes/api_keys.py function create_or_update_api_key (line 27) | async def create_or_update_api_key(request: ApiKeyCreateRequest, db: Ses... function get_api_keys (line 49) | async def get_api_keys(include_inactive: bool = False, db: Session = Dep... function get_api_key (line 67) | async def get_api_key(provider: str, db: Session = Depends(get_db)): function update_api_key (line 89) | async def update_api_key(provider: str, request: ApiKeyUpdateRequest, db... function delete_api_key (line 116) | async def delete_api_key(provider: str, db: Session = Depends(get_db)): function deactivate_api_key (line 138) | async def deactivate_api_key(provider: str, db: Session = Depends(get_db)): function bulk_update_api_keys (line 163) | async def bulk_update_api_keys(request: ApiKeyBulkUpdateRequest, db: Ses... function update_last_used (line 190) | async def update_last_used(provider: str, db: Session = Depends(get_db)): FILE: app/backend/routes/flow_runs.py function create_flow_run (line 28) | async def create_flow_run( function get_flow_runs (line 62) | async def get_flow_runs( function get_active_flow_run (line 94) | async def get_active_flow_run(flow_id: int, db: Session = Depends(get_db)): function get_latest_flow_run (line 121) | async def get_latest_flow_run(flow_id: int, db: Session = Depends(get_db)): function get_flow_run (line 148) | async def get_flow_run(flow_id: int, run_id: int, db: Session = Depends(... function update_flow_run (line 178) | async def update_flow_run( function delete_flow_run (line 224) | async def delete_flow_run(flow_id: int, run_id: int, db: Session = Depen... function delete_all_flow_runs (line 258) | async def delete_all_flow_runs(flow_id: int, db: Session = Depends(get_d... function get_flow_run_count (line 286) | async def get_flow_run_count(flow_id: int, db: Session = Depends(get_db)): FILE: app/backend/routes/flows.py function create_flow (line 26) | async def create_flow(request: FlowCreateRequest, db: Session = Depends(... function get_flows (line 52) | async def get_flows(include_templates: bool = True, db: Session = Depend... function get_flow (line 70) | async def get_flow(flow_id: int, db: Session = Depends(get_db)): function update_flow (line 92) | async def update_flow(flow_id: int, request: FlowUpdateRequest, db: Sess... function delete_flow (line 124) | async def delete_flow(flow_id: int, db: Session = Depends(get_db)): function duplicate_flow (line 146) | async def duplicate_flow(flow_id: int, new_name: str = None, db: Session... function search_flows (line 167) | async def search_flows(name: str, db: Session = Depends(get_db)): FILE: app/backend/routes/health.py function root (line 10) | async def root(): function ping (line 15) | async def ping(): FILE: app/backend/routes/hedge_fund.py function run (line 26) | async def run(request_data: HedgeFundRequest, request: Request, db: Sess... function backtest (line 170) | async def backtest(request_data: BacktestRequest, request: Request, db: ... function get_agents (line 346) | async def get_agents(): FILE: app/backend/routes/language_models.py function get_language_models (line 20) | async def get_language_models(): function get_language_model_providers (line 41) | async def get_language_model_providers(): FILE: app/backend/routes/ollama.py class ModelRequest (line 14) | class ModelRequest(BaseModel): class OllamaStatusResponse (line 17) | class OllamaStatusResponse(BaseModel): class ActionResponse (line 24) | class ActionResponse(BaseModel): class RecommendedModel (line 28) | class RecommendedModel(BaseModel): class ProgressResponse (line 33) | class ProgressResponse(BaseModel): function get_ollama_status (line 48) | async def get_ollama_status(): function start_ollama_server (line 65) | async def start_ollama_server(): function stop_ollama_server (line 97) | async def stop_ollama_server(): function download_model (line 129) | async def download_model(request: ModelRequest): function download_model_with_progress (line 165) | async def download_model_with_progress(request: ModelRequest): function get_download_progress (line 205) | async def get_download_progress(model_name: str): function get_active_downloads (line 226) | async def get_active_downloads(): function delete_model (line 250) | async def delete_model(model_name: str): function get_recommended_models (line 286) | async def get_recommended_models(): function cancel_download (line 303) | async def cancel_download(model_name: str): FILE: app/backend/routes/storage.py class SaveJsonRequest (line 10) | class SaveJsonRequest(BaseModel): function save_json_file (line 22) | async def save_json_file(request: SaveJsonRequest): FILE: app/backend/services/agent_service.py function create_agent_function (line 5) | def create_agent_function(agent_function: Callable, agent_id: str) -> Ca... FILE: app/backend/services/api_key_service.py class ApiKeyService (line 6) | class ApiKeyService: method __init__ (line 9) | def __init__(self, db: Session): method get_api_keys_dict (line 12) | def get_api_keys_dict(self) -> Dict[str, str]: method get_api_key (line 20) | def get_api_key(self, provider: str) -> Optional[str]: FILE: app/backend/services/backtest_service.py class BacktestService (line 18) | class BacktestService: method __init__ (line 24) | def __init__( method execute_trade (line 60) | def execute_trade(self, ticker: str, action: str, quantity: float, cur... method calculate_portfolio_value (line 207) | def calculate_portfolio_value(self, current_prices: Dict[str, float]) ... method prefetch_data (line 225) | def prefetch_data(self): method _update_performance_metrics (line 238) | def _update_performance_metrics(self, performance_metrics: Dict[str, A... method run_backtest_async (line 285) | async def run_backtest_async(self, progress_callback: Optional[Callabl... method run_backtest_sync (line 514) | def run_backtest_sync(self) -> Dict[str, Any]: method analyze_performance (line 527) | def analyze_performance(self) -> pd.DataFrame: FILE: app/backend/services/graph.py function extract_base_agent_key (line 15) | def extract_base_agent_key(unique_id: str) -> str: function create_graph (line 36) | def create_graph(graph_nodes: list, graph_edges: list) -> StateGraph: function run_graph_async (line 132) | async def run_graph_async(graph, portfolio, tickers, start_date, end_dat... function run_graph (line 141) | def run_graph( function parse_hedge_fund_response (line 180) | def parse_hedge_fund_response(response): FILE: app/backend/services/ollama_service.py class OllamaService (line 19) | class OllamaService: method __init__ (line 22) | def __init__(self): method check_ollama_status (line 34) | async def check_ollama_status(self) -> Dict[str, any]: method start_server (line 57) | async def start_server(self) -> Dict[str, any]: method stop_server (line 69) | async def stop_server(self) -> Dict[str, any]: method download_model (line 81) | async def download_model(self, model_name: str) -> Dict[str, any]: method download_model_with_progress (line 93) | async def download_model_with_progress(self, model_name: str) -> Async... method delete_model (line 98) | async def delete_model(self, model_name: str) -> Dict[str, any]: method get_recommended_models (line 110) | async def get_recommended_models(self) -> List[Dict[str, str]]: method get_available_models (line 124) | async def get_available_models(self) -> List[Dict[str, str]]: method get_download_progress (line 152) | def get_download_progress(self, model_name: str) -> Optional[Dict[str,... method get_all_download_progress (line 156) | def get_all_download_progress(self) -> Dict[str, Dict[str, any]]: method cancel_download (line 160) | def cancel_download(self, model_name: str) -> bool: method _create_error_status (line 179) | def _create_error_status(self, error: str) -> Dict[str, any]: method _check_installation (line 190) | async def _check_installation(self) -> bool: method _is_ollama_installed (line 195) | def _is_ollama_installed(self) -> bool: method _check_server_running (line 207) | async def _check_server_running(self) -> bool: method _get_server_info (line 217) | async def _get_server_info(self, is_running: bool) -> tuple[List[str],... method _execute_server_start (line 232) | async def _execute_server_start(self) -> bool: method _start_ollama_process (line 245) | def _start_ollama_process(self) -> bool: method _wait_for_server_start (line 260) | def _wait_for_server_start(self) -> bool: method _execute_server_stop (line 277) | async def _execute_server_stop(self) -> bool: method _stop_ollama_process (line 289) | def _stop_ollama_process(self) -> bool: method _stop_unix_process (line 305) | def _stop_unix_process(self) -> bool: method _stop_windows_process (line 325) | def _stop_windows_process(self) -> bool: method _terminate_processes (line 339) | def _terminate_processes(self, pids: List[str]) -> None: method _verify_server_stopped (line 365) | def _verify_server_stopped(self) -> bool: method _execute_model_download (line 375) | async def _execute_model_download(self, model_name: str) -> bool: method _execute_model_deletion (line 390) | async def _execute_model_deletion(self, model_name: str) -> bool: method _stream_model_download (line 405) | async def _stream_model_download(self, model_name: str) -> AsyncGenera... method _process_download_progress (line 442) | def _process_download_progress(self, progress, model_name: str) -> Opt... method _get_ollama_models_path (line 485) | def _get_ollama_models_path(self) -> Path: method _load_models_from_file (line 489) | def _load_models_from_file(self, models_path: Path) -> List[Dict[str, ... method _get_fallback_models (line 494) | def _get_fallback_models(self) -> List[Dict[str, str]]: method _format_models_for_api (line 502) | def _format_models_for_api(self, downloaded_models: List[str]) -> List... FILE: app/backend/services/portfolio.py function create_portfolio (line 6) | def create_portfolio(initial_cash: float, margin_requirement: float, tic... FILE: app/frontend/src/App.tsx function App (line 4) | function App() { FILE: app/frontend/src/components/Flow.tsx type FlowProps (line 30) | type FlowProps = { function Flow (line 34) | function Flow({ className = '' }: FlowProps) { FILE: app/frontend/src/components/Layout.tsx function LayoutContent (line 19) | function LayoutContent({ children }: { children: ReactNode }) { type LayoutProps (line 183) | interface LayoutProps { function Layout (line 187) | function Layout({ children }: LayoutProps) { FILE: app/frontend/src/components/custom-controls.tsx type CustomControlsProps (line 4) | type CustomControlsProps = { function CustomControls (line 8) | function CustomControls({ onReset }: CustomControlsProps) { FILE: app/frontend/src/components/layout/top-bar.tsx type TopBarProps (line 5) | interface TopBarProps { function TopBar (line 15) | function TopBar({ FILE: app/frontend/src/components/panels/bottom/bottom-panel.tsx type BottomPanelProps (line 10) | interface BottomPanelProps { function BottomPanel (line 19) | function BottomPanel({ FILE: app/frontend/src/components/panels/bottom/tabs/backtest-output.tsx function BacktestProgress (line 8) | function BacktestProgress({ agentData }: { agentData: Record FILE: app/frontend/src/contexts/flow-context.tsx type FlowContextType (line 10) | interface FlowContextType { function useFlowContext (line 23) | function useFlowContext() { type FlowProviderProps (line 31) | interface FlowProviderProps { function FlowProvider (line 35) | function FlowProvider({ children }: FlowProviderProps) { FILE: app/frontend/src/contexts/layout-context.tsx type LayoutContextType (line 4) | interface LayoutContextType { function useLayoutContext (line 15) | function useLayoutContext() { type LayoutProviderProps (line 23) | interface LayoutProviderProps { function LayoutProvider (line 27) | function LayoutProvider({ children }: LayoutProviderProps) { FILE: app/frontend/src/contexts/node-context.tsx type NodeStatus (line 4) | type NodeStatus = 'IDLE' | 'IN_PROGRESS' | 'COMPLETE' | 'ERROR'; type MessageItem (line 7) | interface MessageItem { type AgentNodeData (line 15) | interface AgentNodeData { type OutputNodeData (line 27) | interface OutputNodeData { constant DEFAULT_AGENT_NODE_STATE (line 49) | const DEFAULT_AGENT_NODE_STATE: AgentNodeData = { function createCompositeKey (line 59) | function createCompositeKey(flowId: string | null, nodeId: string): stri... type NodeContextType (line 63) | interface NodeContextType { function NodeProvider (line 90) | function NodeProvider({ children }: { children: ReactNode }) { function useNodeContext (line 430) | function useNodeContext() { FILE: app/frontend/src/contexts/tabs-context.tsx type TabType (line 5) | type TabType = 'flow' | 'settings'; type Tab (line 7) | interface Tab { type SerializableTab (line 19) | interface SerializableTab { type TabsContextType (line 27) | interface TabsContextType { function useTabsContext (line 43) | function useTabsContext() { type TabsProviderProps (line 51) | interface TabsProviderProps { constant TABS_STORAGE_KEY (line 56) | const TABS_STORAGE_KEY = 'ai-hedge-fund-tabs'; constant ACTIVE_TAB_STORAGE_KEY (line 57) | const ACTIVE_TAB_STORAGE_KEY = 'ai-hedge-fund-active-tab'; function TabsProvider (line 59) | function TabsProvider({ children }: TabsProviderProps) { FILE: app/frontend/src/data/agents.ts type Agent (line 3) | interface Agent { FILE: app/frontend/src/data/models.ts type LanguageModel (line 3) | interface LanguageModel { FILE: app/frontend/src/data/multi-node-mappings.ts type MultiNodeDefinition (line 1) | interface MultiNodeDefinition { function getMultiNodeDefinition (line 75) | function getMultiNodeDefinition(name: string): MultiNodeDefinition | null { function isMultiNodeComponent (line 79) | function isMultiNodeComponent(componentName: string): boolean { FILE: app/frontend/src/data/node-mappings.ts type NodeTypeDefinition (line 5) | interface NodeTypeDefinition { function getNodeTypeDefinition (line 118) | async function getNodeTypeDefinition(componentName: string): Promise): void { method removeConnection (line 47) | removeConnection(flowId: string): void { method addListener (line 57) | addListener(listener: () => void): void { method removeListener (line 62) | removeListener(listener: () => void): void { method notifyListeners (line 67) | private notifyListeners(): void { function useFlowConnection (line 80) | function useFlowConnection(flowId: string | null) { function useFlowConnectionState (line 253) | function useFlowConnectionState(flowId: string | null) { FILE: app/frontend/src/hooks/use-flow-history.ts type FlowSnapshot (line 4) | interface FlowSnapshot { type UseFlowHistoryOptions (line 10) | interface UseFlowHistoryOptions { function useFlowHistory (line 15) | function useFlowHistory({ maxHistorySize = 50, flowId }: UseFlowHistoryO... FILE: app/frontend/src/hooks/use-flow-management-tabs.ts type UseFlowManagementTabsReturn (line 15) | interface UseFlowManagementTabsReturn { function useFlowManagementTabs (line 45) | function useFlowManagementTabs(): UseFlowManagementTabsReturn { FILE: app/frontend/src/hooks/use-flow-management.ts type UseFlowManagementReturn (line 14) | interface UseFlowManagementReturn { function useFlowManagement (line 44) | function useFlowManagement(): UseFlowManagementReturn { FILE: app/frontend/src/hooks/use-keyboard-shortcuts.ts type KeyboardShortcut (line 3) | interface KeyboardShortcut { type UseKeyboardShortcutsProps (line 13) | interface UseKeyboardShortcutsProps { function useKeyboardShortcuts (line 17) | function useKeyboardShortcuts({ shortcuts }: UseKeyboardShortcutsProps) { function useFlowKeyboardShortcuts (line 53) | function useFlowKeyboardShortcuts(saveFlow: (showToast?: boolean) => voi... function useLayoutKeyboardShortcuts (line 68) | function useLayoutKeyboardShortcuts( FILE: app/frontend/src/hooks/use-mobile.tsx constant MOBILE_BREAKPOINT (line 3) | const MOBILE_BREAKPOINT = 768 function useIsMobile (line 5) | function useIsMobile() { FILE: app/frontend/src/hooks/use-node-state.ts class FlowStateManager (line 7) | class FlowStateManager { method setCurrentFlowId (line 14) | setCurrentFlowId(flowId: string | null): void { method getCurrentFlowId (line 23) | getCurrentFlowId(): string | null { method createCompositeKey (line 28) | private createCompositeKey(nodeId: string): string { method getNodeState (line 33) | getNodeState(nodeId: string, stateKey: string): any { method setNodeState (line 39) | setNodeState(nodeId: string, stateKey: string, value: any): void { method getNodeInternalState (line 51) | getNodeInternalState(nodeId: string): Record | undefined { method setNodeInternalState (line 56) | setNodeInternalState(nodeId: string, state: Record): void { method clearNodeInternalState (line 62) | clearNodeInternalState(nodeId: string): void { method getAllNodeStates (line 69) | getAllNodeStates(): Map> { method clearAllNodeStates (line 89) | clearAllNodeStates(): void { method clearFlowNodeStates (line 105) | clearFlowNodeStates(flowId: string): void { method addStateChangeListener (line 115) | addStateChangeListener(listener: () => void): () => void { method addFlowIdChangeListener (line 120) | addFlowIdChangeListener(listener: () => void): () => void { method notifyStateChange (line 125) | private notifyStateChange(): void { method notifyFlowIdChange (line 129) | private notifyFlowIdChange(): void { type UseNodeStateReturn (line 141) | interface UseNodeStateReturn { function setCurrentFlowId (line 147) | function setCurrentFlowId(flowId: string | null): void { function getNodeInternalState (line 152) | function getNodeInternalState(nodeId: string): Record | und... function setNodeInternalState (line 156) | function setNodeInternalState(nodeId: string, state: Record... function clearNodeInternalState (line 160) | function clearNodeInternalState(nodeId: string): void { function getAllNodeStates (line 165) | function getAllNodeStates(): Map> { function clearAllNodeStates (line 169) | function clearAllNodeStates(): void { function clearFlowNodeStates (line 173) | function clearFlowNodeStates(flowId: string): void { function addStateChangeListener (line 177) | function addStateChangeListener(listener: () => void): () => void { function useNodeState (line 194) | function useNodeState( FILE: app/frontend/src/hooks/use-output-node-connection.ts function useOutputNodeConnection (line 12) | function useOutputNodeConnection(nodeId: string) { FILE: app/frontend/src/hooks/use-resizable.ts type UseResizableOptions (line 3) | interface UseResizableOptions { function useResizable (line 13) | function useResizable({ FILE: app/frontend/src/hooks/use-toast-manager.ts type ToastType (line 4) | type ToastType = 'success' | 'error' | 'info' | 'warning'; type ToastPosition (line 5) | type ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-l... type ToastOptions (line 7) | interface ToastOptions { type ToastState (line 13) | interface ToastState { function useToastManager (line 42) | function useToastManager() { FILE: app/frontend/src/lib/utils.ts function cn (line 4) | function cn(...inputs: ClassValue[]) { function isMac (line 9) | function isMac(): boolean { function formatKeyboardShortcut (line 14) | function formatKeyboardShortcut(key: string): string { function getProviderColor (line 20) | function getProviderColor(provider: string): string { FILE: app/frontend/src/nodes/components/agent-node.tsx function AgentNode (line 18) | function AgentNode({ FILE: app/frontend/src/nodes/components/agent-output-dialog.tsx type AgentOutputDialogProps (line 16) | interface AgentOutputDialogProps { function AgentOutputDialog (line 24) | function AgentOutputDialog({ FILE: app/frontend/src/nodes/components/investment-report-dialog.tsx type InvestmentReportDialogProps (line 35) | interface InvestmentReportDialogProps { type ActionType (line 42) | type ActionType = 'long' | 'short' | 'hold'; function InvestmentReportDialog (line 44) | function InvestmentReportDialog({ FILE: app/frontend/src/nodes/components/investment-report-node.tsx function InvestmentReportNode (line 14) | function InvestmentReportNode({ FILE: app/frontend/src/nodes/components/json-output-dialog.tsx type JsonOutputDialogProps (line 14) | interface JsonOutputDialogProps { function JsonOutputDialog (line 21) | function JsonOutputDialog({ FILE: app/frontend/src/nodes/components/json-output-node.tsx function JsonOutputNode (line 16) | function JsonOutputNode({ FILE: app/frontend/src/nodes/components/node-shell.tsx type NodeShellProps (line 6) | interface NodeShellProps { function NodeShell (line 21) | function NodeShell({ FILE: app/frontend/src/nodes/components/output-node-status.tsx type OutputNodeStatusProps (line 4) | interface OutputNodeStatusProps { function OutputNodeStatus (line 16) | function OutputNodeStatus({ FILE: app/frontend/src/nodes/components/portfolio-manager-node.tsx function PortfolioManagerNode (line 19) | function PortfolioManagerNode({ FILE: app/frontend/src/nodes/components/portfolio-start-node.tsx type PortfolioPosition (line 31) | interface PortfolioPosition { function PortfolioStartNode (line 42) | function PortfolioStartNode({ FILE: app/frontend/src/nodes/components/stock-analyzer-node.tsx function StockAnalyzerNode (line 37) | function StockAnalyzerNode({ FILE: app/frontend/src/nodes/types.ts type NodeMessage (line 4) | type NodeMessage = MessageItem; type AgentNode (line 6) | type AgentNode = Node<{ name: string, description: string, status: strin... type InvestmentReportNode (line 7) | type InvestmentReportNode = Node<{ name: string, description: string, st... type JsonOutputNode (line 8) | type JsonOutputNode = Node<{ name: string, description: string, status: ... type PortfolioStartNode (line 9) | type PortfolioStartNode = Node<{ name: string, description: string, stat... type PortfolioManagerNode (line 10) | type PortfolioManagerNode = Node<{ name: string, description: string, st... type StockAnalyzerNode (line 11) | type StockAnalyzerNode = Node<{ name: string, description: string, statu... type AppNode (line 12) | type AppNode = BuiltInNode | AgentNode | InvestmentReportNode | JsonOutp... FILE: app/frontend/src/nodes/utils.ts type NodeStatus (line 3) | type NodeStatus = 'IDLE' | 'IN_PROGRESS' | 'COMPLETE' | 'ERROR'; function getStatusColor (line 8) | function getStatusColor(status: NodeStatus): string { function getNodesInCompletePaths (line 28) | function getNodesInCompletePaths({ FILE: app/frontend/src/providers/theme-provider.tsx type ThemeProviderProps (line 4) | interface ThemeProviderProps { function ThemeProvider (line 8) | function ThemeProvider({ children }: ThemeProviderProps) { FILE: app/frontend/src/services/api-keys-api.ts constant API_BASE_URL (line 1) | const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:8... type ApiKey (line 3) | interface ApiKey { type ApiKeySummary (line 14) | interface ApiKeySummary { type ApiKeyCreateRequest (line 25) | interface ApiKeyCreateRequest { type ApiKeyUpdateRequest (line 32) | interface ApiKeyUpdateRequest { type ApiKeyBulkUpdateRequest (line 38) | interface ApiKeyBulkUpdateRequest { class ApiKeysService (line 42) | class ApiKeysService { method getAllApiKeys (line 45) | async getAllApiKeys(includeInactive = false): Promise { method getApiKey (line 58) | async getApiKey(provider: string): Promise { method createOrUpdateApiKey (line 69) | async createOrUpdateApiKey(request: ApiKeyCreateRequest): Promise { method deactivateApiKey (line 115) | async deactivateApiKey(provider: string): Promise { method bulkUpdateApiKeys (line 129) | async bulkUpdateApiKeys(request: ApiKeyBulkUpdateRequest): Promise { FILE: app/frontend/src/services/api.ts constant API_BASE_URL (line 10) | const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:8... FILE: app/frontend/src/services/backtest-api.ts constant API_BASE_URL (line 10) | const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:8... FILE: app/frontend/src/services/flow-service.ts constant API_BASE_URL (line 3) | const API_BASE_URL = 'http://localhost:8000'; type CreateFlowRequest (line 5) | interface CreateFlowRequest { type UpdateFlowRequest (line 16) | interface UpdateFlowRequest { method getFlows (line 29) | async getFlows(): Promise { method getFlow (line 38) | async getFlow(id: number): Promise { method createFlow (line 47) | async createFlow(data: CreateFlowRequest): Promise { method updateFlow (line 62) | async updateFlow(id: number, data: UpdateFlowRequest): Promise { method deleteFlow (line 77) | async deleteFlow(id: number): Promise { method duplicateFlow (line 87) | async duplicateFlow(id: number, newName?: string): Promise { method createDefaultFlow (line 99) | async createDefaultFlow(nodes: any, edges: any, viewport?: any): Promise... FILE: app/frontend/src/services/sidebar-storage.ts type SidebarStates (line 1) | interface SidebarStates { class SidebarStorageService (line 7) | class SidebarStorageService { method saveLeftSidebarState (line 15) | static saveLeftSidebarState(isCollapsed: boolean): boolean { method saveRightSidebarState (line 28) | static saveRightSidebarState(isCollapsed: boolean): boolean { method saveBottomPanelState (line 41) | static saveBottomPanelState(isCollapsed: boolean): boolean { method saveSidebarStates (line 54) | static saveSidebarStates(states: SidebarStates): boolean { method loadLeftSidebarState (line 69) | static loadLeftSidebarState(defaultValue: boolean = false): boolean { method loadRightSidebarState (line 87) | static loadRightSidebarState(defaultValue: boolean = false): boolean { method loadBottomPanelState (line 105) | static loadBottomPanelState(defaultValue: boolean = true): boolean { method loadSidebarStates (line 123) | static loadSidebarStates(defaultStates: SidebarStates = { leftCollapse... method clearLeftSidebarState (line 134) | static clearLeftSidebarState(): boolean { method clearRightSidebarState (line 147) | static clearRightSidebarState(): boolean { method clearBottomPanelState (line 160) | static clearBottomPanelState(): boolean { method clearSidebarStates (line 173) | static clearSidebarStates(): boolean { method resetToDefaults (line 188) | static resetToDefaults(): boolean { method hasLeftSidebarState (line 207) | static hasLeftSidebarState(): boolean { method hasRightSidebarState (line 219) | static hasRightSidebarState(): boolean { method hasSidebarStates (line 231) | static hasSidebarStates(): { left: boolean; right: boolean } { FILE: app/frontend/src/services/tab-service.ts type TabData (line 6) | interface TabData { class TabService (line 13) | class TabService { method createTabContent (line 14) | static createTabContent(tabData: TabData): ReactNode { method createFlowTab (line 30) | static createFlowTab(flow: Flow): TabData & { content: ReactNode } { method createSettingsTab (line 39) | static createSettingsTab(): TabData & { content: ReactNode } { method restoreTabContent (line 48) | static restoreTabContent(tabData: TabData): ReactNode { method restoreTab (line 53) | static restoreTab(savedTab: TabData): TabData & { content: ReactNode } { FILE: app/frontend/src/services/types.ts type ModelProvider (line 2) | enum ModelProvider { type AgentModelConfig (line 9) | interface AgentModelConfig { type GraphNode (line 15) | interface GraphNode { type GraphEdge (line 22) | interface GraphEdge { type PortfolioPosition (line 30) | interface PortfolioPosition { type BaseHedgeFundRequest (line 37) | interface BaseHedgeFundRequest { type HedgeFundRequest (line 48) | interface HedgeFundRequest extends BaseHedgeFundRequest { type BacktestRequest (line 54) | interface BacktestRequest extends BaseHedgeFundRequest { type BacktestDayResult (line 60) | interface BacktestDayResult { type BacktestPerformanceMetrics (line 75) | interface BacktestPerformanceMetrics { FILE: app/frontend/src/types/flow.ts type Flow (line 1) | interface Flow { FILE: app/frontend/src/utils/date-utils.ts function formatTimeFromTimestamp (line 6) | function formatTimeFromTimestamp(timestamp: string): string { FILE: app/frontend/src/utils/text-utils.ts function formatTextIntoParagraphs (line 8) | function formatTextIntoParagraphs(text: string): string[] { function isJsonString (line 53) | function isJsonString(text: string): boolean { function formatContent (line 107) | function formatContent(content: string): { function createHighlightedJson (line 183) | function createHighlightedJson(jsonString: string): string { function createAgentDisplayNames (line 241) | function createAgentDisplayNames(agentIds: string[]): Map { FILE: src/agents/aswath_damodaran.py class AswathDamodaranSignal (line 21) | class AswathDamodaranSignal(BaseModel): function aswath_damodaran_agent (line 27) | def aswath_damodaran_agent(state: AgentState, agent_id: str = "aswath_da... function analyze_growth_and_reinvestment (line 143) | def analyze_growth_and_reinvestment(metrics: list, line_items: list) -> ... function analyze_risk_profile (line 193) | def analyze_risk_profile(metrics: list, line_items: list) -> dict[str, a... function analyze_relative_valuation (line 254) | def analyze_relative_valuation(metrics: list) -> dict[str, any]: function calculate_intrinsic_value_dcf (line 285) | def calculate_intrinsic_value_dcf(metrics: list, line_items: list, risk_... function estimate_cost_of_equity (line 350) | def estimate_cost_of_equity(beta: float | None) -> float: function generate_damodaran_output (line 361) | def generate_damodaran_output( FILE: src/agents/ben_graham.py class BenGrahamSignal (line 14) | class BenGrahamSignal(BaseModel): function ben_graham_agent (line 20) | def ben_graham_agent(state: AgentState, agent_id: str = "ben_graham_agen... function analyze_earnings_stability (line 97) | def analyze_earnings_stability(metrics: list, financial_line_items: list... function analyze_financial_strength (line 141) | def analyze_financial_strength(financial_line_items: list) -> dict: function analyze_valuation_graham (line 207) | def analyze_valuation_graham(financial_line_items: list, market_cap: flo... function generate_graham_output (line 282) | def generate_graham_output( FILE: src/agents/bill_ackman.py class BillAckmanSignal (line 13) | class BillAckmanSignal(BaseModel): function bill_ackman_agent (line 19) | def bill_ackman_agent(state: AgentState, agent_id: str = "bill_ackman_ag... function analyze_business_quality (line 137) | def analyze_business_quality(metrics: list, financial_line_items: list) ... function analyze_financial_discipline (line 215) | def analyze_financial_discipline(metrics: list, financial_line_items: li... function analyze_activism_potential (line 290) | def analyze_activism_potential(financial_line_items: list) -> dict: function analyze_valuation (line 335) | def analyze_valuation(financial_line_items: list, market_cap: float) -> ... function generate_ackman_output (line 399) | def generate_ackman_output( FILE: src/agents/cathie_wood.py class CathieWoodSignal (line 13) | class CathieWoodSignal(BaseModel): function cathie_wood_agent (line 19) | def cathie_wood_agent(state: AgentState, agent_id: str = "cathie_wood_ag... function analyze_disruptive_potential (line 111) | def analyze_disruptive_potential(metrics: list, financial_line_items: li... function analyze_innovation_growth (line 210) | def analyze_innovation_growth(metrics: list, financial_line_items: list)... function analyze_cathie_wood_valuation (line 318) | def analyze_cathie_wood_valuation(financial_line_items: list, market_cap... function generate_cathie_wood_output (line 363) | def generate_cathie_wood_output( FILE: src/agents/charlie_munger.py class CharlieMungerSignal (line 12) | class CharlieMungerSignal(BaseModel): function charlie_munger_agent (line 18) | def charlie_munger_agent(state: AgentState, agent_id: str = "charlie_mun... function analyze_moat_strength (line 161) | def analyze_moat_strength(metrics: list, financial_line_items: list) -> ... function analyze_management_quality (line 268) | def analyze_management_quality(financial_line_items: list, insider_trade... function analyze_predictability (line 469) | def analyze_predictability(financial_line_items: list) -> dict: function calculate_munger_valuation (line 594) | def calculate_munger_valuation(financial_line_items: list, market_cap: f... function analyze_news_sentiment (line 710) | def analyze_news_sentiment(news_items: list) -> str: function _r (line 721) | def _r(x, n=3): function make_munger_facts_bundle (line 727) | def make_munger_facts_bundle(analysis: dict[str, any]) -> dict[str, any]: function compute_confidence (line 778) | def compute_confidence(analysis: dict, signal: str) -> int: function generate_munger_output (line 816) | def generate_munger_output( FILE: src/agents/fundamentals.py function fundamentals_analyst_agent (line 11) | def fundamentals_analyst_agent(state: AgentState, agent_id: str = "funda... FILE: src/agents/growth_agent.py function growth_analyst_agent (line 19) | def growth_analyst_agent(state: AgentState, agent_id: str = "growth_anal... function _calculate_trend (line 138) | def _calculate_trend(data: list[float | None]) -> float: function analyze_growth_trends (line 160) | def analyze_growth_trends(metrics: list) -> dict: function analyze_valuation (line 209) | def analyze_valuation(metrics) -> dict: function analyze_margin_trends (line 239) | def analyze_margin_trends(metrics: list) -> dict: function analyze_insider_conviction (line 282) | def analyze_insider_conviction(trades: list) -> dict: function check_financial_health (line 310) | def check_financial_health(metrics) -> dict: FILE: src/agents/michael_burry.py class MichaelBurrySignal (line 24) | class MichaelBurrySignal(BaseModel): function michael_burry_agent (line 32) | def michael_burry_agent(state: AgentState, agent_id: str = "michael_burr... function _latest_line_item (line 166) | def _latest_line_item(line_items: list): function _analyze_value (line 173) | def _analyze_value(metrics, line_items, market_cap): function _analyze_balance_sheet (line 221) | def _analyze_balance_sheet(metrics, line_items): function _analyze_insider_activity (line 262) | def _analyze_insider_activity(insider_trades): function _analyze_contrarian_sentiment (line 287) | def _analyze_contrarian_sentiment(news): function _generate_burry_output (line 316) | def _generate_burry_output( FILE: src/agents/mohnish_pabrai.py class MohnishPabraiSignal (line 13) | class MohnishPabraiSignal(BaseModel): function mohnish_pabrai_agent (line 19) | def mohnish_pabrai_agent(state: AgentState, agent_id: str = "mohnish_pab... function analyze_downside_protection (line 130) | def analyze_downside_protection(financial_line_items: list) -> dict[str,... function analyze_pabrai_valuation (line 196) | def analyze_pabrai_valuation(financial_line_items: list, market_cap: flo... function analyze_double_potential (line 253) | def analyze_double_potential(financial_line_items: list, market_cap: flo... function generate_pabrai_output (line 306) | def generate_pabrai_output( FILE: src/agents/news_sentiment.py class Sentiment (line 18) | class Sentiment(BaseModel): function news_sentiment_agent (line 25) | def news_sentiment_agent(state: AgentState, agent_id: str = "news_sentim... function _calculate_confidence_score (line 166) | def _calculate_confidence_score( FILE: src/agents/peter_lynch.py class PeterLynchSignal (line 18) | class PeterLynchSignal(BaseModel): function peter_lynch_agent (line 27) | def peter_lynch_agent(state: AgentState, agent_id: str = "peter_lynch_ag... function analyze_lynch_growth (line 161) | def analyze_lynch_growth(financial_line_items: list) -> dict: function analyze_lynch_fundamentals (line 226) | def analyze_lynch_fundamentals(financial_line_items: list) -> dict: function analyze_lynch_valuation (line 289) | def analyze_lynch_valuation(financial_line_items: list, market_cap: floa... function analyze_sentiment (line 365) | def analyze_sentiment(news_items: list) -> dict: function analyze_insider_activity (line 396) | def analyze_insider_activity(insider_trades: list) -> dict: function generate_lynch_output (line 441) | def generate_lynch_output( FILE: src/agents/phil_fisher.py class PhilFisherSignal (line 18) | class PhilFisherSignal(BaseModel): function phil_fisher_agent (line 24) | def phil_fisher_agent(state: AgentState, agent_id: str = "phil_fisher_ag... function analyze_fisher_growth_quality (line 167) | def analyze_fisher_growth_quality(financial_line_items: list) -> dict: function analyze_margins_stability (line 262) | def analyze_margins_stability(financial_line_items: list) -> dict: function analyze_management_efficiency_leverage (line 328) | def analyze_management_efficiency_leverage(financial_line_items: list) -... function analyze_fisher_valuation (line 404) | def analyze_fisher_valuation(financial_line_items: list, market_cap: flo... function analyze_insider_activity (line 461) | def analyze_insider_activity(insider_trades: list) -> dict: function analyze_sentiment (line 503) | def analyze_sentiment(news_items: list) -> dict: function generate_fisher_output (line 531) | def generate_fisher_output( FILE: src/agents/portfolio_manager.py class PortfolioDecision (line 13) | class PortfolioDecision(BaseModel): class PortfolioManagerOutput (line 20) | class PortfolioManagerOutput(BaseModel): function portfolio_management_agent (line 25) | def portfolio_management_agent(state: AgentState, agent_id: str = "portf... function compute_allowed_actions (line 96) | def compute_allowed_actions( function _compact_signals (line 160) | def _compact_signals(signals_by_ticker: dict[str, dict]) -> dict[str, di... function generate_trading_decision (line 177) | def generate_trading_decision( FILE: src/agents/rakesh_jhunjhunwala.py class RakeshJhunjhunwalaSignal (line 12) | class RakeshJhunjhunwalaSignal(BaseModel): function rakesh_jhunjhunwala_agent (line 17) | def rakesh_jhunjhunwala_agent(state: AgentState, agent_id: str = "rakesh... function analyze_profitability (line 162) | def analyze_profitability(financial_line_items: list) -> dict[str, any]: function analyze_growth (line 246) | def analyze_growth(financial_line_items: list) -> dict[str, any]: function analyze_balance_sheet (line 327) | def analyze_balance_sheet(financial_line_items: list) -> dict[str, any]: function analyze_cash_flow (line 374) | def analyze_cash_flow(financial_line_items: list) -> dict[str, any]: function analyze_management_actions (line 409) | def analyze_management_actions(financial_line_items: list) -> dict[str, ... function assess_quality_metrics (line 437) | def assess_quality_metrics(financial_line_items: list) -> float: function calculate_intrinsic_value (line 498) | def calculate_intrinsic_value(financial_line_items: list, market_cap: fl... function analyze_rakesh_jhunjhunwala_style (line 584) | def analyze_rakesh_jhunjhunwala_style( function generate_jhunjhunwala_output (line 644) | def generate_jhunjhunwala_output( FILE: src/agents/risk_manager.py function risk_management_agent (line 11) | def risk_management_agent(state: AgentState, agent_id: str = "risk_manag... function calculate_volatility_metrics (line 222) | def calculate_volatility_metrics(prices_df: pd.DataFrame, lookback_days:... function calculate_volatility_adjusted_limit (line 270) | def calculate_volatility_adjusted_limit(annualized_volatility: float) ->... function calculate_correlation_multiplier (line 301) | def calculate_correlation_multiplier(avg_correlation: float) -> float: FILE: src/agents/sentiment.py function sentiment_analyst_agent (line 12) | def sentiment_analyst_agent(state: AgentState, agent_id: str = "sentimen... FILE: src/agents/stanley_druckenmiller.py class StanleyDruckenmillerSignal (line 20) | class StanleyDruckenmillerSignal(BaseModel): function stanley_druckenmiller_agent (line 26) | def stanley_druckenmiller_agent(state: AgentState, agent_id: str = "stan... function analyze_growth_and_momentum (line 166) | def analyze_growth_and_momentum(financial_line_items: list, prices: list... function analyze_insider_activity (line 273) | def analyze_insider_activity(insider_trades: list) -> dict: function analyze_sentiment (line 320) | def analyze_sentiment(news_items: list) -> dict: function analyze_risk_reward (line 351) | def analyze_risk_reward(financial_line_items: list, prices: list) -> dict: function analyze_druckenmiller_valuation (line 425) | def analyze_druckenmiller_valuation(financial_line_items: list, market_c... function generate_druckenmiller_output (line 529) | def generate_druckenmiller_output( FILE: src/agents/technicals.py function safe_float (line 15) | def safe_float(value, default=0.0): function technical_analyst_agent (line 35) | def technical_analyst_agent(state: AgentState, agent_id: str = "technica... function calculate_trend_signals (line 160) | def calculate_trend_signals(prices_df): function calculate_mean_reversion_signals (line 199) | def calculate_mean_reversion_signals(prices_df): function calculate_momentum_signals (line 241) | def calculate_momentum_signals(prices_df): function calculate_volatility_signals (line 286) | def calculate_volatility_signals(prices_df): function calculate_stat_arb_signals (line 333) | def calculate_stat_arb_signals(prices_df): function weighted_signal_combination (line 372) | def weighted_signal_combination(signals, weights): function normalize_pandas (line 407) | def normalize_pandas(obj): function calculate_rsi (line 420) | def calculate_rsi(prices_df: pd.DataFrame, period: int = 14) -> pd.Series: function calculate_bollinger_bands (line 431) | def calculate_bollinger_bands(prices_df: pd.DataFrame, window: int = 20)... function calculate_ema (line 439) | def calculate_ema(df: pd.DataFrame, window: int) -> pd.Series: function calculate_adx (line 453) | def calculate_adx(df: pd.DataFrame, period: int = 14) -> pd.DataFrame: function calculate_atr (line 486) | def calculate_atr(df: pd.DataFrame, period: int = 14) -> pd.Series: function calculate_hurst_exponent (line 507) | def calculate_hurst_exponent(price_series: pd.Series, max_lag: int = 20)... FILE: src/agents/valuation.py function valuation_analyst_agent (line 21) | def valuation_analyst_agent(state: AgentState, agent_id: str = "valuatio... function calculate_owner_earnings_value (line 226) | def calculate_owner_earnings_value( function calculate_intrinsic_value (line 259) | def calculate_intrinsic_value( function calculate_ev_ebitda_value (line 283) | def calculate_ev_ebitda_value(financial_metrics: list): function calculate_residual_income_value (line 302) | def calculate_residual_income_value( function calculate_wacc (line 338) | def calculate_wacc( function calculate_fcf_volatility (line 376) | def calculate_fcf_volatility(fcf_history: list[float]) -> float: function calculate_enhanced_dcf_value (line 394) | def calculate_enhanced_dcf_value( function calculate_dcf_scenarios (line 451) | def calculate_dcf_scenarios( FILE: src/agents/warren_buffett.py class WarrenBuffettSignal (line 13) | class WarrenBuffettSignal(BaseModel): function warren_buffett_agent (line 19) | def warren_buffett_agent(state: AgentState, agent_id: str = "warren_buff... function analyze_fundamentals (line 156) | def analyze_fundamentals(metrics: list) -> dict[str, any]: function analyze_consistency (line 205) | def analyze_consistency(financial_line_items: list) -> dict[str, any]: function analyze_moat (line 238) | def analyze_moat(metrics: list) -> dict[str, any]: function analyze_management_quality (line 337) | def analyze_management_quality(financial_line_items: list) -> dict[str, ... function calculate_owner_earnings (line 380) | def calculate_owner_earnings(financial_line_items: list) -> dict[str, any]: function estimate_maintenance_capex (line 456) | def estimate_maintenance_capex(financial_line_items: list) -> float: function calculate_intrinsic_value (line 508) | def calculate_intrinsic_value(financial_line_items: list) -> dict[str, a... function analyze_book_value_growth (line 627) | def analyze_book_value_growth(financial_line_items: list) -> dict[str, a... function _calculate_book_value_cagr (line 671) | def _calculate_book_value_cagr(book_values: list) -> tuple[int, str]: function analyze_pricing_power (line 696) | def analyze_pricing_power(financial_line_items: list, metrics: list) -> ... function generate_buffett_output (line 746) | def generate_buffett_output( FILE: src/backtester.py function run_backtest (line 13) | def run_backtest(backtester: BacktestEngine) -> PerformanceMetrics | None: FILE: src/backtesting/benchmarks.py class BenchmarkCalculator (line 8) | class BenchmarkCalculator: method get_return_pct (line 9) | def get_return_pct(self, ticker: str, start_date: str, end_date: str) ... FILE: src/backtesting/cli.py function main (line 18) | def main() -> int: FILE: src/backtesting/controller.py class AgentController (line 9) | class AgentController: method run_agent (line 12) | def run_agent( FILE: src/backtesting/engine.py class BacktestEngine (line 27) | class BacktestEngine: method __init__ (line 35) | def __init__( method _prefetch_data (line 81) | def _prefetch_data(self) -> None: method run_backtest (line 96) | def run_backtest(self) -> PerformanceMetrics: method get_portfolio_values (line 191) | def get_portfolio_values(self) -> Sequence[PortfolioValuePoint]: FILE: src/backtesting/metrics.py class PerformanceMetricsCalculator (line 8) | class PerformanceMetricsCalculator: method __init__ (line 11) | def __init__(self, *, annual_trading_days: int = 252, annual_rf_rate: ... method update_metrics (line 15) | def update_metrics(self, metrics: PerformanceMetrics, values: Sequence... method compute_metrics (line 22) | def compute_metrics(self, values: Sequence[PortfolioValuePoint]) -> Pe... FILE: src/backtesting/output.py class OutputBuilder (line 11) | class OutputBuilder: method __init__ (line 17) | def __init__(self, *, initial_capital: float | None = None) -> None: method build_day_rows (line 20) | def build_day_rows( method print_rows (line 95) | def print_rows(self, rows: List[list]) -> None: FILE: src/backtesting/portfolio.py class Portfolio (line 9) | class Portfolio: method __init__ (line 17) | def __init__( method get_snapshot (line 44) | def get_snapshot(self) -> PortfolioSnapshot: method get_cash (line 67) | def get_cash(self) -> float: method get_margin_used (line 70) | def get_margin_used(self) -> float: method get_margin_requirement (line 73) | def get_margin_requirement(self) -> float: method get_positions (line 76) | def get_positions(self) -> Mapping[str, PositionState]: method get_realized_gains (line 79) | def get_realized_gains(self) -> Mapping[str, TickerRealizedGains]: method apply_long_buy (line 82) | def apply_long_buy(self, ticker: str, quantity: int, price: float) -> ... method apply_long_sell (line 114) | def apply_long_sell(self, ticker: str, quantity: int, price: float) ->... method apply_short_open (line 128) | def apply_short_open(self, ticker: str, quantity: int, price: float) -... method apply_short_cover (line 172) | def apply_short_cover(self, ticker: str, quantity: int, price: float) ... FILE: src/backtesting/trader.py class TradeExecutor (line 7) | class TradeExecutor: method execute_trade (line 10) | def execute_trade( FILE: src/backtesting/types.py class Action (line 10) | class Action(str, Enum): class PositionState (line 21) | class PositionState(TypedDict): class TickerRealizedGains (line 31) | class TickerRealizedGains(TypedDict): class PortfolioSnapshot (line 38) | class PortfolioSnapshot(TypedDict): class AgentDecision (line 56) | class AgentDecision(TypedDict): class AgentOutput (line 69) | class AgentOutput(TypedDict): class PerformanceMetrics (line 90) | class PerformanceMetrics(TypedDict, total=False): FILE: src/backtesting/valuation.py function calculate_portfolio_value (line 8) | def calculate_portfolio_value(portfolio: Portfolio, current_prices: Mapp... function compute_exposures (line 24) | def compute_exposures(portfolio: Portfolio, current_prices: Mapping[str,... function compute_portfolio_summary (line 54) | def compute_portfolio_summary( FILE: src/cli/input.py function add_common_args (line 16) | def add_common_args( function add_date_args (line 47) | def add_date_args(parser: argparse.ArgumentParser, *, default_months_bac... function parse_tickers (line 67) | def parse_tickers(tickers_arg: str | None) -> list[str]: function select_analysts (line 73) | def select_analysts(flags: dict | None = None) -> list[str]: function select_model (line 105) | def select_model(use_ollama: bool, model_flag: str | None = None) -> tup... function resolve_dates (line 190) | def resolve_dates(start_date: str | None, end_date: str | None, *, defau... class CLIInputs (line 213) | class CLIInputs: function parse_cli_inputs (line 227) | def parse_cli_inputs( FILE: src/data/cache.py class Cache (line 1) | class Cache: method __init__ (line 4) | def __init__(self): method _merge_data (line 11) | def _merge_data(self, existing: list[dict] | None, new_data: list[dict... method get_prices (line 24) | def get_prices(self, ticker: str) -> list[dict[str, any]] | None: method set_prices (line 28) | def set_prices(self, ticker: str, data: list[dict[str, any]]): method get_financial_metrics (line 32) | def get_financial_metrics(self, ticker: str) -> list[dict[str, any]]: method set_financial_metrics (line 36) | def set_financial_metrics(self, ticker: str, data: list[dict[str, any]]): method get_line_items (line 40) | def get_line_items(self, ticker: str) -> list[dict[str, any]] | None: method set_line_items (line 44) | def set_line_items(self, ticker: str, data: list[dict[str, any]]): method get_insider_trades (line 48) | def get_insider_trades(self, ticker: str) -> list[dict[str, any]] | None: method set_insider_trades (line 52) | def set_insider_trades(self, ticker: str, data: list[dict[str, any]]): method get_company_news (line 56) | def get_company_news(self, ticker: str) -> list[dict[str, any]] | None: method set_company_news (line 60) | def set_company_news(self, ticker: str, data: list[dict[str, any]]): function get_cache (line 69) | def get_cache() -> Cache: FILE: src/data/models.py class Price (line 4) | class Price(BaseModel): class PriceResponse (line 13) | class PriceResponse(BaseModel): class FinancialMetrics (line 18) | class FinancialMetrics(BaseModel): class FinancialMetricsResponse (line 64) | class FinancialMetricsResponse(BaseModel): class LineItem (line 68) | class LineItem(BaseModel): class LineItemResponse (line 78) | class LineItemResponse(BaseModel): class InsiderTrade (line 82) | class InsiderTrade(BaseModel): class InsiderTradeResponse (line 98) | class InsiderTradeResponse(BaseModel): class CompanyNews (line 102) | class CompanyNews(BaseModel): class CompanyNewsResponse (line 112) | class CompanyNewsResponse(BaseModel): class CompanyFacts (line 116) | class CompanyFacts(BaseModel): class CompanyFactsResponse (line 137) | class CompanyFactsResponse(BaseModel): class Position (line 141) | class Position(BaseModel): class Portfolio (line 147) | class Portfolio(BaseModel): class AnalystSignal (line 152) | class AnalystSignal(BaseModel): class TickerAnalysis (line 159) | class TickerAnalysis(BaseModel): class AgentStateData (line 164) | class AgentStateData(BaseModel): class AgentStateMetadata (line 172) | class AgentStateMetadata(BaseModel): FILE: src/graph/state.py function merge_dicts (line 10) | def merge_dicts(a: dict[str, any], b: dict[str, any]) -> dict[str, any]: class AgentState (line 15) | class AgentState(TypedDict): function show_agent_reasoning (line 21) | def show_agent_reasoning(output, agent_name): FILE: src/llm/models.py class ModelProvider (line 17) | class ModelProvider(str, Enum): class LLMModel (line 35) | class LLMModel(BaseModel): method to_choice_tuple (line 42) | def to_choice_tuple(self) -> Tuple[str, str, str]: method is_custom (line 46) | def is_custom(self) -> bool: method has_json_mode (line 50) | def has_json_mode(self) -> bool: method is_deepseek (line 62) | def is_deepseek(self) -> bool: method is_gemini (line 66) | def is_gemini(self) -> bool: method is_ollama (line 70) | def is_ollama(self) -> bool: function load_models_from_json (line 76) | def load_models_from_json(json_path: str) -> List[LLMModel]: function get_model_info (line 113) | def get_model_info(model_name: str, model_provider: str) -> LLMModel | N... function find_model_by_name (line 119) | def find_model_by_name(model_name: str) -> LLMModel | None: function get_models_list (line 125) | def get_models_list(): function get_model (line 137) | def get_model(model_name: str, model_provider: ModelProvider, api_keys: ... FILE: src/main.py function parse_hedge_fund_response (line 30) | def parse_hedge_fund_response(response): function run_hedge_fund (line 46) | def run_hedge_fund( function start (line 95) | def start(state: AgentState): function create_workflow (line 100) | def create_workflow(selected_analysts=None): FILE: src/tools/api.py function _make_api_request (line 29) | def _make_api_request(url: str, headers: dict, method: str = "GET", json... function get_prices (line 63) | def get_prices(ticker: str, start_date: str, end_date: str, api_key: str... function get_financial_metrics (line 99) | def get_financial_metrics( function search_line_items (line 141) | def search_line_items( function get_insider_trades (line 183) | def get_insider_trades( function get_company_news (line 249) | def get_company_news( function get_market_cap (line 315) | def get_market_cap( function prices_to_df (line 351) | def prices_to_df(prices: list[Price]) -> pd.DataFrame: function get_price_data (line 364) | def get_price_data(ticker: str, start_date: str, end_date: str, api_key:... FILE: src/utils/analysts.py function get_analyst_nodes (line 175) | def get_analyst_nodes(): function get_agents_list (line 180) | def get_agents_list(): FILE: src/utils/api_key.py function get_api_key_from_state (line 3) | def get_api_key_from_state(state: dict, api_key_name: str) -> str: FILE: src/utils/display.py function sort_agent_signals (line 8) | def sort_agent_signals(signals): function print_trading_output (line 17) | def print_trading_output(result: dict) -> None: function print_backtest_results (line 257) | def print_backtest_results(table_rows: list) -> None: function format_backtest_row (line 333) | def format_backtest_row( FILE: src/utils/docker.py function ensure_ollama_and_model (line 8) | def ensure_ollama_and_model(model_name: str, ollama_url: str) -> bool: function is_ollama_available (line 33) | def is_ollama_available(ollama_url: str) -> bool: function get_available_models (line 48) | def get_available_models(ollama_url: str) -> list: function download_model (line 63) | def download_model(model_name: str, ollama_url: str) -> bool: function delete_model (line 108) | def delete_model(model_name: str, ollama_url: str) -> bool: FILE: src/utils/llm.py function call_llm (line 10) | def call_llm( function create_default_response (line 87) | def create_default_response(model_class: type[BaseModel]) -> BaseModel: function extract_json_from_response (line 109) | def extract_json_from_response(content: str) -> dict | None: function get_agent_model_config (line 124) | def get_agent_model_config(state, agent_name): FILE: src/utils/ollama.py function _get_ollama_base_url (line 17) | def _get_ollama_base_url() -> str: function _get_ollama_endpoint (line 25) | def _get_ollama_endpoint(path: str) -> str: function is_ollama_installed (line 37) | def is_ollama_installed() -> bool: function is_ollama_server_running (line 57) | def is_ollama_server_running() -> bool: function get_locally_available_models (line 67) | def get_locally_available_models() -> List[str]: function start_ollama_server (line 83) | def start_ollama_server() -> bool: function install_ollama (line 114) | def install_ollama() -> bool: function download_model (line 207) | def download_model(model_name: str) -> bool: function ensure_ollama_and_model (line 311) | def ensure_ollama_and_model(model_name: str) -> bool: function delete_model (line 360) | def delete_model(model_name: str) -> bool: FILE: src/utils/progress.py class AgentProgress (line 12) | class AgentProgress: method __init__ (line 15) | def __init__(self): method register_handler (line 22) | def register_handler(self, handler: Callable[[str, Optional[str], str]... method unregister_handler (line 27) | def unregister_handler(self, handler: Callable[[str, Optional[str], st... method start (line 32) | def start(self): method stop (line 38) | def stop(self): method update_status (line 44) | def update_status(self, agent_name: str, ticker: Optional[str] = None,... method get_all_status (line 66) | def get_all_status(self): method _get_display_name (line 70) | def _get_display_name(self, agent_name: str) -> str: method _refresh_display (line 74) | def _refresh_display(self): FILE: src/utils/visualize.py function save_graph_as_png (line 5) | def save_graph_as_png(app: CompiledGraph, output_file_path) -> None: FILE: tests/backtesting/conftest.py function portfolio (line 7) | def portfolio() -> Portfolio: function prices (line 12) | def prices() -> dict[str, float]: function price_df_factory (line 17) | def price_df_factory(): FILE: tests/backtesting/integration/conftest.py function _find_price_fixture_file (line 14) | def _find_price_fixture_file(ticker: str, start: str, end: str) -> Path ... function _load_price_df_from_fixture (line 30) | def _load_price_df_from_fixture(ticker: str, start: str, end: str) -> pd... function _find_fm_fixture_file (line 49) | def _find_fm_fixture_file(ticker: str, end: str) -> Path | None: function _load_financial_metrics_from_fixture (line 63) | def _load_financial_metrics_from_fixture(ticker: str, end: str, limit: i... function _load_news_from_fixture (line 74) | def _load_news_from_fixture(ticker: str, start: str | None, end: str, li... function _load_insider_from_fixture (line 92) | def _load_insider_from_fixture(ticker: str, start: str | None, end: str,... function patch_engine_prices (line 108) | def patch_engine_prices(monkeypatch): FILE: tests/backtesting/integration/mocks.py class MockConfigurableAgent (line 4) | class MockConfigurableAgent: method __init__ (line 7) | def __init__(self, decision_sequence: list[dict], tickers: list[str]): method __call__ (line 24) | def __call__(self, **kwargs) -> AgentOutput: FILE: tests/backtesting/integration/test_integration_long_only.py function test_long_only_strategy_buys_and_sells (line 4) | def test_long_only_strategy_buys_and_sells(): function test_long_only_strategy_full_liquidation_cycle (line 94) | def test_long_only_strategy_full_liquidation_cycle(): function test_long_only_strategy_portfolio_rebalancing (line 196) | def test_long_only_strategy_portfolio_rebalancing(): function test_long_only_strategy_multiple_entry_exit_cycles (line 312) | def test_long_only_strategy_multiple_entry_exit_cycles(): FILE: tests/backtesting/integration/test_integration_long_short.py function test_long_short_strategy_partial_exits (line 5) | def test_long_short_strategy_partial_exits(): function test_long_short_strategy_full_liquidation_to_cash (line 83) | def test_long_short_strategy_full_liquidation_to_cash(): function test_long_short_strategy_directional_flip_on_ticker (line 159) | def test_long_short_strategy_directional_flip_on_ticker(): function test_long_short_strategy_dca_both_sides (line 236) | def test_long_short_strategy_dca_both_sides(): FILE: tests/backtesting/integration/test_integration_short_only.py function test_short_only_strategy_shorts_and_covers (line 5) | def test_short_only_strategy_shorts_and_covers(): function test_short_only_strategy_full_cover_cycle (line 81) | def test_short_only_strategy_full_cover_cycle(): function test_short_only_strategy_multiple_short_cover_cycles (line 166) | def test_short_only_strategy_multiple_short_cover_cycles(): function test_short_only_strategy_portfolio_rebalancing (line 240) | def test_short_only_strategy_portfolio_rebalancing(): function test_short_only_strategy_dollar_cost_averaging_on_short (line 330) | def test_short_only_strategy_dollar_cost_averaging_on_short(): FILE: tests/backtesting/test_controller.py function dummy_agent (line 4) | def dummy_agent(**kwargs): function test_agent_controller_normalizes_and_snapshots (line 13) | def test_agent_controller_normalizes_and_snapshots(portfolio): FILE: tests/backtesting/test_execution.py function test_trade_executor_routes_actions (line 4) | def test_trade_executor_routes_actions(portfolio): function test_trade_executor_guards_and_unknown_action (line 21) | def test_trade_executor_guards_and_unknown_action(portfolio): FILE: tests/backtesting/test_metrics.py function _build_values (line 8) | def _build_values(values: list[float]): function test_metrics_insufficient_data_no_update (line 24) | def test_metrics_insufficient_data_no_update(): function test_metrics_basic_sharpe_sortino_and_drawdown (line 33) | def test_metrics_basic_sharpe_sortino_and_drawdown(): function test_metrics_zero_volatility_sharpe_zero (line 45) | def test_metrics_zero_volatility_sharpe_zero(): FILE: tests/backtesting/test_portfolio.py function test_apply_long_buy_basic (line 7) | def test_apply_long_buy_basic(portfolio: Portfolio) -> None: function test_apply_long_buy_partial_fill_when_insufficient_cash (line 17) | def test_apply_long_buy_partial_fill_when_insufficient_cash() -> None: function test_apply_long_sell_realized_gain_and_cost_basis_reset (line 27) | def test_apply_long_sell_realized_gain_and_cost_basis_reset(portfolio: P... function test_apply_long_sell_clamps_to_owned (line 40) | def test_apply_long_sell_clamps_to_owned() -> None: function test_apply_short_open_basic (line 49) | def test_apply_short_open_basic(portfolio: Portfolio) -> None: function test_apply_short_open_partial_when_insufficient_margin_cash (line 63) | def test_apply_short_open_partial_when_insufficient_margin_cash() -> None: function test_apply_short_open_uses_available_cash_not_total_cash (line 77) | def test_apply_short_open_uses_available_cash_not_total_cash() -> None: function test_apply_short_cover_realized_gain_and_margin_release (line 95) | def test_apply_short_cover_realized_gain_and_margin_release(portfolio: P... function test_apply_short_cover_clamps_to_existing_short (line 113) | def test_apply_short_cover_clamps_to_existing_short() -> None: function test_zero_or_negative_quantity_is_noop (line 124) | def test_zero_or_negative_quantity_is_noop(portfolio: Portfolio, action:... FILE: tests/backtesting/test_results.py function test_results_builder_builds_rows_and_summary (line 4) | def test_results_builder_builds_rows_and_summary(monkeypatch, portfolio): FILE: tests/backtesting/test_valuation.py function test_calculate_portfolio_value (line 4) | def test_calculate_portfolio_value(portfolio, prices): function test_compute_exposures (line 16) | def test_compute_exposures(portfolio, prices): function test_compute_exposures_with_no_shorts_ratio_inf (line 28) | def test_compute_exposures_with_no_shorts_ratio_inf(portfolio, prices): function test_compute_portfolio_summary (line 35) | def test_compute_portfolio_summary(portfolio, prices): FILE: tests/test_api_rate_limiting.py class TestRateLimiting (line 7) | class TestRateLimiting: method test_handles_single_rate_limit (line 12) | def test_handles_single_rate_limit(self, mock_get, mock_sleep): method test_handles_multiple_rate_limits (line 46) | def test_handles_multiple_rate_limits(self, mock_get, mock_sleep): method test_handles_post_rate_limiting (line 83) | def test_handles_post_rate_limiting(self, mock_post, mock_sleep): method test_ignores_other_errors (line 118) | def test_ignores_other_errors(self, mock_get, mock_sleep): method test_normal_success_requests (line 145) | def test_normal_success_requests(self, mock_get, mock_sleep): method test_full_integration (line 173) | def test_full_integration(self, mock_get, mock_sleep, mock_cache): method test_max_retries_exceeded (line 220) | def test_max_retries_exceeded(self, mock_get, mock_sleep):