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.
Files changed (418) hide show
  1. alpha_visualizer-0.2.0/.github/ISSUE_TEMPLATE/bug_report.yml +99 -0
  2. alpha_visualizer-0.2.0/.github/ISSUE_TEMPLATE/bug_report_ja.yml +99 -0
  3. alpha_visualizer-0.2.0/.github/ISSUE_TEMPLATE/config.yml +11 -0
  4. alpha_visualizer-0.2.0/.github/ISSUE_TEMPLATE/feature_request.yml +39 -0
  5. alpha_visualizer-0.2.0/.github/ISSUE_TEMPLATE/feature_request_ja.yml +39 -0
  6. alpha_visualizer-0.2.0/.github/PULL_REQUEST_TEMPLATE.md +58 -0
  7. alpha_visualizer-0.2.0/.github/codeql/README.md +55 -0
  8. alpha_visualizer-0.2.0/.github/codeql/codeql-config.yml +24 -0
  9. alpha_visualizer-0.2.0/.github/dependabot.yml +68 -0
  10. alpha_visualizer-0.2.0/.github/workflows/ci.yml +227 -0
  11. alpha_visualizer-0.2.0/.github/workflows/codeql.yml +46 -0
  12. alpha_visualizer-0.2.0/.github/workflows/lighthouse.yml +80 -0
  13. alpha_visualizer-0.2.0/.github/workflows/release.yml +57 -0
  14. alpha_visualizer-0.2.0/.gitignore +38 -0
  15. alpha_visualizer-0.2.0/.hypothesis/.gitignore +9 -0
  16. alpha_visualizer-0.2.0/.hypothesis/constants/069853a4f8389a49 +4 -0
  17. alpha_visualizer-0.2.0/.hypothesis/constants/0a940b6ee0f389fc +4 -0
  18. alpha_visualizer-0.2.0/.hypothesis/constants/0b2de83fbd38f835 +4 -0
  19. alpha_visualizer-0.2.0/.hypothesis/constants/0bf3463e8f4751b8 +4 -0
  20. alpha_visualizer-0.2.0/.hypothesis/constants/150dfae7c64cc789 +4 -0
  21. alpha_visualizer-0.2.0/.hypothesis/constants/152293548dfa1dc4 +4 -0
  22. alpha_visualizer-0.2.0/.hypothesis/constants/291dc4c40995bea6 +4 -0
  23. alpha_visualizer-0.2.0/.hypothesis/constants/312a7aaf12a1fd47 +4 -0
  24. alpha_visualizer-0.2.0/.hypothesis/constants/331e194303817b32 +4 -0
  25. alpha_visualizer-0.2.0/.hypothesis/constants/3c70931be7dd2e4e +4 -0
  26. alpha_visualizer-0.2.0/.hypothesis/constants/3f7b61d4b4a660e1 +4 -0
  27. alpha_visualizer-0.2.0/.hypothesis/constants/4577b97f57a8a832 +4 -0
  28. alpha_visualizer-0.2.0/.hypothesis/constants/4a1c4d1532cab28e +4 -0
  29. alpha_visualizer-0.2.0/.hypothesis/constants/508b282112ab038e +4 -0
  30. alpha_visualizer-0.2.0/.hypothesis/constants/5c12d3619c3f5d5b +4 -0
  31. alpha_visualizer-0.2.0/.hypothesis/constants/757b1f8305546439 +4 -0
  32. alpha_visualizer-0.2.0/.hypothesis/constants/7aec89cee7c5a592 +4 -0
  33. alpha_visualizer-0.2.0/.hypothesis/constants/7d3b67d825fc154a +4 -0
  34. alpha_visualizer-0.2.0/.hypothesis/constants/7f90c9d611001617 +4 -0
  35. alpha_visualizer-0.2.0/.hypothesis/constants/828ed73d45fcee28 +4 -0
  36. alpha_visualizer-0.2.0/.hypothesis/constants/85f15eb28ea04389 +4 -0
  37. alpha_visualizer-0.2.0/.hypothesis/constants/89aaa48f251cd53d +4 -0
  38. alpha_visualizer-0.2.0/.hypothesis/constants/8add761403393fca +4 -0
  39. alpha_visualizer-0.2.0/.hypothesis/constants/96ca93165140d446 +4 -0
  40. alpha_visualizer-0.2.0/.hypothesis/constants/97982d8e7c8d4a95 +4 -0
  41. alpha_visualizer-0.2.0/.hypothesis/constants/a5b6e9cccb23f349 +4 -0
  42. alpha_visualizer-0.2.0/.hypothesis/constants/a636a4647020033d +4 -0
  43. alpha_visualizer-0.2.0/.hypothesis/constants/ac5661ce57db0685 +4 -0
  44. alpha_visualizer-0.2.0/.hypothesis/constants/b5803992d2e76cf5 +4 -0
  45. alpha_visualizer-0.2.0/.hypothesis/constants/b76328deebb21ae6 +4 -0
  46. alpha_visualizer-0.2.0/.hypothesis/constants/b9ff5bcd3a53e3a7 +4 -0
  47. alpha_visualizer-0.2.0/.hypothesis/constants/c5349cb90ddc7968 +4 -0
  48. alpha_visualizer-0.2.0/.hypothesis/constants/c5f6cf064ffb412d +4 -0
  49. alpha_visualizer-0.2.0/.hypothesis/constants/c9814af66187059c +4 -0
  50. alpha_visualizer-0.2.0/.hypothesis/constants/cc9de77781f98ef2 +4 -0
  51. alpha_visualizer-0.2.0/.hypothesis/constants/da39a3ee5e6b4b0d +4 -0
  52. alpha_visualizer-0.2.0/.hypothesis/constants/e44a457d795e56c2 +4 -0
  53. alpha_visualizer-0.2.0/.hypothesis/constants/ea2d606acbfff989 +4 -0
  54. alpha_visualizer-0.2.0/.hypothesis/constants/ee487c54cd5ca7dc +4 -0
  55. alpha_visualizer-0.2.0/.hypothesis/constants/eed5e66c16ae84b8 +4 -0
  56. alpha_visualizer-0.2.0/.hypothesis/constants/f7c4a04c97c0daf8 +4 -0
  57. alpha_visualizer-0.2.0/.hypothesis/constants/fa443af6269a6e02 +4 -0
  58. alpha_visualizer-0.2.0/.hypothesis/constants/ff4517cbfe51fea1 +4 -0
  59. alpha_visualizer-0.2.0/CHANGELOG.md +103 -0
  60. alpha_visualizer-0.2.0/CLAUDE.md +195 -0
  61. alpha_visualizer-0.2.0/CODE_OF_CONDUCT.en.md +83 -0
  62. alpha_visualizer-0.2.0/CODE_OF_CONDUCT.md +83 -0
  63. alpha_visualizer-0.2.0/CONTRIBUTING.en.md +197 -0
  64. alpha_visualizer-0.2.0/CONTRIBUTING.md +229 -0
  65. alpha_visualizer-0.2.0/LICENSE +21 -0
  66. alpha_visualizer-0.2.0/PKG-INFO +142 -0
  67. alpha_visualizer-0.2.0/README.en.md +111 -0
  68. alpha_visualizer-0.2.0/README.md +111 -0
  69. alpha_visualizer-0.2.0/SECURITY.en.md +86 -0
  70. alpha_visualizer-0.2.0/SECURITY.md +86 -0
  71. alpha_visualizer-0.2.0/cliff.toml +43 -0
  72. alpha_visualizer-0.2.0/docs/adr/0001-pages-vs-screens.md +38 -0
  73. alpha_visualizer-0.2.0/docs/adr/0002-charts-visx-vs-components.md +43 -0
  74. alpha_visualizer-0.2.0/docs/adr/0003-openapi-typescript-codegen.md +84 -0
  75. alpha_visualizer-0.2.0/docs/adr/0004-condition-node-discriminated-union.md +93 -0
  76. alpha_visualizer-0.2.0/docs/lighthouse-ci.md +91 -0
  77. alpha_visualizer-0.2.0/docs/screenshots/en/browse.png +0 -0
  78. alpha_visualizer-0.2.0/docs/screenshots/en/compare.png +0 -0
  79. alpha_visualizer-0.2.0/docs/screenshots/en/detail.png +0 -0
  80. alpha_visualizer-0.2.0/docs/screenshots/en/ideas.png +0 -0
  81. alpha_visualizer-0.2.0/docs/screenshots/en/optimize.png +0 -0
  82. alpha_visualizer-0.2.0/docs/screenshots/en/strategy.png +0 -0
  83. alpha_visualizer-0.2.0/docs/screenshots/ja/browse.png +0 -0
  84. alpha_visualizer-0.2.0/docs/screenshots/ja/compare.png +0 -0
  85. alpha_visualizer-0.2.0/docs/screenshots/ja/detail.png +0 -0
  86. alpha_visualizer-0.2.0/docs/screenshots/ja/ideas.png +0 -0
  87. alpha_visualizer-0.2.0/docs/screenshots/ja/optimize.png +0 -0
  88. alpha_visualizer-0.2.0/docs/screenshots/ja/strategy.png +0 -0
  89. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/.gitignore +3 -0
  90. alpha_visualizer-0.2.0/frontend/.storybook/main.ts +16 -0
  91. alpha_visualizer-0.2.0/frontend/.storybook/preview.ts +31 -0
  92. alpha_visualizer-0.2.0/frontend/CLAUDE.md +62 -0
  93. alpha_visualizer-0.2.0/frontend/e2e/fixtures/README.md +41 -0
  94. alpha_visualizer-0.2.0/frontend/e2e/fixtures/forge/data/ideas/ideas.json +11 -0
  95. alpha_visualizer-0.2.0/frontend/e2e/fixtures/forge/data/results/backtest_results.db +0 -0
  96. alpha_visualizer-0.2.0/frontend/e2e/fixtures/forge/data/strategies/momo_breakout.json +44 -0
  97. alpha_visualizer-0.2.0/frontend/e2e/fixtures/forge/data/strategies/rsi_reversal.json +45 -0
  98. alpha_visualizer-0.2.0/frontend/e2e/fixtures/forge/data/strategies/sma_cross.json +44 -0
  99. alpha_visualizer-0.2.0/frontend/e2e/fixtures/forge/forge.yaml +9 -0
  100. alpha_visualizer-0.2.0/frontend/e2e/helpers/locators.ts +43 -0
  101. alpha_visualizer-0.2.0/frontend/e2e/samples/sample-fixture.spec.ts +44 -0
  102. alpha_visualizer-0.2.0/frontend/e2e/screenshots/capture.spec.ts +113 -0
  103. alpha_visualizer-0.2.0/frontend/e2e/specs/browse.spec.ts +33 -0
  104. alpha_visualizer-0.2.0/frontend/e2e/specs/compare.spec.ts +24 -0
  105. alpha_visualizer-0.2.0/frontend/e2e/specs/detail.spec.ts +39 -0
  106. alpha_visualizer-0.2.0/frontend/e2e/specs/i18n.spec.ts +23 -0
  107. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/eslint.config.js +8 -1
  108. alpha_visualizer-0.2.0/frontend/index.html +48 -0
  109. alpha_visualizer-0.2.0/frontend/openapi.json +2126 -0
  110. alpha_visualizer-0.2.0/frontend/package-lock.json +6387 -0
  111. alpha_visualizer-0.2.0/frontend/package.json +71 -0
  112. alpha_visualizer-0.2.0/frontend/playwright.config.ts +43 -0
  113. alpha_visualizer-0.2.0/frontend/playwright.samples.config.ts +48 -0
  114. alpha_visualizer-0.2.0/frontend/playwright.screenshots.config.ts +43 -0
  115. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/api/client.ts +21 -1
  116. alpha_visualizer-0.2.0/frontend/src/api/types.gen.ts +1495 -0
  117. alpha_visualizer-0.2.0/frontend/src/api/types.ts +371 -0
  118. alpha_visualizer-0.2.0/frontend/src/charts/visx/AnnualReturnsBarV.tsx +278 -0
  119. alpha_visualizer-0.2.0/frontend/src/charts/visx/CorrelationHeatmapV.tsx +289 -0
  120. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/charts/visx/EquityChartV.tsx +117 -26
  121. alpha_visualizer-0.2.0/frontend/src/charts/visx/MAEMFEScatterV.tsx +222 -0
  122. alpha_visualizer-0.2.0/frontend/src/charts/visx/OptimizeScatterV.tsx +263 -0
  123. alpha_visualizer-0.2.0/frontend/src/charts/visx/Sparkline.stories.tsx +39 -0
  124. alpha_visualizer-0.2.0/frontend/src/charts/visx/__tests__/EquityChartV.regime.test.ts +40 -0
  125. alpha_visualizer-0.2.0/frontend/src/charts/visx/regimeBands.ts +26 -0
  126. alpha_visualizer-0.2.0/frontend/src/components/CommandPalette.tsx +308 -0
  127. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/DetailToolbar.tsx +38 -15
  128. alpha_visualizer-0.2.0/frontend/src/components/MetricsSummaryBarV2.stories.tsx +55 -0
  129. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/MetricsSummaryBarV2.tsx +11 -6
  130. alpha_visualizer-0.2.0/frontend/src/components/RootLayout.tsx +38 -0
  131. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/SettingsToggles.tsx +58 -10
  132. alpha_visualizer-0.2.0/frontend/src/components/__tests__/CommandPalette.test.tsx +183 -0
  133. alpha_visualizer-0.2.0/frontend/src/components/__tests__/CorrelationHeatmap.test.tsx +88 -0
  134. alpha_visualizer-0.2.0/frontend/src/components/__tests__/responsive-styles.test.tsx +152 -0
  135. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/Heroline.tsx +1 -4
  136. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/RunHistoryTab.tsx +1 -1
  137. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/SavedViews.tsx +1 -1
  138. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/StrategySlidePanel.tsx +8 -4
  139. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/StrategyTable.tsx +28 -30
  140. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/SymbolCard.tsx +3 -12
  141. alpha_visualizer-0.2.0/frontend/src/components/charts/AnnualReturnsBar.tsx +50 -0
  142. alpha_visualizer-0.2.0/frontend/src/components/charts/CorrelationHeatmap.tsx +119 -0
  143. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/DrawdownDetailChart.tsx +2 -48
  144. alpha_visualizer-0.2.0/frontend/src/components/charts/MAEMFEScatter.tsx +202 -0
  145. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/MonteCarloChart.tsx +11 -39
  146. alpha_visualizer-0.2.0/frontend/src/components/charts/OptimizeScatter.tsx +61 -0
  147. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/ReturnDistributionChart.tsx +10 -29
  148. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/RollingMetricsChart.tsx +2 -11
  149. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/VaRChart.tsx +6 -10
  150. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/WFOTimeline.tsx +5 -16
  151. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/charts/WeekdayPerformanceChart.tsx +2 -37
  152. alpha_visualizer-0.2.0/frontend/src/components/live/LiveTab.tsx +343 -0
  153. alpha_visualizer-0.2.0/frontend/src/components/live/__tests__/LiveTab.test.tsx +161 -0
  154. alpha_visualizer-0.2.0/frontend/src/components/live/__tests__/format.test.ts +30 -0
  155. alpha_visualizer-0.2.0/frontend/src/components/live/format.ts +25 -0
  156. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/metrics/CompareTable.tsx +24 -6
  157. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/metrics/MetricsGrid.tsx +43 -22
  158. alpha_visualizer-0.2.0/frontend/src/components/metrics/RegimeBreakdownCards.tsx +193 -0
  159. alpha_visualizer-0.2.0/frontend/src/components/metrics/__tests__/evaluateGood.test.ts +73 -0
  160. alpha_visualizer-0.2.0/frontend/src/components/metrics/evaluate.ts +19 -0
  161. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/trades/TradeTable.tsx +23 -0
  162. alpha_visualizer-0.2.0/frontend/src/design/primitives/OverflowMenu.tsx +136 -0
  163. alpha_visualizer-0.2.0/frontend/src/design/primitives/Pill.stories.tsx +21 -0
  164. alpha_visualizer-0.2.0/frontend/src/design/primitives/Stat.stories.tsx +38 -0
  165. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Toolbar.tsx +3 -2
  166. alpha_visualizer-0.2.0/frontend/src/design/primitives/__tests__/OverflowMenu.test.tsx +67 -0
  167. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/index.ts +2 -0
  168. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/tokens.css +141 -0
  169. alpha_visualizer-0.2.0/frontend/src/hooks/__tests__/useEquityViewport.test.ts +59 -0
  170. alpha_visualizer-0.2.0/frontend/src/hooks/__tests__/useFetchByKey.test.ts +97 -0
  171. alpha_visualizer-0.2.0/frontend/src/hooks/__tests__/useScrollRestoration.test.tsx +107 -0
  172. alpha_visualizer-0.2.0/frontend/src/hooks/__tests__/useStrategyList.test.tsx +193 -0
  173. alpha_visualizer-0.2.0/frontend/src/hooks/__tests__/useTheme.test.tsx +137 -0
  174. alpha_visualizer-0.2.0/frontend/src/hooks/useBacktestData.ts +88 -0
  175. alpha_visualizer-0.2.0/frontend/src/hooks/useDebounce.ts +12 -0
  176. alpha_visualizer-0.2.0/frontend/src/hooks/useEquityViewport.ts +74 -0
  177. alpha_visualizer-0.2.0/frontend/src/hooks/useFetchByKey.ts +86 -0
  178. alpha_visualizer-0.2.0/frontend/src/hooks/useIdeasList.ts +78 -0
  179. alpha_visualizer-0.2.0/frontend/src/hooks/useRecentStrategies.ts +63 -0
  180. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/hooks/useStrategyList.ts +167 -31
  181. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/hooks/useTheme.ts +12 -1
  182. alpha_visualizer-0.2.0/frontend/src/i18n/__tests__/strings.test.ts +69 -0
  183. alpha_visualizer-0.2.0/frontend/src/i18n/strings.ts +94 -0
  184. alpha_visualizer-0.2.0/frontend/src/lib/__tests__/correlation.test.ts +111 -0
  185. alpha_visualizer-0.2.0/frontend/src/lib/__tests__/distribution.test.ts +77 -0
  186. alpha_visualizer-0.2.0/frontend/src/lib/__tests__/drawdown.test.ts +70 -0
  187. alpha_visualizer-0.2.0/frontend/src/lib/__tests__/format.test.ts +149 -0
  188. alpha_visualizer-0.2.0/frontend/src/lib/__tests__/monteCarlo.properties.test.ts +125 -0
  189. alpha_visualizer-0.2.0/frontend/src/lib/__tests__/monteCarlo.test.ts +72 -0
  190. alpha_visualizer-0.2.0/frontend/src/lib/__tests__/rolling.test.ts +45 -0
  191. alpha_visualizer-0.2.0/frontend/src/lib/__tests__/searchParams.test.ts +48 -0
  192. alpha_visualizer-0.2.0/frontend/src/lib/__tests__/searchStrategies.test.ts +92 -0
  193. alpha_visualizer-0.2.0/frontend/src/lib/__tests__/walkForward.test.ts +71 -0
  194. alpha_visualizer-0.2.0/frontend/src/lib/__tests__/weekday.test.ts +53 -0
  195. alpha_visualizer-0.2.0/frontend/src/lib/correlation.ts +94 -0
  196. alpha_visualizer-0.2.0/frontend/src/lib/csv.ts +67 -0
  197. alpha_visualizer-0.2.0/frontend/src/lib/distribution.ts +72 -0
  198. alpha_visualizer-0.2.0/frontend/src/lib/drawdown.ts +75 -0
  199. alpha_visualizer-0.2.0/frontend/src/lib/exportPng.ts +43 -0
  200. alpha_visualizer-0.2.0/frontend/src/lib/format.ts +81 -0
  201. alpha_visualizer-0.2.0/frontend/src/lib/monteCarlo.ts +155 -0
  202. alpha_visualizer-0.2.0/frontend/src/lib/rolling.ts +35 -0
  203. alpha_visualizer-0.2.0/frontend/src/lib/searchParams.ts +17 -0
  204. alpha_visualizer-0.2.0/frontend/src/lib/searchStrategies.ts +78 -0
  205. alpha_visualizer-0.2.0/frontend/src/lib/walkForward.ts +51 -0
  206. alpha_visualizer-0.2.0/frontend/src/lib/weekday.ts +54 -0
  207. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/mock/btData.ts +86 -3
  208. alpha_visualizer-0.2.0/frontend/src/pages/BrowsePage.tsx +60 -0
  209. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/pages/ComparePage.tsx +74 -56
  210. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/pages/DetailPage.tsx +71 -10
  211. alpha_visualizer-0.2.0/frontend/src/pages/IdeasPage.tsx +57 -0
  212. alpha_visualizer-0.2.0/frontend/src/router.tsx +75 -0
  213. alpha_visualizer-0.2.0/frontend/src/screens/BacktestScreen.stories.tsx +35 -0
  214. alpha_visualizer-0.2.0/frontend/src/screens/BacktestScreen.tsx +310 -0
  215. alpha_visualizer-0.1.0/frontend/src/pages/BrowsePage.tsx → alpha_visualizer-0.2.0/frontend/src/screens/BrowseScreen.tsx +71 -66
  216. alpha_visualizer-0.2.0/frontend/src/screens/CompareScreen.stories.tsx +39 -0
  217. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/screens/CompareScreen.tsx +7 -2
  218. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/screens/ISOOSScreen.tsx +2 -2
  219. alpha_visualizer-0.2.0/frontend/src/screens/IdeasScreen.stories.tsx +97 -0
  220. alpha_visualizer-0.2.0/frontend/src/screens/IdeasScreen.tsx +506 -0
  221. alpha_visualizer-0.2.0/frontend/src/screens/OptimizeScreen.stories.tsx +39 -0
  222. alpha_visualizer-0.2.0/frontend/src/screens/OptimizeScreen.tsx +239 -0
  223. alpha_visualizer-0.2.0/frontend/src/screens/StrategyScreen.tsx +351 -0
  224. alpha_visualizer-0.2.0/frontend/src/screens/WFOScreen.stories.tsx +43 -0
  225. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/screens/WFOScreen.tsx +1 -1
  226. alpha_visualizer-0.2.0/frontend/src/test-setup.ts +38 -0
  227. alpha_visualizer-0.2.0/frontend/tsconfig.e2e.json +18 -0
  228. alpha_visualizer-0.2.0/frontend/vite.config.ts +53 -0
  229. alpha_visualizer-0.2.0/lighthouserc.json +32 -0
  230. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/pyproject.toml +13 -2
  231. alpha_visualizer-0.2.0/release.sh +42 -0
  232. alpha_visualizer-0.2.0/samples/README.en.md +100 -0
  233. alpha_visualizer-0.2.0/samples/README.md +100 -0
  234. alpha_visualizer-0.2.0/samples/__init__.py +6 -0
  235. alpha_visualizer-0.2.0/samples/_generators/__init__.py +5 -0
  236. alpha_visualizer-0.2.0/samples/_generators/compatibility_matrix.py +174 -0
  237. alpha_visualizer-0.2.0/samples/_generators/ideas_defs.py +89 -0
  238. alpha_visualizer-0.2.0/samples/_generators/pseudo_backtest.py +287 -0
  239. alpha_visualizer-0.2.0/samples/_generators/pseudo_grid.py +154 -0
  240. alpha_visualizer-0.2.0/samples/_generators/pseudo_wfo.py +215 -0
  241. alpha_visualizer-0.2.0/samples/_generators/strategy_defs.py +299 -0
  242. alpha_visualizer-0.2.0/samples/_generators/synthetic_ohlcv.py +321 -0
  243. alpha_visualizer-0.2.0/samples/_generators/writers.py +185 -0
  244. alpha_visualizer-0.2.0/samples/build_samples.py +92 -0
  245. alpha_visualizer-0.2.0/samples/sample-forge/data/ideas/ideas.json +86 -0
  246. alpha_visualizer-0.2.0/samples/sample-forge/data/results/backtest_results.db +0 -0
  247. alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/bbands_breakout_v1.json +42 -0
  248. alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/donchian_turtle_v1.json +48 -0
  249. alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/ema_adx_macd_v1.json +62 -0
  250. alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/macd_crossover_v1.json +45 -0
  251. alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/range_reversion_v1.json +52 -0
  252. alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/rsi_reversion_v1.json +42 -0
  253. alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/sma_crossover_v1.json +49 -0
  254. alpha_visualizer-0.2.0/samples/sample-forge/data/strategies/supertrend_adx_v1.json +51 -0
  255. alpha_visualizer-0.2.0/samples/sample-forge/forge.yaml +11 -0
  256. alpha_visualizer-0.2.0/scripts/generate_openapi.py +46 -0
  257. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/src/alpha_visualizer/__init__.py +1 -1
  258. alpha_visualizer-0.2.0/src/alpha_visualizer/app.py +141 -0
  259. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/src/alpha_visualizer/cli.py +48 -4
  260. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/src/alpha_visualizer/db.py +14 -2
  261. alpha_visualizer-0.2.0/src/alpha_visualizer/dependencies.py +76 -0
  262. alpha_visualizer-0.2.0/src/alpha_visualizer/errors.py +40 -0
  263. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/src/alpha_visualizer/forge_config.py +8 -1
  264. alpha_visualizer-0.2.0/src/alpha_visualizer/log_sanitize.py +18 -0
  265. alpha_visualizer-0.2.0/src/alpha_visualizer/repositories/backtest_results.py +144 -0
  266. alpha_visualizer-0.2.0/src/alpha_visualizer/repositories/ideas.py +34 -0
  267. alpha_visualizer-0.2.0/src/alpha_visualizer/repositories/live.py +137 -0
  268. alpha_visualizer-0.2.0/src/alpha_visualizer/repositories/optimization.py +136 -0
  269. alpha_visualizer-0.2.0/src/alpha_visualizer/repositories/strategies.py +209 -0
  270. alpha_visualizer-0.2.0/src/alpha_visualizer/routers/ideas.py +42 -0
  271. alpha_visualizer-0.2.0/src/alpha_visualizer/routers/live.py +178 -0
  272. alpha_visualizer-0.2.0/src/alpha_visualizer/routers/optimize.py +152 -0
  273. alpha_visualizer-0.2.0/src/alpha_visualizer/routers/results.py +64 -0
  274. alpha_visualizer-0.2.0/src/alpha_visualizer/routers/run.py +85 -0
  275. alpha_visualizer-0.2.0/src/alpha_visualizer/routers/strategies.py +300 -0
  276. alpha_visualizer-0.2.0/src/alpha_visualizer/routers/wfo.py +110 -0
  277. alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/__init__.py +1 -0
  278. alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/ideas.py +23 -0
  279. alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/live.py +107 -0
  280. alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/optimize.py +36 -0
  281. alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/results.py +136 -0
  282. alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/strategies.py +107 -0
  283. alpha_visualizer-0.2.0/src/alpha_visualizer/schemas/wfo.py +46 -0
  284. alpha_visualizer-0.2.0/src/alpha_visualizer/services/__init__.py +4 -0
  285. alpha_visualizer-0.2.0/src/alpha_visualizer/services/backtest.py +486 -0
  286. alpha_visualizer-0.2.0/src/alpha_visualizer/services/live.py +185 -0
  287. alpha_visualizer-0.2.0/src/alpha_visualizer/services/walk_forward.py +236 -0
  288. alpha_visualizer-0.2.0/tests/__init__.py +0 -0
  289. alpha_visualizer-0.2.0/tests/conftest.py +98 -0
  290. alpha_visualizer-0.2.0/tests/factories.py +340 -0
  291. alpha_visualizer-0.2.0/tests/fixtures/build_e2e_fixture.py +442 -0
  292. alpha_visualizer-0.2.0/tests/repositories/__init__.py +0 -0
  293. alpha_visualizer-0.2.0/tests/repositories/test_backtest_results_repo.py +227 -0
  294. alpha_visualizer-0.2.0/tests/repositories/test_ideas_reader.py +56 -0
  295. alpha_visualizer-0.2.0/tests/repositories/test_live_repo.py +282 -0
  296. alpha_visualizer-0.2.0/tests/repositories/test_optimization_repo.py +236 -0
  297. alpha_visualizer-0.2.0/tests/repositories/test_strategies_repo.py +265 -0
  298. alpha_visualizer-0.2.0/tests/routers/__init__.py +0 -0
  299. alpha_visualizer-0.2.0/tests/routers/test_forge_yaml_integration.py +221 -0
  300. alpha_visualizer-0.2.0/tests/routers/test_ideas.py +43 -0
  301. alpha_visualizer-0.2.0/tests/routers/test_live.py +289 -0
  302. alpha_visualizer-0.2.0/tests/routers/test_optimize.py +202 -0
  303. alpha_visualizer-0.2.0/tests/routers/test_results.py +481 -0
  304. alpha_visualizer-0.2.0/tests/routers/test_run.py +55 -0
  305. alpha_visualizer-0.2.0/tests/routers/test_strategies.py +235 -0
  306. alpha_visualizer-0.2.0/tests/routers/test_wfo.py +148 -0
  307. alpha_visualizer-0.2.0/tests/samples/__init__.py +0 -0
  308. alpha_visualizer-0.2.0/tests/samples/test_pseudo_backtest.py +165 -0
  309. alpha_visualizer-0.2.0/tests/samples/test_pseudo_grid.py +114 -0
  310. alpha_visualizer-0.2.0/tests/samples/test_pseudo_wfo.py +129 -0
  311. alpha_visualizer-0.2.0/tests/samples/test_sample_forge.py +139 -0
  312. alpha_visualizer-0.2.0/tests/samples/test_strategy_defs.py +120 -0
  313. alpha_visualizer-0.2.0/tests/samples/test_synthetic_ohlcv.py +126 -0
  314. alpha_visualizer-0.2.0/tests/samples/test_writers.py +134 -0
  315. alpha_visualizer-0.2.0/tests/schemas/__init__.py +0 -0
  316. alpha_visualizer-0.2.0/tests/schemas/test_schemas.py +226 -0
  317. alpha_visualizer-0.2.0/tests/services/__init__.py +0 -0
  318. alpha_visualizer-0.2.0/tests/services/test_backtest.py +279 -0
  319. alpha_visualizer-0.2.0/tests/services/test_backtest_properties.py +218 -0
  320. alpha_visualizer-0.2.0/tests/services/test_live.py +220 -0
  321. alpha_visualizer-0.2.0/tests/services/test_wfo.py +243 -0
  322. alpha_visualizer-0.2.0/tests/test_app.py +230 -0
  323. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/tests/test_cli.py +2 -1
  324. alpha_visualizer-0.2.0/tests/test_db.py +31 -0
  325. alpha_visualizer-0.2.0/tests/test_dependencies.py +77 -0
  326. alpha_visualizer-0.2.0/tests/test_errors.py +47 -0
  327. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/tests/test_forge_config.py +28 -3
  328. alpha_visualizer-0.2.0/tests/test_log_sanitize.py +36 -0
  329. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/uv.lock +24 -1
  330. alpha_visualizer-0.1.0/.github/workflows/ci.yml +0 -30
  331. alpha_visualizer-0.1.0/.github/workflows/release.yml +0 -39
  332. alpha_visualizer-0.1.0/.gitignore +0 -25
  333. alpha_visualizer-0.1.0/CLAUDE.md +0 -152
  334. alpha_visualizer-0.1.0/PKG-INFO +0 -66
  335. alpha_visualizer-0.1.0/README.md +0 -39
  336. alpha_visualizer-0.1.0/frontend/index.html +0 -32
  337. alpha_visualizer-0.1.0/frontend/package-lock.json +0 -3403
  338. alpha_visualizer-0.1.0/frontend/package.json +0 -45
  339. alpha_visualizer-0.1.0/frontend/src/api/types.ts +0 -141
  340. alpha_visualizer-0.1.0/frontend/src/components/RootLayout.tsx +0 -5
  341. alpha_visualizer-0.1.0/frontend/src/components/charts/MAEMFEScatter.tsx +0 -321
  342. alpha_visualizer-0.1.0/frontend/src/hooks/useBacktestData.ts +0 -149
  343. alpha_visualizer-0.1.0/frontend/src/i18n/strings.ts +0 -9
  344. alpha_visualizer-0.1.0/frontend/src/router.tsx +0 -17
  345. alpha_visualizer-0.1.0/frontend/src/screens/BacktestScreen.tsx +0 -164
  346. alpha_visualizer-0.1.0/frontend/vite.config.ts +0 -30
  347. alpha_visualizer-0.1.0/src/alpha_visualizer/app.py +0 -73
  348. alpha_visualizer-0.1.0/src/alpha_visualizer/routers/ideas.py +0 -57
  349. alpha_visualizer-0.1.0/src/alpha_visualizer/routers/results.py +0 -352
  350. alpha_visualizer-0.1.0/src/alpha_visualizer/routers/strategies.py +0 -272
  351. alpha_visualizer-0.1.0/src/alpha_visualizer/routers/wfo.py +0 -126
  352. alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/index-16K3BxVS.css +0 -1
  353. alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/index-dB6krL5g.js +0 -11
  354. alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/index-dB6krL5g.js.map +0 -1
  355. alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-BLrFJfvD.woff +0 -0
  356. alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/inter-tight-latin-400-normal-iW8qmuJY.woff2 +0 -0
  357. alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-BFXNXuvF.woff2 +0 -0
  358. alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/inter-tight-latin-500-normal-pobXraBK.woff +0 -0
  359. alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-BgSTtRxb.woff2 +0 -0
  360. alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/inter-tight-latin-600-normal-D7bG6gX1.woff +0 -0
  361. alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  362. alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  363. alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DMD1h6_f.woff +0 -0
  364. alpha_visualizer-0.1.0/src/alpha_visualizer/static/assets/source-serif-4-latin-600-normal-DouSKlru.woff2 +0 -0
  365. alpha_visualizer-0.1.0/src/alpha_visualizer/static/favicon.svg +0 -1
  366. alpha_visualizer-0.1.0/src/alpha_visualizer/static/icons.svg +0 -24
  367. alpha_visualizer-0.1.0/src/alpha_visualizer/static/index.html +0 -33
  368. alpha_visualizer-0.1.0/tests/conftest.py +0 -17
  369. alpha_visualizer-0.1.0/tests/test_app.py +0 -102
  370. alpha_visualizer-0.1.0/tests/test_routers.py +0 -381
  371. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/.agents/skills/source-command-audit-licenses/SKILL.md +0 -0
  372. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/.agents/skills/source-command-pre-release/SKILL.md +0 -0
  373. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/.claude/commands/audit-licenses.md +0 -0
  374. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/.claude/commands/pre-release.md +0 -0
  375. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/.codex/hooks.json +0 -0
  376. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/AGENTS.md +0 -0
  377. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/THIRDPARTY_LICENSES.txt +0 -0
  378. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/.npmrc +0 -0
  379. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/README.md +0 -0
  380. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/THIRDPARTY_FONTS.md +0 -0
  381. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/public/favicon.svg +0 -0
  382. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/public/icons.svg +0 -0
  383. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/charts/visx/CompareEquityV.tsx +0 -0
  384. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/charts/visx/DrawdownChartV.tsx +0 -0
  385. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/charts/visx/MonthlyHeatmapV.tsx +0 -0
  386. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/charts/visx/Sparkline.tsx +0 -0
  387. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/StrategyHero.tsx +0 -0
  388. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/CompareFloatingBar.tsx +0 -0
  389. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/FilterBar.tsx +0 -0
  390. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/GroupByToggle.tsx +0 -0
  391. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/browser/SymbolAtlas.tsx +0 -0
  392. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/metrics/ISOOSMetrics.tsx +0 -0
  393. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/metrics/SignalQualityBadge.tsx +0 -0
  394. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/components/nav.ts +0 -0
  395. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/constants/metricDefinitions.ts +0 -0
  396. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/contexts/DashboardContext.tsx +0 -0
  397. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/contexts/dashboardConstants.ts +0 -0
  398. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/a11y.css +0 -0
  399. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Button.tsx +0 -0
  400. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Card.tsx +0 -0
  401. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Chip.tsx +0 -0
  402. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Divider.tsx +0 -0
  403. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/KeyValue.tsx +0 -0
  404. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Pill.tsx +0 -0
  405. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/SectionHeader.tsx +0 -0
  406. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/Stat.tsx +0 -0
  407. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/primitives/TabBar.tsx +0 -0
  408. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/design/useChartTheme.ts +0 -0
  409. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/hooks/useScrollRestoration.ts +0 -0
  410. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/hooks/useSparklineCache.ts +0 -0
  411. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/hooks/useSymbolStats.ts +0 -0
  412. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/lib/assetClass.ts +0 -0
  413. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/src/main.tsx +0 -0
  414. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/tsconfig.app.json +0 -0
  415. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/tsconfig.json +0 -0
  416. {alpha_visualizer-0.1.0 → alpha_visualizer-0.2.0}/frontend/tsconfig.node.json +0 -0
  417. {alpha_visualizer-0.1.0/src/alpha_visualizer/routers → alpha_visualizer-0.2.0/src/alpha_visualizer/repositories}/__init__.py +0 -0
  418. {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"