alpha-visualizer 1.3.0__tar.gz → 1.3.2__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-1.3.0/.hypothesis/constants/812d29a19e56a27b → alpha_visualizer-1.3.2/.hypothesis/constants/64f671cc8bd3c7e4 +1 -1
- alpha_visualizer-1.3.0/.hypothesis/constants/ac0d9ed38453cfd0 → alpha_visualizer-1.3.2/.hypothesis/constants/a143537c99265376 +1 -1
- alpha_visualizer-1.3.0/.hypothesis/constants/04b2c2a699e215f4 → alpha_visualizer-1.3.2/.hypothesis/constants/e52ef865e1fc122f +1 -1
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/CHANGELOG.md +28 -1
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/PKG-INFO +1 -1
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/openapi.json +1 -1
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/errorMessage.test.ts +4 -2
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/errorMessage.ts +2 -2
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/__tests__/MaintenancePage.test.tsx +2 -2
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/pyproject.toml +2 -2
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/__init__.py +1 -1
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/routers/maintenance.py +6 -6
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/routers/run.py +6 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/routers/strategies.py +6 -1
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/services/forge_cli.py +42 -4
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/services/jobs.py +9 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/BrowsePage-D2iIruQk.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/BrowsePage-BtjWf_pg.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/BrowsePage-D2iIruQk.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/BrowsePage-BtjWf_pg.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/ChartDataTable-BihRD5zB.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ChartDataTable-B_PMsr6F.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/ChartDataTable-BihRD5zB.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ChartDataTable-B_PMsr6F.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/ComparePage-r2Kn5IKU.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ComparePage-BQLtkozx.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/ComparePage-r2Kn5IKU.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ComparePage-BQLtkozx.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/DetailPage-DhT4BIhx.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/DetailPage-DkgwWfN1.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/DetailPage-DhT4BIhx.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/DetailPage-DkgwWfN1.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/EquityDrawdownPaneTV-BsdmPyAa.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/EquityDrawdownPaneTV-BqqjTDsR.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/EquityDrawdownPaneTV-BsdmPyAa.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/EquityDrawdownPaneTV-BqqjTDsR.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/IdeasPage-DaPbS4Yf.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/IdeasPage-CZt2Um3Q.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/IdeasPage-DaPbS4Yf.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/IdeasPage-CZt2Um3Q.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/LivePage-Q3WKgh88.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/LivePage-nyToYYsN.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/LivePage-Q3WKgh88.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/LivePage-nyToYYsN.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/LiveTab-CYKQnJC8.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/LiveTab-CB_3VlBE.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/LiveTab-CYKQnJC8.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/LiveTab-CB_3VlBE.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/MaintenancePage-BP3oVssz.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/MaintenancePage-B2IUJ3dt.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/MaintenancePage-BP3oVssz.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/MaintenancePage-B2IUJ3dt.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/MetricsSummaryBarV2-gzksgQGt.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/MetricsSummaryBarV2-BXEamLE3.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/MetricsSummaryBarV2-gzksgQGt.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/MetricsSummaryBarV2-BXEamLE3.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/ReportPage-Cf2NnZ2Z.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ReportPage-izblXE1Q.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/ReportPage-Cf2NnZ2Z.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ReportPage-izblXE1Q.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/ReturnDistributionChart-0hD8xUWa.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ReturnDistributionChart-D69B-itS.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/ReturnDistributionChart-0hD8xUWa.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ReturnDistributionChart-D69B-itS.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/RunLogDetails-BHJ70KpR.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/RunLogDetails-CG22uYt8.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/RunLogDetails-BHJ70KpR.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/RunLogDetails-CG22uYt8.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/RunsPage-DPkp5DAh.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/RunsPage-CXsBfoVg.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/RunsPage-DPkp5DAh.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/RunsPage-CXsBfoVg.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/SettingsToggles-CNzWlW9f.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/SettingsToggles-tt-Rmlqz.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/SettingsToggles-CNzWlW9f.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/SettingsToggles-tt-Rmlqz.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/ShareCardButton-CN2fIICV.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ShareCardButton-DEt_rFr8.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/ShareCardButton-CN2fIICV.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/ShareCardButton-DEt_rFr8.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/errorMessage-BzDBBHE6.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/errorMessage-CogRMclS.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/errorMessage-BzDBBHE6.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/errorMessage-CogRMclS.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/index-xSIYNDJt.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/index-CSTPOquK.js +3 -3
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/index-xSIYNDJt.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/index-CSTPOquK.js.map +1 -1
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/useBacktestData-B7fFEVc7.js → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/useBacktestData-BcRTA3hv.js +2 -2
- alpha_visualizer-1.3.0/src/alpha_visualizer/static/assets/useBacktestData-B7fFEVc7.js.map → alpha_visualizer-1.3.2/src/alpha_visualizer/static/assets/useBacktestData-BcRTA3hv.js.map +1 -1
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/index.html +1 -1
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_maintenance.py +34 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_run.py +29 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_strategy_save.py +29 -0
- alpha_visualizer-1.3.2/tests/services/test_forge_cli.py +67 -0
- alpha_visualizer-1.3.2/tests/services/test_forge_failure_translation.py +60 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/services/test_jobs.py +25 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/uv.lock +1 -1
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.agents/skills/source-command-audit-licenses/SKILL.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.agents/skills/source-command-pre-release/SKILL.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.claude/commands/audit-licenses.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.claude/commands/pre-release.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.codex/hooks.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.github/ISSUE_TEMPLATE/bug_report_ja.yml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.github/ISSUE_TEMPLATE/feature_request_ja.yml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.github/codeql/README.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.github/codeql/codeql-config.yml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.github/dependabot.yml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.github/workflows/ci.yml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.github/workflows/codeql.yml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.github/workflows/lighthouse.yml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.github/workflows/release.yml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.gitignore +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/.gitignore +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/0bf3463e8f4751b8 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/0caad6595136948b +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/184fa6728d185660 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/296b8092179c9f55 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/312a7aaf12a1fd47 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/316886ef98081ce9 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/331e194303817b32 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/36df1978b70731f9 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/43f703bafb1e4b04 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/4577b97f57a8a832 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/4726660442f99a00 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/4a1c4d1532cab28e +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/4b255f25d1067b71 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/4fd44198986300fe +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/508b282112ab038e +0 -0
- /alpha_visualizer-1.3.0/.hypothesis/constants/b3227e2cf0b90fa4 → /alpha_visualizer-1.3.2/.hypothesis/constants/5320b01940d4c4ce +0 -0
- /alpha_visualizer-1.3.0/.hypothesis/constants/0e92a16981d06d97 → /alpha_visualizer-1.3.2/.hypothesis/constants/59c16b30deb5c037 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/5c80be020ed7a646 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/5c9eb073058f11a0 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/5fca39058ed3753e +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/6abf3e9a1356666c +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/707dd0d075295200 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/757b1f8305546439 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/7cea79ac6c0799bb +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/7f90c9d611001617 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/8d9ea99caee79fd4 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/906238816b505c1e +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/98d0c8b0e6532609 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/99c8a89c4a9a7859 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/9c2871fc1ddbab71 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/a636a4647020033d +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/ab4df659c6b192db +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/acddbf8018c5d884 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/af039261f357a5c1 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/b5541576e1e9aea7 +0 -0
- /alpha_visualizer-1.3.0/.hypothesis/constants/7c9231be4d08456f → /alpha_visualizer-1.3.2/.hypothesis/constants/b6221357177fc116 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/b9ff5bcd3a53e3a7 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/bfd4c6ca4462fe73 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/c4312fe8499bc1f7 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/c5349cb90ddc7968 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/d34317036474de6e +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/da39a3ee5e6b4b0d +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/dbe657c7851479a7 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/e41b0128c49db70e +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/e44a457d795e56c2 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/ea2d606acbfff989 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/eed5e66c16ae84b8 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/f7c4a04c97c0daf8 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/fa443af6269a6e02 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/fa54b8596401d232 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/.hypothesis/constants/ff4517cbfe51fea1 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/AGENTS.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/CLAUDE.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/CODE_OF_CONDUCT.en.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/CODE_OF_CONDUCT.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/CONTRIBUTING.en.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/CONTRIBUTING.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/LICENSE +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/NOTICE +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/README.en.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/README.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/SECURITY.en.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/SECURITY.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/THIRDPARTY_LICENSES.txt +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/cliff.toml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/adr/0001-pages-vs-screens.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/adr/0002-charts-visx-vs-components.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/adr/0003-openapi-typescript-codegen.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/adr/0004-condition-node-discriminated-union.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/lighthouse-ci.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/en/backtest-tv.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/en/browse.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/en/compare-heatmap.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/en/compare.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/en/detail.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/en/ideas.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/en/live.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/en/optimize.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/en/strategy-signal-tv.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/en/strategy.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/ja/backtest-tv.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/ja/browse.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/ja/compare-heatmap.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/ja/compare.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/ja/detail.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/ja/ideas.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/ja/live.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/ja/optimize.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/ja/strategy-signal-tv.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/screenshots/ja/strategy.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/superpowers/plans/2026-07-25-live-equity-rich.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/superpowers/plans/2026-07-26-browse-recipe-rollup.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/superpowers/plans/2026-07-27-browse-symbol-coverage.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/superpowers/plans/2026-07-27-maintenance-orphan-runs.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/superpowers/specs/2026-07-25-live-equity-rich-design.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/superpowers/specs/2026-07-26-browse-recipe-rollup-design.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/superpowers/specs/2026-07-27-browse-symbol-coverage-design.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/docs/superpowers/specs/2026-07-27-maintenance-orphan-runs-design.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/.gitignore +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/.npmrc +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/.size-limit.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/.storybook/main.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/.storybook/preview.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/CLAUDE.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/README.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/THIRDPARTY_FONTS.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/README.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/historical/SPY_1d.parquet +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/ideas/ideas.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/results/backtest_results.db +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/strategies/dual_symbol_qqq.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/strategies/dual_symbol_spy.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/strategies/ema_trend_v1.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/strategies/ema_trend_v2.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/strategies/ema_trend_v3.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/strategies/idle_recipe_v1.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/strategies/idle_recipe_v2.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/strategies/momo_breakout.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/strategies/no_symbol_v1.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/strategies/rsi_reversal.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/data/strategies/sma_cross.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/fixtures/forge/forge.yaml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/helpers/locators.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/samples/sample-fixture.spec.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/screenshots/capture.spec.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/screenshots/equity-tv.spec.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/screenshots/strategy-signal-tv.spec.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/specs/browse.spec.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/specs/compare.spec.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/specs/detail.spec.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/specs/i18n.spec.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/specs/maintenance.spec.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/specs/share.spec.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/visual/README.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/visual/__snapshots__/linux/equity-drawdown-tv.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/visual/__snapshots__/linux/strategy-signal-tv.png +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/e2e/visual/tv-charts.spec.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/eslint.config.js +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/index.html +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/package.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/playwright.config.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/playwright.samples.config.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/playwright.screenshots.config.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/playwright.visual.config.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/pnpm-lock.yaml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/pnpm-workspace.yaml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/public/favicon.svg +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/public/icons.svg +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/api/__tests__/client.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/api/client.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/api/types.gen.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/api/types.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/CompareEquityTV.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/CompareEquityTV.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/EquityDrawdownPaneTV.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/EquityDrawdownPaneTV.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/RollingMetricsChartTV.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/RollingMetricsChartTV.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/StrategySignalChartTV.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/StrategySignalChartTV.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/WFOEquityTV.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/WFOEquityTV.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/__tests__/CompareEquityTV.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/__tests__/EquityDrawdownPaneTV.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/__tests__/RollingMetricsChartTV.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/__tests__/StrategySignalChartTV.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/__tests__/WFOEquityTV.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/__tests__/data.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/__tests__/regimeBands.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/__tests__/theme.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/__tests__/trades.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/data.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/regimeBands.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/theme.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/tv/trades.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/visx/AnnualReturnsBarV.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/visx/CorrelationHeatmapV.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/visx/MAEMFEScatterV.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/visx/MonthlyHeatmapV.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/visx/OptimizeHeatmapV.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/visx/OptimizeScatterV.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/visx/Sparkline.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/charts/visx/Sparkline.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/AppFooter.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/AppNav.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/CommandPalette.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/ConfirmActionButton.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/DetailToolbar.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/MetricsSummaryBarV2.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/MetricsSummaryBarV2.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/RootLayout.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/RouteErrorScreen.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/RunLogDetails.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/SettingsToggles.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/ShareCardButton.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/StrategyHero.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/__tests__/AppFooter.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/__tests__/AppNav.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/__tests__/CommandPalette.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/__tests__/CorrelationHeatmap.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/__tests__/MetricsSummaryBarV2.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/__tests__/RootLayout.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/__tests__/RouteErrorScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/__tests__/SettingsToggles.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/__tests__/ShareCardButton.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/__tests__/ShareCardXButton.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/__tests__/responsive-styles.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/CollapsibleSection.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/CompareFloatingBar.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/CreateStrategyEntry.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/FilterBar.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/GroupByToggle.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/Heroline.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/RecipeRow.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/RunCompareView.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/RunHistoryTab.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/SavedViews.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/StrategyRow.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/StrategySlidePanel.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/StrategyTable.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/StrategyTableFooter.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/SymbolCoverageTable.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/__tests__/CollapsibleSection.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/__tests__/CreateStrategyEntry.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/__tests__/FilterBar.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/__tests__/RecipeRow.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/__tests__/RunCompareView.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/__tests__/RunHistoryTab.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/__tests__/StrategyRow.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/__tests__/StrategySlidePanel.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/__tests__/StrategyTable.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/__tests__/StrategyTableFooter.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/browser/__tests__/SymbolCoverageTable.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/AnnualReturnsBar.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/AnnualSummaryTable.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/CorrelationHeatmap.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/DrawdownDetailChart.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/HoldingPeriodChart.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/MAEMFEScatter.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/MonteCarloChart.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/OptimizeHeatmap.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/OptimizeScatter.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/ReturnDistributionChart.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/VaRChart.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/WFOTimeline.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/WeekdayPerformanceChart.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/__tests__/AnnualSummaryTable.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/__tests__/HoldingPeriodChart.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/charts/__tests__/MonteCarloChart.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/jobs/JobRunnerCard.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/live/LiveKpiRow.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/live/LivePositionView.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/live/LivePositionsTable.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/live/LiveTab.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/live/SummaryCard.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/live/__tests__/LiveKpiRow.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/live/__tests__/LivePositionView.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/live/__tests__/LivePositionsTable.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/live/__tests__/LiveTab.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/live/__tests__/format.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/live/format.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/CarryAdjustedCard.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/CompareTable.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/ISOOSMetrics.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/MetricInfoTip.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/MetricsGrid.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/PortfolioComposer.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/RegimeBreakdownCards.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/SignalQualityBadge.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/SubperiodMetrics.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/__tests__/CompareTable.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/__tests__/MetricInfoTip.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/__tests__/MetricsGrid.hidden.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/__tests__/MetricsGrid.sentinel.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/__tests__/MetricsGrid.tooltip.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/__tests__/SignalQualityBadge.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/__tests__/SubperiodMetrics.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/__tests__/evaluateGood.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/metrics/evaluate.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/trades/TradeTable.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/trades/__tests__/TradeTable.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/tuning/DuplicateStrategyCard.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/tuning/TuningPanel.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/tuning/__tests__/DuplicateStrategyCard.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/components/tuning/__tests__/TuningPanel.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/constants/__tests__/metricDefinitions.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/constants/helpLinks.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/constants/metricDefinitions.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/constants/runSource.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/contexts/DashboardContext.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/contexts/dashboardConstants.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/__tests__/definedTokens.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/__tests__/noHardcodedColors.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/__tests__/tokens.contrast.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/a11y.css +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/Button.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/Card.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/ChartDataTable.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/Chip.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/ConfirmDialog.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/Divider.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/ErrorBanner.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/KeyValue.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/Loading.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/OverflowMenu.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/Pill.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/Pill.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/SectionHeader.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/SortHeaderCell.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/Stat.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/Stat.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/TabBar.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/Toolbar.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/__tests__/ChartDataTable.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/__tests__/ConfirmDialog.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/__tests__/ErrorBanner.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/__tests__/Loading.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/__tests__/OverflowMenu.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/__tests__/Pill.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/__tests__/SortHeaderCell.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/__tests__/TabBar.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/index.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/primitives/srOnly.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/tokens.css +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/design/useChartTheme.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useDocumentTitle.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useEquityViewport.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useFetchByKey.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useJobRunner.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useLiveAvailability.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useOrphanRuns.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useRunBacktest.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useScrollRestoration.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useSparklineCache.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useStarredStrategies.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useStrategyHistorical.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useStrategyList.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useSyncedTimeRange.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useTheme.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useViewerSettings.lang.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/__tests__/useViewerSettings.shared.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useBacktestData.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useDebounce.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useDocumentTitle.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useEquityViewport.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useFetchByKey.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useIdeasList.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useJobRunner.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useLiveAvailability.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useLiveList.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useOrphanRuns.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useRecentStrategies.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useScrollRestoration.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useSparklineCache.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useStarredStrategies.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useStrategyHistorical.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useStrategyList.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useSyncedTimeRange.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/hooks/useTheme.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/i18n/__tests__/strings.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/i18n/strings.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/annualSummary.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/benchmark.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/bestSharpe.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/correlation.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/distribution.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/drawdown.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/format.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/holdingPeriod.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/liveEquity.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/metricLabel.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/monteCarlo.properties.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/monteCarlo.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/optimizeHeatmap.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/paramImportance.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/portfolio.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/recipes.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/rolling.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/searchParams.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/searchStrategies.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/sentinel.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/shareCard.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/shareCardMulti.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/shareTweet.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/subperiod.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/symbolStats.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/walkForward.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/weekday.test.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/annualSummary.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/assetClass.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/benchmark.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/bestSharpe.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/correlation.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/csv.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/distribution.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/drawdown.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/exportPng.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/format.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/holdingPeriod.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/liveEquity.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/metricLabel.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/monteCarlo.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/optimizeHeatmap.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/paramImportance.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/portfolio.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/recipes.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/rolling.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/searchParams.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/searchStrategies.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/sentinel.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/shareCard.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/shareTweet.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/subperiod.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/symbolStats.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/walkForward.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/weekday.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/main.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/mock/btData.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/BrowsePage.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/ComparePage.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/DetailPage.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/IdeasPage.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/LivePage.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/MaintenancePage.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/ReportPage.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/RunsPage.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/__tests__/BrowsePage.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/__tests__/ComparePage.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/__tests__/DetailPage.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/__tests__/ReportPage.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/pages/__tests__/RunsPage.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/router.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/BacktestScreen.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/BacktestScreen.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/BrowseScreen.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/CompareScreen.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/CompareScreen.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/ISOOSScreen.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/IdeasScreen.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/IdeasScreen.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/LiveScreen.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/LiveScreen.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/MaintenanceScreen.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/OptimizeScreen.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/OptimizeScreen.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/StrategyScreen.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/WFOScreen.stories.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/WFOScreen.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/__tests__/BacktestScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/__tests__/CompareScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/__tests__/ISOOSScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/__tests__/LiveScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/__tests__/MaintenanceScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/__tests__/OptimizeScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/__tests__/WFOScreen.test.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/screens/strategy/SignalChartCard.tsx +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/test-setup.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/tsconfig.app.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/tsconfig.e2e.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/tsconfig.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/tsconfig.node.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/vite.config.ts +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/lighthouserc.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/release.sh +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/README.en.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/README.md +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/__init__.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/_generators/__init__.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/_generators/compatibility_matrix.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/_generators/ideas_defs.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/_generators/pseudo_backtest.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/_generators/pseudo_grid.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/_generators/pseudo_wfo.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/_generators/strategy_defs.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/_generators/synthetic_ohlcv.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/_generators/writers.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/build_samples.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/sample-forge/data/ideas/ideas.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/sample-forge/data/results/backtest_results.db +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/sample-forge/data/strategies/bbands_breakout_v1.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/sample-forge/data/strategies/donchian_turtle_v1.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/sample-forge/data/strategies/ema_adx_macd_v1.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/sample-forge/data/strategies/macd_crossover_v1.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/sample-forge/data/strategies/range_reversion_v1.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/sample-forge/data/strategies/rsi_reversion_v1.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/sample-forge/data/strategies/sma_crossover_v1.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/sample-forge/data/strategies/supertrend_adx_v1.json +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/samples/sample-forge/forge.yaml +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/scripts/compare_sqlite_dump.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/scripts/generate_openapi.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/scripts/generate_thirdparty_js.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/scripts/verify_build_artifacts.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/app.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/cli.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/db.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/dependencies.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/errors.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/forge_config.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/log_sanitize.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/repositories/__init__.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/repositories/backtest_results.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/repositories/ideas.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/repositories/live.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/repositories/optimization.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/repositories/strategies.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/routers/__init__.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/routers/historical.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/routers/ideas.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/routers/jobs.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/routers/live.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/routers/optimize.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/routers/results.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/routers/wfo.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/schemas/__init__.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/schemas/health.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/schemas/historical.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/schemas/ideas.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/schemas/live.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/schemas/maintenance.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/schemas/optimize.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/schemas/results.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/schemas/strategies.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/schemas/wfo.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/services/__init__.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/services/backtest.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/services/historical.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/services/live.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/services/tuning.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/services/walk_forward.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/SortHeaderCell-CetYtnjX.js +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/SortHeaderCell-CetYtnjX.js.map +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/fonts-DJsrEZjK.css +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/format-D0fEne3x.js +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/format-D0fEne3x.js.map +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/index-ngPg-0Y0.css +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-BLrFJfvD.woff +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-iW8qmuJY.woff2 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-BFXNXuvF.woff2 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-pobXraBK.woff +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-BgSTtRxb.woff2 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-D7bG6gX1.woff +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/react-CuMkScR3.js +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/react-CuMkScR3.js.map +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/react-router-CU9OAEs1.js +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/react-router-CU9OAEs1.js.map +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/rolldown-runtime-C0phanGV.js +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DMD1h6_f.woff +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DouSKlru.woff2 +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/tv-D3Zm-VpQ.js +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/tv-D3Zm-VpQ.js.map +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/useDocumentTitle-DPighAM_.js +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/useDocumentTitle-DPighAM_.js.map +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/visx-HscrFEDZ.js +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/assets/visx-HscrFEDZ.js.map +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/favicon.svg +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/static/icons.svg +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/__init__.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/conftest.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/factories.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/fixtures/build_e2e_fixture.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/repositories/__init__.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/repositories/test_backtest_results_repo.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/repositories/test_ideas_reader.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/repositories/test_live_repo.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/repositories/test_optimization_repo.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/repositories/test_strategies_repo.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/__init__.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_db_mode_write_paths.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_forge_yaml_integration.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_historical.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_ideas.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_jobs.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_live.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_optimize.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_results.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_sparkline.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_strategies.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_strategies_source.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_strategy_duplicate.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/routers/test_wfo.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/samples/__init__.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/samples/test_pseudo_backtest.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/samples/test_pseudo_grid.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/samples/test_pseudo_wfo.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/samples/test_sample_forge.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/samples/test_strategy_defs.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/samples/test_synthetic_ohlcv.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/samples/test_writers.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/schemas/__init__.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/schemas/test_schemas.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/services/__init__.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/services/test_backtest.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/services/test_backtest_properties.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/services/test_historical.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/services/test_live.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/services/test_tuning.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/services/test_wfo.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/test_app.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/test_cli.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/test_compare_sqlite_dump.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/test_db.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/test_dependencies.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/test_errors.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/test_forge_config.py +0 -0
- {alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/tests/test_log_sanitize.py +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
# file: /home/runner/work/alpha-visualizer/alpha-visualizer/src/alpha_visualizer/services/forge_cli.py
|
|
2
2
|
# hypothesis_version: 6.161.6
|
|
3
3
|
|
|
4
|
-
['1', 'FORGE_CONFIG', 'FORGE_NONINTERACTIVE', 'forge', 'forge.yaml', '{', '}', '~']
|
|
4
|
+
['1', 'FORGE_CONFIG', 'FORGE_NONINTERACTIVE', 'alpha-forge', 'eula', 'forge.yaml', 'no such command', '{', '}', '~']
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
# file: /home/runner/work/alpha-visualizer/alpha-visualizer/src/alpha_visualizer/routers/maintenance.py
|
|
2
2
|
# hypothesis_version: 6.161.6
|
|
3
3
|
|
|
4
|
-
[400, 900, '--dry-run', '--json', '--strategy', '--vacuum', '-y', 'backtest', 'backtest_rows', 'bytes_after', 'bytes_before', 'count', 'deleted', 'engine', '
|
|
4
|
+
[400, 900, '--dry-run', '--json', '--strategy', '--vacuum', '-y', 'backtest', 'backtest_rows', 'bytes_after', 'bytes_before', 'count', 'deleted', 'engine', 'optimization_rows', 'orphans', 'prune-orphans', 'strategy_ids', 'total_bytes', 'vacuum_error']
|
|
@@ -11,7 +11,16 @@ alpha-visualizer の全バージョン変更履歴です。
|
|
|
11
11
|
_(EN) Entries below are generated from Conventional Commits (Japanese). Group names: 新機能 = Features, バグ修正 = Bug fixes, リファクタリング = Refactoring, パフォーマンス改善 = Performance, ドキュメント = Docs, テスト = Tests, その他 = Chore. Breaking commits are tagged 破壊的変更._
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
## [
|
|
14
|
+
## [1.3.1] - 2026-08-01
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### バグ修正
|
|
18
|
+
|
|
19
|
+
- forge CLI の実行ファイル名を alpha-forge に修正して実行系機能を復旧 (#461)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## [1.3.0] - 2026-08-01
|
|
15
24
|
|
|
16
25
|
|
|
17
26
|
### CI/CD
|
|
@@ -28,12 +37,27 @@ _(EN) Entries below are generated from Conventional Commits (Japanese). Group na
|
|
|
28
37
|
- UI 文言の平易化・統一(snake_case 露出/独自用語/CLI 前提文言/表記ゆれ) (#439)
|
|
29
38
|
|
|
30
39
|
|
|
40
|
+
- PyPI メタデータを更新(Production/Stable・Python 3.12–3.14・Doc URL 英語入口) (#457)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
- API 境界の小粒改善(strategy_id 規約統一・/health の mask_home・WFO/Optimize 遅延フェッチ) (#456)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
- CodeQL py/empty-except 指摘に対応(フォールバック意図のコメントを明記) (#459)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
- audit-licenses の DEV_ONLY を新 dev 依存に追従し THIRDPARTY_LICENSES.txt を再生成 (#460)
|
|
50
|
+
|
|
51
|
+
|
|
31
52
|
|
|
32
53
|
### ドキュメント
|
|
33
54
|
|
|
34
55
|
- README に同梱サンプルの導線・Live/Ideas スクショ・FAQ リンクを追加する (#410)
|
|
35
56
|
|
|
36
57
|
|
|
58
|
+
- CHANGELOG からリリース作業ノイズを除外し破壊的変更の履歴と英語注記を追加 (#458)
|
|
59
|
+
|
|
60
|
+
|
|
37
61
|
|
|
38
62
|
### バグ修正
|
|
39
63
|
|
|
@@ -187,6 +211,9 @@ _(EN) Entries below are generated from Conventional Commits (Japanese). Group na
|
|
|
187
211
|
- 最適化ビューにパラメータ重要度(Spearman 順位相関)バーを追加 (#454)
|
|
188
212
|
|
|
189
213
|
|
|
214
|
+
- 取引一覧の行クリックで該当期間へチャートジャンプ(共有 viewport + 概要タブ切替) (#455)
|
|
215
|
+
|
|
216
|
+
|
|
190
217
|
|
|
191
218
|
## [1.2.2] - 2026-07-29
|
|
192
219
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: alpha-visualizer
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.2
|
|
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
|
{alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/frontend/src/lib/__tests__/errorMessage.test.ts
RENAMED
|
@@ -68,11 +68,13 @@ describe('extractApiErrorDetail (issue #301)', () => {
|
|
|
68
68
|
|
|
69
69
|
describe('messageForApiErrorCode (issue #358)', () => {
|
|
70
70
|
const raw =
|
|
71
|
-
'API 503: {"detail":"forge コマンドが見つかりません。AlphaForge を導入してください / forge command not found in PATH. Install AlphaForge — https://alforgelabs.com","code":"forge_cli_not_found"}'
|
|
71
|
+
'API 503: {"detail":"alpha-forge コマンドが見つかりません。AlphaForge を導入してください / alpha-forge command not found in PATH. Install AlphaForge — https://alforgelabs.com","code":"forge_cli_not_found"}'
|
|
72
72
|
|
|
73
73
|
it('maps forge_cli_not_found to a single-language message (ja)', () => {
|
|
74
74
|
const msg = messageForApiErrorCode(raw, 'ja')
|
|
75
|
-
|
|
75
|
+
// PATH 上の実行ファイル名は `alpha-forge`(v0.5.0 で `forge` から改名)。
|
|
76
|
+
// 存在しない `forge` を名指しすると、ユーザーが誤った名前で PATH を確認する。
|
|
77
|
+
expect(msg).toContain('alpha-forge コマンドが見つかりません')
|
|
76
78
|
expect(msg).not.toContain('not found in PATH')
|
|
77
79
|
expect(msg).toContain('https://alforgelabs.com')
|
|
78
80
|
})
|
|
@@ -72,8 +72,8 @@ export function messageForApiErrorCode(
|
|
|
72
72
|
const code = extractApiErrorCode(raw)
|
|
73
73
|
if (code === 'forge_cli_not_found') {
|
|
74
74
|
return L(
|
|
75
|
-
'forge コマンドが見つかりません。AlphaForge を導入してください — https://alforgelabs.com',
|
|
76
|
-
'forge command not found in PATH. Install AlphaForge — https://alforgelabs.com',
|
|
75
|
+
'alpha-forge コマンドが見つかりません。AlphaForge を導入してください — https://alforgelabs.com',
|
|
76
|
+
'alpha-forge command not found in PATH. Install AlphaForge — https://alforgelabs.com',
|
|
77
77
|
)
|
|
78
78
|
}
|
|
79
79
|
return null
|
|
@@ -63,7 +63,7 @@ describe('MaintenancePage error normalization (review: Important 1)', () => {
|
|
|
63
63
|
// サーバーの detail は curl 利用者向けに日英連結のままだが、UI では
|
|
64
64
|
// 機械可読 code から表示言語のみの文言へ写像する(issue #358)。
|
|
65
65
|
const rawMessage =
|
|
66
|
-
'API 503: {"detail":"forge コマンドが見つかりません。AlphaForge を導入してください / forge command not found in PATH. Install AlphaForge — https://alforgelabs.com","code":"forge_cli_not_found"}'
|
|
66
|
+
'API 503: {"detail":"alpha-forge コマンドが見つかりません。AlphaForge を導入してください / alpha-forge command not found in PATH. Install AlphaForge — https://alforgelabs.com","code":"forge_cli_not_found"}'
|
|
67
67
|
vi.mocked(api.listOrphanRuns).mockRejectedValue(
|
|
68
68
|
new ApiError(rawMessage, 503, '/api/maintenance/orphan-runs'),
|
|
69
69
|
)
|
|
@@ -76,7 +76,7 @@ describe('MaintenancePage error normalization (review: Important 1)', () => {
|
|
|
76
76
|
|
|
77
77
|
const alert = await waitFor(() => screen.getByRole('alert'))
|
|
78
78
|
// 表示言語(既定 ja)の文言だけが出る(日英連結を出さない)
|
|
79
|
-
expect(alert.textContent).toContain('forge コマンドが見つかりません')
|
|
79
|
+
expect(alert.textContent).toContain('alpha-forge コマンドが見つかりません')
|
|
80
80
|
expect(alert.textContent).not.toContain('not found in PATH')
|
|
81
81
|
// AlphaForge への導線 URL は維持する
|
|
82
82
|
expect(alert.textContent).toContain('alforgelabs.com')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "alpha-visualizer"
|
|
3
|
-
version = "1.3.
|
|
3
|
+
version = "1.3.2"
|
|
4
4
|
description = "Web visualization tool for AlphaForge backtest results"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -93,7 +93,7 @@ dev = [
|
|
|
93
93
|
]
|
|
94
94
|
|
|
95
95
|
[tool.bumpversion]
|
|
96
|
-
current_version = "1.3.
|
|
96
|
+
current_version = "1.3.2"
|
|
97
97
|
commit = true
|
|
98
98
|
message = "chore: バージョン {new_version} にバンプ"
|
|
99
99
|
tag = true
|
{alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/routers/maintenance.py
RENAMED
|
@@ -27,11 +27,11 @@ from alpha_visualizer.schemas.maintenance import (
|
|
|
27
27
|
)
|
|
28
28
|
from alpha_visualizer.services.forge_cli import (
|
|
29
29
|
FORGE_NOT_FOUND_MESSAGE,
|
|
30
|
-
FORGE_SUBCOMMAND_NOT_FOUND_MESSAGE,
|
|
31
30
|
build_forge_env,
|
|
32
31
|
mask_home,
|
|
33
32
|
parse_json_lenient,
|
|
34
33
|
resolve_forge_exe,
|
|
34
|
+
translate_forge_failure,
|
|
35
35
|
)
|
|
36
36
|
|
|
37
37
|
logger = logging.getLogger(__name__)
|
|
@@ -65,12 +65,12 @@ def _run_forge(argv: list[str], forge_cfg: ForgeConfig, timeout: int) -> dict[st
|
|
|
65
65
|
|
|
66
66
|
if proc.returncode != 0:
|
|
67
67
|
# 空一覧を返して「掃除済み」と誤読させてはいけない
|
|
68
|
+
# 既知の失敗(EULA 未同意 / forge が古くサブコマンドを持たない)は、
|
|
69
|
+
# 生の Click 出力ではなく次の一歩を示す案内に変換する。
|
|
70
|
+
guidance = translate_forge_failure(proc.stdout or "", proc.stderr or "")
|
|
71
|
+
if guidance is not None:
|
|
72
|
+
raise ExternalProcessError(guidance)
|
|
68
73
|
raw = proc.stderr or proc.stdout or ""
|
|
69
|
-
# forge は導入済みだがバージョンが古く prune-orphans を持たないケース。
|
|
70
|
-
# Click が出す生の "No such command 'xxx'." をそのまま見せず、更新を
|
|
71
|
-
# 促す導線付きメッセージに変換する(判定は大文字小文字を無視)。
|
|
72
|
-
if "no such command" in raw.lower():
|
|
73
|
-
raise ExternalProcessError(FORGE_SUBCOMMAND_NOT_FOUND_MESSAGE)
|
|
74
74
|
detail = mask_home(raw.strip())
|
|
75
75
|
raise ExternalProcessError(f"forge が異常終了しました(exit {proc.returncode}): {detail}")
|
|
76
76
|
|
|
@@ -38,6 +38,7 @@ from alpha_visualizer.services.forge_cli import (
|
|
|
38
38
|
mask_home,
|
|
39
39
|
parse_json_lenient,
|
|
40
40
|
resolve_forge_exe,
|
|
41
|
+
translate_forge_failure,
|
|
41
42
|
)
|
|
42
43
|
|
|
43
44
|
logger = logging.getLogger(__name__)
|
|
@@ -187,6 +188,11 @@ def _run_backtest_guarded(
|
|
|
187
188
|
) from exc
|
|
188
189
|
|
|
189
190
|
if proc.returncode != 0:
|
|
191
|
+
# 既知の失敗(EULA 未同意等)は生の Click 出力ではなく次の一歩を示す
|
|
192
|
+
# 案内に変換する。プロンプト本体は stdout に出るため両方を渡す。
|
|
193
|
+
guidance = translate_forge_failure(proc.stdout or "", proc.stderr or "")
|
|
194
|
+
if guidance is not None:
|
|
195
|
+
raise ExternalProcessError(guidance)
|
|
190
196
|
# 成功時 log_tail と同じ末尾丸め+ホームパスマスクを通し、
|
|
191
197
|
# 長大なトレースバックでレスポンスが膨らまないようにする。
|
|
192
198
|
detail = (
|
{alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/routers/strategies.py
RENAMED
|
@@ -52,6 +52,7 @@ from alpha_visualizer.services.forge_cli import (
|
|
|
52
52
|
build_forge_env,
|
|
53
53
|
mask_home,
|
|
54
54
|
resolve_forge_exe,
|
|
55
|
+
translate_forge_failure,
|
|
55
56
|
)
|
|
56
57
|
from alpha_visualizer.services.tuning import build_duplicate_file, build_override_file
|
|
57
58
|
|
|
@@ -404,7 +405,11 @@ def _delegate_forge_strategy_save(
|
|
|
404
405
|
log_tail = mask_home("\n".join(tail_lines)) if tail_lines else None
|
|
405
406
|
|
|
406
407
|
if proc.returncode != 0:
|
|
407
|
-
|
|
408
|
+
# 既知の失敗(EULA 未同意等)は生の Click 出力ではなく次の一歩を示す
|
|
409
|
+
# 案内に変換する。forge の検証エラーは従来どおりそのまま表面化させる
|
|
410
|
+
# (スキーマの SSoT は forge 側にあるため)。
|
|
411
|
+
guidance = translate_forge_failure(proc.stdout or "", proc.stderr or "")
|
|
412
|
+
raise ExternalProcessError(guidance or log_tail or failure_message)
|
|
408
413
|
return log_tail
|
|
409
414
|
|
|
410
415
|
|
{alpha_visualizer-1.3.0 → alpha_visualizer-1.3.2}/src/alpha_visualizer/services/forge_cli.py
RENAMED
|
@@ -16,8 +16,8 @@ from alpha_visualizer.forge_config import ForgeConfig
|
|
|
16
16
|
# forge 未導入ユーザーが実行系機能に触れた瞬間は AlphaForge 導入意欲が
|
|
17
17
|
# 最も高い接点なので、インストール先への導線を必ず含める。
|
|
18
18
|
FORGE_NOT_FOUND_MESSAGE = (
|
|
19
|
-
"forge コマンドが見つかりません。AlphaForge を導入してください"
|
|
20
|
-
" / forge command not found in PATH. Install AlphaForge"
|
|
19
|
+
"alpha-forge コマンドが見つかりません。AlphaForge を導入してください"
|
|
20
|
+
" / alpha-forge command not found in PATH. Install AlphaForge"
|
|
21
21
|
" — https://alforgelabs.com"
|
|
22
22
|
)
|
|
23
23
|
|
|
@@ -32,9 +32,47 @@ FORGE_SUBCOMMAND_NOT_FOUND_MESSAGE = (
|
|
|
32
32
|
)
|
|
33
33
|
|
|
34
34
|
|
|
35
|
+
# forge は導入済みだが EULA に同意していないケース。forge は同意プロンプトを
|
|
36
|
+
# 対話で出すが、visualizer は stdin=DEVNULL で起動するため応答できず Click が
|
|
37
|
+
# Abort する(stderr は "Aborted!" のみで、利用者には何も伝わらない)。EULA は
|
|
38
|
+
# 改訂のたびに再同意が必要になるので、初回導入時だけの問題ではない。
|
|
39
|
+
FORGE_EULA_NOT_ACCEPTED_MESSAGE = (
|
|
40
|
+
"AlphaForge の使用許諾契約(EULA)に同意していないため実行できません。"
|
|
41
|
+
"ターミナルで `alpha-forge system doctor` を実行し、EULA に同意してください"
|
|
42
|
+
" / AlphaForge EULA has not been accepted. Run `alpha-forge system doctor`"
|
|
43
|
+
" in a terminal and accept the EULA"
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
#: AlphaForge CLI の実行ファイル名。v0.5.0 で ``forge`` から改名され、インストーラ
|
|
48
|
+
#: (alforge-labs/install.sh)は旧 ``forge`` symlink を削除する。旧名へのフォール
|
|
49
|
+
#: バックは張らない — ``forge`` は Foundry(Solidity 開発ツール)のコマンド名でも
|
|
50
|
+
#: あり、無関係なバイナリへ backtest 引数を渡す事故のほうが重い。
|
|
51
|
+
FORGE_EXE_NAME = "alpha-forge"
|
|
52
|
+
|
|
53
|
+
|
|
35
54
|
def resolve_forge_exe() -> str | None:
|
|
36
|
-
"""PATH 上の forge 実行ファイルを解決する(無ければ None)。"""
|
|
37
|
-
return shutil.which(
|
|
55
|
+
"""PATH 上の alpha-forge 実行ファイルを解決する(無ければ None)。"""
|
|
56
|
+
return shutil.which(FORGE_EXE_NAME)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def translate_forge_failure(stdout: str, stderr: str) -> str | None:
|
|
60
|
+
"""forge の失敗出力を、利用者が次の一歩を踏める案内へ変換する。
|
|
61
|
+
|
|
62
|
+
該当パターンが無ければ ``None`` を返す。呼び出し側は生の出力にフォール
|
|
63
|
+
バックすること(ここで既定文言に丸めると、原因不明の失敗がすべて同じ
|
|
64
|
+
メッセージになり調査できなくなる)。
|
|
65
|
+
|
|
66
|
+
stdout / stderr を両方受け取るのは、EULA プロンプトが rich パネルとして
|
|
67
|
+
stdout に出る一方、Click の "Aborted!" は stderr に出るため。どちらか
|
|
68
|
+
片方だけを見る実装では取りこぼす。
|
|
69
|
+
"""
|
|
70
|
+
haystack = f"{stdout}\n{stderr}".lower()
|
|
71
|
+
if "eula" in haystack:
|
|
72
|
+
return FORGE_EULA_NOT_ACCEPTED_MESSAGE
|
|
73
|
+
if "no such command" in haystack:
|
|
74
|
+
return FORGE_SUBCOMMAND_NOT_FOUND_MESSAGE
|
|
75
|
+
return None
|
|
38
76
|
|
|
39
77
|
|
|
40
78
|
def build_forge_env(forge_cfg: ForgeConfig) -> dict[str, str]:
|
|
@@ -34,6 +34,7 @@ from alpha_visualizer.services.forge_cli import (
|
|
|
34
34
|
mask_home,
|
|
35
35
|
parse_json_lenient,
|
|
36
36
|
resolve_forge_exe,
|
|
37
|
+
translate_forge_failure,
|
|
37
38
|
)
|
|
38
39
|
|
|
39
40
|
logger = logging.getLogger(__name__)
|
|
@@ -629,10 +630,17 @@ class JobManager:
|
|
|
629
630
|
await self._finish(record, "cancelled", returncode=proc.returncode)
|
|
630
631
|
return
|
|
631
632
|
|
|
633
|
+
stdout_text = stdout_buf.decode("utf-8", errors="replace")
|
|
634
|
+
|
|
632
635
|
if proc.returncode != 0:
|
|
636
|
+
# 既知の失敗(EULA 未同意等)は次の一歩を示す案内に変換する。
|
|
637
|
+
# ログ(stderr 由来)だけでは EULA プロンプト本体を拾えないため、
|
|
638
|
+
# stdout も合わせて判定する。
|
|
633
639
|
_, tail = self.log_since(record.job_id, max(0, record.log_seq - 5))
|
|
640
|
+
log_text = "\n".join(tail)
|
|
634
641
|
error = (
|
|
635
|
-
|
|
642
|
+
translate_forge_failure(stdout_text, log_text)
|
|
643
|
+
or log_text
|
|
636
644
|
or "ジョブの実行に失敗しました / Job execution failed"
|
|
637
645
|
)
|
|
638
646
|
await self._finish(
|
|
@@ -640,7 +648,6 @@ class JobManager:
|
|
|
640
648
|
)
|
|
641
649
|
return
|
|
642
650
|
|
|
643
|
-
stdout_text = stdout_buf.decode("utf-8", errors="replace")
|
|
644
651
|
data = parse_json_lenient(stdout_text)
|
|
645
652
|
result = _compact_result(data) if data is not None else None
|
|
646
653
|
await self._finish(record, "succeeded", returncode=0, result=result)
|