Commit Graph

287 Commits

Author SHA1 Message Date
OpenSquared
352fd48e46 feat: instrument model 2026-07-03 11:25:13 +02:00
OpenSquared
8f51e0de7b feat: instrument model 2026-07-03 11:00:23 +02:00
OpenSquared
5381b3fb92 feat: instrument model 2026-07-03 10:36:52 +02:00
OpenSquared
c3e9b21bda feat: instrument model 2026-07-03 10:17:02 +02:00
OpenSquared
f4e57e9d84 feat: instrument model 2026-07-03 09:59:26 +02:00
OpenSquared
980c797f53 feat: instrument model 2026-07-03 09:43:39 +02:00
OpenSquared
d9e9d30889 feat: instrument model 2026-07-03 00:31:30 +02:00
OpenSquared
a8ee808937 feat: instrument model 2026-07-03 00:04:37 +02:00
OpenSquared
ff6f0b390d feat: instrument model 2026-07-02 23:36:06 +02:00
OpenSquared
e2144d93e9 feat: instrument model 2026-07-02 22:46:55 +02:00
OpenSquared
7f7c343c9e feat: instrument model 2026-07-02 22:34:16 +02:00
OpenSquared
aecbdc9929 feat: instrument model 2026-07-02 20:31:30 +02:00
OpenSquared
ae5865a156 feat: pressure 2026-07-02 18:07:21 +02:00
OpenSquared
01709e5edf feat: causal lab 2026-07-02 16:46:38 +02:00
OpenSquared
5126360ce9 feat: causal lab 2026-07-02 14:42:50 +02:00
OpenSquared
82739e8140 feat: instrument analysis 2026-07-02 14:21:57 +02:00
OpenSquared
0d5ad88b1c feat: causal graph 2026-07-02 13:57:43 +02:00
OpenSquared
5081514898 feat: calendar 2026-07-02 11:27:45 +02:00
OpenSquared
8098104f5b feat: causal lab 2026-07-02 09:26:52 +02:00
OpenSquared
916b7b38e6 feat: causal tab 2026-07-01 22:09:01 +02:00
OpenSquared
e1681edffc feat: causal lab 2026-07-01 21:01:00 +02:00
OpenSquared
1829335ad1 feat: macro series 2026-07-01 17:38:33 +02:00
OpenSquared
8b59eff744 feat: macro series 2026-07-01 16:16:51 +02:00
OpenSquared
776c19e1ae feat: macro series 2026-07-01 15:58:47 +02:00
OpenSquared
292d2c6413 feat: bank forceasts 2026-06-30 21:47:20 +02:00
OpenSquared
bb614936c3 feat: macro series 2026-06-30 19:08:33 +02:00
OpenSquared
b8a1d2ad07 feat: instrument analysis 2026-06-30 18:45:12 +02:00
OpenSquared
479b2b7b05 feat: instrument analysis 2026-06-30 18:31:43 +02:00
OpenSquared
75489a54bd feat: instrument analysis 2026-06-30 18:09:29 +02:00
OpenSquared
c3cebc2d7e feat: instrument analysis 2026-06-30 17:23:51 +02:00
OpenSquared
7f3cce69b9 feat: instrument analysis 2026-06-30 17:03:36 +02:00
OpenSquared
9711f0921c feat: instrument analysis 2026-06-30 16:56:27 +02:00
OpenSquared
ecb9b74b20 feat: instrument analysis 2026-06-30 16:50:26 +02:00
OpenSquared
9ffcfeeb71 feat: instrument analysis 2026-06-30 16:32:08 +02:00
OpenSquared
9904c066b2 feat: instrument analysis 2026-06-30 16:15:39 +02:00
OpenSquared
69ca36bd7e feat: market event 2026-06-30 13:55:03 +02:00
OpenSquared
2b1a43a093 feat: market event 2026-06-30 12:22:14 +02:00
OpenSquared
12c298cf83 fix: graphe calculation 2026-06-30 12:00:42 +02:00
OpenSquared
ce7f89cf2a fix: graphe calculation 2026-06-30 11:45:55 +02:00
OpenSquared
05d2a2c841 fix: add save buttons at bottom of grammar panel in causal editor
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 11:17:43 +02:00
OpenSquared
9e929cf47f feat: export current graph as grammar with copy button for external AI analysis
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 09:36:34 +02:00
OpenSquared
f9dddb7184 feat: graph patch grammar DSL for causal editor
New grammar panel replaces free-text AI prompt with a two-step workflow:
1. NL to Grammar: GPT-4o converts description to patch ops (new endpoint ai-to-grammar)
2. Apply: frontend parser applies grammar locally without AI

