原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [
"cryptocurrency",
"trading-bot",
"trading-algorithms",
"trading",
"crypto",
"framework",
"algo-trading",
"algorithmic-trading",
"jesse",
"trading-strategies",
"python",
"bot",
"crypto-bot",
"bitcoin",
"trade",
"crypto-bot-trading",
"quantitative-finance",
"quantitative-trading"
],
"is_fork": false,
"size_kb": 102232,
"has_wiki": true,
"homepage": "https://jesse.trade",
"languages": {
"CSS": 1212,
"HTML": 36819,
"Shell": 250,
"Python": 3895743,
"Dockerfile": 703,
"JavaScript": 7332
},
"pushed_at": "2026-08-02T15:53:34Z",
"created_at": "2018-11-09T10:38:44Z",
"owner_type": "Organization",
"updated_at": "2026-08-02T15:58:35Z",
"description": "An advanced crypto trading bot written in Python",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "master",
"license_spdx_raw": "MIT",
"primary_language": "Python",
"significant_languages": [
"Python"
]
},
"owner": {
"blog": "https://Jesse.Trade",
"name": "Jesse",
"type": "Organization",
"login": "jesse-ai",
"company": null,
"location": "Luxembourg",
"followers": 367,
"avatar_url": "https://avatars.githubusercontent.com/u/44895627?v=4",
"created_at": "2018-11-09T10:35:28Z",
"is_verified": null,
"public_repos": 24,
"account_age_days": 2823
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v3.0.0",
"kind": "major",
"published_at": "2026-08-01T16:20:58Z"
},
{
"tag": "v2.5.0",
"kind": "minor",
"published_at": "2026-07-06T16:17:43Z"
},
{
"tag": "v2.4.1",
"kind": "patch",
"published_at": "2026-06-29T15:50:46Z"
},
{
"tag": "v2.4.0",
"kind": "minor",
"published_at": "2026-06-15T16:41:19Z"
},
{
"tag": "v2.3.4",
"kind": "patch",
"published_at": "2026-06-06T14:18:14Z"
},
{
"tag": "v2.3.3",
"kind": "patch",
"published_at": "2026-06-03T17:44:21Z"
},
{
"tag": "v2.3.1",
"kind": "patch",
"published_at": "2026-06-03T16:37:26Z"
},
{
"tag": "v2.3.0",
"kind": "minor",
"published_at": "2026-06-03T15:17:23Z"
},
{
"tag": "v2.2.2",
"kind": "patch",
"published_at": "2026-05-31T15:16:45Z"
},
{
"tag": "v2.2.1",
"kind": "patch",
"published_at": "2026-05-30T16:27:35Z"
}
],
"recent_commits": [
{
"oid": "1c9ce36c926b23e51520bfa6818a7ea84501c539",
"body": null,
"is_bot": false,
"headline": "3.0.0",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-08-01T16:20:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fc047dff9453b7830f4efeb47123b0efb7ed06cf",
"body": null,
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/kucoin'",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-08-01T15:52:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "43a6379c9fd1e7f7438f8ada415177e81502c7fb",
"body": null,
"is_bot": false,
"headline": "fix: serve complete live chart history",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-30T10:02:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "60157d01450ef4f8d524487a3f8d3f8b933af6df",
"body": "The candle queries combined their two timeframe conditions with Python's\n`or` instead of peewee's `|`:\n\n Candle.timeframe == '1m' or Candle.timeframe.is_null()\n\n`or` evaluates the left operand, finds the Expression object truthy and\nreturns it immediately, so the is_null() half never reached the \n[…]\nsion of\nhigher timeframes, plus one pinning down why `or` cannot be used here.\n\nCo-authored-by: Saleh Mir <liveproduction@special.lu>\nCo-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix timeframe filter dropping the NULL-timeframe branch (#600)",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-29T16:00:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9e7b14af81adfdb3ec71e261e68fd035a5a0cf41",
"body": "Bump mcp from 1.26.0 to 1.28.1",
"is_bot": false,
"headline": "Merge pull request #598 from jesse-ai/dependabot/pip/mcp-1.28.1",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-29T15:57:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6aac9c13586cdc4a849e685160899deaed012484",
"body": null,
"is_bot": false,
"headline": "Read MCP resources as UTF-8",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-27T16:15:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "871e6122a3f8b04981fd76f9c951014bf4313e98",
"body": null,
"is_bot": false,
"headline": "Keep Jesse Live imports optional",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-27T16:10:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d8e732524bb403f940ef9ad4d863eb12dceb50b1",
"body": null,
"is_bot": false,
"headline": "Add route template persistence API",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-27T15:34:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7a2d207595ac0d4dbb20429f5c43444b2703ea08",
"body": null,
"is_bot": false,
"headline": "Update frontend files",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-26T15:14:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5baf8c694578af9ead7f87badcee419cfe04d9ca",
"body": null,
"is_bot": false,
"headline": "Persist failed research session state",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-24T16:40:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3a4be586a79dc1a5596a84e9f8e031dd08b0b328",
"body": null,
"is_bot": false,
"headline": "Add isolated dashboard test database support",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-24T16:00:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b7708a7042ea8225c120bbaa7f553c5dd762070",
"body": null,
"is_bot": false,
"headline": "Split local and external startup info",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-23T14:17:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "54088b3caa79e15ca93f2e71cd834747850adf26",
"body": null,
"is_bot": false,
"headline": "Prevent reruns from losing active process state",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-23T12:13:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e3ad759f51df34ac37d41683ec8ed3bcb13cb606",
"body": null,
"is_bot": false,
"headline": "Add reusable period templates",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-23T12:13:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9a5f9b0515b9c66998e126f3526414ab6cd9caba",
"body": null,
"is_bot": false,
"headline": "Rename Apex candle driver for Omni",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-22T15:24:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c0d5d79d5e279f5c2d47871fc0970116d730bc46",
"body": "Drop the export_tradingview flag from the backtest API, MCP tools,\nsession models, download endpoint, research API, and delete the\ntradingview log service.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Remove Export TradingView option from backtests",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-22T15:19:08Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "cb5e13dc8b82b52de791de29377d4a7cdcda2587",
"body": null,
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/kraken-pro'",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-22T10:16:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c408ca2c99b7f2b1322b6f2311dffe026f4a9966",
"body": null,
"is_bot": false,
"headline": "Improve MCP chart authoring guidance",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-21T10:05:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5195e522e7fa46a1495b830d637c61b011f3c957",
"body": null,
"is_bot": false,
"headline": "Test backtest chart data delivery",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-20T12:00:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe5c32f5ed842627b49abb0b876fd4bfaf24c84a",
"body": null,
"is_bot": false,
"headline": "Improve backtest chart data delivery",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-20T09:55:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "275379ba7792eb99405048e2ae3285608f3ba5ce",
"body": null,
"is_bot": false,
"headline": "Update frontend files",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-19T12:27:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "96242120b66f1c08a2dba76df0d5f7600c0a7d43",
"body": null,
"is_bot": false,
"headline": "Validate session IDs across session endpoints",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-19T12:27:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1b70faa222bbd101cea78f00387b1416dd54b60a",
"body": null,
"is_bot": false,
"headline": "Persist live strategy chart history",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-19T11:53:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "78ace4469061b659f5c8be77ed4977f457d517fc",
"body": null,
"is_bot": false,
"headline": "Log invalid strategy chart values",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-19T10:55:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f4f611d5330802c4392b599b4cea1eb000b4add6",
"body": null,
"is_bot": false,
"headline": "Merge branch 'master' into kucoin",
"author_name": "morteza-koohgard",
"author_login": "morteza-koohgard",
"committed_at": "2026-07-19T09:14:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5db141e3da6e202f1d212801e24bd9505bbc88be",
"body": null,
"is_bot": false,
"headline": "Validate significance test session IDs",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-18T15:02:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4686d25c3e064dd3056a9c4a4088c40c02fdce25",
"body": "Bumps [mcp](https://github.com/modelcontextprotocol/python-sdk) from 1.26.0 to 1.28.1.\n- [Release notes](https://github.com/modelcontextprotocol/python-sdk/releases)\n- [Changelog](https://github.com/modelcontextprotocol/python-sdk/blob/main/RELEASE.md)\n- [Commits](https://github.com/modelcontextprot\n[…]\n/compare/v1.26.0...v1.28.1)\n\n---\nupdated-dependencies:\n- dependency-name: mcp\n dependency-version: 1.28.1\n dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "Bump mcp from 1.26.0 to 1.28.1",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-16T20:24:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e75053fe95626bc8cf77fd544b4715a3116c7bd3",
"body": null,
"is_bot": false,
"headline": "Add intrabar strategy chart updates",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-16T14:26:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c9d168a3aafbf19ed9b202a262230b91e682f556",
"body": null,
"is_bot": false,
"headline": "Add live strategy chart data support",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-16T12:37:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fa63531cae6c09b978711dc1892285067304e2df",
"body": null,
"is_bot": false,
"headline": "Update frontend files",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-13T15:45:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d836b513dcc4282217d3511633f69c3d76932d4c",
"body": "Document the shared `.claude/skills` setup for both Claude Code and Codex, and add the `.agents/skills` symlink so Codex can discover the canonical skill files. This also updates `AGENTS.md` with the repo-level workflow for scanning and loading matching skills before starting work.",
"is_bot": false,
"headline": "Add shared agent skills discovery docs",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-13T15:44:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3836c3bc0d723f77383c0ffe0329ed7d77a7ec80",
"body": null,
"is_bot": false,
"headline": "Enable live trading for Kraken spot",
"author_name": "morteza-koohgard",
"author_login": "morteza-koohgard",
"committed_at": "2026-07-12T18:52:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4c413a77388666a907a46a24d574d6cb3fcc2080",
"body": null,
"is_bot": false,
"headline": "Refactor API authentication with FastAPI dependencies",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-12T13:09:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c94b48b0e4d0b166923003cc46ffa96b2b1b7334",
"body": "- Add @overload signatures to all scalar-returning indicators so type\n checkers resolve sequential=False -> float and sequential=True -> ndarray\n- Declare post-initiation types for late-initialized Strategy attributes\n (name/symbol/exchange/timeframe/position/broker); hp is now always a dict\n- Typ\n[…]\nes (entry/exit orders, exchange_type,\n daily_balances) and log()'s webhook param\n- Document the strategy-facing typing conventions in AGENTS.md\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Improve type-checking support for strategy-facing APIs",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-12T11:01:20Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "73635dc3a976d2cfad6223bdebbc7228b435e250",
"body": null,
"is_bot": false,
"headline": "Fix MCP backtest route persistence",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-12T11:01:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "96110dbc9a83f0b1f342f419de989cb537188798",
"body": "The plugin releases endpoints moved to the api2 backend. Point the live-plugin\ninstaller's download and the releases-info lookup at JESSE_API2_URL. The license\ncheck (/v2/user-info) is unchanged.\n\nCo-authored-by: Saleh Mir <liveproduction@special.lu>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fetch the Jesse Live plugin (download + releases-info) from api2 (#595)",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-06T16:17:43Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7296cec497870215cb343047e81dac36ab3f2223",
"body": null,
"is_bot": false,
"headline": "Bump version to 2.5.0",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-07-05T15:11:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5f0016c557bffd11dbeac363793cb0641e2a064",
"body": "Adds Kraken enums, info.py entries, and the candle-import drivers\n(incl. kraken_utils) that the jesse_live Kraken live drivers depend on.",
"is_bot": false,
"headline": "Merge Kraken Pro (Spot + Futures) core support (PR #588)",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-07-05T15:10:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b313211de7a7a8448b461572ed9a42f5ed1e383",
"body": "get_order_by_id did `id in str(o.id)`, which raises\n\"TypeError: 'in <string>' requires string as left operand, not int\"\nwhen the client_id arrives as an int rather than a str. Some exchange\norder-stream payloads carry numeric ids (e.g. Binance algo/strategy order\nids), which crashed the order-status\n[…]\nefore the substring\nmatch. Adds a regression test covering int and None ids.\n\nCo-authored-by: Saleh Mir <liveproduction@special.lu>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix TypeError in get_order_by_id when client_id is an int (#594)",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-07-05T10:32:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6ff8fc63b948d474e6878abe2e2a736cd1190086",
"body": null,
"is_bot": false,
"headline": "Merge branch 'master' into kraken-pro",
"author_name": "morteza-koohgard",
"author_login": "morteza-koohgard",
"committed_at": "2026-07-01T10:02:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ddb335a4f946f5ec57fdc35de8eb032c97365ec0",
"body": null,
"is_bot": false,
"headline": "Merge branch 'master' into kraken-pro",
"author_name": "morteza-koohgard",
"author_login": "morteza-koohgard",
"committed_at": "2026-07-01T09:54:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3bf4f1c9c6f09a0df693bbd34c1b01973ebcc4d4",
"body": null,
"is_bot": false,
"headline": "Merge branch 'master' into kraken-pro",
"author_name": "morteza-koohgard",
"author_login": "morteza-koohgard",
"committed_at": "2026-07-01T09:53:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b6da2a8153aa474c376f236256e214b79ffff152",
"body": "Disable live_trading for Kraken's public OHLC endpoint (720-candle\nrolling window) and enable backtesting for the leveraged Kraken mode\nthat supports historical data.",
"is_bot": false,
"headline": "Update Kraken exchange backtesting/live flags",
"author_name": "morteza-koohgard",
"author_login": "morteza-koohgard",
"committed_at": "2026-07-01T09:52:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "377843a35402d35f6538a49120a918021a885134",
"body": null,
"is_bot": false,
"headline": "2.4.1",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-29T15:50:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1448dfdd983d8af143de083f2015584a6a9e5839",
"body": null,
"is_bot": false,
"headline": "2.4.1",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-29T15:50:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fa933cf03491a5382e2ef468a317403d084c9b88",
"body": "Make the server-authoritative backend the default (was \"local\") so the daily limit\nis enforced by the licensing backend with no env var needed. \"local\" stays available\nas an opt-out via MCP_USAGE_METER=local. Fails open, so a backend outage never\ndisrupts usage.\n\nTests: an autouse fixture forces loc\n[…]\nr the existing local-flow tests; add a\ndefault-is-remote check. All 26 pass.\n\nCo-authored-by: Saleh Mir <liveproduction@special.lu>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "MCP usage limits: default the meter to \"remote\" (#593)",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-25T16:55:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3076e3664731c7c5ec6a5aa8674394dc08b35e82",
"body": null,
"is_bot": false,
"headline": "MCP usage limits: add server-authoritative meter backend (#592)",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-25T16:36:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c571d3a29a2a44b0ed5a055034b442e01abc6231",
"body": "Added exceptions for report file creation and clarified rules for using MCP tools.",
"is_bot": false,
"headline": "Update agent rules with report creation exceptions (#591)",
"author_name": "Jorge Correa",
"author_login": "jorgemcorreac",
"committed_at": "2026-06-20T10:37:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ff272192d3634f9875572e5da17a3dea9b9b2a00",
"body": "Reverts the generic webhook driver (custom payload key + JSON template) and its\ntests. _custom_channel_notification returns to handling only Slack/Discord URLs.\nThe Telegram/Discord/Slack notification drivers are unaffected.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Remove generic webhook notification feature",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-15T16:41:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2357b052fbeaba94f14dfc61751e62b120f8b6c8",
"body": "Generic webhooks can now shape the request body to whatever the target service\nexpects, instead of a hardcoded {'text': ...}:\n- payload_template: user-supplied JSON of any shape with a {{message}} placeholder\n (substituted at any depth) POSTed verbatim — supports extra/nested fields.\n- payload_key:\n[…]\nld name\n (defaults to 'text'). payload_template takes precedence.\nBoth flow through the stored notification driver config + CSV import/export.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "notifier: configurable webhook payload (custom key + full JSON template)",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-15T15:54:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "11a92d91e43596713f4f816bee06e443938d8697",
"body": "Adds generic webhook delivery to _custom_channel_notification: non-Slack/Discord\nURLs now POST JSON ({'text': ...}) with a form-encoded fallback instead of raising,\nwith a 15s timeout matching the other senders so a slow endpoint can't stall the\nnotifier loop. Adds a stored 'webhook' driver path and\n[…]\nm colleague's stale webhook-notifcation branch onto current master to\navoid reverting the existing HTTP timeouts and notifier-loop crash guard.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "notifier: support generic webhooks (with timeout) + tests",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-15T14:44:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5c898169ba5e61669d158bcc691410a50ce5ee4a",
"body": "elliottech/lighter-python v1.1.1 (#158, 'allow l2 sig revoke & approve zero\nfees integrator'): the new signer can build a zero-fee integrator approve using\nonly the L2 (API-key) signature. The previous build treated zero max-fees as a\nrevoke ('ApprovalExpiry should be zero when revoking'), so a friction-free\nauto-approve was impossible. Verified live on mainnet (sendTx code 200, no L1).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Lighter: update vendored signer binaries to upstream v1.1.1",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-15T14:28:38Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2a63d91af8f0fccd61919d6a1afa5758b5ab31d6",
"body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Bump version to 2.4.0",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-15T13:01:23Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "07e65ba03bd96f57ebf657c56395f10a4a2edb23",
"body": null,
"is_bot": false,
"headline": "2.4.0",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-15T12:54:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5939e96272dedf10595a4d3c6cce2a38603bd254",
"body": "_load_asset_pairs only normalized XBT->BTC, so Dogecoin was exposed as XDG-USD\ninstead of DOGE-USD — it looked 'missing' as DOGE, and XDG-USD then errored\nbecause the trade/WS API only speaks the standard DOGE name. Add a shared\nKraken<->Jesse base-alias map (XBT<->BTC, XDG<->DOGE) applied inbound and in the\noutbound altname fallback.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "kraken candle driver: normalize XDG->DOGE alias",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-14T13:31:24Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "1fd9bcdcdb50133f9656d5045d3cc56dc6abbb63",
"body": "Backtest candle-import driver for KuCoin (enums KUCOIN_SPOT / KUCOIN_USDT_PERPETUAL,\ninfo.py fees+settle, drivers/KuCoin spot+futures fetchers + symbol mapping).",
"is_bot": false,
"headline": "feat: KuCoin Spot + USDT Perpetual candle-import driver",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-12T16:35:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ecf119a64b31542cb69c93f74f0f37dff3bac7eb",
"body": "Update requirements.txt to pin jesse-rust==1.2.0 (was 1.1.0). This change upgrades the dependency to the newer release to pick up improvements or fixes in 1.2.0.",
"is_bot": false,
"headline": "Bump jesse-rust to 1.2.0",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-12T15:36:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "146d345eb1feb792d53c7746fa3b532de958ed25",
"body": "test_fast_mode_equivalence runs the same single-route real-strategy\nbacktest twice (fast_mode=False then True) over deterministic gapless\n1m candles (~5 months, seed 9001) and asserts the trades fingerprint\n(trades_hash, trade counts, net profit, finishing balance, fee) is\nidentical between the two \n[…]\nr\ntoo) that must not be codified here. Verified to pass on master\n@ 0987c304 as well (12.7s) and on this branch (7.6s); suite is now\n501 passed.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add fast/step simulator equivalence regression test (clean data)",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-12T08:43:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "79ac1a491216bea297e95ef4dc31d51664436799",
"body": "…results\n\nTwo slow-but-default pytest tests run full research.backtest() sessions with\nreal strategies adapted from the maintainer's bot project (Alligator multi-TF,\nDonchian-ATR trend, ADX/Williams%R) over seeded synthetic candle windows\n(~1y single-route step-sim; ~6mo x 3 routes fast-sim) and ass\n[…]\n\n\nAlso registers a 'slow' pytest marker (tests/conftest.py) and documents the\npre-existing API-singleton driver-freeze quirk the tests sidestep.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add real-strategy regression tests pinned to pre-optimization master …",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-12T08:09:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c0bc92f68be3c3005d7b92d7c5b61adf923e7ae4",
"body": "… preservation)\n\nThe reuse in _simulate_new_candles returned the post-jump-fix candle for\npipeline sessions, while historical behavior built the HTF candle from the\npre-fix rows in candles_arr (the pipeline buffer write-back precedes the\nfix). Gating on (storage_1m is not None or candles_pipeline is\n[…]\n all view-backed paths and the exact old behavior for\npipelines. Fingerprints re-verified (gatecheck: fp cc8ab0d73d50ae16, no\nspeed regression).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Gate the HTF real_candle reuse to non-pipeline paths (strict behavior…",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-12T07:28:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7d24a375721b0206b0adbe53e8e19d2deb842e01",
"body": "Comments/docs only — zero behavior change (verified: bench docscheck\nfingerprints cc8ab0d73d50ae16 identical to baseline after these edits).\n\n- docs-perf/REPORT.md: executive summary (suite 79.0s -> 27.5s, 2.88x,\n full per-round table), correctness methodology (fingerprint gating incl.\n trades_has\n[…]\n note the *_last call is bit-for-bit\n identical to the full-series kernel's [-1].\n- DynamicNumpyArray.__getitem__: hot-path restructuring note.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Docs: review guide + why-comments for the perf-backtests branch",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-12T07:25:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "15cb00d382ddd115347372eacd7c9a3dd8a2625e",
"body": "In the skip simulator, whenever a route's timeframe count equals the\nsimulation step (always true for single-timeframe sessions), the\nhigher-timeframe candle was rebuilt from the exact same rows that\n_simulate_price_change_effect_multiple_candles had just aggregated into\nreal_candle, through the exa\n[…]\ne\nstorage buffer, so no aliasing is retained.\n\nbench (fast): a 0.33->0.30s, b 5.46->5.41s, c 2.52->2.43s, d 2.11->2.05s;\nfingerprints identical.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Reuse the step's real candle as the HTF candle when counts align",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T21:25:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "55f0ad774c5521d72671c87382e52d7a546a56ce",
"body": "Position.type read qty/_min_qty through up to two stacked property chains\n(is_long -> _min_qty, is_short -> _min_qty) and is_open allocated a list\nper call; type now reads qty and _min_qty once (identical comparisons) and\nis_open compares against 'close'. Pure restructuring of per-call reads --\nno caching, nothing can go stale, safe for live trading.\n\nbench: ~0-1.5% (within noise on b, small gain on c_multi fast);\nfingerprints identical.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Flatten Position.type/is_open property chains",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T21:14:23Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "51be56bc5072c8e60f95884d42c81851664aaa80",
"body": "Mirror of the step simulator's prefill (e86ac0d2) for fast mode, which is\nthe default path for dashboard/MCP users. For pipeline-less pairs the\nper-step loop's only input mutations are the step-boundary jumped-candle\nfixes (which read only the previous close, never written by any fix), so\nthey are a\n[…]\nty) with fallback to the old path.\n\nbench (fast): a 0.38->0.34s, b 5.81->5.62s, c 2.78->2.58s, d 2.63->2.43s\nvs round 2; fingerprints identical.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Prefill 1m candle storage upfront in the skip simulator too",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T21:05:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "20c6b834309458b0d0dcdd627ed93f618119a14f",
"body": "For arrays of <= 8 elements (the buy/sell/stop-loss/take-profit pairs\ncompared every candle), compare elements directly instead of paying\nufunc dispatch — identical float/NaN semantics.\n\nbench: b_heavy_15m:fast 6.09s -> 5.78s, fingerprint identical.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Scalar-compare tiny order arrays in _np_array_equal",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T20:47:15Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3453688e17ad9ceca9ab8f463de36a854be8ab9d",
"body": "- Strategy._detect_and_handle_entry_and_exit_modifications: replace\n np.array_equal with a semantically-identical helper that skips\n numpy's dispatch overhead for the small ndarray pairs compared on\n every candle (~58K calls per heavy backtest).\n- candle_service.get_candles: same logic, but plain\n[…]\nm:fast 6.31s -> 6.09s, fingerprint identical.\ntests: test_parent_strategy/test_state_candle/test_candle_service/\ntest_simulator_parity all pass.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Cheapen per-candle Python hot paths: array compares and get_candles",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T20:44:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e86ac0d2db3b9c1af5c189a5cc9f5151f2d9bb24",
"body": "For pipeline-less pairs, gap-fix the whole 1m series once via\njesse_rust.fix_jumped_candles, bulk-copy it into the storage buffer,\nand replace the per-minute add_candle + DynamicNumpyArray.append with\na single index bump. Guards (dtype/writeable/zero-ts/strictly\nincreasing timestamps/warmup continui\n[…]\nexactly as before.\n\nbench: a_simple_1h:step 2.21s -> 1.25s, b_heavy_15m:step 11.85s ->\n7.56s (1.81x / 1.57x vs round 1), fingerprints identical.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Prefill 1m candle storage upfront in the step simulator",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T20:39:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cdd8b8e618b01d7ea59b49b9e3a8aae8fae4f297",
"body": "generate_candle_from_one_minutes and the real_candle construction in\n_simulate_price_change_effect_multiple_candles now call\njesse_rust.candle_from_one_minutes (bit-exact vs the numpy expression,\nverified for all block sizes <= 4320 rows; numpy fallback above).\n\nbench: b_heavy_15m:fast 6.82s -> 6.31s, a_simple_1h:step 2.27s -> 2.21s,\nfingerprints identical.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Build higher-timeframe candles via the jesse_rust kernel",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T20:32:16Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "23ec9fe110df0bc7578547dbb42b7d6b2e3d4e12",
"body": "ema/sma/rsi/atr/bollinger_bands now call the new jesse_rust *_last\nfunctions when sequential=False: identical recurrence (bitwise-equal\noutput), but no full-series allocation, no [-1] indexing, and no\nastype(float64) copy in bollinger_bands when the source is already\nf64 (the Rust side accepts strided views).\n\nbench: b_heavy_15m:fast 9.90s -> 6.82s (1.45x vs round 1),\nfingerprint identical. tests/test_indicators.py: 178 passed.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Use jesse_rust scalar *_last indicator kernels for sequential=False",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T20:25:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "fdbd016691a5a1f4edebcdd380b005fb9f573cd4",
"body": "The previous membership-test version still went through\nMapping.__contains__, which internally raises/catches KeyError on every\ncall when the env var is absent — that lookup alone was ~0.5s per heavy\nbacktest via get_config() -> slice_candles() on every indicator call.\n\nNew logic: if 'pytest' is in \n[…]\n failures, 80 passed).\n\nBench b_heavy_15m fast: 10.29s -> 9.85s (-12.2% vs baseline 11.22s).\nFingerprint 760596ae71bcce7b identical to baseline.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Make is_unit_testing() near-free outside pytest processes",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T20:01:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "30dcc470d3026df4e3b5fac327893374ddbf92c2",
"body": "- _simulate_price_change_effect: only re-add the real candle to storage\n when at least one order actually executed (i.e. partial candles were\n written that need to be overwritten). When nothing executed, the\n caller (_step_simulator) added this exact candle object immediately\n before, so the sec\n[…]\ne 5.33s),\nb_heavy_15m step 14.65s -> 12.17s (-24.8% vs baseline 16.17s).\nFingerprints cc8ab0d73d50ae16 / 760596ae71bcce7b identical to baseline.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Skip redundant candle re-store and duplicate position lookup per minute",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T19:56:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5dfa632078fd4c70c86f28ecc097a313f5aaef43",
"body": "Precompute once before the loop instead of per minute (x ~260K-1M):\n- per-route candle arrays / pipelines / exchange / symbol tuples\n (replaces 3 dict lookups per route per minute)\n- (timeframe, minutes) pairs for higher-timeframe generation (replaces\n config['app']['considering_timeframes'] looku\n[…]\n.05s (-20%; -42.8% vs baseline 5.33s),\nfast 0.74s -> 0.60s (combined with previous commits).\nFingerprint cc8ab0d73d50ae16 identical to baseline.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Hoist loop invariants out of the _step_simulator per-minute loop",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T19:52:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8048b4cb6efe4c14b631a0ed1f19a8838ebd9d3e",
"body": "…, keys)\n\n- utils.timeframe_to_one_minutes: use the existing module-level\n TIMEFRAME_TO_ONE_MINUTES constant instead of rebuilding a 17-entry\n dict + running two function-level imports on every call (~145K calls\n per heavy backtest). Error path unchanged (same InvalidTimeframe).\n- helpers.timefra\n[…]\nn: inline jh.key() f-strings.\n\nBench b_heavy_15m fast: 11.22s -> 10.29s (-8.3% vs baseline).\nFingerprint 760596ae71bcce7b identical to baseline.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Cheapen per-indicator-call helpers (timeframe lookup, is_unit_testing…",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T19:50:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c9d33d0920ac9ddd539e938b9f0f29be9f00e376",
"body": "- _simulate_price_change_effect: skip the candle copy and the execution\n while-loop entirely when no order falls inside the candle (the common\n case); the closing add_candle + position price update now run once at\n the tail, which is exactly what the old loop's single break path did.\n Removed re\n[…]\n baseline 5.33s),\nb_heavy_15m step 16.17s -> 14.65s (-9.4% vs baseline). Fingerprints\ncc8ab0d73d50ae16 / 760596ae71bcce7b identical to baseline.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Early-exit order simulation paths in the per-minute hot loop",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T19:46:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e2860dc4d3c8195d1e7b0f0a42b6bc11351798ee",
"body": "…mpyArray)\n\n- add_candle: read the last candle's timestamp once as a scalar\n (arr.array[index, 0]) instead of up to 3 arr[-1][0] row-view builds per\n call; write last-candle updates directly (arr.array[index] = candle);\n hoist the duplicated jh.is_live() call; early-return on initial append.\n- Ca\n[…]\nse-branch)\npreserved.\n\nBench a_simple_1h: step 5.33s -> 4.27s (-19.9%), fast 0.74s -> 0.72s.\nFingerprint cc8ab0d73d50ae16 identical to baseline.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Cheapen hot candle-storage access (add_candle, get_storage, DynamicNu…",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T19:42:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f86521f80293fc0311c99238e435e0fb30657721",
"body": "In research/backtest sessions outside a Jesse project the per-trade\nClosedTrade.update() always raised 'Query must be bound to a database',\ngot caught, and pretty-printed a debugging block to the terminal for\nevery closed trade. Guard on database.is_open() instead — exactly the\ncases that previously\n[…]\nrminal I/O.\n\nBench: a_simple_1h step 5.33s -> 5.33s (neutral here; scales with trade\ncount), fingerprint cc8ab0d73d50ae16 identical to baseline.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Skip closed-trade DB write when no database is available",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-11T19:39:58Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "41d0f80424244aef24b482ef1c8c526a557a0a16",
"body": "Adds KRAKEN_SPOT / KRAKEN_PERPETUAL / KRAKEN_PERPETUAL_TESTNET enums and info.py\nentries, plus REST candle-import drivers used for live warm-up candles:\n- Kraken Spot (api.kraken.com /0/public/OHLC; rolling ~720-candle window so\n backtesting=False; OHLC time is seconds -> ms, candle open-time, olde\n[…]\nutures.kraken.com charts API; time already in ms, deep history).\nBoth translate Jesse BASE-USD symbols to Kraken naming (XBT<->BTC, PF_ perps).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add Kraken Pro Spot + Futures: enums, info.py, candle-import drivers",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-08T18:41:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e499b3eae3f24be246ddb306e0d509a0807a2b59",
"body": "Rebuilt jesse/static from the current dashboard-v1 master, which includes the merged\noptimizationStore.ts _ensureResultsShape fix (recovers MCP-created + older optimization\nsessions that previously failed to load). Generated via dashboard-v1 'npm run generate'.\n\nCo-authored-by: Saleh Mir <liveproduction@special.lu>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Rebuild dashboard static (optimization session-loading fix) (#587)",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-08T17:37:55Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "04f7e8528328fc4862205a54c9e6eb36ac6cffb4",
"body": "Rebuilt jesse/static from the current dashboard-v1 master, which includes the merged\noptimizationStore.ts _ensureResultsShape fix (recovers MCP-created + older optimization\nsessions that previously failed to load). Generated via dashboard-v1 'npm run generate'.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Rebuild dashboard static (optimization session-loading fix)",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-08T17:34:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0987c304d7f276cfc09c942e53d4c39c9395b8ee",
"body": "create_optimization_draft_service persisted an incomplete session results state ({alert}\nonly). The dashboard's loadSession patches that state in and then reads\nresults.progressbar.current / results.exception.error directly, so MCP-created sessions\ncrashed with 'Failed to load session' (dashboard-ru\n[…]\nready-saved broken sessions).\nThe dashboard must be rebuilt into jesse/static at release.\n\nCo-authored-by: Saleh Mir <liveproduction@special.lu>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix MCP optimization sessions failing to load in the dashboard (#586)",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-08T17:30:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3ed65ff6837242090b4ca9391d5067e9344fc249",
"body": "jesse/services/env.py validates that a project .env exists at import time and, if\nmissing, called jh.error(). But jh.error() -> is_live() -> jesse.config ->\njesse.modes.utils -> jesse.services.logger -> jesse.services.redis, and\nservices.redis is exactly what imports env.py — so it is still mid-impo\n[…]\n process exits cleanly. Behaviour with a valid .env\nis unchanged; full suite still green.\n\nCo-authored-by: Saleh Mir <liveproduction@special.lu>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix circular-import crash when a project .env is missing (#585)",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-07T15:15:03Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b4e3536478482a9dc6f3a6a472b52d7f94e22287",
"body": "Introduce _print_import_progressbar to render a compact visual progress bar for CLI/research candle imports (show_progressbar=True). The new helper builds a 32-char bar using filled/empty blocks, clamps the filled width, formats a human-readable ETA (h/m/s), and displays the symbol, exchange, percent, reached date, and ETA. Replace the previous single-line progress print in run() with a call to this helper for clearer import feedback.",
"is_bot": false,
"headline": "Add CLI progress bar for candle imports",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-07T12:32:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4e4d1363da56e9418296507461d9d249b3365514",
"body": null,
"is_bot": false,
"headline": "update dashboard files",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-07T12:32:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9b2293f846640534dd04bd465486a56496145fc8",
"body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Bump version to 2.3.4",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-06T14:18:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "511aa42e823ea6a0b685209f5fde9039b921af89",
"body": "Guests (no license token) get 0 research runs by default; the message states a free account is required (no premium mention). Free 100/day and paid unlimited unchanged. Client-side; fail-open only on a real backend error.",
"is_bot": false,
"headline": "MCP usage limits: guests need an account (0 runs by default) (#584)",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-06T13:51:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0808a4f8639d9541c8b9ba40273651f51706ef2",
"body": "… and Monte Carlo runs\n\nfast_mode now defaults to True in create_backtest_draft (tool + service) and\nthe Monte Carlo run-payload fallback, matching the existing optimization default.\nResource docs updated to reflect the new defaults.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(mcp): enable fast_mode by default for all MCP-executed backtests…",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-06T12:25:35Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e6d2d632d40a921672051710d054ad46996e4252",
"body": "MCP usage limits: daily free-plan allowance for research runs (client-side)",
"is_bot": false,
"headline": "Merge pull request #583 from jesse-ai/feat/mcp-usage-limits",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-05T15:47:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1f84ce0a4dffbba698ad6fbf5f0437fdcdf1938e",
"body": "Per Saleh: a missing license token now means GUEST (not fail-open) — metered at a\nsmaller daily budget (50) and nudged to log in when over. A logged-in non-paid\nuser is FREE (100/day, nudged to upgrade to premium). Paid plans stay unlimited.\nOnly a real backend error (token present but /v2/user-info\n[…]\nis client-side (local Redis daily counter) and fail-open, per Saleh's call: a\nsoft nudge toward premium, not a hard wall (a determined user can bypass it).\n\nAdds a paid-plans test and updates the doc.",
"is_bot": false,
"headline": "mcp limits",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-05T15:43:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fa43d4f8051762ec96ca204fd615d9764f25d29e",
"body": "Fix fast/full simulator divergence on synthetic (Monte Carlo) candles",
"is_bot": false,
"headline": "Merge pull request #582 from jesse-ai/fix/backtest-fastmode-parity",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-05T14:26:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1cc9c77055a057ad32032da78bdd9ebc61b8da13",
"body": "The step simulator (fast_mode=False) built higher-timeframe candles and its\ngap-fix reference from the ORIGINAL candles array, because it never wrote the\npipeline's synthetic candle back into it (the skip simulator does). So with a\ncandle pipeline active (Monte Carlo), the strategy's indicators were\n[…]\nPipeline, plus a\nregression test asserting fast and full feed the strategy identical candles\nunder a pipeline (the test fails before this fix).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix fast/full simulator divergence on synthetic (pipeline) candles",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-04T21:42:24Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7416c06abb9de7af0769cbdd89698a20418bfab7",
"body": "The full step-simulator blows up on synthetic bootstrapped candles for\nrisk-sized strategies: positions get sized off a momentarily tiny ATR, the\nbalance compounds into an overflow, and scenarios die with InsufficientMargin\n/ Infinity (the Infinity also broke the session API's JSON, surfacing as\n\"In\n[…]\noff produce byte-identical results (a\npre-existing step-vs-skip simulator divergence on synthetic candles) is in\nprogress on a separate branch.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "MCP/dashboard Monte Carlo: default fast_mode=True (robust path)",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-04T21:11:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "af99785d39034330ed21bb30937a68974a4aaf1c",
"body": "Add MCP support for optimization mode",
"is_bot": false,
"headline": "Merge pull request #581 from jesse-ai/feat/mcp-optimization-mode",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-04T16:41:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "41a6b543f739d610ca596a2633285a0a24e8d284",
"body": "Parity with the other modes' resources (jesse://monte_carlo,\njesse://significance_test, jesse://backtest_management): a per-feature guide that\nthe resources loader auto-registers from the .md filename. Documents the\ntrain/test split, the hyperparameters() precondition, objective functions,\nper-hyper\n[…]\nal counts, train-vs-test overfit interpretation, the full\ntool reference, an adaptive check schedule, the standard workflow, and common\nerrors.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add jesse://optimization MCP resource doc",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-04T16:36:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b46863c082ebd42a4598f648f9a583bc70a177f1",
"body": "…lures\n\nFix silent MCP backtest/RST failures and harden config handling",
"is_bot": false,
"headline": "Merge pull request #580 from jesse-ai/fix/mcp-backtest-rst-silent-fai…",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-04T16:30:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7a29a2012b9a5cc29072cf388861bad589f7493c",
"body": "Mirrors the Monte Carlo MCP tools so an agent can stage, run, and poll\nhyperparameter optimizations with the same draft/run/poll workflow it already\nuses for backtests, RST, and Monte Carlo.\n\n- jesse/mcp/tools/services/optimization.py: service layer over the /optimization\n HTTP endpoints. Folds obj\n[…]\nand 10 ranked candidates (train/test Sharpe per candidate); a no-data symbol\nstops fast with a clear \"import candles for both windows\" message.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add MCP support for optimization mode",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-04T15:08:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a9a1f8e7fec14124c4808f2df46328aee09c80c3",
"body": "The two set_config tests mutated Jesse's module-global config, which leaks into\nlater tests in the same process: reset_config() rebinds the config global and\nuses a shallow backup_config, and several mode helpers are lru_cached, so the\nmutations couldn't be cleanly contained without breaking other g\n[…]\nonte Carlo / optimization run.\n\nFull suite now passes (477 passed) under the CI invocation\n(PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 python -m pytest).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "test_config_safety: drop global-mutating set_config tests to fix CI",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-04T15:08:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "753098ea69ef5c48da638b0f9ce27592c090a756",
"body": "Root cause: set_config() indexed each exchange by e['name'], but the API/MCP\nsend the exchanges map keyed by exchange name with no inner 'name' field. The\nresulting KeyError was raised inside a spawned backtest/RST worker that then\nexited via os._exit(), losing the traceback, so the session sat at d\n[…]\neached) via\n get_candle_import_status instead of only running/finished.\n- tests/test_config_safety.py: regression tests for both config fixes.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix silent MCP backtest/RST failures and harden config handling",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-04T11:47:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c744cf36d83b95a37702feb43041daeca9b7b1e6",
"body": null,
"is_bot": false,
"headline": "2.3.3",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-03T17:44:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f33232aa22bd226b6eb4ae3019839af5299e6058",
"body": null,
"is_bot": false,
"headline": "Update dashboard files",
"author_name": "Saleh Mir",
"author_login": "saleh-mir",
"committed_at": "2026-06-03T17:43:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aa1edde225f7c5a40b58b3dcf16a23c3e237c379",
"body": "Host the Lighter native signer binaries in the jesse package (like Apex's omni_files), so\nthey ship as plain package data in jesse's pure-Python wheel. jesse-live's compiled\ncibuildwheel build runs auditwheel/delocate, which reject these prebuilt binaries (macOS-26\ndylib, too-recent GLIBC in the Go .so); the pure-Python jesse wheel has no such repair step.\nThe jesse-live Lighter signer loads them from this package at runtime.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Lighter: vendor signer binaries here (pure-Python wheel) + bump to 2.3.1",
"author_name": "Saleh Mir",
"author_login": null,
"committed_at": "2026-06-03T16:37:26Z",
"body_truncated": false,
"is_coding_agent": true
}
],
"releases_count": 10,
"commits_last_year": 421,
"latest_release_at": "2026-08-01T16:20:58Z",
"latest_release_tag": "v3.0.0",
"releases_from_tags": true,
"days_since_last_push": 0,
"active_weeks_last_year": 47,
"days_since_latest_release": 0,
"mean_days_between_releases": 7
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "jesse",
"exists": true,
"license": null,
"keywords": [
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3"
],
"ecosystem": "pypi",
"matches_repo": true,
"registry_url": "https://pypi.org/project/jesse/",
"is_deprecated": false,
"latest_version": "3.0.0",
"repository_url": "https://github.com/jesse-ai/jesse",
"versions_count": 358,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": "2020-04-06T13:41:23.001389Z",
"latest_published_at": "2026-08-02T15:54:25.790263Z",
"latest_version_yanked": null,
"days_since_latest_publish": 0
}
]
},
"popularity": {
"forks": 1188,
"stars": 8281,
"watchers": 207,
"fork_history": {
"days": [
{
"date": "2021-04-10",
"count": 1
},
{
"date": "2021-04-12",
"count": 4
},
{
"date": "2021-04-13",
"count": 3
},
{
"date": "2021-04-14",
"count": 1
},
{
"date": "2021-04-15",
"count": 3
},
{
"date": "2021-04-17",
"count": 1
},
{
"date": "2021-04-19",
"count": 1
},
{
"date": "2021-04-20",
"count": 2
},
{
"date": "2021-04-21",
"count": 1
},
{
"date": "2021-04-22",
"count": 2
},
{
"date": "2021-04-23",
"count": 1
},
{
"date": "2021-04-25",
"count": 3
},
{
"date": "2021-04-27",
"count": 3
},
{
"date": "2021-04-28",
"count": 2
},
{
"date": "2021-04-29",
"count": 1
},
{
"date": "2021-04-30",
"count": 2
},
{
"date": "2021-05-02",
"count": 1
},
{
"date": "2021-05-03",
"count": 3
},
{
"date": "2021-05-04",
"count": 1
},
{
"date": "2021-05-05",
"count": 1
},
{
"date": "2021-05-07",
"count": 2
},
{
"date": "2021-05-08",
"count": 2
},
{
"date": "2021-05-10",
"count": 1
},
{
"date": "2021-05-11",
"count": 1
},
{
"date": "2021-05-13",
"count": 1
},
{
"date": "2021-05-18",
"count": 1
},
{
"date": "2021-05-19",
"count": 2
},
{
"date": "2021-05-20",
"count": 1
},
{
"date": "2021-05-21",
"count": 3
},
{
"date": "2021-05-22",
"count": 1
},
{
"date": "2021-05-24",
"count": 2
},
{
"date": "2021-05-26",
"count": 2
},
{
"date": "2021-05-28",
"count": 1
},
{
"date": "2021-06-01",
"count": 2
},
{
"date": "2021-06-02",
"count": 1
},
{
"date": "2021-06-03",
"count": 2
},
{
"date": "2021-06-04",
"count": 2
},
{
"date": "2021-06-06",
"count": 3
},
{
"date": "2021-06-07",
"count": 1
},
{
"date": "2021-06-08",
"count": 1
},
{
"date": "2021-06-10",
"count": 1
},
{
"date": "2021-06-13",
"count": 1
},
{
"date": "2021-06-14",
"count": 3
},
{
"date": "2021-06-18",
"count": 2
},
{
"date": "2021-06-20",
"count": 1
},
{
"date": "2021-06-22",
"count": 1
},
{
"date": "2021-06-27",
"count": 1
},
{
"date": "2021-07-02",
"count": 1
},
{
"date": "2021-07-04",
"count": 1
},
{
"date": "2021-07-06",
"count": 1
},
{
"date": "2021-07-08",
"count": 2
},
{
"date": "2021-07-11",
"count": 1
},
{
"date": "2021-07-12",
"count": 1
},
{
"date": "2021-07-14",
"count": 2
},
{
"date": "2021-07-18",
"count": 1
},
{
"date": "2021-07-22",
"count": 1
},
{
"date": "2021-07-29",
"count": 1
},
{
"date": "2021-07-30",
"count": 1
},
{
"date": "2021-08-02",
"count": 1
},
{
"date": "2021-08-04",
"count": 1
},
{
"date": "2021-08-06",
"count": 1
},
{
"date": "2021-08-08",
"count": 1
},
{
"date": "2021-08-10",
"count": 1
},
{
"date": "2021-08-12",
"count": 1
},
{
"date": "2021-08-13",
"count": 2
},
{
"date": "2021-08-17",
"count": 1
},
{
"date": "2021-08-18",
"count": 1
},
{
"date": "2021-08-19",
"count": 1
},
{
"date": "2021-08-22",
"count": 1
},
{
"date": "2021-08-27",
"count": 1
},
{
"date": "2021-08-28",
"count": 2
},
{
"date": "2021-08-29",
"count": 2
},
{
"date": "2021-08-31",
"count": 2
},
{
"date": "2021-09-02",
"count": 1
},
{
"date": "2021-09-05",
"count": 1
},
{
"date": "2021-09-06",
"count": 1
},
{
"date": "2021-09-07",
"count": 1
},
{
"date": "2021-09-14",
"count": 1
},
{
"date": "2021-09-17",
"count": 1
},
{
"date": "2021-09-21",
"count": 1
},
{
"date": "2021-09-22",
"count": 1
},
{
"date": "2021-09-24",
"count": 1
},
{
"date": "2021-09-25",
"count": 1
},
{
"date": "2021-09-28",
"count": 1
},
{
"date": "2021-09-29",
"count": 1
},
{
"date": "2021-09-30",
"count": 1
},
{
"date": "2021-10-03",
"count": 1
},
{
"date": "2021-10-08",
"count": 1
},
{
"date": "2021-10-09",
"count": 2
},
{
"date": "2021-10-10",
"count": 1
},
{
"date": "2021-10-12",
"count": 1
},
{
"date": "2021-10-14",
"count": 1
},
{
"date": "2021-10-16",
"count": 1
},
{
"date": "2021-10-20",
"count": 1
},
{
"date": "2021-10-24",
"count": 2
},
{
"date": "2021-10-29",
"count": 1
},
{
"date": "2021-11-03",
"count": 1
},
{
"date": "2021-11-04",
"count": 1
},
{
"date": "2021-11-05",
"count": 1
},
{
"date": "2021-11-06",
"count": 1
},
{
"date": "2021-11-11",
"count": 1
},
{
"date": "2021-11-23",
"count": 1
},
{
"date": "2021-11-24",
"count": 1
},
{
"date": "2021-11-25",
"count": 1
},
{
"date": "2021-12-11",
"count": 2
},
{
"date": "2021-12-14",
"count": 1
},
{
"date": "2021-12-17",
"count": 1
},
{
"date": "2021-12-20",
"count": 1
},
{
"date": "2021-12-22",
"count": 2
},
{
"date": "2021-12-26",
"count": 1
},
{
"date": "2021-12-27",
"count": 1
},
{
"date": "2021-12-29",
"count": 2
},
{
"date": "2021-12-31",
"count": 3
},
{
"date": "2022-01-03",
"count": 1
},
{
"date": "2022-01-06",
"count": 1
},
{
"date": "2022-01-08",
"count": 2
},
{
"date": "2022-01-09",
"count": 1
},
{
"date": "2022-01-10",
"count": 1
},
{
"date": "2022-01-14",
"count": 2
},
{
"date": "2022-01-20",
"count": 2
},
{
"date": "2022-01-23",
"count": 1
},
{
"date": "2022-01-24",
"count": 1
},
{
"date": "2022-01-25",
"count": 2
},
{
"date": "2022-01-26",
"count": 1
},
{
"date": "2022-01-27",
"count": 1
},
{
"date": "2022-01-28",
"count": 1
},
{
"date": "2022-01-29",
"count": 2
},
{
"date": "2022-01-31",
"count": 1
},
{
"date": "2022-02-03",
"count": 2
},
{
"date": "2022-02-05",
"count": 2
},
{
"date": "2022-02-07",
"count": 1
},
{
"date": "2022-02-08",
"count": 1
},
{
"date": "2022-02-09",
"count": 1
},
{
"date": "2022-02-15",
"count": 1
},
{
"date": "2022-02-18",
"count": 1
},
{
"date": "2022-02-19",
"count": 2
},
{
"date": "2022-02-20",
"count": 2
},
{
"date": "2022-02-27",
"count": 1
},
{
"date": "2022-03-01",
"count": 1
},
{
"date": "2022-03-04",
"count": 1
},
{
"date": "2022-03-06",
"count": 1
},
{
"date": "2022-03-07",
"count": 1
},
{
"date": "2022-03-10",
"count": 1
},
{
"date": "2022-03-15",
"count": 1
},
{
"date": "2022-03-19",
"count": 1
},
{
"date": "2022-03-21",
"count": 1
},
{
"date": "2022-03-22",
"count": 1
},
{
"date": "2022-03-23",
"count": 1
},
{
"date": "2022-03-24",
"count": 1
},
{
"date": "2022-03-27",
"count": 1
},
{
"date": "2022-03-29",
"count": 1
},
{
"date": "2022-04-05",
"count": 1
},
{
"date": "2022-04-08",
"count": 1
},
{
"date": "2022-04-10",
"count": 1
},
{
"date": "2022-04-13",
"count": 1
},
{
"date": "2022-04-14",
"count": 1
},
{
"date": "2022-04-17",
"count": 2
},
{
"date": "2022-04-19",
"count": 2
},
{
"date": "2022-04-20",
"count": 3
},
{
"date": "2022-04-22",
"count": 1
},
{
"date": "2022-04-29",
"count": 1
},
{
"date": "2022-05-01",
"count": 1
},
{
"date": "2022-05-03",
"count": 1
},
{
"date": "2022-05-04",
"count": 1
},
{
"date": "2022-05-05",
"count": 1
},
{
"date": "2022-05-06",
"count": 1
},
{
"date": "2022-05-10",
"count": 2
},
{
"date": "2022-05-11",
"count": 1
},
{
"date": "2022-05-13",
"count": 1
},
{
"date": "2022-05-14",
"count": 2
},
{
"date": "2022-05-18",
"count": 1
},
{
"date": "2022-05-22",
"count": 1
},
{
"date": "2022-05-23",
"count": 1
},
{
"date": "2022-05-30",
"count": 1
},
{
"date": "2022-06-02",
"count": 1
},
{
"date": "2022-06-03",
"count": 1
},
{
"date": "2022-06-08",
"count": 1
},
{
"date": "2022-06-11",
"count": 1
},
{
"date": "2022-06-13",
"count": 1
},
{
"date": "2022-06-14",
"count": 1
},
{
"date": "2022-06-16",
"count": 1
},
{
"date": "2022-06-26",
"count": 1
},
{
"date": "2022-07-05",
"count": 2
},
{
"date": "2022-07-07",
"count": 1
},
{
"date": "2022-07-12",
"count": 1
},
{
"date": "2022-07-13",
"count": 1
},
{
"date": "2022-07-14",
"count": 2
},
{
"date": "2022-07-19",
"count": 1
},
{
"date": "2022-07-21",
"count": 1
},
{
"date": "2022-07-27",
"count": 1
},
{
"date": "2022-07-28",
"count": 1
},
{
"date": "2022-07-29",
"count": 1
},
{
"date": "2022-07-30",
"count": 1
},
{
"date": "2022-08-01",
"count": 1
},
{
"date": "2022-08-05",
"count": 2
},
{
"date": "2022-08-06",
"count": 1
},
{
"date": "2022-08-09",
"count": 3
},
{
"date": "2022-08-12",
"count": 1
},
{
"date": "2022-08-15",
"count": 2
},
{
"date": "2022-08-19",
"count": 1
},
{
"date": "2022-08-21",
"count": 2
},
{
"date": "2022-08-27",
"count": 1
},
{
"date": "2022-08-28",
"count": 1
},
{
"date": "2022-08-30",
"count": 1
},
{
"date": "2022-08-31",
"count": 1
},
{
"date": "2022-09-01",
"count": 1
},
{
"date": "2022-09-02",
"count": 2
},
{
"date": "2022-09-06",
"count": 1
},
{
"date": "2022-09-10",
"count": 1
},
{
"date": "2022-09-11",
"count": 1
},
{
"date": "2022-09-15",
"count": 2
},
{
"date": "2022-09-20",
"count": 1
},
{
"date": "2022-09-21",
"count": 1
},
{
"date": "2022-09-22",
"count": 2
},
{
"date": "2022-09-25",
"count": 1
},
{
"date": "2022-09-26",
"count": 2
},
{
"date": "2022-10-04",
"count": 1
},
{
"date": "2022-10-06",
"count": 1
},
{
"date": "2022-10-07",
"count": 3
},
{
"date": "2022-10-08",
"count": 1
},
{
"date": "2022-10-09",
"count": 1
},
{
"date": "2022-10-10",
"count": 1
},
{
"date": "2022-10-13",
"count": 1
},
{
"date": "2022-10-14",
"count": 1
},
{
"date": "2022-10-23",
"count": 1
},
{
"date": "2022-10-24",
"count": 1
},
{
"date": "2022-10-25",
"count": 1
},
{
"date": "2022-10-28",
"count": 1
},
{
"date": "2022-11-01",
"count": 1
},
{
"date": "2022-11-03",
"count": 1
},
{
"date": "2022-11-04",
"count": 1
},
{
"date": "2022-11-05",
"count": 1
},
{
"date": "2022-11-27",
"count": 1
},
{
"date": "2022-11-28",
"count": 1
},
{
"date": "2022-11-30",
"count": 1
},
{
"date": "2022-12-03",
"count": 2
},
{
"date": "2022-12-04",
"count": 1
},
{
"date": "2022-12-09",
"count": 1
},
{
"date": "2022-12-12",
"count": 1
},
{
"date": "2022-12-16",
"count": 1
},
{
"date": "2022-12-28",
"count": 1
},
{
"date": "2022-12-31",
"count": 1
},
{
"date": "2023-01-01",
"count": 1
},
{
"date": "2023-01-22",
"count": 1
},
{
"date": "2023-01-23",
"count": 1
},
{
"date": "2023-01-24",
"count": 1
},
{
"date": "2023-01-28",
"count": 1
},
{
"date": "2023-01-31",
"count": 1
},
{
"date": "2023-02-09",
"count": 1
},
{
"date": "2023-02-18",
"count": 1
},
{
"date": "2023-02-19",
"count": 1
},
{
"date": "2023-02-20",
"count": 2
},
{
"date": "2023-02-21",
"count": 1
},
{
"date": "2023-03-01",
"count": 1
},
{
"date": "2023-03-10",
"count": 1
},
{
"date": "2023-03-13",
"count": 1
},
{
"date": "2023-03-15",
"count": 2
},
{
"date": "2023-03-25",
"count": 1
},
{
"date": "2023-03-27",
"count": 1
},
{
"date": "2023-04-02",
"count": 1
},
{
"date": "2023-04-03",
"count": 1
},
{
"date": "2023-04-05",
"count": 1
},
{
"date": "2023-04-07",
"count": 2
},
{
"date": "2023-04-08",
"count": 1
},
{
"date": "2023-04-13",
"count": 1
},
{
"date": "2023-04-14",
"count": 2
},
{
"date": "2023-04-20",
"count": 1
},
{
"date": "2023-04-23",
"count": 1
},
{
"date": "2023-04-25",
"count": 2
},
{
"date": "2023-04-26",
"count": 1
},
{
"date": "2023-05-06",
"count": 3
},
{
"date": "2023-05-08",
"count": 1
},
{
"date": "2023-05-09",
"count": 1
},
{
"date": "2023-05-10",
"count": 1
},
{
"date": "2023-05-11",
"count": 1
},
{
"date": "2023-05-12",
"count": 1
},
{
"date": "2023-05-30",
"count": 1
},
{
"date": "2023-06-02",
"count": 1
},
{
"date": "2023-06-14",
"count": 2
},
{
"date": "2023-06-17",
"count": 1
},
{
"date": "2023-06-21",
"count": 1
},
{
"date": "2023-06-26",
"count": 1
},
{
"date": "2023-07-02",
"count": 2
},
{
"date": "2023-07-08",
"count": 1
},
{
"date": "2023-07-09",
"count": 1
},
{
"date": "2023-07-11",
"count": 1
},
{
"date": "2023-07-15",
"count": 1
},
{
"date": "2023-07-23",
"count": 1
},
{
"date": "2023-07-30",
"count": 1
},
{
"date": "2023-08-09",
"count": 1
},
{
"date": "2023-08-15",
"count": 1
},
{
"date": "2023-08-18",
"count": 2
},
{
"date": "2023-08-22",
"count": 1
},
{
"date": "2023-08-25",
"count": 1
},
{
"date": "2023-09-03",
"count": 1
},
{
"date": "2023-09-05",
"count": 1
},
{
"date": "2023-09-08",
"count": 1
},
{
"date": "2023-09-12",
"count": 1
},
{
"date": "2023-09-17",
"count": 1
},
{
"date": "2023-09-25",
"count": 2
},
{
"date": "2023-10-02",
"count": 2
},
{
"date": "2023-10-05",
"count": 1
},
{
"date": "2023-10-06",
"count": 1
},
{
"date": "2023-10-16",
"count": 2
},
{
"date": "2023-10-18",
"count": 1
},
{
"date": "2023-11-02",
"count": 1
},
{
"date": "2023-11-10",
"count": 1
},
{
"date": "2023-11-14",
"count": 1
},
{
"date": "2023-11-15",
"count": 1
},
{
"date": "2023-11-20",
"count": 1
},
{
"date": "2023-11-25",
"count": 1
},
{
"date": "2023-12-17",
"count": 1
},
{
"date": "2023-12-22",
"count": 1
},
{
"date": "2023-12-24",
"count": 1
},
{
"date": "2023-12-26",
"count": 1
},
{
"date": "2023-12-28",
"count": 1
},
{
"date": "2024-01-04",
"count": 1
},
{
"date": "2024-01-06",
"count": 1
},
{
"date": "2024-01-11",
"count": 1
},
{
"date": "2024-01-17",
"count": 1
},
{
"date": "2024-01-21",
"count": 1
},
{
"date": "2024-01-28",
"count": 1
},
{
"date": "2024-02-16",
"count": 1
},
{
"date": "2024-02-19",
"count": 1
},
{
"date": "2024-02-22",
"count": 1
},
{
"date": "2024-02-23",
"count": 2
},
{
"date": "2024-02-25",
"count": 3
},
{
"date": "2024-02-27",
"count": 2
},
{
"date": "2024-03-04",
"count": 1
},
{
"date": "2024-03-06",
"count": 1
},
{
"date": "2024-03-07",
"count": 2
},
{
"date": "2024-03-08",
"count": 1
},
{
"date": "2024-03-14",
"count": 1
},
{
"date": "2024-03-15",
"count": 1
},
{
"date": "2024-03-19",
"count": 1
},
{
"date": "2024-03-23",
"count": 1
},
{
"date": "2024-03-31",
"count": 1
},
{
"date": "2024-04-02",
"count": 1
},
{
"date": "2024-04-04",
"count": 1
},
{
"date": "2024-04-14",
"count": 1
},
{
"date": "2024-04-15",
"count": 1
},
{
"date": "2024-04-16",
"count": 1
},
{
"date": "2024-04-18",
"count": 1
},
{
"date": "2024-04-19",
"count": 2
},
{
"date": "2024-04-20",
"count": 2
},
{
"date": "2024-04-24",
"count": 1
},
{
"date": "2024-04-26",
"count": 1
},
{
"date": "2024-04-30",
"count": 1
},
{
"date": "2024-05-03",
"count": 1
},
{
"date": "2024-05-05",
"count": 2
},
{
"date": "2024-05-10",
"count": 1
},
{
"date": "2024-05-16",
"count": 1
},
{
"date": "2024-05-20",
"count": 1
},
{
"date": "2024-05-22",
"count": 1
},
{
"date": "2024-05-30",
"count": 1
},
{
"date": "2024-05-31",
"count": 1
},
{
"date": "2024-06-01",
"count": 1
},
{
"date": "2024-06-10",
"count": 1
},
{
"date": "2024-06-13",
"count": 2
},
{
"date": "2024-06-20",
"count": 1
},
{
"date": "2024-06-21",
"count": 1
},
{
"date": "2024-07-02",
"count": 3
},
{
"date": "2024-07-11",
"count": 1
},
{
"date": "2024-07-15",
"count": 1
},
{
"date": "2024-07-18",
"count": 1
},
{
"date": "2024-07-25",
"count": 1
},
{
"date": "2024-07-28",
"count": 1
},
{
"date": "2024-08-15",
"count": 2
},
{
"date": "2024-08-21",
"count": 1
},
{
"date": "2024-08-24",
"count": 1
},
{
"date": "2024-08-26",
"count": 1
},
{
"date": "2024-08-27",
"count": 2
},
{
"date": "2024-08-28",
"count": 1
},
{
"date": "2024-08-29",
"count": 1
},
{
"date": "2024-09-01",
"count": 1
},
{
"date": "2024-09-03",
"count": 1
},
{
"date": "2024-09-10",
"count": 1
},
{
"date": "2024-09-11",
"count": 1
},
{
"date": "2024-09-16",
"count": 1
},
{
"date": "2024-09-19",
"count": 1
},
{
"date": "2024-09-22",
"count": 1
},
{
"date": "2024-09-29",
"count": 1
},
{
"date": "2024-10-03",
"count": 1
},
{
"date": "2024-10-09",
"count": 1
},
{
"date": "2024-10-12",
"count": 2
},
{
"date": "2024-10-15",
"count": 1
},
{
"date": "2024-10-17",
"count": 1
},
{
"date": "2024-10-18",
"count": 2
},
{
"date": "2024-10-19",
"count": 1
},
{
"date": "2024-10-21",
"count": 1
},
{
"date": "2024-10-27",
"count": 1
},
{
"date": "2024-10-31",
"count": 1
},
{
"date": "2024-11-03",
"count": 1
},
{
"date": "2024-11-04",
"count": 1
},
{
"date": "2024-11-05",
"count": 1
},
{
"date": "2024-11-08",
"count": 1
},
{
"date": "2024-11-11",
"count": 1
},
{
"date": "2024-11-12",
"count": 1
},
{
"date": "2024-11-14",
"count": 1
},
{
"date": "2024-11-20",
"count": 2
},
{
"date": "2024-11-21",
"count": 2
},
{
"date": "2024-11-23",
"count": 2
},
{
"date": "2024-11-24",
"count": 1
},
{
"date": "2024-11-25",
"count": 1
},
{
"date": "2024-11-29",
"count": 1
},
{
"date": "2024-12-02",
"count": 1
},
{
"date": "2024-12-03",
"count": 1
},
{
"date": "2024-12-07",
"count": 1
},
{
"date": "2024-12-12",
"count": 1
},
{
"date": "2024-12-13",
"count": 1
},
{
"date": "2024-12-15",
"count": 1
},
{
"date": "2024-12-17",
"count": 1
},
{
"date": "2024-12-22",
"count": 1
},
{
"date": "2024-12-23",
"count": 2
},
{
"date": "2024-12-24",
"count": 1
},
{
"date": "2024-12-25",
"count": 1
},
{
"date": "2024-12-28",
"count": 1
},
{
"date": "2024-12-30",
"count": 1
},
{
"date": "2025-01-01",
"count": 1
},
{
"date": "2025-01-02",
"count": 1
},
{
"date": "2025-01-08",
"count": 1
},
{
"date": "2025-01-09",
"count": 2
},
{
"date": "2025-01-10",
"count": 1
},
{
"date": "2025-01-11",
"count": 1
},
{
"date": "2025-01-18",
"count": 2
},
{
"date": "2025-01-19",
"count": 2
},
{
"date": "2025-01-20",
"count": 2
},
{
"date": "2025-01-21",
"count": 2
},
{
"date": "2025-01-24",
"count": 1
},
{
"date": "2025-01-28",
"count": 2
},
{
"date": "2025-01-29",
"count": 2
},
{
"date": "2025-02-01",
"count": 2
},
{
"date": "2025-02-02",
"count": 3
},
{
"date": "2025-02-03",
"count": 1
},
{
"date": "2025-02-05",
"count": 1
},
{
"date": "2025-02-14",
"count": 2
},
{
"date": "2025-02-18",
"count": 1
},
{
"date": "2025-02-19",
"count": 1
},
{
"date": "2025-02-20",
"count": 1
},
{
"date": "2025-02-23",
"count": 1
},
{
"date": "2025-02-26",
"count": 1
},
{
"date": "2025-03-01",
"count": 2
},
{
"date": "2025-03-05",
"count": 1
},
{
"date": "2025-03-06",
"count": 1
},
{
"date": "2025-03-07",
"count": 1
},
{
"date": "2025-03-09",
"count": 1
},
{
"date": "2025-03-11",
"count": 2
},
{
"date": "2025-03-12",
"count": 2
},
{
"date": "2025-03-14",
"count": 1
},
{
"date": "2025-03-15",
"count": 1
},
{
"date": "2025-03-16",
"count": 1
},
{
"date": "2025-03-20",
"count": 2
},
{
"date": "2025-03-21",
"count": 1
},
{
"date": "2025-03-22",
"count": 1
},
{
"date": "2025-03-23",
"count": 1
},
{
"date": "2025-03-24",
"count": 1
},
{
"date": "2025-03-28",
"count": 2
},
{
"date": "2025-03-30",
"count": 1
},
{
"date": "2025-04-01",
"count": 2
},
{
"date": "2025-04-09",
"count": 1
},
{
"date": "2025-04-10",
"count": 2
},
{
"date": "2025-04-12",
"count": 1
},
{
"date": "2025-04-21",
"count": 1
},
{
"date": "2025-04-23",
"count": 1
},
{
"date": "2025-04-24",
"count": 2
},
{
"date": "2025-04-25",
"count": 1
},
{
"date": "2025-04-29",
"count": 1
},
{
"date": "2025-05-12",
"count": 2
},
{
"date": "2025-05-14",
"count": 1
},
{
"date": "2025-05-15",
"count": 1
},
{
"date": "2025-05-17",
"count": 1
},
{
"date": "2025-05-18",
"count": 1
},
{
"date": "2025-05-21",
"count": 2
},
{
"date": "2025-05-24",
"count": 1
},
{
"date": "2025-05-26",
"count": 1
},
{
"date": "2025-05-27",
"count": 1
},
{
"date": "2025-05-28",
"count": 3
},
{
"date": "2025-05-29",
"count": 2
},
{
"date": "2025-06-01",
"count": 2
},
{
"date": "2025-06-04",
"count": 2
},
{
"date": "2025-06-06",
"count": 1
},
{
"date": "2025-06-07",
"count": 2
},
{
"date": "2025-06-08",
"count": 1
},
{
"date": "2025-06-09",
"count": 2
},
{
"date": "2025-06-10",
"count": 1
},
{
"date": "2025-06-12",
"count": 1
},
{
"date": "2025-06-13",
"count": 1
},
{
"date": "2025-06-14",
"count": 1
},
{
"date": "2025-06-16",
"count": 1
},
{
"date": "2025-06-19",
"count": 1
},
{
"date": "2025-06-21",
"count": 2
},
{
"date": "2025-06-23",
"count": 1
},
{
"date": "2025-06-24",
"count": 1
},
{
"date": "2025-06-26",
"count": 1
},
{
"date": "2025-06-27",
"count": 1
},
{
"date": "2025-06-29",
"count": 1
},
{
"date": "2025-07-02",
"count": 3
},
{
"date": "2025-07-05",
"count": 1
},
{
"date": "2025-07-06",
"count": 1
},
{
"date": "2025-07-07",
"count": 1
},
{
"date": "2025-07-09",
"count": 1
},
{
"date": "2025-07-10",
"count": 2
},
{
"date": "2025-07-13",
"count": 3
},
{
"date": "2025-07-14",
"count": 1
},
{
"date": "2025-07-15",
"count": 1
},
{
"date": "2025-07-16",
"count": 1
},
{
"date": "2025-07-17",
"count": 1
},
{
"date": "2025-07-18",
"count": 1
},
{
"date": "2025-07-19",
"count": 2
},
{
"date": "2025-07-21",
"count": 1
},
{
"date": "2025-07-25",
"count": 1
},
{
"date": "2025-07-26",
"count": 1
},
{
"date": "2025-07-29",
"count": 2
},
{
"date": "2025-07-30",
"count": 2
},
{
"date": "2025-07-31",
"count": 1
},
{
"date": "2025-08-01",
"count": 1
},
{
"date": "2025-08-02",
"count": 1
},
{
"date": "2025-08-03",
"count": 1
},
{
"date": "2025-08-04",
"count": 2
},
{
"date": "2025-08-05",
"count": 2
},
{
"date": "2025-08-07",
"count": 1
},
{
"date": "2025-08-09",
"count": 1
},
{
"date": "2025-08-10",
"count": 2
},
{
"date": "2025-08-11",
"count": 1
},
{
"date": "2025-08-12",
"count": 2
},
{
"date": "2025-08-13",
"count": 1
},
{
"date": "2025-08-16",
"count": 1
},
{
"date": "2025-08-22",
"count": 1
},
{
"date": "2025-08-25",
"count": 1
},
{
"date": "2025-08-28",
"count": 2
},
{
"date": "2025-08-29",
"count": 1
},
{
"date": "2025-08-31",
"count": 1
},
{
"date": "2025-09-01",
"count": 2
},
{
"date": "2025-09-04",
"count": 2
},
{
"date": "2025-09-05",
"count": 1
},
{
"date": "2025-09-07",
"count": 4
},
{
"date": "2025-09-09",
"count": 2
},
{
"date": "2025-09-12",
"count": 1
},
{
"date": "2025-09-14",
"count": 1
},
{
"date": "2025-09-19",
"count": 1
},
{
"date": "2025-09-20",
"count": 1
},
{
"date": "2025-09-21",
"count": 1
},
{
"date": "2025-09-22",
"count": 2
},
{
"date": "2025-09-23",
"count": 1
},
{
"date": "2025-09-25",
"count": 1
},
{
"date": "2025-09-26",
"count": 1
},
{
"date": "2025-09-27",
"count": 1
},
{
"date": "2025-09-30",
"count": 3
},
{
"date": "2025-10-08",
"count": 1
},
{
"date": "2025-10-09",
"count": 9
},
{
"date": "2025-10-10",
"count": 3
},
{
"date": "2025-10-12",
"count": 1
},
{
"date": "2025-10-15",
"count": 1
},
{
"date": "2025-10-16",
"count": 2
},
{
"date": "2025-10-17",
"count": 1
},
{
"date": "2025-10-24",
"count": 1
},
{
"date": "2025-10-29",
"count": 1
},
{
"date": "2025-10-30",
"count": 1
},
{
"date": "2025-10-31",
"count": 1
},
{
"date": "2025-11-01",
"count": 2
},
{
"date": "2025-11-03",
"count": 1
},
{
"date": "2025-11-04",
"count": 1
},
{
"date": "2025-11-05",
"count": 5
},
{
"date": "2025-11-08",
"count": 1
},
{
"date": "2025-11-12",
"count": 3
},
{
"date": "2025-11-14",
"count": 2
},
{
"date": "2025-11-15",
"count": 1
},
{
"date": "2025-11-19",
"count": 1
},
{
"date": "2025-11-20",
"count": 3
},
{
"date": "2025-11-21",
"count": 4
},
{
"date": "2025-11-22",
"count": 4
},
{
"date": "2025-11-23",
"count": 4
},
{
"date": "2025-11-24",
"count": 2
},
{
"date": "2025-11-25",
"count": 2
},
{
"date": "2025-11-27",
"count": 1
},
{
"date": "2025-11-28",
"count": 1
},
{
"date": "2025-12-01",
"count": 2
},
{
"date": "2025-12-02",
"count": 1
},
{
"date": "2025-12-03",
"count": 1
},
{
"date": "2025-12-05",
"count": 1
},
{
"date": "2025-12-06",
"count": 2
},
{
"date": "2025-12-07",
"count": 1
},
{
"date": "2025-12-08",
"count": 2
},
{
"date": "2025-12-09",
"count": 1
},
{
"date": "2025-12-10",
"count": 2
},
{
"date": "2025-12-13",
"count": 1
},
{
"date": "2025-12-15",
"count": 1
},
{
"date": "2025-12-16",
"count": 2
},
{
"date": "2025-12-18",
"count": 2
},
{
"date": "2025-12-23",
"count": 1
},
{
"date": "2025-12-24",
"count": 1
},
{
"date": "2025-12-25",
"count": 3
},
{
"date": "2025-12-27",
"count": 1
},
{
"date": "2025-12-28",
"count": 2
},
{
"date": "2025-12-29",
"count": 1
},
{
"date": "2025-12-31",
"count": 2
},
{
"date": "2026-01-01",
"count": 1
},
{
"date": "2026-01-02",
"count": 1
},
{
"date": "2026-01-08",
"count": 1
},
{
"date": "2026-01-11",
"count": 1
},
{
"date": "2026-01-13",
"count": 1
},
{
"date": "2026-01-14",
"count": 4
},
{
"date": "2026-01-15",
"count": 2
},
{
"date": "2026-01-16",
"count": 1
},
{
"date": "2026-01-17",
"count": 1
},
{
"date": "2026-01-22",
"count": 1
},
{
"date": "2026-01-26",
"count": 1
},
{
"date": "2026-01-28",
"count": 1
},
{
"date": "2026-01-29",
"count": 2
},
{
"date": "2026-02-01",
"count": 2
},
{
"date": "2026-02-03",
"count": 1
},
{
"date": "2026-02-05",
"count": 3
},
{
"date": "2026-02-06",
"count": 1
},
{
"date": "2026-02-07",
"count": 1
},
{
"date": "2026-02-09",
"count": 2
},
{
"date": "2026-02-10",
"count": 3
},
{
"date": "2026-02-12",
"count": 1
},
{
"date": "2026-02-15",
"count": 1
},
{
"date": "2026-02-18",
"count": 2
},
{
"date": "2026-02-19",
"count": 1
},
{
"date": "2026-02-22",
"count": 3
},
{
"date": "2026-02-23",
"count": 3
},
{
"date": "2026-02-25",
"count": 1
},
{
"date": "2026-02-28",
"count": 1
},
{
"date": "2026-03-01",
"count": 1
},
{
"date": "2026-03-02",
"count": 1
},
{
"date": "2026-03-04",
"count": 1
},
{
"date": "2026-03-05",
"count": 1
},
{
"date": "2026-03-06",
"count": 2
},
{
"date": "2026-03-09",
"count": 1
},
{
"date": "2026-03-10",
"count": 2
},
{
"date": "2026-03-13",
"count": 1
},
{
"date": "2026-03-15",
"count": 1
},
{
"date": "2026-03-17",
"count": 3
},
{
"date": "2026-03-19",
"count": 1
},
{
"date": "2026-03-22",
"count": 1
},
{
"date": "2026-03-24",
"count": 1
},
{
"date": "2026-03-25",
"count": 2
},
{
"date": "2026-03-26",
"count": 1
},
{
"date": "2026-03-28",
"count": 1
},
{
"date": "2026-03-29",
"count": 1
},
{
"date": "2026-03-31",
"count": 2
},
{
"date": "2026-04-01",
"count": 1
},
{
"date": "2026-04-02",
"count": 1
},
{
"date": "2026-04-04",
"count": 1
},
{
"date": "2026-04-06",
"count": 1
},
{
"date": "2026-04-08",
"count": 1
},
{
"date": "2026-04-09",
"count": 2
},
{
"date": "2026-04-10",
"count": 1
},
{
"date": "2026-04-11",
"count": 2
},
{
"date": "2026-04-13",
"count": 1
},
{
"date": "2026-04-14",
"count": 1
},
{
"date": "2026-04-17",
"count": 1
},
{
"date": "2026-04-18",
"count": 1
},
{
"date": "2026-04-19",
"count": 2
},
{
"date": "2026-04-21",
"count": 1
},
{
"date": "2026-04-23",
"count": 6
},
{
"date": "2026-04-24",
"count": 3
},
{
"date": "2026-04-25",
"count": 2
},
{
"date": "2026-04-26",
"count": 2
},
{
"date": "2026-04-27",
"count": 3
},
{
"date": "2026-04-29",
"count": 1
},
{
"date": "2026-05-01",
"count": 1
},
{
"date": "2026-05-02",
"count": 1
},
{
"date": "2026-05-03",
"count": 3
},
{
"date": "2026-05-04",
"count": 1
},
{
"date": "2026-05-05",
"count": 1
},
{
"date": "2026-05-06",
"count": 1
},
{
"date": "2026-05-07",
"count": 3
},
{
"date": "2026-05-09",
"count": 1
},
{
"date": "2026-05-10",
"count": 3
},
{
"date": "2026-05-12",
"count": 2
},
{
"date": "2026-05-13",
"count": 3
},
{
"date": "2026-05-14",
"count": 1
},
{
"date": "2026-05-16",
"count": 1
},
{
"date": "2026-05-17",
"count": 1
},
{
"date": "2026-05-21",
"count": 1
},
{
"date": "2026-05-22",
"count": 1
},
{
"date": "2026-05-23",
"count": 1
},
{
"date": "2026-05-25",
"count": 1
},
{
"date": "2026-05-26",
"count": 3
},
{
"date": "2026-05-30",
"count": 1
},
{
"date": "2026-05-31",
"count": 4
},
{
"date": "2026-06-05",
"count": 1
},
{
"date": "2026-06-06",
"count": 1
},
{
"date": "2026-06-07",
"count": 2
},
{
"date": "2026-06-09",
"count": 2
},
{
"date": "2026-06-10",
"count": 2
},
{
"date": "2026-06-11",
"count": 1
},
{
"date": "2026-06-13",
"count": 4
},
{
"date": "2026-06-14",
"count": 1
},
{
"date": "2026-06-15",
"count": 3
},
{
"date": "2026-06-16",
"count": 1
},
{
"date": "2026-06-17",
"count": 1
},
{
"date": "2026-06-19",
"count": 2
},
{
"date": "2026-06-21",
"count": 1
},
{
"date": "2026-06-22",
"count": 1
},
{
"date": "2026-06-23",
"count": 2
},
{
"date": "2026-06-25",
"count": 1
},
{
"date": "2026-06-27",
"count": 2
},
{
"date": "2026-06-28",
"count": 1
},
{
"date": "2026-06-29",
"count": 3
},
{
"date": "2026-06-30",
"count": 1
},
{
"date": "2026-07-01",
"count": 2
},
{
"date": "2026-07-04",
"count": 1
},
{
"date": "2026-07-05",
"count": 1
},
{
"date": "2026-07-08",
"count": 4
},
{
"date": "2026-07-09",
"count": 1
},
{
"date": "2026-07-10",
"count": 1
},
{
"date": "2026-07-11",
"count": 1
},
{
"date": "2026-07-12",
"count": 1
},
{
"date": "2026-07-15",
"count": 3
},
{
"date": "2026-07-18",
"count": 1
},
{
"date": "2026-07-19",
"count": 1
},
{
"date": "2026-07-21",
"count": 5
},
{
"date": "2026-07-22",
"count": 3
},
{
"date": "2026-07-23",
"count": 1
},
{
"date": "2026-07-26",
"count": 1
},
{
"date": "2026-07-27",
"count": 2
},
{
"date": "2026-07-28",
"count": 1
},
{
"date": "2026-07-29",
"count": 3
},
{
"date": "2026-07-31",
"count": 2
}
],
"complete": false,
"collected": 1000,
"total_forks": 1188
},
"star_history": null,
"open_issues_and_prs": 9
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 6915612,
"source_files_sampled": 1106,
"oversized_source_files": 53,
"agent_instruction_files": [
"AGENTS.md"
],
"agent_instruction_max_bytes": 10691
},
"dependencies": {
"manifests": [
"requirements.txt",
"setup.py"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 2,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 36,
"direct_affected_count": 0
},
"ecosystems": [
"pypi"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "aiofiles",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "aioredis",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "arrow",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "blinker",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "click",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "cryptography",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "ecdsa",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "eth-account",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "fastapi",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "fnc",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "jesse-rust",
"direct": false,
"version": "1.2.0",
"ecosystem": "pypi"
},
{
"name": "joblib",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "matplotlib",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "mcp",
"direct": false,
"version": "1.28.1",
"ecosystem": "pypi"
},
{
"name": "msgpack",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "numpy",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "optuna",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pandas",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "peewee",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "psycopg2-binary",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pydash",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pyjwt",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pytest",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "python-dotenv",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "ray",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "redis",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "requests",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "scikit-learn",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "scipy",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "simplejson",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "starkbank-ecdsa",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "statsmodels",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "tabulate",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "timeloop",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "uvicorn",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "websocket-client",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "websockets",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "wsaccel",
"direct": false,
"version": null,
"ecosystem": "pypi"
}
],
"collected": true,
"truncated": false,
"total_count": 38,
"direct_count": 0,
"indirect_count": 38
}
},
"maintainership": {
"issues": {
"open_prs": 4,
"merged_prs": 278,
"open_issues": 5,
"closed_ratio": 0.968,
"closed_issues": 153,
"closed_unmerged_prs": 144
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "saleh-mir",
"commits": 2125,
"avatar_url": "https://avatars.githubusercontent.com/u/69156720?v=4"
},
{
"type": "User",
"login": "cryptocoinserver",
"commits": 608,
"avatar_url": "https://avatars.githubusercontent.com/u/16636744?v=4"
},
{
"type": "User",
"login": "morteza-koohgard",
"commits": 185,
"avatar_url": "https://avatars.githubusercontent.com/u/78785107?v=4"
},
{
"type": "User",
"login": "pyup-bot",
"commits": 116,
"avatar_url": "https://avatars.githubusercontent.com/u/16239342?v=4"
},
{
"type": "User",
"login": "saleh-old",
"commits": 91,
"avatar_url": "https://avatars.githubusercontent.com/u/13378447?v=4"
},
{
"type": "User",
"login": "yakir4123",
"commits": 59,
"avatar_url": "https://avatars.githubusercontent.com/u/38066978?v=4"
},
{
"type": "User",
"login": "kakulukia",
"commits": 21,
"avatar_url": "https://avatars.githubusercontent.com/u/96352?v=4"
},
{
"type": "User",
"login": "MakanShabani",
"commits": 13,
"avatar_url": "https://avatars.githubusercontent.com/u/106467787?v=4"
},
{
"type": "User",
"login": "yakiraid",
"commits": 13,
"avatar_url": "https://avatars.githubusercontent.com/u/147972785?v=4"
},
{
"type": "User",
"login": "julesGoullee",
"commits": 10,
"avatar_url": "https://avatars.githubusercontent.com/u/6892100?v=4"
}
],
"contributors_sampled": 50,
"top_contributor_share": 0.638
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"codeql-analysis.yml",
"docker-publish.yml",
"python-package.yml"
],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 1,
"reason": "binaries present in source code",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "2 out of 2 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/28 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 7 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 7,
"reason": "SAST tool detected but not run on all commits",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "23 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "1c9ce36c926b23e51520bfa6818a7ea84501c539",
"ran_at": "2026-08-02T16:00:07Z",
"aggregate_score": 4.3,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": true,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-08-02T15:57:13Z",
"oldest_open_prs": [
{
"number": 602,
"created_at": "2026-07-31T06:30:25Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 604,
"created_at": "2026-07-31T14:08:47Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 605,
"created_at": "2026-07-31T14:08:51Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 608,
"created_at": "2026-07-31T22:00:15Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-29T16:00:37Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 601,
"created_at": "2026-07-31T06:11:40Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 603,
"created_at": "2026-07-31T06:41:15Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 606,
"created_at": "2026-07-31T18:55:55Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 607,
"created_at": "2026-07-31T21:59:48Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 609,
"created_at": "2026-07-31T22:36:22Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/jesse-ai/jesse",
"host": "github.com",
"name": "jesse",
"owner": "jesse-ai"
},
"metrics": {
"overall": {
"key": "overall",
"band": "excellent",
"name": "Overall health",
"note": "The weighted overall 73 is calibrated to 87 on the published index scale (record calibration 2026-08-02).",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 73,
"calibrated": 87,
"calibration": "2026-08-02"
}
}
],
"value": 87,
"inputs": {
"security": 54,
"vitality": 93,
"community": 76,
"governance": 68,
"calibration": "2026-08-02",
"engineering": 71,
"ai_readiness": 60,
"weighted_overall_raw": 73
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "exceptional",
"name": "Vitality",
"value": 93,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "exceptional",
"name": "Development activity",
"note": null,
"notes": [],
"value": 96,
"inputs": {
"commits_last_year": 421,
"human_commit_share": 0.99,
"days_since_last_push": 0,
"active_weeks_last_year": 47
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "47/52 weeks with commits",
"points": 32.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 47
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "421 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 421
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 88,
"inputs": {
"releases_count": 10,
"latest_release_tag": "v3.0.0",
"releases_from_tags": true,
"days_since_latest_release": 0,
"mean_days_between_releases": 7
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "10 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 10
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~7 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 7
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "exceptional",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 1,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 1 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 1
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "good",
"name": "Community & Adoption",
"value": 76,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "exceptional",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 98,
"inputs": {
"forks": 1188,
"stars": 8281,
"watchers": 207,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "8,281 stars",
"points": 60,
"status": "met",
"details": [
{
"code": "stars",
"params": {
"count": 8281
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "1,188 forks",
"points": 25,
"status": "met",
"details": [
{
"code": "forks",
"params": {
"count": 1188
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "207 watchers",
"points": 12.9,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 207
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"readme_badges": null,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"readme_badge_services": [],
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "good",
"name": "Sustainability & Governance",
"value": 68,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "weak",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 41,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 50,
"top_contributor_share": 0.638
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 64% of commits",
"points": 8.1,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 64
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "50 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 50
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 7 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"newcomer_pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 70,
"inputs": {
"merged_prs": 278,
"open_issues": 5,
"closed_issues": 153,
"prs_merged_7d": null,
"prs_decided_7d": null,
"prs_merged_30d": null,
"prs_decided_30d": null,
"issue_closed_ratio": 0.968,
"closed_unmerged_prs": 144,
"first_time_authors_30d": null,
"first_time_prs_merged_30d": null,
"first_time_prs_decided_30d": null
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "97% of issues closed",
"points": 40.7,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 97
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "278/422 decided PRs merged",
"points": 19.8,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 278,
"decided": 422
}
}
],
"max_points": 30
},
{
"key": "newcomer_pr_acceptance",
"name": "Newcomer PR acceptance",
"detail": "no first-time contributor's PR decided in 30d",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_newcomer_prs",
"params": {
"days": 30
}
}
],
"max_points": 13
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/28 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 71,
"inputs": {
"followers": 367,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "jesse-ai",
"public_repos": 24,
"account_age_days": 2823
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "367 followers of jesse-ai",
"points": 18.4,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 367,
"login": "jesse-ai"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "24 public repos, account ~7 yr old",
"points": 22.2,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 24
}
},
{
"code": "account_age_years",
"params": {
"years": 7
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "exceptional",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"jesse"
],
"ecosystems": "pypi",
"any_deprecated": false,
"min_days_since_publish": 0
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on pypi",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "pypi"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 0 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 0
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "358 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 358
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 71,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "3 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 3
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "2 out of 2 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [
"cryptocurrency",
"trading-bot",
"trading-algorithms",
"trading",
"crypto",
"framework",
"algo-trading",
"algorithmic-trading",
"jesse",
"trading-strategies",
"python",
"bot",
"crypto-bot",
"bitcoin",
"trade",
"crypto-bot-trading",
"quantitative-finance",
"quantitative-trading"
],
"has_wiki": true,
"homepage": "https://jesse.trade",
"has_readme": true,
"has_docs_dir": false,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://jesse.trade",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "18 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 18
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 54,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "weak",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 43,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 4.3
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "binaries present in source code",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "2 out of 2 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/28 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 7 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool detected but not run on all commits",
"points": 3.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "23 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "exceptional",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 2 resolved dependencies against OSV; 36 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories",
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 2
}
},
{
"code": "advisories_unassessed",
"params": {
"count": 36
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 2,
"unassessed_packages": 36,
"affected_by_severity": "none",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "exceptional",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 2,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "exceptional",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"commit_weight_rule": {
"min_commits": 50,
"min_commit_share": 0.1
},
"review_only_matches": 0,
"below_threshold_exposures": [],
"assessed_self_published_locations": 4
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 60,
"weight": 0.04,
"metrics": [
{
"key": "ai_agent_context",
"band": "good",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.596,
"agent_instruction_files": [
"AGENTS.md"
],
"agent_instruction_max_bytes": 10691
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "59 of 99 human commits state their intent (structured subject or explanatory body)",
"points": 31.8,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 59,
"sampled": 99
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": true,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.45,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0.01
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "45 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 45,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "1 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 1,
"sampled": 100
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 52,
"inputs": {
"primary_language": "Python",
"largest_source_bytes": 6915612,
"source_files_sampled": 1106,
"oversized_source_files": 53
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Python without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "Python"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "53/1106 source files over 60KB",
"points": 52.4,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 1106,
"oversized": 53
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
}
],
"classification": {
"labels": [
"library"
],
"scores": {
"library": 6,
"framework": 2
},
"primary": "library",
"evidence": [
{
"tier": "distribution",
"label": "library",
"source": "registry:pypi",
"weight": 6
},
{
"tier": "tags",
"label": "framework",
"source": "tag:framework",
"weight": 2
}
],
"artifacts": [],
"confidence": "medium",
"host_extension": false,
"runs_as_process": false,
"consumed_by_code": true
},
"metrics_version": "2.3.1"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"deps.dev does not index pypi:jesse@3.0.0; advisories assessed against the repository dependency graph instead"
],
"report_type": "repository",
"generated_at": "2026-08-02T16:00:35.607293Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/j/jesse-ai/jesse.svg",
"full_name": "jesse-ai/jesse",
"license_state": "standard",
"license_spdx": "MIT"
}