diff --git a/app/routes/analyze.ticker.tsx b/app/routes/analyze.ticker.tsx index 0f9dec9..b5cdb78 100644 --- a/app/routes/analyze.ticker.tsx +++ b/app/routes/analyze.ticker.tsx @@ -3,6 +3,7 @@ import { useLoaderData, useNavigate, useLocation } from "react-router"; import TradingViewChart from "../components/TradingViewChart"; import Navbar from "../components/Navbar"; import JobHistory from "../components/JobHistory"; +import { useMemo } from "react"; import type { TradingDecision, AnalystReport, DebateRound } from "../types/agents"; export const meta = () => [{ title: "Stock Detail - AITrader" }]; @@ -103,6 +104,15 @@ export default function StockDetail() { // Cache key for this ticker const cacheKey = `tradinggraph-${ticker}`; + // Parsed last execution plan if present on stockRecord + const lastExecutionPlan = useMemo(() => { + try { + return stockRecord?.lastExecutionPlan ? JSON.parse(stockRecord.lastExecutionPlan) : null; + } catch (e) { + return null; + } + }, [stockRecord]); + // Load cached results on mount useEffect(() => { const cached = sessionStorage.getItem(cacheKey); @@ -299,6 +309,23 @@ export default function StockDetail() { {/* Job history */} + + {/* Last persisted decision (if no live decision) */} + {!decision && stockRecord?.lastDecision && ( +
+

Last Saved Suggestion

+
+
Action: {stockRecord.lastDecision?.toUpperCase()}
+ {lastExecutionPlan && ( +
+ {lastExecutionPlan.amount != null && (
Amount: {lastExecutionPlan.amount}
)} + {lastExecutionPlan.takeProfit != null && (
Take profit: ${lastExecutionPlan.takeProfit}
)} + {lastExecutionPlan.riskManagement?.maxLossPercent != null && (
Risk: {lastExecutionPlan.riskManagement.maxLossPercent}%
)} +
+ )} +
+
+ )
diff --git a/app/routes/analyze.tsx b/app/routes/analyze.tsx index 85bcc9e..1a9a672 100644 --- a/app/routes/analyze.tsx +++ b/app/routes/analyze.tsx @@ -352,8 +352,14 @@ export default function Analyze() { {stock.analysis.action.toUpperCase()}
- Confidence: {(stock.analysis.confidence * 100).toFixed(0)}% + {stock.analysis.confidence ? `Confidence: ${(stock.analysis.confidence * 100).toFixed(0)}%` : "Saved suggestion"}
+ {stock.analysis.executionPlan && ( +
+ {stock.analysis.executionPlan.amount != null && (
Amount: {stock.analysis.executionPlan.amount}
)} + {stock.analysis.executionPlan.takeProfit != null && (
Take profit: ${stock.analysis.executionPlan.takeProfit}
)} +
+ )}
) : stock.loading ? ( Analyzing...