Grammar syntax: (+|-|~)(node|edge|coef|input|instruments) key=val key=val
Sign shortcuts: + positive, - negative, = neutral
Auto-positions new nodes when x/y omitted.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 09:30:17 +02:00
OpenSquared
9a1e943be0 feat: multi-tab instrument analysis
Each /instruments/:id navigation opens a persistent tab in the TabBar.
Multiple instruments can be open simultaneously — state is preserved when switching.

- TabsContext: adds instrumentIds[], openInstrument(), closeInstrument()
- TabBar: renders instrument tabs (teal, monospaced, TrendingUp icon) after static tabs, separated by a divider
- InstrumentDashboard: accepts instrumentIdProp so keep-alive instances use the right id regardless of URL
- App: InstrumentRoute registers the tab on navigation; InstrumentKeepAlive mounts one dashboard per open instrument; NormalRoutes hides on instrument paths (hidden div, Routes still fires)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 09:17:05 +02:00
OpenSquared
230ce3ff2b fix: prevent Nouveau button overflow in editor base panel
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 09:11:58 +02:00
OpenSquared
40d6f14901 feat: causal lab — chip filters, editor zoom, AI modify prompt
Library:
- Color chip filters: category (with per-category colors), sub_type, instrument
- Date range filter (created_at) + text search
- Category labels unified to cover event_calendar, fundamental, calendar_event etc.
- Editer button on selected template → opens in editor tab
- Show created_at + created_by in template detail

Editor:
- Accepts initialId prop so Library can pre-load a template
- AI Modify zone: textarea prompt + button calls /api/causal-lab/template/{id}/ai-modify
- Returns modified graph_json from GPT-4o, applied live — user reviews then saves

Backend:
- New POST /api/causal-lab/template/{id}/ai-modify endpoint
  - Sends current graph_json + user prompt to GPT-4o
  - Returns validated modified graph_json (nodes/edges required)
  - Does not auto-save (user controls save)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 09:04:15 +02:00
OpenSquared
589faa633b feat: improve causal graph readability — scale positions, bigger fonts, less overlap
- Scale node positions by 1.55x to spread graph vertically/horizontally
- Increase node size: 120x42 -> 130x48 (normal), 130x50 -> 140x54 (editor)
- Bigger label font: 11px -> 12px inside nodes
- Edge labels: 8.5px -> 9.5px, lag/decay: 8px -> 9px
- Better label stagger along bezier: lag at t=0.13, label at t=0.42, decay at t=0.84
- Larger perpendicular offset: 10px -> 16px (less overlap on diagonal edges)
- SVG height: 480 -> 560 (normal), 540 -> 620 (editor)
- Use scaledNodes array for node rendering to apply position transform

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 08:46:07 +02:00
OpenSquared
5e37cd81a2 fix: pass prediction_json and actual_json through to snapshot events
The filtered event dict was built with explicit fields and omitted these two columns,
so the frontend always received null despite the DB having valid data.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 23:34:32 +02:00
OpenSquared
b33d06cb97 debug: add db_state display + raw pred_json, expand YFINANCE_MAP
YFINANCE_MAP now includes GBPUSD, USDJPY, USDCHF, AUDUSD, NZDUSD, USDCAD, XAGUSD, NASDAQ, DAX, FTSE, WTI, US30Y, DXY.
Frontend diagnostic panel shows db_state rows after Recalculer and raw prediction_json prefix per event.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 23:31:15 +02:00
OpenSquared
05236c31f3 fix: preserve debug info across snapshot re-fetch + widen refresh filter
- refreshDebug state lives in parent (InstrumentDashboard) so it survives
  fetchSnapshotSilent re-render (ExplanationScore no longer loses debugInfo
  when onRefreshDone triggers setLoading → unmount)
- fetchSnapshotSilent: re-fetches snapshot without setLoading(true) so
  ExplanationScore stays mounted with its state
- Refresh filter now catches rows where prediction_json is empty even if
  actual_json is populated, and handles '[]' / null variants

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 23:20:17 +02:00
OpenSquared
c73bedd7d0 debug: expose full inputs/outputs in Recalculer response for diagnosis
_run_auto_analysis now returns a rich dict {ok, inputs, node_values, actual_moves, error}
instead of bool. The refresh endpoint captures and forwards:
- inputs: what values were fed to evaluate_graph
- node_keys: which nodes were computed in prediction
- actual_moves: actual price pips fetched
- run_error: exception message if it failed

Frontend shows all of this after clicking Recalculer so the root cause is visible.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 23:09:49 +02:00