alpha-visualizer 0.1.0__tar.gz → 0.2.0__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.2.0/.github/ISSUE_TEMPLATE/bug_report.yml +99 -0
- alpha_visualizer-0.2.0/.github/ISSUE_TEMPLATE/bug_report_ja.yml +99 -0
- alpha_visualizer-0.2.0/.github/ISSUE_TEMPLATE/config.yml +11 -0
- alpha_visualizer-0.2.0/.github/ISSUE_TEMPLATE/feature_request.yml +39 -0
- alpha_visualizer-0.2.0/.github/ISSUE_TEMPLATE/feature_request_ja.yml +39 -0
- alpha_visualizer-0.2.0/.github/PULL_REQUEST_TEMPLATE.md +58 -0
- alpha_visualizer-0.2.0/.github/codeql/README.md +55 -0
- alpha_visualizer-0.2.0/.github/codeql/codeql-config.yml +24 -0
- alpha_visualizer-0.2.0/.github/dependabot.yml +68 -0
- alpha_visualizer-0.2.0/.github/workflows/ci.yml +227 -0
- alpha_visualizer-0.2.0/.github/workflows/codeql.yml +46 -0
- alpha_visualizer-0.2.0/.github/workflows/lighthouse.yml +80 -0
- alpha_visualizer-0.2.0/.github/workflows/release.yml +57 -0
- alpha_visualizer-0.2.0/.gitignore +38 -0
- alpha_visualizer-0.2.0/.hypothesis/.gitignore +9 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/069853a4f8389a49 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/0a940b6ee0f389fc +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/0b2de83fbd38f835 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/0bf3463e8f4751b8 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/150dfae7c64cc789 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/152293548dfa1dc4 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/291dc4c40995bea6 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/312a7aaf12a1fd47 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/331e194303817b32 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/3c70931be7dd2e4e +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/3f7b61d4b4a660e1 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/4577b97f57a8a832 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/4a1c4d1532cab28e +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/508b282112ab038e +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/5c12d3619c3f5d5b +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/757b1f8305546439 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/7aec89cee7c5a592 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/7d3b67d825fc154a +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/7f90c9d611001617 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/828ed73d45fcee28 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/85f15eb28ea04389 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/89aaa48f251cd53d +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/8add761403393fca +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/96ca93165140d446 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/97982d8e7c8d4a95 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/a5b6e9cccb23f349 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/a636a4647020033d +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/ac5661ce57db0685 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/b5803992d2e76cf5 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/b76328deebb21ae6 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/b9ff5bcd3a53e3a7 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/c5349cb90ddc7968 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/c5f6cf064ffb412d +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/c9814af66187059c +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/cc9de77781f98ef2 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/da39a3ee5e6b4b0d +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/e44a457d795e56c2 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/ea2d606acbfff989 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/ee487c54cd5ca7dc +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/eed5e66c16ae84b8 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/f7c4a04c97c0daf8 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/fa443af6269a6e02 +4 -0
- alpha_visualizer-0.2.0/.hypothesis/constants/ff4517cbfe51fea1 +4 -0
- alpha_visualizer-0.2.0/CHANGELOG.md +103 -0
- alpha_visualizer-0.2.0/CLAUDE.md +195 -0
- alpha_visualizer-0.2.0/CODE_OF_CONDUCT.en.md +83 -0
- alpha_visualizer-0.2.0/CODE_OF_CONDUCT.md +83 -0
- alpha_visualizer-0.2.0/CONTRIBUTING.en.md +197 -0
- alpha_visualizer-0.2.0/CONTRIBUTING.md +229 -0
- alpha_visualizer-0.2.0/LICENSE +21 -0
- alpha_visualizer-0.2.0/PKG-INFO +142 -0
- alpha_visualizer-0.2.0/README.en.md +111 -0
- alpha_visualizer-0.2.0/README.md +111 -0
- alpha_visualizer-0.2.0/SECURITY.en.md +86 -0
- alpha_visualizer-0.2.0/SECURITY.md +86 -0
- alpha_visualizer-0.2.0/cliff.toml +43 -0
- alpha_visualizer-0.2.0/docs/adr/0001-pages-vs-screens.md +38 -0
- alpha_visualizer-0.2.0/docs/adr/0002-charts-visx-vs-components.md +43 -0
- alpha_visualizer-0.2.0/docs/adr/0003-openapi-typescript-codegen.md +84 -0
- alpha_visualizer-0.2.0/docs/adr/0004-condition-node-discriminated-union.md +93 -0
- alpha_visualizer-0.2.0/docs/lighthouse-ci.md +91 -0
- alpha_visualizer-0.2.0/docs/screenshots/en/browse.png +0 -0
- alpha_visualizer-0.2.0/docs/screenshots/en/compare.png +0 -0
- alpha_visualizer-0.2.0/docs/screenshots/en/detail.png +0 -0
- alpha_visualizer-0.2.0/docs/screenshots/en/ideas.png +0 -0
- alpha_visualizer-0.2.0/docs/screenshots/en/optimize.png +0 -0
- alpha_visualizer-0.2.0/docs/screenshots/en/strategy.png +0 -0
- alpha_visualizer-0.2.0/docs/screenshots/ja/browse.png +0 -0
- alpha_visualizer-0.2.0/docs/screenshots/ja/compare.png +0 -0
- alpha_visualizer-0.2.0/docs/screenshots/ja/detail.png +0 -0
- alpha_visualizer-0.2.0/docs/screenshots/ja/ideas.png +0 -0
- alpha_visualizer-0.2.0/docs/screenshots/ja/optimize.png +0 -0
- alpha_visualizer-0.2.0/docs/screenshots/ja/strategy.png +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/.gitignore +3 -0
- alpha_visualizer-0.2.0/frontend/.storybook/main.ts +16 -0
- alpha_visualizer-0.2.0/frontend/.storybook/preview.ts +31 -0
- alpha_visualizer-0.2.0/frontend/CLAUDE.md +62 -0
- alpha_visualizer-0.2.0/frontend/e2e/fixtures/README.md +41 -0
- alpha_visualizer-0.2.0/frontend/e2e/fixtures/forge/data/ideas/ideas.json +11 -0
- alpha_visualizer-0.2.0/frontend/e2e/fixtures/forge/data/results/backtest_results.db +0 -0
- alpha_visualizer-0.2.0/frontend/e2e/fixtures/forge/data/strategies/momo_breakout.json +44 -0
- alpha_visualizer-0.2.0/frontend/e2e/fixtures/forge/data/strategies/rsi_reversal.json +45 -0
- alpha_visualizer-0.2.0/frontend/e2e/fixtures/forge/data/strategies/sma_cross.json +44 -0
- alpha_visualizer-0.2.0/frontend/e2e/fixtures/forge/forge.yaml +9 -0
- alpha_visualizer-0.2.0/frontend/e2e/helpers/locators.ts +43 -0
- alpha_visualizer-0.2.0/frontend/e2e/samples/sample-fixture.spec.ts +44 -0
- alpha_visualizer-0.2.0/frontend/e2e/screenshots/capture.spec.ts +113 -0
- alpha_visualizer-0.2.0/frontend/e2e/specs/browse.spec.ts +33 -0
- alpha_visualizer-0.2.0/frontend/e2e/specs/compare.spec.ts +24 -0
- alpha_visualizer-0.2.0/frontend/e2e/specs/detail.spec.ts +39 -0
- alpha_visualizer-0.2.0/frontend/e2e/specs/i18n.spec.ts +23 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/eslint.config.js +8 -1
- alpha_visualizer-0.2.0/frontend/index.html +48 -0
- alpha_visualizer-0.2.0/frontend/openapi.json +2126 -0
- alpha_visualizer-0.2.0/frontend/package-lock.json +6387 -0
- alpha_visualizer-0.2.0/frontend/package.json +71 -0
- alpha_visualizer-0.2.0/frontend/playwright.config.ts +43 -0
- alpha_visualizer-0.2.0/frontend/playwright.samples.config.ts +48 -0
- alpha_visualizer-0.2.0/frontend/playwright.screenshots.config.ts +43 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/api/client.ts +21 -1
- alpha_visualizer-0.2.0/frontend/src/api/types.gen.ts +1495 -0
- alpha_visualizer-0.2.0/frontend/src/api/types.ts +371 -0
- alpha_visualizer-0.2.0/frontend/src/charts/visx/AnnualReturnsBarV.tsx +278 -0
- alpha_visualizer-0.2.0/frontend/src/charts/visx/CorrelationHeatmapV.tsx +289 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/charts/visx/EquityChartV.tsx +117 -26
- alpha_visualizer-0.2.0/frontend/src/charts/visx/MAEMFEScatterV.tsx +222 -0
- alpha_visualizer-0.2.0/frontend/src/charts/visx/OptimizeScatterV.tsx +263 -0
- alpha_visualizer-0.2.0/frontend/src/charts/visx/Sparkline.stories.tsx +39 -0
- alpha_visualizer-0.2.0/frontend/src/charts/visx/__tests__/EquityChartV.regime.test.ts +40 -0
- alpha_visualizer-0.2.0/frontend/src/charts/visx/regimeBands.ts +26 -0
- alpha_visualizer-0.2.0/frontend/src/components/CommandPalette.tsx +308 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/DetailToolbar.tsx +38 -15
- alpha_visualizer-0.2.0/frontend/src/components/MetricsSummaryBarV2.stories.tsx +55 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/MetricsSummaryBarV2.tsx +11 -6
- alpha_visualizer-0.2.0/frontend/src/components/RootLayout.tsx +38 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/SettingsToggles.tsx +58 -10
- alpha_visualizer-0.2.0/frontend/src/components/__tests__/CommandPalette.test.tsx +183 -0
- alpha_visualizer-0.2.0/frontend/src/components/__tests__/CorrelationHeatmap.test.tsx +88 -0
- alpha_visualizer-0.2.0/frontend/src/components/__tests__/responsive-styles.test.tsx +152 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/Heroline.tsx +1 -4
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/RunHistoryTab.tsx +1 -1
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/SavedViews.tsx +1 -1
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/StrategySlidePanel.tsx +8 -4
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/StrategyTable.tsx +28 -30
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/SymbolCard.tsx +3 -12
- alpha_visualizer-0.2.0/frontend/src/components/charts/AnnualReturnsBar.tsx +50 -0
- alpha_visualizer-0.2.0/frontend/src/components/charts/CorrelationHeatmap.tsx +119 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/DrawdownDetailChart.tsx +2 -48
- alpha_visualizer-0.2.0/frontend/src/components/charts/MAEMFEScatter.tsx +202 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/MonteCarloChart.tsx +11 -39
- alpha_visualizer-0.2.0/frontend/src/components/charts/OptimizeScatter.tsx +61 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/ReturnDistributionChart.tsx +10 -29
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/RollingMetricsChart.tsx +2 -11
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/VaRChart.tsx +6 -10
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/WFOTimeline.tsx +5 -16
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/WeekdayPerformanceChart.tsx +2 -37
- alpha_visualizer-0.2.0/frontend/src/components/live/LiveTab.tsx +343 -0
- alpha_visualizer-0.2.0/frontend/src/components/live/__tests__/LiveTab.test.tsx +161 -0
- alpha_visualizer-0.2.0/frontend/src/components/live/__tests__/format.test.ts +30 -0
- alpha_visualizer-0.2.0/frontend/src/components/live/format.ts +25 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/metrics/CompareTable.tsx +24 -6
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/metrics/MetricsGrid.tsx +43 -22
- alpha_visualizer-0.2.0/frontend/src/components/metrics/RegimeBreakdownCards.tsx +193 -0
- alpha_visualizer-0.2.0/frontend/src/components/metrics/__tests__/evaluateGood.test.ts +73 -0
- alpha_visualizer-0.2.0/frontend/src/components/metrics/evaluate.ts +19 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/trades/TradeTable.tsx +23 -0
- alpha_visualizer-0.2.0/frontend/src/design/primitives/OverflowMenu.tsx +136 -0
- alpha_visualizer-0.2.0/frontend/src/design/primitives/Pill.stories.tsx +21 -0
- alpha_visualizer-0.2.0/frontend/src/design/primitives/Stat.stories.tsx +38 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Toolbar.tsx +3 -2
- alpha_visualizer-0.2.0/frontend/src/design/primitives/__tests__/OverflowMenu.test.tsx +67 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/index.ts +2 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/tokens.css +141 -0
- alpha_visualizer-0.2.0/frontend/src/hooks/__tests__/useEquityViewport.test.ts +59 -0
- alpha_visualizer-0.2.0/frontend/src/hooks/__tests__/useFetchByKey.test.ts +97 -0
- alpha_visualizer-0.2.0/frontend/src/hooks/__tests__/useScrollRestoration.test.tsx +107 -0
- alpha_visualizer-0.2.0/frontend/src/hooks/__tests__/useStrategyList.test.tsx +193 -0
- alpha_visualizer-0.2.0/frontend/src/hooks/__tests__/useTheme.test.tsx +137 -0
- alpha_visualizer-0.2.0/frontend/src/hooks/useBacktestData.ts +88 -0
- alpha_visualizer-0.2.0/frontend/src/hooks/useDebounce.ts +12 -0
- alpha_visualizer-0.2.0/frontend/src/hooks/useEquityViewport.ts +74 -0
- alpha_visualizer-0.2.0/frontend/src/hooks/useFetchByKey.ts +86 -0
- alpha_visualizer-0.2.0/frontend/src/hooks/useIdeasList.ts +78 -0
- alpha_visualizer-0.2.0/frontend/src/hooks/useRecentStrategies.ts +63 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/hooks/useStrategyList.ts +167 -31
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/hooks/useTheme.ts +12 -1
- alpha_visualizer-0.2.0/frontend/src/i18n/__tests__/strings.test.ts +69 -0
- alpha_visualizer-0.2.0/frontend/src/i18n/strings.ts +94 -0
- alpha_visualizer-0.2.0/frontend/src/lib/__tests__/correlation.test.ts +111 -0
- alpha_visualizer-0.2.0/frontend/src/lib/__tests__/distribution.test.ts +77 -0
- alpha_visualizer-0.2.0/frontend/src/lib/__tests__/drawdown.test.ts +70 -0
- alpha_visualizer-0.2.0/frontend/src/lib/__tests__/format.test.ts +149 -0
- alpha_visualizer-0.2.0/frontend/src/lib/__tests__/monteCarlo.properties.test.ts +125 -0
- alpha_visualizer-0.2.0/frontend/src/lib/__tests__/monteCarlo.test.ts +72 -0
- alpha_visualizer-0.2.0/frontend/src/lib/__tests__/rolling.test.ts +45 -0
- alpha_visualizer-0.2.0/frontend/src/lib/__tests__/searchParams.test.ts +48 -0
- alpha_visualizer-0.2.0/frontend/src/lib/__tests__/searchStrategies.test.ts +92 -0
- alpha_visualizer-0.2.0/frontend/src/lib/__tests__/walkForward.test.ts +71 -0
- alpha_visualizer-0.2.0/frontend/src/lib/__tests__/weekday.test.ts +53 -0
- alpha_visualizer-0.2.0/frontend/src/lib/correlation.ts +94 -0
- alpha_visualizer-0.2.0/frontend/src/lib/csv.ts +67 -0
- alpha_visualizer-0.2.0/frontend/src/lib/distribution.ts +72 -0
- alpha_visualizer-0.2.0/frontend/src/lib/drawdown.ts +75 -0
- alpha_visualizer-0.2.0/frontend/src/lib/exportPng.ts +43 -0
- alpha_visualizer-0.2.0/frontend/src/lib/format.ts +81 -0
- alpha_visualizer-0.2.0/frontend/src/lib/monteCarlo.ts +155 -0
- alpha_visualizer-0.2.0/frontend/src/lib/rolling.ts +35 -0
- alpha_visualizer-0.2.0/frontend/src/lib/searchParams.ts +17 -0
- alpha_visualizer-0.2.0/frontend/src/lib/searchStrategies.ts +78 -0
- alpha_visualizer-0.2.0/frontend/src/lib/walkForward.ts +51 -0
- alpha_visualizer-0.2.0/frontend/src/lib/weekday.ts +54 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/mock/btData.ts +86 -3
- alpha_visualizer-0.2.0/frontend/src/pages/BrowsePage.tsx +60 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/pages/ComparePage.tsx +74 -56
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/pages/DetailPage.tsx +71 -10
- alpha_visualizer-0.2.0/frontend/src/pages/IdeasPage.tsx +57 -0
- alpha_visualizer-0.2.0/frontend/src/router.tsx +75 -0
- alpha_visualizer-0.2.0/frontend/src/screens/BacktestScreen.stories.tsx +35 -0
- alpha_visualizer-0.2.0/frontend/src/screens/BacktestScreen.tsx +310 -0
- alpha_visualizer-0.1.0/frontend/src/pages/BrowsePage.tsx → alpha_visualizer-0.2.0/frontend/src/screens/BrowseScreen.tsx +71 -66
- alpha_visualizer-0.2.0/frontend/src/screens/CompareScreen.stories.tsx +39 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/screens/CompareScreen.tsx +7 -2
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/screens/ISOOSScreen.tsx +2 -2
- alpha_visualizer-0.2.0/frontend/src/screens/IdeasScreen.stories.tsx +97 -0
- alpha_visualizer-0.2.0/frontend/src/screens/IdeasScreen.tsx +506 -0
- alpha_visualizer-0.2.0/frontend/src/screens/OptimizeScreen.stories.tsx +39 -0
- alpha_visualizer-0.2.0/frontend/src/screens/OptimizeScreen.tsx +239 -0
- alpha_visualizer-0.2.0/frontend/src/screens/StrategyScreen.tsx +351 -0
- alpha_visualizer-0.2.0/frontend/src/screens/WFOScreen.stories.tsx +43 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/screens/WFOScreen.tsx +1 -1
- alpha_visualizer-0.2.0/frontend/src/test-setup.ts +38 -0
- alpha_visualizer-0.2.0/frontend/tsconfig.e2e.json +18 -0
- alpha_visualizer-0.2.0/frontend/vite.config.ts +53 -0
- alpha_visualizer-0.2.0/lighthouserc.json +32 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/pyproject.toml +13 -2
- alpha_visualizer-0.2.0/release.sh +42 -0
- alpha_visualizer-0.2.0/samples/README.en.md +100 -0
- alpha_visualizer-0.2.0/samples/README.md +100 -0
- alpha_visualizer-0.2.0/samples/__init__.py +6 -0
- alpha_visualizer-0.2.0/samples/_generators/__init__.py +5 -0
- alpha_visualizer-0.2.0/samples/_generators/compatibility_matrix.py +174 -0
- alpha_visualizer-0.2.0/samples/_generators/ideas_defs.py +89 -0
- alpha_visualizer-0.2.0/samples/_generators/pseudo_backtest.py +287 -0
- alpha_visualizer-0.2.0/samples/_generators/pseudo_grid.py +154 -0
- alpha_visualizer-0.2.0/samples/_generators/pseudo_wfo.py +215 -0
- alpha_visualizer-0.2.0/samples/_generators/strategy_defs.py +299 -0
- alpha_visualizer-0.2.0/samples/_generators/synthetic_ohlcv.py +321 -0
- alpha_visualizer-0.2.0/samples/_generators/writers.py +185 -0
- alpha_visualizer-0.2.0/samples/build_samples.py +92 -0
- alpha_visualizer-0.2.0/samples/sample-forge/data/ideas/ideas.json +86 -0
- alpha_visualizer-0.2.0/samples/sample-forge/data/results/backtest_results.db +0 -0
- alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/bbands_breakout_v1.json +42 -0
- alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/donchian_turtle_v1.json +48 -0
- alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/ema_adx_macd_v1.json +62 -0
- alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/macd_crossover_v1.json +45 -0
- alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/range_reversion_v1.json +52 -0
- alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/rsi_reversion_v1.json +42 -0
- alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/sma_crossover_v1.json +49 -0
- alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/supertrend_adx_v1.json +51 -0
- alpha_visualizer-0.2.0/samples/sample-forge/forge.yaml +11 -0
- alpha_visualizer-0.2.0/scripts/generate_openapi.py +46 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/src/alpha_visualizer/__init__.py +1 -1
- alpha_visualizer-0.2.0/src/alpha_visualizer/app.py +141 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/src/alpha_visualizer/cli.py +48 -4
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/src/alpha_visualizer/db.py +14 -2
- alpha_visualizer-0.2.0/src/alpha_visualizer/dependencies.py +76 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/errors.py +40 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/src/alpha_visualizer/forge_config.py +8 -1
- alpha_visualizer-0.2.0/src/alpha_visualizer/log_sanitize.py +18 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/repositories/backtest_results.py +144 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/repositories/ideas.py +34 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/repositories/live.py +137 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/repositories/optimization.py +136 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/repositories/strategies.py +209 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/routers/ideas.py +42 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/routers/live.py +178 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/routers/optimize.py +152 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/routers/results.py +64 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/routers/run.py +85 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/routers/strategies.py +300 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/routers/wfo.py +110 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/__init__.py +1 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/ideas.py +23 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/live.py +107 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/optimize.py +36 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/results.py +136 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/strategies.py +107 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/wfo.py +46 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/services/__init__.py +4 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/services/backtest.py +486 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/services/live.py +185 -0
- alpha_visualizer-0.2.0/src/alpha_visualizer/services/walk_forward.py +236 -0
- alpha_visualizer-0.2.0/tests/__init__.py +0 -0
- alpha_visualizer-0.2.0/tests/conftest.py +98 -0
- alpha_visualizer-0.2.0/tests/factories.py +340 -0
- alpha_visualizer-0.2.0/tests/fixtures/build_e2e_fixture.py +442 -0
- alpha_visualizer-0.2.0/tests/repositories/__init__.py +0 -0
- alpha_visualizer-0.2.0/tests/repositories/test_backtest_results_repo.py +227 -0
- alpha_visualizer-0.2.0/tests/repositories/test_ideas_reader.py +56 -0
- alpha_visualizer-0.2.0/tests/repositories/test_live_repo.py +282 -0
- alpha_visualizer-0.2.0/tests/repositories/test_optimization_repo.py +236 -0
- alpha_visualizer-0.2.0/tests/repositories/test_strategies_repo.py +265 -0
- alpha_visualizer-0.2.0/tests/routers/__init__.py +0 -0
- alpha_visualizer-0.2.0/tests/routers/test_forge_yaml_integration.py +221 -0
- alpha_visualizer-0.2.0/tests/routers/test_ideas.py +43 -0
- alpha_visualizer-0.2.0/tests/routers/test_live.py +289 -0
- alpha_visualizer-0.2.0/tests/routers/test_optimize.py +202 -0
- alpha_visualizer-0.2.0/tests/routers/test_results.py +481 -0
- alpha_visualizer-0.2.0/tests/routers/test_run.py +55 -0
- alpha_visualizer-0.2.0/tests/routers/test_strategies.py +235 -0
- alpha_visualizer-0.2.0/tests/routers/test_wfo.py +148 -0
- alpha_visualizer-0.2.0/tests/samples/__init__.py +0 -0
- alpha_visualizer-0.2.0/tests/samples/test_pseudo_backtest.py +165 -0
- alpha_visualizer-0.2.0/tests/samples/test_pseudo_grid.py +114 -0
- alpha_visualizer-0.2.0/tests/samples/test_pseudo_wfo.py +129 -0
- alpha_visualizer-0.2.0/tests/samples/test_sample_forge.py +139 -0
- alpha_visualizer-0.2.0/tests/samples/test_strategy_defs.py +120 -0
- alpha_visualizer-0.2.0/tests/samples/test_synthetic_ohlcv.py +126 -0
- alpha_visualizer-0.2.0/tests/samples/test_writers.py +134 -0
- alpha_visualizer-0.2.0/tests/schemas/__init__.py +0 -0
- alpha_visualizer-0.2.0/tests/schemas/test_schemas.py +226 -0
- alpha_visualizer-0.2.0/tests/services/__init__.py +0 -0
- alpha_visualizer-0.2.0/tests/services/test_backtest.py +279 -0
- alpha_visualizer-0.2.0/tests/services/test_backtest_properties.py +218 -0
- alpha_visualizer-0.2.0/tests/services/test_live.py +220 -0
- alpha_visualizer-0.2.0/tests/services/test_wfo.py +243 -0
- alpha_visualizer-0.2.0/tests/test_app.py +230 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/tests/test_cli.py +2 -1
- alpha_visualizer-0.2.0/tests/test_db.py +31 -0
- alpha_visualizer-0.2.0/tests/test_dependencies.py +77 -0
- alpha_visualizer-0.2.0/tests/test_errors.py +47 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/tests/test_forge_config.py +28 -3
- alpha_visualizer-0.2.0/tests/test_log_sanitize.py +36 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/uv.lock +24 -1
- alpha_visualizer-0.1.0/.github/workflows/ci.yml +0 -30
- alpha_visualizer-0.1.0/.github/workflows/release.yml +0 -39
- alpha_visualizer-0.1.0/.gitignore +0 -25
- alpha_visualizer-0.1.0/CLAUDE.md +0 -152
- alpha_visualizer-0.1.0/PKG-INFO +0 -66
- alpha_visualizer-0.1.0/README.md +0 -39
- alpha_visualizer-0.1.0/frontend/index.html +0 -32
- alpha_visualizer-0.1.0/frontend/package-lock.json +0 -3403
- alpha_visualizer-0.1.0/frontend/package.json +0 -45
- alpha_visualizer-0.1.0/frontend/src/api/types.ts +0 -141
- alpha_visualizer-0.1.0/frontend/src/components/RootLayout.tsx +0 -5
- alpha_visualizer-0.1.0/frontend/src/components/charts/MAEMFEScatter.tsx +0 -321
- alpha_visualizer-0.1.0/frontend/src/hooks/useBacktestData.ts +0 -149
- alpha_visualizer-0.1.0/frontend/src/i18n/strings.ts +0 -9
- alpha_visualizer-0.1.0/frontend/src/router.tsx +0 -17
- alpha_visualizer-0.1.0/frontend/src/screens/BacktestScreen.tsx +0 -164
- alpha_visualizer-0.1.0/frontend/vite.config.ts +0 -30
- alpha_visualizer-0.1.0/src/alpha_visualizer/app.py +0 -73
- alpha_visualizer-0.1.0/src/alpha_visualizer/routers/ideas.py +0 -57
- alpha_visualizer-0.1.0/src/alpha_visualizer/routers/results.py +0 -352
- alpha_visualizer-0.1.0/src/alpha_visualizer/routers/strategies.py +0 -272
- alpha_visualizer-0.1.0/src/alpha_visualizer/routers/wfo.py +0 -126
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/index-16K3BxVS.css +0 -1
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/index-dB6krL5g.js +0 -11
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/index-dB6krL5g.js.map +0 -1
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-BLrFJfvD.woff +0 -0
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-iW8qmuJY.woff2 +0 -0
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-BFXNXuvF.woff2 +0 -0
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-pobXraBK.woff +0 -0
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-BgSTtRxb.woff2 +0 -0
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-D7bG6gX1.woff +0 -0
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DMD1h6_f.woff +0 -0
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DouSKlru.woff2 +0 -0
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/favicon.svg +0 -1
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/icons.svg +0 -24
- alpha_visualizer-0.1.0/src/alpha_visualizer/static/index.html +0 -33
- alpha_visualizer-0.1.0/tests/conftest.py +0 -17
- alpha_visualizer-0.1.0/tests/test_app.py +0 -102
- alpha_visualizer-0.1.0/tests/test_routers.py +0 -381
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/.agents/skills/source-command-audit-licenses/SKILL.md +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/.agents/skills/source-command-pre-release/SKILL.md +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/.claude/commands/audit-licenses.md +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/.claude/commands/pre-release.md +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/.codex/hooks.json +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/AGENTS.md +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/THIRDPARTY_LICENSES.txt +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/.npmrc +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/README.md +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/THIRDPARTY_FONTS.md +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/public/favicon.svg +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/public/icons.svg +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/charts/visx/CompareEquityV.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/charts/visx/DrawdownChartV.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/charts/visx/MonthlyHeatmapV.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/charts/visx/Sparkline.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/StrategyHero.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/CompareFloatingBar.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/FilterBar.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/GroupByToggle.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/SymbolAtlas.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/metrics/ISOOSMetrics.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/metrics/SignalQualityBadge.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/nav.ts +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/constants/metricDefinitions.ts +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/contexts/DashboardContext.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/contexts/dashboardConstants.ts +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/a11y.css +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Button.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Card.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Chip.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Divider.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/KeyValue.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Pill.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/SectionHeader.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Stat.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/TabBar.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/useChartTheme.ts +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/hooks/useScrollRestoration.ts +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/hooks/useSparklineCache.ts +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/hooks/useSymbolStats.ts +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/lib/assetClass.ts +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/main.tsx +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/tsconfig.app.json +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/tsconfig.json +0 -0
- {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/tsconfig.node.json +0 -0
- {alpha_visualizer-0.1.0/src/alpha_visualizer/routers → alpha_visualizer-0.2.0/src/alpha_visualizer/repositories}/__init__.py +0 -0
- {alpha_visualizer-0.1.0/tests → alpha_visualizer-0.2.0/src/alpha_visualizer/routers}/__init__.py +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
name: 🐛 Bug Report (English)
|
|
2
|
+
description: Report a reproducible bug to help us improve alpha-visualizer.
|
|
3
|
+
title: "[Bug]: "
|
|
4
|
+
labels: ["bug", "needs-triage"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Thanks for taking the time to file a bug report! Please fill out the sections below.
|
|
10
|
+
Before submitting, please [search existing issues](https://github.com/alforge-labs/alpha-visualizer/issues) to avoid duplicates.
|
|
11
|
+
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: description
|
|
14
|
+
attributes:
|
|
15
|
+
label: What happened?
|
|
16
|
+
description: A clear and concise description of the bug.
|
|
17
|
+
placeholder: When I run `vis serve`, ...
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
|
|
21
|
+
- type: textarea
|
|
22
|
+
id: reproduction
|
|
23
|
+
attributes:
|
|
24
|
+
label: Steps to reproduce
|
|
25
|
+
description: Minimal steps to reproduce the issue.
|
|
26
|
+
placeholder: |
|
|
27
|
+
1. Run `vis serve --forge-dir /path/to/data`
|
|
28
|
+
2. Open browser at http://127.0.0.1:8000/browse
|
|
29
|
+
3. Click on strategy "X"
|
|
30
|
+
4. See error
|
|
31
|
+
validations:
|
|
32
|
+
required: true
|
|
33
|
+
|
|
34
|
+
- type: textarea
|
|
35
|
+
id: expected
|
|
36
|
+
attributes:
|
|
37
|
+
label: Expected behavior
|
|
38
|
+
description: What did you expect to happen?
|
|
39
|
+
validations:
|
|
40
|
+
required: true
|
|
41
|
+
|
|
42
|
+
- type: input
|
|
43
|
+
id: version
|
|
44
|
+
attributes:
|
|
45
|
+
label: alpha-visualizer version
|
|
46
|
+
description: Output of `vis --version` or the value in pyproject.toml.
|
|
47
|
+
placeholder: "0.1.1"
|
|
48
|
+
validations:
|
|
49
|
+
required: true
|
|
50
|
+
|
|
51
|
+
- type: dropdown
|
|
52
|
+
id: os
|
|
53
|
+
attributes:
|
|
54
|
+
label: Operating System
|
|
55
|
+
options:
|
|
56
|
+
- macOS
|
|
57
|
+
- Linux
|
|
58
|
+
- Windows
|
|
59
|
+
- Other
|
|
60
|
+
validations:
|
|
61
|
+
required: true
|
|
62
|
+
|
|
63
|
+
- type: input
|
|
64
|
+
id: python-version
|
|
65
|
+
attributes:
|
|
66
|
+
label: Python version
|
|
67
|
+
description: Output of `python --version`.
|
|
68
|
+
placeholder: "3.12.x"
|
|
69
|
+
validations:
|
|
70
|
+
required: true
|
|
71
|
+
|
|
72
|
+
- type: input
|
|
73
|
+
id: browser
|
|
74
|
+
attributes:
|
|
75
|
+
label: Browser (if frontend issue)
|
|
76
|
+
placeholder: "Chrome 132 / Firefox 134 / Safari 18"
|
|
77
|
+
|
|
78
|
+
- type: textarea
|
|
79
|
+
id: logs
|
|
80
|
+
attributes:
|
|
81
|
+
label: Logs / error output
|
|
82
|
+
description: Paste any relevant logs, stack traces, or browser console errors.
|
|
83
|
+
render: shell
|
|
84
|
+
|
|
85
|
+
- type: textarea
|
|
86
|
+
id: additional
|
|
87
|
+
attributes:
|
|
88
|
+
label: Additional context
|
|
89
|
+
description: Anything else that might help us understand the problem.
|
|
90
|
+
|
|
91
|
+
- type: checkboxes
|
|
92
|
+
id: confirm
|
|
93
|
+
attributes:
|
|
94
|
+
label: Pre-submit checklist
|
|
95
|
+
options:
|
|
96
|
+
- label: I have searched existing issues for duplicates
|
|
97
|
+
required: true
|
|
98
|
+
- label: I am running a supported version of alpha-visualizer
|
|
99
|
+
required: true
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
name: 🐛 バグ報告(日本語)
|
|
2
|
+
description: 再現可能なバグを報告して alpha-visualizer の改善にご協力ください。
|
|
3
|
+
title: "[Bug]: "
|
|
4
|
+
labels: ["bug", "needs-triage"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
バグ報告をいただきありがとうございます。以下の項目にご記入ください。
|
|
10
|
+
提出前に [既存の Issue](https://github.com/alforge-labs/alpha-visualizer/issues) を検索し、重複を避けてください。
|
|
11
|
+
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: description
|
|
14
|
+
attributes:
|
|
15
|
+
label: 何が起きましたか?
|
|
16
|
+
description: バグの内容を簡潔に説明してください。
|
|
17
|
+
placeholder: vis serve を実行すると...
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
|
|
21
|
+
- type: textarea
|
|
22
|
+
id: reproduction
|
|
23
|
+
attributes:
|
|
24
|
+
label: 再現手順
|
|
25
|
+
description: 最小限の再現手順をご記入ください。
|
|
26
|
+
placeholder: |
|
|
27
|
+
1. `vis serve --forge-dir /path/to/data` を実行
|
|
28
|
+
2. ブラウザで http://127.0.0.1:8000/browse を開く
|
|
29
|
+
3. 戦略 "X" をクリック
|
|
30
|
+
4. エラーが表示される
|
|
31
|
+
validations:
|
|
32
|
+
required: true
|
|
33
|
+
|
|
34
|
+
- type: textarea
|
|
35
|
+
id: expected
|
|
36
|
+
attributes:
|
|
37
|
+
label: 期待する動作
|
|
38
|
+
description: 本来どうなるべきだと考えていますか?
|
|
39
|
+
validations:
|
|
40
|
+
required: true
|
|
41
|
+
|
|
42
|
+
- type: input
|
|
43
|
+
id: version
|
|
44
|
+
attributes:
|
|
45
|
+
label: alpha-visualizer のバージョン
|
|
46
|
+
description: "`vis --version` の出力、または pyproject.toml の値。"
|
|
47
|
+
placeholder: "0.1.1"
|
|
48
|
+
validations:
|
|
49
|
+
required: true
|
|
50
|
+
|
|
51
|
+
- type: dropdown
|
|
52
|
+
id: os
|
|
53
|
+
attributes:
|
|
54
|
+
label: OS
|
|
55
|
+
options:
|
|
56
|
+
- macOS
|
|
57
|
+
- Linux
|
|
58
|
+
- Windows
|
|
59
|
+
- その他
|
|
60
|
+
validations:
|
|
61
|
+
required: true
|
|
62
|
+
|
|
63
|
+
- type: input
|
|
64
|
+
id: python-version
|
|
65
|
+
attributes:
|
|
66
|
+
label: Python バージョン
|
|
67
|
+
description: "`python --version` の出力。"
|
|
68
|
+
placeholder: "3.12.x"
|
|
69
|
+
validations:
|
|
70
|
+
required: true
|
|
71
|
+
|
|
72
|
+
- type: input
|
|
73
|
+
id: browser
|
|
74
|
+
attributes:
|
|
75
|
+
label: ブラウザ(フロントエンドの問題の場合)
|
|
76
|
+
placeholder: "Chrome 132 / Firefox 134 / Safari 18"
|
|
77
|
+
|
|
78
|
+
- type: textarea
|
|
79
|
+
id: logs
|
|
80
|
+
attributes:
|
|
81
|
+
label: ログ・エラー出力
|
|
82
|
+
description: 関連するログ、スタックトレース、ブラウザコンソールエラーを貼り付けてください。
|
|
83
|
+
render: shell
|
|
84
|
+
|
|
85
|
+
- type: textarea
|
|
86
|
+
id: additional
|
|
87
|
+
attributes:
|
|
88
|
+
label: 追加情報
|
|
89
|
+
description: 問題の理解に役立つ情報があればご記入ください。
|
|
90
|
+
|
|
91
|
+
- type: checkboxes
|
|
92
|
+
id: confirm
|
|
93
|
+
attributes:
|
|
94
|
+
label: 提出前チェックリスト
|
|
95
|
+
options:
|
|
96
|
+
- label: 既存 Issue を検索し重複がないことを確認した
|
|
97
|
+
required: true
|
|
98
|
+
- label: サポート対象バージョンの alpha-visualizer を使用している
|
|
99
|
+
required: true
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: 📖 Documentation / 公式ドキュメント
|
|
4
|
+
url: https://alforgelabs.com/ja/docs/alpha-visualizer/
|
|
5
|
+
about: Read the docs before opening an issue. / Issue を立てる前に公式ドキュメントを確認してください。
|
|
6
|
+
- name: 💬 Discussions
|
|
7
|
+
url: https://github.com/alforge-labs/alpha-visualizer/discussions
|
|
8
|
+
about: Ask questions or start a discussion. / 質問・議論はこちらから。
|
|
9
|
+
- name: 🛡️ Security vulnerability / セキュリティ脆弱性
|
|
10
|
+
url: https://github.com/alforge-labs/alpha-visualizer/security/advisories/new
|
|
11
|
+
about: Do NOT open a public issue. Use GitHub Security Advisories. / セキュリティ問題は public Issue ではなく Security Advisories で報告してください。
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: 💡 Feature Request (English)
|
|
2
|
+
description: Suggest an idea or enhancement for alpha-visualizer.
|
|
3
|
+
title: "[Feature]: "
|
|
4
|
+
labels: ["enhancement", "needs-triage"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Thanks for suggesting an enhancement! Please describe your idea below.
|
|
10
|
+
Search [existing issues](https://github.com/alforge-labs/alpha-visualizer/issues?q=is%3Aissue+label%3Aenhancement) first to avoid duplicates.
|
|
11
|
+
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: problem
|
|
14
|
+
attributes:
|
|
15
|
+
label: Problem / motivation
|
|
16
|
+
description: What problem does this feature solve? What is the use case?
|
|
17
|
+
placeholder: When I'm comparing 5+ strategies, I can't easily ...
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
|
|
21
|
+
- type: textarea
|
|
22
|
+
id: proposal
|
|
23
|
+
attributes:
|
|
24
|
+
label: Proposed solution
|
|
25
|
+
description: How would you like this to work? UI sketches, API mockups, sample code all welcome.
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
28
|
+
|
|
29
|
+
- type: textarea
|
|
30
|
+
id: alternatives
|
|
31
|
+
attributes:
|
|
32
|
+
label: Alternatives considered
|
|
33
|
+
description: Other approaches you've considered, if any.
|
|
34
|
+
|
|
35
|
+
- type: textarea
|
|
36
|
+
id: additional
|
|
37
|
+
attributes:
|
|
38
|
+
label: Additional context
|
|
39
|
+
description: Screenshots, links to similar features in other tools, etc.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: 💡 機能要望(日本語)
|
|
2
|
+
description: alpha-visualizer の改善案・新機能を提案してください。
|
|
3
|
+
title: "[Feature]: "
|
|
4
|
+
labels: ["enhancement", "needs-triage"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
ご提案ありがとうございます。アイデアの詳細をご記入ください。
|
|
10
|
+
提出前に [既存の Issue](https://github.com/alforge-labs/alpha-visualizer/issues?q=is%3Aissue+label%3Aenhancement) を検索し、重複を避けてください。
|
|
11
|
+
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: problem
|
|
14
|
+
attributes:
|
|
15
|
+
label: 解決したい課題・動機
|
|
16
|
+
description: この機能が解決する問題は何ですか?ユースケースを教えてください。
|
|
17
|
+
placeholder: 5戦略以上を比較する際に...
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
|
|
21
|
+
- type: textarea
|
|
22
|
+
id: proposal
|
|
23
|
+
attributes:
|
|
24
|
+
label: 提案する解決策
|
|
25
|
+
description: どのように動作してほしいか、UI スケッチ・API モック・サンプルコードなどあれば歓迎です。
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
28
|
+
|
|
29
|
+
- type: textarea
|
|
30
|
+
id: alternatives
|
|
31
|
+
attributes:
|
|
32
|
+
label: 検討した代替案
|
|
33
|
+
description: 他に検討したアプローチがあればご記入ください。
|
|
34
|
+
|
|
35
|
+
- type: textarea
|
|
36
|
+
id: additional
|
|
37
|
+
attributes:
|
|
38
|
+
label: 追加情報
|
|
39
|
+
description: スクリーンショット、他ツールでの類似機能へのリンクなど。
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
日本語ガイド: https://github.com/alforge-labs/alpha-visualizer/blob/main/CONTRIBUTING.md
|
|
3
|
+
English guide: https://github.com/alforge-labs/alpha-visualizer/blob/main/CONTRIBUTING.en.md
|
|
4
|
+
-->
|
|
5
|
+
|
|
6
|
+
## 概要 / Summary
|
|
7
|
+
|
|
8
|
+
<!--
|
|
9
|
+
この PR で何を変更したかを 1〜3 行で説明してください。
|
|
10
|
+
Briefly describe what this PR changes (1-3 lines).
|
|
11
|
+
-->
|
|
12
|
+
|
|
13
|
+
## 関連 Issue / Related Issue
|
|
14
|
+
|
|
15
|
+
<!--
|
|
16
|
+
Closes #123 のように記載してください(マージ時に自動で Issue がクローズされます)。
|
|
17
|
+
Use `Closes #123` to auto-close the related issue on merge.
|
|
18
|
+
-->
|
|
19
|
+
|
|
20
|
+
Closes #
|
|
21
|
+
|
|
22
|
+
## 変更内容 / Changes
|
|
23
|
+
|
|
24
|
+
<!--
|
|
25
|
+
- 主な変更点を箇条書きで
|
|
26
|
+
- Key changes as bullet points
|
|
27
|
+
-->
|
|
28
|
+
|
|
29
|
+
-
|
|
30
|
+
|
|
31
|
+
## テスト / Testing
|
|
32
|
+
|
|
33
|
+
<!--
|
|
34
|
+
- [x] 単体テストを追加・更新した / Added or updated unit tests
|
|
35
|
+
- [x] CI が緑 / CI is green
|
|
36
|
+
-->
|
|
37
|
+
|
|
38
|
+
- [ ] バックエンドテスト: `uv run pytest tests/ -v`
|
|
39
|
+
- [ ] バックエンド Lint: `uv run ruff check src/ tests/`
|
|
40
|
+
- [ ] フロントエンドテスト: `cd frontend && npm run test:ci`
|
|
41
|
+
- [ ] フロントエンド Lint: `cd frontend && npm run lint`
|
|
42
|
+
- [ ] フロントエンドビルド: `cd frontend && npm run build`
|
|
43
|
+
- [ ] E2E(UI 変更時): `cd frontend && npm run e2e`
|
|
44
|
+
- [ ] スクリーンショット再撮影(UI 変更時): `cd frontend && npm run screenshots`
|
|
45
|
+
|
|
46
|
+
## スクリーンショット / Screenshots
|
|
47
|
+
|
|
48
|
+
<!--
|
|
49
|
+
UI 変更がある場合、Before / After のスクリーンショットを貼ってください。
|
|
50
|
+
For UI changes, paste before/after screenshots.
|
|
51
|
+
-->
|
|
52
|
+
|
|
53
|
+
## チェックリスト / Checklist
|
|
54
|
+
|
|
55
|
+
- [ ] [CONTRIBUTING.md](../blob/main/CONTRIBUTING.md) を読んだ / Read CONTRIBUTING
|
|
56
|
+
- [ ] Conventional Commits 形式でコミットしている / Commits follow Conventional Commits
|
|
57
|
+
- [ ] 公開 API / CLI / 設定変更時は alforge-labs ドキュメントも更新 / Public API/CLI/config changes update alforge-labs docs
|
|
58
|
+
- [ ] 破壊的変更がある場合 PR 説明欄に明記 / Breaking changes are clearly noted
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# CodeQL 設定
|
|
2
|
+
|
|
3
|
+
このディレクトリは GitHub Actions の CodeQL ワークフロー
|
|
4
|
+
(`.github/workflows/codeql.yml`)から参照される設定を管理する。
|
|
5
|
+
|
|
6
|
+
## ファイル構成
|
|
7
|
+
|
|
8
|
+
- **`codeql-config.yml`** — メイン設定。クエリスイート・除外パス。
|
|
9
|
+
- **`README.md`** — 本ファイル。
|
|
10
|
+
|
|
11
|
+
## 採用しているクエリスイート
|
|
12
|
+
|
|
13
|
+
| Suite | 役割 |
|
|
14
|
+
|---|---|
|
|
15
|
+
| `security-and-quality` | 既定。コード品質 + セキュリティの幅広いチェック |
|
|
16
|
+
| `security-extended` | 高精度のセキュリティ強化クエリ(SQL injection / SSRF / path traversal / XSS 等) |
|
|
17
|
+
|
|
18
|
+
両方を `uses:` で並べることで、Quality 警告と高精度 Security 警告を併発する。
|
|
19
|
+
|
|
20
|
+
## 除外パス
|
|
21
|
+
|
|
22
|
+
`paths-ignore:` セクションで以下を除外:
|
|
23
|
+
|
|
24
|
+
- `src/alpha_visualizer/static/**` — Vite ビルド成果物(vendor 化された JS)
|
|
25
|
+
- `frontend/src/api/types.gen.ts` — `openapi-typescript` 自動生成
|
|
26
|
+
- `frontend/openapi.json` — FastAPI 自動生成スキーマ
|
|
27
|
+
- `frontend/e2e/fixtures/**` / `tests/fixtures/**` — テストフィクスチャ
|
|
28
|
+
|
|
29
|
+
## カスタム `.ql` クエリの追加方法(将来)
|
|
30
|
+
|
|
31
|
+
プロジェクト固有のパターン(例: `text("SELECT ..." + user_input)` 形式の生 SQL
|
|
32
|
+
注入、forge.db のパス注入など)をカスタムクエリで検出したい場合:
|
|
33
|
+
|
|
34
|
+
1. `.github/codeql/queries/` ディレクトリを作成
|
|
35
|
+
2. `qlpack.yml` を作成(言語と依存パックを宣言)
|
|
36
|
+
3. `MyCheck.ql` 等のクエリファイルを追加(CodeQL の QL 言語)
|
|
37
|
+
4. `codeql-config.yml` の `queries:` に
|
|
38
|
+
`- uses: ./.github/codeql/queries` を追加
|
|
39
|
+
|
|
40
|
+
> 参考: <https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/customizing-analysis-with-codeql-packs>
|
|
41
|
+
|
|
42
|
+
## ローカル動作確認
|
|
43
|
+
|
|
44
|
+
CodeQL CLI が手元にあれば以下で簡易検証可能:
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
codeql database create build/codeql-db \
|
|
48
|
+
--language=python --source-root=src
|
|
49
|
+
codeql database analyze build/codeql-db \
|
|
50
|
+
codeql/python-queries:codeql-suites/security-and-quality.qls \
|
|
51
|
+
codeql/python-queries:codeql-suites/security-extended.qls \
|
|
52
|
+
--format=sarif-latest --output=build/codeql.sarif
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
CI では `github/codeql-action/init@v3` がこれを自動化する。
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: alpha-visualizer CodeQL config
|
|
2
|
+
|
|
3
|
+
# 既定の `security-and-quality` に加えて `security-extended` も有効化する。
|
|
4
|
+
# `security-extended` は精度の高い高重要度クエリのみだが、デフォルトより
|
|
5
|
+
# 範囲が広い(SQL injection / SSRF / path traversal 等の疑わしい
|
|
6
|
+
# データフローもアラート対象になる)。
|
|
7
|
+
queries:
|
|
8
|
+
- uses: security-and-quality
|
|
9
|
+
- uses: security-extended
|
|
10
|
+
|
|
11
|
+
# 解析対象から除外するパス。
|
|
12
|
+
# - vendor 化された静的ビルド成果物 / フロントエンドの自動生成型
|
|
13
|
+
# - テストフィクスチャ(CodeQL のセキュリティ警告は production code に絞る)
|
|
14
|
+
paths-ignore:
|
|
15
|
+
- "src/alpha_visualizer/static/**"
|
|
16
|
+
- "frontend/src/api/types.gen.ts"
|
|
17
|
+
- "frontend/openapi.json"
|
|
18
|
+
- "frontend/e2e/fixtures/**"
|
|
19
|
+
- "tests/fixtures/**"
|
|
20
|
+
# tests/test_app.py は import 重複 / unused local 等の note アラートが多いが、
|
|
21
|
+
# テストの可読性優先で許容する(Issue #148 で triage 済み)。
|
|
22
|
+
- "tests/test_app.py"
|
|
23
|
+
- "**/__pycache__/**"
|
|
24
|
+
- "**/node_modules/**"
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
# Python パッケージ(uv が pyproject.toml + uv.lock を使うが、Dependabot は pip エコシステムとして扱う)
|
|
4
|
+
- package-ecosystem: "pip"
|
|
5
|
+
directory: "/"
|
|
6
|
+
schedule:
|
|
7
|
+
interval: "weekly"
|
|
8
|
+
day: "monday"
|
|
9
|
+
open-pull-requests-limit: 5
|
|
10
|
+
labels:
|
|
11
|
+
- "dependencies"
|
|
12
|
+
- "python"
|
|
13
|
+
commit-message:
|
|
14
|
+
prefix: "chore"
|
|
15
|
+
include: "scope"
|
|
16
|
+
|
|
17
|
+
# フロントエンド npm
|
|
18
|
+
- package-ecosystem: "npm"
|
|
19
|
+
directory: "/frontend"
|
|
20
|
+
schedule:
|
|
21
|
+
interval: "weekly"
|
|
22
|
+
day: "monday"
|
|
23
|
+
open-pull-requests-limit: 5
|
|
24
|
+
labels:
|
|
25
|
+
- "dependencies"
|
|
26
|
+
- "frontend"
|
|
27
|
+
commit-message:
|
|
28
|
+
prefix: "chore"
|
|
29
|
+
include: "scope"
|
|
30
|
+
groups:
|
|
31
|
+
react:
|
|
32
|
+
patterns:
|
|
33
|
+
- "react"
|
|
34
|
+
- "react-dom"
|
|
35
|
+
- "@types/react"
|
|
36
|
+
- "@types/react-dom"
|
|
37
|
+
visx:
|
|
38
|
+
patterns:
|
|
39
|
+
- "@visx/*"
|
|
40
|
+
eslint:
|
|
41
|
+
patterns:
|
|
42
|
+
- "eslint*"
|
|
43
|
+
- "@eslint/*"
|
|
44
|
+
- "typescript-eslint"
|
|
45
|
+
testing-library:
|
|
46
|
+
patterns:
|
|
47
|
+
- "@testing-library/*"
|
|
48
|
+
vitest:
|
|
49
|
+
patterns:
|
|
50
|
+
- "vitest"
|
|
51
|
+
- "@vitest/*"
|
|
52
|
+
storybook:
|
|
53
|
+
patterns:
|
|
54
|
+
- "storybook"
|
|
55
|
+
- "@storybook/*"
|
|
56
|
+
|
|
57
|
+
# GitHub Actions ワークフロー
|
|
58
|
+
- package-ecosystem: "github-actions"
|
|
59
|
+
directory: "/"
|
|
60
|
+
schedule:
|
|
61
|
+
interval: "weekly"
|
|
62
|
+
day: "monday"
|
|
63
|
+
labels:
|
|
64
|
+
- "dependencies"
|
|
65
|
+
- "ci"
|
|
66
|
+
commit-message:
|
|
67
|
+
prefix: "ci"
|
|
68
|
+
include: "scope"
|