alpha-visualizer 0.7.2__tar.gz → 0.7.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/workflows/ci.yml +68 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.gitignore +1 -0
- alpha_visualizer-0.7.2/.hypothesis/constants/65993953f7ccf191 → alpha_visualizer-0.7.3/.hypothesis/constants/efa1548145a8bfba +1 -1
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/PKG-INFO +1 -1
- alpha_visualizer-0.7.3/docs/screenshots/en/browse.png +0 -0
- alpha_visualizer-0.7.3/docs/screenshots/en/compare.png +0 -0
- alpha_visualizer-0.7.3/docs/screenshots/en/detail.png +0 -0
- alpha_visualizer-0.7.3/docs/screenshots/en/strategy.png +0 -0
- alpha_visualizer-0.7.3/docs/screenshots/ja/browse.png +0 -0
- alpha_visualizer-0.7.3/docs/screenshots/ja/compare.png +0 -0
- alpha_visualizer-0.7.3/docs/screenshots/ja/detail.png +0 -0
- alpha_visualizer-0.7.3/docs/screenshots/ja/strategy.png +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/screenshots/capture.spec.ts +4 -3
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/screenshots/equity-tv.spec.ts +4 -2
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/specs/compare.spec.ts +4 -3
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/specs/detail.spec.ts +9 -2
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/playwright.samples.config.ts +1 -1
- alpha_visualizer-0.7.3/frontend/src/constants/__tests__/featureFlags.test.ts +120 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/constants/featureFlags.ts +10 -6
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/BacktestScreen.tsx +21 -18
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/strategy/SignalChartCard.tsx +4 -4
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/pyproject.toml +2 -2
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/__init__.py +1 -1
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/BrowsePage-B7NJWk-W.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/BrowsePage-D_oh_f9q.js +2 -2
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/BrowsePage-B7NJWk-W.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/BrowsePage-D_oh_f9q.js.map +1 -1
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/ComparePage-Brk6b7s3.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/ComparePage-DtDelizG.js +2 -2
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/ComparePage-Brk6b7s3.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/ComparePage-DtDelizG.js.map +1 -1
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/DetailPage-RbPDGMb3.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/DetailPage-DelKLR38.js +2 -2
- alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/DetailPage-DelKLR38.js.map +1 -0
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/IdeasPage-BEPzOoeJ.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/IdeasPage-CCohB3id.js +2 -2
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/IdeasPage-BEPzOoeJ.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/IdeasPage-CCohB3id.js.map +1 -1
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/LivePage-DeKnCzqb.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/LivePage-q72oTm92.js +2 -2
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/LivePage-DeKnCzqb.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/LivePage-q72oTm92.js.map +1 -1
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/LiveTab-B9tKV9zX.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/LiveTab-B3SvCjHQ.js +2 -2
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/LiveTab-B9tKV9zX.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/LiveTab-B3SvCjHQ.js.map +1 -1
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/SettingsToggles-CM8XnjQC.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/SettingsToggles-D_8he1u5.js +2 -2
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/SettingsToggles-CM8XnjQC.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/SettingsToggles-D_8he1u5.js.map +1 -1
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/featureFlags-A2oZeWlh.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/featureFlags-B5arCULb.js +2 -2
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/featureFlags-A2oZeWlh.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/featureFlags-B5arCULb.js.map +1 -1
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/index-Drd2-lJN.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/index-BdNp8jFI.js +3 -3
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/index-Drd2-lJN.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/index-BdNp8jFI.js.map +1 -1
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/useBacktestData-BehdHkgb.js → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/useBacktestData-B0uqJGPi.js +2 -2
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/useBacktestData-BehdHkgb.js.map → alpha_visualizer-0.7.3/src/alpha_visualizer/static/assets/useBacktestData-B0uqJGPi.js.map +1 -1
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/index.html +1 -1
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/uv.lock +4 -4
- alpha_visualizer-0.7.2/docs/screenshots/en/browse.png +0 -0
- alpha_visualizer-0.7.2/docs/screenshots/en/compare.png +0 -0
- alpha_visualizer-0.7.2/docs/screenshots/en/detail.png +0 -0
- alpha_visualizer-0.7.2/docs/screenshots/en/strategy.png +0 -0
- alpha_visualizer-0.7.2/docs/screenshots/ja/browse.png +0 -0
- alpha_visualizer-0.7.2/docs/screenshots/ja/compare.png +0 -0
- alpha_visualizer-0.7.2/docs/screenshots/ja/detail.png +0 -0
- alpha_visualizer-0.7.2/docs/screenshots/ja/strategy.png +0 -0
- alpha_visualizer-0.7.2/src/alpha_visualizer/static/assets/DetailPage-RbPDGMb3.js.map +0 -1
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.agents/skills/source-command-audit-licenses/SKILL.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.agents/skills/source-command-pre-release/SKILL.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.claude/commands/audit-licenses.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.claude/commands/pre-release.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.codex/hooks.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/ISSUE_TEMPLATE/bug_report_ja.yml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/ISSUE_TEMPLATE/feature_request_ja.yml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/codeql/README.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/codeql/codeql-config.yml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/dependabot.yml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/workflows/codeql.yml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/workflows/lighthouse.yml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.github/workflows/release.yml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/.gitignore +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/0bf3463e8f4751b8 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/0f38aca28193156b +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/10d56fd11d90e91d +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/2826595e28fa870a +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/291dc4c40995bea6 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/296b8092179c9f55 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/312a7aaf12a1fd47 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/331e194303817b32 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/368f2bae545df6be +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/3f7b61d4b4a660e1 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/43f703bafb1e4b04 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/4577b97f57a8a832 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/4726660442f99a00 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/4a1c4d1532cab28e +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/508b282112ab038e +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/757b1f8305546439 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/7d3b67d825fc154a +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/7f90c9d611001617 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/828ed73d45fcee28 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/82e279d41edd645d +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/89aaa48f251cd53d +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/89d70ebe84c5b2b7 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/8add761403393fca +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/90fccc12da2fa6c9 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/96ca93165140d446 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/97982d8e7c8d4a95 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/a636a4647020033d +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/ab4df659c6b192db +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/b76328deebb21ae6 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/b9ff5bcd3a53e3a7 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/bd75c3c18e8ba4f4 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/c5349cb90ddc7968 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/c5f6cf064ffb412d +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/cd09731f3dfbf59f +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/d4cc884f331eee77 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/da39a3ee5e6b4b0d +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/e44a457d795e56c2 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/ea2d606acbfff989 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/ee487c54cd5ca7dc +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/eed5e66c16ae84b8 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/f2f91c7f9b44111d +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/f7c4a04c97c0daf8 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/f7f9c6b3c86f63a8 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/fa443af6269a6e02 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/fe325b4404aa1121 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/.hypothesis/constants/ff4517cbfe51fea1 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/AGENTS.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/CHANGELOG.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/CLAUDE.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/CODE_OF_CONDUCT.en.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/CODE_OF_CONDUCT.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/CONTRIBUTING.en.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/CONTRIBUTING.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/LICENSE +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/NOTICE +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/README.en.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/README.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/SECURITY.en.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/SECURITY.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/THIRDPARTY_LICENSES.txt +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/cliff.toml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/adr/0001-pages-vs-screens.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/adr/0002-charts-visx-vs-components.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/adr/0003-openapi-typescript-codegen.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/adr/0004-condition-node-discriminated-union.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/lighthouse-ci.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/en/compare-heatmap.png +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/en/ideas.png +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/en/optimize.png +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/en/strategy-signal-tv.png +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/ja/compare-heatmap.png +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/ja/ideas.png +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/ja/optimize.png +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/docs/screenshots/ja/strategy-signal-tv.png +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/.gitignore +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/.npmrc +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/.size-limit.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/.storybook/main.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/.storybook/preview.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/CLAUDE.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/README.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/THIRDPARTY_FONTS.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/README.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/data/historical/SPY_1d.parquet +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/data/ideas/ideas.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/data/results/backtest_results.db +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/data/strategies/momo_breakout.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/data/strategies/rsi_reversal.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/data/strategies/sma_cross.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/fixtures/forge/forge.yaml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/helpers/locators.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/samples/sample-fixture.spec.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/screenshots/strategy-signal-tv.spec.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/specs/browse.spec.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/specs/i18n.spec.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/eslint.config.js +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/index.html +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/openapi.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/package.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/playwright.config.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/playwright.screenshots.config.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/pnpm-lock.yaml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/pnpm-workspace.yaml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/public/favicon.svg +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/public/icons.svg +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/api/__tests__/client.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/api/client.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/api/types.gen.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/api/types.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/CompareEquityTV.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/CompareEquityTV.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/EquityDrawdownPaneTV.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/EquityDrawdownPaneTV.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/RollingMetricsChartTV.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/RollingMetricsChartTV.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/StrategySignalChartTV.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/StrategySignalChartTV.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/WFOEquityTV.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/WFOEquityTV.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/CompareEquityTV.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/EquityDrawdownPaneTV.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/RollingMetricsChartTV.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/StrategySignalChartTV.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/WFOEquityTV.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/data.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/theme.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/__tests__/trades.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/data.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/theme.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/tv/trades.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/AnnualReturnsBarV.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/CompareEquityV.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/CorrelationHeatmapV.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/DrawdownChartV.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/EquityChartV.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/MAEMFEScatterV.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/MonthlyHeatmapV.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/OptimizeScatterV.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/Sparkline.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/Sparkline.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/__tests__/EquityChartV.regime.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/charts/visx/regimeBands.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/CommandPalette.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/DetailToolbar.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/MetricsSummaryBarV2.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/MetricsSummaryBarV2.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/RootLayout.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/SettingsToggles.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/StrategyHero.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/__tests__/CommandPalette.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/__tests__/CorrelationHeatmap.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/__tests__/responsive-styles.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/CompareFloatingBar.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/FilterBar.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/GroupByToggle.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/Heroline.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/RunHistoryTab.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/SavedViews.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/StrategySlidePanel.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/StrategyTable.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/SymbolAtlas.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/browser/SymbolCard.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/AnnualReturnsBar.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/CorrelationHeatmap.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/DrawdownDetailChart.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/MAEMFEScatter.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/MonteCarloChart.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/OptimizeScatter.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/ReturnDistributionChart.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/RollingMetricsChart.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/VaRChart.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/WFOTimeline.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/charts/WeekdayPerformanceChart.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/live/LivePositionView.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/live/LiveTab.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/live/SummaryCard.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/live/__tests__/LiveTab.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/live/__tests__/format.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/live/format.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/CompareTable.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/ISOOSMetrics.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/MetricsGrid.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/RegimeBreakdownCards.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/SignalQualityBadge.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/__tests__/evaluateGood.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/metrics/evaluate.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/nav.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/components/trades/TradeTable.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/constants/metricDefinitions.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/contexts/DashboardContext.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/contexts/dashboardConstants.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/a11y.css +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Button.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Card.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Chip.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Divider.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/KeyValue.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/OverflowMenu.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Pill.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Pill.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/SectionHeader.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Stat.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Stat.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/TabBar.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/Toolbar.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/__tests__/OverflowMenu.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/primitives/index.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/tokens.css +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/design/useChartTheme.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/__tests__/useEquityViewport.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/__tests__/useFetchByKey.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/__tests__/useScrollRestoration.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/__tests__/useStrategyHistorical.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/__tests__/useStrategyList.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/__tests__/useTheme.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useBacktestData.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useDebounce.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useEquityViewport.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useFetchByKey.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useIdeasList.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useLiveList.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useRecentStrategies.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useScrollRestoration.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useSparklineCache.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useStrategyHistorical.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useStrategyList.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useSymbolStats.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/hooks/useTheme.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/i18n/__tests__/strings.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/i18n/strings.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/correlation.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/distribution.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/drawdown.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/format.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/monteCarlo.properties.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/monteCarlo.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/rolling.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/searchParams.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/searchStrategies.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/walkForward.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/__tests__/weekday.test.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/assetClass.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/correlation.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/csv.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/distribution.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/drawdown.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/exportPng.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/format.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/monteCarlo.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/rolling.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/searchParams.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/searchStrategies.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/walkForward.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/lib/weekday.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/main.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/mock/btData.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/pages/BrowsePage.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/pages/ComparePage.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/pages/DetailPage.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/pages/IdeasPage.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/pages/LivePage.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/router.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/BacktestScreen.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/BrowseScreen.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/CompareScreen.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/CompareScreen.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/ISOOSScreen.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/IdeasScreen.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/IdeasScreen.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/LiveScreen.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/LiveScreen.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/OptimizeScreen.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/OptimizeScreen.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/StrategyScreen.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/WFOScreen.stories.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/WFOScreen.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/__tests__/LiveScreen.test.tsx +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/test-setup.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/tsconfig.app.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/tsconfig.e2e.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/tsconfig.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/tsconfig.node.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/vite.config.ts +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/lighthouserc.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/release.sh +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/README.en.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/README.md +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/__init__.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/__init__.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/compatibility_matrix.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/ideas_defs.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/pseudo_backtest.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/pseudo_grid.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/pseudo_wfo.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/strategy_defs.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/synthetic_ohlcv.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/_generators/writers.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/build_samples.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/ideas/ideas.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/results/backtest_results.db +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/bbands_breakout_v1.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/donchian_turtle_v1.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/ema_adx_macd_v1.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/macd_crossover_v1.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/range_reversion_v1.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/rsi_reversion_v1.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/sma_crossover_v1.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/data/strategies/supertrend_adx_v1.json +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/samples/sample-forge/forge.yaml +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/scripts/compare_sqlite_dump.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/scripts/generate_openapi.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/scripts/verify_build_artifacts.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/app.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/cli.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/db.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/dependencies.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/errors.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/forge_config.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/log_sanitize.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/repositories/__init__.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/repositories/backtest_results.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/repositories/ideas.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/repositories/live.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/repositories/optimization.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/repositories/strategies.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/__init__.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/historical.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/ideas.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/live.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/optimize.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/results.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/run.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/strategies.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/routers/wfo.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/__init__.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/historical.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/ideas.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/live.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/optimize.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/results.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/strategies.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/schemas/wfo.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/services/__init__.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/services/backtest.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/services/historical.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/services/live.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/services/walk_forward.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/Sparkline-BcO_EWxr.js +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/Sparkline-BcO_EWxr.js.map +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/fonts-DJsrEZjK.css +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/format-D00KW3px.js +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/format-D00KW3px.js.map +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/index-Cbl7J_5s.css +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-BLrFJfvD.woff +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-iW8qmuJY.woff2 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-BFXNXuvF.woff2 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-pobXraBK.woff +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-BgSTtRxb.woff2 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-D7bG6gX1.woff +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/react-cUP_GJAW.js +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/react-cUP_GJAW.js.map +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/rolldown-runtime-DDdRRPPX.js +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DMD1h6_f.woff +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DouSKlru.woff2 +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/tv-rsB_oRi5.js +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/tv-rsB_oRi5.js.map +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/visx-D9BH_cru.js +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/assets/visx-D9BH_cru.js.map +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/favicon.svg +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/src/alpha_visualizer/static/icons.svg +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/__init__.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/conftest.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/factories.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/fixtures/build_e2e_fixture.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/repositories/__init__.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/repositories/test_backtest_results_repo.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/repositories/test_ideas_reader.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/repositories/test_live_repo.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/repositories/test_optimization_repo.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/repositories/test_strategies_repo.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/__init__.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_forge_yaml_integration.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_historical.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_ideas.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_live.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_optimize.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_results.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_run.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_strategies.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/routers/test_wfo.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/__init__.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_pseudo_backtest.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_pseudo_grid.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_pseudo_wfo.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_sample_forge.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_strategy_defs.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_synthetic_ohlcv.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/samples/test_writers.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/schemas/__init__.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/schemas/test_schemas.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/services/__init__.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/services/test_backtest.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/services/test_backtest_properties.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/services/test_historical.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/services/test_live.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/services/test_wfo.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_app.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_cli.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_compare_sqlite_dump.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_db.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_dependencies.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_errors.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_forge_config.py +0 -0
- {alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/tests/test_log_sanitize.py +0 -0
|
@@ -306,3 +306,71 @@ jobs:
|
|
|
306
306
|
name: playwright-traces
|
|
307
307
|
path: frontend/test-results/
|
|
308
308
|
retention-days: 14
|
|
309
|
+
|
|
310
|
+
e2e-samples:
|
|
311
|
+
runs-on: ubuntu-latest
|
|
312
|
+
timeout-minutes: 20
|
|
313
|
+
steps:
|
|
314
|
+
- uses: actions/checkout@v6
|
|
315
|
+
|
|
316
|
+
- name: Install uv
|
|
317
|
+
uses: astral-sh/setup-uv@v7
|
|
318
|
+
with:
|
|
319
|
+
version: "0.11.19"
|
|
320
|
+
|
|
321
|
+
- name: Set up Python
|
|
322
|
+
run: uv python install 3.12
|
|
323
|
+
|
|
324
|
+
- name: Install Python dependencies
|
|
325
|
+
run: uv sync --all-extras
|
|
326
|
+
|
|
327
|
+
- name: Setup pnpm
|
|
328
|
+
uses: pnpm/action-setup@v6
|
|
329
|
+
with:
|
|
330
|
+
version: 11
|
|
331
|
+
|
|
332
|
+
- name: Set up Node.js
|
|
333
|
+
uses: actions/setup-node@v6
|
|
334
|
+
with:
|
|
335
|
+
node-version: '22'
|
|
336
|
+
cache: 'pnpm'
|
|
337
|
+
cache-dependency-path: frontend/pnpm-lock.yaml
|
|
338
|
+
|
|
339
|
+
- name: Install pnpm dependencies
|
|
340
|
+
working-directory: frontend
|
|
341
|
+
run: pnpm install --frozen-lockfile
|
|
342
|
+
|
|
343
|
+
- name: Cache Playwright browsers
|
|
344
|
+
uses: actions/cache@v5
|
|
345
|
+
id: playwright-cache
|
|
346
|
+
with:
|
|
347
|
+
path: ~/.cache/ms-playwright
|
|
348
|
+
key: playwright-${{ runner.os }}-${{ hashFiles('frontend/pnpm-lock.yaml') }}
|
|
349
|
+
|
|
350
|
+
- name: Install Playwright browsers (cold)
|
|
351
|
+
working-directory: frontend
|
|
352
|
+
if: steps.playwright-cache.outputs.cache-hit != 'true'
|
|
353
|
+
run: pnpm exec playwright install --with-deps chromium
|
|
354
|
+
|
|
355
|
+
- name: Install Playwright system deps (cache hit)
|
|
356
|
+
working-directory: frontend
|
|
357
|
+
if: steps.playwright-cache.outputs.cache-hit == 'true'
|
|
358
|
+
run: pnpm exec playwright install-deps chromium
|
|
359
|
+
|
|
360
|
+
- name: Build frontend
|
|
361
|
+
working-directory: frontend
|
|
362
|
+
run: pnpm run build
|
|
363
|
+
|
|
364
|
+
- name: Run Playwright samples smoke
|
|
365
|
+
working-directory: frontend
|
|
366
|
+
env:
|
|
367
|
+
CI: 'true'
|
|
368
|
+
run: pnpm run e2e:samples
|
|
369
|
+
|
|
370
|
+
- name: Upload Playwright report
|
|
371
|
+
if: always()
|
|
372
|
+
uses: actions/upload-artifact@v7
|
|
373
|
+
with:
|
|
374
|
+
name: playwright-report-samples
|
|
375
|
+
path: frontend/playwright-report-samples/
|
|
376
|
+
retention-days: 14
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: alpha-visualizer
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.3
|
|
4
4
|
Summary: Web visualization tool for AlphaForge backtest results
|
|
5
5
|
Project-URL: Homepage, https://github.com/alforge-labs/alpha-visualizer
|
|
6
6
|
Project-URL: Repository, https://github.com/alforge-labs/alpha-visualizer
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -151,12 +151,13 @@ test.describe.serial('README / docs 用スクリーンショット撮影', () =>
|
|
|
151
151
|
await captureViewport(page, lang, 'browse', 1180)
|
|
152
152
|
})
|
|
153
153
|
|
|
154
|
-
// detail: 「エクイティ
|
|
154
|
+
// detail: 「エクイティ & ドローダウン」カード(タイトル+チャート)をクロップ
|
|
155
155
|
test('detail', async ({ page }) => {
|
|
156
156
|
await gotoDetail(page, STRATEGY_ID)
|
|
157
157
|
await setLang(page, lang)
|
|
158
|
-
// backtest-equity-chart の親 div = セクションラベル+エクイティチャート
|
|
159
|
-
|
|
158
|
+
// backtest-equity-chart-tv の親 div = セクションラベル+エクイティチャート
|
|
159
|
+
// (issue #231 以降は TV レンダラが既定)
|
|
160
|
+
const equitySection = page.getByTestId('backtest-equity-chart-tv').locator('..')
|
|
160
161
|
await captureElement(page, lang, 'detail', equitySection, 280)
|
|
161
162
|
})
|
|
162
163
|
|
{alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/e2e/screenshots/equity-tv.spec.ts
RENAMED
|
@@ -39,7 +39,9 @@ test.describe.serial('lightweight-charts (TV) 用スクリーンショット', (
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
test('backtest-tv (ja, gotoDetail helper)', async ({ page }) => {
|
|
42
|
-
// gotoDetail を経由しても feature flag が ON
|
|
42
|
+
// gotoDetail を経由しても feature flag が ON のまま維持されることの回帰確認。
|
|
43
|
+
// renderer-mode バッジは issue #231 以降 ?tv クエリ無しの本番ビルドでは
|
|
44
|
+
// 表示されないため、TV チャート本体の testid で検証する。
|
|
43
45
|
await clearViewerSettings(page)
|
|
44
46
|
await page.addInitScript(() => {
|
|
45
47
|
try {
|
|
@@ -50,6 +52,6 @@ test.describe.serial('lightweight-charts (TV) 用スクリーンショット', (
|
|
|
50
52
|
})
|
|
51
53
|
await gotoDetail(page, STRATEGY_ID)
|
|
52
54
|
await page.waitForLoadState('networkidle')
|
|
53
|
-
await page.
|
|
55
|
+
await page.locator('[data-testid="backtest-equity-chart-tv"]').waitFor({ state: 'visible' })
|
|
54
56
|
})
|
|
55
57
|
})
|
|
@@ -11,10 +11,11 @@ test.describe('Compare スモーク', () => {
|
|
|
11
11
|
|
|
12
12
|
await expect(page.getByTestId('compare-main-grid')).toBeVisible()
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
// issue #231 以降は TV レンダラが既定(canvas 描画)
|
|
15
|
+
const chart = page.getByTestId('compare-equity-tv')
|
|
15
16
|
await expect(chart).toBeVisible()
|
|
16
|
-
|
|
17
|
-
await expect(chart.locator('
|
|
17
|
+
await expect(chart.getByLabel(/Compare equity chart, 2 strategies/)).toBeVisible()
|
|
18
|
+
await expect(chart.locator('canvas').first()).toBeVisible()
|
|
18
19
|
|
|
19
20
|
const table = page.getByTestId('compare-table')
|
|
20
21
|
await expect(table).toBeVisible()
|
|
@@ -9,9 +9,9 @@ test.describe('Detail スモーク', () => {
|
|
|
9
9
|
test('sma_cross の主要タブを順次切り替えられる', async ({ page }) => {
|
|
10
10
|
await gotoDetail(page, 'sma_cross')
|
|
11
11
|
|
|
12
|
-
// backtest
|
|
12
|
+
// backtest タブ(既定)— issue #231 以降は TV レンダラが既定
|
|
13
13
|
await expect(page.getByTestId('backtest-screen')).toBeVisible()
|
|
14
|
-
await expect(page.getByTestId('backtest-equity-chart')).toBeVisible()
|
|
14
|
+
await expect(page.getByTestId('backtest-equity-chart-tv')).toBeVisible()
|
|
15
15
|
|
|
16
16
|
// IS / OOS タブ
|
|
17
17
|
await page.getByRole('tab', { name: 'IS / OOS' }).click()
|
|
@@ -36,4 +36,11 @@ test.describe('Detail スモーク', () => {
|
|
|
36
36
|
await page.getByRole('tab', { name: /最適化|Optimize/ }).click()
|
|
37
37
|
await expect(page.getByTestId('optimize-screen')).toBeVisible()
|
|
38
38
|
})
|
|
39
|
+
|
|
40
|
+
test('?tv=0 で visx レンダラに fallback できる', async ({ page }) => {
|
|
41
|
+
// issue #231: TV 既定化後も visx を opt-out 経路として維持していることの回帰確認
|
|
42
|
+
await page.goto('/detail/sma_cross?tv=0')
|
|
43
|
+
await expect(page.getByTestId('backtest-equity-chart')).toBeVisible()
|
|
44
|
+
await expect(page.getByTestId('backtest-equity-chart-tv')).not.toBeVisible()
|
|
45
|
+
})
|
|
39
46
|
})
|
|
@@ -37,7 +37,7 @@ export default defineConfig({
|
|
|
37
37
|
webServer: {
|
|
38
38
|
// FORGE_CONFIG が外部 forge.yaml を指していないよう明示クリア。
|
|
39
39
|
command:
|
|
40
|
-
'env FORGE_CONFIG= uv run vis serve --forge-dir samples/sample-forge --forge-config samples/sample-forge/forge.yaml --host 127.0.0.1 --port 8124 --no-open',
|
|
40
|
+
'env FORGE_CONFIG= uv run alpha-vis serve --forge-dir samples/sample-forge --forge-config samples/sample-forge/forge.yaml --host 127.0.0.1 --port 8124 --no-open',
|
|
41
41
|
url: `${BASE_URL}/health`,
|
|
42
42
|
cwd: '..',
|
|
43
43
|
reuseExistingServer: !process.env.CI,
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
resolveLightweightChartsFlag,
|
|
5
|
+
setLightweightChartsFlag,
|
|
6
|
+
} from '../featureFlags'
|
|
7
|
+
|
|
8
|
+
const LS_KEY = 'alpha.flags.lightweightCharts'
|
|
9
|
+
|
|
10
|
+
/** jsdom の location.search をテストごとに設定する */
|
|
11
|
+
function setSearch(search: string): void {
|
|
12
|
+
window.history.replaceState(null, '', search === '' ? '/' : `/?${search}`)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// jsdom の localStorage が無効なため、useTheme.test.tsx と同じ in-memory Storage を stub する
|
|
16
|
+
function createMemoryStorage(): Storage {
|
|
17
|
+
const store = new Map<string, string>()
|
|
18
|
+
return {
|
|
19
|
+
getItem: (k: string) => store.get(k) ?? null,
|
|
20
|
+
setItem: (k: string, v: string) => {
|
|
21
|
+
store.set(k, v)
|
|
22
|
+
},
|
|
23
|
+
removeItem: (k: string) => {
|
|
24
|
+
store.delete(k)
|
|
25
|
+
},
|
|
26
|
+
clear: () => {
|
|
27
|
+
store.clear()
|
|
28
|
+
},
|
|
29
|
+
key: (i: number) => Array.from(store.keys())[i] ?? null,
|
|
30
|
+
get length() {
|
|
31
|
+
return store.size
|
|
32
|
+
},
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
let storage: Storage
|
|
37
|
+
|
|
38
|
+
beforeEach(() => {
|
|
39
|
+
storage = createMemoryStorage()
|
|
40
|
+
vi.stubGlobal('localStorage', storage)
|
|
41
|
+
setSearch('')
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
afterEach(() => {
|
|
45
|
+
vi.unstubAllGlobals()
|
|
46
|
+
vi.unstubAllEnvs()
|
|
47
|
+
window.history.replaceState({}, '', '/')
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
describe('resolveLightweightChartsFlag', () => {
|
|
51
|
+
// issue #231: TV チャートは既定 ON。docs/README は TV を主要機能として
|
|
52
|
+
// 提示しており(v0.3.0/v0.4.0 で移行済みと記載)、既定 OFF のままでは
|
|
53
|
+
// 公開 wheel の実挙動が docs と乖離する。
|
|
54
|
+
it('クエリ・localStorage・env が無いとき既定で true(TV レンダラ)を返す', () => {
|
|
55
|
+
expect(resolveLightweightChartsFlag()).toBe(true)
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
it('?tv=0 で false(visx fallback)になり localStorage に persist される', () => {
|
|
59
|
+
setSearch('tv=0')
|
|
60
|
+
expect(resolveLightweightChartsFlag()).toBe(false)
|
|
61
|
+
expect(storage.getItem(LS_KEY)).toBe('0')
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
it('?tv=1 で true になり localStorage に persist される', () => {
|
|
65
|
+
setSearch('tv=1')
|
|
66
|
+
expect(resolveLightweightChartsFlag()).toBe(true)
|
|
67
|
+
expect(storage.getItem(LS_KEY)).toBe('1')
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
it('localStorage の "0" で false を返す(クエリ無し)', () => {
|
|
71
|
+
storage.setItem(LS_KEY, '0')
|
|
72
|
+
expect(resolveLightweightChartsFlag()).toBe(false)
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
it('localStorage の "1" で true を返す', () => {
|
|
76
|
+
storage.setItem(LS_KEY, '1')
|
|
77
|
+
expect(resolveLightweightChartsFlag()).toBe(true)
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
// 既定 ON 化後も env で明示 OFF できること(CI やビルド時の退避経路)
|
|
81
|
+
it.each(['0', 'false'])('env VITE_USE_LIGHTWEIGHT_CHARTS=%s で false を返す', (raw) => {
|
|
82
|
+
vi.stubEnv('VITE_USE_LIGHTWEIGHT_CHARTS', raw)
|
|
83
|
+
expect(resolveLightweightChartsFlag()).toBe(false)
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
it.each(['1', 'true'])('env VITE_USE_LIGHTWEIGHT_CHARTS=%s で true を返す', (raw) => {
|
|
87
|
+
vi.stubEnv('VITE_USE_LIGHTWEIGHT_CHARTS', raw)
|
|
88
|
+
expect(resolveLightweightChartsFlag()).toBe(true)
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
it('認識できない env 値(typo 等)は無視して既定 true にフォールバックする', () => {
|
|
92
|
+
vi.stubEnv('VITE_USE_LIGHTWEIGHT_CHARTS', 'off')
|
|
93
|
+
expect(resolveLightweightChartsFlag()).toBe(true)
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
it('優先順位: クエリ ?tv=1 は localStorage の "0" に勝つ', () => {
|
|
97
|
+
storage.setItem(LS_KEY, '0')
|
|
98
|
+
setSearch('tv=1')
|
|
99
|
+
expect(resolveLightweightChartsFlag()).toBe(true)
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
it('優先順位: localStorage の "1" は env の "0" に勝つ', () => {
|
|
103
|
+
vi.stubEnv('VITE_USE_LIGHTWEIGHT_CHARTS', '0')
|
|
104
|
+
storage.setItem(LS_KEY, '1')
|
|
105
|
+
expect(resolveLightweightChartsFlag()).toBe(true)
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
it('優先順位: env の "0" は既定 true に勝つ(クエリ・storage 無し)', () => {
|
|
109
|
+
vi.stubEnv('VITE_USE_LIGHTWEIGHT_CHARTS', '0')
|
|
110
|
+
expect(resolveLightweightChartsFlag()).toBe(false)
|
|
111
|
+
})
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
describe('setLightweightChartsFlag', () => {
|
|
115
|
+
it('false を保存すると次回解決時に visx fallback になる', () => {
|
|
116
|
+
setLightweightChartsFlag(false)
|
|
117
|
+
expect(storage.getItem(LS_KEY)).toBe('0')
|
|
118
|
+
expect(resolveLightweightChartsFlag()).toBe(false)
|
|
119
|
+
})
|
|
120
|
+
})
|
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Feature flag 解決ロジック。issue #180 の lightweight-charts PoC
|
|
2
|
+
* Feature flag 解決ロジック。issue #180 の lightweight-charts PoC として導入し、
|
|
3
|
+
* issue #231 で既定 ON に反転(TV レンダラを正式採用。visx は `?tv=0` fallback)。
|
|
3
4
|
*
|
|
4
5
|
* 優先順位:
|
|
5
6
|
* 1. URL クエリ `?tv=1` / `?tv=0` (top priority — セッション中は localStorage へ persist)
|
|
6
7
|
* 2. localStorage['alpha.flags.lightweightCharts']
|
|
7
|
-
* 3. import.meta.env.VITE_USE_LIGHTWEIGHT_CHARTS
|
|
8
|
-
* 4. デフォルト
|
|
8
|
+
* 3. import.meta.env.VITE_USE_LIGHTWEIGHT_CHARTS('1'/'true' で ON、'0'/'false' で OFF)
|
|
9
|
+
* 4. デフォルト true
|
|
9
10
|
*
|
|
10
11
|
* SSR / non-DOM コンテキストでは env と デフォルトだけを評価する。
|
|
11
12
|
*/
|
|
12
13
|
|
|
13
14
|
const LS_KEY = 'alpha.flags.lightweightCharts'
|
|
14
15
|
const QS_KEY = 'tv'
|
|
16
|
+
const DEFAULT_FLAG = true
|
|
15
17
|
|
|
16
|
-
function readEnvFlag(): boolean {
|
|
18
|
+
function readEnvFlag(): boolean | null {
|
|
17
19
|
const raw = import.meta.env.VITE_USE_LIGHTWEIGHT_CHARTS
|
|
18
|
-
|
|
20
|
+
if (raw === '1' || raw === 'true') return true
|
|
21
|
+
if (raw === '0' || raw === 'false') return false
|
|
22
|
+
return null
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
function readQueryFlag(): boolean | null {
|
|
@@ -62,7 +66,7 @@ export function resolveLightweightChartsFlag(): boolean {
|
|
|
62
66
|
}
|
|
63
67
|
const fromStorage = readStorageFlag()
|
|
64
68
|
if (fromStorage != null) return fromStorage
|
|
65
|
-
return readEnvFlag()
|
|
69
|
+
return readEnvFlag() ?? DEFAULT_FLAG
|
|
66
70
|
}
|
|
67
71
|
|
|
68
72
|
/**
|
|
@@ -148,25 +148,28 @@ function BacktestScreenInner({ data, compact, lang }: Props) {
|
|
|
148
148
|
{L('エクイティ & ドローダウン', 'Equity & Drawdown')}
|
|
149
149
|
</SectionLabel>
|
|
150
150
|
<div style={{ display: 'flex', gap: 6, alignItems: 'center' }}>
|
|
151
|
-
|
|
152
|
-
data-testid="renderer-mode"
|
|
153
|
-
style={{
|
|
154
|
-
fontFamily: 'var(--mono)',
|
|
155
|
-
fontSize: 10,
|
|
156
|
-
letterSpacing: '0.08em',
|
|
157
|
-
color: 'var(--accent)',
|
|
158
|
-
padding: '2px 6px',
|
|
159
|
-
borderRadius: 4,
|
|
160
|
-
background: 'var(--accent-bg)',
|
|
161
|
-
border: '1px solid var(--accent-glow)',
|
|
162
|
-
}}
|
|
163
|
-
>
|
|
164
|
-
tv β
|
|
165
|
-
</span>
|
|
151
|
+
{/* issue #231: TV が既定レンダラになったため、開発時のみバッジを表示(本番露出を防ぐ) */}
|
|
166
152
|
{showRendererToggle && (
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
153
|
+
<>
|
|
154
|
+
<span
|
|
155
|
+
data-testid="renderer-mode"
|
|
156
|
+
style={{
|
|
157
|
+
fontFamily: 'var(--mono)',
|
|
158
|
+
fontSize: 10,
|
|
159
|
+
letterSpacing: '0.08em',
|
|
160
|
+
color: 'var(--accent)',
|
|
161
|
+
padding: '2px 6px',
|
|
162
|
+
borderRadius: 4,
|
|
163
|
+
background: 'var(--accent-bg)',
|
|
164
|
+
border: '1px solid var(--accent-glow)',
|
|
165
|
+
}}
|
|
166
|
+
>
|
|
167
|
+
tv
|
|
168
|
+
</span>
|
|
169
|
+
<button type="button" style={exportBtnS} onClick={toggleTvRenderer}>
|
|
170
|
+
{L('visx に戻す', 'Switch to visx')}
|
|
171
|
+
</button>
|
|
172
|
+
</>
|
|
170
173
|
)}
|
|
171
174
|
<button
|
|
172
175
|
type="button"
|
{alpha_visualizer-0.7.2 → alpha_visualizer-0.7.3}/frontend/src/screens/strategy/SignalChartCard.tsx
RENAMED
|
@@ -20,7 +20,7 @@ export interface SignalChartCardProps {
|
|
|
20
20
|
* StrategyScreen の「シグナル時系列」セクション。
|
|
21
21
|
*
|
|
22
22
|
* 責務:
|
|
23
|
-
* - feature flag
|
|
23
|
+
* - feature flag の gating(既定 ON。`?tv=0` で OFF にした場合は placeholder を表示)
|
|
24
24
|
* - `useStrategyHistorical(symbol)` の loading / no_data / error / ready 分岐
|
|
25
25
|
* - 空 trades のときも chart は表示し caption で「シグナルなし」と伝える
|
|
26
26
|
*
|
|
@@ -29,7 +29,7 @@ export interface SignalChartCardProps {
|
|
|
29
29
|
*/
|
|
30
30
|
export function SignalChartCard({ symbol, trades, regimeSeries, lang }: SignalChartCardProps) {
|
|
31
31
|
const L = makeL(lang)
|
|
32
|
-
// mount 時に 1 回だけ評価。?tv=
|
|
32
|
+
// mount 時に 1 回だけ評価。?tv= で URL を切り替えた場合はリロード前提(既存 BacktestScreen と同等)。
|
|
33
33
|
const [flagOn] = useState(() => resolveLightweightChartsFlag())
|
|
34
34
|
|
|
35
35
|
if (!flagOn) {
|
|
@@ -37,8 +37,8 @@ export function SignalChartCard({ symbol, trades, regimeSeries, lang }: SignalCh
|
|
|
37
37
|
<CardShell title={L('シグナル時系列', 'Signal Chart')}>
|
|
38
38
|
<Hint>
|
|
39
39
|
{L(
|
|
40
|
-
'
|
|
41
|
-
'Signal chart
|
|
40
|
+
'シグナル時系列は TV レンダラでのみ利用できます(?tv=1 で再有効化)',
|
|
41
|
+
'Signal chart requires the TV renderer (re-enable with ?tv=1)',
|
|
42
42
|
)}
|
|
43
43
|
</Hint>
|
|
44
44
|
</CardShell>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "alpha-visualizer"
|
|
3
|
-
version = "0.7.
|
|
3
|
+
version = "0.7.3"
|
|
4
4
|
description = "Web visualization tool for AlphaForge backtest results"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -85,7 +85,7 @@ dev = [
|
|
|
85
85
|
]
|
|
86
86
|
|
|
87
87
|
[tool.bumpversion]
|
|
88
|
-
current_version = "0.7.
|
|
88
|
+
current_version = "0.7.3"
|
|
89
89
|
commit = true
|
|
90
90
|
message = "chore: バージョン {new_version} にバンプ"
|
|
91
91
|
tag = true
|