logs/2026-09-12.jsonl — 163 of 163 entries

{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240140348
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240140357
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240140360
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240140365
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240140368
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240140370
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240140373
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240140375
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240140378
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240140381
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240140383
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240145864
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240145871
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240145873
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240145879
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240145882
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240145884
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240145887
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240145890
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240145892
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240145895
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240145897
}
{
  "level": "INFO",
  "category": "Server",
  "message": "Started on port 5000",
  "timestamp": 1789240155267
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token loaded from file",
  "timestamp": 1789240155272
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"eod_wrapup\" (source: self-trigger) — cron: \"30 15 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240155290
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"intraday_check\" (source: self-trigger) — cron: \"0 10,12,14 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240155289
}
{
  "level": "INFO",
  "category": "Trader",
  "message": "Recovered 2 scheduled job(s)",
  "timestamp": 1789240155291
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"upstox-token-refresh\" — cron: \"30 8 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240155291
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"news-cache-refresh\" — cron: \"35 8 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240155292
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-pre-open\" — cron: \"5 9 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240155293
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-open\" — cron: \"20 9 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240155293
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"safety-check\" — cron: \"*/10 9-15 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240155294
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-weekly\" — cron: \"0 18 * * 0\" (Asia/Kolkata)",
  "timestamp": 1789240155295
}
{
  "level": "INFO",
  "category": "Telegram",
  "message": "Transport started",
  "timestamp": 1789240156380
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Started 8 job(s): intraday_check, eod_wrapup, upstox-token-refresh, news-cache-refresh, session-pre-open, session-open, safety-check, session-weekly",
  "timestamp": 1789240156544
}
{
  "level": "INFO",
  "category": "Trader",
  "message": "Agent started",
  "timestamp": 1789240156380
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token saved",
  "timestamp": 1789240184955
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "New access token saved — active immediately.",
  "timestamp": 1789240184956
}
{
  "level": "INFO",
  "category": "Trader",
  "message": "Resuming session blocked 0m ago",
  "timestamp": 1789240185680
}
{
  "level": "INFO",
  "category": "Trader",
  "message": "Message [injected-1789240185680-qm6x]",
  "timestamp": 1789240185682
}
{
  "level": "DEBUG",
  "category": "Trader",
  "message": "Tool: get_positions {}",
  "timestamp": 1789240187219
}
{
  "level": "DEBUG",
  "category": "Trader",
  "message": "Tool: get_funds {}",
  "timestamp": 1789240187223
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token request sent — awaiting user approval",
  "timestamp": 1789240188475
}
{
  "level": "ERROR",
  "category": "Trader",
  "message": "Tool \"get_funds\" threw: [INTERNAL_ERROR] Upstox token expired — a refresh has been requested. Please approve it in the Upstox app, then retry. Upstox says: \"Invalid token used to access API\"\nAppError: Upstox token expired — a refresh has been requested. Please approve it in the Upstox app, then retry. Upstox says: \"Invalid token used to access API\"\n    at AppError.internal (/home/viren/viragents/src/common/utils/error.ts:113:12)\n    at UpstoxClient.request (/home/viren/viragents/src/agents/trading/trader/upstox/index.ts:329:22)\n    at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n    at async Object.run (/home/viren/viragents/src/agents/trading/trader/tools/account.ts:16:37)\n    at async createMessage (/home/viren/viragents/src/common/ai/anthropic.ts:182:20)\n    at async Agent.session (/home/viren/viragents/src/common/agent/Agent.ts:227:10)\n    at async <anonymous> (/home/viren/viragents/src/common/agent/Agent.ts:189:9)",
  "timestamp": 1789240188487
}
{
  "level": "INFO",
  "category": "Trader",
  "message": "claude-sonnet-5 — 27221in/99out tokens — $0.0554 — 4008ms",
  "timestamp": 1789240189713
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240189717
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240255347
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240255354
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240255357
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240255362
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240255365
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240255368
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240255370
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240255373
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240255375
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240255378
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240255380
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240255386
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240267132
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240267140
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240267142
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240267148
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240267151
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240267153
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240267156
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240267158
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240267161
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240267164
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240267167
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789240267172
}
{
  "level": "INFO",
  "category": "Server",
  "message": "Started on port 5000",
  "timestamp": 1789240280914
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token loaded from file",
  "timestamp": 1789240280919
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"intraday_check\" (source: self-trigger) — cron: \"0 10,12,14 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240280937
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"eod_wrapup\" (source: self-trigger) — cron: \"30 15 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240280938
}
{
  "level": "INFO",
  "category": "Trader",
  "message": "Recovered 2 scheduled job(s)",
  "timestamp": 1789240280939
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"upstox-token-refresh\" — cron: \"30 8 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240280940
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"news-cache-refresh\" — cron: \"35 8 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240280941
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-pre-open\" — cron: \"5 9 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240280941
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-open\" — cron: \"20 9 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240280942
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"safety-check\" — cron: \"*/10 9-15 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240280943
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-weekly\" — cron: \"0 18 * * 0\" (Asia/Kolkata)",
  "timestamp": 1789240280944
}
{
  "level": "INFO",
  "category": "Telegram",
  "message": "Transport started",
  "timestamp": 1789240281929
}
{
  "level": "INFO",
  "category": "Trader",
  "message": "Agent started",
  "timestamp": 1789240281929
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Started 8 job(s): intraday_check, eod_wrapup, upstox-token-refresh, news-cache-refresh, session-pre-open, session-open, safety-check, session-weekly",
  "timestamp": 1789240282098
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token request sent — awaiting user approval",
  "timestamp": 1789240801663
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token request skipped (debounced)",
  "timestamp": 1789240801942
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token request skipped (debounced)",
  "timestamp": 1789240802224
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token request skipped (debounced)",
  "timestamp": 1789240802516
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token request skipped (debounced)",
  "timestamp": 1789240802937
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token request skipped (debounced)",
  "timestamp": 1789240803208
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "[DRY-RUN] placeOrder {\"instrument_token\":\"NSE_EQ|INE220G01021\",\"transaction_type\":\"SELL\",\"quantity\":500,\"product\":\"D\",\"order_type\":\"SL-M\",\"price\":0,\"trigger_price\":400,\"validity\":\"DAY\",\"disclosed_quantity\":0,\"is_amo\":false,\"tag\":\"viragent\"}",
  "timestamp": 1789240803210
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token request skipped (debounced)",
  "timestamp": 1789240803470
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token saved",
  "timestamp": 1789240823487
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "New access token saved — active immediately.",
  "timestamp": 1789240823488
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token request sent — awaiting user approval",
  "timestamp": 1789240880895
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token request skipped (debounced)",
  "timestamp": 1789240881210
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "[DRY-RUN] placeOrder {\"instrument_token\":\"NSE_EQ|INE220G01021\",\"transaction_type\":\"SELL\",\"quantity\":500,\"product\":\"D\",\"order_type\":\"SL-M\",\"price\":0,\"trigger_price\":400,\"validity\":\"DAY\",\"disclosed_quantity\":0,\"is_amo\":false,\"tag\":\"viragent\"}",
  "timestamp": 1789240881212
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token request skipped (debounced)",
  "timestamp": 1789240881482
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token saved",
  "timestamp": 1789240914631
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "New access token saved — active immediately.",
  "timestamp": 1789240914632
}
{
  "level": "INFO",
  "category": "Server",
  "message": "Started on port 5000",
  "timestamp": 1789240945611
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token loaded from file",
  "timestamp": 1789240945613
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"intraday_check\" (source: self-trigger) — cron: \"0 10,12,14 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240945629
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"eod_wrapup\" (source: self-trigger) — cron: \"30 15 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240945630
}
{
  "level": "INFO",
  "category": "Trader",
  "message": "Recovered 2 scheduled job(s)",
  "timestamp": 1789240945630
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"upstox-token-refresh\" — cron: \"30 8 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240945631
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"news-cache-refresh\" — cron: \"35 8 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240945631
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-pre-open\" — cron: \"5 9 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240945632
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-open\" — cron: \"20 9 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240945632
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"safety-check\" — cron: \"*/10 9-15 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240945633
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-weekly\" — cron: \"0 18 * * 0\" (Asia/Kolkata)",
  "timestamp": 1789240945634
}
{
  "level": "INFO",
  "category": "Telegram",
  "message": "Transport started",
  "timestamp": 1789240946615
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Started 8 job(s): intraday_check, eod_wrapup, upstox-token-refresh, news-cache-refresh, session-pre-open, session-open, safety-check, session-weekly",
  "timestamp": 1789240946783
}
{
  "level": "INFO",
  "category": "Trader",
  "message": "Agent started",
  "timestamp": 1789240946616
}
{
  "level": "INFO",
  "category": "Server",
  "message": "Started on port 5000",
  "timestamp": 1789240976139
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token loaded from file",
  "timestamp": 1789240976143
}
{
  "level": "WARN",
  "category": "Server",
  "message": "⚠️  TRADING_DRY_RUN=false — LIVE TRADING: orders go to the exchange",
  "timestamp": 1789240976144
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"intraday_check\" (source: self-trigger) — cron: \"0 10,12,14 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240976162
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"upstox-token-refresh\" — cron: \"30 8 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240976166
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"eod_wrapup\" (source: self-trigger) — cron: \"30 15 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240976164
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"news-cache-refresh\" — cron: \"35 8 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240976167
}
{
  "level": "INFO",
  "category": "Trader",
  "message": "Recovered 2 scheduled job(s)",
  "timestamp": 1789240976165
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-open\" — cron: \"20 9 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240976169
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-pre-open\" — cron: \"5 9 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240976168
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"safety-check\" — cron: \"*/10 9-15 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789240976170
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-weekly\" — cron: \"0 18 * * 0\" (Asia/Kolkata)",
  "timestamp": 1789240976171
}
{
  "level": "INFO",
  "category": "Telegram",
  "message": "Transport started",
  "timestamp": 1789240976849
}
{
  "level": "INFO",
  "category": "Trader",
  "message": "Agent started",
  "timestamp": 1789240976849
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Started 8 job(s): intraday_check, eod_wrapup, upstox-token-refresh, news-cache-refresh, session-pre-open, session-open, safety-check, session-weekly",
  "timestamp": 1789240977014
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token request sent — awaiting user approval",
  "timestamp": 1789240989118
}
{
  "level": "INFO",
  "category": "Server",
  "message": "Started on port 5000",
  "timestamp": 1789241036886
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token loaded from file",
  "timestamp": 1789241036889
}
{
  "level": "WARN",
  "category": "Server",
  "message": "⚠️  TRADING_DRY_RUN=false — LIVE TRADING: orders go to the exchange",
  "timestamp": 1789241036889
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"intraday_check\" (source: self-trigger) — cron: \"0 10,12,14 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789241036928
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"eod_wrapup\" (source: self-trigger) — cron: \"30 15 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789241036930
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"upstox-token-refresh\" — cron: \"30 8 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789241036932
}
{
  "level": "INFO",
  "category": "Trader",
  "message": "Recovered 2 scheduled job(s)",
  "timestamp": 1789241036931
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"news-cache-refresh\" — cron: \"35 8 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789241036933
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-open\" — cron: \"20 9 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789241036936
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"safety-check\" — cron: \"*/10 9-15 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789241036937
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-pre-open\" — cron: \"5 9 * * 1-5\" (Asia/Kolkata)",
  "timestamp": 1789241036934
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Registered job \"session-weekly\" — cron: \"0 18 * * 0\" (Asia/Kolkata)",
  "timestamp": 1789241036938
}
{
  "level": "INFO",
  "category": "Telegram",
  "message": "Transport started",
  "timestamp": 1789241037938
}
{
  "level": "INFO",
  "category": "Scheduler",
  "message": "Started 8 job(s): intraday_check, eod_wrapup, upstox-token-refresh, news-cache-refresh, session-pre-open, session-open, safety-check, session-weekly",
  "timestamp": 1789241038107
}
{
  "level": "INFO",
  "category": "Trader",
  "message": "Agent started",
  "timestamp": 1789241037939
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789241046447
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789241046454
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789241046457
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789241046463
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789241046466
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789241046468
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789241046471
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789241046473
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789241046476
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789241046479
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789241046481
}
{
  "level": "WARN",
  "category": "TokenGate",
  "message": "Session blocked on Upstox token — will resume when approval arrives",
  "timestamp": 1789241046486
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token saved",
  "timestamp": 1789241081641
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "New access token saved — active immediately.",
  "timestamp": 1789241081642
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token loaded from file",
  "timestamp": 1789241499850
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token loaded from file",
  "timestamp": 1789241527291
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "Token saved",
  "timestamp": 1789242083690
}
{
  "level": "INFO",
  "category": "Upstox",
  "message": "New access token saved — active immediately.",
  "timestamp": 1789242083691
}