Commit History
-
Update README.md
Verified signature56452b0 -
Ensure httpx dependency for APEX Data Hub
Verified signature827a17b -
Install APEX Data Hub routes in api_server_extended.py
Verified signature79ef6b2 -
Backup api_server_extended.py before APEX Data Hub patch
Verified signature4b95cdb -
APEX Data Hub free backend provider update
Verified signature00ce7bf -
APEX Data Hub free backend provider update
Verified signaturef99422e -
APEX Data Hub free backend provider update
Verified signatureca1554b -
APEX Data Hub free backend provider update
Verified signaturef3dfd6a -
APEX Data Hub free backend provider update
Verified signature659d419 -
APEX Data Hub free backend provider update
Verified signature8b46149 -
APEX Data Hub free backend provider update
Verified signature03918a7 -
APEX Data Hub free backend provider update
Verified signature733b4b6 -
APEX Data Hub free backend provider update
Verified signaturef6c8eac -
APEX Data Hub free backend provider update
Verified signaturede6ef27 -
APEX Data Hub free backend provider update
Verified signatureb72c11a -
APEX Data Hub free backend provider update
Verified signature199ca4b -
APEX Data Hub free backend provider update
Verified signature5ac6c22
-
refactor(apex-datagap): serve under /api/datagap, not /api/apex
Your Nameapex_strategy_routes.py already registers GET /api/apex/news on the deployed Space and documents it in help.html, so mounting this module at the same prefix would have shadowed a live endpoint - FastAPI serves whichever router is registered first, which makes the winner an accident of import order. The two news implementations are not mergeable behind one path. The published one answers start/end epoch ints with limit up to 10000 and returns {success, component, data, count, sourceMode, dataState, coverage{...}, timestamp} over its forward_events table. This one answers symbol/since/until ISO8601 with offset paging and returns {symbol, mode, historicalBackfill, historicalBackfillReason, total, limit, offset, events, ...collectionWindow} over its own store, with word-boundary symbol tagging and explicit publishedAtAvailability. Reconciling the shapes is a product decision, not a deploy-time one. Moving the prefix takes all eleven endpoints off the collision at once rather than renamin…e7ec9cf -
test(apex-datagap): unpin the migration-ledger assertions from a single migration
Your Nametest_migration_is_idempotent asserted the ledger equals exactly ["0001_apex_news"], which made the test fail the moment a second migration was declared (0002_apex_whale) even though idempotency itself was never broken. Both assertions now compare against store.MIGRATIONS, so the test verifies the real property -- a fresh database applies every declared migration exactly once, in declaration order, and repeat runs apply nothing -- and keeps working as further migrations are added. A membership assertion on "0001_apex_news" is retained so the news migration cannot silently disappear from the list. This strengthens the assertion rather than relaxing it: the previous version could not have detected a missing or misordered migration beyond the first.9452de2 -
feat(apex-datagap): whale flow - real Vision large-trade history + forward-only on-chain
Your NameWhale flow splits into two halves with genuinely different availability, so they are implemented and labelled separately rather than blended into one number. Exchange-side large trades: REAL HISTORY. Binance Vision publishes daily aggTrades archives for USD-M futures, so historical large-trade flow with a real aggressor side is available. Side comes from the archive's maker flag: is_buyer_maker=true means the resting order was the buy, so the aggressor SOLD - an unrecognised flag is rejected rather than defaulted, because inverting this would silently invert every flow number downstream. A bucket is emitted only when it actually held a qualifying trade; an absent bucket inside a day that was read is a measured zero. A day whose archive does not exist is reported unavailable and never zero-filled. On-chain transfers: NO FREE HISTORICAL SOURCE, so forward-only. Probed 2026-08-25 from this machine, keyless or with the keys configured here: Whale Alert paid plan; the configured key is…6f28e38 -
feat(apex-datagap): forward-only news collection for all 10 APEX symbols
Your NameThe APEX research dataset carries news tags for BTCUSDT and ETHUSDT only; the other eight symbols have none. No free archive can reconstruct that history - publisher RSS endpoints expose a rolling recent window and the archive products are paid - so collection is forward-only from first run and coverage reports historicalBackfill="unavailable" with the reason. Nothing before that point is synthesized. Ticker tagging is word-boundary aware and deliberately conservative, because a mistagged row is indistinguishable from fabricated data: * asset names ("chainlink", "solana") match case-insensitively; * decorated market forms ($LINK, LINKUSDT, LINK/USD) likewise; * a BARE ticker matches only in UPPER CASE, and is suppressed entirely in uppercase-dominant headlines where casing carries no signal. So "link", "Link", "linked", "hyperlink" and "CLICK THE LINK IN BIO" never yield a LINK tag, while "LINK", "$link" and "Chainlink" do. Guards also block ETH Zurich, ADA compliance, Ada…6ea6f8e -
feat(apex-datagap): funding-rate x mark-price exact-minute join
Your NameCloses a measured gap in the APEX research dataset: every funding row carries "mark": null for 8 of 10 symbols, and BTC/ETH are only ~41% covered. Binance Vision does publish mark prices, in a separate markPriceKlines dataset, so the two archives can be joined. Join rule: a funding event's calc_time carries millisecond jitter (1609459200002 is 2 ms past the boundary), so it is assigned to bucket floor(calc_time/60000)*60000 and matched against the mark kline whose open_time equals that bucket exactly. Matching is a dict lookup - there is deliberately no nearest-neighbour search, no interpolation and no forward-fill. An unmatched minute is emitted with markPrice=null and markAvailability="unavailable". Verified against real archives: BTCUSDT 2021-01 = 93 funding events, 93 matched, 0 unavailable (coverage 1.0000, 44640 mark bars, 0 dupes). Endpoints: GET /api/apex/funding-mark, /api/apex/funding-mark/coverage Tests: 21 passing, including negative cases asserting that a missing minute…3e1acab -
Show direct application URL on dashboard
dd19f1a -
Fix dashboard desktop controls and status sizing
d48347a -
Polish dashboard visuals with SVG icons and motion
18fa0ee -
Fix provider routing and overhaul Space 4 dashboard
6ddec3a
-
Add verified historical and forward APEX data pipelines
Fix compatibility OHLCV pagination; expose real funding and OI with a public Bybit fallback plus full Fear & Greed history; add daily OI, authenticated NewsData, and public-RPC whale archives; preserve the LIVE Short Hunter contract; and ship the Data Lab and truthful help documentation.535b973
-
Fix KuCoin Futures OHLCV timestamp units and fear_greed sentiment dispatch signature
Your Name- providers/kucoin_futures.py: build the OHLCV request window in epoch milliseconds instead of seconds, matching the KuCoin Futures kline API contract. Fixes 'HTTP 400: Parameter from must be milliseconds'. - providers/alternative_me.py: fear_greed() now accepts an optional, ignored symbol argument so it matches the call signature router.py's generic sentiment/news dispatch uses for every provider. Fixes 'TypeError: fear_greed() takes 0 positional arguments but 1 was given'. - tests/test_short_hunter_gateway.py: add focused regression tests for both fixes (ms window bounds/scaling, live KuCoin smoke test, fear_greed no-arg/optional-arg/router-dispatch/failure-mode cases). CryptoCompare BTC candle gap investigated separately: root cause is the provider now requiring a paid API key (HTTP 401), not a symbol-mapping bug. No code change made there pending a decision on obtaining a key.20e4c4c
-
Add resource loader compatibility routes
Verified signature2f1f741 -
Increase sidebar space and real counts
Verified signature059cfa0 -
Increase sidebar space and real counts
Verified signatureecac40c -
Make resource summary honest
Verified signaturef81f359 -
Align sidebar with real catalog counts
Verified signature74af1ff -
Align sidebar with real catalog counts
Verified signatured6c1a15 -
Align sidebar with real catalog counts
Verified signaturebb100e0 -
Refine dashboard live status tones
Verified signatured1f643d -
Improve sidebar and live dashboard data
Verified signature3936ff4 -
Add self-contained styling fallback to Help page
Verified signaturedb4335a -
Add Help / API Reference page and fix frontend diagnostics syntax
Verified signature4894940 -
Update requirements.txt
Verified signature0b203e0 -
Preserve Short Hunter datasource gateway compatibility and fixes
Verified signatureec64180 -
Make Space routes functional
Verified signature1c7ff0d -
Clean runtime leftovers
Verified signaturea7c0cd6 -
Remove runtime and secret leftovers
Verified signaturee3a6367 -
Upload Short Hunter datasource gateway
Verified signature99e6ac3
-
Upload 452 files
Verified signaturef4ef01d -
Upload 451 files
Verified signatureb96097a -
Upload 1570 files
Verified signatureab3f02c -
Upload 1225 files
Verified signature6dc4497 -
Upload 1581 files
Verified signature8c183ca